Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Implementation of the "Format/Decimal" and "Format/Unsigned Decimal" actions

Implementation of the "Format/Decimal" and "Format/Unsigned Decimal" actions of the Memory view.

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision 1.26
diff -u -r1.26 ChangeLog
--- ChangeLog 1 Nov 2002 23:25:06 -0000 1.26
+++ ChangeLog 4 Nov 2002 01:46:07 -0000
@@ -1,3 +1,12 @@
+2002-11-03 Mikhail Khodjaiants
+ Implementation of the "Format/Decimal" and "Format/Unsigned Decimal" actions of the Memory view.
+ * MemoryFormataction.java
+ * MemorySizeAction.java
+ * MemoryNumberOfColumnsAction.java
+ * MemoryPresentation.java
+ * MemoryViewer.java
+ * MemoryView.java
+
 2002-11-01 Mikhail Khodjaiants
  Implementing decimal format support of the Memory view.
  * MemoryPresentation.java
Index: src/org/eclipse/cdt/debug/internal/ui/actions/MemoryFormatAction.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/internal/ui/actions/MemoryFormatAction.java
diff -N src/org/eclipse/cdt/debug/internal/ui/actions/MemoryFormatAction.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/internal/ui/actions/MemoryFormatAction.java 4 Nov 2002 01:46:09 -0000
@@ -0,0 +1,89 @@
+/*
+ *(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.cdt.debug.ui.CDebugUIPlugin;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.texteditor.IUpdate;
+
+/**
+ *
+ * Enter type comment.
+ *
+ * @since Nov 3, 2002
+ */
+public class MemoryFormatAction extends Action implements IUpdate
+{
+ private MemoryActionSelectionGroup fGroup;
+ private MemoryViewer fMemoryViewer;
+ private int fFormat = 0;
+
+ /**
+  * Constructor for MemoryFormatAction.
+  */
+ public MemoryFormatAction( MemoryActionSelectionGroup group,
+          MemoryViewer viewer,
+          int format )
+ {
+  super( getLabel( format ) );
+  fGroup = group;
+  fMemoryViewer = viewer;
+  fFormat = format;
+  setChecked( false );
+ }
+
+ /**
+  * @see org.eclipse.ui.texteditor.IUpdate#update()
+  */
+ public void update()
+ {
+  setEnabled( fMemoryViewer.canChangeFormat( fFormat ) );
+  setChecked( fMemoryViewer.getCurrentFormat() == fFormat );
+ }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.jface.action.IAction#run()
+  */
+ public void run()
+ {
+  try
+  {
+   fMemoryViewer.setFormat( fFormat );
+   fGroup.setCurrentSelection( this );
+  }
+  catch( DebugException e )
+  {
+   CDebugUIPlugin.errorDialog( "Unable to change format.", e.getStatus() );
+   setChecked( false );
+  }
+ }
+
+ private static String getLabel( int id )
+ {
+  String label = "";
+  switch( id )
+  {
+   case( IFormattedMemoryBlock.MEMORY_FORMAT_HEX ):
+    label = "Hexadecimal";
+    break;
+   case( IFormattedMemoryBlock.MEMORY_FORMAT_SIGNED_DECIMAL ):
+    label = "Signed Decimal";
+    break;
+   case( IFormattedMemoryBlock.MEMORY_FORMAT_UNSIGNED_DECIMAL ):
+    label = "Unsigned Decimal";
+    break;
+  }
+  return label;
+ }

+ public String getActionId()
+ {
+  return "MemoryFormat" + fFormat;
+ }
+}
Index: src/org/eclipse/cdt/debug/internal/ui/actions/MemoryNumberOfColumnAction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryNumberOfColumnAction.java,v
retrieving revision 1.1
diff -u -r1.1 MemoryNumberOfColumnAction.java
--- src/org/eclipse/cdt/debug/internal/ui/actions/MemoryNumberOfColumnAction.java 25 Oct 2002 17:13:57 -0000 1.1
+++ src/org/eclipse/cdt/debug/internal/ui/actions/MemoryNumberOfColumnAction.java 4 Nov 2002 01:46:09 -0000
@@ -5,10 +5,8 @@
  */
 package org.eclipse.cdt.debug.internal.ui.actions;
 
