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()