Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Fix for PR 39101: No hilight when changing the value of register

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/ChangeLog,v
retrieving revision 1.165
diff -u -r1.165 ChangeLog
--- ChangeLog 26 Jun 2003 16:18:54 -0000 1.165
+++ ChangeLog 30 Jun 2003 02:58:10 -0000
@@ -1,3 +1,8 @@
+2003-06-29 Mikhail Khodjaiants
+ Fix for PR 39101: No hilight when changing the value of register.
+ * RegistersView.java
+ * RegistersViewer.java
+
 2003-06-26 Mikhail Khodjaiants
  New icon for shared libraries with loaded symbols.
  * icons/full/ovr16/symbols_ovr.gif: new
Index: src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java,v
retrieving revision 1.14
diff -u -r1.14 RegistersView.java
--- src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java 24 Apr 2003 19:05:52 -0000 1.14
+++ src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersView.java 30 Jun 2003 02:58:14 -0000
@@ -23,6 +23,7 @@
 import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
 import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
 import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.model.IRegister;
 import org.eclipse.debug.core.model.IStackFrame;
 import org.eclipse.debug.ui.DebugUITools;
 import org.eclipse.debug.ui.IDebugModelPresentation;
@@ -33,12 +34,17 @@
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.IColorProvider;
 import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.TreeViewer;
 import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchActionConstants;
@@ -57,6 +63,76 @@
            IDebugExceptionHandler
 {
  /**
+  * A label provider that delegates to a debug model
+  * presentation and adds coloring to registers to
+  * reflect their changed state
+  */
+ class VariablesViewLabelProvider implements ILabelProvider, IColorProvider
+ {
+  private IDebugModelPresentation fPresentation;
+
+  public VariablesViewLabelProvider( IDebugModelPresentation presentation )
+  {
+   fPresentation = presentation;
+  }
+
+  public IDebugModelPresentation getPresentation()
+  {
+   return fPresentation;
+  }
+
+  public Image getImage( Object element )
+  {
+   return fPresentation.getImage( element );
+  }
+  public String getText( Object element )
+  {
+   return fPresentation.getText( element );
+  }
+  public void addListener( ILabelProviderListener listener )
+  {
+   fPresentation.addListener( listener );
+  }
+  public void dispose()
+  {
+   fPresentation.dispose();
+  }
+  public boolean isLabelProperty( Object element, String property )
+  {
+   return fPresentation.isLabelProperty( element, property );
+  }
+  public void removeListener( ILabelProviderListener listener )
+  {
+   fPresentation.removeListener( listener );
+  }
+
+  public Color getForeground( Object element )
+  {
+   if ( element instanceof IRegister )
+   {
+    IRegister register = (IRegister)element;
+    try
+    {
+     if ( register.hasValueChanged() )
+     {
+      return CDebugUIPlugin.getPreferenceColor( ICDebugPreferenceConstants.CHANGED_REGISTER_RGB );
+     }
+    }
+    catch( DebugException e )
+    {
+     CDebugUIPlugin.log( e );
+    }
+   }
+   return null;
+  }
+
+  public Color getBackground( Object element )
+  {
+   return null;
+  }
+ }
+
+ /**
   * The model presentation used as the label provider for the tree viewer.
   */
  private IDebugModelPresentation fModelPresentation;
@@ -81,7 +157,7 @@
   // add tree viewer
   final TreeViewer vv = new RegistersViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL );
   vv.setContentProvider( createContentProvider() );
-  vv.setLabelProvider( getModelPresentation() );
+  vv.setLabelProvider( new VariablesViewLabelProvider( getModelPresentation() ) );
   vv.setUseHashlookup( true );
   setAction( SELECT_ALL_ACTION, getAction( VARIABLES_SELECT_ALL_ACTION ) );
   getViewSite().getActionBars().updateActionBars();
Index: src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersViewer.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersViewer.java,v
retrieving revision 1.4
diff -u -r1.4 RegistersViewer.java
--- src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersViewer.java 2 Oct 2002 04:59:12 -0000 1.4
+++ src/org/eclipse/cdt/debug/internal/ui/views/registers/RegistersViewer.java 30 Jun 2003 02:58:14 -0000
@@ -5,17 +5,10 @@
  */
 package org.eclipse.cdt.debug.internal.ui.views.registers;
 
-import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants;
-import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
-import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.model.IVariable;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Item;
 import org.eclipse.swt.widgets.Tree;
-import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.swt.widgets.Widget;
 
 /**
@@ -60,33 +53,10 @@
   super( tree );
  }
 
- /**
-  * Refresh the view, and then do another pass to
-  * update the foreground color for values that have changed
-  * since the last refresh. Values that have not
-  * changed are drawn with the default system foreground color.
-  * If the viewer has no selection, ensure that new items
-  * are visible.
-  *
-  * @see Viewer#refresh()
-  */
  public void refresh()
  {
-  getControl().setRedraw( false );
   super.refresh();
 
-  Item[] children = getChildren( getControl() );
-  if ( children != null )
-  {
-   Color c = CDebugUIPlugin.getPreferenceColor( ICDebugPreferenceConstants.CHANGED_REGISTER_RGB );
-   for( int i = 0; i < children.length; i++ )
-   {
-    updateColor( (TreeItem)children[i], c );
-   }
-  }
-
-  getControl().setRedraw( true );
-
   if ( getSelection().isEmpty() && getNewItem() != null )
   {
    if ( !getNewItem().isDisposed() )
@@ -97,44 +67,6 @@
    setNewItem( null );
   }
   //expandToLevel( 2 );
- }
-
- /**
-  * Updates the color of the given item as well
-  * as all of its children. If the item corresponds
-  * to a variable that has changed in value,
-  * it is rendered with the <code>CHANGED_VARIABLE_RGB</code>
-  * generated foreground color, otherwise the default system
-  * color is used.
-  *
-  * @param item tree item
-  */
- protected void updateColor( TreeItem item, Color c )
- {
-  if ( item.getData() instanceof IVariable )
-  {
-   IVariable var = (IVariable)item.getData();
-   try
-   {
-    if ( var.hasValueChanged() )
-    {
-     item.setForeground( c );
-    }
-    else
-    {
-     item.setForeground( null );
-    }
-   }
-   catch( DebugException e )
-   {
-    DebugUIPlugin.log( e );
-   }
-  }
-  TreeItem[] children = item.getItems();
-  for( int i = 0; i < children.length; i++ )
-  {
-   updateColor( children[i], c );
-  }
  }
 
  /**

Back to the top