mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for PR 39101: No hilight when changing the value of register.
This commit is contained in:
parent
bc44d5b65f
commit
269cca164e
3 changed files with 82 additions and 69 deletions
|
@ -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
|
2003-06-26 Mikhail Khodjaiants
|
||||||
New icon for shared libraries with loaded symbols.
|
New icon for shared libraries with loaded symbols.
|
||||||
* icons/full/ovr16/symbols_ovr.gif: new
|
* icons/full/ovr16/symbols_ovr.gif: new
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.eclipse.cdt.debug.internal.ui.views.ViewerState;
|
||||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||||
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
|
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
|
||||||
import org.eclipse.debug.core.DebugException;
|
import org.eclipse.debug.core.DebugException;
|
||||||
|
import org.eclipse.debug.core.model.IRegister;
|
||||||
import org.eclipse.debug.core.model.IStackFrame;
|
import org.eclipse.debug.core.model.IStackFrame;
|
||||||
import org.eclipse.debug.ui.DebugUITools;
|
import org.eclipse.debug.ui.DebugUITools;
|
||||||
import org.eclipse.debug.ui.IDebugModelPresentation;
|
import org.eclipse.debug.ui.IDebugModelPresentation;
|
||||||
|
@ -33,12 +34,17 @@ import org.eclipse.jface.action.IToolBarManager;
|
||||||
import org.eclipse.jface.action.Separator;
|
import org.eclipse.jface.action.Separator;
|
||||||
import org.eclipse.jface.util.IPropertyChangeListener;
|
import org.eclipse.jface.util.IPropertyChangeListener;
|
||||||
import org.eclipse.jface.util.PropertyChangeEvent;
|
import org.eclipse.jface.util.PropertyChangeEvent;
|
||||||
|
import org.eclipse.jface.viewers.IColorProvider;
|
||||||
import org.eclipse.jface.viewers.IContentProvider;
|
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.ISelection;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.jface.viewers.TreeViewer;
|
import org.eclipse.jface.viewers.TreeViewer;
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
import org.eclipse.swt.SWT;
|
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.swt.widgets.Composite;
|
||||||
import org.eclipse.ui.ISelectionListener;
|
import org.eclipse.ui.ISelectionListener;
|
||||||
import org.eclipse.ui.IWorkbenchActionConstants;
|
import org.eclipse.ui.IWorkbenchActionConstants;
|
||||||
|
@ -56,6 +62,76 @@ public class RegistersView extends AbstractDebugEventHandlerView
|
||||||
IPropertyChangeListener,
|
IPropertyChangeListener,
|
||||||
IDebugExceptionHandler
|
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.
|
* The model presentation used as the label provider for the tree viewer.
|
||||||
*/
|
*/
|
||||||
|
@ -81,7 +157,7 @@ public class RegistersView extends AbstractDebugEventHandlerView
|
||||||
// add tree viewer
|
// add tree viewer
|
||||||
final TreeViewer vv = new RegistersViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL );
|
final TreeViewer vv = new RegistersViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL );
|
||||||
vv.setContentProvider( createContentProvider() );
|
vv.setContentProvider( createContentProvider() );
|
||||||
vv.setLabelProvider( getModelPresentation() );
|
vv.setLabelProvider( new VariablesViewLabelProvider( getModelPresentation() ) );
|
||||||
vv.setUseHashlookup( true );
|
vv.setUseHashlookup( true );
|
||||||
setAction( SELECT_ALL_ACTION, getAction( VARIABLES_SELECT_ALL_ACTION ) );
|
setAction( SELECT_ALL_ACTION, getAction( VARIABLES_SELECT_ALL_ACTION ) );
|
||||||
getViewSite().getActionBars().updateActionBars();
|
getViewSite().getActionBars().updateActionBars();
|
||||||
|
|
|
@ -5,17 +5,10 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.debug.internal.ui.views.registers;
|
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.jface.viewers.TreeViewer;
|
||||||
import org.eclipse.swt.graphics.Color;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Item;
|
import org.eclipse.swt.widgets.Item;
|
||||||
import org.eclipse.swt.widgets.Tree;
|
import org.eclipse.swt.widgets.Tree;
|
||||||
import org.eclipse.swt.widgets.TreeItem;
|
|
||||||
import org.eclipse.swt.widgets.Widget;
|
import org.eclipse.swt.widgets.Widget;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -60,33 +53,10 @@ public class RegistersViewer extends TreeViewer
|
||||||
super( tree );
|
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()
|
public void refresh()
|
||||||
{
|
{
|
||||||
getControl().setRedraw( false );
|
|
||||||
super.refresh();
|
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 ( getSelection().isEmpty() && getNewItem() != null )
|
||||||
{
|
{
|
||||||
if ( !getNewItem().isDisposed() )
|
if ( !getNewItem().isDisposed() )
|
||||||
|
@ -99,44 +69,6 @@ public class RegistersViewer extends TreeViewer
|
||||||
//expandToLevel( 2 );
|
//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 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see AbstractTreeViewer#newItem(Widget, int, int)
|
* @see AbstractTreeViewer#newItem(Widget, int, int)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue