imakerplugin/com.nokia.s60tools.imaker/src/com/nokia/s60tools/imaker/internal/viewers/PreferencesTab.java
changeset 0 61163b28edca
child 1 7ff23301fe22
--- /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<String> 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<UIConfiguration> 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<UITarget> 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(i<listTarget.getItemCount()-1) {
+					sb.append(" ");
+				}
+			}
+			if(sb.length()>0) {
+				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<UIConfiguration> 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<String> modifiedVariables=null;
+		private String environment;
+		
+		public IMakerSettingsUpdater(List<String> modifiedVariables, String env) {
+			this.modifiedVariables = modifiedVariables;
+			this.environment = env;
+		}
+		
+		public void run(IProgressMonitor monitor)
+		throws InvocationTargetException, InterruptedException {
+			try {
+				IIMakerWrapper wrapper = activeEnvironment.getImakerWrapper();
+				ArrayList<String> parameters = new ArrayList<String>();
+				UIConfiguration currentConfiguration = activeEnvironment.getCurrentProduct();
+				parameters.add(environment +
+						IMakerWrapperPreferences.DEFAULT_COMMAND);
+				parameters.add(currentConfiguration.getFilePath());
+				UIConfiguration configuration=null;
+				List<UIVariable> incVars = null;
+				if(modifiedVariables==null) {
+					incVars = IMakerUtils.getCommandlineIncludeVariables(currentConfiguration.getVariables());
+					List<String> 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<UIVariable> 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<String> modified = new ArrayList<String>();
+		
+		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();
+	}
+}