debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/LaunchCreationWizard.java
changeset 0 fb279309251b
child 212 0e84cf0560e1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/wizard/LaunchCreationWizard.java	Fri Apr 03 23:33:03 2009 +0100
@@ -0,0 +1,139 @@
+/*
+* 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.cdt.internal.debug.launch.wizard;
+
+import com.nokia.carbide.cpp.ui.CarbideUIPlugin;
+import com.nokia.carbide.cpp.ui.ICarbideSharedImages;
+import com.nokia.cdt.debug.cw.symbian.SettingsData;
+import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cpp.internal.api.utils.core.*;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbench;
+
+import java.util.List;
+
+public class LaunchCreationWizard extends Wizard {
+
+	private MainExecutableSelectionWizardPage fBinarySelectionPage;
+	private LaunchWizardSummaryPage fEmulationSummaryPage;
+	private LaunchWizardSelectionPage fWizardSelectionPage;
+	private ILaunchConfigurationWorkingCopy launchConfig;
+	private boolean shouldOpenLaunchDialog;
+	private IProject project;
+	private String configurationName;
+	
+	public LaunchCreationWizard(IProject project, String configurationName, 
+										List<IPath> mmps, List<IPath> exes, IPath defaultExecutable,  
+										boolean isEmulation, boolean emulatorOnly) throws Exception {
+		this.project = project;
+		
+		// show the binary selection page as only page in main wizard if emulation, 
+		// otherwise it will be shown as needed by non-emulation wizards
+		if (isEmulation)  {
+			fEmulationSummaryPage = new LaunchWizardSummaryPage(configurationName);
+			Check.checkState(exes.size() > 0);
+			IPath emulatorPath = getEmulatorPathFromExePath(exes.get(0));
+			fBinarySelectionPage = new MainExecutableSelectionWizardPage(mmps, exes, defaultExecutable, true, emulatorPath, emulatorOnly, fEmulationSummaryPage);
+		}
+		else {	
+	        fWizardSelectionPage = new LaunchWizardSelectionPage(mmps, exes, defaultExecutable, project, configurationName);
+		}
+
+		this.configurationName = configurationName;
+	}
+
+	public boolean performFinish() {
+		if (fBinarySelectionPage != null) {
+			try {
+				Pair<IPath, IPath> exeAndMmp = fBinarySelectionPage.getSelectedExeMmpPair();
+				launchConfig = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationType(LaunchPlugin.EMULATION_LAUNCH_TYPE).newInstance(null, configurationName);
+				SettingsData.setDefaults(launchConfig, SettingsData.LaunchConfig_Emulator, project, exeAndMmp.second, exeAndMmp.first);
+		    	IPath processToLaunchTargetPath = fBinarySelectionPage.getProcessToLaunchTargetPath();	
+				if (processToLaunchTargetPath != null)
+	    			SettingsData.setProcessToLaunch(launchConfig, processToLaunchTargetPath);
+				shouldOpenLaunchDialog = fEmulationSummaryPage.shouldOpenLaunchConfigurationDialog();
+			} catch (CoreException e) {
+				LaunchPlugin.log(e);
+			}
+		}
+		
+		if (fWizardSelectionPage != null) {
+			AbstractLaunchWizard wizard = ((AbstractLaunchWizard) fWizardSelectionPage.getSelectedWizard());
+			wizard.performFinish();
+			Pair<IPath, IPath> exeAndMmp = wizard.getSelectedExeMmpPair();
+			IPath processToLaunchTargetPath = wizard.getProcessToLaunchTargetPath();
+	    	launchConfig = 
+	    		fWizardSelectionPage.getSelectedWizard().createLaunchConfiguration(exeAndMmp.second, exeAndMmp.first, processToLaunchTargetPath);
+	    	shouldOpenLaunchDialog = fWizardSelectionPage.getSelectedWizard().shouldOpenLaunchConfigurationDialog();
+		}
+		
+		return true;
+    }
+ 
+    public void addPages() {
+    	if (fBinarySelectionPage != null) {
+    		addPage(fBinarySelectionPage);
+    		addPage(fEmulationSummaryPage);
+    	} 
+    	else if (fWizardSelectionPage != null) {
+            addPage(fWizardSelectionPage);
+    	}
+    }
+    
+    @Override
+	public boolean needsPreviousAndNextButtons() {
+		return true;
+	}
+
+	public void init(IWorkbench workbench, IStructuredSelection selection) {
+        setWindowTitle(Messages.getString("LaunchCreationWizard.0")); //$NON-NLS-1$
+		setDefaultPageImageDescriptor(CarbideUIPlugin.getSharedImages().getImageDescriptor(ICarbideSharedImages.IMG_NEW_LAUNCH_CONFIG_WIZARD_BANNER));
+    }
+
+    public ILaunchConfigurationWorkingCopy getLaunchConfiguration() {
+    	return launchConfig;
+    }
+    
+	public static int openWizard(Shell shell, LaunchCreationWizard wizard) {
+		WizardDialog dialog = new WizardDialog(shell, wizard);
+		dialog.create();
+		return dialog.open();
+	}
+
+	public static IPath getEmulatorPathFromExePath(IPath pathToExe) {
+		IPath path = pathToExe.removeLastSegments(1);
+		path = path.append("epoc.exe"); //$NON-NLS-1$
+		if (path.toFile().exists())
+			return path;
+		
+		return null;
+	}
+
+	public boolean shouldOpenLaunchConfigurationDialog() {
+		return shouldOpenLaunchDialog;
+	}
+	
+}