-import org.eclipse.cdt.debug.internal.ui.actions.MemoryActionSelectionGroup;
 import org.eclipse.cdt.debug.internal.ui.views.memory.MemoryViewer;
 import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.jface.action.Action;
 import org.eclipse.ui.texteditor.IUpdate;
@@ -64,7 +62,7 @@
   }
   catch( DebugException e )
   {
-   CDebugUIPlugin.errorDialog( e.getMessage(), (IStatus)null );
+   CDebugUIPlugin.errorDialog( "Unable to change the column  number.", e.getStatus() );
    setChecked( false );
   }
  }
Index: src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java,v
retrieving revision 1.4
diff -u -r1.4 MemorySizeAction.java
--- src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java 25 Oct 2002 16:11:51 -0000 1.4
+++ src/org/eclipse/cdt/debug/internal/ui/actions/MemorySizeAction.java 4 Nov 2002 01:46:09 -0000
@@ -8,7 +8,6 @@
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.cdt.debug.internal.ui.views.memory.MemoryViewer;
 import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.debug.core.DebugException;
 import org.eclipse.jface.action.Action;
 import org.eclipse.ui.texteditor.IUpdate;
@@ -80,7 +79,7 @@
   }
   catch( DebugException e )
   {
-   CDebugUIPlugin.errorDialog( e.getMessage(), (IStatus)null );
+   CDebugUIPlugin.errorDialog( "Unable to change memory unit size.", e.getStatus() );
    setChecked( false );
   }
  }
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.10
diff -u -r1.10 MemoryPresentation.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 1 Nov 2002 23:25:06 -0000 1.10
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 4 Nov 2002 01:46:09 -0000
@@ -525,6 +525,8 @@
  {
   switch( wordSize )
   {
+   case IFormattedMemoryBlock.MEMORY_SIZE_BYTE:
+    return ( signed ) ? 4 : 3;
    case IFormattedMemoryBlock.MEMORY_SIZE_HALF_WORD:
     return ( signed ) ? 6 : 5;
    case IFormattedMemoryBlock.MEMORY_SIZE_WORD:
@@ -545,13 +547,17 @@
  private String convertToDecimal( int wordSize, String item, boolean signed )
  {
   String result = "";
+  boolean le = getMemoryBlock().isLittleEndian();
   switch( wordSize )
   {
+   case IFormattedMemoryBlock.MEMORY_SIZE_BYTE:
+    result = Long.toString( ( signed ) ? CDebugUtils.toByte( item.toCharArray(), le ) : CDebugUtils.toUnsignedByte( item.toCharArray(), le ) );
+    break;
    case IFormattedMemoryBlock.MEMORY_SIZE_HALF_WORD:
-    result = Long.toString( CDebugUtils.toShort( item.toCharArray(), signed ) );
+    result = Long.toString( ( signed ) ? CDebugUtils.toShort( item.toCharArray(), le ) : CDebugUtils.toUnsignedShort( item.toCharArray(), le ) );
     break;
    case IFormattedMemoryBlock.MEMORY_SIZE_WORD:
-    result = Long.toString( CDebugUtils.toInt( item.toCharArray(), signed ) );
+    result = Long.toString( ( signed ) ? CDebugUtils.toInt( item.toCharArray(), le ) : CDebugUtils.toUnsignedInt( item.toCharArray(), le ) );
     break;
   }
   return CDebugUtils.prependString( result, getDataItemLength(), ' ' );
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.11
diff -u -r1.11 MemoryView.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java 30 Oct 2002 22:01:01 -0000 1.11
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java 4 Nov 2002 01:46:08 -0000
@@ -11,6 +11,7 @@
 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.MemoryFormatAction;
 import org.eclipse.cdt.debug.internal.ui.actions.MemoryNumberOfColumnAction;
 import org.eclipse.cdt.debug.internal.ui.actions.MemorySizeAction;
 import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction;
@@ -57,6 +58,7 @@
            IDebugExceptionHandler
 {
  private IDebugModelPresentation fModelPresentation = null;
+ private MemoryActionSelectionGroup fMemoryFormatGroup = null;
  private MemoryActionSelectionGroup fMemorySizeGroup = null;
  private MemoryActionSelectionGroup fMemoryNumberOfColumnsGroup = null;
 
@@ -108,6 +110,9 @@
   setAction( "ShowAscii", action ); //$NON-NLS-1$
   add( (ShowAsciiAction)action );
 
+  fMemoryFormatGroup = new MemoryActionSelectionGroup();
+  createFormatActionGroup( fMemoryFormatGroup );
+
   fMemorySizeGroup = new MemoryActionSelectionGroup();
   createSizeActionGroup( fMemorySizeGroup );
 
@@ -147,7 +152,17 @@
   menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "ClearMemory" ) ); //$NON-NLS-1$
   menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "SaveMemoryChanges" ) ); //$NON-NLS-1$
 
