Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Display the memory changes in different color in the memory view

Display the memory changes in different color in the memory view.

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision 1.6
diff -u -r1.6 ChangeLog
--- ChangeLog 18 Oct 2002 22:02:51 -0000 1.6
+++ ChangeLog 21 Oct 2002 03:40:37 -0000
@@ -1,3 +1,11 @@
+2002-10-20 Mikhail Khodjaiants
+ Display the memory changes in different color in the memory view.
+ * MemoryControlArea.java
+ * MemoryPresentation.java
+ * MemoryText.java
+ * MemoryViewer.java
+ * MemoryViewEventHandler.java
+
 2002-10-18 Mikhail Khodjaiants
  Implementing the memory view support:
  Images for the view's actions:
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.6
diff -u -r1.6 MemoryControlArea.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 18 Oct 2002 22:02:51 -0000 1.6
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java 21 Oct 2002 03:40:39 -0000
@@ -174,7 +174,7 @@
   refresh();
  }
  
- private void refresh()
+ protected void refresh()
  {
   fAddressText.setText( ( getPresentation() != null ) ? getPresentation().getAddressExpression() : "" );
   fMemoryText.refresh();
@@ -244,6 +244,9 @@
                        getNumberOfColumns(),
                        getPaddingChar() ) );
    getPresentation().setMemoryBlock( getMemoryBlock() );
+
+//getMemoryBlock().setFrozen( false );
+
   }
   setMemoryTextState();
  }
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.3
diff -u -r1.3 MemoryPresentation.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 18 Oct 2002 22:02:51 -0000 1.3
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryPresentation.java 21 Oct 2002 03:40:38 -0000
@@ -101,17 +101,35 @@
  
  public Point[] getAddressZones()
  {
-  return (Point[])fAddressZones.toArray( new Point[0] );
+  return (Point[])fAddressZones.toArray( new Point[fAddressZones.size()] );
  }
  
  public Point[] getChangedZones()
  {
-  return (Point[])fChangedZones.toArray( new Point[0] );
+  fChangedZones.clear();
+  Long[] changedAddresses = getChangedAddresses();
+  for ( int i = 0; i < changedAddresses.length; ++i )
+  {
+   int dataOffset = getDataItemOffsetByAddress( changedAddresses[i] );
+   if ( dataOffset != -1 )
+   {
+    fChangedZones.add( new Point( dataOffset, dataOffset + getDataItemLength() - 1 ) );
+   }
+   if ( displayASCII() )
+   {
+    int asciiOffset = getAsciiOffsetByAddress( changedAddresses[i] );
+    if ( asciiOffset != -1 )
+    {
+     fChangedZones.add( new Point( asciiOffset, asciiOffset ) );
+    }
+   }   
+  }
+  return (Point[])fChangedZones.toArray( new Point[fChangedZones.size()] );
  }
  
  public Point[] getDirtyZones()
  {
-  return (Point[])fDirtyZones.toArray( new Point[0] );
+  return (Point[])fDirtyZones.toArray( new Point[fDirtyZones.size()] );
  }
  
  public String getStartAddress()
@@ -359,6 +377,63 @@
  {
   if ( getMemoryBlock() != null )
    return getMemoryBlock().getFormat();
+  return -1;
+ }

+ private Long[] getChangedAddresses()
+ {
+  return ( getMemoryBlock() != null ) ? getMemoryBlock().getChangedAddresses() : new Long[0];
+ }

+ private int getDataItemOffsetByAddress( Long address )
+ {
+  if ( getMemoryBlock() != null )
+  {
+   IFormattedMemoryBlockRow[] rows = getMemoryBlock().getRows();
+   for ( int i = 0; i < rows.length; ++i )
+   {
+    int wordSize = getMemoryBlock().getWordSize();
+    int numberOfColumns = getMemoryBlock().getNumberOfColumns();
+    if ( address.longValue() >= rows[i].getAddress() &&
+      address.longValue() < rows[i].getAddress() + (wordSize * numberOfColumns) )
+    {
+     for ( int j = 1; j < numberOfColumns; ++j )
+     {
+      if ( address.longValue() >= rows[i].getAddress() + ((j - 1) * wordSize) &&
+        address.longValue() < rows[i].getAddress() + (j * wordSize) )
+      {
+       return (i * getRowLength()) + ((j - 1) * (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS)) + getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA;
+      }
+     }
+    }
+   }
+   
+  }
+  return -1;
+ }

