diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 47a6e039e56..a6777fafd2f 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,20 @@ +2002-10-18 Mikhail Khodjaiants + Implementing the memory view support: + Images for the view's actions: + autorefresh_mem.gif (clcl, dlcl, elcl), + refresh_mem.gif (clcl, dlcl, elcl), + memory_save.gif (clcl, dlcl, elcl), + memory_clear.gif (clcl, dlcl, elcl). + * RefreshMemoryAction.java + * MemoryControlArea.java + * MemoryPresentation.java + * MemoryText.java + * MemoryView.java + * MemoryViewer.java + * CDebugImages.java + * ICDebugHelpContextIds.java + * ICDebugUIConstants.java + 2002-10-17 Mikhail Khodjaiants Implementing the memory view support: * MemoryControlArea.java diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/autorefresh_mem.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/autorefresh_mem.gif new file mode 100644 index 00000000000..a063c230aca Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/autorefresh_mem.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/memory_clear.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/memory_clear.gif new file mode 100644 index 00000000000..255832653fd Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/memory_clear.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/memory_update.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/memory_update.gif new file mode 100644 index 00000000000..ca4fe2b1cff Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/memory_update.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/refresh_mem.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/refresh_mem.gif new file mode 100644 index 00000000000..9eb88fa444a Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/refresh_mem.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/autorefresh_mem.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/autorefresh_mem.gif new file mode 100644 index 00000000000..b2281b40cc6 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/autorefresh_mem.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/memory_clear.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/memory_clear.gif new file mode 100644 index 00000000000..d873c49b8a0 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/memory_clear.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/memory_update.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/memory_update.gif new file mode 100644 index 00000000000..42890d67054 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/memory_update.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/refresh_mem.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/refresh_mem.gif new file mode 100644 index 00000000000..b8c1865c696 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/refresh_mem.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/autorefresh_mem.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/autorefresh_mem.gif new file mode 100644 index 00000000000..919423d4357 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/autorefresh_mem.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/memory_clear.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/memory_clear.gif new file mode 100644 index 00000000000..6faf8d66fef Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/memory_clear.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/memory_update.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/memory_update.gif new file mode 100644 index 00000000000..ca4fe2b1cff Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/memory_update.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/refresh_mem.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/refresh_mem.gif new file mode 100644 index 00000000000..d28167335d6 Binary files /dev/null and b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/refresh_mem.gif differ diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java index cbff10a9b4d..c200b9e49c4 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java @@ -64,6 +64,10 @@ public class CDebugImages public static final String IMG_LCL_TYPE_NAMES = NAME_PREFIX + "tnames_co.gif"; //$NON-NLS-1$ public static final String IMG_LCL_CHANGE_REGISTER_VALUE = NAME_PREFIX + "change_reg_value_co.gif"; //$NON-NLS-1$ + public static final String IMG_LCL_AUTO_REFRESH_MEMORY = NAME_PREFIX + "autorefresh_mem.gif"; //$NON-NLS-1$ + public static final String IMG_LCL_REFRESH_MEMORY = NAME_PREFIX + "refresh_mem.gif"; //$NON-NLS-1$ + public static final String IMG_LCL_MEMORY_SAVE = NAME_PREFIX + "memory_save.gif"; //$NON-NLS-1$ + public static final String IMG_LCL_MEMORY_CLEAR = NAME_PREFIX + "memory_clear.gif"; //$NON-NLS-1$ /* * Set of predefined Image Descriptors. diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java index 2e2ab4da747..2a2ff99e937 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java @@ -25,6 +25,7 @@ public interface ICDebugHelpContextIds // Actions public static final String CHANGE_REGISTER_VALUE_ACTION = PREFIX + "change_register_value_action_context"; //$NON-NLS-1$ public static final String SHOW_TYPES_ACTION = PREFIX + "show_types_action_context"; //$NON-NLS-1$ + public static final String REFRESH_MEMORY_ACTION = PREFIX + "refresh_memory_action_context"; //$NON-NLS-1$ // Views public static final String REGISTERS_VIEW = PREFIX + "registers_view_context"; //$NON-NLS-1$ diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java new file mode 100644 index 00000000000..067c1999ea1 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java @@ -0,0 +1,41 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.cdt.debug.internal.ui.CDebugImages; +import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; +import org.eclipse.cdt.debug.internal.ui.views.memory.MemoryViewer; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.actions.SelectionProviderAction; +import org.eclipse.ui.help.WorkbenchHelp; + +/** + * Enter type comment. + * + * @since: Oct 18, 2002 + */ +public class RefreshMemoryAction extends SelectionProviderAction +{ + /** + * Constructor for RefreshMemoryAction. + * @param provider + * @param text + */ + public RefreshMemoryAction( MemoryViewer viewer ) + { + super( viewer, "Refresh Memory Block" ); + CDebugImages.setLocalImageDescriptors( this, CDebugImages.IMG_LCL_REFRESH_MEMORY ); + WorkbenchHelp.setHelp( this, ICDebugHelpContextIds.REFRESH_MEMORY_ACTION ); + } + + /* (non-Javadoc) + * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(IStructuredSelection) + */ + public void selectionChanged( IStructuredSelection selection ) + { + super.selectionChanged( selection ); + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java index d69adf52393..f28a12f99de 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java @@ -170,7 +170,7 @@ public class MemoryControlArea extends Composite { setMemoryManager( ( input instanceof ICMemoryManager ) ? (ICMemoryManager)input : null ); getPresentation().setMemoryBlock( getMemoryBlock() ); - setAddressTextState(); + setState(); refresh(); } @@ -245,6 +245,7 @@ public class MemoryControlArea extends Composite getPaddingChar() ) ); getPresentation().setMemoryBlock( getMemoryBlock() ); } + setMemoryTextState(); } private void removeBlock() throws DebugException @@ -254,6 +255,7 @@ public class MemoryControlArea extends Composite getMemoryManager().removeBlock( getIndex() ); getPresentation().setMemoryBlock( null ); } + setMemoryTextState(); } public int getFormat() @@ -311,8 +313,19 @@ public class MemoryControlArea extends Composite fAddressText.setEnabled( enable ); } - protected void setAddressTextState() + protected void setState() { enableAddressText( getMemoryManager() != null ); + setMemoryTextState(); + } + + private void setMemoryTextState() + { + fMemoryText.setEditable( getMemoryManager() != null && getMemoryBlock() != null ); + } + + protected MemoryText getMemoryText() + { + return fMemoryText; } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java index f61d710cafc..4ed5aacad4d 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java @@ -6,9 +6,11 @@ package org.eclipse.cdt.debug.internal.ui.views.memory; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import org.eclipse.cdt.debug.core.ICMemoryManager; import org.eclipse.cdt.debug.core.IFormattedMemoryBlock; import org.eclipse.cdt.debug.core.IFormattedMemoryBlockRow; import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils; @@ -64,14 +66,14 @@ public class MemoryPresentation { fAddressZones.clear(); IFormattedMemoryBlockRow[] rows = ( getMemoryBlock() != null ) ? getMemoryBlock().getRows() : new IFormattedMemoryBlockRow[0]; - String text = new String(); + StringBuffer sb = new StringBuffer(); for ( int i = 0; i < rows.length; ++i ) { - int offset = text.length(); - text += getRowText( rows[i] ); + int offset = sb.length(); + sb.append( getRowText( rows[i] ) ); fAddressZones.add( new Point( offset, offset + getAddressLength() ) ); } - return text; + return sb.toString(); } public int getItemSize( int offset ) @@ -90,7 +92,11 @@ public class MemoryPresentation public boolean isAcceptable( char ch, int offset ) { - return true; + if ( isInAsciiArea( offset ) ) + return true; + if ( isInDataArea( offset ) ) + return isValidValue( ch ); + return false; } public Point[] getAddressZones() @@ -121,8 +127,7 @@ public class MemoryPresentation private String getInterval( int length ) { char[] chars = new char[length]; - for ( int i = 0; i < chars.length; ++i ) - chars[i] = ' '; + Arrays.fill( chars, ' ' ); return new String( chars ); } @@ -133,13 +138,19 @@ public class MemoryPresentation private String getRowText( IFormattedMemoryBlockRow row ) { - String result = getAddressString( row.getAddress() ) + - getInterval( INTERVAL_BETWEEN_ADDRESS_AND_DATA ); + StringBuffer result = new StringBuffer( getRowLength() ); + result.append( getAddressString( row.getAddress() ) ); + result.append( getInterval( INTERVAL_BETWEEN_ADDRESS_AND_DATA ) ); String[] items = row.getData(); for ( int i = 0; i < items.length; ++i ) - result += items[i] + getInterval( INTERVAL_BETWEEN_DATA_ITEMS ); - result += getInterval( INTERVAL_BETWEEN_DATA_AND_ASCII ) + row.getASCII() + '\n'; - return result; + { + result.append( items[i] ); + result.append( getInterval( INTERVAL_BETWEEN_DATA_ITEMS ) ); + } + result.append( getInterval( INTERVAL_BETWEEN_DATA_AND_ASCII ) ); + result.append( row.getASCII() ); + result.append( '\n' ); + return result.toString(); } /* @@ -228,39 +239,126 @@ public class MemoryPresentation chars[i] = ch; return String.valueOf( chars ).concat( item ); } -/* + private int getRowLength() { return getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA + - (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS ) * getNumberOfDataItems() + + (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) * getNumberOfDataItems() + ( ( displayASCII() ) ? INTERVAL_BETWEEN_DATA_AND_ASCII + - getBytesPerRow() : 0 ) + 1; + getDataBytesPerRow() : 0 ) + 1; } -*/ + private int getAddressLength() { return 10; } -/* + + private boolean isInAddressZone( int offset ) + { + if ( getRowLength() != 0 ) + { + int pos = offset % getRowLength(); + return ( pos >= 0 && pos < getAddressLength() ); + } + return false; + } + + private boolean isInAsciiArea( int offset ) + { + if ( displayASCII() && getRowLength() != 0 ) + { + int pos = offset % getRowLength(); + int asciiColumn = getAddressLength() + + INTERVAL_BETWEEN_ADDRESS_AND_DATA + + (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS ) * getNumberOfDataItems() + + INTERVAL_BETWEEN_DATA_AND_ASCII; + return ( pos >= asciiColumn && pos < getRowLength() - 1 ); + } + return false; + } + + private boolean isInDataArea( int offset ) + { + if ( getRowLength() != 0 ) + { + int pos = offset % getRowLength(); + int dataBegin = getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA; + int dataEnd = dataBegin + ((getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS ) * getNumberOfDataItems()); + if ( pos >= dataBegin && pos < dataEnd ) + return isInDataItem( pos - dataBegin ); + } + return false; + } + + private boolean isInDataItem( int pos ) + { + for ( int i = 0; i < getNumberOfDataItems(); ++i ) + { + if ( pos < i * (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) ) + return false; + if ( pos >= i * (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) && + pos < (i * (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS)) + getDataItemLength() ) + return true; + } + return false; + } + private int getDataItemLength() { - int result = 0; - switch( getFormat() ) - { - case ICDebugUIInternalConstants.MEMORY_FORMAT_HEX: - result = 2 * getSize(); - break; - case ICDebugUIInternalConstants.MEMORY_FORMAT_BINARY: - result = 8 * getSize(); - break; - } - return result; + if ( getMemoryBlock() != null ) + return getMemoryBlock().getWordSize() * 2; + return 0; } private int getNumberOfDataItems() { - return getBytesPerRow() / getSize(); + if ( getMemoryBlock() != null ) + return getMemoryBlock().getNumberOfColumns(); + return 0; + } + + private boolean displayASCII() + { + if ( getMemoryBlock() != null ) + return getMemoryBlock().displayASCII(); + return false; + } + + private int getDataBytesPerRow() + { + if ( getMemoryBlock() != null ) + return getMemoryBlock().getNumberOfColumns() * getMemoryBlock().getWordSize(); + return 0; + } + + private boolean isValidValue( char ch ) + { + switch( getDataFormat() ) + { + case ICMemoryManager.MEMORY_FORMAT_HEX: + return isHexadecimal( ch ); + case ICMemoryManager.MEMORY_FORMAT_BINARY: + case ICMemoryManager.MEMORY_FORMAT_OCTAL: + case ICMemoryManager.MEMORY_FORMAT_SIGNED_DECIMAL: + case ICMemoryManager.MEMORY_FORMAT_UNSIGNED_DECIMAL: + case -1: + default: + return false; + } + } + + private boolean isHexadecimal( char ch ) + { + return ( Character.isDigit( ch ) || + ( ch >= 'a' && ch <= 'f' ) || + ( ch >= 'A' && ch <= 'F' ) ); + } + + private int getDataFormat() + { + if ( getMemoryBlock() != null ) + return getMemoryBlock().getFormat(); + return -1; } -*/ } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java index 8e7c533c032..090c6546499 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java @@ -26,6 +26,7 @@ import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; /** * @@ -142,8 +143,19 @@ public class MemoryText if ( event.character == SWT.LF || event.character == SWT.CR || event.character == SWT.BS || - event.character == SWT.DEL || - !fPresentation.isAcceptable( event.character, fText.getCaretOffset() ) ) + event.character == SWT.DEL ) + { + event.doit = false; + return; + } + if ( Character.isISOControl( event.character ) ) + return; + if ( getSelectionCount() != 0 ) + { + event.doit = false; + return; + } + if ( !fPresentation.isAcceptable( event.character, fText.getCaretOffset() ) ) event.doit = false; } @@ -231,4 +243,19 @@ public class MemoryText getBackgroundColor() ) ); fText.setStyleRanges( (StyleRange[])list.toArray( new StyleRange[list.size()] ) ); } + + protected void setEditable( boolean editable ) + { + fText.setEditable( editable ); + } + + protected int getSelectionCount() + { + return fText.getSelectionCount(); + } + + protected Control getControl() + { + return fText; + } } 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 240e192e280..9fba11528bd 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 @@ -7,14 +7,17 @@ package org.eclipse.cdt.debug.internal.ui.views.memory; import org.eclipse.cdt.debug.core.ICMemoryManager; import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; +import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction; import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler; import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandlerView; import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.cdt.debug.ui.ICDebugUIConstants; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.ui.IDebugModelPresentation; 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.Separator; @@ -25,6 +28,7 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; @@ -64,6 +68,10 @@ public class MemoryView extends AbstractDebugEventHandlerView */ protected void createActions() { + IAction action = new RefreshMemoryAction( (MemoryViewer)getViewer() ); + action.setEnabled( false ); + setAction( "RefreshMemory", action ); //$NON-NLS-1$ + // set initial content here, as viewer has to be set setInitialContent(); } @@ -81,6 +89,10 @@ public class MemoryView extends AbstractDebugEventHandlerView */ protected void fillContextMenu( IMenuManager menu ) { + menu.add( new Separator( ICDebugUIConstants.EMPTY_MEMORY_GROUP ) ); + menu.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) ); + menu.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$ + menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) ); } @@ -89,6 +101,9 @@ public class MemoryView extends AbstractDebugEventHandlerView */ protected void configureToolBar( IToolBarManager tbm ) { + tbm.add( new Separator( this.getClass().getName() ) ); + tbm.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) ); + tbm.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$ } /* (non-Javadoc) @@ -192,4 +207,12 @@ public class MemoryView extends AbstractDebugEventHandlerView setViewerInput( null ); } } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractDebugView#createContextMenu(Control) + */ + protected void createContextMenu( Control menuControl ) + { + super.createContextMenu( ((MemoryControlArea)((MemoryViewer)getViewer()).getTabFolder().getSelection().getControl()).getMemoryText().getControl() ); + } } 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 9aac4a6a48b..155e1163d21 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 @@ -12,6 +12,8 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; @@ -63,6 +65,16 @@ public class MemoryViewer extends ContentViewer fMemoryControlAreas[i] = new MemoryControlArea( fTabFolder, SWT.NONE, i ); tabItem.setControl( fMemoryControlAreas[i] ); } + fTabFolder.addSelectionListener( new SelectionListener() + { + public void widgetSelected( SelectionEvent e ) + { + } + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); fTabFolder.setSelection( 0 ); } return fControl; @@ -86,7 +98,7 @@ public class MemoryViewer extends ContentViewer /* (non-Javadoc) * @see org.eclipse.jface.viewers.Viewer#setSelection(ISelection, boolean) */ - public void setSelection(ISelection selection, boolean reveal) + public void setSelection( ISelection selection, boolean reveal ) { } @@ -103,4 +115,9 @@ public class MemoryViewer extends ContentViewer for ( int i = 0; i < fMemoryControlAreas.length; ++i ) fMemoryControlAreas[i].setInput( (ICMemoryManager)input ); } + + protected CTabFolder getTabFolder() + { + return fTabFolder; + } } 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 f9d859cad54..794f7b4d970 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 @@ -48,4 +48,15 @@ public interface ICDebugUIConstants * Identifier for a register group in a menu (value "registerGroup"). */ public static final String REGISTER_GROUP = "registerGroup"; //$NON-NLS-1$ + + /** + * Identifier for an empty group preceeding a + * memory group in a menu (value "emptyMemoryGroup"). + */ + public static final String EMPTY_MEMORY_GROUP = "emptyMemoryGroup"; //$NON-NLS-1$ + + /** + * Identifier for a memory group in a menu (value "memoryGroup"). + */ + public static final String MEMORY_GROUP = "memoryGroup"; //$NON-NLS-1$ }