diff --git a/launch/org.eclipse.cdt.launchbar.ui/META-INF/MANIFEST.MF b/launch/org.eclipse.cdt.launchbar.ui/META-INF/MANIFEST.MF
index 82c3774354e..b2758f62fbb 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/META-INF/MANIFEST.MF
+++ b/launch/org.eclipse.cdt.launchbar.ui/META-INF/MANIFEST.MF
@@ -15,7 +15,8 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.cdt.launchbar.core,
org.eclipse.debug.ui,
org.eclipse.ui.workbench,
- org.eclipse.ui.ide
+ org.eclipse.ui.ide,
+ org.eclipse.swt
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
diff --git a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml
index b6a2643b00e..1c88c6a8b97 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml
+++ b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml
@@ -67,7 +67,8 @@
+ targetTypeId="org.eclipse.cdt.launchbar.core.target.local"
+ name="Local Target">
diff --git a/launch/org.eclipse.cdt.launchbar.ui/schema/launchBarUIContributions.exsd b/launch/org.eclipse.cdt.launchbar.ui/schema/launchBarUIContributions.exsd
index 7cc1eef571e..249b1c37597 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/schema/launchBarUIContributions.exsd
+++ b/launch/org.eclipse.cdt.launchbar.ui/schema/launchBarUIContributions.exsd
@@ -85,6 +85,26 @@
+
+
+
+ Used for identifying this launch target type in various UI elements.
+
+
+
+
+
+
+
+
+
+ Used for identifying this launch target type in various UI elements.
+
+
+
+
+
+
diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarUIManager.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarUIManager.java
index 84a17591daf..f0c03183c82 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarUIManager.java
+++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/LaunchBarUIManager.java
@@ -10,30 +10,33 @@
*******************************************************************************/
package org.eclipse.cdt.launchbar.ui.internal;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.launchbar.core.ILaunchBarManager;
import org.eclipse.cdt.launchbar.core.ILaunchDescriptor;
import org.eclipse.cdt.launchbar.core.ILaunchTarget;
-import org.eclipse.cdt.launchbar.core.ILaunchTargetType;
import org.eclipse.cdt.launchbar.ui.IHoverProvider;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.swt.graphics.Image;
public class LaunchBarUIManager {
ILaunchBarManager manager;
Map descriptorLabelProviders = new HashMap<>();
- Map targetLabelProviders = new HashMap<>();
- Map targetHoverProviders = new HashMap<>();
- Map targetEditCommandIds = new HashMap<>();
- Map targetAddNewCommandIds = new HashMap<>();
-
+ Map targetContributions = new HashMap<>();
+
+ private final LaunchBarTargetContribution DEFAULT_CONTRIBUTION = new LaunchBarTargetContribution(null, null, null, null, null,
+ null, null);
+
public LaunchBarUIManager(ILaunchBarManager manager) {
this.manager = manager;
@@ -54,23 +57,21 @@ public class LaunchBarUIManager {
} else if (elementName.equals("targetUI")) {
try {
String targetTypeId = element.getAttribute("targetTypeId");
+ String targetName = element.getAttribute("name");
+
+ String iconStr = element.getAttribute("icon");
ILabelProvider labelProvider = (ILabelProvider) element.createExecutableExtension("labelProvider");
- targetLabelProviders.put(targetTypeId, labelProvider);
-
- if (element.getAttribute("hoverProvider") != null) {
- IHoverProvider hoverProvider = (IHoverProvider) element.createExecutableExtension("hoverProvider");
- if (hoverProvider != null)
- targetHoverProviders.put(targetTypeId, hoverProvider);
- }
-
- String editCommandId = element.getAttribute("editCommandId");
- if (editCommandId != null && editCommandId.length() > 0)
- targetEditCommandIds.put(targetTypeId, editCommandId);
+ IHoverProvider hoverProvider = null;
+ if (element.getAttribute("hoverProvider") != null) {
+ hoverProvider = (IHoverProvider) element.createExecutableExtension("hoverProvider");
+ }
+ String editCommandId = element.getAttribute("editCommandId");
String addNewCommandId = element.getAttribute("addNewTargetCommandId");
- if (addNewCommandId != null && addNewCommandId.length() > 0)
- targetAddNewCommandIds.put(targetTypeId, addNewCommandId);
+
+ targetContributions.put(targetTypeId, new LaunchBarTargetContribution(targetTypeId, targetName, iconStr,
+ labelProvider, hoverProvider, editCommandId, addNewCommandId));
} catch (CoreException e) {
Activator.log(e.getStatus());
}
@@ -82,24 +83,94 @@ public class LaunchBarUIManager {
public ILaunchBarManager getManager() {
return manager;
}
-
+
public ILabelProvider getLabelProvider(ILaunchDescriptor descriptor) {
return descriptorLabelProviders.get(descriptor.getType().getId());
}
+ public String getTargetTypeName(ILaunchTarget target) {
+ return getContribution(target).name;
+ }
+
public ILabelProvider getLabelProvider(ILaunchTarget target) {
- return targetLabelProviders.get(target.getType().getId());
+ return getContribution(target).labelProvider;
}
public IHoverProvider getHoverProvider(ILaunchTarget target) {
- return targetHoverProviders.get(target.getType().getId());
+ return getContribution(target).hoverProvider;
}
public String getEditCommand(ILaunchTarget target) {
- return targetEditCommandIds.get(target.getType().getId());
+ return getContribution(target).editCommandId;
}
- public String getAddTargetCommand(ILaunchTargetType targetType) {
- return targetAddNewCommandIds.get(targetType.getId());
+ public String getAddTargetCommand(ILaunchTarget target) {
+ return getContribution(target).addNewCommandId;
+ }
+
+ public Map getAddTargetCommands() {
+ Map commands = new HashMap<>();
+ for (LaunchBarTargetContribution contribution : targetContributions.values()) {
+ if (contribution.addNewCommandId != null)
+ commands.put(contribution.name, contribution.addNewCommandId);
+ }
+ return commands;
+ }
+
+ public Map getTargetIcons() {
+ Map icons = new HashMap<>();
+ for (LaunchBarTargetContribution contribution : targetContributions.values()) {
+ Image icon = contribution.getIcon();
+ if (icon != null) {
+ icons.put(contribution.name, icon);
+ }
+ }
+ return icons;
+ }
+
+ private LaunchBarTargetContribution getContribution(ILaunchTarget target) {
+ LaunchBarTargetContribution c = targetContributions.get(target.getType().getId());
+ if (c == null) {
+ return DEFAULT_CONTRIBUTION;
+ }
+ return c;
+ }
+
+ private class LaunchBarTargetContribution {
+
+ String id;
+ String name;
+ String iconStr;
+ Image icon;
+ ILabelProvider labelProvider;
+ IHoverProvider hoverProvider;
+ String editCommandId;
+ String addNewCommandId;
+
+ LaunchBarTargetContribution(String id, String name, String iconStr, ILabelProvider labelProvider,
+ IHoverProvider hoverProvider, String editCommand, String addNewCommand) {
+ this.id = id;
+ this.name = name;
+ this.iconStr = iconStr;
+ this.icon = null;
+ this.labelProvider = labelProvider;
+ this.hoverProvider = hoverProvider;
+ this.editCommandId = editCommand;
+ this.addNewCommandId = addNewCommand;
+ }
+
+ Image getIcon() {
+ if (icon == null) {
+ if (iconStr != null && !iconStr.isEmpty()) {
+ try {
+ icon = ImageDescriptor.createFromURL(new URL(iconStr)).createImage();
+ } catch (MalformedURLException e) {
+ Activator.log(e);
+ }
+ }
+ }
+ return icon;
+ }
+
}
}
diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java
index d885f99daad..247285bb183 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java
+++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/TargetSelector.java
@@ -11,6 +11,7 @@
package org.eclipse.cdt.launchbar.ui.internal.controls;
import java.util.Comparator;
+import java.util.Map;
import org.eclipse.cdt.launchbar.core.ILaunchBarManager;
import org.eclipse.cdt.launchbar.core.ILaunchTarget;
@@ -19,12 +20,16 @@ import org.eclipse.cdt.launchbar.ui.ILaunchBarUIConstants;
import org.eclipse.cdt.launchbar.ui.internal.Activator;
import org.eclipse.cdt.launchbar.ui.internal.LaunchBarUIManager;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.MouseTrackAdapter;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.events.PaintEvent;
@@ -36,13 +41,13 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.ListDialog;
public class TargetSelector extends CSelector {
private final LaunchBarUIManager uiManager;
-
+
private static final String[] noTargets = new String[] { "---" };
-
public TargetSelector(Composite parent, int style) {
super(parent, style);
@@ -52,8 +57,7 @@ public class TargetSelector extends CSelector {
setContentProvider(new IStructuredContentProvider() {
@Override
- public void inputChanged(Viewer viewer, Object oldInput,
- Object newInput) {
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
@Override
@@ -120,7 +124,7 @@ public class TargetSelector extends CSelector {
}
return false;
}
-
+
@Override
public void dismissHover(Object element, boolean immediate) {
if (element instanceof ILaunchTarget) {
@@ -154,14 +158,11 @@ public class TargetSelector extends CSelector {
@Override
public boolean hasActionArea() {
- // TODO need an add target command similar to the add configuration that allows the user
- // to select the target type.
-// return uiManager.getAddTargetCommand(getManager().getActiveLaunchDescriptor()) != null;
- return false;
+ return !uiManager.getAddTargetCommands().isEmpty();
}
@Override
- public void createActionArea(Composite parent) {
+ public void createActionArea(final Composite parent) {
Composite actionArea = new Composite(parent, SWT.NONE);
GridLayout actionLayout = new GridLayout();
actionLayout.marginWidth = actionLayout.marginHeight = 0;
@@ -169,8 +170,7 @@ public class TargetSelector extends CSelector {
actionArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
final Composite createButton = new Composite(actionArea, SWT.NONE);
- createButton
- .setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+ createButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
GridLayout buttonLayout = new GridLayout();
buttonLayout.marginWidth = buttonLayout.marginHeight = 7;
createButton.setLayout(buttonLayout);
@@ -190,19 +190,14 @@ public class TargetSelector extends CSelector {
createLabel.setText("Add New Target...");
createLabel.setBackground(white);
-// try {
-// final String command = uiManager.getAddTargetCommand(getManager().getActiveLaunchDescriptor());
-// MouseListener mouseListener = new MouseAdapter() {
-// public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
-// Activator.runCommand(command);
-// }
-// };
-//
-// createButton.addMouseListener(mouseListener);
-// createLabel.addMouseListener(mouseListener);
-// } catch (CoreException e) {
-// Activator.log(e.getStatus());
-// }
+ MouseListener mouseListener = new MouseAdapter() {
+ public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
+ handleCreateTarget();
+ }
+ };
+
+ createButton.addMouseListener(mouseListener);
+ createLabel.addMouseListener(mouseListener);
MouseTrackListener mouseTrackListener = new MouseTrackAdapter() {
@Override
@@ -221,6 +216,33 @@ public class TargetSelector extends CSelector {
createLabel.addMouseTrackListener(mouseTrackListener);
}
+ protected void handleCreateTarget() {
+ final Map commands = uiManager.getAddTargetCommands();
+ final Map images = uiManager.getTargetIcons();
+ if (!commands.isEmpty()) {
+ ListDialog ld = new ListDialog(getShell());
+ ld.setTitle("New Launch Target");
+ ld.setMessage("Select target type to create");
+ ld.setContentProvider(new ArrayContentProvider());
+ ld.setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ return (String)element;
+ }
+
+ @Override
+ public Image getImage(Object element) {
+ return images.get(element);
+ }
+ });
+ ld.setInput(commands.keySet().toArray());
+ if (ld.open() == Window.OK) {
+ String command = commands.get((String) (ld.getResult()[0]));
+ Activator.runCommand(command);
+ }
+ }
+ }
+
@Override
protected void fireSelectionChanged() {
Object selection = getSelection();
@@ -233,7 +255,7 @@ public class TargetSelector extends CSelector {
}
}
}
-
+
@Override
public Point computeSize(int wHint, int hHint, boolean changed) {
return super.computeSize(200, hHint, changed);
@@ -249,5 +271,5 @@ public class TargetSelector extends CSelector {
element = noTargets[0];
super.setSelection(element);
}
-
+
}