1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 18:56:02 +02:00

Implementation of the "Auto-Refresh" and "Refresh" actions for the memory view.

This commit is contained in:
Mikhail Khodjaiants 2002-10-21 20:59:13 +00:00
parent e3b2ddf78d
commit 8cb3a11b6a
8 changed files with 132 additions and 10 deletions

View file

@ -1,3 +1,13 @@
2002-10-21 Mikhail Khodjaiants
Implementation of the "Auto-Refresh" and "Refresh" actions for the memory view.
* AutoRefreshMemoryAction.java
* RefreshMemoryAction.java
* ICDebugHelpContextIds.java
* MemoryControlArea.java
* MemoryView.java
* MemoryViewer.java
* MemoryViewEventHandler.java
2002-10-20 Mikhail Khodjaiants 2002-10-20 Mikhail Khodjaiants
Display the memory changes in different color in the memory view. Display the memory changes in different color in the memory view.
* MemoryControlArea.java * MemoryControlArea.java

View file

@ -26,6 +26,7 @@ public interface ICDebugHelpContextIds
public static final String CHANGE_REGISTER_VALUE_ACTION = PREFIX + "change_register_value_action_context"; //$NON-NLS-1$ public static final String CHANGE_REGISTER_VALUE_ACTION = PREFIX + "change_register_value_action_context"; //$NON-NLS-1$
public static final String SHOW_TYPES_ACTION = PREFIX + "show_types_action_context"; //$NON-NLS-1$ public static final String SHOW_TYPES_ACTION = PREFIX + "show_types_action_context"; //$NON-NLS-1$
public static final String REFRESH_MEMORY_ACTION = PREFIX + "refresh_memory_action_context"; //$NON-NLS-1$ public static final String REFRESH_MEMORY_ACTION = PREFIX + "refresh_memory_action_context"; //$NON-NLS-1$
public static final String AUTO_REFRESH_MEMORY_ACTION = PREFIX + "auto_refresh_memory_action_context"; //$NON-NLS-1$
// Views // Views
public static final String REGISTERS_VIEW = PREFIX + "registers_view_context"; //$NON-NLS-1$ public static final String REGISTERS_VIEW = PREFIX + "registers_view_context"; //$NON-NLS-1$

View file

@ -0,0 +1,55 @@
/*
*(c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*
*/
package org.eclipse.cdt.debug.internal.ui.actions;
import org.eclipse.cdt.debug.internal.ui.CDebugImages;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.internal.ui.views.memory.MemoryViewer;
import org.eclipse.ui.actions.SelectionProviderAction;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.ui.texteditor.IUpdate;
/**
* Enter type comment.
*
* @since: Oct 21, 2002
*/
public class AutoRefreshMemoryAction extends SelectionProviderAction implements IUpdate
{
private MemoryViewer fMemoryViewer;
/**
* Constructor for AutoRefreshMemoryAction.
* @param provider
* @param text
*/
public AutoRefreshMemoryAction( MemoryViewer viewer )
{
super( viewer, "Auto-Refresh" );
fMemoryViewer = viewer;
CDebugImages.setLocalImageDescriptors( this, CDebugImages.IMG_LCL_AUTO_REFRESH_MEMORY );
setDescription( "Automatically Refresh Memory Block" );
setToolTipText( "Auto-Refresh" );
WorkbenchHelp.setHelp( this, ICDebugHelpContextIds.AUTO_REFRESH_MEMORY_ACTION );
}
/* (non-Javadoc)
* @see org.eclipse.ui.texteditor.IUpdate#update()
*/
public void update()
{
setEnabled( fMemoryViewer.canUpdate() );
setChecked( !fMemoryViewer.isFrozen() );
}
/* (non-Javadoc)
* @see org.eclipse.jface.action.IAction#run()
*/
public void run()
{
fMemoryViewer.setFrozen( !isChecked() );
}
}

View file

@ -11,14 +11,17 @@ import org.eclipse.cdt.debug.internal.ui.views.memory.MemoryViewer;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.actions.SelectionProviderAction; import org.eclipse.ui.actions.SelectionProviderAction;
import org.eclipse.ui.help.WorkbenchHelp; import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.ui.texteditor.IUpdate;
/** /**
* Enter type comment. * Enter type comment.
* *
* @since: Oct 18, 2002 * @since: Oct 18, 2002
*/ */
public class RefreshMemoryAction extends SelectionProviderAction public class RefreshMemoryAction extends SelectionProviderAction implements IUpdate
{ {
private MemoryViewer fMemoryViewer;
/** /**
* Constructor for RefreshMemoryAction. * Constructor for RefreshMemoryAction.
* @param provider * @param provider
@ -26,8 +29,11 @@ public class RefreshMemoryAction extends SelectionProviderAction
*/ */
public RefreshMemoryAction( MemoryViewer viewer ) public RefreshMemoryAction( MemoryViewer viewer )
{ {
super( viewer, "Refresh Memory Block" ); super( viewer, "Refresh" );
fMemoryViewer = viewer;
CDebugImages.setLocalImageDescriptors( this, CDebugImages.IMG_LCL_REFRESH_MEMORY ); CDebugImages.setLocalImageDescriptors( this, CDebugImages.IMG_LCL_REFRESH_MEMORY );
setDescription( "Refresh Memory Block" );
setToolTipText( "Refresh" );
WorkbenchHelp.setHelp( this, ICDebugHelpContextIds.REFRESH_MEMORY_ACTION ); WorkbenchHelp.setHelp( this, ICDebugHelpContextIds.REFRESH_MEMORY_ACTION );
} }
@ -38,4 +44,12 @@ public class RefreshMemoryAction extends SelectionProviderAction
{ {
super.selectionChanged( selection ); super.selectionChanged( selection );
} }
/* (non-Javadoc)
* @see org.eclipse.ui.texteditor.IUpdate#update()
*/
public void update()
{
setEnabled( fMemoryViewer.canUpdate() );
}
} }

