initial commit for PS wizard
authordadubrow
Mon, 18 Oct 2010 16:58:49 -0500
changeset 2160 3a82092877ea
parent 2159 db61d072b92b
child 2161 5dce04793589
initial commit for PS wizard
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractLaunchWizard.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractLaunchWizardSection.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractUnifiedLaunchOptionsPage.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/ConnectToDeviceSection.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessSection.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/LaunchWizard.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/LaunchWizardData.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/OtherSettingsSection.java
debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/UnifiedLaunchOptionsPage.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractLaunchWizard.java	Mon Oct 18 16:58:49 2010 -0500
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 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"
+* 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.newwizard;
+
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.PageChangedEvent;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.wizard.IWizardContainer;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+import com.nokia.carbide.cpp.ui.CarbideUIPlugin;
+import com.nokia.carbide.cpp.ui.ICarbideSharedImages;
+import com.nokia.carbide.remoteconnections.interfaces.IService;
+import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cdt.internal.debug.launch.wizard.ILaunchCreationWizard;
+import com.nokia.cdt.internal.debug.launch.wizard.LaunchOptions;
+
+/**
+ * New launch wizard for Carbide 3.0.
+ * 
+ * See https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=10419
+ */
+public abstract class AbstractLaunchWizard extends Wizard implements ILaunchCreationWizard {
+	 
+	private LaunchWizardData launchData;
+	private AbstractUnifiedLaunchOptionsPage mainPage;
+	private Button advancedButton;
+	private boolean advancedEdit;
+	private IPageChangedListener pageChangedListener;
+	private boolean hasFinished;
+	
+	public AbstractLaunchWizard(LaunchOptions launchOptions, IService dbgService, String title) {
+		launchData = new LaunchWizardData(launchOptions, dbgService);
+		mainPage = createMainPage(launchData); 
+		mainPage.initializeSettings();
+		setWindowTitle(title);
+    }
+
+	protected abstract AbstractUnifiedLaunchOptionsPage createMainPage(LaunchWizardData data);
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.wizard.Wizard#addPages()
+	 */
+	@Override
+	public void addPages() {
+		addPage(mainPage);
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.jface.wizard.Wizard#setContainer(org.eclipse.jface.wizard.IWizardContainer)
+	 */
+	@Override
+	public void setContainer(final IWizardContainer wizardContainer) {
+		super.setContainer(wizardContainer);
+		
+		// Thanks, JFace, for making it so hard to know when the UI is ready
+		if (wizardContainer instanceof WizardDialog && advancedButton == null) {
+			pageChangedListener = new IPageChangedListener() {
+				
+				public void pageChanged(PageChangedEvent event) {
+					addAdvancedButton();
+					((WizardDialog)getContainer()).removePageChangedListener(pageChangedListener);
+				}
+			};
+			((WizardDialog)wizardContainer).addPageChangedListener(pageChangedListener);
+		}
+	}
+
+	protected void addAdvancedButton() {
+		if (advancedButton == null) {
+			Composite parent = (Composite) ((Dialog) getContainer()).buttonBar;
+			if (parent != null) {
+				
+				advancedButton = new Button(parent, SWT.CHECK);
+				GridDataFactory.swtDefaults().align(SWT.LEFT, SWT.CENTER).indent(6, 0).applyTo(advancedButton);
+				((GridLayout) parent.getLayout()).numColumns++;
+				advancedButton.moveBelow(parent.getChildren()[0]);
+				
+				advancedButton.setText(Messages.getString("LaunchWizard.AdvancedLabel")); //$NON-NLS-1$
+				advancedButton.setToolTipText(MessageFormat.format(
+						Messages.getString("LaunchWizard.AdvancedTip"), //$NON-NLS-1$
+						launchData.getModeLabel()));
+				advancedButton.addSelectionListener(new SelectionAdapter() {
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						updateDebugEditButton();
+					}
+				});
+			}
+			
+			// Thanks, JFace, for deleting validation messages on the first display
+			mainPage.validatePage();
+			updateDebugEditButton();
+		}
+	}
+	
+	@Override
+	public boolean canFinish() {
+		if (advancedEdit)
+			return true;
+		return super.canFinish();
+	}	
+
+	protected void updateDebugEditButton() {
+		Button finishButton = findFinishButton();
+		if (finishButton != null) {
+			advancedEdit = advancedButton.getSelection();
+			if (advancedEdit) {
+				finishButton.setText(Messages.getString("LaunchWizard.EditLabel")); //$NON-NLS-1$
+				finishButton.setToolTipText(Messages.getString("LaunchWizard.EditTip")); //$NON-NLS-1$
+				getContainer().updateButtons();
+			} else {
+				finishButton.setText(launchData.getModeLabel());
+				finishButton.setToolTipText(Messages.getString("LaunchWizard.FinishTip")); //$NON-NLS-1$
+				getContainer().updateButtons();
+			}
+		}
+	}
+
+	/**
+	 * Thanks, SWT and JFace, for making this so difficult
+	 * @return the Finish button
+	 */
+	private Button findFinishButton() {
+		if (getContainer() instanceof Dialog) {
+			return findFinishButton((Composite) ((Dialog) getContainer()).buttonBar);
+		}
+		return null;
+	}
+
+	/**
+	 * @param buttonBar
+	 * @return
+	 */
+	private Button findFinishButton(Composite parent) {
+		for (Control kid : parent.getChildren()) {
+			if (kid instanceof Button) {
+				if (kid.getData() instanceof Integer && (Integer) kid.getData() == IDialogConstants.FINISH_ID) {
+					return (Button) kid;
+				}
+			}
+			else if (kid instanceof Composite) {
+				Button button = findFinishButton((Composite) kid);
+				if (button != null)
+					return button;
+			}
+		}
+		return null;
+	}
+
+	@Override
+	public boolean performFinish() {
+		hasFinished = true;
+		return true;
+	}
+
+	public boolean shouldOpenLaunchConfigurationDialog() {
+		return hasFinished && advancedEdit;
+	}
+
+	public ILaunchConfigurationWorkingCopy getLaunchConfiguration() {
+		if (!hasFinished)
+			return null;
+		
+		ILaunchConfigurationWorkingCopy config = null;
+		try {
+			config = launchData.createConfiguration();
+		} catch (CoreException e) {
+			LaunchPlugin.log(e);
+		}
+		
+		return config;
+	}
+
+	public void init() {
+		setDefaultPageImageDescriptor(CarbideUIPlugin.getSharedImages().getImageDescriptor(ICarbideSharedImages.IMG_NEW_LAUNCH_CONFIG_WIZARD_BANNER));
+	}
+
+	public int openWizard(Shell shell) {
+		WizardDialog dialog = new WizardDialog(shell, this);
+		return dialog.open();
+	}
+}
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractLaunchWizardSection.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractLaunchWizardSection.java	Mon Oct 18 16:58:49 2010 -0500
@@ -56,10 +56,10 @@
 	protected Button changeButton;
 	protected Composite control;
 	private ISectionChangeListener changeListener;
