From 08451dae9eb9e74ab7d71a966faa28f6ae2fa788 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 24 Oct 2002 23:16:01 +0000 Subject: [PATCH] Implementing Memory view formatting actions. --- debug/org.eclipse.cdt.debug.ui/ChangeLog | 9 ++ .../actions/MemoryActionSelectionGroup.java | 73 ++++++++++++++++ .../internal/ui/actions/MemorySizeAction.java | 86 +++++++++++++++++++ .../internal/ui/views/memory/MemoryView.java | 61 ++++++++++++- .../ui/views/memory/MemoryViewer.java | 6 ++ .../cdt/debug/ui/ICDebugUIConstants.java | 11 +++ 6 files changed, 242 insertions(+), 4 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryActionSelectionGroup.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index d42a442b773..388b56e72be 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,12 @@ +2002-10-24 Mikhail Khodjaiants + Implementing Memory view formatting actions. + * MemoryActionSelectionGroup.java: implementation of a toggle action group. + * MemorySizeAction.java: implementation of the "Memory Unit Size" menu item. + * MemoryView.java: add new actions to the view. + * MemoryViewer.java: support for new action. + * ICDebugHelpContextIds.java: help context id for the new action. + * ICDebugUIConstants.java: new menu group - "Format". + 2002-10-23 Mikhail Khodjaiants * DebuggerConsoleActionDelegate.java: The debugger/inferrior console should become visible when checking "Show Debug Console". diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryActionSelectionGroup.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryActionSelectionGroup.java new file mode 100644 index 00000000000..bcab6f29c35 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryActionSelectionGroup.java @@ -0,0 +1,73 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.actions; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.jface.action.IAction; + +/** + * Enter type comment. + * + * @since: Oct 22, 2002 + */ +public class MemoryActionSelectionGroup +{ + private List fActions; + private IAction fSelection = null; + + /** + * Constructor for MemoryActionSelectionGroup. + */ + public MemoryActionSelectionGroup() + { + fActions = new ArrayList(); + } + + public IAction getCurrentSelection() + { + return fSelection; + } + + public void setCurrentSelection( IAction selection ) + { + Iterator it = fActions.iterator(); + while( it.hasNext() ) + { + IAction action = (IAction)it.next(); + if ( !action.equals( selection ) ) + { + action.setChecked( false ); + } + } + if ( fActions.contains( selection ) ) + { + fSelection = selection; + } + else + { + fSelection = null; + } + } + + public void addAction( IAction action ) + { + fActions.add( action ); + } + + public void dispose() + { + fActions.clear(); + fSelection = null; + } + + public IAction[] getActions() + { + return (IAction[])fActions.toArray( new IAction[fActions.size()] ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java new file mode 100644 index 00000000000..1669b63f227 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java @@ -0,0 +1,86 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.cdt.debug.core.IFormattedMemoryBlock; +import org.eclipse.cdt.debug.internal.ui.views.memory.MemoryViewer; +import org.eclipse.jface.action.Action; +import org.eclipse.ui.texteditor.IUpdate; + +/** + * Enter type comment. + * + * @since: Oct 22, 2002 + */ +public class MemorySizeAction extends Action implements IUpdate +{ + private MemoryActionSelectionGroup fGroup; + private MemoryViewer fMemoryViewer; + private int fId = 0; + + /** + * Constructor for MemorySizeAction. + */ + public MemorySizeAction( MemoryActionSelectionGroup group, + MemoryViewer viewer, + int id ) + { + super( getLabel( id ) ); + fGroup = group; + fMemoryViewer = viewer; + fId = id; + setChecked( false ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.texteditor.IUpdate#update() + */ + public void update() + { + setEnabled( fMemoryViewer.canUpdate() ); + setChecked( fMemoryViewer.getCurrentWordSize() == fId ); +/* + if ( isChecked() ) + { + fGroup.setCurrentSelection( this ); + } +*/ + } + + private static String getLabel( int id ) + { + String label = ""; + switch( id ) + { + case( IFormattedMemoryBlock.MEMORY_SIZE_BYTE ): + label = "1 byte"; + break; + case( IFormattedMemoryBlock.MEMORY_SIZE_HALF_WORD ): + label = "2 bytes"; + break; + case( IFormattedMemoryBlock.MEMORY_SIZE_WORD ): + label = "4 bytes"; + break; + case( IFormattedMemoryBlock.MEMORY_SIZE_DOUBLE_WORD ): + label = "8 bytes"; + break; + } + return label; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.IAction#run() + */ + public void run() + { + fGroup.setCurrentSelection( this ); + } + + public String getActionId() + { + return "MemorySize" + fId; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java index c9caaeee4d8..aed8d5bc28f 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java @@ -6,9 +6,12 @@ package org.eclipse.cdt.debug.internal.ui.views.memory; import org.eclipse.cdt.debug.core.ICMemoryManager; +import org.eclipse.cdt.debug.core.IFormattedMemoryBlock; import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; import org.eclipse.cdt.debug.internal.ui.actions.AutoRefreshMemoryAction; import org.eclipse.cdt.debug.internal.ui.actions.ClearMemoryAction; +import org.eclipse.cdt.debug.internal.ui.actions.MemoryActionSelectionGroup; +import org.eclipse.cdt.debug.internal.ui.actions.MemorySizeAction; import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction; import org.eclipse.cdt.debug.internal.ui.actions.ShowAsciiAction; import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler; @@ -23,6 +26,7 @@ import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; @@ -36,6 +40,7 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.texteditor.IUpdate; /** * @@ -50,6 +55,7 @@ public class MemoryView extends AbstractDebugEventHandlerView IDebugExceptionHandler { private IDebugModelPresentation fModelPresentation = null; + private MemoryActionSelectionGroup fMemorySizeGroup = null; /* (non-Javadoc) * @see org.eclipse.debug.ui.AbstractDebugView#createViewer(Composite) @@ -94,6 +100,9 @@ public class MemoryView extends AbstractDebugEventHandlerView setAction( "ShowAscii", action ); //$NON-NLS-1$ add( (ShowAsciiAction)action ); + fMemorySizeGroup = new MemoryActionSelectionGroup(); + createSizeActionGroup( fMemorySizeGroup ); + // set initial content here, as viewer has to be set setInitialContent(); } @@ -113,15 +122,30 @@ public class MemoryView extends AbstractDebugEventHandlerView { menu.add( new Separator( ICDebugUIConstants.EMPTY_MEMORY_GROUP ) ); menu.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) ); - menu.add( getAction( "AutoRefreshMemory" ) ); //$NON-NLS-1$ - menu.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$ - menu.add( getAction( "ClearMemory" ) ); //$NON-NLS-1$ + + menu.add( new Separator( ICDebugUIConstants.EMPTY_FORMAT_GROUP ) ); + menu.add( new Separator( ICDebugUIConstants.FORMAT_GROUP ) ); menu.add( new Separator( IDebugUIConstants.EMPTY_RENDER_GROUP ) ); menu.add( new Separator( IDebugUIConstants.RENDER_GROUP ) ); - menu.add( getAction( "ShowAscii" ) ); //$NON-NLS-1$ menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) ); + + menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "AutoRefreshMemory" ) ); //$NON-NLS-1$ + menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "RefreshMemory" ) ); //$NON-NLS-1$ + menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "ClearMemory" ) ); //$NON-NLS-1$ + + MenuManager subMenu = new MenuManager( "Memory Unit Size " ); + { + IAction[] actions = fMemorySizeGroup.getActions(); + for ( int i = 0; i < actions.length; ++i ) + { + subMenu.add( actions[i] ); + } + } + menu.appendToGroup( ICDebugUIConstants.FORMAT_GROUP, subMenu ); + + menu.appendToGroup( IDebugUIConstants.RENDER_GROUP, getAction( "ShowAscii" ) ); //$NON-NLS-1$ } /* (non-Javadoc) @@ -173,10 +197,14 @@ public class MemoryView extends AbstractDebugEventHandlerView */ public void dispose() { + removeActionGroup( fMemorySizeGroup ); + fMemorySizeGroup.dispose(); + remove( (ShowAsciiAction)getAction( "ShowAscii" ) ); remove( (ClearMemoryAction)getAction( "ClearMemory" ) ); remove( (RefreshMemoryAction)getAction( "RefreshMemory" ) ); remove( (AutoRefreshMemoryAction)getAction( "AutoRefreshMemory" ) ); + getSite().getPage().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); CDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this ); super.dispose(); @@ -257,4 +285,29 @@ public class MemoryView extends AbstractDebugEventHandlerView super.createContextMenu( ((MemoryControlArea)items[i].getControl()).getMemoryText().getControl() ); } } + + private void createSizeActionGroup( MemoryActionSelectionGroup group ) + { + int[] ids = new int[] { IFormattedMemoryBlock.MEMORY_SIZE_BYTE, + IFormattedMemoryBlock.MEMORY_SIZE_HALF_WORD, + IFormattedMemoryBlock.MEMORY_SIZE_WORD, + IFormattedMemoryBlock.MEMORY_SIZE_DOUBLE_WORD }; + for ( int i = 0; i < ids.length; ++i ) + { + MemorySizeAction action = new MemorySizeAction( group, (MemoryViewer)getViewer(), ids[i] ); + action.setEnabled( false ); + setAction( action.getActionId(), action ); //$NON-NLS-1$ + add( action ); + group.addAction( action ); + } + } + + private void removeActionGroup( MemoryActionSelectionGroup group ) + { + IAction[] actions = group.getActions(); + for ( int i = 0; i < actions.length; ++i ) + { + remove( (IUpdate)actions[i] ); + } + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java index 436e166e00a..c3ef5595e9c 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java @@ -209,4 +209,10 @@ public class MemoryViewer extends ContentViewer { return ((MemoryControlArea)fTabFolder.getSelection().getControl()).getPresentation().canDisplayAscii(); } + + public int getCurrentWordSize() + { + IFormattedMemoryBlock block = ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock(); + return ( block != null ) ? block.getWordSize() : 0; + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java index 794f7b4d970..4ec5dbf2fcf 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java @@ -59,4 +59,15 @@ public interface ICDebugUIConstants * Identifier for a memory group in a menu (value "memoryGroup"). */ public static final String MEMORY_GROUP = "memoryGroup"; //$NON-NLS-1$ + + /** + * Identifier for an empty group preceeding a + * format group in a menu (value "emptyFormatGroup"). + */ + public static final String EMPTY_FORMAT_GROUP = "emptyFormatGroup"; //$NON-NLS-1$ + + /** + * Identifier for a format group in a menu (value "formatGroup"). + */ + public static final String FORMAT_GROUP = "formatGroup"; //$NON-NLS-1$ }