Added the 'Evaluate' button to the Memory view.
Index:
ChangeLog
===================================================================
RCS
file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision
1.39
diff -u -r1.39 ChangeLog
--- ChangeLog 21 Nov 2002 21:20:24
-0000 1.39
+++ ChangeLog 22 Nov 2002 18:59:39 -0000
@@ -1,3 +1,7
@@
+2002-11-21 Mikhail Khodjaiants
+ Added the 'Evaluate' button to
the Memory view.
+ * MemoryControlArea.java
+
2002-11-20
Mikhail Khodjaiants
Reset the tooltips of the memory view tabs on
terminate.
* MemoryControlArea.java
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.17
diff -u -r1.17 MemoryControlArea.java
---
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 21
Nov 2002 21:20:24 -0000 1.17
+++
src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 22
Nov 2002 18:59:39 -0000
@@ -7,6 +7,7 @@
package
org.eclipse.cdt.debug.internal.ui.views.memory;
import
org.eclipse.cdt.debug.core.CDebugModel;
+import
org.eclipse.cdt.debug.core.ICExpressionEvaluator;
import
org.eclipse.cdt.debug.core.ICMemoryManager;
import
org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
import
org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants;
@@
-17,10 +18,15 @@
import org.eclipse.swt.SWT;
import
org.eclipse.swt.custom.CTabFolder;
import
org.eclipse.swt.custom.CTabItem;
-import
org.eclipse.swt.events.KeyAdapter;
-import
org.eclipse.swt.events.KeyEvent;
+import
org.eclipse.swt.events.ModifyEvent;
+import
org.eclipse.swt.events.ModifyListener;
+import
org.eclipse.swt.events.SelectionAdapter;
+import
org.eclipse.swt.events.SelectionEvent;
+import
org.eclipse.swt.events.TraverseEvent;
+import
org.eclipse.swt.events.TraverseListener;
import
org.eclipse.swt.layout.GridData;
import
org.eclipse.swt.layout.GridLayout;
+import
org.eclipse.swt.widgets.Button;
import
org.eclipse.swt.widgets.Composite;
import
org.eclipse.swt.widgets.Label;
import
org.eclipse.swt.widgets.Text;
@@ -39,6 +45,7 @@
private
ICMemoryManager fMemoryManager = null;
private Text
fAddressText;
+ private Button fEvaluateButton;
private
MemoryText fMemoryText;
private int fFormat =
ICMemoryManager.MEMORY_FORMAT_HEX;
@@ -92,7 +99,7 @@
private
Text createAddressText( Composite parent
)
{
Composite composite = new Composite(
parent, SWT.NONE );
- composite.setLayout( new GridLayout( 2,
false ) );
+ composite.setLayout( new GridLayout( 3, false )
);
composite.setLayoutData( new GridData(
GridData.FILL_HORIZONTAL ) );
// create
label
Label label = new Label( composite, SWT.RIGHT
);
@@ -102,14 +109,36 @@
// create address
text
Text text = new Text( composite, SWT.BORDER
);
text.setLayoutData( new GridData(
GridData.FILL_HORIZONTAL ) );
- text.addKeyListener( new
KeyAdapter()
-
{
- public void
keyReleased( KeyEvent e
)
-
{
- if (
e.character == SWT.CR && e.stateMask == 0
)
-
handleAddressEnter();
-
}
- }
);
+ text.addTraverseListener( new
TraverseListener()
+ {
+ public
void keyTraversed( TraverseEvent e
)
+ {
+ if
( e.detail == SWT.TRAVERSE_RETURN && e.stateMask == 0
)
+ {
+ e.doit
=
false;
+ handleAddressEnter();
+ }
+ }
+ }
);
+
+ fEvaluateButton = new Button( composite, SWT.PUSH
);
+ fEvaluateButton.setText( "Evaluate"
);
+ fEvaluateButton.setToolTipText( "Evaluate _expression_ to
address" );
+ fEvaluateButton.addSelectionListener( new
SelectionAdapter()
+ {
+ public
void widgetSelected( SelectionEvent e
)
+ {
+ evaluateAddressExpression();
+ }
+ }
);
+
+ text.addModifyListener( new
ModifyListener()
+ {
+ public
void modifyText( ModifyEvent e
)
+ {
+ handleAddressModification();
+ }
+ }
);
return text;
}
@@ -434,5
+463,69
@@
}
}
return
sb.toString();
+ }
+
+ protected void
handleAddressModification()
+ {
+ fEvaluateButton.setEnabled(
fAddressText.getText().trim().length() > 0
);
+ }
+
+ protected void
evaluateAddressExpression()
+ {
+ if ( getMemoryManager()
!= null )
+ {
+ IDebugTarget target =
(IDebugTarget)getMemoryManager().getAdapter( IDebugTarget.class
);
+ if ( target != null
)
+ {
+ ICExpressionEvaluator ee =
(ICExpressionEvaluator)target.getAdapter( ICExpressionEvaluator.class
);
+ String newExpression = convertToHexString(
evaluateExpression( ee, fAddressText.getText().trim() )
);
+ if ( newExpression != null
)
+ {
+ fAddressText.setText(
newExpression
);
+ handleAddressEnter();
+ }
+ }
+ }
+ fAddressText.forceFocus();
+ }
+
+ private
String evaluateExpression( ICExpressionEvaluator ee, String _expression_
)
+ {
+ String result = null;
+ if ( ee !=
null && ee.canEvaluate()
)
+ {
+ try
+ {
+ result
= ee.evaluateExpressionToString( _expression_
);
+ }
+ catch( DebugException e
)
+ {
+ CDebugUIPlugin.errorDialog(
"Unable to evaluate _expression_.", e.getStatus()
);
+ }
+ }
+ return
result;
+ }
+
+ private String convertToHexString(
String value )
+ {
+ String result =
null;
+ if ( value != null
)
+ {
+ if ( !value.startsWith( "0x" )
)
+ {
+ try
+ {
+ result
= "0x" + Long.toHexString( Long.parseLong( value )
);
+ }
+ catch(
NumberFormatException e
)
+ {
+ }
+ }
+ else
+ {
+ result
= value;
+ }
+ }
+ return
result;
}
}