Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Implementing memory view.

Implementing memory view.
 
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision 1.20
diff -u -r1.20 ChangeLog
--- ChangeLog 17 Oct 2002 23:17:01 -0000 1.20
+++ ChangeLog 18 Oct 2002 21:53:17 -0000
@@ -1,5 +1,9 @@
 2002-10-17 Mikhail Khodjaiants
  Implementing the memory view support:
+ * CFormattedMemoryBlock.java: implementation of the 'dispose' method added.
+
+2002-10-17 Mikhail Khodjaiants
+ Implementing the memory view support:
  * CDebugModel.java
  * ICMemoryManager.java
  * IFormattedMemoryBlock.java
Index: src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java,v
retrieving revision 1.2
diff -u -r1.2 CFormattedMemoryBlock.java
--- src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 17 Oct 2002 23:17:01 -0000 1.2
+++ src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 18 Oct 2002 21:53:17 -0000
@@ -8,6 +8,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.cdt.debug.core.CDebugCorePlugin;
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlockRow;
 import org.eclipse.cdt.debug.core.cdi.CDIException;
@@ -313,6 +314,18 @@
   */
  public void dispose()
  {
+  if ( fCDIMemoryBlock != null )
+  {
+   try
+   {
+    ((CDebugTarget)getDebugTarget()).getCDISession().getMemoryManager().removeBlock( fCDIMemoryBlock );
+   }
+   catch( CDIException e )
+   {
+    CDebugCorePlugin.log( e );
+   }
+   fCDIMemoryBlock = null;
+  }
  }
 
  /* (non-Javadoc)
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision 1.5
diff -u -r1.5 ChangeLog
--- ChangeLog 17 Oct 2002 23:17:02 -0000 1.5
+++ ChangeLog 18 Oct 2002 22:01:52 -0000
@@ -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
Index: icons/full/clcl16/autorefresh_mem.gif
===================================================================
RCS file: icons/full/clcl16/autorefresh_mem.gif
diff -N icons/full/clcl16/autorefresh_mem.gif
Binary files /dev/null and autorefresh_mem.gif differ
Index: icons/full/clcl16/memory_clear.gif
===================================================================
RCS file: icons/full/clcl16/memory_clear.gif
diff -N icons/full/clcl16/memory_clear.gif
Binary files /dev/null and memory_clear.gif differ
Index: icons/full/clcl16/memory_update.gif
===================================================================
RCS file: icons/full/clcl16/memory_update.gif
diff -N icons/full/clcl16/memory_update.gif
Binary files /dev/null and memory_update.gif differ
Index: icons/full/clcl16/refresh_mem.gif
===================================================================
RCS file: icons/full/clcl16/refresh_mem.gif
diff -N icons/full/clcl16/refresh_mem.gif
Binary files /dev/null and refresh_mem.gif differ
Index: icons/full/dlcl16/autorefresh_mem.gif
===================================================================
RCS file: icons/full/dlcl16/autorefresh_mem.gif
diff -N icons/full/dlcl16/autorefresh_mem.gif
Binary files /dev/null and autorefresh_mem.gif differ
Index: icons/full/dlcl16/memory_clear.gif
===================================================================
RCS file: icons/full/dlcl16/memory_clear.gif
diff -N icons/full/dlcl16/memory_clear.gif
Binary files /dev/null and memory_clear.gif differ
Index: icons/full/dlcl16/memory_update.gif
===================================================================
RCS file: icons/full/dlcl16/memory_update.gif
diff -N icons/full/dlcl16/memory_update.gif
Binary files /dev/null and memory_update.gif differ
Index: icons/full/dlcl16/refresh_mem.gif
===================================================================
RCS file: icons/full/dlcl16/refresh_mem.gif
diff -N icons/full/dlcl16/refresh_mem.gif
Binary files /dev/null and refresh_mem.gif differ
Index: icons/full/elcl16/autorefresh_mem.gif
===================================================================
RCS file: icons/full/elcl16/autorefresh_mem.gif
diff -N icons/full/elcl16/autorefresh_mem.gif
Binary files /dev/null and autorefresh_mem.gif differ
Index: icons/full/elcl16/memory_clear.gif
===================================================================
RCS file: icons/full/elcl16/memory_clear.gif
diff -N icons/full/elcl16/memory_clear.gif
Binary files /dev/null and memory_clear.gif differ
Index: icons/full/elcl16/memory_update.gif
===================================================================
RCS file: icons/full/elcl16/memory_update.gif
diff -N icons/full/elcl16/memory_update.gif
Binary files /dev/null and memory_update.gif differ
Index: icons/full/elcl16/refresh_mem.gif
===================================================================
RCS file: icons/full/elcl16/refresh_mem.gif
diff -N icons/full/elcl16/refresh_mem.gif
Binary files /dev/null and refresh_mem.gif differ
Index: src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java,v
retrieving revision 1.6
diff -u -r1.6 CDebugImages.java
--- src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java 8 Oct 2002 22:03:22 -0000 1.6
+++ src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java 18 Oct 2002 22:01:52 -0000
@@ -64,6 +64,10 @@
 
  public static final String IMG_LCL_TYPE_NAMES = NAME_PREFIX + "tnames_co.gif"; file://$NON-NLS-1$
  public static final String IMG_LCL_CHANGE_REGISTER_VALUE = NAME_PREFIX + "change_reg_value_co.gif"; file://$NON-NLS-1$
+ public static final String IMG_LCL_AUTO_REFRESH_MEMORY = NAME_PREFIX + "autorefresh_mem.gif"; file://$NON-NLS-1$
+ public static final String IMG_LCL_REFRESH_MEMORY = NAME_PREFIX + "refresh_mem.gif"; file://$NON-NLS-1$
+ public static final String IMG_LCL_MEMORY_SAVE = NAME_PREFIX + "memory_save.gif"; file://$NON-NLS-1$
+ public static final String IMG_LCL_MEMORY_CLEAR = NAME_PREFIX + "memory_clear.gif"; file://$NON-NLS-1$
 
  /*
   * Set of predefined Image Descriptors.
Index: src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java,v
retrieving revision 1.3
diff -u -r1.3 ICDebugHelpContextIds.java
--- src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java 3 Oct 2002 22:51:52 -0000 1.3
+++ src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java 18 Oct 2002 22:01:52 -0000
@@ -25,6 +25,7 @@
  // Actions
  public static final String CHANGE_REGISTER_VALUE_ACTION = PREFIX + "change_register_value_action_context"; file://$NON-NLS-1$
  public static final String SHOW_TYPES_ACTION = PREFIX + "show_types_action_context"; file://$NON-NLS-1$
+ public static final String REFRESH_MEMORY_ACTION = PREFIX + "refresh_memory_action_context"; file://$NON-NLS-1$
 
  // Views
  public static final String REGISTERS_VIEW = PREFIX + "registers_view_context"; file://$NON-NLS-1$
Index: src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java
diff -N src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/internal/ui/actions/RefreshMemoryAction.java 18 Oct 2002 22:01:52 -0000
@@ -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 );
+ }
+}
Index: src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java,v
retrieving revision 1.5
diff -u -r1.5 MemoryControlArea.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 17 Oct 2002 23:17:02 -0000 1.5
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 18 Oct 2002 22:01:52 -0000
@@ -170,7 +170,7 @@
  {
   setMemoryManager( ( input instanceof ICMemoryManager ) ? (ICMemoryManager)input : null );
   getPresentation().setMemoryBlock( getMemoryBlock() );
-  setAddressTextState();
+  setState();
   refresh();
  }
  
@@ -245,6 +245,7 @@
                        getPaddingChar() ) );
    getPresentation().setMemoryBlock( getMemoryBlock() );
   }
+  setMemoryTextState();
  }
  
  private void removeBlock() throws DebugException
@@ -254,6 +255,7 @@
    getMemoryManager().removeBlock( getIndex() );
    getPresentation().setMemoryBlock( null );
   }
+  setMemoryTextState();
  }
 
  public int getFormat()
@@ -311,8 +313,19 @@
   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;
  }
 }
Index: src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java,v
retrieving revision 1.2
diff -u -r1.2 MemoryPresentation.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 17 Oct 2002 23:17:02 -0000 1.2
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 18 Oct 2002 22:01:52 -0000
@@ -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 @@
  {
   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 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 @@
  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 @@
 
  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 @@
    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 int getDataItemLength()

+ private boolean isInAddressZone( int offset )
  {
-  int result = 0;
-  switch( getFormat() )
+  if ( getRowLength() != 0 )
   {
-   case ICDebugUIInternalConstants.MEMORY_FORMAT_HEX:
-    result = 2 * getSize();
-    break;
-   case ICDebugUIInternalConstants.MEMORY_FORMAT_BINARY:
-    result = 8 * getSize();
-    break;
+   int pos = offset % getRowLength();
+   return ( pos >= 0 && pos < getAddressLength() );
   }
-  return result;
+  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()
+ {
+  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;
  }
-*/
 }
