diff -r 000000000000 -r 61163b28edca imakerplugin/com.nokia.s60tools.imaker/src/com/nokia/s60tools/imaker/internal/viewers/PreferencesTab.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imakerplugin/com.nokia.s60tools.imaker/src/com/nokia/s60tools/imaker/internal/viewers/PreferencesTab.java Tue Jan 12 13:17:53 2010 -0600 @@ -0,0 +1,965 @@ +/* +* Copyright (c) 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.nokia.s60tools.imaker.internal.viewers; + +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.CTabFolder; +import org.eclipse.swt.custom.CTabItem; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +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.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.swt.widgets.Widget; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +import com.nokia.s60tools.imaker.IEnvironment; +import com.nokia.s60tools.imaker.IEnvironmentManager; +import com.nokia.s60tools.imaker.IIMakerWrapper; +import com.nokia.s60tools.imaker.IMakerPlugin; +import com.nokia.s60tools.imaker.IMakerKeyConstants; +import com.nokia.s60tools.imaker.IMakerUtils; +import com.nokia.s60tools.imaker.ImageFlasherHelpContextIDs; +import com.nokia.s60tools.imaker.Messages; +import com.nokia.s60tools.imaker.StatusHandler; +import com.nokia.s60tools.imaker.UIConfiguration; +import com.nokia.s60tools.imaker.UITarget; +import com.nokia.s60tools.imaker.UIVariable; +import com.nokia.s60tools.imaker.exceptions.IMakerCoreExecutionException; +import com.nokia.s60tools.imaker.exceptions.IMakerCoreNotFoundException; +import com.nokia.s60tools.imaker.internal.dialogs.ProductSelectionDialog; +import com.nokia.s60tools.imaker.internal.managers.ProjectManager; +import com.nokia.s60tools.imaker.internal.model.ImakerProperties; +import com.nokia.s60tools.imaker.internal.wizards.NewImakerFileWizard; +import com.nokia.s60tools.imaker.internal.wrapper.IMakerWrapperPreferences; + +public class PreferencesTab extends CTabItem { + public static PreferencesTab currentPreferencesTab = null; + +// private enum EDIT_STATE {EMPTY,EDITED,SAVED}; +// private enum NAME_STATE {UNNAMED,NAMED}; +// private EDIT_STATE editState = EDIT_STATE.EMPTY; +// private NAME_STATE nameState = NAME_STATE.UNNAMED; + + private Label labelVersion; + private Text textUserDefinedParameters; + private Button buttonSymbolFiles; + private Button buttonVerbose; + private Button buttonImageTypeRnd; + private Button buttonImageTypePrd; + private Button buttonImageTypeSubcon; + private Text textProduct; + private org.eclipse.swt.widgets.List listTarget; + private Button buttonSave; + private Button buttonSaveAs; + private IEnvironmentManager environmentManager = null; + private IEnvironment activeEnvironment = null; + private PreferenceSelectionListener pListener; + private String iMakerCoreVersion; + private String pluginVersion; + private String pluginDate; + private IMakerTabsViewer tabsViewer; + private org.eclipse.swt.widgets.List listSource; + + private IPropertyViewer tabDebug; + private SettingsTab settingsTab; + private PlatsimTab platsimTab; + + private ProjectManager projectManager; + + /** + * The only constructor + * @param parent + * @param style + * @param tabsViewer + */ + public PreferencesTab(CTabFolder parent, int style, IMakerTabsViewer tabsViewer) { + super(parent, style); + this.tabsViewer = tabsViewer; + environmentManager = tabsViewer.getEnvironmentManager(); + this.activeEnvironment = environmentManager.getActiveEnvironment(); + this.projectManager = tabsViewer.getProjectManager(); + + pListener = new PreferenceSelectionListener(); + iMakerCoreVersion = Messages.getString("PreferencesTab.32"); //$NON-NLS-1$ + + pluginVersion = + (String)Platform.getBundle(IMakerPlugin.PLUGIN_ID) //$NON-NLS-1$ + .getHeaders() + .get("Bundle-Version"); //$NON-NLS-1$ + pluginDate = + (String)Platform.getBundle(IMakerPlugin.PLUGIN_ID) //$NON-NLS-1$ + .getHeaders() + .get("Bundle-Date"); //$NON-NLS-1$ + + setControl(createControl(parent)); + } + +// public void displayCurrentProperties() { +// selectedProperties = workstation.getCurrentProperties(); +// if(selectedProperties!=null) { +// displayProperties(selectedProperties); +// if(!selectedProperties.getFilename().equals(ImakerProperties.CREATE_NEW)) { +// nameState = NAME_STATE.NAMED; +// changeEditState(EDIT_STATE.SAVED); +// } +// } +// setTextField(); +// } + + private Control createControl(CTabFolder parent) { + // Create Top composite in top of the parent composite + Composite container = new Composite(parent, SWT.FLAT); + + GridData topCompositeGridData = new GridData(SWT.FILL, SWT.FILL, true,false); + container.setLayoutData(topCompositeGridData); + GridLayout topCompositeGridLayout = createLayout(); + container.setLayout(topCompositeGridLayout); + + setHelpForControl(container,ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP); + + try { + addConfigurationControls(container); + addImageTypeSelectionControls(container); + addFlagSelectionControls(container); + addAdditionalParametersControl(container); + + addPreferencesControls(container); + addVersionInfoControls(container); + +// // Set up context help ids + setHelpForControl(textProduct, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_PRODUCT); + setHelpForControl(listSource, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_TARGETS); + setHelpForControl(listTarget, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_SELECTED_TARGETS); + setHelpForControl(buttonImageTypeRnd, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_IMAGE_TYPE); + setHelpForControl(buttonImageTypePrd, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_IMAGE_TYPE); + setHelpForControl(buttonImageTypeSubcon, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_IMAGE_TYPE); + setHelpForControl(buttonSymbolFiles, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_FLAGS); + setHelpForControl(buttonVerbose, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_FLAGS); + setHelpForControl(textUserDefinedParameters, ImageFlasherHelpContextIDs.IMAKERPLUGIN_HELP_ADDITIONAL_PARAMS); + } catch( Exception e ) { + //Creating preferences dialog caused an exception + e.printStackTrace(); + } + return container; + } + + private GridLayout createLayout() { + GridLayout topCompositeGridLayout = new GridLayout(2, false); + topCompositeGridLayout.horizontalSpacing = 5; // CodForChk_Dis_Magic + topCompositeGridLayout.verticalSpacing = 5; // CodForChk_Dis_Magic + topCompositeGridLayout.marginWidth = 3; + topCompositeGridLayout.marginHeight = 3; + return topCompositeGridLayout; + } + + private void addVersionInfoControls(Composite container) { + labelVersion = new Label(container, SWT.NONE); + labelVersion.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1)); + + String versionText = getVersionText(); + + labelVersion.setText(versionText + "\n" + iMakerCoreVersion); //$NON-NLS-1$ + labelVersion.setToolTipText(Messages.getString("PreferencesTab.20")); + } + + private String getVersionText() { + String versionText = "iMaker Extension: " + pluginVersion + ", " + pluginDate; + return versionText; + } + + /** + * @param container + */ + private void addPreferencesControls(Composite container) { + Composite controlGroup = new Composite(container, SWT.NONE); + GridLayout layoutAdditionalParameters = new GridLayout(4, true); + controlGroup.setLayout(layoutAdditionalParameters); + controlGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, + 2, 1)); + + buttonSave = new Button(controlGroup, SWT.PUSH); + buttonSave.setEnabled(true); + buttonSave.setText(Messages.getString("PreferencesTab.16")); //$NON-NLS-1$ + buttonSave.setToolTipText(Messages.getString("PreferencesTab.17")); //$NON-NLS-1$ + buttonSave.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 1, 1)); + buttonSave.addSelectionListener(pListener); + + buttonSaveAs = new Button(controlGroup, SWT.PUSH); + buttonSaveAs.setText(Messages.getString("PreferencesTab.18")); //$NON-NLS-1$ + buttonSaveAs.setToolTipText(Messages.getString("PreferencesTab.19")); //$NON-NLS-1$ + buttonSaveAs.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 1, 1)); + buttonSaveAs.addSelectionListener(pListener); + } + + private void addAdditionalParametersControl(Composite container) { + Label label = new Label(container, SWT.NONE); + label.setText(Messages.getString("PreferencesTab.14")); //$NON-NLS-1$ + + label.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false, + 1, 1)); + + Composite comp = new Composite(container,SWT.NONE); + RowLayout layout = new RowLayout(); + layout.type = SWT.HORIZONTAL; + layout.marginLeft = 0; + comp.setLayout(layout); + comp + .setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, + 1, 1)); + + // User defined parameters text + textUserDefinedParameters = new Text(comp, SWT.BORDER); + textUserDefinedParameters.setText(""); + textUserDefinedParameters.setToolTipText(Messages.getString("PreferencesTab.15")); + RowData rData = new RowData(); + rData.width = 335; + textUserDefinedParameters.setLayoutData(rData); + } + + private void addFlagSelectionControls(Composite container) { + Label label = new Label(container, SWT.NONE); + label.setText(Messages.getString("PreferencesTab.9")); //$NON-NLS-1$ + + label.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false, + 1, 1)); + Composite comp = new Composite(container,SWT.NONE); + RowLayout layout = new RowLayout(); + layout.type = SWT.VERTICAL; + layout.spacing = 2; + layout.marginLeft = 0; + comp.setLayout(layout); + comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, + 1, 1)); + + buttonSymbolFiles = new Button(comp, SWT.CHECK); + buttonSymbolFiles.setText(Messages.getString("PreferencesTab.10")); + buttonSymbolFiles.setToolTipText(Messages.getString("PreferencesTab.11")); + buttonVerbose = new Button(comp, SWT.CHECK); + buttonVerbose.setText(Messages.getString("PreferencesTab.12")); + buttonVerbose.setToolTipText(Messages.getString("PreferencesTab.13")); + } + + /** + * Adds image selection user interface components + * @param container + */ + private void addImageTypeSelectionControls(Composite container) { + Label label = new Label(container, SWT.NONE); + label.setText(Messages.getString("PreferencesTab.2")); //$NON-NLS-1$ + label.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false, + 1, 1)); + Composite comp = new Composite(container,SWT.NONE); + RowLayout layout = new RowLayout(); + layout.type = SWT.VERTICAL; + layout.spacing = 2; + layout.marginLeft = 0; + comp.setLayout(layout); + comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, + 1, 1)); + + // Rnd/Prd/Subcon + buttonImageTypeRnd = new Button(comp,SWT.RADIO); + buttonImageTypeRnd.setText(Messages.getString("PreferencesTab.3")); + buttonImageTypeRnd.setToolTipText(Messages.getString("PreferencesTab.4")); + buttonImageTypeRnd.setSelection(true); + buttonImageTypePrd = new Button(comp,SWT.RADIO); + buttonImageTypePrd.setText(Messages.getString("PreferencesTab.5")); + buttonImageTypePrd.setToolTipText(Messages.getString("PreferencesTab.6")); + buttonImageTypeSubcon = new Button(comp,SWT.RADIO); + buttonImageTypeSubcon.setText(Messages.getString("PreferencesTab.7")); + buttonImageTypeSubcon.setToolTipText(Messages.getString("PreferencesTab.8")); + } + + + /** + * Add configuration user interface components + * @param container + */ + private void addConfigurationControls(Composite container) { + Label label = null; + + label = new Label(container, SWT.NONE); + label.setText(Messages.getString("PreferencesTab.0")); //$NON-NLS-1$ + + // Product combo + createProductWidgets(container); + + // Target selection label + label = new Label(container, SWT.NONE); + label.setText(Messages.getString("PreferencesTab.1")); + label.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false, + 1, 1)); + + addTargetLists(container); + } + /** + * @param container + */ + private void createProductWidgets(Composite container) { + Composite product = new Composite(container,SWT.NONE); + product.setLayoutData(new GridData(SWT.BEGINNING, SWT.NONE, false, false, 1, 1)); + product.setLayout(new GridLayout(2, false)); + textProduct = new Text(product, SWT.BORDER); + textProduct.setText(""); + textProduct.setEditable(false); + GridData layoutData = new GridData(SWT.BEGINNING, SWT.CENTER, true, true, 1, 1); + layoutData.widthHint = 280; + textProduct.setLayoutData(layoutData); + + Button select = new Button(product,SWT.PUSH); + select.setText("&Change..."); + select.addSelectionListener(new SelectionListener() { + +// @Override + public void widgetSelected(SelectionEvent se) { + ProductSelectionDialog selectDialog = new ProductSelectionDialog(getControl().getShell(), + activeEnvironment); + boolean ret = selectDialog.displayDialog(); + if(ret) { + UIConfiguration config = selectDialog.getSelectedConfiguration(); + refreshProduct(config); + } + } + +// @Override + public void widgetDefaultSelected(SelectionEvent se) { + widgetSelected(se); + } + }); + select.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + } + + private void addTargetLists(Composite parent) { + Composite top = new Composite(parent,SWT.NONE); + GridLayout layout = new GridLayout(3, false); + layout.horizontalSpacing = 6; + layout.verticalSpacing = 1; + layout.marginWidth = 0; + layout.marginHeight = 0; + top.setLayout(layout); + top.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1)); + + listSource = createListComponent(top, "&All"); + listSource.addSelectionListener(new SelectionListener() { + +// @Override + public void widgetSelected(SelectionEvent se) { + String item = listSource.getItem(listSource.getSelectionIndex()); + UIConfiguration p = activeEnvironment.getCurrentProduct(); + listSource.setToolTipText(p.getTarget(item).getDescription()); + } + +// @Override + public void widgetDefaultSelected(SelectionEvent arg0) { + } + }); + createListButtons(top); + listTarget = createListComponent(top, "&Selected"); + listTarget.addSelectionListener(new SelectionListener() { + +// @Override + public void widgetSelected(SelectionEvent se) { + String item = listTarget.getItem(listTarget.getSelectionIndex()); + UIConfiguration p = activeEnvironment.getCurrentProduct(); + listTarget.setToolTipText(p.getTarget(item).getDescription()); + } + +// @Override + public void widgetDefaultSelected(SelectionEvent arg0) { + } + }); + } + + + private org.eclipse.swt.widgets.List createListComponent(Composite top, + String txt) { + Composite comp = new Composite(top,SWT.NONE); + GridLayout layout = new GridLayout(1, true); + layout.verticalSpacing = 1; + layout.marginWidth = 0; + layout.marginHeight = 0; + comp.setLayout(layout); + comp + .setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, + 1, 1)); + GridData gData; + Label label = new Label(comp,SWT.NONE); + label.setText(txt); + org.eclipse.swt.widgets.List list; + list = new org.eclipse.swt.widgets.List(comp, SWT.MULTI | SWT.V_SCROLL + | SWT.BORDER); + gData = new GridData(); + gData.widthHint = 132; + gData.heightHint = 132; + list.setLayoutData(gData); + return list; + } + + private void createListButtons(Composite top) { + Composite bComp = new Composite(top,SWT.NONE); + GridLayout layout = new GridLayout(1, true); + layout.marginWidth = 1; + layout.verticalSpacing = 1; + bComp.setLayout(layout); + bComp.setLayoutData(new GridData(SWT.NONE, SWT.CENTER, false, false, 1, + 1)); + Button button = new Button(bComp,SWT.PUSH); + button.setText(">"); + button.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + String[] selections = listSource.getSelection(); + addToListTarget(selections); + listSource.setToolTipText(""); + } + }); + + GridData gData = new GridData(); + gData.verticalAlignment = SWT.END; + button.setLayoutData(gData); + button = new Button(bComp,SWT.PUSH); + button.setText("<"); + button.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + String[] selections = listTarget.getSelection(); + addToListSource(selections); + listTarget.setToolTipText(""); + } + }); + gData = new GridData(); + gData.verticalAlignment = SWT.CENTER; + button.setLayoutData(gData); + } + + + private void moveItemsInList(org.eclipse.swt.widgets.List source, + org.eclipse.swt.widgets.List target, String[] items) { + List sourceItems = Arrays.asList(source.getItems()); + for (int i = 0; i < items.length; i++) { + String item = items[i]; + if(sourceItems.contains(item)) { + source.remove(item); + target.add(item); + } + } + } + + protected void addToListSource(String[] selections) { + moveItemsInList(listTarget, listSource, selections); + String[] items = listSource.getItems(); + Arrays.sort(items); + listSource.removeAll(); + listSource.setItems(items); + } + + protected void addToListTarget(String[] selections) { + UIConfiguration pr = activeEnvironment.getCurrentProduct(); + moveItemsInList(listSource, listTarget, selections); + for (int i = 0; i < selections.length; i++) { + String target = selections[i]; + UITarget tr = pr.getTarget(target); + if(tr.getSteps()==null) { + String targetSteps = activeEnvironment.getTargetSteps(target); + tr.setSteps(targetSteps); + } + } + } + + + private void setHelpForControl(Control container, String id) { + PlatformUI.getWorkbench().getHelpSystem().setHelp(container, id); + } + + private void resetAdditionalFields() { + buttonImageTypeRnd.setSelection(true); + buttonImageTypePrd.setSelection(false); + buttonImageTypeSubcon.setSelection(false); + buttonSymbolFiles.setSelection(false); + buttonVerbose.setSelection(false); + textUserDefinedParameters.setText(""); + } + + + private void loadConfigurations() throws InvocationTargetException { + try { + iMakerCoreVersion = activeEnvironment.getIMakerCoreVersion(); + + //check imaker version here + if(!verifyIMakerVersion()) { + String msg = Messages.getString("Error.3"); //$NON-NLS-1$ + String minVersion = Messages.getString("PreferencesTab.22"); //$NON-NLS-1$ + StatusHandler.handle(IStatus.ERROR,msg.replace("xxx", minVersion),null); //$NON-NLS-1$ + return; + } + fixVersionText(); + activeEnvironment.load(); + if(activeEnvironment.isLoaded()) { + UIConfiguration def = getDefaultConfig(); + if(def==null) { + def = activeEnvironment.getConfigurations().get(0); + } + refreshProduct(def); + } + } catch (IMakerCoreNotFoundException e) { + StatusHandler.handle(IStatus.ERROR,"iMaker Core was not found.",e); //$NON-NLS-1$ + return; + } catch (IMakerCoreExecutionException e) { + StatusHandler.handle(IStatus.ERROR,"An error has occurred while executing iMaker Core. The selected environment cannot be used with iMaker extension.",e); //$NON-NLS-1$ + return; + } + } + + /** + * @param environment + * @return + */ + private UIConfiguration getDefaultConfig() { + List configs; + try { + configs = activeEnvironment.getConfigurations(); + UIConfiguration ret = null; + for (UIConfiguration config : configs) { + if(config.isDefaultConfig()) { + ret = config; + break; + } + } + return ret; + } catch (InvocationTargetException e) { + return null; + } + } + + private void refreshProduct(UIConfiguration product) { + if(product==null) return; + textProduct.setText(product.getConfigurationName()); + textProduct.setData(product); + clearWidgets(); + activeEnvironment.setCurrentProduct(product); + + List targets = product.getFilteredTargets(); + if(targets!=null) { + for(UITarget target: targets) { + listSource.add(target.getName()); + } + } + settingsTab.setInput(product); + textProduct.setToolTipText(product.getFilePath()); + platsimTab.activate(product.isPlatsimConfiguration()); + } + + /** + * + */ + private void clearWidgets() { + listSource.removeAll(); + listTarget.removeAll(); + resetAdditionalFields(); + } + + private void fixVersionText() { + StringBuilder version = new StringBuilder(labelVersion.getText()); + int index = version.indexOf(Messages.getString("PreferencesTab.32")); //$NON-NLS-1$ + if(index != -1) { + version.replace(index, version.length(), Messages.getString("PreferencesTab.32") + " " + iMakerCoreVersion); + labelVersion.setText(version.toString()); + } + } + + + private boolean verifyIMakerVersion() { + String minVersion = Messages.getString("PreferencesTab.22"); //$NON-NLS-1$ + String curVersion = IMakerUtils.parseIMakerVersion(iMakerCoreVersion); + if(curVersion.compareTo(minVersion)>0) { + return true; + } + return false; + } + + private void savePreferencesToFile(String filePath) { + ImakerProperties uiValues = new ImakerProperties(); + uiValues.putAll(getUIValues()); + + UIConfiguration current = null; + current = activeEnvironment.getCurrentProduct(); + + if (filePath == null||filePath.equals(ProjectManager.NEW_ITEM)) { + IStructuredSelection selection = new StructuredSelection(tabsViewer + .getProjectManager().getProject()); + IWorkbench workbench = PlatformUI.getWorkbench(); + + NewImakerFileWizard wizard = new NewImakerFileWizard(uiValues, current, + this); + wizard.init(workbench, selection); + + WizardDialog dialog = new WizardDialog(workbench + .getActiveWorkbenchWindow().getShell(), wizard); + dialog.open(); + + if (wizard.isSaved()) { + IFile file = wizard.getFile(); + String loc = file.getLocation().toString(); + tabsViewer.populateConfigurations(loc); + } + } else { + IFile file = (IFile)projectManager.getImakerFile(new Path(filePath)); + uiValues.saveToFile(file); + } + } + + private Properties getUIValues() { + ImakerProperties prop = new ImakerProperties(); + try { + UIConfiguration config = (UIConfiguration) textProduct.getData(); + if(config!=null) { + addField(prop,IMakerKeyConstants.MAKEFILE,config.getFilePath()); + addField(prop,IMakerKeyConstants.PRODUCT,config.getMakeFileName()); + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < listTarget.getItemCount(); i++) { + sb.append(listTarget.getItem(i)); + if(i0) { + addField(prop,IMakerKeyConstants.TARGET_LIST,sb.toString()); + } + if(buttonImageTypePrd.getSelection()) { + addField(prop,IMakerKeyConstants.TYPE,Messages.getString("PreferencesTab.23")); //$NON-NLS-1$ + } else if(buttonImageTypeSubcon.getSelection()) { + addField(prop,IMakerKeyConstants.TYPE,Messages.getString("PreferencesTab.24")); //$NON-NLS-1$ + } else { + addField(prop,IMakerKeyConstants.TYPE,Messages.getString("PreferencesTab.25")); //$NON-NLS-1$ + } + if(buttonVerbose.getSelection()) { + addField(prop,IMakerKeyConstants.VERBOSE,Messages.getString("PreferencesTab.26")); //$NON-NLS-1$ + } + if(buttonSymbolFiles.getSelection()) { + addField(prop,IMakerKeyConstants.SYMBOLFILES,Messages.getString("PreferencesTab.27")); //$NON-NLS-1$ + } + addField(prop, IMakerKeyConstants.ADDITIONAL_PARAMETERS, + textUserDefinedParameters.getText()); + settingsTab.addChangedSettings(prop); + platsimTab.addToProperties(prop); + tabDebug.addToProperties(prop); + } catch(Exception e) { + + } + return prop; + } + + private void addField(Properties properties, String name, String value) { + if((name==null)||(name.equals(""))||(value==null)||(value.equals(""))) { //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + properties.setProperty(name, value); + } + + private void fillUIForm(ImakerProperties prop) throws InvocationTargetException { + String filePath = (String) prop.remove(IMakerKeyConstants.MAKEFILE); + if(filePath==null) return; + filePath = filePath.replaceAll("\\\\", "/"); + List configs = activeEnvironment.getConfigurations(); + for (UIConfiguration config : configs) { + if(config.getFilePath().equals(filePath)) { + refreshProduct(config); + break; + } + } + + String targets = (String) prop.remove(IMakerKeyConstants.TARGET_LIST); + if((targets!=null)&&!(targets.equals(""))) { //$NON-NLS-1$ + String[] tars = targets.split(" "); //$NON-NLS-1$ + addToListTarget(tars); + } + + String str = (String)prop.remove(IMakerKeyConstants.TYPE); + if(str!=null){ + buttonImageTypeRnd.setSelection(false); + if(str.equals(Messages.getString("PreferencesTab.24"))) { //$NON-NLS-1$ + buttonImageTypeSubcon.setSelection(true); + } else if(str.equals(Messages.getString("PreferencesTab.23"))) { //$NON-NLS-1$ + buttonImageTypePrd.setSelection(true); + } else { + buttonImageTypeRnd.setSelection(true); + } + } + + str = (String)prop.remove(IMakerKeyConstants.VERBOSE); + if((str!=null)&&!(str.equals(""))) { //$NON-NLS-1$ + buttonVerbose.setSelection(true); + } + str = (String)prop.remove(IMakerKeyConstants.SYMBOLFILES); + if((str!=null)&&!(str.equals(""))) { //$NON-NLS-1$ + buttonSymbolFiles.setSelection(true); + } + String adds = (String)prop.remove(IMakerKeyConstants.ADDITIONAL_PARAMETERS); + if(adds!=null) { + textUserDefinedParameters.setText(adds); + } + updateSettings(prop); + tabDebug.restoreFromProperties(prop); + platsimTab.restoreFromProperties(prop); + } + + public void setSettings(SettingsTab tabSettings) { + this.settingsTab = tabSettings; + } + + /** + * + */ + private class PreferenceSelectionListener implements SelectionListener { + public void widgetDefaultSelected(SelectionEvent e) { + widgetSelected(e); + } + + public void widgetSelected(SelectionEvent e) { + Widget source = e.widget; + if(source==buttonSave) { + savePreferencesToFile(tabsViewer.getSelectedItem()); + } else if(source==buttonSaveAs) { + savePreferencesToFile(null); + } else {} + } + } + + public void revertSettingsTab() { + + } + + /** + * Called when something changed in the settingsTab. + */ + public void refreshSettingsTab() { + if(!settingsTab.isDirty()) { + return; + } + String drive = activeEnvironment.getDrive(); + IRunnableWithProgress op = new IMakerSettingsUpdater(null,drive); + executeRunnable(op); + } + + private void executeRunnable(IRunnableWithProgress op) { + IWorkbench wb = PlatformUI.getWorkbench(); + IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); + Shell shell = win != null ? win.getShell() : null; + try { + ProgressMonitorDialog progressMonitorDialog = new ProgressMonitorDialog(shell); + progressMonitorDialog.run(true, false, op); + settingsTab.getTableViewer().refresh(); + } catch (InvocationTargetException e) { + StatusHandler.handle(IStatus.ERROR,Messages.getString("Error.1"),e.getTargetException()); //$NON-NLS-1$ + e.printStackTrace(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + private class IMakerSettingsUpdater implements IRunnableWithProgress { + private List modifiedVariables=null; + private String environment; + + public IMakerSettingsUpdater(List modifiedVariables, String env) { + this.modifiedVariables = modifiedVariables; + this.environment = env; + } + + public void run(IProgressMonitor monitor) + throws InvocationTargetException, InterruptedException { + try { + IIMakerWrapper wrapper = activeEnvironment.getImakerWrapper(); + ArrayList parameters = new ArrayList(); + UIConfiguration currentConfiguration = activeEnvironment.getCurrentProduct(); + parameters.add(environment + + IMakerWrapperPreferences.DEFAULT_COMMAND); + parameters.add(currentConfiguration.getFilePath()); + UIConfiguration configuration=null; + List incVars = null; + if(modifiedVariables==null) { + incVars = IMakerUtils.getCommandlineIncludeVariables(currentConfiguration.getVariables()); + List varList = IMakerUtils.convertVariablesToStrings(incVars); + parameters.addAll(varList); + configuration = wrapper.getConfiguration(parameters, monitor); + } else { + incVars = IMakerUtils.convertStringsToVariables(modifiedVariables); + parameters.addAll(modifiedVariables); + configuration = wrapper.getConfiguration(parameters, monitor); + } + for (UIVariable variable : incVars) { + UIVariable v = findVariable(configuration,variable); + if(v!=null) { + v.setInclude(true); + } + } + currentConfiguration.setVariables(configuration.getVariables()); + } catch (Exception e) { + throw new InvocationTargetException(e); + } + monitor.worked(100); + monitor.done(); + } + private UIVariable findVariable(UIConfiguration configuration, + UIVariable var) { + List variables = configuration.getVariables(); + for (UIVariable variable : variables) { + if(var.equals(variable)) { + return variable; + } + } + return null; + } + } + + public void runPressed(String item) { + if(item.equals(ProjectManager.NEW_ITEM)) { + ImakerProperties run = activeEnvironment.getRunProperties(); + run.clear(); + Properties uiValues = getUIValues(); + run.putAll(uiValues); + run.setActiveFile(null); + } else { + savePreferencesToFile(item); + ImakerProperties run = activeEnvironment.getRunProperties(); + run.setActiveFile(item); + } + } + + public void setDebug(IPropertyViewer debug) { + tabDebug = debug; + } + + /**get + * @param item + * @throws InterruptedException + */ + public void loadImakerFile(String item) throws InvocationTargetException { + if(!item.equals(ProjectManager.NEW_ITEM)) { + IFile file = (IFile)projectManager.getImakerFile(new Path(item)); + ImakerProperties prop = new ImakerProperties(); + try { + prop.load(file.getContents()); + fillUIForm(prop); + } catch (IOException e) { + e.printStackTrace(); + } catch (CoreException e) { + e.printStackTrace(); + }; + } else { + loadDefaults(); + fillUIForm(activeEnvironment.getRunProperties()); + } + } + + + private void updateSettings(Properties content) { + List modified = new ArrayList(); + + String mods = (String)content.get(IMakerKeyConstants.MODIFIED_SETTINGS); + if(mods==null) return; + String[] parts; + if(mods!=null) { + parts = mods.split(ImakerProperties.SEPARATOR); + for (int i = 0; i < parts.length; i++) { + modified.add(parts[i]); + } + } + mods = (String) content.get(IMakerKeyConstants.ADDITIONAL_PARAMETERS); + if(mods!=null) { + parts = mods.split(ImakerProperties.SEPARATOR); + for (int i = 0; i < parts.length; i++) { + modified.add(parts[i]); + } + } + String drive = activeEnvironment.getDrive(); + IRunnableWithProgress op = new IMakerSettingsUpdater(modified,drive); + executeRunnable(op); + } + + + /** + * @throws InterruptedException + * + */ + private void loadDefaults() throws InvocationTargetException { + loadConfigurations(); + tabDebug.clear(); + platsimTab.clear(); + updateDefaultTarget(getDefaultConfig()); + } + + /** + * + */ + public void restore() { + UIConfiguration def = getDefaultConfig(); + refreshProduct(def); + updateDefaultTarget(def); + } + + /** + * @param def + * + */ + private void updateDefaultTarget(UIConfiguration def) { + if(def==null) return; + String target = "default"; + addToListTarget(new String[]{target}); + } + + public void setPlatsim(PlatsimTab tabPlatsim) { + this.platsimTab = tabPlatsim; + } + + public String[] getSelectedTargets() { + return listTarget.getItems(); + } + + public UIConfiguration getSelectedProduct() { + return activeEnvironment.getCurrentProduct(); + } +}