From cf448ee139b0614b2911cc8f7181bf02852424d9 Mon Sep 17 00:00:00 2001 From: Doug Schaefer Date: Tue, 19 Aug 2014 22:57:23 -0400 Subject: [PATCH] Launch Targets View clean up including adding properties dialog. Change-Id: I0299e2cc4886ba04aaa5f8661f45207c5320a8c5 Reviewed-on: https://git.eclipse.org/r/31935 Tested-by: Hudson CI Reviewed-by: Doug Schaefer --- .../core/internal/LaunchBarManager.java | 10 ++++ .../org.eclipse.cdt.launchbar.ui/plugin.xml | 13 +++++ .../targetsView/LaunchTargetsViewPart.java | 50 +++++++++++++++-- .../targetsView/TargetPropertyPage.java | 55 +++++++++++++++++++ 4 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/TargetPropertyPage.java 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 3f2cc68c5d4..01f4e238d3b 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 @@ -559,6 +559,16 @@ public class LaunchBarManager extends PlatformObject implements ILaunchBarManage setPreference(getPerDescriptorStore(), PREF_ACTIVE_LAUNCH_MODE, mode.getIdentifier()); // per desc store } + public ILaunchTarget[] getAllLaunchTargets() { + List targetList = new ArrayList<>(); + for (ILaunchTargetType targetType : getAllLaunchTargetTypes()) { + for (ILaunchTarget target : targetType.getTargets()) { + targetList.add(target); + } + } + return targetList.toArray(new ILaunchTarget[targetList.size()]); + } + @Override public ILaunchTarget[] getLaunchTargets() { return getLaunchTargets(activeLaunchDesc); diff --git a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml index 947d211d49a..5e058f8eba3 100644 --- a/launch/org.eclipse.cdt.launchbar.ui/plugin.xml +++ b/launch/org.eclipse.cdt.launchbar.ui/plugin.xml @@ -94,5 +94,18 @@ + + + + + + + + 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 index 531590aff2e..b2700a83fea 100644 --- 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 @@ -1,33 +1,44 @@ package org.eclipse.cdt.launchbar.ui.internal.targetsView; +import java.util.Arrays; +import java.util.Comparator; + 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.cdt.launchbar.ui.internal.LaunchBarUIManager; import org.eclipse.jface.action.MenuManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.viewers.ILabelProvider; 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.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.part.ViewPart; public class LaunchTargetsViewPart extends ViewPart { private TreeViewer treeViewer; + private final LaunchBarUIManager uiManager; public LaunchTargetsViewPart() { + ILaunchBarManager manager = Activator.getService(ILaunchBarManager.class); + uiManager = (LaunchBarUIManager) manager.getAdapter(LaunchBarUIManager.class); } @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) { } @@ -56,7 +67,9 @@ public class LaunchTargetsViewPart extends ViewPart { @Override public Object[] getElements(Object inputElement) { - return ((LaunchBarManager) inputElement).getAllLaunchTargetTypes(); + // TODO optionally categorize by launch type, maybe + // return ((LaunchBarManager) inputElement).getLaunchTargetTypes(); + return ((LaunchBarManager) inputElement).getAllLaunchTargets(); } @Override @@ -67,14 +80,36 @@ public class LaunchTargetsViewPart extends ViewPart { } }); + treeViewer.setSorter(new ViewerSorter() { + @Override + public void sort(Viewer viewer, Object[] elements) { + if (elements instanceof ILaunchTarget[]) { + Arrays.sort((ILaunchTarget[]) elements, new Comparator() { + @Override + public int compare(ILaunchTarget o1, ILaunchTarget o2) { + return o1.getName().compareTo(o2.getName()); + } + }); + } + } + }); + treeViewer.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { - if (element instanceof ILaunchTargetType) + if (element instanceof ILaunchTargetType) { return element.getClass().getSimpleName(); - else if (element instanceof ILaunchTarget) - return ((ILaunchTarget) element).getName(); - return super.getText(element); + } else if (element instanceof ILaunchTarget) { + ILaunchTarget target = (ILaunchTarget) element; + ILabelProvider targetLabelProvider = uiManager.getLabelProvider(target); + if (targetLabelProvider != null) { + return targetLabelProvider.getText(element); + } else { + return target.getName(); + } + } else { + return super.getText(element); + } } }); @@ -105,6 +140,9 @@ public class LaunchTargetsViewPart extends ViewPart { }); MenuManager menuManager = new MenuManager(); + menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); + menuManager.add(new Separator()); + menuManager.add(new PropertyDialogAction(getSite(), treeViewer)); Menu menu = menuManager.createContextMenu(treeViewer.getControl()); treeViewer.getControl().setMenu(menu); getSite().registerContextMenu(menuManager, treeViewer); diff --git a/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/TargetPropertyPage.java b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/TargetPropertyPage.java new file mode 100644 index 00000000000..520755a3fd7 --- /dev/null +++ b/launch/org.eclipse.cdt.launchbar.ui/src/org/eclipse/cdt/launchbar/ui/internal/targetsView/TargetPropertyPage.java @@ -0,0 +1,55 @@ +package org.eclipse.cdt.launchbar.ui.internal.targetsView; + +import org.eclipse.cdt.launchbar.core.ILaunchTarget; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.dialogs.PropertyPage; + +public class TargetPropertyPage extends PropertyPage { + + private Text nameText; + + @Override + protected Control createContents(Composite parent) { + Composite comp = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(2, false); + comp.setLayout(layout); + + ILaunchTarget target = (ILaunchTarget) getElement().getAdapter(ILaunchTarget.class); + + Label nameLabel = new Label(comp, SWT.NONE); + nameLabel.setText("Target Name:"); + + nameText = new Text(comp, SWT.BORDER); + nameText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + nameText.setText(target.getName()); + + Label targetLabel = new Label(comp, SWT.NONE); + targetLabel.setText("Target Id:"); + + Label targetId = new Label(comp, SWT.NONE); + targetId.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + targetId.setText(target.getId()); + + Label typeLabel = new Label(comp, SWT.NONE); + typeLabel.setText("Target Type:"); + + Label typeId = new Label(comp, SWT.NONE); + typeId.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + typeId.setText(target.getType().getId()); + + return comp; + } + + @Override + public boolean performOk() { + System.out.println("Would change name to " + nameText.getText()); + return true; + } + +}