View file

@ -31,6 +31,7 @@ import org.eclipse.swt.widgets.Text;
*/ */
public class MemoryControlArea extends Composite public class MemoryControlArea extends Composite
{ {
private MemoryView fMemoryView;
private MemoryPresentation fPresentation; private MemoryPresentation fPresentation;
private int fIndex = 0; private int fIndex = 0;
private ICMemoryManager fMemoryManager = null; private ICMemoryManager fMemoryManager = null;
@ -49,9 +50,10 @@ public class MemoryControlArea extends Composite
* @param parent * @param parent
* @param style * @param style
*/ */
public MemoryControlArea( Composite parent, int style, int index ) public MemoryControlArea( Composite parent, int style, int index, MemoryView view )
{ {
super( parent, style ); super( parent, style );
fMemoryView = view;
GridLayout layout = new GridLayout(); GridLayout layout = new GridLayout();
layout.marginHeight = 0; layout.marginHeight = 0;
layout.marginWidth = 0; layout.marginWidth = 0;
@ -130,6 +132,7 @@ public class MemoryControlArea extends Composite
CDebugUIPlugin.errorDialog( "Unable to get memory block.", e.getStatus() ); CDebugUIPlugin.errorDialog( "Unable to get memory block.", e.getStatus() );
} }
refresh(); refresh();
fMemoryView.updateObjects();
} }
} }
@ -244,9 +247,6 @@ public class MemoryControlArea extends Composite
getNumberOfColumns(), getNumberOfColumns(),
getPaddingChar() ) ); getPaddingChar() ) );
getPresentation().setMemoryBlock( getMemoryBlock() ); getPresentation().setMemoryBlock( getMemoryBlock() );
//getMemoryBlock().setFrozen( false );
} }
setMemoryTextState(); setMemoryTextState();
} }

View file

@ -7,6 +7,7 @@ package org.eclipse.cdt.debug.internal.ui.views.memory;
import org.eclipse.cdt.debug.core.ICMemoryManager; import org.eclipse.cdt.debug.core.ICMemoryManager;
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
import org.eclipse.cdt.debug.internal.ui.actions.AutoRefreshMemoryAction;
import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction; import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction;
import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler; import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler;
import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandlerView; import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandlerView;
@ -27,6 +28,7 @@ import org.eclipse.jface.viewers.IContentProvider;
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.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISelectionListener;
@ -53,7 +55,7 @@ public class MemoryView extends AbstractDebugEventHandlerView
protected Viewer createViewer( Composite parent ) protected Viewer createViewer( Composite parent )
{ {
CDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener( this ); CDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener( this );
final MemoryViewer viewer = new MemoryViewer( parent ); final MemoryViewer viewer = new MemoryViewer( parent, this );
viewer.setContentProvider( createContentProvider() ); viewer.setContentProvider( createContentProvider() );
viewer.setLabelProvider( getModelPresentation() ); viewer.setLabelProvider( getModelPresentation() );
@ -71,6 +73,12 @@ public class MemoryView extends AbstractDebugEventHandlerView
IAction action = new RefreshMemoryAction( (MemoryViewer)getViewer() ); IAction action = new RefreshMemoryAction( (MemoryViewer)getViewer() );
action.setEnabled( false ); action.setEnabled( false );
setAction( "RefreshMemory", action ); //$NON-NLS-1$ setAction( "RefreshMemory", action ); //$NON-NLS-1$
add( (RefreshMemoryAction)action );
action = new AutoRefreshMemoryAction( (MemoryViewer)getViewer() );
action.setChecked( false );
setAction( "AutoRefreshMemory", action ); //$NON-NLS-1$
add( (AutoRefreshMemoryAction)action );
// set initial content here, as viewer has to be set // set initial content here, as viewer has to be set
setInitialContent(); setInitialContent();
@ -91,6 +99,7 @@ public class MemoryView extends AbstractDebugEventHandlerView
{ {
menu.add( new Separator( ICDebugUIConstants.EMPTY_MEMORY_GROUP ) ); menu.add( new Separator( ICDebugUIConstants.EMPTY_MEMORY_GROUP ) );
menu.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) ); menu.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) );
menu.add( getAction( "AutoRefreshMemory" ) ); //$NON-NLS-1$
menu.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$ menu.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) ); menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
@ -103,6 +112,7 @@ public class MemoryView extends AbstractDebugEventHandlerView
{ {
tbm.add( new Separator( this.getClass().getName() ) ); tbm.add( new Separator( this.getClass().getName() ) );
tbm.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) ); tbm.add( new Separator( ICDebugUIConstants.MEMORY_GROUP ) );
tbm.add( getAction( "AutoRefreshMemory" ) ); //$NON-NLS-1$
tbm.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$ tbm.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$
} }
@ -140,6 +150,8 @@ public class MemoryView extends AbstractDebugEventHandlerView
*/ */
public void dispose() public void dispose()
{ {
remove( (RefreshMemoryAction)getAction( "RefreshMemory" ) );
remove( (AutoRefreshMemoryAction)getAction( "AutoRefreshMemory" ) );
getSite().getPage().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); getSite().getPage().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this );
CDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this ); CDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this );
super.dispose(); super.dispose();
@ -164,6 +176,7 @@ public class MemoryView extends AbstractDebugEventHandlerView
} }
showViewer(); showViewer();
getViewer().setInput( mm ); getViewer().setInput( mm );
updateObjects();
} }
private IContentProvider createContentProvider() private IContentProvider createContentProvider()
@ -213,6 +226,10 @@ public class MemoryView extends AbstractDebugEventHandlerView
*/ */
protected void createContextMenu( Control menuControl ) protected void createContextMenu( Control menuControl )
{ {
super.createContextMenu( ((MemoryControlArea)((MemoryViewer)getViewer()).getTabFolder().getSelection().getControl()).getMemoryText().getControl() ); CTabItem[] items = ((MemoryViewer)getViewer()).getTabFolder().getItems();
for ( int i = 0; i < items.length; ++i )
{
super.createContextMenu( ((MemoryControlArea)items[i].getControl()).getMemoryText().getControl() );
}
} }
} }

