1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[215697] refactoring to allow better customization by adopters

This commit is contained in:
Ted Williams 2008-03-02 20:43:32 +00:00
parent 39f6ca8ccc
commit 6261ce70e5
5 changed files with 502 additions and 361 deletions

View file

@ -62,6 +62,183 @@ public abstract class AbstractPane extends Canvas
protected boolean fPaneVisible = true; protected boolean fPaneVisible = true;
class AbstractPaneMouseListener implements MouseListener
{
public void mouseUp(MouseEvent me)
{
positionCaret(me.x, me.y);
fCaret.setVisible(true);
if(fSelectionInProgress && me.button == 1)
{
endSelection(me.x, me.y);
}
fSelectionInProgress = fSelectionStarted = false;
}
public void mouseDown(MouseEvent me)
{
AbstractPane.this.forceFocus();
positionCaret(me.x, me.y);
fCaret.setVisible(false);
if(me.button == 1)
{
// if shift is down and we have an existing start address,
// append selection
if((me.stateMask & SWT.SHIFT) != 0
&& fRendering.getSelection().getStart() != null)
{
// if the pane doesn't have a selection start (the
// selection was created in a different pane)
// then initialize the pane's selection start to the
// rendering's selection start
if(AbstractPane.this.fSelectionStartAddress == null)
AbstractPane.this.fSelectionStartAddress = fRendering
.getSelection().getStart();
AbstractPane.this.fSelectionStarted = true;
AbstractPane.this.appendSelection(me.x, me.y);
}
else
{
// start a new selection
AbstractPane.this.startSelection(me.x, me.y);
}
}
}
public void mouseDoubleClick(MouseEvent me)
{
handleMouseDoubleClick(me);
}
}
class AbstractPaneMouseMoveListener implements MouseMoveListener
{
public void mouseMove(MouseEvent me)
{
if(fSelectionStarted)
{
fSelectionInProgress = true;
appendSelection(me.x, me.y);
}
}
}
class AbstractPaneKeyListener implements KeyListener
{
public void keyPressed(KeyEvent ke)
{
fOldSubCellCaretPosition = fSubCellCaretPosition;
if((ke.stateMask & SWT.SHIFT) != 0)
{
switch(ke.keyCode)
{
case SWT.ARROW_RIGHT:
case SWT.ARROW_LEFT:
case SWT.ARROW_UP:
case SWT.ARROW_DOWN:
case SWT.PAGE_DOWN:
case SWT.PAGE_UP:
if(fRendering.getSelection().getStart() == null)
{
fRendering.getSelection().setStart(fCaretAddress.add(BigInteger.valueOf(
fRendering.getAddressesPerColumn())), fCaretAddress);
}
break;
}
}
if(ke.keyCode == SWT.ARROW_RIGHT)
{
handleRightArrowKey();
}
else if(ke.keyCode == SWT.ARROW_LEFT || ke.keyCode == SWT.BS)
{
handleLeftArrowKey();
}
else if(ke.keyCode == SWT.ARROW_DOWN)
{
handleDownArrowKey();
}
else if(ke.keyCode == SWT.ARROW_UP)
{
handleUpArrowKey();
}
else if(ke.keyCode == SWT.PAGE_DOWN)
{
handlePageDownKey();
}
else if(ke.keyCode == SWT.PAGE_UP)
{
handlePageUpKey();
}
else if(ke.keyCode == SWT.ESC)
{
fRendering.getViewportCache().clearEditBuffer();
}
else if(ke.character == '\r')
{
fRendering.getViewportCache().writeEditBuffer();
}
else if(Rendering.isValidEditCharacter(ke.character))
{
if(fRendering.getSelection().hasSelection())
{
setCaretAddress(fRendering.getSelection().getLow());
fSubCellCaretPosition = 0;
}
editCell(fCaretAddress, fSubCellCaretPosition, ke.character);
}
if((ke.stateMask & SWT.SHIFT) != 0)
{
switch(ke.keyCode)
{
case SWT.ARROW_RIGHT:
case SWT.ARROW_LEFT:
case SWT.ARROW_UP:
case SWT.ARROW_DOWN:
case SWT.PAGE_DOWN:
case SWT.PAGE_UP:
fRendering.getSelection().setEnd(fCaretAddress.add(BigInteger.valueOf(
fRendering.getAddressesPerColumn())),
fCaretAddress);
break;
}
}
else if(ke.keyCode != SWT.SHIFT)
// if shift key, keep selection, we might add to it
{
fRendering.getSelection().clear();
}
}
public void keyReleased(KeyEvent ke)
{
// do nothing
}
}
class AbstractPanePaintListener implements PaintListener
{
public void paintControl(PaintEvent pe)
{
AbstractPane.this.paint(pe);
}
}
public AbstractPane(Rendering rendering) public AbstractPane(Rendering rendering)
{ {
super(rendering, SWT.DOUBLE_BUFFERED); super(rendering, SWT.DOUBLE_BUFFERED);
@ -87,257 +264,13 @@ public abstract class AbstractPane extends Canvas
fCaret.setSize(1, gc.stringExtent("|").y); //$NON-NLS-1$ fCaret.setSize(1, gc.stringExtent("|").y); //$NON-NLS-1$
gc.dispose(); gc.dispose();
this.addPaintListener(new PaintListener() this.addPaintListener(createPaintListener());
{
public void paintControl(PaintEvent pe)
{
AbstractPane.this.paint(pe);
}
});
this.addMouseListener(new MouseListener() this.addMouseListener(createMouseListener());
{
public void mouseUp(MouseEvent me)
{
positionCaret(me.x, me.y);
fCaret.setVisible(true); this.addMouseMoveListener(createMouseMoveListener());
if(fSelectionInProgress && me.button == 1) this.addKeyListener(createKeyListener());
{
endSelection(me.x, me.y);
}
fSelectionInProgress = fSelectionStarted = false;
}
public void mouseDown(MouseEvent me)
{
AbstractPane.this.forceFocus();
positionCaret(me.x, me.y);
fCaret.setVisible(false);
if(me.button == 1)
{
// if shift is down and we have an existing start address,
// append selection
if((me.stateMask & SWT.SHIFT) != 0
&& fRendering.getSelection().getStart() != null)
{
// if the pane doesn't have a selection start (the
// selection was created in a different pane)
// then initialize the pane's selection start to the
// rendering's selection start
if(AbstractPane.this.fSelectionStartAddress == null)
AbstractPane.this.fSelectionStartAddress = fRendering
.getSelection().getStart();
AbstractPane.this.fSelectionStarted = true;
AbstractPane.this.appendSelection(me.x, me.y);
}
else
{
// start a new selection
AbstractPane.this.startSelection(me.x, me.y);
}
}
}
public void mouseDoubleClick(MouseEvent me)
{
try
{
BigInteger address = getViewportAddress(me.x / getCellWidth(), me.y
/ getCellHeight());
fRendering.getSelection().clear();
fRendering.getSelection().setStart(address.add(BigInteger
.valueOf(fRendering.getAddressesPerColumn())), address);
fRendering.getSelection().setEnd(address.add(BigInteger
.valueOf(fRendering.getAddressesPerColumn())), address);
}
catch(DebugException de)
{
// do nothing
}
}
});
this.addMouseMoveListener(new MouseMoveListener()
{
public void mouseMove(MouseEvent me)
{
if(fSelectionStarted)
{
fSelectionInProgress = true;
appendSelection(me.x, me.y);
}
}
});
this.addKeyListener(new KeyListener()
{
public void keyPressed(KeyEvent ke)
{
fOldSubCellCaretPosition = fSubCellCaretPosition;
if((ke.stateMask & SWT.SHIFT) != 0)
{
switch(ke.keyCode)
{
case SWT.ARROW_RIGHT:
case SWT.ARROW_LEFT:
case SWT.ARROW_UP:
case SWT.ARROW_DOWN:
case SWT.PAGE_DOWN:
case SWT.PAGE_UP:
if(fRendering.getSelection().getStart() == null)
{
fRendering.getSelection().setStart(fCaretAddress.add(BigInteger.valueOf(
fRendering.getAddressesPerColumn())), fCaretAddress);
}
break;
}
}
if(ke.keyCode == SWT.ARROW_RIGHT)
{
fSubCellCaretPosition++;
if(fSubCellCaretPosition >= getCellCharacterCount())
{
fSubCellCaretPosition = 0;
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(getNumberOfBytesRepresentedByColumn() / fRendering.getAddressableSize()));
if(newCaretAddress.compareTo(fRendering.getMemoryBlockEndAddress()) > 0)
{
fSubCellCaretPosition = getCellCharacterCount();
}
else
{
setCaretAddress(newCaretAddress);
}
}
updateCaret();
ensureCaretWithinViewport();
}
else if(ke.keyCode == SWT.ARROW_LEFT || ke.keyCode == SWT.BS)
{
fSubCellCaretPosition--;
if(fSubCellCaretPosition < 0)
{
fSubCellCaretPosition = getCellCharacterCount() - 1;
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(getNumberOfBytesRepresentedByColumn() / fRendering.getAddressableSize()));
if(newCaretAddress.compareTo(fRendering.getMemoryBlockStartAddress()) < 0)
{
fSubCellCaretPosition = 0;
}
else
{
setCaretAddress(newCaretAddress);
}
}
updateCaret();
ensureCaretWithinViewport();
}
else if(ke.keyCode == SWT.ARROW_DOWN)
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
else if(ke.keyCode == SWT.ARROW_UP)
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
else if(ke.keyCode == SWT.PAGE_DOWN)
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()
* (fRendering.getRowCount() - 1)));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
else if(ke.keyCode == SWT.PAGE_UP)
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()
* (fRendering.getRowCount() - 1)));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
else if(ke.keyCode == SWT.ESC)
{
fRendering.getViewportCache().clearEditBuffer();
}
else if(ke.character == '\r')
{
fRendering.getViewportCache().writeEditBuffer();
}
else if(Rendering.isValidEditCharacter(ke.character))
{
if(fRendering.getSelection().hasSelection())
{
setCaretAddress(fRendering.getSelection().getLow());
fSubCellCaretPosition = 0;
}
editCell(fCaretAddress, fSubCellCaretPosition, ke.character);
}
if((ke.stateMask & SWT.SHIFT) != 0)
{
switch(ke.keyCode)
{
case SWT.ARROW_RIGHT:
case SWT.ARROW_LEFT:
case SWT.ARROW_UP:
case SWT.ARROW_DOWN:
case SWT.PAGE_DOWN:
case SWT.PAGE_UP:
fRendering.getSelection().setEnd(fCaretAddress.add(BigInteger.valueOf(
fRendering.getAddressesPerColumn())),
fCaretAddress);
break;
}
}
else if(ke.keyCode != SWT.SHIFT)
// if shift key, keep selection, we might add to it
{
fRendering.getSelection().clear();
}
}
public void keyReleased(KeyEvent ke)
{
// do nothing
}
});
this.addFocusListener(new FocusListener() this.addFocusListener(new FocusListener()
{ {
@ -364,6 +297,133 @@ public abstract class AbstractPane extends Canvas
}); });
} }
protected MouseListener createMouseListener(){
return new AbstractPaneMouseListener();
}
protected MouseMoveListener createMouseMoveListener(){
return new AbstractPaneMouseMoveListener();
}
protected KeyListener createKeyListener(){
return new AbstractPaneKeyListener();
}
protected PaintListener createPaintListener(){
return new AbstractPanePaintListener();
}
protected void handleRightArrowKey()
{
fSubCellCaretPosition++;
if(fSubCellCaretPosition >= getCellCharacterCount())
{
fSubCellCaretPosition = 0;
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(getNumberOfBytesRepresentedByColumn() / fRendering.getAddressableSize()));
if(newCaretAddress.compareTo(fRendering.getMemoryBlockEndAddress()) > 0)
{
fSubCellCaretPosition = getCellCharacterCount();
}
else
{
setCaretAddress(newCaretAddress);
}
}
updateCaret();
ensureCaretWithinViewport();
}
protected void handleLeftArrowKey()
{
fSubCellCaretPosition--;
if(fSubCellCaretPosition < 0)
{
fSubCellCaretPosition = getCellCharacterCount() - 1;
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(getNumberOfBytesRepresentedByColumn() / fRendering.getAddressableSize()));
if(newCaretAddress.compareTo(fRendering.getMemoryBlockStartAddress()) < 0)
{
fSubCellCaretPosition = 0;
}
else
{
setCaretAddress(newCaretAddress);
}
}
updateCaret();
ensureCaretWithinViewport();
}
protected void handleDownArrowKey()
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
protected void handleUpArrowKey()
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
protected void handlePageDownKey()
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()
* (fRendering.getRowCount() - 1)));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
protected void handlePageUpKey()
{
// Ensure that caret is within the addressable range
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()
* (fRendering.getRowCount() - 1)));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
}
protected void handleMouseDoubleClick(MouseEvent me)
{
try
{
BigInteger address = getViewportAddress(me.x / getCellWidth(), me.y
/ getCellHeight());
fRendering.getSelection().clear();
fRendering.getSelection().setStart(address.add(BigInteger
.valueOf(fRendering.getAddressesPerColumn())), address);
fRendering.getSelection().setEnd(address.add(BigInteger
.valueOf(fRendering.getAddressesPerColumn())), address);
}
catch(DebugException de)
{
// do nothing
}
}
protected boolean isPaneVisible() protected boolean isPaneVisible()
{ {
return fPaneVisible; return fPaneVisible;

View file

@ -0,0 +1,8 @@
package org.eclipse.dd.debug.memory.renderings.traditional;
public interface IMemoryByte {
public boolean isEdited();
public void setEdited(boolean edited);
}

View file

@ -0,0 +1,19 @@
package org.eclipse.dd.debug.memory.renderings.traditional;
import java.math.BigInteger;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.MemoryByte;
public interface IViewportCache {
public void dispose();
public void refresh();
public MemoryByte[] getBytes(BigInteger address, int bytesRequested) throws DebugException;
public void archiveDeltas();
public void setEditedValue(BigInteger address, MemoryByte[] bytes);
public void clearEditBuffer();
public void writeEditBuffer();
public boolean containsEditedCell(BigInteger address);
// private void queueRequest(BigInteger startAddress, BigInteger endAddress);
}

View file

@ -63,11 +63,11 @@ public class Rendering extends Composite implements IDebugEventSetListener
// controls // controls
private AddressPane fAddressPane; protected AddressPane fAddressPane;
private DataPane fBinaryPane; protected DataPane fBinaryPane;
private TextPane fTextPane; protected TextPane fTextPane;
private GoToAddressComposite fAddressBar; private GoToAddressComposite fAddressBar;
@ -231,30 +231,16 @@ public class Rendering extends Composite implements IDebugEventSetListener
switch(se.detail) switch(se.detail)
{ {
case SWT.ARROW_DOWN: case SWT.ARROW_DOWN:
fViewportAddress = fViewportAddress.add(BigInteger handleDownArrow();
.valueOf(getAddressableCellsPerRow()));
ensureViewportAddressDisplayable();
redrawPanes();
break; break;
case SWT.PAGE_DOWN: case SWT.PAGE_DOWN:
fViewportAddress = fViewportAddress.add(BigInteger handlePageDown();
.valueOf(getAddressableCellsPerRow()
* (Rendering.this.getRowCount() - 1)));
ensureViewportAddressDisplayable();
redrawPanes();
break; break;
case SWT.ARROW_UP: case SWT.ARROW_UP:
fViewportAddress = fViewportAddress.subtract(BigInteger handleUpArrow();
.valueOf(getAddressableCellsPerRow()));
ensureViewportAddressDisplayable();
redrawPanes();
break; break;
case SWT.PAGE_UP: case SWT.PAGE_UP:
fViewportAddress = fViewportAddress.subtract(BigInteger handlePageUp();
.valueOf(getAddressableCellsPerRow()
* (Rendering.this.getRowCount() - 1)));
ensureViewportAddressDisplayable();
redrawPanes();
break; break;
case SWT.SCROLL_LINE: case SWT.SCROLL_LINE:
if(getVerticalBar().getSelection() == getVerticalBar().getMinimum()) if(getVerticalBar().getSelection() == getVerticalBar().getMinimum())
@ -312,76 +298,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
} }
}); });
this.setLayout(new Layout() setLayout();
{
public void layout(Composite composite, boolean changed)
{
int xOffset = 0;
if(Rendering.this.getHorizontalBar().isVisible())
xOffset = Rendering.this.getHorizontalBar().getSelection();
int x = xOffset * -1;
int y = 0;
if(fAddressBarControl.isVisible())
{
fAddressBarControl.setBounds(0, 0,
Rendering.this.getBounds().width, fAddressBarControl
.computeSize(100, 30).y); // FIXME
//y = fAddressBarControl.getBounds().height;
}
if(fAddressPane.isPaneVisible())
{
fAddressPane.setBounds(x, y,
fAddressPane.computeSize(0, 0).x, Rendering.this
.getBounds().height
- y);
x = fAddressPane.getBounds().x
+ fAddressPane.getBounds().width;
}
if(fBinaryPane.isPaneVisible())
{
fBinaryPane.setBounds(x, y,
fBinaryPane.computeSize(0, 0).x, Rendering.this
.getBounds().height
- y);
x = fBinaryPane.getBounds().x
+ fBinaryPane.getBounds().width;
}
if(fTextPane.isPaneVisible())
{
fTextPane.setBounds(x, y,
Math.max(fTextPane.computeSize(0, 0).x, Rendering.this.getClientArea().width
- x - xOffset), Rendering.this.getBounds().height - y);
}
if(getClientArea().width >= fTextPane.getBounds().x + fTextPane.getBounds().width + xOffset)
{
Rendering.this.getHorizontalBar().setVisible(false);
}
else
{
ScrollBar horizontal = Rendering.this.getHorizontalBar();
horizontal.setVisible(true);
horizontal.setMinimum(0);
horizontal.setMaximum(fTextPane.getBounds().x
+ fTextPane.getBounds().width + xOffset);
horizontal.setThumb(getClientArea().width);
horizontal.setPageIncrement(40); // TODO ?
horizontal.setIncrement(20); // TODO ?
}
}
protected Point computeSize(Composite composite, int wHint,
int hHint, boolean flushCache)
{
return new Point(100, 100); // dummy data
}
});
this.addControlListener(new ControlListener() this.addControlListener(new ControlListener()
{ {
@ -398,6 +315,114 @@ public class Rendering extends Composite implements IDebugEventSetListener
DebugPlugin.getDefault().addDebugEventListener(this); DebugPlugin.getDefault().addDebugEventListener(this);
} }
protected void setLayout()
{
this.setLayout(new Layout()
{
public void layout(Composite composite, boolean changed)
{
int xOffset = 0;
if(Rendering.this.getHorizontalBar().isVisible())
xOffset = Rendering.this.getHorizontalBar().getSelection();
int x = xOffset * -1;
int y = 0;
if(fAddressBarControl.isVisible())
{
fAddressBarControl.setBounds(0, 0,
Rendering.this.getBounds().width, fAddressBarControl
.computeSize(100, 30).y); // FIXME
//y = fAddressBarControl.getBounds().height;
}
if(fAddressPane.isPaneVisible())
{
fAddressPane.setBounds(x, y,
fAddressPane.computeSize(0, 0).x, Rendering.this
.getBounds().height
- y);
x = fAddressPane.getBounds().x
+ fAddressPane.getBounds().width;
}
if(fBinaryPane.isPaneVisible())
{
fBinaryPane.setBounds(x, y,
fBinaryPane.computeSize(0, 0).x, Rendering.this
.getBounds().height
- y);
x = fBinaryPane.getBounds().x
+ fBinaryPane.getBounds().width;
}
if(fTextPane.isPaneVisible())
{
fTextPane.setBounds(x, y,
Math.max(fTextPane.computeSize(0, 0).x, Rendering.this.getClientArea().width
- x - xOffset), Rendering.this.getBounds().height - y);
}
if(getClientArea().width >= fTextPane.getBounds().x + fTextPane.getBounds().width + xOffset)
{
Rendering.this.getHorizontalBar().setVisible(false);
}
else
{
ScrollBar horizontal = Rendering.this.getHorizontalBar();
horizontal.setVisible(true);
horizontal.setMinimum(0);
horizontal.setMaximum(fTextPane.getBounds().x
+ fTextPane.getBounds().width + xOffset);
horizontal.setThumb(getClientArea().width);
horizontal.setPageIncrement(40); // TODO ?
horizontal.setIncrement(20); // TODO ?
}
}
protected Point computeSize(Composite composite, int wHint,
int hHint, boolean flushCache)
{
return new Point(100, 100); // dummy data
}
});
}
protected void handleDownArrow()
{
fViewportAddress = fViewportAddress.add(BigInteger
.valueOf(getAddressableCellsPerRow()));
ensureViewportAddressDisplayable();
redrawPanes();
}
protected void handleUpArrow()
{
fViewportAddress = fViewportAddress.subtract(BigInteger
.valueOf(getAddressableCellsPerRow()));
ensureViewportAddressDisplayable();
redrawPanes();
}
protected void handlePageDown()
{
fViewportAddress = fViewportAddress.add(BigInteger
.valueOf(getAddressableCellsPerRow()
* (Rendering.this.getRowCount() - 1)));
ensureViewportAddressDisplayable();
redrawPanes();
}
protected void handlePageUp()
{
fViewportAddress = fViewportAddress.subtract(BigInteger
.valueOf(getAddressableCellsPerRow()
* (Rendering.this.getRowCount() - 1)));
ensureViewportAddressDisplayable();
redrawPanes();
}
protected AddressPane createAddressPane() protected AddressPane createAddressPane()
{ {
return new AddressPane(this); return new AddressPane(this);
@ -561,7 +586,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
return false; return false;
} }
private IMemoryBlockExtension getMemoryBlock() protected IMemoryBlockExtension getMemoryBlock()
{ {
IMemoryBlock block = fParent.getMemoryBlock(); IMemoryBlock block = fParent.getMemoryBlock();
if(block != null) if(block != null)
@ -576,12 +601,12 @@ public class Rendering extends Composite implements IDebugEventSetListener
return fParent.getBigBaseAddress(); return fParent.getBigBaseAddress();
} }
protected int getAddressableSize() public int getAddressableSize()
{ {
return fParent.getAddressableSize(); return fParent.getAddressableSize();
} }
protected ViewportCache getViewportCache() protected IViewportCache getViewportCache()
{ {
return fViewportCache; return fViewportCache;
} }
@ -589,7 +614,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
public MemoryByte[] getBytes(BigInteger address, int bytes) public MemoryByte[] getBytes(BigInteger address, int bytes)
throws DebugException throws DebugException
{ {
return fViewportCache.getBytes(address, bytes); return getViewportCache().getBytes(address, bytes);
} }
// default visibility for performance // default visibility for performance
@ -599,7 +624,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
{ {
} }
class ViewportCache extends Thread class ViewportCache extends Thread implements IViewportCache
{ {
class ArchiveDeltas implements Request class ArchiveDeltas implements Request
{ {
@ -665,7 +690,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
} }
} }
protected void refresh() public void refresh()
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
Display.getDefault().getThread()) : TraditionalRenderingMessages Display.getDefault().getThread()) : TraditionalRenderingMessages
@ -677,7 +702,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
} }
} }
protected void archiveDeltas() public void archiveDeltas()
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
Display.getDefault().getThread()) : TraditionalRenderingMessages Display.getDefault().getThread()) : TraditionalRenderingMessages
@ -886,7 +911,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
} }
// bytes will be fetched from cache // bytes will be fetched from cache
protected MemoryByte[] getBytes(BigInteger address, int bytesRequested) public MemoryByte[] getBytes(BigInteger address, int bytesRequested)
throws DebugException throws DebugException
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
@ -933,7 +958,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
return bytes; return bytes;
} }
private boolean containsEditedCell(BigInteger address) public boolean containsEditedCell(BigInteger address)
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
Display.getDefault().getThread()) : TraditionalRenderingMessages Display.getDefault().getThread()) : TraditionalRenderingMessages
@ -951,7 +976,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
return (MemoryByte[]) fEditBuffer.get(address); return (MemoryByte[]) fEditBuffer.get(address);
} }
protected void clearEditBuffer() public void clearEditBuffer()
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
Display.getDefault().getThread()) : TraditionalRenderingMessages Display.getDefault().getThread()) : TraditionalRenderingMessages
@ -961,7 +986,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
Rendering.this.redrawPanes(); Rendering.this.redrawPanes();
} }
protected void writeEditBuffer() public void writeEditBuffer()
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
Display.getDefault().getThread()) : TraditionalRenderingMessages Display.getDefault().getThread()) : TraditionalRenderingMessages
@ -997,7 +1022,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
clearEditBuffer(); clearEditBuffer();
} }
protected void setEditedValue(BigInteger address, MemoryByte[] bytes) public void setEditedValue(BigInteger address, MemoryByte[] bytes)
{ {
assert Thread.currentThread().equals( assert Thread.currentThread().equals(
Display.getDefault().getThread()) : TraditionalRenderingMessages Display.getDefault().getThread()) : TraditionalRenderingMessages
@ -1334,9 +1359,9 @@ public class Rendering extends Composite implements IDebugEventSetListener
{ {
if(!this.isDisposed()) if(!this.isDisposed())
{ {
if(this.isVisible() && fViewportCache != null) if(this.isVisible() && getViewportCache() != null)
{ {
fViewportCache.refresh(); getViewportCache().refresh();
} }
else else
{ {
@ -1348,7 +1373,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
protected void archiveDeltas() protected void archiveDeltas()
{ {
fViewportCache.archiveDeltas(); this.getViewportCache().archiveDeltas();
} }
public void gotoAddress(BigInteger address) public void gotoAddress(BigInteger address)
@ -1364,7 +1389,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
redrawPanes(); redrawPanes();
} }
protected void setViewportStartAddress(BigInteger newAddress) public void setViewportStartAddress(BigInteger newAddress)
{ {
fViewportAddress = newAddress; fViewportAddress = newAddress;
} }
@ -1615,6 +1640,36 @@ public class Rendering extends Composite implements IDebugEventSetListener
} }
} }
protected void redrawPane(int paneId)
{
if(!isDisposed() && this.isVisible())
{
AbstractPane pane = null;
if(paneId == Rendering.PANE_ADDRESS)
{
pane = fAddressPane;
}
else if(paneId == Rendering.PANE_BINARY)
{
pane = fBinaryPane;
}
if(paneId == Rendering.PANE_TEXT)
{
pane = fTextPane;
}
if(pane != null && pane.isPaneVisible())
{
pane.redraw();
pane.setRowCount();
if(pane.isFocusControl())
pane.updateCaret();
}
}
fParent.updateRenderingLabels();
}
protected void redrawPanes() protected void redrawPanes()
{ {
if(!isDisposed() && this.isVisible()) if(!isDisposed() && this.isVisible())

View file

@ -95,10 +95,9 @@ import org.eclipse.ui.progress.UIJob;
public class TraditionalRendering extends AbstractMemoryRendering implements IRepositionableMemoryRendering public class TraditionalRendering extends AbstractMemoryRendering implements IRepositionableMemoryRendering
{ {
Rendering fRendering; protected Rendering fRendering;
protected Action displayEndianBigAction;
private Action displayEndianBigAction; protected Action displayEndianLittleAction;
private Action displayEndianLittleAction;
private IWorkbenchAdapter fWorkbenchAdapter; private IWorkbenchAdapter fWorkbenchAdapter;
private IMemoryBlockConnection fConnection; private IMemoryBlockConnection fConnection;
@ -1086,7 +1085,7 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe
} }
class TraditionalMemoryByte extends MemoryByte class TraditionalMemoryByte extends MemoryByte implements IMemoryByte
{ {
private boolean isEdited = false; private boolean isEdited = false;