+ private int getAsciiOffsetByAddress( Long address )
+ {
+  if ( getMemoryBlock() != null )
+  {
+   IFormattedMemoryBlockRow[] rows = getMemoryBlock().getRows();
+   if ( rows.length > 0 )
+   {
+    IFormattedMemoryBlockRow firstRow = rows[0];
+    IFormattedMemoryBlockRow lastRow = rows[rows.length - 1];
+    if ( address.longValue() >= firstRow.getAddress() && address.longValue() <= lastRow.getAddress() )
+    {
+     int asciiOffset = (int)(address.longValue() - firstRow.getAddress());
+     int asciiRowlength = getMemoryBlock().getWordSize() * getMemoryBlock().getNumberOfColumns();
+     int numberOfRows = asciiOffset / asciiRowlength;
+     int offsetInRow = asciiOffset % asciiRowlength;
+     return (numberOfRows * getRowLength()) +
+         getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA +
+         (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) * getMemoryBlock().getNumberOfColumns() +
+         INTERVAL_BETWEEN_DATA_AND_ASCII + offsetInRow;
+    }
+   }
+  }
   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.4
diff -u -r1.4 MemoryText.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java 18 Oct 2002 22:02:51 -0000 1.4
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryText.java 21 Oct 2002 03:40:38 -0000
@@ -99,26 +99,31 @@
   fText.setBackground( getBackgroundColor() );
   fText.setForeground( getForegroundColor() );
   fText.setText( fPresentation.getText() );
-  List list = new LinkedList();
   Point[] zones = fPresentation.getChangedZones();
   for ( int i = 0; i < zones.length; ++i )
-   list.add( new StyleRange( zones[i].x,
-           zones[i].y - zones[i].x + 1,
-           getChangedColor(),
-           getBackgroundColor() ) );
+  {
+   fText.setStyleRange( new StyleRange( zones[i].x,
+             zones[i].y - zones[i].x + 1,
+             getChangedColor(),
+             getBackgroundColor() ) );
+
+  }
   zones = fPresentation.getAddressZones();
   for ( int i = 0; i < zones.length; ++i )
-   list.add( new StyleRange( zones[i].x,
-           zones[i].y - zones[i].x + 1,
-           getAddressColor(),
-           getBackgroundColor() ) );
+  {
+   fText.setStyleRange( new StyleRange( zones[i].x,
+             zones[i].y - zones[i].x + 1,
+             getAddressColor(),
+             getBackgroundColor() ) );
+  }
   zones = fPresentation.getDirtyZones();
   for ( int i = 0; i < zones.length; ++i )
-   list.add( new StyleRange( zones[i].x,
-           zones[i].y - zones[i].x + 1,
-           getDirtyColor(),
-           getBackgroundColor() ) );
-  fText.setStyleRanges( (StyleRange[])list.toArray( new StyleRange[list.size()] ) );
+  {
+   fText.setStyleRange( new StyleRange( zones[i].x,
+             zones[i].y - zones[i].x + 1,
+             getDirtyColor(),
+             getBackgroundColor() ) );
+  }
   fText.redraw();
  }
  
Index: src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewEventHandler.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewEventHandler.java,v
retrieving revision 1.1
diff -u -r1.1 MemoryViewEventHandler.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewEventHandler.java 6 Aug 2002 19:00:46 -0000 1.1
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewEventHandler.java 21 Oct 2002 03:40:39 -0000
@@ -5,6 +5,7 @@
  */
 package org.eclipse.cdt.debug.internal.ui.views.memory;
 
+import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler;
 import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.ui.AbstractDebugView;
@@ -32,5 +33,43 @@
   */
  protected void doHandleDebugEvents( DebugEvent[] events )
  {
+  for( int i = 0; i < events.length; i++ )
+  {
+   DebugEvent event = events[i];
+   switch( event.getKind() )
+   {
+    case DebugEvent.CHANGE:
+     if ( event.getSource() instanceof IFormattedMemoryBlock && event.getDetail() == DebugEvent.CONTENT )
+     {
+      refresh( event.getSource() );
+      return;
+     }
+     break;
+   }
+  }
+ }
+
+ /**
+  * Refresh the given element in the viewer - must be called in UI thread.
+  */
+ protected void refresh( Object element )
+ {
+  if ( isAvailable() )
+  {
+   getView().showViewer();
+   ((MemoryViewer)getViewer()).refresh( element );
+  }
+ }
+
+ /**
+  * Refresh the viewer - must be called in UI thread.
+  */
+ public void refresh()
+ {
+  if ( isAvailable() )
+  {
+   getView().showViewer();
+   getViewer().refresh();
+  }
  }
 }
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.4
diff -u -r1.4 MemoryViewer.java
--- src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java 18 Oct 2002 22:02:51 -0000 1.4
+++ src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java 21 Oct 2002 03:40:38 -0000
@@ -6,6 +6,7 @@
 package org.eclipse.cdt.debug.internal.ui.views.memory;
 
 import org.eclipse.cdt.debug.core.ICMemoryManager;
+import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.ContentViewer;
 import org.eclipse.jface.viewers.ISelection;
@@ -92,7 +93,23 @@
   * @see org.eclipse.jface.viewers.Viewer#refresh()
   */
  public void refresh()
+ {
+  CTabItem[] tabItems = fTabFolder.getItems();
+  for ( int i = 0; i < tabItems.length; ++i )
+   if ( tabItems[i].getControl() instanceof MemoryControlArea )
+    ((MemoryControlArea)tabItems[i].getControl()).refresh();
+ }
+
+ public void refresh( Object element )
  {  
+  if ( element instanceof IFormattedMemoryBlock )
+  {
+   MemoryControlArea mca = getMemoryControlArea( (IFormattedMemoryBlock)element );
+   if ( mca != null )
+   {
+    mca.refresh();
+   }
+  }
  }
 
  /* (non-Javadoc)
@@ -119,5 +136,26 @@
  protected CTabFolder getTabFolder()
  {
   return fTabFolder;
+ }

+ private MemoryControlArea getMemoryControlArea( int index )
+ {
+  CTabItem item = fTabFolder.getItem( index );
+  return ( item != null ) ? (MemoryControlArea)item.getControl() : null;
+ }

+ private MemoryControlArea getMemoryControlArea( IFormattedMemoryBlock block )
+ {
+  CTabItem[] tabItems = fTabFolder.getItems();
+  for ( int i = 0; i < tabItems.length; ++i )
+  {
+   if ( tabItems[i].getControl() instanceof MemoryControlArea &&
+     block != null &&
+     block.equals( ((MemoryControlArea)tabItems[i].getControl()).getMemoryBlock() ) )
+    {
+     return (MemoryControlArea)tabItems[i].getControl();
+    }
+  }
+  return null;
  }
 }


Back to the top