diff -r 000000000000 -r 522a326673b6 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 listeners = new ArrayList(); + + 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 getModelListeners() { + List l; + + synchronized (listeners) { + l = new ArrayList(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; + // } +}