From ca538d05a59df408b5d76a3d3c568cc08c3df23b Mon Sep 17 00:00:00 2001 From: Alena Laskavaia Date: Tue, 26 Jan 2016 09:47:48 -0500 Subject: [PATCH] launchar: launch target wizard fixes - removed hack with overloading wizard classes - added wizard contribution, so it can be bound to command or used without launchbar - removed hack with using category to identify launch target wizard - added more comments in schema - fixed hack when parsing wizard if they categorized Change-Id: I791679ef30c395db10ec2528a6e2b90370e56a75 --- bundles/org.eclipse.launchbar.ui/plugin.xml | 13 ++++++-- .../schema/launchTargetTypeUI.exsd | 22 ++++++++++++-- .../ui/internal/controls/TargetSelector.java | 5 +--- .../target/LaunchTargetUIManager.java | 20 +++++++++++-- .../target/NewLaunchTargetWizard.java | 30 ++++++++++++++----- .../target/NewLaunchTargetWizardAction.java | 24 +++++---------- 6 files changed, 80 insertions(+), 34 deletions(-) diff --git a/bundles/org.eclipse.launchbar.ui/plugin.xml b/bundles/org.eclipse.launchbar.ui/plugin.xml index 7050eeb425c..34f16b217a4 100644 --- a/bundles/org.eclipse.launchbar.ui/plugin.xml +++ b/bundles/org.eclipse.launchbar.ui/plugin.xml @@ -72,13 +72,22 @@ - + + name="Launch Targets"> + + + diff --git a/bundles/org.eclipse.launchbar.ui/schema/launchTargetTypeUI.exsd b/bundles/org.eclipse.launchbar.ui/schema/launchTargetTypeUI.exsd index 8173b9db2c3..cb66eccd31b 100644 --- a/bundles/org.eclipse.launchbar.ui/schema/launchTargetTypeUI.exsd +++ b/bundles/org.eclipse.launchbar.ui/schema/launchTargetTypeUI.exsd @@ -6,7 +6,8 @@ - [Enter description of this extension point.] + This extension point allow to contribute UI element for launch targets, specifically target label provider +and target creation wizard. @@ -74,6 +75,11 @@ + + + Contribute a wizard that can create a launch target, normally it would be a wizard per target type. + + @@ -181,7 +187,19 @@ Since 3.0 - [Enter extension point usage example here.] + <extension + point="org.eclipse.launchbar.ui.launchTargetTypeUI"> + <launchTargetTypeUI + id="com.qnx.tools.ide.target.qconn" + labelProvider="com.qnx.tools.ide.target.qconn.internal.ui.QConnLaunchTargetLabelProvider"> + + </launchTargetTypeUI> + <wizard + class="com.qnx.tools.ide.target.qconn.internal.ui.wizards.NewQconnTargetWizard" + id="com.qnx.tools.ide.target.qconn.ui.NewQNXTarget" + name="New QNX Target"> + </wizard> + </extension> diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/TargetSelector.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/TargetSelector.java index 305f935c322..cc19b25bc2a 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/TargetSelector.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/controls/TargetSelector.java @@ -211,10 +211,7 @@ public class TargetSelector extends CSelector implements ILaunchTargetListener { MouseListener mouseListener = new MouseAdapter() { @Override public void mouseUp(org.eclipse.swt.events.MouseEvent event) { - NewLaunchTargetWizardAction newWizardAction = new NewLaunchTargetWizardAction( - PlatformUI.getWorkbench().getActiveWorkbenchWindow(), - targetUIManager.getLaunchTargetWizards()); - newWizardAction.run(); + new NewLaunchTargetWizardAction().run(); } }; diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/LaunchTargetUIManager.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/LaunchTargetUIManager.java index 4e15553fcb3..7c4a10a4431 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/LaunchTargetUIManager.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/LaunchTargetUIManager.java @@ -7,7 +7,9 @@ *******************************************************************************/ package org.eclipse.launchbar.ui.internal.target; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.eclipse.core.runtime.CoreException; @@ -88,8 +90,22 @@ public class LaunchTargetUIManager implements ILaunchTargetUIManager { return wizards; WizardsRegistryReader reader = new WizardsRegistryReader(Activator.PLUGIN_ID, "launchTargetTypeUI"); //$NON-NLS-1$ WizardCollectionElement wizardElements = reader.getWizardElements(); - WizardCollectionElement otherCategory = (WizardCollectionElement) wizardElements.getChildren(null)[0]; - wizards = otherCategory.getWizards(); + List result = collectWizards(wizardElements, new ArrayList<>()); + wizards = result.toArray(new IWizardDescriptor[result.size()]); return wizards; } + + /* we don't show categories we have to flatten the wizards */ + private List collectWizards(WizardCollectionElement element, List result) { + Object[] children = element.getChildren(null); // children are categories + IWizardDescriptor[] wizards = element.getWizards(); + for (IWizardDescriptor desc : wizards) { + result.add(desc); + } + for (Object cat : children) { + WizardCollectionElement category = (WizardCollectionElement) cat; + collectWizards(category, result); + } + return result; + } } diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizard.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizard.java index 0d79e1c0579..7fb746f169e 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizard.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizard.java @@ -10,15 +10,18 @@ *******************************************************************************/ package org.eclipse.launchbar.ui.internal.target; +import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.Wizard; +import org.eclipse.launchbar.ui.internal.Activator; +import org.eclipse.launchbar.ui.target.ILaunchTargetUIManager; import org.eclipse.ui.IWorkbench; +import org.eclipse.ui.IWorkbenchWizard; import org.eclipse.ui.internal.IWorkbenchGraphicConstants; import org.eclipse.ui.internal.WorkbenchImages; import org.eclipse.ui.internal.WorkbenchMessages; import org.eclipse.ui.internal.WorkbenchPlugin; -import org.eclipse.ui.wizards.IWizardCategory; import org.eclipse.ui.wizards.IWizardDescriptor; /** @@ -26,9 +29,10 @@ import org.eclipse.ui.wizards.IWizardDescriptor; * (nested) wizard to run. The set of available new wizards comes from the new * extension point. */ -public class NewLaunchTargetWizard extends Wizard { +public class NewLaunchTargetWizard extends Wizard implements IWorkbenchWizard { private NewLaunchTargetWizardSelectionPage mainPage; private IWorkbench workbench; + private final ILaunchTargetUIManager targetUIManager = Activator.getService(ILaunchTargetUIManager.class); /** * Create the wizard pages @@ -40,11 +44,7 @@ public class NewLaunchTargetWizard extends Wizard { } public IWizardDescriptor[] getWizardDescriptors() { - IWizardCategory launchCategory = WorkbenchPlugin.getDefault().getNewWizardRegistry() - .findCategory("org.eclipse.launchbar.ui.targetWizards"); //$NON-NLS-1$ - if (launchCategory != null) - return launchCategory.getWizards(); - return new IWizardDescriptor[0]; + return targetUIManager.getLaunchTargetWizards(); } /** @@ -52,6 +52,7 @@ public class NewLaunchTargetWizard extends Wizard { * @param aWorkbench the workbench * @param currentSelection the current selection */ + @Override public void init(IWorkbench aWorkbench, IStructuredSelection currentSelection) { this.workbench = aWorkbench; @@ -84,6 +85,21 @@ public class NewLaunchTargetWizard extends Wizard { return true; } + @Override + public IDialogSettings getDialogSettings() { + IDialogSettings wizardSettings = super.getDialogSettings(); + if (wizardSettings == null) { + IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault().getDialogSettings(); + String settingsSection = getClass().getSimpleName(); + wizardSettings = workbenchSettings.getSection(settingsSection); + if (wizardSettings == null) { + wizardSettings = workbenchSettings.addNewSection(settingsSection); + } + setDialogSettings(wizardSettings); + } + return wizardSettings; + } + @Override public boolean canFinish() { // we can finish if the first page is current and the the page can finish early. diff --git a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizardAction.java b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizardAction.java index 004c8b44b00..ec026074e81 100644 --- a/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizardAction.java +++ b/bundles/org.eclipse.launchbar.ui/src/org/eclipse/launchbar/ui/internal/target/NewLaunchTargetWizardAction.java @@ -21,7 +21,6 @@ import org.eclipse.ui.actions.*; import org.eclipse.ui.internal.IWorkbenchHelpContextIds; import org.eclipse.ui.internal.WorkbenchMessages; import org.eclipse.ui.internal.WorkbenchPlugin; -import org.eclipse.ui.wizards.IWizardDescriptor; /** * Invoke the resource creation wizard selection Wizard. @@ -59,20 +58,17 @@ public class NewLaunchTargetWizardAction extends Action implements * action has been disposed. */ private IWorkbenchWindow workbenchWindow; - private IWizardDescriptor[] desc; /** * Create a new instance of this class. - * @param window - * @param iWizardDescriptors */ - public NewLaunchTargetWizardAction(IWorkbenchWindow window, IWizardDescriptor[] desc) { + public NewLaunchTargetWizardAction() { super(WorkbenchMessages.NewWizardAction_text); + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window == null) { throw new IllegalArgumentException(); } this.workbenchWindow = window; - this.desc = desc; // @issues should be IDE-specific images ISharedImages images = PlatformUI.getWorkbench().getSharedImages(); setImageDescriptor(images @@ -110,20 +106,14 @@ public class NewLaunchTargetWizardAction extends Action implements // action has been disposed return; } - NewLaunchTargetWizard wizard = new NewLaunchTargetWizard() { - @Override - public IWizardDescriptor[] getWizardDescriptors() { - return desc; - } - }; + NewLaunchTargetWizard wizard = new NewLaunchTargetWizard(); wizard.setWindowTitle(windowTitle); wizard.init(workbenchWindow.getWorkbench(), null); - IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault() - .getDialogSettings(); - IDialogSettings wizardSettings = workbenchSettings - .getSection("NewLaunchTargetWizardAction"); //$NON-NLS-1$ + IDialogSettings workbenchSettings = WorkbenchPlugin.getDefault().getDialogSettings(); + String settingsSection = getClass().getSimpleName(); + IDialogSettings wizardSettings = workbenchSettings.getSection(settingsSection); if (wizardSettings == null) { - wizardSettings = workbenchSettings.addNewSection("NewLaunchTargetWizardAction"); //$NON-NLS-1$ + wizardSettings = workbenchSettings.addNewSection(settingsSection); } wizard.setDialogSettings(wizardSettings); wizard.setForcePreviousAndNextButtons(true);