mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Live editing of the memory view.
This commit is contained in:
parent
edb4e2ef4e
commit
220d22f82b
7 changed files with 91 additions and 196 deletions
|
@ -1,3 +1,12 @@
|
|||
2002-11-28 Mikhail Khodjaiants
|
||||
Live editing of the memory view.
|
||||
* SaveMemoryChangesAction.java - removed
|
||||
* MemoryPresentation.java
|
||||
* MemoryControlArea.java
|
||||
* MemoryText.java
|
||||
* MemoryViewer.java
|
||||
* MemoryView.java
|
||||
|
||||
2002-11-27 Mikhail Khodjaiants
|
||||
Render debug target as suspended if no reason is specified.
|
||||
* CDTDebugModelPresentation.java
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
/*
|
||||
*(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 30, 2002
|
||||
*/
|
||||
public class SaveMemoryChangesAction extends SelectionProviderAction implements IUpdate
|
||||
{
|
||||
private MemoryViewer fMemoryViewer;
|
||||
|
||||
/**
|
||||
* Constructor for SaveMemoryChangesAction.
|
||||
* @param provider
|
||||
* @param text
|
||||
*/
|
||||
public SaveMemoryChangesAction( MemoryViewer viewer )
|
||||
{
|
||||
super( viewer, "Save Changes" );
|
||||
fMemoryViewer = viewer;
|
||||
CDebugImages.setLocalImageDescriptors( this, CDebugImages.IMG_LCL_MEMORY_SAVE );
|
||||
setDescription( "Save Changes" );
|
||||
setToolTipText( "Save Changes" );
|
||||
WorkbenchHelp.setHelp( this, ICDebugHelpContextIds.MEMORY_SAVE_ACTION );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.ui.texteditor.IUpdate#update()
|
||||
*/
|
||||
public void update()
|
||||
{
|
||||
setEnabled( fMemoryViewer.canSave() );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.jface.action.IAction#run()
|
||||
*/
|
||||
public void run()
|
||||
{
|
||||
fMemoryViewer.saveChanges();
|
||||
}
|
||||
}
|
|
@ -424,27 +424,7 @@ public class MemoryControlArea extends Composite
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void saveChanges()
|
||||
{
|
||||
if ( getMemoryBlock() != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
getMemoryBlock().saveChanges();
|
||||
String title = getTitle();
|
||||
if ( title.charAt( 0 ) == '*' )
|
||||
{
|
||||
setTitle( title.substring( 1 ) );
|
||||
}
|
||||
}
|
||||
catch( DebugException e )
|
||||
{
|
||||
CDebugUIPlugin.errorDialog( "Unable to save memory changes.", e.getStatus() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void updateToolTipText()
|
||||
{
|
||||
setTabItemToolTipText( fAddressText.getText().trim() );
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
|
||||
package org.eclipse.cdt.debug.internal.ui.views.memory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
@ -18,6 +17,7 @@ import org.eclipse.cdt.debug.internal.core.CDebugUtils;
|
|||
import org.eclipse.cdt.debug.internal.ui.CDebugUIUtils;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -378,46 +378,8 @@ public class MemoryPresentation
|
|||
return getMemoryBlock().displayASCII();
|
||||
return false;
|
||||
}
|
||||
|
||||
protected MemoryText.TextReplacement[] textChanged( int offset, char newChar, char[] replacedText )
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
if ( getMemoryBlock() != null )
|
||||
{
|
||||
int index = getDataItemIndex( offset );
|
||||
if ( index != -1 )
|
||||
{
|
||||
char[] chars = getDataItemChars( index );
|
||||
if ( isInDataArea( offset ) )
|
||||
{
|
||||
int charIndex = getOffsetInDataItem( offset, index );
|
||||
chars[charIndex] = newChar;
|
||||
}
|
||||
if ( isInAsciiArea( offset ) )
|
||||
{
|
||||
chars = CDebugUtils.getByteText( (byte)newChar );
|
||||
}
|
||||
try
|
||||
{
|
||||
String text = new String( chars );
|
||||
getMemoryBlock().setItemValue( index, text );
|
||||
list.add( new MemoryText.TextReplacement( getDataItemOffset( index ), text ) );
|
||||
if ( displayASCII() )
|
||||
{
|
||||
// Ascii is enabled only when the word size is one byte
|
||||
list.add( getAsciiTextReplacement( index, chars ) );
|
||||
}
|
||||
}
|
||||
catch( DebugException e )
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
return (MemoryText.TextReplacement[])list.toArray( new MemoryText.TextReplacement[list.size()] );
|
||||
}
|
||||
|
||||
private int getDataItemIndex( int offset )
|
||||
protected int getDataItemIndex( int offset )
|
||||
{
|
||||
int row = offset / getRowLength();
|
||||
int pos = offset % getRowLength() - getAddressLength() - INTERVAL_BETWEEN_ADDRESS_AND_DATA;
|
||||
|
@ -472,20 +434,7 @@ public class MemoryPresentation
|
|||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
private MemoryText.TextReplacement getAsciiTextReplacement( int itemIndex, char[] chars )
|
||||
{
|
||||
int row = itemIndex / getNumberOfDataItemsInRow();
|
||||
int col = itemIndex % getNumberOfDataItemsInRow();
|
||||
int offset = row * getRowLength() +
|
||||
getAddressLength() + INTERVAL_BETWEEN_ADDRESS_AND_DATA +
|
||||
getNumberOfDataItemsInRow() * (getDataItemLength() + INTERVAL_BETWEEN_DATA_ITEMS) +
|
||||
INTERVAL_BETWEEN_DATA_AND_ASCII + col;
|
||||
byte newValue = CDebugUtils.textToByte( chars );
|
||||
char ch = ( Character.isISOControl( (char)newValue ) || newValue < 0 ) ? getPaddingCharacter() : (char)newValue;
|
||||
return new MemoryText.TextReplacement( offset, new String( new char[]{ ch } ) );
|
||||
}
|
||||
|
||||
|
||||
public void dispose()
|
||||
{
|
||||
if ( fAddressZones != null )
|
||||
|
@ -497,16 +446,7 @@ public class MemoryPresentation
|
|||
fChangedZones.clear();
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isDirty()
|
||||
{
|
||||
if ( getMemoryBlock() != null )
|
||||
{
|
||||
return getMemoryBlock().isDirty();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private String getDataItemPresentation( String item )
|
||||
{
|
||||
switch( getDataFormat() )
|
||||
|
@ -571,4 +511,52 @@ public class MemoryPresentation
|
|||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
protected String getNewItemValue( int offset, char newChar )
|
||||
{
|
||||
if ( getMemoryBlock() != null )
|
||||
{
|
||||
int index = getDataItemIndex( offset );
|
||||
if ( index != -1 )
|
||||
{
|
||||
char[] chars = getDataItemChars( index );
|
||||
if ( isInDataArea( offset ) )
|
||||
{
|
||||
int charIndex = getOffsetInDataItem( offset, index );
|
||||
chars[charIndex] = newChar;
|
||||
}
|
||||
if ( isInAsciiArea( offset ) )
|
||||
{
|
||||
chars = CDebugUtils.getByteText( (byte)newChar );
|
||||
}
|
||||
return new String( chars );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected void setItemValue( int offset, char ch )
|
||||
{
|
||||
if ( getMemoryBlock() != null )
|
||||
{
|
||||
int index = getDataItemIndex( offset );
|
||||
if ( index != -1 )
|
||||
{
|
||||
String newValue = getNewItemValue( offset, ch );
|
||||
if ( newValue != null )
|
||||
{
|
||||
try
|
||||
{
|
||||
getMemoryBlock().setItemValue( index, newValue );
|
||||
return;
|
||||
}
|
||||
catch( DebugException e )
|
||||
{
|
||||
Display.getDefault().beep();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Display.getDefault().beep();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,38 +33,6 @@ import org.eclipse.swt.widgets.Control;
|
|||
*/
|
||||
public class MemoryText
|
||||
{
|
||||
/**
|
||||
*
|
||||
* The instance of this class specifies the text replacement
|
||||
* that has to be applied to the StyledText widget.
|
||||
*
|
||||
* @since Oct 29, 2002
|
||||
*/
|
||||
public static class TextReplacement
|
||||
{
|
||||
private int fStart;
|
||||
private String fText;
|
||||
|
||||
/**
|
||||
* Constructor for TextReplacement.
|
||||
*/
|
||||
public TextReplacement( int start, String text )
|
||||
{
|
||||
fStart = start;
|
||||
fText = text;
|
||||
}
|
||||
|
||||
public int getStart()
|
||||
{
|
||||
return fStart;
|
||||
}
|
||||
|
||||
public String getText()
|
||||
{
|
||||
return fText;
|
||||
}
|
||||
}
|
||||
|
||||
private StyledText fText = null;
|
||||
private MemoryPresentation fPresentation = null;
|
||||
private boolean fUpdating = false;
|
||||
|
@ -118,16 +86,19 @@ public class MemoryText
|
|||
return;
|
||||
if ( event.length != 1 )
|
||||
return;
|
||||
TextReplacement[] trs = fPresentation.textChanged( event.start,
|
||||
fText.getText().charAt( event.start ),
|
||||
event.replacedText.toCharArray() );
|
||||
int caretOffset = fText.getCaretOffset();
|
||||
update( trs );
|
||||
fText.getCaret().setVisible( false );
|
||||
char ch = fText.getText().charAt( event.start );
|
||||
restoreText( event.start, event.length, event.replacedText );
|
||||
fPresentation.setItemValue( event.start, ch );
|
||||
fText.setCaretOffset( caretOffset );
|
||||
fText.getCaret().setVisible( true );
|
||||
}
|
||||
|
||||
public void refresh()
|
||||
{
|
||||
int offset = fText.getCaretOffset();
|
||||
fText.getCaret().setVisible( false );
|
||||
fText.setFont( new Font( fText.getDisplay(), getFontData() ) );
|
||||
fText.setBackground( getBackgroundColor() );
|
||||
fText.setForeground( getForegroundColor() );
|
||||
|
@ -151,7 +122,8 @@ public class MemoryText
|
|||
getBackgroundColor() ) );
|
||||
}
|
||||
fText.redraw();
|
||||
updateTitle();
|
||||
fText.setCaretOffset( offset );
|
||||
fText.getCaret().setVisible( true );
|
||||
}
|
||||
|
||||
private void refresh( Point[] zones, String[] items )
|
||||
|
@ -170,7 +142,6 @@ public class MemoryText
|
|||
*/
|
||||
fText.redrawRange( zones[i].x, zones[i].y - zones[i].x + 1, false );
|
||||
}
|
||||
updateTitle();
|
||||
}
|
||||
|
||||
protected void handleVerifyKey( VerifyEvent event )
|
||||
|
@ -295,7 +266,7 @@ public class MemoryText
|
|||
{
|
||||
return fText;
|
||||
}
|
||||
|
||||
/*
|
||||
protected void update( TextReplacement[] trs )
|
||||
{
|
||||
fUpdating = true;
|
||||
|
@ -304,18 +275,24 @@ public class MemoryText
|
|||
fText.replaceTextRange( trs[i].getStart(),
|
||||
trs[i].getText().length(),
|
||||
trs[i].getText() );
|
||||
/*
|
||||
fText.setStyleRange( new StyleRange( trs[i].getStart(),
|
||||
trs[i].getText().length(),
|
||||
getDirtyColor(),
|
||||
getBackgroundColor() ) );
|
||||
*/
|
||||
fText.redrawRange( trs[i].getStart(), trs[i].getText().length(), false );
|
||||
}
|
||||
saveChanges();
|
||||
fUpdating = false;
|
||||
updateTitle();
|
||||
}
|
||||
|
||||
*/
|
||||
private void restoreText( int start, int length, String text )
|
||||
{
|
||||
fUpdating = true;
|
||||
fText.replaceTextRange( start, length, text );
|
||||
fUpdating = false;
|
||||
}
|
||||
/*
|
||||
private void updateTitle()
|
||||
{
|
||||
if ( fText.getParent() instanceof MemoryControlArea )
|
||||
|
@ -332,4 +309,13 @@ public class MemoryText
|
|||
((MemoryControlArea)fText.getParent()).setTitle( title );
|
||||
}
|
||||
}
|
||||
|
||||
private void saveChanges()
|
||||
{
|
||||
if ( fText.getParent() instanceof MemoryControlArea )
|
||||
{
|
||||
((MemoryControlArea)fText.getParent()).saveChanges();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ import org.eclipse.cdt.debug.internal.ui.actions.MemoryFormatAction;
|
|||
import org.eclipse.cdt.debug.internal.ui.actions.MemoryNumberOfColumnAction;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.MemorySizeAction;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.SaveMemoryChangesAction;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.ShowAsciiAction;
|
||||
import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants;
|
||||
import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler;
|
||||
|
@ -100,11 +99,6 @@ public class MemoryView extends AbstractDebugEventHandlerView
|
|||
setAction( "ClearMemory", action ); //$NON-NLS-1$
|
||||
add( (ClearMemoryAction)action );
|
||||
|
||||
action = new SaveMemoryChangesAction( (MemoryViewer)getViewer() );
|
||||
action.setEnabled( false );
|
||||
setAction( "SaveMemoryChanges", action ); //$NON-NLS-1$
|
||||
add( (SaveMemoryChangesAction)action );
|
||||
|
||||
action = new ShowAsciiAction( (MemoryViewer)getViewer() );
|
||||
action.setEnabled( false );
|
||||
action.setChecked( CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean( ICDebugPreferenceConstants.PREF_MEMORY_SHOW_ASCII ) );
|
||||
|
@ -151,7 +145,6 @@ public class MemoryView extends AbstractDebugEventHandlerView
|
|||
menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "AutoRefreshMemory" ) ); //$NON-NLS-1$
|
||||
menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "RefreshMemory" ) ); //$NON-NLS-1$
|
||||
menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "ClearMemory" ) ); //$NON-NLS-1$
|
||||
menu.appendToGroup( ICDebugUIConstants.MEMORY_GROUP, getAction( "SaveMemoryChanges" ) ); //$NON-NLS-1$
|
||||
|
||||
MenuManager subMenu = new MenuManager( "Format" );
|
||||
{
|
||||
|
@ -196,7 +189,6 @@ public class MemoryView extends AbstractDebugEventHandlerView
|
|||
tbm.add( getAction( "AutoRefreshMemory" ) ); //$NON-NLS-1$
|
||||
tbm.add( getAction( "RefreshMemory" ) ); //$NON-NLS-1$
|
||||
tbm.add( getAction( "ClearMemory" ) ); //$NON-NLS-1$
|
||||
tbm.add( getAction( "SaveMemoryChanges" ) ); //$NON-NLS-1$
|
||||
|
||||
tbm.add( new Separator( IDebugUIConstants.RENDER_GROUP ) );
|
||||
tbm.add( getAction( "ShowAscii" ) ); //$NON-NLS-1$
|
||||
|
@ -244,7 +236,6 @@ public class MemoryView extends AbstractDebugEventHandlerView
|
|||
fMemoryNumberOfColumnsGroup.dispose();
|
||||
|
||||
remove( (ShowAsciiAction)getAction( "ShowAscii" ) );
|
||||
remove( (SaveMemoryChangesAction)getAction( "SaveMemoryChanges" ) );
|
||||
remove( (ClearMemoryAction)getAction( "ClearMemory" ) );
|
||||
remove( (RefreshMemoryAction)getAction( "RefreshMemory" ) );
|
||||
remove( (AutoRefreshMemoryAction)getAction( "AutoRefreshMemory" ) );
|
||||
|
|
|
@ -217,12 +217,7 @@ public class MemoryViewer extends ContentViewer
|
|||
{
|
||||
((MemoryControlArea)fTabFolder.getSelection().getControl()).clear();
|
||||
}
|
||||
|
||||
public void saveChanges()
|
||||
{
|
||||
((MemoryControlArea)fTabFolder.getSelection().getControl()).saveChanges();
|
||||
}
|
||||
|
||||
|
||||
public void refreshMemoryBlock()
|
||||
{
|
||||
((MemoryControlArea)fTabFolder.getSelection().getControl()).refreshMemoryBlock();
|
||||
|
|
Loading…
Add table
Reference in a new issue