Index: src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java,v
retrieving revision 1.3
diff -u -r1.3 MemoryText.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java 8 Oct 2002 20:35:59 -0000 1.3
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java 18 Oct 2002 22:01:52 -0000
@@ -26,6 +26,7 @@
 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 @@
   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;
  }
  
@@ -230,5 +242,20 @@
            getDirtyColor(),
            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;
  }
 }
Index: src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java,v
retrieving revision 1.4
diff -u -r1.4 MemoryView.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java 17 Oct 2002 23:17:02 -0000 1.4
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java 18 Oct 2002 22:01:52 -0000
@@ -7,14 +7,17 @@
 
 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.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 @@
   */
  protected void createActions()
  {
+  IAction action = "" RefreshMemoryAction( (MemoryViewer)getViewer() );
+  action.setEnabled( false );
+  setAction( "RefreshMemory", action ); file://$NON-NLS-1$
+
   // set initial content here, as viewer has to be set
   setInitialContent();
  }
@@ -81,6 +89,10 @@
   */
  protected void fillContextMenu( IMenuManager menu )
  {
+  menu.add( new Separator( ICDebugUIConstants.EMPTY_MEMORY_GROUP ) );
+  menu.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) );
+  menu.add( getAction( "RefreshMemory" ) ); file://$NON-NLS-1$
+
   menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
  }
 
