1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 23:05:47 +02:00

172860 Traditional memory rendering: Null pointer exception at R...

173323  Traditional Memory Rendering: Memory View Tab Label is no...
173331  Traditional Memory Rendering: Performance Issue - Unneces...
This commit is contained in:
Ted Williams 2007-03-14 06:41:30 +00:00
parent 80a07c9313
commit 57d3112ade
2 changed files with 78 additions and 24 deletions

View file

@ -572,6 +572,12 @@ public abstract class AbstractPane extends Canvas
protected void paint(PaintEvent pe) protected void paint(PaintEvent pe)
{ {
fRowCount = getBounds().height / getCellHeight(); fRowCount = getBounds().height / getCellHeight();
if(fRendering.isDirty())
{
fRendering.setDirty(false);
fRendering.refresh();
}
} }
abstract protected BigInteger getViewportAddress(int col, int row) abstract protected BigInteger getViewportAddress(int col, int row)

View file

@ -17,6 +17,7 @@ import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugEvent; import org.eclipse.debug.core.DebugEvent;
@ -46,6 +47,7 @@ import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.JFaceResources;
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.IBasicPropertyConstants;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.TextTransfer;
@ -75,6 +77,7 @@ import org.eclipse.swt.widgets.Slider;
import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.progress.UIJob;
/** /**
* A memory rendering displaying memory in a traditional * A memory rendering displaying memory in a traditional
@ -182,6 +185,22 @@ public class TraditionalRendering extends AbstractMemoryRendering
this.fRendering.gotoAddress(address); this.fRendering.gotoAddress(address);
} }
public void updateRenderingLabels()
{
UIJob job = new UIJob("updateLabels"){ //$NON-NLS-1$
public IStatus runInUIThread(IProgressMonitor monitor) {
// update tab labels
String fLabel = getLabel();
firePropertyChangedEvent(new PropertyChangeEvent(TraditionalRendering.this,
IBasicPropertyConstants.P_TEXT, null, fLabel));
return Status.OK_STATUS;
}};
job.setSystem(true);
job.schedule();
}
private Color colorBackground; private Color colorBackground;
private Color colorChanged; private Color colorChanged;
private Color colorEdit; private Color colorEdit;
@ -950,6 +969,9 @@ class Rendering extends Composite implements IDebugEventSetListener
private int fPaneSpacing = 16; private int fPaneSpacing = 16;
// flag whether the memory cache is dirty
private boolean fCacheDirty = false;
public Rendering(Composite parent, public Rendering(Composite parent,
TraditionalRendering renderingParent) TraditionalRendering renderingParent)
{ {
@ -1700,6 +1722,16 @@ class Rendering extends Composite implements IDebugEventSetListener
fAddressBar.setText(getAddressString(getViewportStartAddress())); fAddressBar.setText(getAddressString(getViewportStartAddress()));
} }
public void setDirty(boolean needRefresh)
{
fCacheDirty = needRefresh;
}
public boolean isDirty()
{
return fCacheDirty;
}
public void dispose() public void dispose()
{ {
if(fViewportCache != null) if(fViewportCache != null)
@ -1967,7 +1999,18 @@ class Rendering extends Composite implements IDebugEventSetListener
protected void refresh() protected void refresh()
{ {
fViewportCache.refresh(); if(!this.isDisposed())
{
if(this.isVisible())
{
fViewportCache.refresh();
}
else
{
setDirty(true);
fParent.updateRenderingLabels();
}
}
} }
protected void archiveDeltas() protected void archiveDeltas()
@ -2266,29 +2309,34 @@ class Rendering extends Composite implements IDebugEventSetListener
protected void redrawPanes() protected void redrawPanes()
{ {
if(fAddressPane.isPaneVisible()) if(this.isVisible())
{ {
fAddressPane.redraw(); if(fAddressPane.isPaneVisible())
fAddressPane.setRowCount(); {
if(fAddressPane.isFocusControl()) fAddressPane.redraw();
fAddressPane.updateCaret(); fAddressPane.setRowCount();
} if(fAddressPane.isFocusControl())
fAddressPane.updateCaret();
}
if(fBinaryPane.isPaneVisible()) if(fBinaryPane.isPaneVisible())
{ {
fBinaryPane.redraw(); fBinaryPane.redraw();
fBinaryPane.setRowCount(); fBinaryPane.setRowCount();
if(fBinaryPane.isFocusControl()) if(fBinaryPane.isFocusControl())
fBinaryPane.updateCaret(); fBinaryPane.updateCaret();
} }
if(fTextPane.isPaneVisible()) if(fTextPane.isPaneVisible())
{ {
fTextPane.redraw(); fTextPane.redraw();
fTextPane.setRowCount(); fTextPane.setRowCount();
if(fTextPane.isFocusControl()) if(fTextPane.isFocusControl())
fTextPane.updateCaret(); fTextPane.updateCaret();
} }
}
fParent.updateRenderingLabels();
} }
private void layoutPanes() private void layoutPanes()