diff -r 000000000000 -r 522a326673b6 sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/SystemDefinitionFilesWidget.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysmodelmgr/com.symbian.smt.gui/src/com/symbian/smt/gui/smtwidgets/SystemDefinitionFilesWidget.java Thu Mar 11 19:08:43 2010 +0200 @@ -0,0 +1,306 @@ +// 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.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; + +import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.PaintEvent; +import org.eclipse.swt.events.PaintListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.layout.RowData; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.List; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.PlatformUI; +import org.osgi.framework.Bundle; + +import com.symbian.smt.gui.Helper; +import com.symbian.smt.gui.Logger; +import com.symbian.smt.gui.smtwidgets.ValidModelEvent.Type; + +public class SystemDefinitionFilesWidget extends Composite implements + ValidModelObservable { + private List systemDefinitionFilesList = null; + private ArrayList listeners = new ArrayList(); + + /** + * Creates a SystemDefinitionFilesWidget composite object + * + * @return void + */ + public SystemDefinitionFilesWidget(final Composite parent, int style) { + super(parent, style); + + this.setLayout(new FillLayout()); + this.setRedraw(true); + + final Composite compositeMainGridLayout = new Composite(this, SWT.NONE); + final GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 2; + compositeMainGridLayout.setLayout(gridLayout); + + systemDefinitionFilesList = new List(compositeMainGridLayout, + SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); + systemDefinitionFilesList.setBackground(Display.getCurrent() + .getSystemColor(SWT.COLOR_WHITE)); + final GridData gd_list = new GridData(SWT.FILL, SWT.FILL, true, true); + gd_list.widthHint = 271; + systemDefinitionFilesList.setLayoutData(gd_list); + + systemDefinitionFilesList.addPaintListener(new PaintListener() { + public void paintControl(PaintEvent e) { + CheckRequiredInformationPresent(); + } + }); + + final Composite compositeUpDownButtons = new Composite( + compositeMainGridLayout, SWT.NONE); + final GridData gd_compositeUpDownButtons = new GridData(); + compositeUpDownButtons.setLayoutData(gd_compositeUpDownButtons); + compositeUpDownButtons.setLayout(new RowLayout(SWT.VERTICAL)); + + final Button upButton = new Button(compositeUpDownButtons, SWT.FLAT); + final RowData rd_upButton = new RowData(); + rd_upButton.height = 26; + rd_upButton.width = 26; + upButton.setLayoutData(rd_upButton); + upButton.setImage(getUpArrowImage()); + upButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(final SelectionEvent e) { + // Reorder the system definition files in the list by swapping + // the item + // selected with the item above + int index = systemDefinitionFilesList.getSelectionIndex(); + + if (index != -1 && index - 1 >= 0) { + String item = systemDefinitionFilesList.getItem(index); + String itemAbove = systemDefinitionFilesList + .getItem(index - 1); + + systemDefinitionFilesList.setItem(index - 1, item); + systemDefinitionFilesList.setItem(index, itemAbove); + + systemDefinitionFilesList.setSelection(index - 1); + + } + systemDefinitionFilesList.setFocus(); + } + }); + + final Button downButton = new Button(compositeUpDownButtons, SWT.FLAT); + final RowData rd_downButton = new RowData(); + rd_downButton.height = 26; + rd_downButton.width = 26; + downButton.setLayoutData(rd_downButton); + downButton.setImage(getDownArrowImage()); + downButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(final SelectionEvent e) { + // Reorder the system definition files in the list by swapping + // the item + // selected with the item below + int index = systemDefinitionFilesList.getSelectionIndex(); + + if (index != -1 + && index + 1 < systemDefinitionFilesList.getItemCount()) { // index + // is + // 0 + // relative, + // getItemCount + // is + // not + String item = systemDefinitionFilesList.getItem(index); + String itemBelow = systemDefinitionFilesList + .getItem(index + 1); + + systemDefinitionFilesList.setItem(index + 1, item); + systemDefinitionFilesList.setItem(index, itemBelow); + + systemDefinitionFilesList.setSelection(index + 1); + } + systemDefinitionFilesList.setFocus(); + } + }); + + final Composite compositeAddRemoveButtons = new Composite( + compositeMainGridLayout, SWT.NONE); + final GridData gd_compositeAddRemoveButtons = new GridData(SWT.CENTER, + SWT.CENTER, false, false, 2, 1); + compositeAddRemoveButtons.setLayoutData(gd_compositeAddRemoveButtons); + final RowLayout rowLayout = new RowLayout(); + rowLayout.spacing = 30; + compositeAddRemoveButtons.setLayout(rowLayout); + + final Button addSystemDefinitionButton = new Button( + compositeAddRemoveButtons, SWT.NONE); + + addSystemDefinitionButton.setText("Add System Definition File"); + addSystemDefinitionButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + java.util.List currentItems = Helper + .toListOfStrings(systemDefinitionFilesList.getItems()); + SystemDefinitionFileSelectionValidator validator = new SystemDefinitionFileSelectionValidator( + currentItems); + Shell shell = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getShell(); + String dialogTitle = "New System Definition File"; + String dialogMessage = "Enter the path or URL to the system definition file"; + String initialPath = ""; + String[] filterNames = { "*.xml" }; + XmlFileSelectionDialog dialog = new XmlFileSelectionDialog( + shell, dialogTitle, dialogMessage, initialPath, + filterNames, validator); + + dialog.open(); + + if (dialog.getReturnCode() == Dialog.CANCEL) { + return; + } + + String filename = dialog.getValue(); + + if (filename != null && (filename.length() != 0)) { + systemDefinitionFilesList.add(filename); + } + + systemDefinitionFilesList.setFocus(); + } + }); + + final Button removeSystemDefinitionButton = new Button( + compositeAddRemoveButtons, SWT.NONE); + removeSystemDefinitionButton.setText("Remove System Definition File"); + removeSystemDefinitionButton + .addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + int listIndex = systemDefinitionFilesList + .getSelectionIndex(); + + if (listIndex != -1) { + // Remove the system definition file from the list + systemDefinitionFilesList.remove(listIndex); + } + systemDefinitionFilesList.setFocus(); + } + }); + } + + /** + * 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 CheckRequiredInformationPresent() { + if (listeners.size() > 0) { + Boolean modelDefined = true; + String message = ""; + Type type = Type.SUCCESS; + + if (systemDefinitionFilesList.getItems().length == 0) { + modelDefined = false; + message = "You must specify at least 1 system definition xml file to proceed."; + type = Type.ERROR; + } + + ValidModelEvent event = new ValidModelEvent(modelDefined, message, + type); + + for (ValidModelDefinedListener listener : listeners) { + listener.validModelDefined(event); + } + } + } + + private Image getDownArrowImage() { + return new Image(getDisplay(), + getImageAsStream("icons/Arrow_down_icons_24px.png")); + } + + private InputStream getImageAsStream(String imageLocation) { + Bundle bundle = Platform.getBundle("com.symbian.smt.gui"); + Path path = new Path(imageLocation); + URL imageURL = FileLocator.find(bundle, path, null); + + try { + return imageURL.openStream(); + } catch (IOException e) { + Logger.log(e.getMessage(), e); + } + + return null; + } + + /** + * Returns a list of the system definition files + * + * @return String[] + */ + public String[] getSystemDefinitions() { + String[] sysDefs = systemDefinitionFilesList.getItems(); + return sysDefs; + } + + private Image getUpArrowImage() { + return new Image(getDisplay(), + getImageAsStream("icons/Arrow_Up_icons_24px.png")); + } + + /** + * @see com.symbian.smt.gui.smtwidgets.ValidModelObservable#removeModelListener(ValidModelDefinedListener) + */ + public void removeModelListener(ValidModelDefinedListener listener) { + synchronized (listeners) { + listeners.remove(listener); + } + } + + /** + * Sets the system definition files + * + * @param sysDefs + * A list containing system definition files + * @return void + */ + public void setSystemDefinitions(String[] sysDefs) { + systemDefinitionFilesList.setItems(sysDefs); + } +}