Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java1041
1 files changed, 0 insertions, 1041 deletions
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
deleted file mode 100644
index d49156999..000000000
--- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/AsyncTableRenderingViewer.java
+++ /dev/null
@@ -1,1041 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2008 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.math.BigInteger;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.debug.internal.core.IInternalDebugCoreConstants;
-import org.eclipse.debug.internal.ui.DebugUIMessages;
-import org.eclipse.debug.internal.ui.DebugUIPlugin;
-import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
-import org.eclipse.debug.internal.ui.memory.provisional.AbstractAsyncTableRendering;
-import org.eclipse.debug.internal.ui.viewers.AbstractUpdatePolicy;
-import org.eclipse.debug.internal.ui.viewers.AsynchronousModel;
-import org.eclipse.debug.internal.ui.viewers.model.provisional.IStatusMonitor;
-import org.eclipse.debug.internal.ui.views.memory.MemoryViewUtil;
-import org.eclipse.jface.resource.JFaceResources;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.IBaseLabelProvider;
-import org.eclipse.jface.viewers.ICellEditorListener;
-import org.eclipse.jface.viewers.ICellModifier;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.TableCursor;
-import org.eclipse.swt.custom.TableEditor;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TraverseEvent;
-import org.eclipse.swt.events.TraverseListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.Widget;
-import org.eclipse.ui.progress.UIJob;
-
-public class AsyncTableRenderingViewer extends AsyncVirtualContentTableViewer {
-
- private AbstractAsyncTableRendering fRendering;
-
- // selection keys
- private Object fPendingSelection;
- private Object fSelectionKey;
-
- // cursor and associated listeners
- private TableCursor fTableCursor;
- private KeyAdapter fCursorKeyAdapter;
- private TraverseListener fCursorTraverseListener;
- private MouseAdapter fCursorMouseListener;
- private SelectionAdapter fCursorSelectionListener;
-
- // cursor editor and associated listeners
- private TableEditor fCursorEditor;
- private KeyAdapter fEditorKeyListener;
- private CellEditorListener fCellEditorListener;
-
- private class CellEditorListener implements ICellEditorListener {
-
- private CellEditor fEditor;
- private int fRow;
- private int fCol;
-
- public CellEditorListener(int row, int col, CellEditor editor) {
- fEditor = editor;
- fRow = row;
- fCol = col;
- }
-
- public void applyEditorValue() {
- fEditor.removeListener(this);
- modifyValue(fRow, fCol, fEditor.getValue());
- }
-
- public void cancelEditor() {
- fEditor.removeListener(this);
- }
-
- public void editorValueChanged(boolean oldValidState,
- boolean newValidState) {
- }
-
- public int getRow()
- {
- return fRow;
- }
-
- public int getCol()
- {
- return fCol;
- }
- }
-
- private boolean fPendingFormatViewer;
-
-
- public AsyncTableRenderingViewer(AbstractAsyncTableRendering rendering, Composite parent, int style) {
- super(parent, style);
- fRendering = rendering;
-
- getTable().addMouseListener(new MouseAdapter() {
- public void mouseDown(MouseEvent e) {
- handleTableMouseEvent(e);
- }});
-
- createCursor(getTable());
- }
-
- public AbstractUpdatePolicy createUpdatePolicy() {
- return new AsyncTableRenderingUpdatePolicy();
- }
-
- public AbstractAsyncTableRendering getRendering()
- {
- return fRendering;
- }
-
- private void createCursor(Table table)
- {
- fTableCursor = new TableCursor(table, SWT.NONE);
-
- Display display = fTableCursor.getDisplay();
-
- // set up cursor color
- fTableCursor.setBackground(display.getSystemColor(SWT.COLOR_LIST_SELECTION));
- fTableCursor.setForeground(display.getSystemColor(SWT.COLOR_LIST_SELECTION_TEXT));
-
- fTableCursor.setFont(JFaceResources.getFont(IInternalDebugUIConstants.FONT_NAME));
-
- fCursorKeyAdapter = new KeyAdapter() {
- public void keyPressed(KeyEvent e)
- {
- handleCursorKeyPressed(e);
- }
- };
-
- fTableCursor.addKeyListener(fCursorKeyAdapter);
-
- fCursorTraverseListener = new TraverseListener() {
- public void keyTraversed(TraverseEvent e) {
- handleCursorTraverseEvt(e);
- }};
-
- fTableCursor.addTraverseListener(fCursorTraverseListener);
-
- fCursorMouseListener = new MouseAdapter() {
- public void mouseDown(MouseEvent e) {
- handleCursorMouseEvent(e);
- }};
- fTableCursor.addMouseListener(fCursorMouseListener);
-
- // cursor may be disposed before disposed is called
- // remove listeners whenever the cursor is disposed
- fTableCursor.addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- if (fTableCursor == null)
- return;
- fTableCursor.removeTraverseListener(fCursorTraverseListener);
- fTableCursor.removeKeyListener(fCursorKeyAdapter);
- fTableCursor.removeMouseListener(fCursorMouseListener);
- fTableCursor.removeSelectionListener(fCursorSelectionListener);
- }});
-
- fCursorSelectionListener = new SelectionAdapter() {
- public void widgetSelected(SelectionEvent e) {
- handleCursorMoved();
- }
- };
- fTableCursor.addSelectionListener(fCursorSelectionListener);
- fCursorEditor = new TableEditor (getTable());
- }
-
- private void handleCursorKeyPressed(KeyEvent event)
- {
- if (event.character == '\r' && event.getSource() instanceof TableCursor)
- {
- activateCellEditor(null);
- return;
- }
-
- if (MemoryViewUtil.isValidEditEvent(event.keyCode))
- {
- // activate edit as soon as user types something at the cursor
- if (event.getSource() instanceof TableCursor)
- {
- int col = fTableCursor.getColumn();
- if (getCellEditors()[col] instanceof TextCellEditor)
- {
- String initialValue = String.valueOf(event.character);
- activateCellEditor(initialValue);
- }
- }
- }
- }
-
- private void handleCursorMouseEvent(MouseEvent e){
- if (e.button == 1)
- {
- int col = fTableCursor.getColumn();
- if (col > 0 && col <= (getNumCol()))
- activateCellEditor(null);
- }
- }
-
- private void handleCursorTraverseEvt(TraverseEvent e){
- if (fTableCursor.getRow() == null)
- return;
-
- Table table = (Table)fTableCursor.getParent();
- int row = table.indexOf(fTableCursor.getRow());
- int col = fTableCursor.getColumn();
- if (col == getNumCol() && e.keyCode == SWT.ARROW_RIGHT)
- {
- if (row + 1>= table.getItemCount())
- {
- return;
- }
-
- row = row +1;
- col = 0;
- fTableCursor.setSelection(row, col);
- }
- if (col <= 1 && e.keyCode == SWT.ARROW_LEFT)
- {
- if (row-1 < 0)
- {
- return;
- }
-
- row = row - 1;
- col = getNumCol()+1;
- fTableCursor.setSelection(row, col);
- }
-
- handleCursorMoved();
- }
-
- /**
- * Update selected address.
- * Load more memory if required.
- */
- private void handleCursorMoved()
- {
- fSelectionKey = getSelectionKeyFromCursor();
- fPendingSelection = null;
-
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- System.out.println(Thread.currentThread().getName() + " cursor moved selection is: " + ((BigInteger)fSelectionKey).toString(16)); //$NON-NLS-1$
-
- // now check to see if the cursor is approaching buffer limit
- handleScrollBarSelection();
- fireSelectionChanged(fSelectionKey);
- }
-
- private int getNumCol() {
-
- int bytesPerLine = fRendering.getBytesPerLine();
- int columnSize = fRendering.getBytesPerColumn();
-
- return bytesPerLine/columnSize;
- }
-
- /**
- * Sets the cursor at the specified address
- * @param key selection key
- */
- public void setSelection(Object key)
- {
- fPendingSelection = key;
- attemptSetKeySelection();
- }
-
- public Object getSelectionKey()
- {
- return fSelectionKey;
- }
-
- private synchronized void attemptSetKeySelection()
- {
- if (fPendingSelection != null) {
- doAttemptSetKeySelection(fPendingSelection);
- }
-
- }
-
- synchronized private Object doAttemptSetKeySelection(final Object key)
- {
- if (getBufferTopKey() == null || getBufferEndKey() == null)
- return key;
-
- // calculate selected row address
- int[] location = getCoordinatesFromKey(key);
- if(location.length == 0)
- {
- return key;
- }
-
- UIJob uiJob = new UIJob("Set Cursor Selection"){ //$NON-NLS-1$
-
- public IStatus runInUIThread(IProgressMonitor monitor) {
- try {
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- System.out.println(getRendering() + " set cursor selection " + ((BigInteger)key).toString(16)); //$NON-NLS-1$
-
- if (fPendingSelection != null && fPendingSelection != key)
- return Status.OK_STATUS;
-
- if (fTableCursor.isDisposed())
- return Status.OK_STATUS;
-
- // by the time this is called, the location may not be valid anymore
- int[] newLocation = getCoordinatesFromKey(key);
- if (newLocation.length == 0)
- {
- Object selectionKey = getSelectionKey();
- fPendingSelection = selectionKey;
- return Status.OK_STATUS;
- }
-
- fSelectionKey = key;
- fPendingSelection = null;
-
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- {
- System.out.println(getRendering() + " set cursor selection, row is " + getTable().getItem(newLocation[0]).getData()); //$NON-NLS-1$
- System.out.println(getRendering() + " set cursor selection, model is " + getVirtualContentModel().getElement(newLocation[0])); //$NON-NLS-1$
- }
-
- fTableCursor.setSelection(newLocation[0], newLocation[1]);
- showTableCursor(true);
-
- // show the column for the selection
- getTable().showColumn(getTable().getColumn(newLocation[1]));
-
- int topIndex = getTable().getTopIndex();
- Object topKey = getVirtualContentModel().getKey(topIndex);
- setTopIndexKey(topKey);
-
-
- } catch (RuntimeException e) {
-
- // by the time this is called, the selection may no longer
- // get the latest selection and try to set selection again
- Object selectionKey = getSelectionKey();
- fPendingSelection = selectionKey;
- doAttemptSetKeySelection(selectionKey);
- }
- return Status.OK_STATUS;
- }};
-
- uiJob.setSystem(true);
- uiJob.schedule();
-
- return null;
- }
-
- /**
- *
- * @param key
- * @return the coordinates of the key
- * Element[0] is the row index
- * Element[1] is the column index
- */
- private int[] getCoordinatesFromKey(Object key)
- {
- final int row = indexOf(key);
-
- if (row == -1)
- {
- return new int[0];
- }
-
- Object element = getVirtualContentModel().getElement(row);
- final int col = columnOf(element, key);
-
- if (col == -1)
- {
- return new int[0];
- }
- return new int[]{row, col};
- }
-
- private Object getSelectionKeyFromCursor()
- {
- int idx = getTable().indexOf(fTableCursor.getRow());
- int col = fTableCursor.getColumn();
-
- return getVirtualContentModel().getKey(idx, col);
- }
-
- private Object getBufferTopKey()
- {
- return getKey(0);
- }
-
- private Object getBufferEndKey()
- {
- AbstractVirtualContentTableModel model = getVirtualContentModel();
-
- if (model != null)
- return getKey(model.getElements().length-1);
- return null;
- }
-
- public int indexOf(Object key)
- {
- int idx = -1;
- AbstractVirtualContentTableModel model = getVirtualContentModel();
- if (model != null)
- idx = model.indexOfKey(key);
- return idx;
- }
-
- private int columnOf(Object element, Object key)
- {
- int idx = -1;
- AbstractVirtualContentTableModel model = getVirtualContentModel();
- if (model != null)
- {
- idx = model.columnOf(element, key);
- }
- return idx;
- }
-
- public Object getKey(int index)
- {
- AbstractVirtualContentTableModel model = getVirtualContentModel();
- if (model != null)
- {
- Object key = model.getKey(index);
- return key;
- }
- return null;
- }
-
- public Object getKey(int row, int col)
- {
- AbstractVirtualContentTableModel model = getVirtualContentModel();
- if (model != null)
- return model.getKey(row, col);
- return null;
- }
-
-
- protected synchronized void preservingSelection(Runnable updateCode) {
- Object oldTopIndexKey = null;
-
- if (getPendingSetTopIndexKey() == null) {
- // preserve selection
- oldTopIndexKey = getTopIndexKey();
- }
- else
- {
- oldTopIndexKey = getPendingSetTopIndexKey();
- }
- Object oldSelectionKey = null;
- try {
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- {
- if (oldTopIndexKey != null)
- System.out.println(getRendering() + " preserve top index: " + ((BigInteger)oldTopIndexKey).toString(16)); //$NON-NLS-1$
- else
- System.out.println("top index key is null, nothing to preserve"); //$NON-NLS-1$
- }
-
- if (fPendingSelection != null)
- oldSelectionKey = fPendingSelection;
- else
- oldSelectionKey = getSelectionKey();
-
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- {
- if (oldTopIndexKey != null)
- System.out.println(getRendering() + " preserve selection: " + ((BigInteger)oldSelectionKey).toString(16)); //$NON-NLS-1$
- else
- System.out.println("selection key is null, nothing to preserve"); //$NON-NLS-1$
- }
-
- // perform the update
- updateCode.run();
-
- } finally {
-
- if (oldSelectionKey != null)
- {
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- System.out.println(getRendering() + " preserved selection " + ((BigInteger)oldSelectionKey).toString(16)); //$NON-NLS-1$
- setSelection(oldSelectionKey);
- }
-
- if (getPendingSetTopIndexKey() != null)
- {
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- System.out.println(getRendering() + " finished top index: " + ((BigInteger)oldTopIndexKey).toString(16)); //$NON-NLS-1$
- setTopIndex(getPendingSetTopIndexKey());
- }
- else if (oldTopIndexKey != null)
- {
- setTopIndex(oldTopIndexKey);
-
- if (AsyncVirtualContentTableViewer.DEBUG_DYNAMIC_LOADING)
- System.out.println(getRendering() + " finished top index: " + ((BigInteger)oldTopIndexKey).toString(16)); //$NON-NLS-1$
- }
- }
- }
-
- public void dispose()
- {
- super.dispose();
-
- if (fTableCursor != null && !fTableCursor.isDisposed())
- {
- fCursorEditor.dispose();
- fCursorEditor = null;
-
- fTableCursor.removeTraverseListener(fCursorTraverseListener);
- fTableCursor.removeKeyListener(fCursorKeyAdapter);
- fTableCursor.removeMouseListener(fCursorMouseListener);
- fTableCursor.removeSelectionListener(fCursorSelectionListener);
-
- fTableCursor.dispose();
- fTableCursor = null;
- }
- }
-
- public void showTableCursor(final boolean show)
- {
-
- Display display = DebugUIPlugin.getDefault().getWorkbench().getDisplay();
- if (Thread.currentThread() == display.getThread())
- {
- if (!fTableCursor.isDisposed())
- {
- if (fTableCursor.isVisible() != show)
- fTableCursor.setVisible(show);
- }
- }
- else
- {
- UIJob job = new UIJob("show table cursor"){ //$NON-NLS-1$
-
- public IStatus runInUIThread(IProgressMonitor monitor) {
- if (!fTableCursor.isDisposed())
- {
- if (fTableCursor.isVisible() != show)
- fTableCursor.setVisible(show);
- }
- return Status.OK_STATUS;
- }};
-
- job.setSystem(true);
- job.schedule();
- }
- }
-
- private void handleTableMouseEvent(MouseEvent e) {
- // figure out new cursor position based on here the mouse is pointing
- TableItem[] tableItems = getTable().getItems();
- TableItem selectedRow = null;
- int colNum = -1;
- int numCol = getColumnProperties().length;
-
- for (int j=0; j<tableItems.length; j++)
- {
- TableItem item = tableItems[j];
- if (item.getData() != null)
- {
- for (int i=0; i<numCol; i++)
- {
- Rectangle bound = item.getBounds(i);
- if (bound.contains(e.x, e.y))
- {
- colNum = i;
- selectedRow = item;
- break;
- }
- }
- }
- if (colNum >= 0)
- break;
- }
-
- // if column position cannot be determined, return
- if (colNum < 1)
- return;
-
- // handle user mouse click onto table
- // move cursor to new position
- if (selectedRow != null)
- {
- int row = getTable().indexOf(selectedRow);
- showTableCursor(true);
- fTableCursor.setSelection(row, colNum);
-
- // manually call this since we don't get an event when
- // the table cursor changes selection.
- handleCursorMoved();
-
- fTableCursor.setFocus();
- }
- }
-
- /**
- * Activate cell editor and prefill it with initial value.
- * If initialValue is null, use cell content as initial value
- * @param initialValue
- */
- private void activateCellEditor(String initialValue) {
-
- final int col = fTableCursor.getColumn();
- final int row = indexOf(fSelectionKey);
-
- if (row < 0)
- return;
-
- // do not allow user to edit address column
- if (col == 0 || col > getNumCol()) {
- return;
- }
-
- ICellModifier cellModifier = null;
-
- cellModifier = getCellModifier();
-
- TableItem tableItem = getTable().getItem(row);
-
- Object element = tableItem.getData();
-
- if (element != null) {
- Object property = getColumnProperties()[col];
- Object value = cellModifier.getValue(element, (String) property);
- boolean canEdit = cellModifier
- .canModify(element, (String) property);
-
- if (!canEdit)
- return;
-
- CellEditor editor = getCellEditors()[col];
- if (editor != null) {
- // The control that will be the editor must be a child of the
- // Table
- Control control = editor.getControl();
-
- Object cellValue = null;
-
- if (initialValue != null) {
- cellValue = initialValue;
- } else {
- cellValue = value;
- }
-
- editor.setValue(cellValue);
-
- fCursorEditor.horizontalAlignment = SWT.LEFT;
- fCursorEditor.grabHorizontal = true;
-
- // Open the editor editor in selected column of the selected
- // row.
- fCursorEditor.setEditor(control, tableItem, col);
-
- // Assign focus to the editor control
- editor.setFocus();
-
- if (initialValue != null && control instanceof Text) {
- ((Text) control).clearSelection();
- }
-
- control.setFont(JFaceResources
- .getFont(IInternalDebugUIConstants.FONT_NAME));
-
- // add listeners for the editor control
- addListeners(control);
-
- fCellEditorListener = new CellEditorListener(row, col, editor);
- editor.addListener(fCellEditorListener);
-
- // move cursor below editor control
- fTableCursor.moveBelow(control);
- }
- }
- }
-
- private void deactivateEditor(CellEditor editor)
- {
- removeListeners(editor.getControl());
- fTableCursor.moveAbove(editor.getControl());
- fTableCursor.setFocus();
- }
-
- /*
- * @param editor
- */
- private void addListeners(Control control) {
-
- fEditorKeyListener = new KeyAdapter() {
- public void keyPressed(KeyEvent e) {
- handleKeyEventInEditor(e);
- }
- };
-
- control.addKeyListener(fEditorKeyListener);
- }
-
- /**
- * @param event
- */
- private void handleKeyEventInEditor(KeyEvent event) {
-
- final KeyEvent e = event;
- Display.getDefault().asyncExec(new Runnable()
- {
- public void run()
- {
- Object obj = e.getSource();
- if (obj instanceof Control)
- {
- Control control = (Control)obj;
- int row = fCellEditorListener.getRow();
- int col = fCellEditorListener.getCol();
-
- try
- {
- switch (e.keyCode)
- {
- case 0:
- doHandleKeyEvent(row, col);
- break;
- case SWT.ESC:
- cancelEditing(row, col);
- break;
- default :
- doHandleKeyEvent(row, col);
- break;
- }
- }
- catch (NumberFormatException e1)
- {
- MemoryViewUtil.openError(DebugUIMessages.MemoryViewCellModifier_failure_title,
- DebugUIMessages.MemoryViewCellModifier_data_is_invalid, null);
-
- fTableCursor.setSelection(row, col);
- handleCursorMoved();
-
- removeListeners(control);
- }
- }
- }
- });
- }
-
- private void doHandleKeyEvent(int row, int col)
- {
- int numCharsPerByte = fRendering.getNumCharsPerByte();
- if (numCharsPerByte > 0)
- {
- Object value = getCellEditors()[col].getValue();
- if (getCellEditors()[col] instanceof TextCellEditor && value instanceof String)
- {
- String str = (String)value;
-
- if (str.length() > fRendering.getBytesPerColumn()*numCharsPerByte)
- {
- String newValue = str;
-
- CellEditor editor = getCellEditors()[col];
- editor.setValue(newValue.substring(0,fRendering.getBytesPerColumn()* numCharsPerByte));
-
- // We want to call modify value here to avoid race condition.
- // Relying on the editor event to modify the cell may introduce a race condition since
- // we try to activate another cell editor in this method. If we happen to use same cell
- // editor in the next activation, the value of the editor may be incorrect when the listener gets the event.
- // We may write the wrong value in that case. Calling modify here allows us to capture the value
- // now and send that to the model.
- fCellEditorListener.cancelEditor();
- deactivateEditor(editor);
- modifyValue(fCellEditorListener.getRow(), fCellEditorListener.getCol(), editor.getValue());
-
- // if cursor is at the end of a line, move to next line
- if (col >= getNumCol())
- {
- col = 1;
- row++;
- }
- else
- {
- col++;
- }
-
- fTableCursor.setSelection(row, col);
- handleCursorMoved();
-
- activateCellEditor(newValue.substring(fRendering.getBytesPerColumn()*numCharsPerByte));
- }
- }
- }
- }
-
- private void cancelEditing(int row, int col)
- {
- // if user has pressed escape, do not commit the changes
- // remove listener to avoid getting notified on the modify value
- fCellEditorListener.cancelEditor();
- deactivateEditor(getCellEditors()[col]);
-
- fTableCursor.setSelection(row, col);
- handleCursorMoved();
-
- // cursor needs to have focus to remove focus from cell editor
- fTableCursor.setFocus();
- }
-
- /**
- * @param control
- */
- private void removeListeners(Control control) {
-
- control.removeKeyListener(fEditorKeyListener);
- }
-
- /**
- * Modify value and send new value to debug adapter
- * @param row
- * @param col
- * @param newValue
- * @throws NumberFormatException
- */
- private void modifyValue(int row, int col, Object newValue) throws NumberFormatException
- {
- if (newValue instanceof String && ((String)newValue).length() == 0)
- {
- // do not do anything if user has not entered anything
- return;
- }
-
- if (row >= 0 && row < getTable().getItemCount())
- {
- TableItem tableItem = getTable().getItem(row);
-
- Object property = getColumnProperties()[col];
- getCellModifier().modify(tableItem, (String)property, newValue);
- }
- }
-
- public TableCursor getCursor()
- {
- return fTableCursor;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.viewers.ContentViewer#getLabelProvider()
- * Implemented minimum to work with PrintTableRendering action.
- * This is not a real table labe provider, only goes to the table
- * to get the text at the specified row and column.
- */
- public IBaseLabelProvider getLabelProvider() {
- return new ITableLabelProvider() {
-
- public Image getColumnImage(Object element, int columnIndex) {
- return null;
- }
-
- public String getColumnText(Object element, int columnIndex) {
- int idx = getVirtualContentModel().indexOfElement(element);
- if (idx >= 0 )
- {
- TableItem item = getTable().getItem(idx);
- return item.getText(columnIndex);
- }
- return IInternalDebugCoreConstants.EMPTY_STRING;
- }
-
- public void addListener(ILabelProviderListener listener) {
- }
-
- public void dispose() {
- }
-
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- public void removeListener(ILabelProviderListener listener) {
- }};
- }
-
- public void formatViewer()
- {
- if (getModel() == null || !hasPendingUpdates())
- doFormatViewer();
- else
- // do not format in the middle of an update
- // set pending update and will format when update is completed
- fPendingFormatViewer = true;
- }
-
- /**
- *
- */
- private void doFormatViewer() {
- fPendingFormatViewer = false;
- preservingSelection(new Runnable() {
-
- public void run() {
- // causes the content of the table viewer to be replaced
- // without asking content adapter for content
- AbstractVirtualContentTableModel model = getVirtualContentModel();
- if (model != null)
- {
- model.handleViewerChanged();
- }
- }});
- }
-
- private void fireSelectionChanged(Object selectionKey)
- {
- if (selectionKey != null)
- {
- SelectionChangedEvent evt = new SelectionChangedEvent(this, new StructuredSelection(selectionKey));
- fireSelectionChanged(evt);
- }
- }
-
- public void handlePresentationFailure(IStatusMonitor monitor, IStatus status) {
- super.handlePresentationFailure(monitor, status);
- }
-
- public void refresh(boolean getContent)
- {
- if (getContent)
- refresh();
- else
- {
- preservingSelection(new Runnable() {
-
- public void run() {
- AbstractVirtualContentTableModel model = getVirtualContentModel();
- if (model != null)
- {
- Object[] elements = model.getElements();
- model.remove(elements);
- model.add(elements);
- }
- }});
- }
- }
-
- protected void tableTopIndexSetComplete() {
-
- if (!fTableCursor.isDisposed())
- {
- // TODO: work around swt bug, must force a table cursor redraw after top index is changed
- // BUG 130130
- int[] coordinates = getCoordinatesFromKey(getSelectionKey());
- if (coordinates.length > 0)
- fTableCursor.setVisible(true);
- else
- fTableCursor.setVisible(false);
- }
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.debug.internal.ui.viewers.model.provisional.viewers.AsynchronousViewer#getModel()
- */
- public AsynchronousModel getModel() {
- return super.getModel();
- }
-
- // TODO: need pluggable model to be truly flexible
- protected AbstractVirtualContentTableModel createVirtualContentTableModel() {
- return new TableRenderingModel(this);
- }
-
- protected void updateComplete(IStatusMonitor monitor) {
- super.updateComplete(monitor);
-
- if (!hasPendingUpdates() && !fTableCursor.isDisposed())
- {
- attemptSetKeySelection();
- fTableCursor.redraw();
-
- // if the viewer has pending top index, then more updates will come in
- // and the cursor should not be redrawn yet.
- if (!hasPendingSetTopIndex())
- {
- preservingSelection(new Runnable() {
-
- public void run() {
-
- int[] coordinates = getCoordinatesFromKey(getSelectionKey());
- if (coordinates.length > 0)
- fTableCursor.setVisible(true);
- else
- fTableCursor.setVisible(false);
- }});
- }
- }
-
- if (!hasPendingUpdates() && fPendingFormatViewer)
- {
- formatViewer();
- resizeColumnsToPreferredSize();
- }
- }
-
- protected void clear(Widget item) {
- super.clear(item);
-
- // this table viewer assumes that #getData will return null
- // set data to null when clearing an item.
- // only visible item will get SET DATA event again and at that time
- // the viewer would set the data back.
- if (item instanceof TableItem)
- {
- item.setData(null);
- }
- }
-}

Back to the top