diff -r ab555eecf681 -r 587da7cb64b7 core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/sdk/ui/SDKPreferencePage.java --- a/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/sdk/ui/SDKPreferencePage.java Wed Jun 02 12:02:03 2010 -0500 +++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/sdk/ui/SDKPreferencePage.java Wed Jun 02 17:08:00 2010 -0500 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of the License "Eclipse Public License v1.0" @@ -16,198 +16,281 @@ */ package com.nokia.carbide.cpp.internal.sdk.ui; -import java.io.*; -import java.util.*; +import java.io.File; +import java.text.MessageFormat; +import java.util.Iterator; import java.util.List; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.jobs.IJobChangeEvent; +import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jface.viewers.*; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.CellEditor; +import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.ColumnViewer; +import org.eclipse.jface.viewers.EditingSupport; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewerColumn; +import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; -import org.eclipse.swt.events.*; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.*; -import org.eclipse.ui.*; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchPreferencePage; +import org.eclipse.ui.PlatformUI; import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContextDataCache; import com.nokia.carbide.cpp.internal.sdk.core.model.SDKManager; -import com.nokia.carbide.cpp.sdk.core.*; +import com.nokia.carbide.cpp.sdk.core.ISDKManager; +import com.nokia.carbide.cpp.sdk.core.ISymbianSDK; +import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin; import com.nokia.carbide.cpp.sdk.ui.SDKUIPlugin; import com.nokia.carbide.cpp.sdk.ui.shared.AddSDKDialog; +import com.nokia.carbide.cpp.ui.TextAndDialogCellEditor; +import com.nokia.cpp.internal.api.utils.ui.BrowseDialogUtils; public class SDKPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - ISDKManager sdkMgr; + private class SDKLabelProvider extends LabelProvider implements ITableLabelProvider { + public Image getColumnImage(Object element, int columnIndex) { + return null; + } + + public String getColumnText(Object element, int columnIndex) { + ISymbianSDK sdk = (ISymbianSDK) element; + switch (columnIndex) { + case 1: + return sdk.getUniqueId(); + case 2: + return sdk.getEPOCROOT(); + default: + return ""; + } + } + } + + private class IdEditingSupport extends EditingSupport { + private TextCellEditor editor; + + public IdEditingSupport(ColumnViewer viewer) { + super(viewer); + editor = new TextCellEditor((Composite) viewer.getControl()); + } + + @Override + protected boolean canEdit(Object element) { + if (element instanceof ISymbianSDK) { + return true; + } + return false; + } + + @Override + protected CellEditor getCellEditor(Object element) { + return editor; + } + + @Override + protected Object getValue(Object element) { + ISymbianSDK sdk = (ISymbianSDK) element; + return sdk.getUniqueId(); + } + + @Override + protected void setValue(Object element, Object value) { + ISymbianSDK sdk = (ISymbianSDK) element; + sdk.setUniqueID(value.toString()); + SDKCorePlugin.getSDKManager().updateSDK(sdk); + getViewer().refresh(); + } + } + + private class LocationEditingSupport extends EditingSupport { + private LocationCellEditor editor; + + public LocationEditingSupport(ColumnViewer viewer) { + super(viewer); + editor = new LocationCellEditor((Composite) viewer.getControl()); + } + + @Override + protected boolean canEdit(Object element) { + if (element instanceof ISymbianSDK) { + return true; + } + return false; + } + + @Override + protected CellEditor getCellEditor(Object element) { + return editor; + } + + @Override + protected Object getValue(Object element) { + ISymbianSDK sdk = (ISymbianSDK) element; + return sdk.getEPOCROOT(); + } + + @Override + protected void setValue(Object element, Object value) { + ISymbianSDK sdk = (ISymbianSDK) element; + sdk.setEPOCROOT(value.toString()); + SDKCorePlugin.getSDKManager().updateSDK(sdk); + getViewer().refresh(); + } + } + + private class LocationCellEditor extends TextAndDialogCellEditor { + private Button button; + private Text text; + + public LocationCellEditor(Composite parent) { + super(parent); + } + + @Override + protected Control createContents(Composite parent) { + text = (Text) super.createContents(parent); + return text; + } + + @Override + protected Control createControl(Composite parent) { + Control control = super.createControl(parent); + button = getButton(); + button.setText(Messages.getString("SDKPreferencePage.Browse_Location_Label")); //$NON-NLS-1$ + return control; + } + + @Override + protected Object openDialogBox(Control cellEditorWindow) { + DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.OPEN); + BrowseDialogUtils.initializeFrom(dialog, text); + return dialog.open(); + } + } + + private class ScanJobListener implements IJobChangeListener { + public void done(IJobChangeEvent event) { + Display.getDefault().asyncExec(new Runnable() { + public void run() { + rescanSDKs(); + } + }); + } + + public void aboutToRun(IJobChangeEvent event) {} + public void awake(IJobChangeEvent event) {} + public void running(IJobChangeEvent event) {} + public void scheduled(IJobChangeEvent event) {} + public void sleeping(IJobChangeEvent event) {} + + } + + private IPreferenceStore prefsStore; + private ISDKManager sdkMgr; + private List sdkList; + private ScanJobListener scanJobListner; + private boolean scanForNewPlugins; private CheckboxTableViewer sdkListTableViewer; - private List sdkList; - private Button sdkpropertiesButton; - private Button removeSdkButton; - private Button addNewSdkButton; - private Button rescanNowButton; - - private Label epocrootLabel; - private Label availablePlatformsLabel; - private Label osVersionLabel; - private Label diagnosticCheckLabel; - - private Button listenForDevicesXMLChangeButton; - - private static final String EPOCROOT_LABEL = "EPOCROOT: "; //$NON-NLS-1$ - private static final String PLATFORMS_LABEL = "Available Platforms: "; //$NON-NLS-1$ - private static final String DIAGNOSTIC_CHECK_LABEL = "Diagnostic Check: "; //$NON-NLS-1$ - private static final String OS_VERSION_LABEL = "OS Version: "; //$NON-NLS-1$ - - private Color RED; - private Color BLACK; - private Color GRAY; - Shell shell; - + private Button addButton; + private Button deleteButton; + private Button propertiesButton; + private Button scanForNewPluginsButton; + private Button rescanButton; + private Label iconLabel; + private Label statusLabel; + + private Color red; + private Color black; + private Color gray; + + /** + * Constructor. + */ public SDKPreferencePage() { super(); - - } - - @Override - protected Control createContents(Composite parent) { - return null; + scanJobListner = new ScanJobListener(); } - /* (non-Javadoc) - * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) + /* + * (non-Javadoc) + * @see org.eclipse.jface.preference.PreferencePage#createControl(org.eclipse.swt.widgets.Composite) */ - public void init(IWorkbench workbench) { - } - - /* (non-Javadoc) - * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) - */ - public void createControl(Composite parent) { - - IPreferenceStore prefsStore = SDKUIPlugin.getDefault().getPreferenceStore(); + public void createControl(Composite parent){ + prefsStore = SDKUIPlugin.getDefault().getPreferenceStore(); sdkMgr = SDKCorePlugin.getSDKManager(); if (sdkMgr == null){ return; } - - shell = parent.getShell(); sdkList = sdkMgr.getSDKList(); - RED = shell.getDisplay().getSystemColor(SWT.COLOR_RED); - BLACK = shell.getDisplay().getSystemColor(SWT.COLOR_BLACK); - GRAY = shell.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); - - // check that devices.xml actually exists - if (sdkMgr instanceof SDKManager) - ((SDKManager) sdkMgr).checkDevicesXMLExistAndCreate(); - - Composite content = new Composite(parent, SWT.NONE); - setControl(content); - final GridLayout gridLayout = new GridLayout(); - gridLayout.numColumns = 2; - content.setLayout(gridLayout); - - final Group availableSymbianOsGroup = new Group(content, SWT.NONE); - availableSymbianOsGroup.setToolTipText(Messages.getString("SDKPreferencePage.OS_Group_ToolTip")); //$NON-NLS-1$ - final GridData availableSymbianOsGridData = new GridData(SWT.FILL, SWT.CENTER, true, false); - availableSymbianOsGridData.widthHint = 350; - availableSymbianOsGroup.setText(Messages.getString("SDKPreferencePage.Available_SDKs_Label")); //$NON-NLS-1$ - availableSymbianOsGroup.setLayoutData(availableSymbianOsGridData); - availableSymbianOsGroup.setLayout(new GridLayout()); - - sdkListTableViewer = CheckboxTableViewer.newCheckList(availableSymbianOsGroup, SWT.BORDER); - sdkListTableViewer.getTable().setLayoutData(availableSymbianOsGridData); - - final Composite composite = new Composite(content, SWT.NONE); - composite.setLayoutData(new GridData()); - final GridLayout gridLayout_1 = new GridLayout(); - gridLayout_1.makeColumnsEqualWidth = true; - composite.setLayout(gridLayout_1); + if (sdkMgr instanceof SDKManager) { + SDKManager mgr = (SDKManager) sdkMgr; + mgr.addScanJobListner(scanJobListner); + } - removeSdkButton = new Button(composite, SWT.NONE); - removeSdkButton.setToolTipText(Messages.getString("SDKPreferencePage.Delete_SDK_ToolTip")); //$NON-NLS-1$ - final GridData gridData = new GridData(SWT.LEFT, SWT.TOP, true, false); - removeSdkButton.setLayoutData(gridData); - removeSdkButton.setText(Messages.getString("SDKPreferencePage.Remove_SDK_Label")); //$NON-NLS-1$ - addButtonListener(removeSdkButton); - - addNewSdkButton = new Button(composite, SWT.NONE); - addNewSdkButton.setToolTipText(Messages.getString("SDKPreferencePage.Add_New_SDK_ToolTip")); //$NON-NLS-1$ - addNewSdkButton.setLayoutData(gridData); - addNewSdkButton.setText(Messages.getString("SDKPreferencePage.Add_New_SDK_Label")); //$NON-NLS-1$ - addButtonListener(addNewSdkButton); - - sdkpropertiesButton = new Button(composite, SWT.NONE); - sdkpropertiesButton.setToolTipText(Messages.getString("SDKPreferencePage.SDK_Props_Button_ToolTip")); //$NON-NLS-1$ - sdkpropertiesButton.setLayoutData(gridData); - sdkpropertiesButton.setText(Messages.getString("SDKPreferencePage.SDK_Props_Button_Label")); //$NON-NLS-1$ - addButtonListener(sdkpropertiesButton); - - final Group sdkInformationGroup = new Group(content, SWT.NONE); - sdkInformationGroup.setToolTipText(Messages.getString("SDKPreferencePage.SDK_Info_ToolTip")); //$NON-NLS-1$ - final GridData sdkInfoGridData = new GridData(SWT.FILL, SWT.FILL, true, true); - sdkInfoGridData.widthHint = 350; - sdkInformationGroup.setText(Messages.getString("SDKPreferencePage.SDK_Info_Label")); //$NON-NLS-1$ - sdkInformationGroup.setLayoutData(sdkInfoGridData); - sdkInformationGroup.setLayout(new GridLayout()); - - epocrootLabel = new Label(sdkInformationGroup, SWT.WRAP); - epocrootLabel.setToolTipText(Messages.getString("SDKPreferencePage.EPOC32_Loc_ToolTip")); //$NON-NLS-1$ - epocrootLabel.setLayoutData(new GridData(300, SWT.DEFAULT)); - epocrootLabel.setText("EPOCROOT:"); //$NON-NLS-1$ + super.createControl(parent); - osVersionLabel = new Label(sdkInformationGroup, SWT.WRAP); - osVersionLabel.setToolTipText(Messages.getString("SDKPreferencePage.OSVesions_ToolTip")); //$NON-NLS-1$ - osVersionLabel.setLayoutData(new GridData(300, SWT.DEFAULT)); - osVersionLabel.setText(Messages.getString("SDKPreferencePage.OSVersion_Label")); //$NON-NLS-1$ - - availablePlatformsLabel = new Label(sdkInformationGroup, SWT.WRAP); - availablePlatformsLabel.setToolTipText(Messages.getString("SDKPreferencePage.Platforms_ToolTip")); //$NON-NLS-1$ - availablePlatformsLabel.setLayoutData(new GridData(300, SWT.DEFAULT)); - availablePlatformsLabel.setText(Messages.getString("SDKPreferencePage.Available_Platforms")); //$NON-NLS-1$ - - diagnosticCheckLabel = new Label(sdkInformationGroup, SWT.WRAP); - diagnosticCheckLabel.setToolTipText(Messages.getString("SDKPreferencePage.Diagnostic_Check_ToolTip")); //$NON-NLS-1$ - diagnosticCheckLabel.setLayoutData(sdkInfoGridData); - diagnosticCheckLabel.setText(Messages.getString("SDKPreferencePage.Diagnostic_Check_Label")); //$NON-NLS-1$ - new Label(content, SWT.NONE); + // Hide "Restore Defaults" button + getDefaultsButton().setVisible(false); - listenForDevicesXMLChangeButton = new Button(content, SWT.CHECK); - listenForDevicesXMLChangeButton.setText(Messages.getString("SDKPreferencePage.listerForDevicesXML")); - listenForDevicesXMLChangeButton.setToolTipText(Messages.getString("SDKPreferencePage.listerForDevicesXML_Tooltip")); //$NON-NLS-1$ - listenForDevicesXMLChangeButton.setSelection(prefsStore.getBoolean(SDKUIPreferenceConstants.LISTEN_FOR_DEVICES_XML_CHANGE)); - - new Label(content, SWT.WRAP); // filler - - rescanNowButton = new Button(content, SWT.NONE); - rescanNowButton.setToolTipText(Messages.getString("SDKPreferencePage.Rescan_Button_ToolTip")); //$NON-NLS-1$ - rescanNowButton.setLayoutData(new GridData()); - rescanNowButton.setText(Messages.getString("SDKPreferencePage.Rescan_Button_Label")); //$NON-NLS-1$ - addButtonListener(rescanNowButton); - new Label(content, SWT.NONE); - - // Build the checked table of SDKs - addSDKComponentTableItems(); - - ISymbianSDK sdk = (ISymbianSDK)sdkListTableViewer.getElementAt(0); - if (sdk != null){ - sdkListTableViewer.setSelection(new StructuredSelection(sdk), true); - setSelectedSDKInfoText(sdk); - } - - PlatformUI.getWorkbench().getHelpSystem().setHelp(super.getControl(), SDKUIHelpIds.SDK_PREFERENCES_PAGE); } - + + /* + * (non-Javadoc) + * @see org.eclipse.jface.dialogs.DialogPage#dispose() + */ + public void dispose() { + if (sdkMgr != null && sdkMgr instanceof SDKManager){ + SDKManager mgr = (SDKManager) sdkMgr; + mgr.removeScanJobLisner(scanJobListner); + } + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) + */ + public void init(IWorkbench arg0) { + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.preference.PreferencePage#performOk() + */ public boolean performOk() { - - IPreferenceStore prefsStore = SDKUIPlugin.getDefault().getPreferenceStore(); - prefsStore.setValue(SDKUIPreferenceConstants.LISTEN_FOR_DEVICES_XML_CHANGE, listenForDevicesXMLChangeButton.getSelection()); - + // Save preference page specific values; + prefsStore.setValue(SDKUIPreferenceConstants.SCAN_FOR_NEW_PLUGINS, scanForNewPluginsButton.getSelection()); + + // Remember which SDK is enabled for (ISymbianSDK sdk : sdkMgr.getSDKList()){ sdk.setEnabled(false); } @@ -218,341 +301,329 @@ sdk.setEnabled(true); } } - - ISDKManager sdkMgr =SDKCorePlugin.getSDKManager(); + + // Update cached SDK info sdkMgr.updateCarbideSDKCache(); - return super.performOk(); } - - private void addSDKComponentTableItems() { - sdkListTableViewer.setContentProvider(new SDKTableComponentsContentProvider()); - sdkListTableViewer.setLabelProvider(new SDKTableComponentsLabelProvider()); - Table lTable = sdkListTableViewer.getTable(); - - sdkList = SDKCorePlugin.getSDKManager().getSDKList(); - sdkListTableViewer.setInput(sdkList); - lTable.setToolTipText(Messages.getString("SDKPreferencePage.List_of_Available_SDKs_ToolTip")); //$NON-NLS-1$ - lTable.setVisible(true); - addSDKTableViewerSelectionListener(); - //lTable.setLayoutData(grid); - if (sdkList == null || sdkList.size() == 0){ - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + Messages.getString("SDKPreferencePage.No_SDKs_Available")); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(RED); - diagnosticCheckLabel.setBackground(GRAY); - } else { - setCheckBoxes(sdkList); - } - } - - /** - * Sets the checkbox state for enabled SDKs. + + /* + * (non-Javadoc) + * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ - private void setCheckBoxes(List sdkList) { - List sdkListCopy = new ArrayList(); - for (ISymbianSDK sdkCheck : sdkList){ - if (sdkCheck.isEnabled()){ - sdkListCopy.add(sdkCheck); - } - } - sdkListTableViewer.setCheckedElements(sdkListCopy.toArray(new ISymbianSDK[sdkListCopy.size()])); - } - - /** - * Extends LabelProvider with the default implementation - * and implementsITableLabelProvider with the methods - * to provide the text and/or image for each column of a given element. - * Used by table viewers. - */ - - static class SDKTableComponentsLabelProvider extends LabelProvider implements ITableLabelProvider, ITableColorProvider { + @Override + protected Control createContents(Composite parent) { + // Set up colors used in this preference page + Shell shell = parent.getShell(); + red = shell.getDisplay().getSystemColor(SWT.COLOR_RED); + black = shell.getDisplay().getSystemColor(SWT.COLOR_BLACK); + gray = shell.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND); + + Composite content = new Composite(parent, SWT.NONE); + GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 2; + content.setLayout(gridLayout); + + // SDK table + sdkListTableViewer = CheckboxTableViewer.newCheckList(content, + SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); + createSDKTable(); - /** - * Returns the label image for the given column of the given element. - * The default implementation returns null. - * - * @return image object - */ - public Image getColumnImage(Object element, int columnIndex) { - return null; - } + // Buttons composite + Composite composite1 = new Composite(content, SWT.NONE); + composite1.setLayoutData(new GridData()); + gridLayout = new GridLayout(); + gridLayout.makeColumnsEqualWidth = true; + composite1.setLayout(gridLayout); + GridData gridData = new GridData(SWT.LEFT, SWT.TOP, true, false); - /** - * Returns the label text for the given column of the given element. - * - * @return string is the label text for the given column. - */ - public String getColumnText(Object arg0, int column) { - if (arg0 instanceof ISymbianSDK){ - ISymbianSDK sdk = (ISymbianSDK)arg0; - return sdk.getUniqueId(); - } - - return ""; //$NON-NLS-1$ - } + // Add button + addButton = new Button(composite1, SWT.NONE); + addButton.setLayoutData(gridData); + addButton.setText(Messages.getString("SDKPreferencePage.Add_Button_Label")); //$NON-NLS-1$ + addButton.setToolTipText(Messages.getString("SDKPreferencePage.Add_Button_ToolTip")); //$NON-NLS-1$ + addButtonListener(addButton); + + // Delete button + deleteButton = new Button(composite1, SWT.NONE); + deleteButton.setLayoutData(gridData); + deleteButton.setText(Messages.getString("SDKPreferencePage.Delete_Button_Label")); //$NON-NLS-1$ + deleteButton.setToolTipText(Messages.getString("SDKPreferencePage.Delete_Button_ToolTip")); //$NON-NLS-1$ + addButtonListener(deleteButton); + + // Properties button + propertiesButton = new Button(composite1, SWT.NONE); + propertiesButton.setLayoutData(gridData); + propertiesButton.setText(Messages.getString("SDKPreferencePage.Properties_Button_Label")); //$NON-NLS-1$ + propertiesButton.setToolTipText(Messages.getString("SDKPreferencePage.Properties_Button_ToolTip")); //$NON-NLS-1$ + addButtonListener(propertiesButton); - private Color lBlack = Display.getDefault().getSystemColor(SWT.COLOR_BLACK); - private Color lRed = Display.getDefault().getSystemColor(SWT.COLOR_RED); + // Status and Rescan composite + Composite composite2 = new Composite(content, SWT.NONE); + gridData = new GridData(SWT.FILL, SWT.CENTER, true, false); + gridData.widthHint = 350; + gridData.heightHint = 50; + composite2.setLayoutData(gridData); + gridLayout = new GridLayout(); + gridLayout.numColumns = 2; + composite2.setLayout(gridLayout); + + // IStatus icon label + iconLabel = new Label(composite2, SWT.NONE); + // IStatus text label + statusLabel = new Label(composite2, SWT.WRAP); + gridData = new GridData(SWT.LEFT, SWT.TOP, true, false); + gridData.verticalSpan = 2; + statusLabel.setLayoutData(gridData); + + new Label(content, SWT.WRAP); // filler - public Color getForeground(Object obj, int index) { - if (obj instanceof ISymbianSDK) { - ISymbianSDK sdk = (ISymbianSDK)obj; - File epocRootTest = new File(sdk.getEPOCROOT()); - if ((sdk.getAvailablePlatforms().size() <= 0) || !epocRootTest.exists()) { - // There are no build configs and/or no epocroot exists - return lRed; - } else { - return lBlack; - } - } - return null; - } - - public Color getBackground(Object element, int columnIndex) { - return null; - } - } - - /** - * This implementation of IStructuredContentProvider handles - * the case where the viewer input is an unchanging array or collection of elements. - * - */ - static class SDKTableComponentsContentProvider implements IStructuredContentProvider { - + // Scan SDK checkbox + scanForNewPluginsButton = new Button(content, SWT.CHECK); + scanForNewPluginsButton.setText(Messages.getString("SDKPreferencePage.ScanForNewPlugins_Button_Label")); //$NON-NLS-1$ + scanForNewPluginsButton.setSelection(prefsStore.getBoolean(SDKUIPreferenceConstants.SCAN_FOR_NEW_PLUGINS)); + addButtonListener(scanForNewPluginsButton); + - /** - * Returns the elements in the input - * - * @return array of objects. - */ - public Object[] getElements(Object arg0) { - if (arg0 instanceof ArrayList) { - return ((ArrayList)arg0).toArray(); - } - return new Object[0]; - } + new Label(content, SWT.WRAP); // filler + + // Rescan button + rescanButton = new Button(content, SWT.NONE); + rescanButton.setToolTipText(Messages.getString("SDKPreferencePage.Rescan_Button_ToolTip")); //$NON-NLS-1$ + rescanButton.setText(Messages.getString("SDKPreferencePage.Rescan_Button_Label")); //$NON-NLS-1$ + addButtonListener(rescanButton); - public void dispose() { - } + // Populate SDK table + addSDKComponentTableItems(); + selectSDKEntry(0); - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - //do nothing - } + return content; } - - /** - * Sets the listener event to a button. - * - * @param aButton - */ - private void addButtonListener( final Button aButton ) { + + private void addButtonListener(final Button aButton) { SelectionListener listener = new SelectionAdapter() { - public void widgetSelected( SelectionEvent e ) { - if (e.getSource().equals(sdkpropertiesButton)) { - sdkpropertiesButtonAction(); - } else if (e.getSource().equals(addNewSdkButton)) { - addNewSdkButtonAction(); - } else if (e.getSource().equals(removeSdkButton)) { - removeSdkButtonAction(); - } else if (e.getSource().equals(rescanNowButton)) { - rescanNowButtonAction(); + public void widgetSelected(SelectionEvent e) { + if (e.getSource().equals(addButton)) { + handleAddButton(); + } else if (e.getSource().equals(deleteButton)) { + handleDeleteButton(); + } else if (e.getSource().equals(propertiesButton)) { + handlePropertiesButton(); + } else if (e.getSource().equals(scanForNewPluginsButton)) { + handleScanForNewPluginsButton(); + } else if (e.getSource().equals(rescanButton)) { + handleRescanButton(); } - } }; aButton.addSelectionListener(listener); } - - private void sdkpropertiesButtonAction(){ + + private void addSDKComponentTableItems() { + sdkListTableViewer.setLabelProvider(new SDKLabelProvider()); + sdkListTableViewer.setContentProvider(new ArrayContentProvider()); + sdkList = sdkMgr.getSDKList(); + sdkListTableViewer.setInput(sdkList.toArray()); + sdkListTableViewer.getTable().setToolTipText(Messages.getString("SDKPreferencePage.List_of_Available_SDKs_ToolTip")); //$NON-NLS-1$ + setCheckedElements(); + addSDKTableViewerListeners(); + if (sdkList == null || sdkList.size() == 0){ + statusError(Messages.getString("SDKPreferencePage.No_SDKs_Available_Message")); //$NON-NLS-1$ + } + } + + private void addSDKTableViewerListeners(){ + sdkListTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + if(event.getSelection() instanceof IStructuredSelection) { + IStructuredSelection selection = (IStructuredSelection)event.getSelection(); + if (selection.size() == 1){ + ISymbianSDK sdk = (ISymbianSDK)selection.getFirstElement(); + deleteButton.setEnabled(true); + propertiesButton.setEnabled(true); + updateSDKStatus(sdk); + } + else { + deleteButton.setEnabled(false); + propertiesButton.setEnabled(false); + } + } + } + }); + } + + private void createSDKTable() { + final Table table = sdkListTableViewer.getTable(); + GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false); + gridData.widthHint = 350; + gridData.heightHint = table.getItemHeight() * 6; + table.setLayoutData(gridData); + table.setHeaderVisible(true); + table.setLinesVisible(false); + + TableViewerColumn enabledCol = new TableViewerColumn(sdkListTableViewer, SWT.LEFT); + enabledCol.getColumn().setText(Messages.getString("SDKPreferencePage.SDK_Table_Enabled_Column_Label")); //$NON-NLS-1$ + enabledCol.getColumn().setWidth(50); + + TableViewerColumn idCol = new TableViewerColumn(sdkListTableViewer, SWT.LEFT); + idCol.setEditingSupport(new IdEditingSupport(sdkListTableViewer)); //$NON-NLS-1$ + idCol.getColumn().setText(Messages.getString("SDKPreferencePage.SDK_Table_ID_Column_Label")); + idCol.getColumn().setWidth(160); + + TableViewerColumn locationCol = new TableViewerColumn(sdkListTableViewer, SWT.LEFT); + locationCol.setEditingSupport(new LocationEditingSupport(sdkListTableViewer)); + locationCol.getColumn().setText(Messages.getString("SDKPreferencePage.SDK_Table_Location_Column_Label")); //$NON-NLS-1$ + locationCol.getColumn().setWidth(170); + } + + private void handleAddButton() { + AddSDKDialog dialog = new AddSDKDialog(getShell()); + if (dialog.open() == AddSDKDialog.OK){ + sdkList = sdkMgr.getSDKList(); + sdkListTableViewer.setInput(sdkList.toArray()); + setCheckedElements(); + sdkListTableViewer.refresh(); + selectSDKEntry(sdkList.size() - 1); + } + } + + private void handleDeleteButton() { + ISymbianSDK sdk = (ISymbianSDK)((IStructuredSelection)sdkListTableViewer.getSelection()).getFirstElement(); + int index = sdkListTableViewer.getTable().getSelectionIndex(); + if (sdk != null){ + if (sdkMgr.removeSDK(sdk.getUniqueId())){ + sdkList = sdkMgr.getSDKList(); + sdkListTableViewer.setInput(sdkList.toArray()); + if (index > 0) { + selectSDKEntry(index - 1); + } else { + selectSDKEntry(index); + } + sdkListTableViewer.refresh(); + } + } + } + + private void handlePropertiesButton() { ISymbianSDK sdk = (ISymbianSDK)((IStructuredSelection)sdkListTableViewer.getSelection()).getFirstElement(); if (sdk != null){ - SDKPropertiesDialog sdkPropDlg = new SDKPropertiesDialog(getShell(), this, sdk); + SDKPropertiesDialog sdkPropDlg = new SDKPropertiesDialog(getShell(), sdk); if (sdkPropDlg.open() == SDKPropertiesDialog.OK){ sdkListTableViewer.refresh(); - setSelectedSDKInfoText(sdk); + updateSDKStatus(sdk); // forcible rescan; dump cache SymbianBuildContextDataCache.refreshForSDKs(new ISymbianSDK[] { sdk }); - rescanSDKs(false); + sdkMgr.scanSDKs(); } } else { MessageDialog.openError(getShell(), Messages.getString("SDKPreferencePage.No_SDK_Selected"), Messages.getString("SDKPreferencePage.No_selected_SDK_detected")); //$NON-NLS-1$ //$NON-NLS-2$ } - } - - private void removeSdkButtonAction(){ - ISymbianSDK sdk = (ISymbianSDK)((IStructuredSelection)sdkListTableViewer.getSelection()).getFirstElement(); - if (sdk != null){ - if (MessageDialog.openConfirm(getShell(), Messages.getString("SDKPreferencePage.Confirm_Delete") + sdk.getUniqueId() , Messages.getString("SDKPreferencePage.Confirm_Delete_Msg"))){ //$NON-NLS-1$ //$NON-NLS-2$ - if (sdkMgr.removeSDK(sdk.getUniqueId())){ - sdkList.remove(sdk); - sdkListTableViewer.refresh(); - sdk = (ISymbianSDK)sdkListTableViewer.getElementAt(0); - if (sdk != null){ - sdkListTableViewer.setSelection(new StructuredSelection(sdk), true); - setSelectedSDKInfoText(sdk); - } - } - } - } + + private void handleScanForNewPluginsButton() { + scanForNewPlugins = scanForNewPluginsButton.getSelection(); } - - private void addNewSdkButtonAction(){ - - AddSDKDialog dialog = new AddSDKDialog(getShell()); - if (dialog.open() == AddSDKDialog.OK){ - addSDKComponentTableItems(); - sdkListTableViewer.refresh(); - } - } - - private void rescanNowButtonAction(){ + + private void handleRescanButton() { // forcible rescan; dump cache SymbianBuildContextDataCache.refreshForSDKs(null); - rescanSDKs(true); + sdkMgr.scanSDKs(); } - - private void rescanSDKs(boolean scanForNewPlugins){ + + private void rescanSDKs(){ sdkListTableViewer.getTable().clearAll(); sdkListTableViewer.refresh(); sdkList.clear(); - ISDKManager sdkMgr = SDKCorePlugin.getSDKManager(); - sdkMgr.scanSDKs(); sdkList = sdkMgr.getSDKList(); addSDKComponentTableItems(); sdkListTableViewer.refresh(); - - ISymbianSDK sdk = (ISymbianSDK)sdkListTableViewer.getElementAt(0); - if (sdk != null){ - sdkListTableViewer.setSelection(new StructuredSelection(sdk), true); - setSelectedSDKInfoText(sdk); - } - + selectSDKEntry(0); + if (scanForNewPlugins){ NewPluginChecker.checkForNewlyInstalledPlugins(SDKUIPlugin.getDefault().getWorkbench()); } } - - /** - * Sets the selection listener action event to the CheckboxTableViewer. - * - * @param sdkTable - */ - private void addSDKTableViewerSelectionListener(){ - sdkListTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - if(event.getSelection() instanceof IStructuredSelection) { - IStructuredSelection selection = (IStructuredSelection)event.getSelection(); - if (selection.size() == 1){ - ISymbianSDK sdk = (ISymbianSDK)selection.getFirstElement(); - sdkpropertiesButton.setEnabled(true); - removeSdkButton.setEnabled(true); - setSelectedSDKInfoText(sdk); - - }else { - sdkpropertiesButton.setEnabled(false); - removeSdkButton.setEnabled(false); - } - } - } - } ); + private void selectSDKEntry(int index) { + ISymbianSDK sdk = (ISymbianSDK)sdkListTableViewer.getElementAt(index); + if (sdk != null){ + sdkListTableViewer.setSelection(new StructuredSelection(sdk), true); + sdkListTableViewer.getTable().setFocus(); + } + updateSDKStatus(sdk); } - - private void setSelectedSDKInfoText(ISymbianSDK sdk){ - boolean sdkHasError = false; - String epocRootStr = sdk.getEPOCROOT(); - File epocRootTest = new File(epocRootStr); - if (!epocRootTest.exists()) { - sdkHasError = true; - epocrootLabel.setText(EPOCROOT_LABEL + epocRootStr + Messages.getString("SDKPreferencePage.Path_Does_Not_Exist")); //$NON-NLS-1$ - epocrootLabel.setForeground(RED); - epocrootLabel.setBackground(GRAY); - } - else { - epocrootLabel.setText(EPOCROOT_LABEL + epocRootStr); - epocrootLabel.setForeground(BLACK); - epocrootLabel.setBackground(GRAY); - } - - // Set platforms - if (sdk.getAvailablePlatforms().size() == 0) { - sdkHasError = true; - availablePlatformsLabel.setText(PLATFORMS_LABEL + Messages.getString("SDKPreferencePage.Platforms_cannot_be_determined")); //$NON-NLS-1$ - availablePlatformsLabel.setForeground(RED); - availablePlatformsLabel.setBackground(GRAY); - } - else { - availablePlatformsLabel.setText(PLATFORMS_LABEL + sdk.getAvailablePlatforms().toString()); - availablePlatformsLabel.setForeground(BLACK); - availablePlatformsLabel.setBackground(GRAY); + + private void setCheckedElements() { + Iterator iterator = sdkList.iterator(); + while (iterator.hasNext()) { + ISymbianSDK sdk = iterator.next(); + sdkListTableViewer.setChecked(sdk, sdk.isEnabled()); } - - // Set OS Version - if (sdk.getOSVersion().getMajor() == 0) { - sdkHasError = true; - osVersionLabel.setText(OS_VERSION_LABEL + Messages.getString("SDKPreferencePage.OS_Version_Cannot_Be_Determined")); //$NON-NLS-1$ - osVersionLabel.setForeground(RED); - osVersionLabel.setBackground(GRAY); - } - else if (!SDKCorePlugin.SUPPORTS_SBSV1_BUILDER && - (sdk.getOSVersion().getMajor() < 9 || - (sdk.getOSVersion().getMajor() == 9 && sdk.getOSVersion().getMinor() <= 4))){ - sdkHasError = true; - osVersionLabel.setText(OS_VERSION_LABEL + "This OS version is not supported: " + sdk.getOSVersion()); - osVersionLabel.setForeground(RED); - osVersionLabel.setBackground(GRAY); - + } + + private void statusClear() { + iconLabel.setImage(null); + statusLabel.setText(""); + } + + private void statusError(String msg) { + String errorMsg = "Error : " + msg; + iconLabel.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK)); + statusLabel.setText(errorMsg); + statusLabel.setForeground(red); + statusLabel.setBackground(gray); + statusLabel.update(); + statusLabel.getParent().layout(true); + } + + private void statusWarning(String msg) { + String warningMsg = "Warning : " + msg; //$NON-NLS-1$ + iconLabel.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK)); + statusLabel.setText(warningMsg); + statusLabel.setForeground(black); + statusLabel.setBackground(gray); + statusLabel.update(); + statusLabel.getParent().layout(true); + } + + private void statusInfo(String msg) { + String infoMsg = "Info : " + msg; //$NON-NLS-1$ + iconLabel.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_INFO_TSK)); + statusLabel.setText(infoMsg); + statusLabel.setForeground(black); + statusLabel.setBackground(gray); + statusLabel.update(); + statusLabel.getParent().layout(true); + } + + private void updateSDKStatus(ISymbianSDK sdk){ + // No SDK selected + if (sdk == null) { + statusWarning(Messages.getString("SDKPreferencePage.No_SDKs_Available_Message")); //$NON-NLS-1$ + return; } else { - if (sdk.getSDKOSBranch().length() > 0) { - osVersionLabel.setText(OS_VERSION_LABEL + sdk.getOSVersion().toString() + " (Branch = \"" + sdk.getSDKOSBranch() + "\")"); //$NON-NLS-1$ //$NON-NLS-2$ - } else { - osVersionLabel.setText(OS_VERSION_LABEL + sdk.getOSVersion().toString()); + // Check SDK EPOCROOT + String epocRootStr = sdk.getEPOCROOT(); + IPath epocRoot = new Path(epocRootStr); + epocRoot = epocRoot.append("epoc32"); + File epocRootFile = epocRoot.toFile(); + if (!epocRootFile.exists()) { + statusError(Messages.getString("SDKPreferencePage.Invalid_Location_Message")); //$NON-NLS-1$ + return; } - osVersionLabel.setForeground(BLACK); - osVersionLabel.setBackground(GRAY); - } - - // Get diagnostic check - //if (lsdk.getSomeError().size() <= 0) { - if (sdkHasError){ - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + Messages.getString("SDKPreferencePage.SDK_Cannot_Be_Used")); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(RED); - diagnosticCheckLabel.setBackground(GRAY); + + // Check SDK OS Version + if ((sdk.getOSVersion().getMajor() < 9 || + (sdk.getOSVersion().getMajor() == 9 && sdk.getOSVersion().getMinor() < 5))) { + statusError(MessageFormat.format( + Messages.getString("SDKPreferencePage.Invalid_SDK_Message"), //$NON-NLS-1$ + sdk.getOSVersion().toString())); //$NON-NLS-1$ + return; + } + + // No error + statusClear(); } - else { - // check for other types of errors: - if (!sdk.getToolsPath().toFile().exists()){ - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + Messages.getString("SDKPreferencePage.No_Tools_Path") + " " + sdk.getToolsPath().toOSString()); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(RED); - diagnosticCheckLabel.setBackground(GRAY); - } else if (!sdk.getIncludePath().toFile().exists()){ - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + Messages.getString("SDKPreferencePage.No_Include_Path") + " " + sdk.getIncludePath().toOSString()); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(RED); - diagnosticCheckLabel.setBackground(GRAY); - } else if ( ((sdk.getPrefixFile() == null) || (!sdk.getPrefixFile().exists())) && (sdk.getOSVersion().getMajor() >= 9)){ - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + Messages.getString("SDKPreferencePage.No_HRH_File")); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(RED); - diagnosticCheckLabel.setBackground(GRAY); - } else if ( ((sdk.isS60()) && sdk.getSDKVersion().getMajor() == 0)){ - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + Messages.getString("SDKPreferencePage.No_SDK_Version")); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(RED); - diagnosticCheckLabel.setBackground(GRAY); - } else { - // Everything is OK.... - diagnosticCheckLabel.setText(DIAGNOSTIC_CHECK_LABEL + "OK\r\n "); //$NON-NLS-1$ - diagnosticCheckLabel.setForeground(BLACK); - diagnosticCheckLabel.setBackground(GRAY); - } - } - } - - protected List getSDKList(){ - return sdkList; } - - protected ISDKManager getSDKManager(){ - return sdkMgr; - } + } \ No newline at end of file