diff -r 000000000000 -r fb279309251b core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/sdk/ui/SDKPreferencePage.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/internal/sdk/ui/SDKPreferencePage.java Fri Apr 03 23:33:03 2009 +0100 @@ -0,0 +1,568 @@ +/* +* 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 the License "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.carbide.cpp.internal.sdk.ui; + +import java.io.*; +import java.util.*; +import java.util.List; + +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.swt.SWT; +import org.eclipse.swt.events.*; +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 com.nokia.carbide.cpp.sdk.core.*; +import com.nokia.carbide.cpp.sdk.ui.SDKUIPlugin; +import com.nokia.carbide.cpp.sdk.ui.shared.AddSDKDialog; + +public class SDKPreferencePage + extends PreferencePage + implements IWorkbenchPreferencePage { + + ISDKManager sdkMgr; + 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; + + public SDKPreferencePage() { + super(); + + } + + @Override + protected Control createContents(Composite parent) { + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) + */ + 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(); + 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 + checkDevicesXMLExist(); + + 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); + + 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$ + + 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); + + 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); + } + + public boolean performOk() { + + IPreferenceStore prefsStore = SDKUIPlugin.getDefault().getPreferenceStore(); + prefsStore.setValue(SDKUIPreferenceConstants.LISTEN_FOR_DEVICES_XML_CHANGE, listenForDevicesXMLChangeButton.getSelection()); + + for (ISymbianSDK sdk : sdkMgr.getSDKList()){ + sdk.setEnabled(false); + } + Object[] sdkObjects = sdkListTableViewer.getCheckedElements(); + for (Object currObj : sdkObjects){ + if (currObj instanceof ISymbianSDK){ + ISymbianSDK sdk = (ISymbianSDK)currObj; + sdk.setEnabled(true); + } + } + + ISDKManager sdkMgr =SDKCorePlugin.getSDKManager(); + 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. + */ + 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 { + + /** + * 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; + } + + /** + * 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$ + } + + private Color lBlack = Display.getDefault().getSystemColor(SWT.COLOR_BLACK); + private Color lRed = Display.getDefault().getSystemColor(SWT.COLOR_RED); + + 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 { + + + /** + * 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]; + } + + public void dispose() { + } + + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + //do nothing + } + } + + /** + * Sets the listener event to a button. + * + * @param 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(); + } + + } + }; + aButton.addSelectionListener(listener); + } + + private void sdkpropertiesButtonAction(){ + ISymbianSDK sdk = (ISymbianSDK)((IStructuredSelection)sdkListTableViewer.getSelection()).getFirstElement(); + if (sdk != null){ + SDKPropertiesDialog sdkPropDlg = new SDKPropertiesDialog(getShell(), this, sdk); + if (sdkPropDlg.open() == SDKPropertiesDialog.OK){ + sdkListTableViewer.refresh(); + setSelectedSDKInfoText(sdk); + } + } 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 addNewSdkButtonAction(){ + + AddSDKDialog dialog = new AddSDKDialog(getShell()); + if (dialog.open() == AddSDKDialog.OK){ + addSDKComponentTableItems(); + sdkListTableViewer.refresh(); + } + } + + private void rescanNowButtonAction(){ + 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); + } + + 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 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); + } + + // 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 (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()); + } + 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); + } + 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; + } + + private void checkDevicesXMLExist(){ + if (sdkMgr == null){ + return; + } + + File devicesFile = sdkMgr.getDevicesXMLFile(); + if (!devicesFile.exists()){ + if (true == MessageDialog.openQuestion(shell, "Cannot find devices.xml.", "Devices.xml is required for Carbide.c++ use. Do you want to create this file?\n\n" + ISDKManager.DEFAULT_DEVICES_XML_DIR + ISDKManager.DEVICES_FILE_NAME)){ + try { + //First check to make sure the directory exists.... + File devicesPath = new File(ISDKManager.DEFAULT_DEVICES_XML_DIR); + if (!devicesPath.exists()){ + devicesPath.mkdirs(); + } + + devicesFile = new File(ISDKManager.DEFAULT_DEVICES_XML_DIR + ISDKManager.DEVICES_FILE_NAME); + devicesFile.createNewFile(); + FileWriter fw = new FileWriter(devicesFile); + fw.write(""); + fw.close(); + } catch (IOException e){ + MessageDialog.openError(shell, "Cannot create file.", "Could not create file: " + devicesFile.toString()); + e.printStackTrace(); + } + } else { + MessageDialog.openError(shell, "File not created.", "File not created. You will be unable to create project in Carbide.c++."); + } + + } + } + +} \ No newline at end of file