sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/BuildControlWidget.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/BuildControlWidget.java Thu Mar 11 19:08:43 2010 +0200
@@ -0,0 +1,212 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+package com.symbian.smt.gui.smtwidgets;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.symbian.smt.gui.smtwidgets.ValidModelEvent.Type;
+
+public class BuildControlWidget extends Composite implements
+ ValidModelObservable {
+ private Text outputFilenameText;
+ private List<ValidModelDefinedListener> listeners = new ArrayList<ValidModelDefinedListener>();
+
+ private Button warningLevel1, warningLevel2, warningLevel3, warningLevel4;
+
+ // private String message;
+
+ private static final Pattern validationPattern = Pattern
+ .compile("[^:*?<>\"/\\\\|]*");
+
+ /**
+ * Creates a BuildControlWidget composite object
+ *
+ * @return void
+ */
+ public BuildControlWidget(final Composite parent, int style,
+ boolean allOptions) {
+ super(parent, style);
+
+ setLayout(new FillLayout());
+
+ final Composite gridLayoutComposite = new Composite(this, SWT.NONE);
+ gridLayoutComposite.setLayout(new GridLayout(2, false));
+
+ final Label outputFilenameLabel = new Label(gridLayoutComposite,
+ SWT.NONE);
+ outputFilenameLabel.setText("Output filename");
+
+ outputFilenameText = new Text(gridLayoutComposite, SWT.BORDER);
+ outputFilenameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
+ true, false));
+
+ outputFilenameText.addModifyListener(new ModifyListener() {
+ public void modifyText(ModifyEvent e) {
+ checkIfValid();
+ }
+ });
+
+ if (allOptions) {
+ Group group = new Group(gridLayoutComposite, SWT.SHADOW_ETCHED_IN);
+ group.setText("Warning level");
+ group.setLayout(new RowLayout(SWT.VERTICAL));
+ group.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false,
+ 2, 1));
+
+ warningLevel1 = new Button(group, SWT.RADIO);
+ warningLevel1.setText("Errors only");
+ warningLevel2 = new Button(group, SWT.RADIO);
+ warningLevel2.setText("Errors and warnings");
+ warningLevel3 = new Button(group, SWT.RADIO);
+ warningLevel3.setText("Verbose");
+ warningLevel4 = new Button(group, SWT.RADIO);
+ warningLevel4.setText("Debug (note: will increase build times)");
+ }
+ }
+
+ /**
+ * Registers a listener object, which will be notified if the conditions for
+ * proceeding have been met.
+ *
+ * @param listener
+ * A ValidModelDefinedListener object
+ * @return void
+ * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#addModelListener(ValidModelDefinedListener)
+ */
+ public void addModelListener(ValidModelDefinedListener listener) {
+ listeners.add(listener);
+ }
+
+ // Check that at least one system definition file has been specified. Any
+ // registered
+ // model listeners are notified with a ValidModelEvent.
+ private void checkIfValid() {
+ if (listeners.size() > 0) {
+ String text = outputFilenameText.getText().trim();
+ String message = "";
+ boolean valid = true;
+ Type type = Type.SUCCESS;
+
+ if (text.length() == 0) {
+ valid = false;
+ message = "Filename must be specified.";
+ type = Type.ERROR;
+ }
+
+ Matcher matcher = validationPattern.matcher(text);
+ matcher.reset();
+
+ if (!matcher.matches()) {
+ valid = false;
+ message = "Forbidden characters in output filename.";
+ type = Type.ERROR;
+ }
+
+ ValidModelEvent event = new ValidModelEvent(valid, message, type);
+
+ for (ValidModelDefinedListener listener : listeners) {
+ listener.validModelDefined(event);
+ }
+ }
+ }
+
+ /**
+ * This method is for testing purposes only.
+ *
+ * @return
+ */
+ public List<ValidModelDefinedListener> getModelListeners() {
+ List<ValidModelDefinedListener> l;
+
+ synchronized (listeners) {
+ l = new ArrayList<ValidModelDefinedListener>(listeners);
+ }
+
+ return l;
+ }
+
+ public String getOutputFilename() {
+
+ String entry = outputFilenameText.getText().trim();
+
+ if (entry.length() > 0) {
+ if (!entry.endsWith(".svg")) {
+ return entry + ".svg";
+ }
+ }
+
+ return entry;
+ }
+
+ public String getWarningLevel() {
+ if (warningLevel1.getSelection()) {
+ return "1";
+ } else if (warningLevel2.getSelection()) {
+ return "2";
+ } else if (warningLevel3.getSelection()) {
+ return "3";
+ } else if (warningLevel4.getSelection()) {
+ return "4";
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#removeModelListener(ValidModelDefinedListener)
+ */
+ public void removeModelListener(ValidModelDefinedListener listener) {
+ synchronized (listeners) {
+ listeners.remove(listener);
+ }
+ }
+
+ public void setOutputFilename(String arg) {
+ outputFilenameText.setText(arg);
+ }
+
+ public void setWarningLevel(String arg) {
+ if ("1".equals(arg)) {
+ warningLevel1.setSelection(true);
+ } else if ("2".equals(arg)) {
+ warningLevel2.setSelection(true);
+ } else if ("3".equals(arg)) {
+ warningLevel3.setSelection(true);
+ } else if ("4".equals(arg)) {
+ warningLevel4.setSelection(true);
+ }
+ }
+
+ // public String getMessage() {
+ // return message;
+ // }
+}