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,40 +62,7 @@ public abstract class AbstractPane extends Canvas
protected boolean fPaneVisible = true; protected boolean fPaneVisible = true;
public AbstractPane(Rendering rendering) class AbstractPaneMouseListener implements MouseListener
{
super(rendering, SWT.DOUBLE_BUFFERED);
fRendering = rendering;
try
{
fCaretAddress = rendering.getBigBaseAddress();
}
catch(Exception e)
{
// do nothing
}
// pref
this.setFont(fRendering.getFont());
GC gc = new GC(this);
gc.setFont(this.getFont());
fCaret = new Caret(this, SWT.NONE);
fCaret.setSize(1, gc.stringExtent("|").y); //$NON-NLS-1$
gc.dispose();
this.addPaintListener(new PaintListener()
{
public void paintControl(PaintEvent pe)
{
AbstractPane.this.paint(pe);
}
});
this.addMouseListener(new MouseListener()
{ {
public void mouseUp(MouseEvent me) public void mouseUp(MouseEvent me)
{ {
@ -151,25 +118,12 @@ public abstract class AbstractPane extends Canvas
public void mouseDoubleClick(MouseEvent me) public void mouseDoubleClick(MouseEvent me)
{ {
try handleMouseDoubleClick(me);
{ }
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() class AbstractPaneMouseMoveListener implements MouseMoveListener
{ {
public void mouseMove(MouseEvent me) public void mouseMove(MouseEvent me)
{ {
@ -179,9 +133,9 @@ public abstract class AbstractPane extends Canvas
appendSelection(me.x, me.y); appendSelection(me.x, me.y);
} }
} }
}); }
this.addKeyListener(new KeyListener() class AbstractPaneKeyListener implements KeyListener
{ {
public void keyPressed(KeyEvent ke) public void keyPressed(KeyEvent ke)
{ {
@ -207,89 +161,27 @@ public abstract class AbstractPane extends Canvas
if(ke.keyCode == SWT.ARROW_RIGHT) if(ke.keyCode == SWT.ARROW_RIGHT)
{ {
fSubCellCaretPosition++; handleRightArrowKey();
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) else if(ke.keyCode == SWT.ARROW_LEFT || ke.keyCode == SWT.BS)
{ {
fSubCellCaretPosition--; handleLeftArrowKey();
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) else if(ke.keyCode == SWT.ARROW_DOWN)
{ {
// Ensure that caret is within the addressable range handleDownArrowKey();
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
} }
else if(ke.keyCode == SWT.ARROW_UP) else if(ke.keyCode == SWT.ARROW_UP)
{ {
// Ensure that caret is within the addressable range handleUpArrowKey();
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
} }
else if(ke.keyCode == SWT.PAGE_DOWN) else if(ke.keyCode == SWT.PAGE_DOWN)
{ {
// Ensure that caret is within the addressable range handlePageDownKey();
BigInteger newCaretAddress = fCaretAddress.add(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()
* (fRendering.getRowCount() - 1)));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
} }
else if(ke.keyCode == SWT.PAGE_UP) else if(ke.keyCode == SWT.PAGE_UP)
{ {
// Ensure that caret is within the addressable range handlePageUpKey();
BigInteger newCaretAddress = fCaretAddress.subtract(BigInteger
.valueOf(fRendering.getAddressableCellsPerRow()
* (fRendering.getRowCount() - 1)));
setCaretAddress(newCaretAddress);
updateCaret();
ensureCaretWithinViewport();
} }
else if(ke.keyCode == SWT.ESC) else if(ke.keyCode == SWT.ESC)
{ {
@ -337,7 +229,48 @@ public abstract class AbstractPane extends Canvas
{ {
// do nothing // do nothing
} }
}); }
class AbstractPanePaintListener implements PaintListener
{
public void paintControl(PaintEvent pe)
{
AbstractPane.this.paint(pe);
}
}
public AbstractPane(Rendering rendering)
{
super(rendering, SWT.DOUBLE_BUFFERED);
fRendering = rendering;
try
{
fCaretAddress = rendering.getBigBaseAddress();
}
catch(Exception e)
{
// do nothing
}
// pref
this.setFont(fRendering.getFont());
GC gc = new GC(this);
gc.setFont(this.getFont());
fCaret = new Caret(this, SWT.NONE);
fCaret.setSize(1, gc.stringExtent("|").y); //$NON-NLS-1$
gc.dispose();
this.addPaintListener(createPaintListener());
this.addMouseListener(createMouseListener());
this.addMouseMoveListener(createMouseMoveListener());
this.addKeyListener(createKeyListener());
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,6 +298,25 @@ public class Rendering extends Composite implements IDebugEventSetListener
} }
}); });
setLayout();
this.addControlListener(new ControlListener()
{
public void controlMoved(ControlEvent ce)
{
}
public void controlResized(ControlEvent ce)
{
packColumns();
}
});
DebugPlugin.getDefault().addDebugEventListener(this);
}
protected void setLayout()
{
this.setLayout(new Layout() this.setLayout(new Layout()
{ {
public void layout(Composite composite, boolean changed) public void layout(Composite composite, boolean changed)
@ -382,20 +387,40 @@ public class Rendering extends Composite implements IDebugEventSetListener
return new Point(100, 100); // dummy data return new Point(100, 100); // dummy data
} }
}); });
this.addControlListener(new ControlListener()
{
public void controlMoved(ControlEvent ce)
{
} }
public void controlResized(ControlEvent ce) protected void handleDownArrow()
{ {
packColumns(); fViewportAddress = fViewportAddress.add(BigInteger
.valueOf(getAddressableCellsPerRow()));
ensureViewportAddressDisplayable();
redrawPanes();
} }
});
DebugPlugin.getDefault().addDebugEventListener(this); 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()
@ -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;