diff options
author | Samantha Chan | 2006-02-08 19:16:58 +0000 |
---|---|---|
committer | Samantha Chan | 2006-02-08 19:16:58 +0000 |
commit | 772d704e34124c76f8e67dbfe8dc834116847249 (patch) | |
tree | b6c103300bfd0dbd2390cc9f8e2725f56cb62396 /org.eclipse.debug.ui/ui/org/eclipse/debug/internal | |
parent | 88cbef2a0e28a761a5bc9d64061474219341814c (diff) | |
download | eclipse.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')
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 |