diff options
author | Randy Rohrbach | 2011-02-07 21:14:42 +0000 |
---|---|---|
committer | Randy Rohrbach | 2011-02-07 21:14:42 +0000 |
commit | c681894c31bbef666209646ccd346194e58c4e97 (patch) | |
tree | e57ffec0eaa92d778594581e3f28e5a19f91272b /memory/org.eclipse.cdt.debug.ui.memory.memorybrowser | |
parent | 2f04b81343a5bb24327e06b7ac4b84e4c9b0d5b4 (diff) | |
download | org.eclipse.cdt-c681894c31bbef666209646ccd346194e58c4e97.tar.gz org.eclipse.cdt-c681894c31bbef666209646ccd346194e58c4e97.tar.xz org.eclipse.cdt-c681894c31bbef666209646ccd346194e58c4e97.zip |
Bug - 326307
Initial version with dropdown expressions list.
Also this code contains fixes for 330468. I had these edits in place when I started working with Alain's patch.
Randy
781-354-2226
Diffstat (limited to 'memory/org.eclipse.cdt.debug.ui.memory.memorybrowser')
5 files changed, 216 insertions, 17 deletions
diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.properties b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.properties index b0b286d46de..29b910bb807 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.properties +++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.properties @@ -13,7 +13,7 @@ providerName = Eclipse CDT pluginName = Memory Browser view.name.0 = Memory Browser - +view.clearExpressionList = Clear Expressions # Pin & Clone PinView.name = Pin to Debug Context OpenNewView.name = Open New View
\ No newline at end of file diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.xml b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.xml index 2d483e45adc..9ef7f8e7f21 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.xml +++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/plugin.xml @@ -10,6 +10,7 @@ # Contributors: # Ted R Williams (Wind River) - initial implementation # Patrick Chuong (Texas Instruments) - Pin and Clone Supports (331781) +# Randy Rohrbach (Wind River) - Multiple expression support (326307) --> <plugin> @@ -59,4 +60,19 @@ </action> </viewContribution> </extension> + <!-- Add the ability to clear the expressions list --> + <extension point="org.eclipse.ui.viewActions"> + <viewContribution + id="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.clearExpressionList" + targetID="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"> + <action + class="org.eclipse.cdt.debug.ui.memory.memorybrowser.ClearExpressionsListAction" + id="org.eclipse.cdt.debug.ui.memory.memorybrowser.ClearExpressionListActionID" + label="%view.clearExpressionList" + menubarPath="additions"> + </action> + </viewContribution> + </extension> + + </plugin> diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/ClearExpressionsListAction.java b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/ClearExpressionsListAction.java new file mode 100644 index 00000000000..13c41a528a0 --- /dev/null +++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/ClearExpressionsListAction.java @@ -0,0 +1,35 @@ +/******************************************************************************* + * Copyright (c) 2007-2009 Wind River Systems, 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: + * Ted R Williams (Wind River Systems, Inc.) - initial implementation + *******************************************************************************/ + +package org.eclipse.cdt.debug.ui.memory.memorybrowser; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IViewActionDelegate; +import org.eclipse.ui.IViewPart; + +public class ClearExpressionsListAction implements IViewActionDelegate { + + private IViewPart fView; + + public void init(IViewPart view) { + fView = view; + } + + public void run(IAction action) { + if ( fView instanceof MemoryBrowser ) { + MemoryBrowser browser = (MemoryBrowser) fView; + browser.clearExpressionsFromList(null); + } + } + + public void selectionChanged(IAction action, ISelection selection) {} +} diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java index 607258118c1..0264a0d1678 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/GoToAddressBarWidget.java @@ -11,25 +11,30 @@ package org.eclipse.cdt.debug.ui.memory.memorybrowser; +import java.util.ArrayList; +import java.util.StringTokenizer; + import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.fieldassist.ControlDecoration; import org.eclipse.jface.fieldassist.FieldDecoration; import org.eclipse.jface.fieldassist.FieldDecorationRegistry; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; public class GoToAddressBarWidget { - private Text fExpression; + private Combo fExpression; private ControlDecoration fEmptyExpression; private ControlDecoration fWrongExpression; @@ -38,8 +43,10 @@ public class GoToAddressBarWidget { private Composite fComposite; protected static int ID_GO_NEW_TAB = 2000; - - /** + + private IStatus fExpressionStatus = Status.OK_STATUS; + + /** * @param parent * @return */ @@ -68,20 +75,142 @@ public class GoToAddressBarWidget { return fComposite; } + + private final static String SAVED_EXPRESSIONS = "saved_expressions"; //$NON-NLS-1$ + private final static int MAX_SAVED_EXPRESSIONS = 30 ; + + private void saveExpression( String memorySpace, String expr ) { + /* + * Get the saved expressions if any. + * + * They are in the form + * + * expression,expression,.....,expression + */ + IPreferenceStore store = MemoryBrowserPlugin.getDefault().getPreferenceStore(); + String currentExpressions = store.getString(SAVED_EXPRESSIONS); + if ( currentExpressions != null && currentExpressions.length() != 0 ) { + store.setValue(SAVED_EXPRESSIONS, currentExpressions + "," + expr); + } + else { + store.setValue(SAVED_EXPRESSIONS, expr); + } + } + + public void deleteExpressions(String memorySpace) { + MemoryBrowserPlugin.getDefault().getPreferenceStore().setValue(SAVED_EXPRESSIONS, ""); + } - private Text createExpressionField(Composite parent) { - Text expression = new Text(parent, SWT.SINGLE | SWT.BORDER); - expression.addModifyListener(new ModifyListener() { + private String[] getSavedExpressions(String memorySpace) { + /* + * Get the saved expressions if any. + * + * They are in the form + * + * expression,expression,.....,expression + */ + IPreferenceStore store = MemoryBrowserPlugin.getDefault().getPreferenceStore(); + String expressions = store.getString(SAVED_EXPRESSIONS); + + StringTokenizer st = new StringTokenizer(expressions, ","); //$NON-NLS-1$ + /* + * Parse through the list creating an ordered array for display. + */ + ArrayList<String> list = new ArrayList<String>(); + while(st.hasMoreElements()) + { + String expr = (String) st.nextElement(); + list.add(expr); + } + return list.toArray(new String[list.size()]); + } + + private String removeOldestExpression( String memorySpace ) { + String[] currentSavedExpressions = getSavedExpressions(memorySpace); + if ( currentSavedExpressions.length > 0 ) { + /* + * Remove all expressions and then repopulate the list. + */ + deleteExpressions(memorySpace); + /* + * The first in the list is the oldest. So we will delete it by not + * putting it back. + */ + for ( int idx = 1 ; idx < currentSavedExpressions.length; idx ++ ) { + saveExpression( memorySpace, currentSavedExpressions[idx]); + } + return currentSavedExpressions[0]; + } + return null; + } + + public void addExpressionToList( String memorySpace, String expr ) { + /* + * Make sure it does not already exist, we do not want to show duplicates. + */ + if ( fExpression.indexOf(expr) == -1 ) { + /* + * Cap the size of the list. + */ + if ( ( fExpression.getItemCount() + 1 ) > MAX_SAVED_EXPRESSIONS ) { + fExpression.remove(removeOldestExpression(memorySpace)); + } + + /* + * Add the new expression to the dropdown. + */ + fExpression.add(expr); + + /* + * Add it to the persistense database. + */ + saveExpression(memorySpace, expr); + } + } + + public void clearExpressionsFromList(String memorySpace) { + /* + * Clean up the combo list. + */ + fExpression.removeAll(); + fExpression.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); + + /* + * Clean out the expression persistense. + */ + deleteExpressions(memorySpace); + + /* + * Make sure the status image indicator shows OK. + */ + handleExpressionStatus(Status.OK_STATUS); + } + + private Combo createExpressionField(Composite parent){ + /* + * Create the dropdown box for the editable expressions. + */ + Combo combo = new Combo(parent, SWT.DROP_DOWN | SWT.BORDER); + combo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateButtons(); } }); - fEmptyExpression = new ControlDecoration(expression, SWT.LEFT | SWT.CENTER); + + /* + * Populate the list with the expressions from the last time the view was brought up. + */ + String[] expressions = getSavedExpressions(""); + for ( String expr : expressions ) { + combo.add( expr ); + } + + fEmptyExpression = new ControlDecoration(combo, SWT.LEFT | SWT.CENTER); fEmptyExpression.setDescriptionText(Messages.getString("GoToAddressBarWidget.EnterExpressionMessage")); //$NON-NLS-1$ FieldDecoration fieldDec = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_REQUIRED); fEmptyExpression.setImage(fieldDec.getImage()); - fWrongExpression = new ControlDecoration(expression, SWT.LEFT | SWT.TOP); + fWrongExpression = new ControlDecoration(combo, SWT.LEFT | SWT.TOP); fieldDec = FieldDecorationRegistry.getDefault().getFieldDecoration(FieldDecorationRegistry.DEC_ERROR); fWrongExpression.setImage(fieldDec.getImage()); fWrongExpression.hide(); @@ -89,8 +218,8 @@ public class GoToAddressBarWidget { // leave enough room for decorators GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalIndent = Math.max(fEmptyExpression.getImage().getBounds().width, fWrongExpression.getImage().getBounds().width); - expression.setLayoutData(data); - return expression; + combo.setLayoutData(data); + return combo; } protected void updateButtons() { @@ -103,8 +232,11 @@ public class GoToAddressBarWidget { fEmptyExpression.show(); else fEmptyExpression.hide(); - - fWrongExpression.hide(); + + if (fExpressionStatus.isOK()) + fWrongExpression.hide(); + else + fWrongExpression.show(); } public int getHeight() @@ -140,7 +272,7 @@ public class GoToAddressBarWidget { fExpression.setText(text); } - public Text getExpressionWidget() + public Combo getExpressionWidget() { return fExpression; } @@ -156,5 +288,16 @@ public class GoToAddressBarWidget { fWrongExpression.setDescriptionText(message.getMessage()); fWrongExpression.show(); } + + fExpressionStatus = message; } -}
\ No newline at end of file + + /** + * Return the expression status + * @return expression status + */ + public IStatus getExpressionStatus() + { + return fExpressionStatus; + } +} diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java index 8b684768e52..bba517e47f0 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java @@ -320,6 +320,10 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM return false; } + public void clearExpressionsFromList(String memorySpace) { + fGotoAddressBar.clearExpressionsFromList(memorySpace); + } + /** * Returns the presentation context id for this view. Used to support the * pin and clone feature patch from bug 145635. @@ -393,7 +397,8 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM String expression = fGotoAddressBar.getExpressionText(); if (expression.length() > 0) { - performGo(inNewTab, fGotoAddressBar.getExpressionText(), memorySpace); + fGotoAddressBar.addExpressionToList(memorySpace, expression); + performGo(inNewTab, expression, memorySpace); } } |