diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/ModelControlWidget.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/ModelControlWidget.java Thu Mar 11 19:08:43 2010 +0200 @@ -0,0 +1,449 @@ +// 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.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; + +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.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; + +import com.symbian.smt.gui.Helper; +import com.symbian.smt.gui.PersistentDataStore; +import com.symbian.smt.gui.smtwidgets.ValidModelEvent.Type; + +public class ModelControlWidget extends Composite implements + ValidModelObservable { + private Combo levelOfDetailCombo; + private Combo printedDpiCombo; + private Button highlightCoreOsButton; + private Button suppressMouseOverEffectButton; + private Button fixItemSizeButton; + private Label fixedItemSizeLabel; + private Label suppressMouseOverEffectsLabel; + private Label printedDpiLabel; + + private ArrayList listeners = new ArrayList(); + + /** + * Creates a ModelControlWidget composite object + * + * @return void + */ + public ModelControlWidget(final Composite parent, int style) { + super(parent, style); + + this.setLayout(new FillLayout()); + + final Composite gridLayoutComposite = new Composite(this, SWT.NONE); + final GridLayout gridLayout = new GridLayout(); + gridLayout.verticalSpacing = 10; + gridLayout.horizontalSpacing = 20; + gridLayout.numColumns = 2; + gridLayoutComposite.setLayout(gridLayout); + + final Label levelOfDetailLabel = new Label(gridLayoutComposite, + SWT.NONE); + levelOfDetailLabel.setText("Level of Detail"); + + levelOfDetailCombo = new Combo(gridLayoutComposite, SWT.READ_ONLY); + GridData data = new GridData(200, SWT.DEFAULT); + data.horizontalAlignment = SWT.LEFT; + levelOfDetailCombo.setLayoutData(data); + levelOfDetailCombo.setItems(new String[] { "layer", "block", + "subblock", "collection", "component" }); + + printedDpiLabel = new Label(gridLayoutComposite, SWT.NONE); + printedDpiLabel.setText("Printed Resolution (DPI)"); + + printedDpiCombo = new Combo(gridLayoutComposite, SWT.NONE); + data = new GridData(50, SWT.DEFAULT); + data.horizontalAlignment = SWT.LEFT; + + printedDpiCombo.setLayoutData(data); + + final Label highlightCoreOs = new Label(gridLayoutComposite, SWT.NONE); + highlightCoreOs.setText("Highlight Core OS"); + + highlightCoreOsButton = new Button(gridLayoutComposite, SWT.CHECK); + + suppressMouseOverEffectsLabel = new Label(gridLayoutComposite, + SWT.NONE); + suppressMouseOverEffectsLabel.setText("Suppress Mouseover Effects"); + + suppressMouseOverEffectButton = new Button(gridLayoutComposite, + SWT.CHECK); + + fixedItemSizeLabel = new Label(gridLayoutComposite, SWT.NONE); + fixedItemSizeLabel.setText("Fix Items Size"); + + fixItemSizeButton = new Button(gridLayoutComposite, SWT.CHECK); + } + + /** + * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#addModelListener(ValidModelDefinedListener) + */ + public void addModelListener(ValidModelDefinedListener listener) { + synchronized (listeners) { + listeners.add(listener); + } + } + + private void checkDpi() { + if (listeners.size() > 0) { + Boolean modelDefined = true; + String message = ""; + Type type = Type.SUCCESS; + + String text = printedDpiCombo.getText().trim(); + + if (text.length() > 0) { + try { + Integer i = new Integer(text); + + if (i < 0) { + throw new NumberFormatException(); + } + } catch (NumberFormatException nfe) { + modelDefined = false; + message = "The DPI value must be a positive integer less than 2147483648 or empty."; + type = Type.ERROR; + } + } + + ValidModelEvent event = new ValidModelEvent(modelDefined, message, + type); + + for (ValidModelDefinedListener listener : listeners) { + listener.validModelDefined(event); + } + } + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the fixedItemSizeLabel + */ + public Label getFixedItemSizeLabel() { + return fixedItemSizeLabel; + } + + /** + * Returns a Boolean indicating if the Fix Items Size button has been + * selected + * + * @return Boolean + */ + public Boolean getFixItemSize() { + return fixItemSizeButton.getSelection(); + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the fixItemSizeButton + */ + public Button getFixItemSizeButton() { + return fixItemSizeButton; + } + + /** + * Returns a boolean value indicating if the Highlight Core OS button has + * been selected + * + * @return Boolean + */ + public Boolean getHighlightCoreOS() { + return highlightCoreOsButton.getSelection(); + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the highlightCoreOsButton + */ + public Button getHighlightCoreOsButton() { + return highlightCoreOsButton; + } + + /** + * Returns the level of detail + * + * @return String + */ + public String getLevelOfDetail() { + return levelOfDetailCombo.getText(); + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the levelOfDetailCombo + */ + public Combo getLevelOfDetailCombo() { + return levelOfDetailCombo; + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the listeners + */ + public ArrayList getListeners() { + return listeners; + } + + /** + * This method is for testing purposes only. + * + * @return + */ + public List getModelListeners() { + List l; + + synchronized (listeners) { + l = new ArrayList(listeners); + } + + return l; + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the printedDpiCombo + */ + public Combo getPrintedDpiCombo() { + return printedDpiCombo; + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the printedDpiLabel + */ + public Label getPrintedDpiLabel() { + return printedDpiLabel; + } + + /** + * Returns the printed DPI values. We need to take into account both the + * list items and the item that the user may have typed in. We also need to + * make sure that all items in the pulldown are sorted. + * + * @return String the list of all current DPI values, including the one that + * the user may have typed in. + */ + public String[] getPrintedDpis() { + Collection c = new HashSet(); + List items = Helper.toListOfStrings(printedDpiCombo.getItems()); + + for (String item : items) { + c.add(new Integer(item)); + } + + String text = printedDpiCombo.getText().trim(); + + if (text.length() > 0) { + if (!items.contains(text)) { + c.add(new Integer(text)); + } + } + + Integer[] allNumbers = new Integer[c.size()]; + List sortedNumbers = sort(c.toArray(allNumbers)); + List dpis = new ArrayList(); + + for (Integer number : sortedNumbers) { + dpis.add(number.toString()); + } + + return dpis.toArray(new String[dpis.size()]); + } + + /** + * Returns the selected printed DPI value + * + * @return String + */ + public String getSelectedPrintedDpi() { + return printedDpiCombo.getText(); + } + + /** + * Returns a boolean value indicating if the Suppress Mouseover Effects + * button has been selected + * + * @return Boolean + */ + public Boolean getSuppressMouseOverEffect() { + return suppressMouseOverEffectButton.getSelection(); + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the suppressMouseOverEffectButton + */ + public Button getSuppressMouseOverEffectButton() { + return suppressMouseOverEffectButton; + } + + /** + * This method is for PDE JUnit testing purposes. + * + * @return the suppressMouseOverEffectsLabel + */ + public Label getSuppressMouseOverEffectsLabel() { + return suppressMouseOverEffectsLabel; + } + + public void initialisePrintedDpi(PersistentDataStore store) { + printedDpiCombo.setItems(store.getPrintedDpis()); + printedDpiCombo.setText(store.getSelectedPrintedDpi()); + + printedDpiCombo.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + checkDpi(); + } + }); + } + + /** + * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#removeModelListener(ValidModelDefinedListener) + */ + public void removeModelListener(ValidModelDefinedListener listener) { + synchronized (listeners) { + listeners.remove(listener); + } + } + + /** + * Sets the value for the Fix Items Size button + * + * @param fixItemSize + * Boolean indicating if the Fix Items Size is to be used when + * generating the diagram + * @return void + */ + public void setFixItemSize(Boolean fixItemSize) { + fixItemSizeButton.setSelection(fixItemSize); + } + + /** + * Sets the value for the Highlight Core OS button + * + * @param HighlightCoreOS + * Boolean value indicating if the Core OS section is to be + * highlighted + * @return void + */ + public void setHighlightCoreOS(Boolean HighlightCoreOS) { + highlightCoreOsButton.setSelection(HighlightCoreOS); + } + + /** + * Sets the level of detail + * + * @param level + * The level of detail to set. + * @return void + */ + public void setLevelOfDetail(String level) { + String[] items = levelOfDetailCombo.getItems(); + int index = 0; + + for (String item : items) { + if (item.equals(level)) { + break; + } + index++; + } + + levelOfDetailCombo.select(index); + } + + /** + * Sets the printed DPI values + * + * @param dpi + * The DPI values to populate the combo box with. + * @return void + */ + public void setPrintedDpis(String[] dpis) { + printedDpiCombo.setItems(dpis); + } + + /** + * Sets the selected printed DPI value + * + * @param dpi + * The DPI value to set as selected. + * @return void + */ + public void setSelectedPrintedDpi(String dpi) { + String[] items = printedDpiCombo.getItems(); + int index = 0; + + for (String item : items) { + if (item.equals(dpi)) { + break; + } + + index++; + } + + printedDpiCombo.select(index); + } + + /** + * Sets the value for the Suppress Mouseover Effects button + * + * @param suppressMouseOverEffect + * Boolean value indicating if the Suppress Mouseover Effects is + * it be used when generating the diagram + * @return void + */ + public void setSuppressMouseOverEffect(Boolean suppressMouseOverEffect) { + suppressMouseOverEffectButton.setSelection(suppressMouseOverEffect); + } + + private List sort(Integer[] numbers) { + ArrayList al = new ArrayList(); + + for (int i = 0; i < numbers.length; i++) { + al.add(i, (numbers[i])); + } + + List list = Collections.synchronizedList(al); + Collections.sort(list); + + return list; + } + +}