From 552635fba630d89f6e4ddecba9e4ca0aacb087e1 Mon Sep 17 00:00:00 2001 From: Pawel Piech Date: Wed, 16 Jan 2013 20:48:19 -0800 Subject: Bug 372181 - Working set support for Expressions View Refactored working set support to consolidate functionality in Expressions View. --- .../eclipse/debug/internal/ui/DebugUIPlugin.java | 2 +- .../expressions/AssignWorkingSetsAction.java | 6 +- .../expressions/ExpressionWorkingSetsAction.java | 73 ++++ .../workingset/ExpressionLabelProvider.java | 48 --- .../ExpressionWorkingSetElementAdapter.java | 57 --- .../workingset/ExpressionWorkingSetFilter.java | 85 ----- .../ExpressionWorkingSetFilterManager.java | 405 --------------------- .../workingset/ExpressionWorkingSetMessages.java | 34 -- .../ExpressionWorkingSetMessages.properties | 20 - .../workingset/ExpressionWorkingSetPage.java | 241 ------------ .../workingset/ExpressionWorkingSetsAction.java | 72 ---- .../workingset/IExpressionWorkingSetConstants.java | 25 -- .../elements/ExpressionManagerContentProvider.java | 47 +-- .../ui/model/elements/IAddNewExpression.java | 20 - .../views/expression/ExpressionLabelProvider.java | 48 +++ .../ui/views/expression/ExpressionView.java | 85 +++++ .../ExpressionWorkingSetElementAdapter.java | 57 +++ .../expression/ExpressionWorkingSetFilter.java | 77 ++++ .../expression/ExpressionWorkingSetMessages.java | 34 ++ .../ExpressionWorkingSetMessages.properties | 20 + .../views/expression/ExpressionWorkingSetPage.java | 241 ++++++++++++ .../ui/org/eclipse/debug/ui/AbstractDebugView.java | 2 +- .../ui/org/eclipse/debug/ui/IDebugUIConstants.java | 18 + 23 files changed, 674 insertions(+), 1043 deletions(-) create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/ExpressionWorkingSetsAction.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionLabelProvider.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetElementAdapter.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetFilter.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetFilterManager.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetMessages.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetMessages.properties delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetPage.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetsAction.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/IExpressionWorkingSetConstants.java delete mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/IAddNewExpression.java create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionLabelProvider.java create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionWorkingSetElementAdapter.java create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionWorkingSetFilter.java create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionWorkingSetMessages.java create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionWorkingSetMessages.properties create mode 100644 org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionWorkingSetPage.java (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug') diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java index 5893e5b85..d9292f61c 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIPlugin.java @@ -560,7 +560,7 @@ public class DebugUIPlugin extends AbstractUIPlugin implements ILaunchListener, BreakpointOrganizerManager.getDefault(); //start the expression workingset manager - ExpressionWorkingSetFilterManager.getInstance().init(); +// ExpressionWorkingSetFilterManager.getInstance().init(); getLaunchConfigurationManager().startup(); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/AssignWorkingSetsAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/AssignWorkingSetsAction.java index 090262338..a3c2a4791 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/AssignWorkingSetsAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/actions/expressions/AssignWorkingSetsAction.java @@ -16,7 +16,7 @@ import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.model.IWatchExpression; -import org.eclipse.debug.internal.ui.expression.workingset.IExpressionWorkingSetConstants; +import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; @@ -130,7 +130,7 @@ public class AssignWorkingSetsAction extends WatchExpressionAction { public void run() { IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager(); IWorkingSetNewWizard wizard = manager.createWorkingSetNewWizard( - new String[] {IExpressionWorkingSetConstants.EXPRESSION_WORKINGSET_ID}); + new String[] {IDebugUIConstants.EXPRESSION_WORKINGSET_ID}); if (wizard != null) { WizardDialog dialog = new WizardDialog( @@ -215,7 +215,7 @@ public class AssignWorkingSetsAction extends WatchExpressionAction { for (int i=0; i - * Returns the text of an expression to display in the checklist. - * - * @since 3.9 - */ -public class ExpressionLabelProvider extends BaseLabelProvider implements ITableLabelProvider { - - public Image getColumnImage(Object element, int columnIndex) { - if (element instanceof IExpression) - { - if (columnIndex == 0) - return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_EXPRESSION); - } - return null; - } - - public String getColumnText(Object element, int columnIndex) { - if (element instanceof IExpression) - { - if (columnIndex == 0) - return ((IExpression) element).getExpressionText(); - } - return null; - } - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetElementAdapter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetElementAdapter.java deleted file mode 100644 index 5a9906395..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetElementAdapter.java +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Tensilica Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Abeer Bagul (Tensilica Inc) - initial API and implementation (Bug 372181) - *******************************************************************************/ -package org.eclipse.debug.internal.ui.expression.workingset; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.model.IExpression; -import org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.IWorkingSetElementAdapter; - -/** - * Consulted by workbench pull down actions that add/remove selected elements to/from - * working sets. Allows expression working sets to select which elements are applicable - * for adding/removing. - * - * @since 3.9 - */ -public class ExpressionWorkingSetElementAdapter implements - IWorkingSetElementAdapter { - - public IAdaptable[] adaptElements(IWorkingSet ws, IAdaptable[] elements) { - for (int i = 0; i < elements.length; i++) { - IExpression expression = (IExpression)DebugPlugin.getAdapter(elements[i], IExpression.class); - if (expression != null) { - return selectExpressions(elements); - } - } - return elements; - } - - private IAdaptable[] selectExpressions(IAdaptable[] elements) { - List expressions = new ArrayList(elements.length); - for (int i = 0; i < elements.length; i++) { - IExpression expression = (IExpression)DebugPlugin.getAdapter(elements[i], IExpression.class); - if (expression != null) { - expressions.add(expression); - } - } - return (IAdaptable[]) expressions.toArray(new IAdaptable[expressions.size()]); - } - - public void dispose() { - - } - -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetFilter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetFilter.java deleted file mode 100644 index d169b6388..000000000 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/expression/workingset/ExpressionWorkingSetFilter.java +++ /dev/null @@ -1,85 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2012 Tensilica Inc and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Abeer Bagul (Tensilica Inc) - initial API and implementation (Bug 372181) - *******************************************************************************/ -package org.eclipse.debug.internal.ui.expression.workingset; - -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.debug.core.model.IExpression; -import org.eclipse.debug.internal.ui.model.elements.IAddNewExpression; -import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer; -import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewerFilter; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.ui.IWorkingSet; - -/** - * Holds a list of working sets selected for an instance of Expression view, - * and filters in only those expressions which are part of the selected working sets. - * If no working sets are selected for a view, it filters in all expressions. - * - * This filter always allows the "Add new expression" node. - * @since 3.9 - */ -public class ExpressionWorkingSetFilter extends TreeModelViewerFilter { - - private IWorkingSet[] selectedWorkingSets; - - public IWorkingSet[] getSelectedWorkingSets() { - return selectedWorkingSets; - } - - public void setSelectedWorkingSets(IWorkingSet[] selectedWorkingSets) { - this.selectedWorkingSets = selectedWorkingSets; - } - - public boolean select(Viewer viewer, Object parentElement, Object element) { - - if (selectedWorkingSets == null) - return true; - - if (selectedWorkingSets.length == 0) - return true; - - if (element instanceof IAddNewExpression) - return true; - - if (element instanceof IAdaptable) - { - IExpression expressionToFilter = (IExpression) ((IAdaptable) element).getAdapter(IExpression.class); - if (expressionToFilter != null) - { - return isInWorkingSet(expressionToFilter); - } - } - - return false; - } - - private boolean isInWorkingSet(IExpression expression) - { - for (int i=0; i - * It saves info about which working sets are applied to each expression view, - * and restores the info and filter when an expression view is opened. - * - * @since 3.9 - */ -public class ExpressionWorkingSetFilterManager implements IPropertyChangeListener -{ - - private static final String PREF_WORKINGSETS = "expressionWorkingSets"; //$NON-NLS-1$ - private static final String ELEMENT_WORKINGSETS = "expressionWorkingsets"; //$NON-NLS-1$ - private static final String ELEMENT_EXPRESSIONVIEW = "expressionView"; //$NON-NLS-1$ - private static final String ELEMENT_WORKINGSET = "workingSet"; //$NON-NLS-1$ - - private static ExpressionWorkingSetFilterManager INSTANCE; - - private static boolean fInitialized = false; - - private ExpressionWorkingSetFilterManager() - { - - } - - synchronized public static ExpressionWorkingSetFilterManager getInstance() { - if (INSTANCE == null) { - INSTANCE = new ExpressionWorkingSetFilterManager(); - } - return INSTANCE; - } - - synchronized public void init() { - if (fInitialized) return; - fInitialized = true; - - initListeners(); - - final XMLMemento fworkingSetsMemento = getMemento(); - - new WorkbenchJob("Initializing expression view working sets") { //$NON-NLS-1$ - { setSystem(true); } - public IStatus runInUIThread(IProgressMonitor monitor) { - IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); - for (int i=0; i - * Value is: org.eclipse.cdt.dsf.ui.expressionWorkingSet - * - */ - public static final String EXPRESSION_WORKINGSET_ID = "org.eclipse.debug.ui.expressionWorkingSet"; //$NON-NLS-1$ -} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ExpressionManagerContentProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ExpressionManagerContentProvider.java index 227b6fefa..4ab234688 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ExpressionManagerContentProvider.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/model/elements/ExpressionManagerContentProvider.java @@ -23,13 +23,11 @@ import org.eclipse.debug.internal.core.IInternalDebugCoreConstants; import org.eclipse.debug.internal.ui.DebugUIMessages; import org.eclipse.debug.internal.ui.DefaultLabelProvider; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; -import org.eclipse.debug.internal.ui.expression.workingset.ExpressionWorkingSetFilterManager; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementEditor; import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementLabelProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; -import org.eclipse.debug.internal.ui.views.expression.ExpressionView; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.resource.JFaceResources; @@ -39,7 +37,6 @@ import org.eclipse.jface.viewers.TextCellEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.PlatformUI; @@ -54,33 +51,11 @@ public class ExpressionManagerContentProvider extends ElementContentProvider { * * @since 3.6 */ - private static class AddNewExpressionElement implements IElementLabelProvider, IElementEditor, ICellModifier, IAddNewExpression { + private static class AddNewExpressionElement implements IElementLabelProvider, IElementEditor, IAddNewExpression { - /* Record the working sets applied to this view (none if null). - * When a new expression is created, add it to applied working sets. - */ - private String[] workingSetNames = null; - public void update(ILabelUpdate[] updates) { - workingSetNames = null; - for (int i = 0; i < updates.length; i++) { - - if (i == 0) - { - //from the presentation context, find out the list of - //working sets applied to this view. - IWorkbenchPart expressionView = updates[i].getPresentationContext().getPart(); - IWorkingSet[] workingSets = ExpressionWorkingSetFilterManager.getWorkingSets((ExpressionView) expressionView); - if (workingSets.length > 0) - workingSetNames = new String[workingSets.length]; - for (int j=0; j + * Returns the text of an expression to display in the checklist. + * + * @since 3.9 + */ +public class ExpressionLabelProvider extends BaseLabelProvider implements ITableLabelProvider { + + public Image getColumnImage(Object element, int columnIndex) { + if (element instanceof IExpression) + { + if (columnIndex == 0) + return DebugUITools.getImage(IDebugUIConstants.IMG_OBJS_EXPRESSION); + } + return null; + } + + public String getColumnText(Object element, int columnIndex) { + if (element instanceof IExpression) + { + if (columnIndex == 0) + return ((IExpression) element).getExpressionText(); + } + return null; + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java index 54f3d965d..8a9cbc0c3 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/expression/ExpressionView.java @@ -13,6 +13,9 @@ package org.eclipse.debug.internal.ui.views.expression; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; import org.eclipse.debug.core.DebugPlugin; @@ -20,11 +23,14 @@ import org.eclipse.debug.core.IExpressionManager; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IWatchExpression; +import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; import org.eclipse.debug.internal.ui.actions.expressions.EditWatchExpressinInPlaceAction; import org.eclipse.debug.internal.ui.actions.expressions.PasteWatchExpressionsAction; import org.eclipse.debug.internal.ui.actions.variables.ChangeVariableValueAction; import org.eclipse.debug.internal.ui.preferences.IDebugPreferenceConstants; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer; import org.eclipse.debug.internal.ui.views.variables.AvailableLogicalStructuresAction; @@ -41,14 +47,19 @@ import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.LocalSelectionTransfer; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IMemento; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchCommandConstants; +import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; @@ -58,9 +69,18 @@ import org.eclipse.ui.actions.ActionFactory; */ public class ExpressionView extends VariablesView { + /** + * the preference name for the view part of the sash form + * @since 3.9 + */ + private static final String PREF_ELEMENT_WORKINGSET = DebugUIPlugin.getUniqueIdentifier() + ".workingSet"; //$NON-NLS-1$ + + private PasteWatchExpressionsAction fPasteAction; private EditWatchExpressinInPlaceAction fEditInPlaceAction; + private IWorkingSet[] fWorkingSets; + /* (non-Javadoc) * @see org.eclipse.debug.internal.ui.views.variables.VariablesView#getHelpContextId() */ @@ -253,5 +273,70 @@ public class ExpressionView extends VariablesView { } } + public Viewer createViewer(Composite parent) { + TreeModelViewer viewer = (TreeModelViewer)super.createViewer(parent); + + List list = new ArrayList(); + IMemento[] workingsetMementos = getMemento().getChildren(PREF_ELEMENT_WORKINGSET); + for (int j=0; j 0) { + String[] workingSetNames = new String[fWorkingSets.length]; + for (int j=0; j + * Value is: org.eclipse.debug.ui.expressionWorkingSet + * + * @since 3.9 + */ + public static final String EXPRESSION_WORKINGSET_ID = "org.eclipse.debug.ui.expressionWorkingSet"; //$NON-NLS-1$ + + /** * Memory view identifier (value "org.eclipse.debug.ui.MemoryView"). * @@ -1324,4 +1334,12 @@ public interface IDebugUIConstants { * @since 3.8 */ public final static String COLUMN_ID_VARIABLE_VALUE_TYPE = COLUMN_PRESENTATION_ID_VARIABLE + ".COL_VALUE_TYPE"; //$NON-NLS-1$ + + /** + * Expression view property used to store the currently selected working + * set names. The working set names are stored as a String[]. + * + * @since 3.9 + */ + public final static String PROP_EXPRESSIONS_WORKING_SETS = IDebugUIConstants.PLUGIN_ID + ".PROP_EXPRESSION_WORKING_SETS"; //$NON-NLS-1$ } -- cgit v1.2.3