Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamantha Chan2006-02-08 19:16:58 +0000
committerSamantha Chan2006-02-08 19:16:58 +0000
commit772d704e34124c76f8e67dbfe8dc834116847249 (patch)
treeb6c103300bfd0dbd2390cc9f8e2725f56cb62396 /org.eclipse.debug.ui/ui/org/eclipse/debug/internal
parent88cbef2a0e28a761a5bc9d64061474219341814c (diff)
downloadeclipse.platform.debug-772d704e34124c76f8e67dbfe8dc834116847249.tar.gz
eclipse.platform.debug-772d704e34124c76f8e67dbfe8dc834116847249.tar.xz
eclipse.platform.debug-772d704e34124c76f8e67dbfe8dc834116847249.zip
Bug 106424 - Migrated renderings to async table rendering
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/MemoryBlockContentAdapter.java2
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/ASCIIRendering.java3
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTableRendering.java125
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTextRendering.java141
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractIntegerRendering.java3
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java7
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java3
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/PendingPropertyChanges.java (renamed from org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/PendingSynchronizationProperties.java)15
8 files changed, 203 insertions, 96 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/MemoryBlockContentAdapter.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/MemoryBlockContentAdapter.java
index 9b60b67d1..caa919f49 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/MemoryBlockContentAdapter.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/elements/adapters/MemoryBlockContentAdapter.java
@@ -29,7 +29,6 @@ import org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext;
import org.eclipse.debug.internal.ui.views.memory.renderings.AbstractAsyncTableRendering;
import org.eclipse.debug.internal.ui.views.memory.renderings.MemorySegment;
import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingContentDescriptor;
-import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingContentInput;
import org.eclipse.debug.internal.ui.views.memory.renderings.TableRenderingPresentationContext;
import org.eclipse.debug.ui.memory.IMemoryRendering;
@@ -208,7 +207,6 @@ public class MemoryBlockContentAdapter extends AsynchronousContentAdapter {
boolean error = false;
DebugException dbgEvt = null;
- // calculate address size
String adjustedAddress = startAddress.toString(16);
// align starting address with double word boundary
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/ASCIIRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/ASCIIRendering.java
index dd9ef1b99..0d8fbcad5 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/ASCIIRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/ASCIIRendering.java
@@ -15,7 +15,6 @@ import java.math.BigInteger;
import org.eclipse.debug.core.model.MemoryByte;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.memory.AbstractTextRendering;
import org.eclipse.jface.util.PropertyChangeEvent;
@@ -25,7 +24,7 @@ import org.eclipse.jface.util.PropertyChangeEvent;
* Convert bytes into ASCII string and vice versa
* @since 3.1
*/
-public class ASCIIRendering extends AbstractTextRendering{
+public class ASCIIRendering extends AbstractAsyncTextRendering{
private final int numCharsPerByte = 1;
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTableRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTableRendering.java
index 5dbb3a185..4805a8bb1 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTableRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTableRendering.java
@@ -189,7 +189,7 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
private boolean fIsDisposed = false;
private boolean fIsShowAddressColumn = true;
- private PendingSynchronizationProperties fPendingSyncProperties;
+ private PendingPropertyChanges fPendingSyncProperties;
private ISelectionChangedListener fViewerSelectionChangedListener = new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
@@ -369,13 +369,13 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
createToolTip();
+ // now the rendering is successfully created
+ fIsCreated = true;
+
return Status.OK_STATUS;
}};
uiJob.setSystem(true);
uiJob.schedule();
-
- // now the rendering is successfully created
- fIsCreated = true;
return Status.OK_STATUS;
@@ -581,16 +581,14 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
}
// do not handle event if the rendering is displaying an error
- if (isDisplayingError())
- return;
-
- // do not handle property change event if the rendering is not visible
- if (!isVisible())
+ // or if it's not visible
+ if (isDisplayingError() || !isVisible())
{
handlePropertiesChangeWhenHidden(event);
return;
}
+
if (event.getProperty().equals(IDebugUIConstants.PREF_PADDED_STR) ||
event.getProperty().equals(IDebugUIConstants.PREF_CHANGED_DEBUG_ELEMENT_COLOR))
{
@@ -609,8 +607,8 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
if (event.getProperty().equals(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE)) {
if (!isDynamicLoad())
{
- // only refresh if in non-autoload mode
- refresh();
+ int pageSize = DebugUIPlugin.getDefault().getPreferenceStore().getInt(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE);
+ handlePageSizeChanged(pageSize);
}
return;
}
@@ -651,6 +649,16 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
{
handlePageStartAddressChanged((BigInteger)value);
}
+ }
+
+ /**
+ *
+ */
+ private void handlePageSizeChanged(int pageSize) {
+ fPageSize = pageSize;
+ // only refresh if in non-autoload mode
+ fContentDescriptor.setNumLines(pageSize);
+ refresh();
}
private void handlePropertiesChangeWhenHidden(PropertyChangeEvent event)
@@ -691,6 +699,10 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
{
fPendingSyncProperties.setPageStartAddress((BigInteger)value);
}
+ else if (event.getProperty().equals(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE)) {
+ int pageSize = DebugUIPlugin.getDefault().getPreferenceStore().getInt(IDebugPreferenceConstants.PREF_TABLE_RENDERING_PAGE_SIZE);
+ fPendingSyncProperties.setPageSize(pageSize);
+ }
}
private void topVisibleAddressChanged(final BigInteger address)
@@ -782,14 +794,10 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
public void run() {
// call this to make the table viewer to reload when needed
fTableViewer.setSelection(address);
-//
-// if (!isDynamicLoad())
-// {
- int idx = fTableViewer.indexOf(address);
- if (idx < 0) {
- doTopVisibleAddressChanged(address);
- }
-// }
+ int idx = fTableViewer.indexOf(address);
+ if (idx < 0) {
+ doTopVisibleAddressChanged(address);
+ }
}
};
@@ -1821,10 +1829,11 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
}
fContentDescriptor.setLoadAddress(address);
+ final BigInteger finaladdress = address;
Runnable runnable = new Runnable() {
public void run() {
+ fTableViewer.setTopIndex(finaladdress);
refresh();
- fTableViewer.getTable().setTopIndex(0);
}};
runOnUIThread(runnable);
@@ -1836,24 +1845,25 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
// if currently in dynamic load mode, update page
// start address
- updateSyncPageStartAddress(getTopVisibleAddress());
+ BigInteger pageStart = getTopVisibleAddress();
+ updateSyncPageStartAddress(pageStart);
updateDynamicLoadProperty();
if (isDynamicLoad())
{
refresh();
- fTableViewer.setTopIndex(getTopVisibleAddress());
+ fTableViewer.setTopIndex(pageStart);
}
else
{
- BigInteger pageStart = (BigInteger)getSynchronizedProperty(IInternalDebugUIConstants.PROPERTY_PAGE_START_ADDRESS);
- if (pageStart == null)
- pageStart = getTopVisibleAddress();
handlePageStartAddressChanged(pageStart);
}
}
public void becomesHidden() {
+
+ // creates new object for storing potential changes in sync properties
+ fPendingSyncProperties = new PendingPropertyChanges();
if (!fIsCreated)
{
@@ -1861,9 +1871,6 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
return;
}
- // creates new object for storing potential changes in sync properties
- fPendingSyncProperties = new PendingSynchronizationProperties();
-
if (isVisible() == false)
{
// super should always be called
@@ -1937,12 +1944,17 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
}
else
{
+ if (fPendingSyncProperties.getPageSize() > 0)
+ {
+ fPageSize = fPendingSyncProperties.getPageSize();
+ fContentDescriptor.setNumLines(fPageSize);
+ }
+
BigInteger pageStartAddress = fPendingSyncProperties.getPageStartAddress();
if (pageStartAddress != null)
fContentDescriptor.setLoadAddress(pageStartAddress);
fTableViewer.setTopIndex(pageStartAddress);
-
}
refresh();
}
@@ -2008,61 +2020,6 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende
}
/**
- * Get properties from synchronizer and synchronize settings
- */
- private void synchronize()
- {
- if (!isDynamicLoad())
- {
- BigInteger pageStart = (BigInteger)getSynchronizedProperty(IInternalDebugUIConstants.PROPERTY_PAGE_START_ADDRESS);
- if (pageStart != null && fContentDescriptor != null && fContentDescriptor.getLoadAddress() != null)
- {
- if (!fContentDescriptor.getLoadAddress().equals(pageStart))
- handlePageStartAddressChanged(pageStart);
- }
- else if (pageStart != null)
- {
- handlePageStartAddressChanged(pageStart);
- }
- }
-
- Integer rowSize = (Integer) getSynchronizedProperty(AbstractTableRendering.PROPERTY_ROW_SIZE);
- Integer columnSize = (Integer) getSynchronizedProperty(AbstractTableRendering.PROPERTY_COL_SIZE);
- BigInteger selectedAddress = (BigInteger)getSynchronizedProperty(AbstractTableRendering.PROPERTY_SELECTED_ADDRESS);
- BigInteger topAddress = (BigInteger)getSynchronizedProperty(AbstractTableRendering.PROPERTY_TOP_ADDRESS);
-
- if (rowSize != null)
- {
- int rSize = rowSize.intValue();
- if (rSize > 0 && rSize != fBytePerLine) {
- rowSizeChanged(rSize);
- }
- }
-
- if (columnSize != null) {
- int colSize = columnSize.intValue();
- if (colSize > 0 && colSize != fColumnSize) {
- columnSizeChanged(colSize);
- }
- }
- if (topAddress != null) {
- if (!topAddress.equals(getTopVisibleAddress())) {
- if (selectedAddress != null) {
- if (!getSelectedAddress().equals(selectedAddress)) {
- selectedAddressChanged(selectedAddress);
- }
- }
- topVisibleAddressChanged(topAddress);
- }
- }
- if (selectedAddress != null) {
- if (selectedAddress.compareTo(getSelectedAddress()) != 0) {
- selectedAddressChanged(selectedAddress);
- }
- }
- }
-
- /**
* update selected address in synchronizer if update is true.
*/
private void updateSyncSelectedAddress(BigInteger address) {
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTextRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTextRendering.java
new file mode 100644
index 000000000..22197c618
--- /dev/null
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractAsyncTextRendering.java
@@ -0,0 +1,141 @@
+/*******************************************************************************
+ * Copyright (c) 2006 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.debug.internal.ui.views.memory.renderings;
+
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+
+import org.eclipse.debug.core.model.MemoryByte;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.debug.ui.IDebugUIConstants;
+
+/**
+ * Abstract implementation of a rendering that translates memory into
+ * text, displayed in a table.
+ * <p>
+ * Clients should subclass from this class if they wish to provide a table
+ * text rendering with a specific code page.
+ * </p>
+ * @since 3.2
+ */
+abstract public class AbstractAsyncTextRendering extends AbstractAsyncTableRendering {
+
+ private String fCodePage;
+
+ /**
+ * Constructs a text rendering of the specified type.
+ *
+ * @param renderingId memory rendering type identifier
+ */
+ public AbstractAsyncTextRendering(String renderingId)
+ {
+ super(renderingId);
+ }
+
+ /**
+ * Constructs a text rendering of the specified type on the given
+ * code page.
+ *
+ * @param renderingId memory rendering type identifier
+ * @param codePage the name of a supported
+ * {@link java.nio.charset.Charset </code>charset<code>}, for
+ * example <code>CP1252</code>
+ */
+ public AbstractAsyncTextRendering(String renderingId, String codePage)
+ {
+ super(renderingId);
+ fCodePage = codePage;
+ }
+
+ /**
+ * Sets the code page for this rendering. This does not cause
+ * the rendering to be updated with the new code page. Clients need
+ * to update the rendering manually when the code page is changed.
+ *
+ * @param codePage the name of a supported
+ * {@link java.nio.charset.Charset </code>charset<code>}, for
+ * example <code>CP1252</code>
+ */
+ public void setCodePage(String codePage)
+ {
+ fCodePage = codePage;
+ }
+
+ /**
+ * Returns the current code page used by this rendering. Returns null
+ * if not set.
+ * @return Returns the current code page used by this rendering. Returns null
+ * if not set.
+ */
+ public String getCodePage()
+ {
+ return fCodePage;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.ui.memory.AbstractTableRendering#getString(java.lang.String, java.math.BigInteger, org.eclipse.debug.core.model.MemoryByte[])
+ */
+ public String getString(String dataType, BigInteger address, MemoryByte[] data) {
+ try {
+ String paddedStr = DebugUIPlugin.getDefault().getPreferenceStore().getString(IDebugUIConstants.PREF_PADDED_STR);
+ if(fCodePage == null)
+ return ""; //$NON-NLS-1$
+
+ boolean invalid = false;
+ for (int i=0; i<data.length; i++)
+ {
+ if (!data[i].isReadable())
+ {
+ invalid = true;
+ break;
+ }
+ }
+
+ if (invalid)
+ {
+ StringBuffer strBuf = new StringBuffer();
+ for (int i=0; i<data.length; i++)
+ {
+ strBuf.append(paddedStr);
+ }
+ return strBuf.toString();
+ }
+
+ byte byteArray[] = new byte[data.length];
+ for (int i=0; i<byteArray.length; i++)
+ {
+ byteArray[i] = data[i].getValue();
+ }
+
+ return new String(byteArray, fCodePage);
+
+ } catch (UnsupportedEncodingException e) {
+ return "-- error --"; //$NON-NLS-1$
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see com.ibm.debug.extended.ui.AbstractTableViewTabLabelProvider#getBytes(java.lang.String)
+ */
+ public byte[] getBytes(String dataType, BigInteger address, MemoryByte[] currentValues, String data) {
+ try {
+
+ if (fCodePage == null)
+ return new byte[0];
+
+ byte[] bytes = data.getBytes(fCodePage);
+ return bytes;
+
+ } catch (UnsupportedEncodingException e) {
+ return new byte[0];
+ }
+ }
+}
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractIntegerRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractIntegerRendering.java
index 90f8eaa4b..54e78e03f 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractIntegerRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AbstractIntegerRendering.java
@@ -13,7 +13,6 @@ package org.eclipse.debug.internal.ui.views.memory.renderings;
import org.eclipse.debug.core.model.IMemoryBlock;
import org.eclipse.debug.core.model.IMemoryBlockExtension;
import org.eclipse.debug.core.model.MemoryByte;
-import org.eclipse.debug.ui.memory.AbstractTableRendering;
import org.eclipse.debug.ui.memory.IMemoryRenderingContainer;
/**
@@ -21,7 +20,7 @@ import org.eclipse.debug.ui.memory.IMemoryRenderingContainer;
* @since 3.1
*
*/
-public abstract class AbstractIntegerRendering extends AbstractTableRendering {
+public abstract class AbstractIntegerRendering extends AbstractAsyncTableRendering {
private int fDisplayEndianess = RenderingsUtil.ENDIANESS_UNKNOWN;
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java
index daf75fa34..2d47da226 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java
@@ -966,8 +966,11 @@ public class AsyncTableRenderingViewer extends AsyncVirtualContentTableViewer {
private void fireSelectionChanged(Object selectionKey)
{
- SelectionChangedEvent evt = new SelectionChangedEvent(this, new StructuredSelection(selectionKey));
- fireSelectionChanged(evt);
+ if (selectionKey != null)
+ {
+ SelectionChangedEvent evt = new SelectionChangedEvent(this, new StructuredSelection(selectionKey));
+ fireSelectionChanged(evt);
+ }
}
public void handlePresentationFailure(IAsynchronousRequestMonitor monitor, IStatus status) {
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java
index bac928940..0d1c7da76 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/HexRendering.java
@@ -16,12 +16,11 @@ import java.math.BigInteger;
import org.eclipse.debug.core.model.MemoryByte;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.ui.IDebugUIConstants;
-import org.eclipse.debug.ui.memory.AbstractTableRendering;
/**
* @since 3.1
*/
-public class HexRendering extends AbstractTableRendering {
+public class HexRendering extends AbstractAsyncTableRendering {
public HexRendering(String renderingId)
{
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/PendingSynchronizationProperties.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/PendingPropertyChanges.java
index 76984a4cb..82386b432 100644
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/PendingSynchronizationProperties.java
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/PendingPropertyChanges.java
@@ -13,17 +13,18 @@ package org.eclipse.debug.internal.ui.views.memory.renderings;
import java.math.BigInteger;
/**
- * Stores changes in sync properties when the rendering is hidden.
+ * Stores changes in properties when the rendering is hidden.
* These data will be used to sync up the rendering when it becomes visible again.
*
*/
-class PendingSynchronizationProperties
+class PendingPropertyChanges
{
BigInteger fTopVisibleAddress;
BigInteger fSelectedAddress;
BigInteger fPageStartAddress;
int fColumnSize = -1;
int fRowSize = -1;
+ int fPageSize = -1;
public int getColumnSize() {
return fColumnSize;
@@ -65,4 +66,14 @@ class PendingSynchronizationProperties
fTopVisibleAddress = topVisibleAddress;
}
+ public void setPageSize(int pageSize)
+ {
+ fPageSize = pageSize;
+ }
+
+ public int getPageSize()
+ {
+ return fPageSize;
+ }
+
} \ No newline at end of file

Back to the top