@@ -89,6 +101,9 @@
   */
  protected void configureToolBar( IToolBarManager tbm )
  {
+  tbm.add( new Separator( this.getClass().getName() ) );
+  tbm.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) );
+  tbm.add( getAction( "RefreshMemory" ) ); file://$NON-NLS-1$
  }
 
  /* (non-Javadoc)
@@ -191,5 +206,13 @@
   {
    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() );
  }
 }
Index: src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java,v
retrieving revision 1.3
diff -u -r1.3 MemoryViewer.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java 17 Oct 2002 23:17:02 -0000 1.3
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java 18 Oct 2002 22:01:52 -0000
@@ -12,6 +12,8 @@
 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 @@
     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 @@
  /* (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 )
  {
  }
 
@@ -102,5 +114,10 @@
  {
   for ( int i = 0; i < fMemoryControlAreas.length; ++i )
    fMemoryControlAreas[i].setInput( (ICMemoryManager)input );
+ }

+ protected CTabFolder getTabFolder()
+ {
+  return fTabFolder;
  }
 }
Index: src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java,v
retrieving revision 1.4
diff -u -r1.4 ICDebugUIConstants.java
--- src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java 16 Sep 2002 21:32:14 -0000 1.4
+++ src/org/eclipse/cdt/debug/ui/ICDebugUIConstants.java 18 Oct 2002 22:01:52 -0000
@@ -48,4 +48,15 @@
   * Identifier for a register group in a menu (value <code>"registerGroup"</code>).
   */
  public static final String REGISTER_GROUP = "registerGroup"; file://$NON-NLS-1$
+
+ /**
+  * Identifier for an empty group preceeding a
+  * memory group in a menu (value <code>"emptyMemoryGroup"</code>).
+  */
+ public static final String EMPTY_MEMORY_GROUP = "emptyMemoryGroup"; file://$NON-NLS-1$

+ /**
+  * Identifier for a memory group in a menu (value <code>"memoryGroup"</code>).
+  */
+ public static final String MEMORY_GROUP = "memoryGroup"; file://$NON-NLS-1$
 }


Back to the top