View file

@ -42,6 +42,7 @@ public class MemoryViewEventHandler extends AbstractDebugEventHandler
if ( event.getSource() instanceof IFormattedMemoryBlock && event.getDetail() == DebugEvent.CONTENT ) if ( event.getSource() instanceof IFormattedMemoryBlock && event.getDetail() == DebugEvent.CONTENT )
{ {
refresh( event.getSource() ); refresh( event.getSource() );
getView().updateObjects();
return; return;
} }
break; break;

View file

@ -30,6 +30,7 @@ public class MemoryViewer extends ContentViewer
{ {
static final private int NUMBER_OF_TABS = 4; static final private int NUMBER_OF_TABS = 4;
protected MemoryView fView = null;
protected Composite fParent = null; protected Composite fParent = null;
protected CTabFolder fTabFolder = null; protected CTabFolder fTabFolder = null;
private Composite fControl = null; private Composite fControl = null;
@ -38,10 +39,11 @@ public class MemoryViewer extends ContentViewer
/** /**
* Constructor for MemoryViewer. * Constructor for MemoryViewer.
*/ */
public MemoryViewer( Composite parent ) public MemoryViewer( Composite parent, MemoryView view )
{ {
super(); super();
fParent = parent; fParent = parent;
fView = view;
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -63,17 +65,19 @@ public class MemoryViewer extends ContentViewer
{ {
CTabItem tabItem = new CTabItem( fTabFolder, SWT.NONE ); CTabItem tabItem = new CTabItem( fTabFolder, SWT.NONE );
tabItem.setText( "Memory " + (i + 1) ); tabItem.setText( "Memory " + (i + 1) );
fMemoryControlAreas[i] = new MemoryControlArea( fTabFolder, SWT.NONE, i ); fMemoryControlAreas[i] = new MemoryControlArea( fTabFolder, SWT.NONE, i, fView );
tabItem.setControl( fMemoryControlAreas[i] ); tabItem.setControl( fMemoryControlAreas[i] );
} }
fTabFolder.addSelectionListener( new SelectionListener() fTabFolder.addSelectionListener( new SelectionListener()
{ {
public void widgetSelected( SelectionEvent e ) public void widgetSelected( SelectionEvent e )
{ {
fView.updateObjects();
} }
public void widgetDefaultSelected( SelectionEvent e ) public void widgetDefaultSelected( SelectionEvent e )
{ {
fView.updateObjects();
} }
} ); } );
fTabFolder.setSelection( 0 ); fTabFolder.setSelection( 0 );
@ -158,4 +162,24 @@ public class MemoryViewer extends ContentViewer
} }
return null; return null;
} }
public boolean canUpdate()
{
return ( ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock() != null );
}
public boolean isFrozen()
{
IFormattedMemoryBlock block = ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock();
return ( block != null ) ? block.isFrozen() : true;
}
public void setFrozen( boolean frozen )
{
IFormattedMemoryBlock block = ((MemoryControlArea)fTabFolder.getSelection().getControl()).getMemoryBlock();
if ( block != null )
{
block.setFrozen( frozen );
}
}
} }