Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Added the 'Evaluate' button to the Memory view

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


Back to the top