diff -r 000000000000 -r fb279309251b core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/AddSDKDialog.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/com.nokia.carbide.cpp.sdk.ui/src/com/nokia/carbide/cpp/sdk/ui/shared/AddSDKDialog.java Fri Apr 03 23:33:03 2009 +0100 @@ -0,0 +1,374 @@ +/* +* Copyright (c) 2007-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.sdk.ui.shared; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.TrayDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.PlatformUI; +import org.osgi.framework.Version; + +import com.nokia.carbide.cpp.internal.sdk.ui.Messages; +import com.nokia.carbide.cpp.internal.sdk.ui.SDKUIHelpIds; +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.core.SymbianSDKFactory; + +/** + * Dialog that allows the user to add a new Symbian OS SDK or custkit + * to the devices.xml file. + */ +public class AddSDKDialog extends TrayDialog { + + private Combo sdkVersionCombo; + private Combo osVersionCombo; + private Combo isDefaultCombo; + private Combo vendorCombo; + private Text deviceIDtext; + private Text epocRootText; + private Button browseEPOCROOTButton; + + public static final String DEFAULT_YES = "yes"; //$NON-NLS-1$ + public static final String DEFAULT_NO = "no"; //$NON-NLS-1$ + public static final String AUTO_DETECT = "(Auto-Detect)"; //$NON-NLS-1$ + + /** + * Create the dialog + * @param parentShell + */ + public AddSDKDialog(Shell parentShell) { + super(parentShell); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) + */ + protected void configureShell(Shell shell) { + super.configureShell(shell); + shell.setText(Messages.getString("AddSDKDialog.Add_New_SDK")); //$NON-NLS-1$ + } + + @Override + protected void okPressed() { + + if (deviceIDtext.getText().length() > 0){ + if (!isValidIDName(deviceIDtext.getText())){ + return; + } + + if (vendorCombo.getText().length() > 0){ + if (!isValidVendorName(vendorCombo.getText())){ + return; + } + } else { + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Missing_Vendor_Name"), Messages.getString("AddSDKDialog.Enter_Vendor_Name")); //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + } else { + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Missing_SDK_ID"), Messages.getString("AddSDKDialog.Enter_SDK_ID")); //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + + if (epocRootText.getText().length() > 1){ + if (epocRootText.getText().charAt(1) != ':'){ + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Malformed_EPOCROOT"), Messages.getString("AddSDKDialog.EPOCROOT_drive_spec")); //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + + if (epocRootText.getText().toUpperCase().endsWith("EPOC32") || epocRootText.getText().toUpperCase().endsWith("EPOC32\\")){ //$NON-NLS-1$ //$NON-NLS-2$ + if (!MessageDialog.openConfirm(getShell(), Messages.getString("AddSDKDialog.Possible_wrong_epocroot"), Messages.getString("AddSDKDialog.EPOCROOT_Should_Point"))){ //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + } else { + File epocRootFile = new File(epocRootText.getText()); + if (!epocRootFile.exists()){ + if (!MessageDialog.openConfirm(getShell(), Messages.getString("AddSDKDialog.EPOCROOT_does_not_exist"), Messages.getString("AddSDKDialog.EPOCROOT_does_not_exist_msg"))){ //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + } + if (epocRootFile.toString().indexOf(" ") != -1){ + // Paths should not have spaces... + MessageDialog.openError(getShell(), "EPOC Root Contains Spaces", Messages.getString("AddSDKDialog.EPOCROOT_contains_spaces")); //$NON-NLS-1$ //$NON-NLS-2$ + return; + + } + } + } else { + if (epocRootText.getText().length() == 1 && epocRootText.getText().charAt(0) == '\\'){ + // OK - Currently accept only a '\'. May need to reconsider side-effects + } else { + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Missing_EPOCROOT"), Messages.getString("AddSDKDialog.Please_enter_an_EPOCROOT")); //$NON-NLS-1$ //$NON-NLS-2$ + return; + } + } + + // No objections raised, write the new device entry + String osVersionText = osVersionCombo.getText(); + Version osVersion; + String osBranch = ""; //$NON-NLS-1$ + if (osVersionText.equals(AUTO_DETECT)){ + osVersion = new Version("0.0"); //$NON-NLS-1$ + } else { + int len = osVersionText.length(); + if (Character.isLetter(osVersionText.charAt(len-1))){ + osBranch = osVersionText.substring(len-1); + osVersionText = osVersionText.substring(0, len-1); + osVersion = new Version(osVersionText); + } else { + osVersion = new Version(osVersionText); + } + } + + Version sdkVersion = new Version("0.0"); //$NON-NLS-1$ + if (!sdkVersionCombo.getText().equals(AUTO_DETECT)){ + sdkVersion = new Version(sdkVersionCombo.getText()); + } + + ISymbianSDK sdk = SymbianSDKFactory.createInstance(deviceIDtext.getText(), + epocRootText.getText(), + vendorCombo.getText(), + osVersion, + osBranch, + sdkVersion, + false); + + SDKCorePlugin.getSDKManager().addSDK(sdk); + + List sdkList = SDKCorePlugin.getSDKManager().getSDKList(); + if (sdkList != null){ + sdkList.add(sdk); + } + + if (isDefaultCombo.getText().equals(DEFAULT_YES)){ + sdk.setIsDefaultSDK(true); + SDKCorePlugin.getSDKManager().setDefaultSDK(sdk); + } else { + sdk.setIsDefaultSDK(false); + } + + super.okPressed(); + } + + private boolean isValidIDName(String sdkID){ + boolean isValid = true; + + + // check for spaces in ID + if (sdkID.contains(" ")){ //$NON-NLS-1$ + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Invalid_SDK_ID"), Messages.getString("AddSDKDialog.SDK_ID_No_Spaces")); //$NON-NLS-1$ //$NON-NLS-2$ + return false; + } + + // check that the ID is unique... + for (ISymbianSDK sdk : SDKCorePlugin.getSDKManager().getSDKList()){ + if (sdk.getUniqueId().equalsIgnoreCase(sdkID)){ + // id already exists, choose a different one... + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Duplicate_ID"), Messages.getString("AddSDKDialog.Duplicate_ID_Msg")); //$NON-NLS-1$ //$NON-NLS-2$ + return false; + } + } + + return isValid; + } + + private boolean isValidVendorName(String vendor){ + boolean isValid = true; + + String[] vendorSplit = vendor.split("[.]"); //$NON-NLS-1$ + if (vendorSplit.length == 3){ + if (!vendorSplit[0].toLowerCase().startsWith("com")){ //$NON-NLS-1$ + isValid = false; + } + } else { + isValid = false; + } + + if (isValid == false){ + MessageDialog.openError(getShell(), Messages.getString("AddSDKDialog.Invalid_name_attrib"), Messages.getString("AddSDKDialog.Invalid_name_attrib_msg")); //$NON-NLS-1$ //$NON-NLS-2$ + } + + return isValid; + } + + /** + * Create contents of the dialog + * @param parent + */ + @Override + protected Control createDialogArea(Composite parent) { + Composite container = (Composite) super.createDialogArea(parent); + final GridLayout gridLayout = new GridLayout(); + gridLayout.numColumns = 3; + container.setLayout(gridLayout); + + final Label deviceIdLabel = new Label(container, SWT.NONE); + deviceIdLabel.setToolTipText(Messages.getString("AddSDKDialog.Enter_unique_id_for_sdk")); //$NON-NLS-1$ + deviceIdLabel.setText(Messages.getString("AddSDKDialog.SDK_ID")); //$NON-NLS-1$ + + deviceIDtext = new Text(container, SWT.BORDER); + deviceIDtext.setLayoutData(new GridData(263, SWT.DEFAULT)); + new Label(container, SWT.NONE); + + final Label epocrootLabel = new Label(container, SWT.NONE); + epocrootLabel.setToolTipText(Messages.getString("AddSDKDialog.Enter_location_where_epoc32_folder")); //$NON-NLS-1$ + epocrootLabel.setText("EPOCROOT:"); //$NON-NLS-1$ + + epocRootText = new Text(container, SWT.BORDER); + epocRootText.setLayoutData(new GridData(263, SWT.DEFAULT)); + + browseEPOCROOTButton = new Button(container, SWT.NONE); + browseEPOCROOTButton.setToolTipText(Messages.getString("AddSDKDialog.Choose_folder_where_epoc32_exists")); //$NON-NLS-1$ + browseEPOCROOTButton.setText(Messages.getString("AddSDKDialog.Browse")); //$NON-NLS-1$ + addButtonListener(browseEPOCROOTButton); + + final Label vendorLabel = new Label(container, SWT.NONE); + vendorLabel.setToolTipText(Messages.getString("AddSDKDialog.Enter_name_of_sdk")); //$NON-NLS-1$ + vendorLabel.setText(Messages.getString("AddSDKDialog.Vendor")); //$NON-NLS-1$ + + vendorCombo = new Combo(container, SWT.NONE); + vendorCombo.setLayoutData(new GridData(250, SWT.DEFAULT)); + new Label(container, SWT.NONE); + vendorCombo.add(ISymbianSDK.S60_SDK_NAME); + vendorCombo.add(ISymbianSDK.S80_SDK_NAME); + vendorCombo.add(ISymbianSDK.UIQ_SDK_NAME); + vendorCombo.add(ISymbianSDK.TECHVIEW_SDK_NAME); + + final Label isDefaultLabel = new Label(container, SWT.NONE); + isDefaultLabel.setToolTipText(Messages.getString("AddSDKDialog.default_label_tooltip")); //$NON-NLS-1$ + isDefaultLabel.setText(Messages.getString("AddSDKDialog.is_default")); //$NON-NLS-1$ + + isDefaultCombo = new Combo(container, SWT.READ_ONLY); + isDefaultCombo.setLayoutData(new GridData(250, SWT.DEFAULT)); + new Label(container, SWT.NONE); + isDefaultCombo.add(DEFAULT_YES); + isDefaultCombo.add(DEFAULT_NO); + isDefaultCombo.select(1); + + final Label osVersionLabel = new Label(container, SWT.NONE); + osVersionLabel.setToolTipText(Messages.getString("AddSDKDialog.os_version_tooltip")); //$NON-NLS-1$ + osVersionLabel.setText(Messages.getString("AddSDKDialog.os_version")); //$NON-NLS-1$ + //ISymbianMacroStore sms = + List osVersions = new ArrayList(); + ISDKManager sdkMgr = SDKCorePlugin.getSDKManager(); + osVersions = sdkMgr.getSymbianMacroStore().getSupportedOSVersions(); + + osVersionCombo = new Combo(container, SWT.READ_ONLY); + osVersionCombo.setLayoutData(new GridData(250, SWT.DEFAULT)); + new Label(container, SWT.NONE); + osVersionCombo.add(AUTO_DETECT); + + for (String currVer : osVersions){ + osVersionCombo.add(currVer); + } + osVersionCombo.select(0); + + final Label sdkVersionLabel = new Label(container, SWT.NONE); + sdkVersionLabel.setToolTipText(Messages.getString("AddSDKDialog.select_sdk_tooltip")); //$NON-NLS-1$ + sdkVersionLabel.setText(Messages.getString("AddSDKDialog.sdk_version")); //$NON-NLS-1$ + + sdkVersionCombo = new Combo(container, SWT.READ_ONLY); + sdkVersionCombo.setLayoutData(new GridData(250, SWT.DEFAULT)); + sdkVersionCombo.add(AUTO_DETECT); + sdkVersionCombo.select(0); + + List sdkVerList = new ArrayList(); + sdkVerList = sdkMgr.getSymbianMacroStore().getSDKVersions(); + for (String currVer : sdkVerList){ + sdkVersionCombo.add(currVer); + } + + new Label(container, SWT.NONE); + + PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, SDKUIHelpIds.SDK_ADD_DIALOG); + + + return container; + } + + /** + * Create contents of the button bar + * @param parent + */ + @Override + protected void createButtonsForButtonBar(Composite parent) { + createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, + true); + createButton(parent, IDialogConstants.CANCEL_ID, + IDialogConstants.CANCEL_LABEL, false); + } + + /** + * Return the initial size of the dialog + */ + @Override + protected Point getInitialSize() { + //return new Point(428, 256); + return super.getInitialSize(); + } + + /** + * 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(browseEPOCROOTButton)) { + browseEPOCROOT(); + } + } + }; + aButton.addSelectionListener(listener); + } + + private void browseEPOCROOT(){ + DirectoryDialog browseDir = new DirectoryDialog(getShell(), SWT.OPEN); + browseDir.setMessage(Messages.getString("AddSDKDialog.Choose_location_for_EPOCROOT")); //$NON-NLS-1$ + File symbianFolder = new File("C:/Symbian/"); //$NON-NLS-1$ + if (symbianFolder.exists()){ + browseDir.setFilterPath(symbianFolder.toString()); + } + + String dirText = browseDir.open(); + if (dirText != null){ + epocRootText.setText(dirText); + } + } + +}