-  MenuManager subMenu = new MenuManager( "Memory Unit Size         " );
+  MenuManager subMenu = new MenuManager( "Format" );
+  {
+   IAction[] actions = fMemoryFormatGroup.getActions();
+   for ( int i = 0; i < actions.length; ++i )
+   {
+    subMenu.add( actions[i] );
+   }
+  }
+  menu.appendToGroup( ICDebugUIConstants.FORMAT_GROUP, subMenu );
+
+  subMenu = new MenuManager( "Memory Unit Size         " );
   {
    IAction[] actions = fMemorySizeGroup.getActions();
    for ( int i = 0; i < actions.length; ++i )
@@ -220,6 +235,8 @@
   */
  public void dispose()
  {
+  removeActionGroup( fMemoryFormatGroup );
+  fMemoryFormatGroup.dispose();
   removeActionGroup( fMemorySizeGroup );
   fMemorySizeGroup.dispose();
   removeActionGroup( fMemoryNumberOfColumnsGroup );
@@ -309,6 +326,21 @@
   for ( int i = 0; i < items.length; ++i )
   {
    super.createContextMenu( ((MemoryControlArea)items[i].getControl()).getMemoryText().getControl() );
+  }
+ }

+ private void createFormatActionGroup( MemoryActionSelectionGroup group )
+ {
+  int[] formats = new int[] { IFormattedMemoryBlock.MEMORY_FORMAT_HEX,
+         IFormattedMemoryBlock.MEMORY_FORMAT_SIGNED_DECIMAL,
+         IFormattedMemoryBlock.MEMORY_FORMAT_UNSIGNED_DECIMAL };
+  for ( int i = 0; i < formats.length; ++i )
+  {
+   MemoryFormatAction action = "" MemoryFormatAction( group, (MemoryViewer)getViewer(), formats[i] );
+   action.setEnabled( false );
+   setAction( action.getActionId(), action ); //$NON-NLS-1$
+   add( action );
+   group.addAction( action );
   }
  }
  
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.15
diff -u -r1.15 MemoryViewer.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java 30 Oct 2002 23:39:31 -0000 1.15
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java 4 Nov 2002 01:46:07 -0000
@@ -170,6 +170,12 @@
   return null;
  }
  
+ public boolean canChangeFormat( int format )
+ {
+  IFormattedMemoryBlock block = ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock();
+  return ( block != null && block.canChangeFormat( format ) );
+ }

  public boolean canUpdate()
  {
   return ( ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock() != null );
@@ -224,6 +230,22 @@
  public boolean canShowAscii()
  {
   return ((MemoryControlArea)fTabFolder.getSelection().getControl()).getPresentation().canDisplayAscii();
+ }

+ public int getCurrentFormat()
+ {
+  IFormattedMemoryBlock block = ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock();
+  return ( block != null ) ? block.getFormat() : 0;
+ }

+ public void setFormat( int format ) throws DebugException
+ {
+  IFormattedMemoryBlock block = ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock();
+  if ( block != null )
+  {
+   block.reformat( format, block.getWordSize(), block.getNumberOfRows(), block.getNumberOfColumns() );
+   ((MemoryControlArea)fTabFolder.getSelection().getControl()).refresh();
+  }
  }
  
  public int getCurrentWordSize()


Back to the top