diff --git a/codan/org.eclipse.cdt.codan.ui.cxx/plugin.xml b/codan/org.eclipse.cdt.codan.ui.cxx/plugin.xml
index 995a5be27f9..0c49b543a37 100644
--- a/codan/org.eclipse.cdt.codan.ui.cxx/plugin.xml
+++ b/codan/org.eclipse.cdt.codan.ui.cxx/plugin.xml
@@ -21,7 +21,10 @@
-
+
diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchBarManager.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchBarManager.java
index 371860c825e..36d30a1aee7 100644
--- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchBarManager.java
+++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/ILaunchBarManager.java
@@ -25,7 +25,7 @@ public interface ILaunchBarManager extends IAdaptable {
ILaunchDescriptor getActiveLaunchDescriptor() throws CoreException;
void setActiveLaunchDescriptor(ILaunchDescriptor configDesc) throws CoreException;
-
+
void updateLaunchDescriptor(ILaunchDescriptor configDesc) throws CoreException;
ILaunchMode[] getLaunchModes() throws CoreException;
@@ -35,15 +35,19 @@ public interface ILaunchBarManager extends IAdaptable {
void setActiveLaunchMode(ILaunchMode mode) throws CoreException;
ILaunchTarget[] getLaunchTargets() throws CoreException;
-
+
ILaunchTarget getLaunchTarget(String id) throws CoreException;
ILaunchTarget getActiveLaunchTarget() throws CoreException;
void setActiveLaunchTarget(ILaunchTarget target) throws CoreException;
-
+
void updateLaunchTarget(ILaunchTarget target) throws CoreException;
+ void launchTargetAdded(ILaunchTarget target) throws CoreException;
+
+ void launchTargetRemoved(ILaunchTarget target) throws CoreException;
+
ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException;
ILaunchConfiguration getLaunchConfiguration(ILaunchDescriptor descriptor, ILaunchTarget target) throws CoreException;
@@ -66,6 +70,8 @@ public interface ILaunchBarManager extends IAdaptable {
void launchDescriptorRemoved(ILaunchDescriptor descriptor);
+ void launchTargetsChanged();
+
}
void addListener(Listener listener);
diff --git a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java
index 1025ac4cfbf..3f2cc68c5d4 100644
--- a/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java
+++ b/launch/org.eclipse.cdt.launchbar.core/src/org/eclipse/cdt/launchbar/core/internal/LaunchBarManager.java
@@ -441,8 +441,8 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
return;
}
// default target for descriptor
- setActiveLaunchTarget(getDeafultLaunchTarget(activeLaunchDesc));
- }
+ setActiveLaunchTarget(getDefaultLaunchTarget(activeLaunchDesc));
+ }
protected void syncActiveMode() {
if (activeLaunchDesc == null) {
@@ -590,10 +590,6 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
@Override
public void setActiveLaunchTarget(ILaunchTarget target) {
- if (target == null) {
- // try and select another target XXX this should not be an API
- target = getDeafultLaunchTarget(activeLaunchDesc);
- }
if (activeLaunchTarget == target)
return;
activeLaunchTarget = target;
@@ -621,7 +617,35 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
}
}
- protected ILaunchTarget getDeafultLaunchTarget(ILaunchDescriptor descriptor) {
+ @Override
+ public void launchTargetAdded(ILaunchTarget target) throws CoreException {
+ for (Listener listener : listeners) {
+ try {
+ listener.launchTargetsChanged();
+ } catch (Exception e) {
+ Activator.log(e);
+ }
+ }
+ if (activeLaunchTarget == null && supportsTargetType(activeLaunchDesc, target.getType())) {
+ setActiveLaunchTarget(target);
+ }
+ }
+
+ @Override
+ public void launchTargetRemoved(ILaunchTarget target) throws CoreException {
+ for (Listener listener : listeners) {
+ try {
+ listener.launchTargetsChanged();
+ } catch (Exception e) {
+ Activator.log(e);
+ }
+ }
+ if (activeLaunchTarget == target) {
+ setActiveLaunchTarget(getDefaultLaunchTarget(activeLaunchDesc));
+ }
+ }
+
+ protected ILaunchTarget getDefaultLaunchTarget(ILaunchDescriptor descriptor) {
ILaunchTarget[] targets = getLaunchTargets(descriptor);
if (targets.length > 0) {
return targets[0];
@@ -641,6 +665,10 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage
return null;
}
+ public ILaunchTargetType[] getAllLaunchTargetTypes() {
+ return targetTypes.values().toArray(new ILaunchTargetType[targetTypes.values().size()]);
+ }
+
@Override
public ILaunchConfigurationType getLaunchConfigurationType(ILaunchDescriptor descriptor, ILaunchTarget target) {
if (descriptor == null)
diff --git a/launch/org.eclipse.cdt.launchbar.ui/plugin.properties b/launch/org.eclipse.cdt.launchbar.ui/plugin.properties
index e9bd17fdcdc..1dedff12797 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/plugin.properties
+++ b/launch/org.eclipse.cdt.launchbar.ui/plugin.properties
@@ -1 +1,2 @@
launchToolBar.label = LaunchBar
+targetsView.name = Launch Targets
diff --git a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml
index 1c88c6a8b97..947d211d49a 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml
+++ b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml
@@ -71,5 +71,28 @@
name="Local Target">
+
+
+
+
+
+
+
+
+
+
diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/LaunchBarControl.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/LaunchBarControl.java
index f9e9bb2104c..1ef343a64ce 100644
--- a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/LaunchBarControl.java
+++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/controls/LaunchBarControl.java
@@ -39,11 +39,11 @@ public class LaunchBarControl implements ILaunchBarManager.Listener {
@Inject
private ILaunchBarManager manager;
-
+
private ConfigSelector configSelector;
private ModeSelector modeSelector;
private TargetSelector targetSelector;
-
+
@PostConstruct
public void createControl(Composite parent) {
manager.addListener(this);
@@ -64,7 +64,7 @@ public class LaunchBarControl implements ILaunchBarManager.Listener {
createButton(container, Activator.IMG_BUTTON_BUILD, Messages.LaunchBarControl_Build, Activator.CMD_BUILD);
createButton(container, Activator.IMG_BUTTON_LAUNCH, Messages.LaunchBarControl_Launch, Activator.CMD_LAUNCH);
createButton(container, Activator.IMG_BUTTON_STOP, Messages.LaunchBarControl_Stop, Activator.CMD_STOP);
-
+
modeSelector = new ModeSelector(container, SWT.NONE);
modeSelector.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
modeSelector.setInput(manager);
@@ -76,7 +76,7 @@ public class LaunchBarControl implements ILaunchBarManager.Listener {
Label label = new Label(container, SWT.NONE);
label.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
label.setText("on" + ":");
-
+
targetSelector = new TargetSelector(container, SWT.NONE);
targetSelector.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
targetSelector.setInput(manager);
@@ -84,10 +84,10 @@ public class LaunchBarControl implements ILaunchBarManager.Listener {
try {
ILaunchDescriptor configDesc = manager.getActiveLaunchDescriptor();
configSelector.setSelection(configDesc == null ? null : configDesc);
-
+
ILaunchMode mode = manager.getActiveLaunchMode();
modeSelector.setSelection(mode == null ? null : mode);
-
+
ILaunchTarget target = manager.getActiveLaunchTarget();
targetSelector.setSelection(target == null ? null : target);
} catch (CoreException e) {
@@ -172,7 +172,13 @@ public class LaunchBarControl implements ILaunchBarManager.Listener {
@Override
public void launchDescriptorRemoved(ILaunchDescriptor descriptor) {
// TODO Auto-generated method stub
-
+
+ }
+
+ @Override
+ public void launchTargetsChanged() {
+ // TODO Auto-generated method stub
+
}
}
diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/LaunchTargetsViewPart.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/LaunchTargetsViewPart.java
new file mode 100644
index 00000000000..531590aff2e
--- /dev/null
+++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/LaunchTargetsViewPart.java
@@ -0,0 +1,119 @@
+package org.eclipse.cdt.launchbar.ui.internal.targetsView;
+
+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.core.internal.LaunchBarManager;
+import org.eclipse.cdt.launchbar.ui.internal.Activator;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.ui.part.ViewPart;
+
+public class LaunchTargetsViewPart extends ViewPart {
+
+ private TreeViewer treeViewer;
+
+ public LaunchTargetsViewPart() {
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ treeViewer = new TreeViewer(parent, SWT.NONE);
+ treeViewer.setContentProvider(new ITreeContentProvider() {
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public boolean hasChildren(Object element) {
+ if (element instanceof LaunchBarManager)
+ return true;
+ else if (element instanceof ILaunchTargetType)
+ return true;
+ else if (element instanceof ILaunchTarget)
+ return false;
+ return false;
+ }
+
+ @Override
+ public Object getParent(Object element) {
+ if (element instanceof ILaunchTarget)
+ return ((ILaunchTarget) element).getType();
+ return null;
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return ((LaunchBarManager) inputElement).getAllLaunchTargetTypes();
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if (parentElement instanceof ILaunchTargetType)
+ return ((ILaunchTargetType) parentElement).getTargets();
+ return new Object[0];
+ }
+ });
+
+ treeViewer.setLabelProvider(new LabelProvider() {
+ @Override
+ public String getText(Object element) {
+ if (element instanceof ILaunchTargetType)
+ return element.getClass().getSimpleName();
+ else if (element instanceof ILaunchTarget)
+ return ((ILaunchTarget) element).getName();
+ return super.getText(element);
+ }
+ });
+
+ final ILaunchBarManager launchBarManager = Activator.getService(ILaunchBarManager.class);
+ treeViewer.setInput(launchBarManager);
+ launchBarManager.addListener(new ILaunchBarManager.Listener() {
+ @Override
+ public void launchTargetsChanged() {
+ treeViewer.getControl().getDisplay().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ treeViewer.setInput(launchBarManager);
+ }
+ });
+ }
+ @Override
+ public void launchDescriptorRemoved(ILaunchDescriptor descriptor) {
+ }
+ @Override
+ public void activeLaunchTargetChanged() {
+ }
+ @Override
+ public void activeLaunchModeChanged() {
+ }
+ @Override
+ public void activeConfigurationDescriptorChanged() {
+ }
+ });
+
+ MenuManager menuManager = new MenuManager();
+ Menu menu = menuManager.createContextMenu(treeViewer.getControl());
+ treeViewer.getControl().setMenu(menu);
+ getSite().registerContextMenu(menuManager, treeViewer);
+ getSite().setSelectionProvider(treeViewer);
+ }
+
+ @Override
+ public void setFocus() {
+ treeViewer.getControl().setFocus();
+ }
+
+}