diff options
author | Jared Burns | 2004-10-18 18:34:18 +0000 |
---|---|---|
committer | Jared Burns | 2004-10-18 18:34:18 +0000 |
commit | 5f9d2baba9b340f144a715e7fa2b459bf3947dd3 (patch) | |
tree | 05df3af952a5599e09fc0f3fdf666b0d6b168695 /org.eclipse.debug.ui | |
parent | 11d0cf83b047b3b2c640774ddb1eceb450f87587 (diff) | |
download | eclipse.platform.debug-5f9d2baba9b340f144a715e7fa2b459bf3947dd3.tar.gz eclipse.platform.debug-5f9d2baba9b340f144a715e7fa2b459bf3947dd3.tar.xz eclipse.platform.debug-5f9d2baba9b340f144a715e7fa2b459bf3947dd3.zip |
Bug 75282 - Composite breakpoint groups (add images to containers)
Diffstat (limited to 'org.eclipse.debug.ui')
11 files changed, 146 insertions, 76 deletions
diff --git a/org.eclipse.debug.ui/icons/full/obj16/brkp_type.gif b/org.eclipse.debug.ui/icons/full/obj16/brkp_type.gif Binary files differnew file mode 100644 index 000000000..31c40ea10 --- /dev/null +++ b/org.eclipse.debug.ui/icons/full/obj16/brkp_type.gif diff --git a/org.eclipse.debug.ui/icons/full/obj16/file_obj.gif b/org.eclipse.debug.ui/icons/full/obj16/file_obj.gif Binary files differnew file mode 100644 index 000000000..7ccc6a703 --- /dev/null +++ b/org.eclipse.debug.ui/icons/full/obj16/file_obj.gif diff --git a/org.eclipse.debug.ui/plugin.xml b/org.eclipse.debug.ui/plugin.xml index 18fd10c9f..654e5d22a 100644 --- a/org.eclipse.debug.ui/plugin.xml +++ b/org.eclipse.debug.ui/plugin.xml @@ -702,12 +702,12 @@ tooltip="%clearDefaultGroup.tooltip"> </action> <action - id="org.eclipse.debug.ui.breakpointsView.toolbar.showByAction" + id="org.eclipse.debug.ui.breakpointsView.toolbar.groupByAction" menubarPath="defaultBreakpointGroup" - class="org.eclipse.debug.internal.ui.actions.ShowBreakpointsByAction" - helpContextId="show_breakpoints_by_action_context" - label="Show By..." - tooltip="Choose how to show breakpoints"> + class="org.eclipse.debug.internal.ui.actions.breakpointGroups.GroupBreakpointsByAction" + helpContextId="group_breakpoints_by_action_context" + label="Group By" + tooltip="Choose how to group breakpoints"> </action> </viewContribution> <!-- Contributions to Expression View Toolbar --> @@ -2140,18 +2140,22 @@ M4 = Platform-specific fourth key <breakpointContainerFactory class="org.eclipse.debug.internal.ui.views.breakpoints.BreakpointProjectContainerFactory" id="org.eclipse.debug.ui.breakpointProjectContainerFactory" - label="Project"/> + label="Project" + icon="icons/full/obj16/prj_obj.gif"/> <breakpointContainerFactory class="org.eclipse.debug.internal.ui.views.breakpoints.BreakpointFileContainerFactory" id="org.eclipse.debug.ui.breakpointFileContainerFactory" - label="File"/> + label="File" + icon="icons/full/obj16/file_obj.gif"/> <breakpointContainerFactory class="org.eclipse.debug.internal.ui.views.breakpoints.BreakpointTypeContainerFactory" id="org.eclipse.debug.ui.breakpointTypeContainerFactory" - label="Breakpoint Type"/> + label="Breakpoint Type" + icon="icons/full/obj16/brkp_type.gif"/> <breakpointContainerFactory class="org.eclipse.debug.internal.ui.views.breakpoints.BreakpointGroupContainerFactory" id="org.eclipse.debug.ui.breakpointGroupContainerFactory" - label="Custom Groups"/> + label="Custom Groups" + icon="icons/full/obj16/brkp_grp.gif"/> </extension> </plugin>
\ No newline at end of file diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AdvancedGroupBreakpointsByAction.java index 4ee366f34..6b92852db 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/AdvancedGroupBreakpointsByAction.java @@ -8,54 +8,36 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.internal.ui.actions; +package org.eclipse.debug.internal.ui.actions.breakpointGroups; import java.util.List; import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView; import org.eclipse.jface.action.Action; -import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; /** - * + * Action that opens a dialog to select which breakpoint + * container factories should be applies to the breakpoints + * view. */ -public class ShowBreakpointsByAction extends Action implements IViewActionDelegate { +public class AdvancedGroupBreakpointsByAction extends Action { private BreakpointsView fView; - - /* (non-Javadoc) - * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart) - */ - public void init(IViewPart view) { - fView= (BreakpointsView) view; + + public AdvancedGroupBreakpointsByAction(BreakpointsView view) { + fView= view; } /* (non-Javadoc) * @see org.eclipse.jface.action.IAction#run() */ public void run() { - ShowBreakpointsByDialog dialog = new ShowBreakpointsByDialog(fView); + GroupBreakpointsByDialog dialog = new GroupBreakpointsByDialog(fView); if (dialog.open() == Dialog.OK) { List selectedContainers = dialog.getSelectedContainers(); fView.setBreakpointContainerFactories(selectedContainers); } } - /* (non-Javadoc) - * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) - */ - public void run(IAction action) { - run(); - } - - /* (non-Javadoc) - * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) - */ - public void selectionChanged(IAction action, ISelection selection) { - } - } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupBreakpointsByAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupBreakpointsByAction.java index b49d4b150..e828c85fd 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupBreakpointsByAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupBreakpointsByAction.java @@ -15,7 +15,6 @@ import java.util.Iterator; import java.util.List; import org.eclipse.debug.internal.ui.actions.ActionMessages; -import org.eclipse.debug.internal.ui.actions.ShowBreakpointsByAction; import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointContainerFactoryManager; import org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainerFactory; import org.eclipse.jface.action.ActionContributionItem; @@ -86,9 +85,8 @@ public class GroupBreakpointsByAction extends AbstractBreakpointsViewAction impl ActionContributionItem item= new ActionContributionItem(action); item.fill(menu, -1); - ShowBreakpointsByAction advancedAction = new ShowBreakpointsByAction(); + AdvancedGroupBreakpointsByAction advancedAction = new AdvancedGroupBreakpointsByAction(fView); advancedAction.setText(ActionMessages.getString("GroupBreakpointsByAction.1")); //$NON-NLS-1$ - advancedAction.init(fView); item= new ActionContributionItem(advancedAction); item.fill(menu, -1); } @@ -108,6 +106,7 @@ public class GroupBreakpointsByAction extends AbstractBreakpointsViewAction impl } actionLabel.append(factory.getLabel()); action.setText(actionLabel.toString()); + action.setImageDescriptor(factory.getImageDescriptor()); actions.add(action); } return actions; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByDialog.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupBreakpointsByDialog.java index e156562cb..3b52686ee 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/ShowBreakpointsByDialog.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/breakpointGroups/GroupBreakpointsByDialog.java @@ -8,9 +8,10 @@ * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ -package org.eclipse.debug.internal.ui.actions; +package org.eclipse.debug.internal.ui.actions.breakpointGroups; import java.util.ArrayList; +import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -18,6 +19,7 @@ import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointContainerFactor import org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView; import org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainerFactory; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelProvider; @@ -25,13 +27,14 @@ import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -41,14 +44,16 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.ui.internal.dialogs.ViewLabelProvider; /** - * + * Dialog which presents available breakpoint groupings to + * the user and allows them to specify which they'd like + * to use and in what order they should be applied. */ -public class ShowBreakpointsByDialog extends Dialog { +public class GroupBreakpointsByDialog extends Dialog { private BreakpointsView fView; - // List viewer that presents available containers - private ListViewer fAvailableViewer; + // Table viewer that presents available containers + private TableViewer fAvailableViewer; private AvailableContainersProvider fAvailableContainersProvider= new AvailableContainersProvider(); // Tree viewer that presents selected containers @@ -80,7 +85,7 @@ public class ShowBreakpointsByDialog extends Dialog { /** * @param parentShell */ - protected ShowBreakpointsByDialog(BreakpointsView view) { + protected GroupBreakpointsByDialog(BreakpointsView view) { super(view.getSite().getShell()); fView= view; } @@ -116,11 +121,11 @@ public class ShowBreakpointsByDialog extends Dialog { data.horizontalSpan= 2; label.setLayoutData(data); - fAvailableViewer= new ListViewer(composite); + fAvailableViewer= new TableViewer(composite); fAvailableViewer.setContentProvider(fAvailableContainersProvider); fAvailableViewer.setLabelProvider(labelProvider); fAvailableViewer.setInput(new Object()); - fAvailableViewer.getList().setLayoutData(new GridData(GridData.FILL_BOTH)); + fAvailableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH)); fAvailableViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { handleAddPressed(); @@ -377,11 +382,36 @@ public class ShowBreakpointsByDialog extends Dialog { } private class BreakpointContainerFactoryLabelProvider extends ViewLabelProvider { + private HashMap fImageCache= new HashMap(); + public String getText(Object element) { if (element instanceof IBreakpointContainerFactory) { return ((IBreakpointContainerFactory) element).getLabel(); } - return null; + return super.getText(element); + } + public Image getImage(Object element) { + if (element instanceof IBreakpointContainerFactory) { + ImageDescriptor imageDescriptor = ((IBreakpointContainerFactory) element).getImageDescriptor(); + if (imageDescriptor != null) { + Image image = (Image) fImageCache.get(imageDescriptor); + if (image == null) { + image= imageDescriptor.createImage(); + if (image != null) { + fImageCache.put(imageDescriptor, image); + } + } + return image; + } + } + return super.getImage(element); + } + public void dispose() { + Iterator imageIter = fImageCache.values().iterator(); + while (imageIter.hasNext()) { + ((Image) imageIter.next()).dispose(); + } + super.dispose(); } } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java index 30c86a49c..bddcaad1d 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/AbstractBreakpointContainerFactory.java @@ -11,6 +11,7 @@ package org.eclipse.debug.internal.ui.views.breakpoints; import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.jface.resource.ImageDescriptor; /** * @@ -19,6 +20,7 @@ public abstract class AbstractBreakpointContainerFactory implements IBreakpointC protected String fLabel; protected String fIdentifier; + private ImageDescriptor fImage; /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainerFactory#getContainers(org.eclipse.debug.core.model.IBreakpoint[], java.lang.String) @@ -40,6 +42,18 @@ public abstract class AbstractBreakpointContainerFactory implements IBreakpointC } /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainerFactory#getImage() + */ + public ImageDescriptor getImageDescriptor() { + return fImage; + } + + + public void setImageDescriptor(ImageDescriptor image) { + fImage= image; + } + + /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainerFactory#setIdentifier(java.lang.String) */ public void setIdentifier(String identifier) { diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java index 878787355..777a42809 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointContainerFactoryManager.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.debug.internal.ui.views.breakpoints; +import java.net.MalformedURLException; +import java.net.URL; import java.util.HashMap; import java.util.Map; @@ -19,6 +21,8 @@ import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jface.resource.ImageDescriptor; +import org.osgi.framework.Bundle; /** * @@ -53,9 +57,13 @@ public class BreakpointContainerFactoryManager { if (id != null && label != null) { try { IBreakpointContainerFactory factory = (IBreakpointContainerFactory) element.createExecutableExtension("class"); //$NON-NLS-1$ - factory.setLabel(label); - factory.setIdentifier(id); if (factory != null) { + factory.setLabel(label); + factory.setIdentifier(id); + ImageDescriptor imageDescriptor = getImageDescriptor(element); + if (imageDescriptor != null) { + factory.setImageDescriptor(imageDescriptor); + } fFactories.put(id, factory); } } catch (CoreException e) { @@ -65,6 +73,28 @@ public class BreakpointContainerFactoryManager { } /** + * Returns the image for this shortcut, or <code>null</code> if none + * + * @return the image for this shortcut, or <code>null</code> if none + */ + public ImageDescriptor getImageDescriptor(IConfigurationElement element) { + ImageDescriptor descriptor= null; + String iconPath = element.getAttribute("icon"); //$NON-NLS-1$ + // iconPath may be null because icon is optional + if (iconPath != null) { + try { + Bundle bundle = Platform.getBundle(element.getDeclaringExtension().getNamespace()); + URL iconURL = bundle.getEntry("/"); //$NON-NLS-1$ + iconURL = new URL(iconURL, iconPath); + descriptor = ImageDescriptor.createFromURL(iconURL); + } catch (MalformedURLException e) { + DebugUIPlugin.log(e); + } + } + return descriptor; + } + + /** * Returns the factory with the given identifier or <code>null</code> * if none. * @param identifier diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java index b3c449a1a..997ed6578 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointTypeContainerFactory.java @@ -19,12 +19,15 @@ import java.util.Set; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages; +import org.eclipse.swt.graphics.Image; /** * */ public class BreakpointTypeContainerFactory extends AbstractBreakpointContainerFactory { + private Image fContainerImage; + public BreakpointTypeContainerFactory() { } @@ -32,6 +35,9 @@ public class BreakpointTypeContainerFactory extends AbstractBreakpointContainerF * @see org.eclipse.debug.internal.ui.views.breakpoints.IBreakpointContainerFactory#getContainers(org.eclipse.debug.core.model.IBreakpoint[]) */ public IBreakpointContainer[] getContainers(IBreakpoint[] breakpoints, String parentId) { + if (fContainerImage == null) { + fContainerImage= getImageDescriptor().createImage(); + } HashMap map= new HashMap(); List other= new ArrayList(); for (int i = 0; i < breakpoints.length; i++) { @@ -59,8 +65,17 @@ public class BreakpointTypeContainerFactory extends AbstractBreakpointContainerF this, typeName, parentId); + container.setImage(fContainerImage); containers.add(container); } return (IBreakpointContainer[]) containers.toArray(new IBreakpointContainer[containers.size()]); } + + public void dispose() { + if (fContainerImage != null) { + fContainerImage.dispose(); + fContainerImage= null; + } + super.dispose(); + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java index fe0d94a72..7574f2097 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/BreakpointsView.java @@ -117,27 +117,9 @@ public class BreakpointsView extends AbstractDebugView implements ISelectionList viewer.setLabelProvider(new DelegatingModelPresentation() { public Image getImage(Object item) { if (item instanceof IBreakpointContainer) { - Image image= DebugPluginImages.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT_GROUP); - IBreakpointContainer container= (IBreakpointContainer) item; - Image containerImage = container.getContainerImage(); - if (container instanceof BreakpointGroupContainer) { - // First, set to the "disabled group" image - containerImage= DebugPluginImages.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT_GROUP_DISABLED); - IBreakpoint[] breakpoints = container.getBreakpoints(); - for (int i = 0; i < breakpoints.length; i++) { - try { - if (breakpoints[i].isEnabled()) { - // If any child breakpoints are enabled, reset to the - // default (enabled) image. - containerImage= image; - } - } catch (CoreException e) { - DebugUIPlugin.log(e); - } - } - } - if (containerImage != null) { - image= containerImage; + Image image = ((IBreakpointContainer) item).getContainerImage(); + if (image == null) { + image= DebugPluginImages.getImage(IDebugUIConstants.IMG_OBJS_BREAKPOINT_GROUP); } return image; } @@ -368,9 +350,8 @@ public class BreakpointsView extends AbstractDebugView implements ISelectionList } /** - * Updates the checked state and icon of the given object's container - * assuming that the child element has changed to the given - * enabled state. + * Updates the checked state of the given object's container assuming + * that the child element has changed to the given enabled state. * @param object * @param enable */ @@ -399,7 +380,6 @@ public class BreakpointsView extends AbstractDebugView implements ISelectionList } catch (CoreException e) { } } - viewer.update(container, new String[] { IBasicPropertyConstants.P_IMAGE }); updateParents(parent, enable); } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java index 071d38d20..65bd12558 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/breakpoints/IBreakpointContainerFactory.java @@ -11,10 +11,13 @@ package org.eclipse.debug.internal.ui.views.breakpoints; import org.eclipse.debug.core.model.IBreakpoint; +import org.eclipse.jface.resource.ImageDescriptor; /** * Factory which produces <code>IBreakpointContainer</code>s based on some * factory-specific criteria. + * + * @since 3.1 */ public interface IBreakpointContainerFactory { @@ -41,6 +44,19 @@ public interface IBreakpointContainerFactory { public void setLabel(String label); /** + * Returns an image for presentation along with this factory or <code>null</code> + * if none. + * @return an image for presentation along with this factory or <code>null</code> + */ + public ImageDescriptor getImageDescriptor(); + + /** + * Sets this breakpoint container factory's image. + * @param image the image + */ + public void setImageDescriptor(ImageDescriptor image); + + /** * Returns this breakpoint container factory's unique identifier. * @return this breakpoint container factory's unique identifier */ |