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$
}