-	protected final UnifiedLaunchOptionsPage launchOptionsPage;
+	protected final AbstractUnifiedLaunchOptionsPage launchOptionsPage;
 
 
-	public AbstractLaunchWizardSection(LaunchWizardData data, String sectionName, UnifiedLaunchOptionsPage launchOptionsPage) {
+	public AbstractLaunchWizardSection(LaunchWizardData data, String sectionName, AbstractUnifiedLaunchOptionsPage launchOptionsPage) {
 		this.data = data;
 		this.sectionName = sectionName;
 		this.launchOptionsPage = launchOptionsPage;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/AbstractUnifiedLaunchOptionsPage.java	Mon Oct 18 16:58:49 2010 -0500
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 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"
+* 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.newwizard;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
+import com.nokia.cdt.internal.debug.launch.newwizard.IWizardSection.ISectionChangeListener;
+import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
+
+public abstract class AbstractUnifiedLaunchOptionsPage extends WizardPage implements ISectionChangeListener {
+
+	protected LaunchWizardData data;
+	protected ArrayList<IWizardSection> sections;
+
+	protected AbstractUnifiedLaunchOptionsPage(String pageName, LaunchWizardData data) {
+		super(pageName);
+		this.data = data;
+		this.sections = new ArrayList<IWizardSection>();
+	}
+
+	protected void addSection(IWizardSection section) {
+		sections.add(section);
+	}
+	
+	public void createControl(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		
+		GridLayoutFactory.fillDefaults().applyTo(composite);
+		
+		setPageComplete(false);
+		
+		for (IWizardSection section : sections) {
+			section.createControl(composite);
+			section.setChangeListener(this);
+			GridDataFactory.fillDefaults().grab(true, true).applyTo(section.getControl());
+		}
+		
+		WorkbenchUtils.setHelpContextId(composite, LaunchWizardHelpIds.WIZARD_DIALOG_LAUNCH_OPTIONS_PAGE);
+		
+		setControl(composite);
+	}
+
+	public void initializeSettings() {
+		for (IWizardSection section : sections) {
+			section.initializeSettings();
+		}
+		validatePage();
+	}
+
+	public void validatePage() {
+		setMessage(null, INFORMATION);
+		setErrorMessage(null);
+		setPageComplete(true);
+		
+		IStatus pageStatus = null;
+		
+		// validate the subsections
+		StringBuilder builder = new StringBuilder();
+		int severity = IStatus.OK;
+		for (IWizardSection section : sections) {
+			IStatus status = section.getStatus();
+			if (status.isOK())
+				continue;
+			if (builder.length() > 0)
+				builder.append("\n"); //$NON-NLS-1$
+			
+			builder.append(MessageFormat.format("{0}: {1}", //$NON-NLS-1$
+					section.getSectionName(), 
+					status.getMessage()));
+			severity = Math.max(severity, status.getSeverity());
+		}
+		if (severity == IStatus.OK) {
+			IStatus status = getStatus();
+			if (!status.isOK()) {
+				builder.append(status.getMessage());
+				severity = status.getSeverity();
+			}
+		}
+		if (severity != 0 || builder.length() > 0) {
+			// error from one or more sections
+			pageStatus = new Status(severity, LaunchPlugin.PLUGIN_ID, builder.toString());
+		} else {
+			// sections are good; validate the page as a whole
+			pageStatus = data.validate();
+		}
+		
+		setTitle(Messages.getString("UnifiedLaunchOptionsPage.TitleText")); //$NON-NLS-1$
+		
+		if (pageStatus != null && !pageStatus.isOK()) {
+			setMessage(pageStatus.getMessage(), severityToMsgType(pageStatus.getSeverity()));
+			setPageComplete(pageStatus.getSeverity() < IStatus.ERROR);
+		}
+	}
+
+	private int severityToMsgType(int severity) {
+		switch (severity) {
+		case IStatus.OK:
+		case IStatus.INFO:
+			return INFORMATION;
+		case IStatus.WARNING:
+			return WARNING;
+		case IStatus.ERROR:
+		default:
+			return ERROR;
+		}
+	}
+
+	protected abstract IStatus getStatus();
+
+	public void changed() {
+		validatePage();
+		Control control = getControl();
+		if (control != null && !control.isDisposed())
+			getWizard().getContainer().getShell().pack();
+	}
+}
\ No newline at end of file
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/ConnectToDeviceSection.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/ConnectToDeviceSection.java	Mon Oct 18 16:58:49 2010 -0500
@@ -43,7 +43,7 @@
 	 * @param unifiedLaunchOptionsPage 
 	 * 
 	 */
-	public ConnectToDeviceSection(LaunchWizardData data, UnifiedLaunchOptionsPage launchOptionsPage) {
+	public ConnectToDeviceSection(LaunchWizardData data, AbstractUnifiedLaunchOptionsPage launchOptionsPage) {
 		super(data, Messages.getString("ConnectToDeviceSection.Title"), launchOptionsPage); //$NON-NLS-1$
 		manager = RemoteConnectionsActivator.getConnectionsManager();
 	}
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessSection.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/DebugRunProcessSection.java	Mon Oct 18 16:58:49 2010 -0500
@@ -37,7 +37,7 @@
  */
 public class DebugRunProcessSection extends AbstractLaunchWizardSection {
 
-	public DebugRunProcessSection(LaunchWizardData data, UnifiedLaunchOptionsPage launchOptionsPage) {
+	public DebugRunProcessSection(LaunchWizardData data, AbstractUnifiedLaunchOptionsPage launchOptionsPage) {
 		super(data, MessageFormat.format(Messages.getString("DebugRunProcessSection.Title"), data.getModeLabel()), launchOptionsPage); //$NON-NLS-1$
 	}
 	
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/LaunchWizard.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/LaunchWizard.java	Mon Oct 18 16:58:49 2010 -0500
@@ -17,32 +17,7 @@
 
 package com.nokia.cdt.internal.debug.launch.newwizard;
 
-import java.text.MessageFormat;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.IPageChangedListener;
-import org.eclipse.jface.dialogs.PageChangedEvent;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.wizard.IWizardContainer;
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Shell;
-
-import com.nokia.carbide.cpp.ui.CarbideUIPlugin;
-import com.nokia.carbide.cpp.ui.ICarbideSharedImages;
 import com.nokia.carbide.remoteconnections.interfaces.IService;
-import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
-import com.nokia.cdt.internal.debug.launch.wizard.ILaunchCreationWizard;
 import com.nokia.cdt.internal.debug.launch.wizard.LaunchOptions;
 
 /**
@@ -50,162 +25,15 @@
  * 
  * See https://xdabug001.ext.nokia.com/bugzilla/show_bug.cgi?id=10419
  */
-public class LaunchWizard extends Wizard implements ILaunchCreationWizard {
+public class LaunchWizard extends AbstractLaunchWizard {
 	 
-	private LaunchWizardData launchData;
-	private UnifiedLaunchOptionsPage mainPage;
-	private Button advancedButton;
-	private boolean advancedEdit;
-	private IPageChangedListener pageChangedListener;
-	private boolean hasFinished;
-	
 	public LaunchWizard(LaunchOptions launchOptions, IService trkService) {
-		launchData = new LaunchWizardData(launchOptions, trkService);
-		mainPage = new UnifiedLaunchOptionsPage(launchData); 
-		mainPage.initializeSettings();
-		setWindowTitle(Messages.getString("LaunchWizard.Title")); //$NON-NLS-1$
+		super(launchOptions, trkService, Messages.getString("LaunchWizard.Title")); //$NON-NLS-1$
     }
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.wizard.Wizard#addPages()
-	 */
 	@Override
-	public void addPages() {
-		addPage(mainPage);
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.wizard.Wizard#setContainer(org.eclipse.jface.wizard.IWizardContainer)
-	 */
-	@Override
-	public void setContainer(final IWizardContainer wizardContainer) {
-		super.setContainer(wizardContainer);
-		
-		// Thanks, JFace, for making it so hard to know when the UI is ready
-		if (wizardContainer instanceof WizardDialog && advancedButton == null) {
-			pageChangedListener = new IPageChangedListener() {
-				
-				public void pageChanged(PageChangedEvent event) {
-					addAdvancedButton();
-					((WizardDialog)getContainer()).removePageChangedListener(pageChangedListener);
-				}
-			};
-			((WizardDialog)wizardContainer).addPageChangedListener(pageChangedListener);
-		}
+	protected AbstractUnifiedLaunchOptionsPage createMainPage(LaunchWizardData data) {
+		return new UnifiedLaunchOptionsPage(data);
 	}
 
-	protected void addAdvancedButton() {
-		if (advancedButton == null) {
-			Composite parent = (Composite) ((Dialog) getContainer()).buttonBar;
-			if (parent != null) {
-				
-				advancedButton = new Button(parent, SWT.CHECK);
-				GridDataFactory.swtDefaults().align(SWT.LEFT, SWT.CENTER).indent(6, 0).applyTo(advancedButton);
-				((GridLayout) parent.getLayout()).numColumns++;
-				advancedButton.moveBelow(parent.getChildren()[0]);
-				
-				advancedButton.setText(Messages.getString("LaunchWizard.AdvancedLabel")); //$NON-NLS-1$
-				advancedButton.setToolTipText(MessageFormat.format(
-						Messages.getString("LaunchWizard.AdvancedTip"), //$NON-NLS-1$
-						launchData.getModeLabel()));
-				advancedButton.addSelectionListener(new SelectionAdapter() {
-					@Override
-					public void widgetSelected(SelectionEvent e) {
-						updateDebugEditButton();
-					}
-				});
-			}
-			
-			// Thanks, JFace, for deleting validation messages on the first display
-			mainPage.validatePage();
-			updateDebugEditButton();
-		}
-	}
-	
-	@Override
-	public boolean canFinish() {
-		if (advancedEdit)
-			return true;
-		return super.canFinish();
-	}	
-
-	protected void updateDebugEditButton() {
-		Button finishButton = findFinishButton();
-		if (finishButton != null) {
-			advancedEdit = advancedButton.getSelection();
-			if (advancedEdit) {
-				finishButton.setText(Messages.getString("LaunchWizard.EditLabel")); //$NON-NLS-1$
-				finishButton.setToolTipText(Messages.getString("LaunchWizard.EditTip")); //$NON-NLS-1$
-				getContainer().updateButtons();
-			} else {
-				finishButton.setText(launchData.getModeLabel());
-				finishButton.setToolTipText(Messages.getString("LaunchWizard.FinishTip")); //$NON-NLS-1$
-				getContainer().updateButtons();
-			}
-		}
-	}
-
-	/**
-	 * Thanks, SWT and JFace, for making this so difficult
-	 * @return the Finish button
-	 */
-	private Button findFinishButton() {
-		if (getContainer() instanceof Dialog) {
-			return findFinishButton((Composite) ((Dialog) getContainer()).buttonBar);
-		}
-		return null;
-	}
-
-	/**
-	 * @param buttonBar
-	 * @return
-	 */
-	private Button findFinishButton(Composite parent) {
-		for (Control kid : parent.getChildren()) {
-			if (kid instanceof Button) {
-				if (kid.getData() instanceof Integer && (Integer) kid.getData() == IDialogConstants.FINISH_ID) {
-					return (Button) kid;
-				}
-			}
-			else if (kid instanceof Composite) {
-				Button button = findFinishButton((Composite) kid);
-				if (button != null)
-					return button;
-			}
-		}
-		return null;
-	}
-
-	@Override
-	public boolean performFinish() {
-		hasFinished = true;
-		return true;
-	}
-
-	public boolean shouldOpenLaunchConfigurationDialog() {
-		return hasFinished && advancedEdit;
-	}
-
-	public ILaunchConfigurationWorkingCopy getLaunchConfiguration() {
-		if (!hasFinished)
-			return null;
-		
-		ILaunchConfigurationWorkingCopy config = null;
-		try {
-			config = launchData.createConfiguration();
-		} catch (CoreException e) {
-			LaunchPlugin.log(e);
-		}
-		
-		return config;
-	}
-
-	public void init() {
-		setDefaultPageImageDescriptor(CarbideUIPlugin.getSharedImages().getImageDescriptor(ICarbideSharedImages.IMG_NEW_LAUNCH_CONFIG_WIZARD_BANNER));
-	}
-
-	public int openWizard(Shell shell) {
-		WizardDialog dialog = new WizardDialog(shell, this);
-		return dialog.open();
-	}
 }
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/LaunchWizardData.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/LaunchWizardData.java	Mon Oct 18 16:58:49 2010 -0500
@@ -116,7 +116,7 @@
 		USE_WORKSPACE_SETTING,
 	}
 
-	public LaunchWizardData(LaunchOptions launchOptions, IService trkService) {
+	public LaunchWizardData(LaunchOptions launchOptions, IService dbgService) {
 		this.mmps = launchOptions.mmps;
 		this.exes = launchOptions.exes;
 		this.defaultExecutable = launchOptions.defaultExecutable;
@@ -125,7 +125,7 @@
 		this.isEmulation = launchOptions.isEmulation;
 		this.emulatorOnly = launchOptions.emulatorOnly;
 		this.mode = launchOptions.mode;
-		this.service = trkService;
+		this.service = dbgService;
 	}
 
 	/**
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/OtherSettingsSection.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/OtherSettingsSection.java	Mon Oct 18 16:58:49 2010 -0500
@@ -31,7 +31,7 @@
 	/**
 	 * 
 	 */
-	public OtherSettingsSection(LaunchWizardData data, UnifiedLaunchOptionsPage launchOptionsPage) {
+	public OtherSettingsSection(LaunchWizardData data, AbstractUnifiedLaunchOptionsPage launchOptionsPage) {
 		super(data, Messages.getString("OtherSettingsSection.Title"), launchOptionsPage); //$NON-NLS-1$
 		
 	}
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/UnifiedLaunchOptionsPage.java	Fri Oct 15 13:04:49 2010 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/newwizard/UnifiedLaunchOptionsPage.java	Mon Oct 18 16:58:49 2010 -0500
@@ -18,22 +18,12 @@
 package com.nokia.cdt.internal.debug.launch.newwizard;
 
 import java.io.File;
-import java.text.MessageFormat;
-import java.util.ArrayList;
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.layout.GridLayoutFactory;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
 
 import com.nokia.cdt.internal.debug.launch.LaunchPlugin;
-import com.nokia.cdt.internal.debug.launch.newwizard.IWizardSection.ISectionChangeListener;
 import com.nokia.cdt.internal.debug.launch.newwizard.LaunchWizardData.EExeSelection;
-import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
 
 /**
  * This page presents three sections:
@@ -51,120 +41,15 @@
  * Each section is validated separately and editable with its own dialog.  Changes in
  * the dialog are not applied until the dialog is accepted.
  */
-public class UnifiedLaunchOptionsPage extends WizardPage implements ISectionChangeListener {
+public class UnifiedLaunchOptionsPage extends AbstractUnifiedLaunchOptionsPage {
 
-	private final LaunchWizardData data;
-	private ArrayList<IWizardSection> sections;
-	
-	
-	/**
-	 * @param mmps
-	 * @param exes
-	 * @param defaultExecutable
-	 * @param project
-	 * @param configurationName
-	 */
 	public UnifiedLaunchOptionsPage(LaunchWizardData data) {
-		super(Messages.getString("UnifiedLaunchOptionsPage.Title")); //$NON-NLS-1$
-		
+		super(Messages.getString("UnifiedLaunchOptionsPage.Title"), data); //$NON-NLS-1$
 		setDescription(Messages.getString("UnifiedLaunchOptionsPage.Desc")); //$NON-NLS-1$
 		
-		this.data = data;
-		this.sections = new ArrayList<IWizardSection>();
-		
-
-		IWizardSection section;
-		
-		section = new ConnectToDeviceSection(data, this);
-		sections.add(section);
-		
-		section = new DebugRunProcessSection(data, this);
-		sections.add(section);
-		
-		section = new OtherSettingsSection(data, this);
-		sections.add(section);
-	}
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
-	 */
-	public void createControl(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NONE);
-		
-		GridLayoutFactory.fillDefaults().applyTo(composite);
-		
-		setPageComplete(false);
-		
-		for (IWizardSection section : sections) {
-			section.createControl(composite);
-			section.setChangeListener(this);
-			GridDataFactory.fillDefaults().grab(true, true).applyTo(section.getControl());
-		}
-		
-		WorkbenchUtils.setHelpContextId(composite, LaunchWizardHelpIds.WIZARD_DIALOG_LAUNCH_OPTIONS_PAGE);
-		
-		setControl(composite);
-	}
-
-	/**
-	 * @return
-	 */
-	public void validatePage() {
-		setMessage(null, INFORMATION);
-		setErrorMessage(null);
-		setPageComplete(true);
-		
-		IStatus pageStatus = null;
-		
-		// validate the subsections
-		StringBuilder builder = new StringBuilder();
-		int severity = IStatus.OK;
-		for (IWizardSection section : sections) {
-			IStatus status = section.getStatus();
-			if (status.isOK())
-				continue;
-			if (builder.length() > 0)
-				builder.append("\n"); //$NON-NLS-1$
-			
-			builder.append(MessageFormat.format("{0}: {1}", //$NON-NLS-1$
-					section.getSectionName(), 
-					status.getMessage()));
-			severity = Math.max(severity, status.getSeverity());
-		}
-		if (severity == IStatus.OK) {
-			IStatus status = getStatus();
-			if (!status.isOK()) {
-				builder.append(status.getMessage());
-				severity = status.getSeverity();
-			}
-		}
-		if (severity != 0 || builder.length() > 0) {
-			// error from one or more sections
-			pageStatus = new Status(severity, LaunchPlugin.PLUGIN_ID, builder.toString());
-		} else {
-			// sections are good; validate the page as a whole
-			pageStatus = data.validate();
-		}
-		
-		setTitle(Messages.getString("UnifiedLaunchOptionsPage.TitleText")); //$NON-NLS-1$
-		
-		if (pageStatus != null && !pageStatus.isOK()) {
-			setMessage(pageStatus.getMessage(), severityToMsgType(pageStatus.getSeverity()));
-			setPageComplete(pageStatus.getSeverity() < IStatus.ERROR);
-		}
-	}
-
-	private int severityToMsgType(int severity) {
-		switch (severity) {
-		case IStatus.OK:
-		case IStatus.INFO:
-			return INFORMATION;
-		case IStatus.WARNING:
-			return WARNING;
-		case IStatus.ERROR:
-		default:
-			return ERROR;
-		}
+		addSection(new ConnectToDeviceSection(data, this));
+		addSection(new DebugRunProcessSection(data, this));
+		addSection(new OtherSettingsSection(data, this));
 	}
 
 	protected IStatus getStatus() {
@@ -185,28 +70,9 @@
 					!data.getExePath().toFile().exists()) {
 				return new Status(IStatus.WARNING, LaunchPlugin.PLUGIN_ID,
 						Messages.getString("UnifiedLaunchOptionsPage.ExeFileMissingWarning")); //$NON-NLS-1$
-				
 			}
 		}
 		
 		return Status.OK_STATUS;
 	}
-	
-	public void initializeSettings() {
-		for (IWizardSection section : sections) {
-			section.initializeSettings();
-		}
-		validatePage();
-	}
-
-	/* (non-Javadoc)
-	 * @see com.nokia.cdt.internal.debug.launch.wizard2.IWizardSection.ISectionChangeListener#changed()
-	 */
-	public void changed() {
-		validatePage();
-		Control control = getControl();
-		if (control != null && !control.isDisposed())
-			getWizard().getContainer().getShell().pack();
-
-	}
 }