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(); + } + +}