From 4f184d5fefdd49759073c14e64c3a45ba423aacb Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Thu, 12 Jun 2003 22:46:29 +0000 Subject: [PATCH] Fixing PR 38788: Ctrl-X, Ctrl-C, Ctrl-V, Ctrl-A, Ctrl-Z and Ctrl-Y keys don't work in the address field of the Memory view. --- debug/org.eclipse.cdt.debug.ui/ChangeLog | 8 ++ .../internal/ui/actions/MemoryViewAction.java | 81 +++++++++++++++++++ .../ui/views/memory/MemoryControlArea.java | 56 ++++++++++++- .../internal/ui/views/memory/MemoryView.java | 50 +++++++++++- .../ui/views/memory/MemoryViewer.java | 6 ++ 5 files changed, 199 insertions(+), 2 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryViewAction.java diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index c95825bd49c..ad4a260115f 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,11 @@ +2003-06-12 Mikhail Khodjaiants + Fixing "trivial" PR 38788: Ctrl-X, Ctrl-C, Ctrl-V, Ctrl-A, Ctrl-Z and Ctrl-Y keys don't work + in the address field of the Memory view. + * MemoryViewAction.java: new + * MemoryControlArea.java + * MemoryView.java + * MemoryViewer.java + 2003-06-10 Mikhail Khodjaiants Refactoring: moved the type and value related methods from ICVariable to ICType and ICValue. * CDTDebugModelPresentation.java diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryViewAction.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryViewAction.java new file mode 100644 index 00000000000..8d35dd8171d --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/MemoryViewAction.java @@ -0,0 +1,81 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ + +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.text.ITextOperationTarget; +import org.eclipse.ui.texteditor.IUpdate; + +/** + * Enter type comment. + * + * @since Jun 12, 2003 + */ +public class MemoryViewAction extends Action implements IUpdate +{ + /** The text operation code */ + private int fOperationCode = -1; + /** The text operation target */ + private ITextOperationTarget fOperationTarget; + /** The text operation target provider */ + private IAdaptable fTargetProvider; + + public MemoryViewAction( ITextOperationTarget target, int operationCode ) + { + super(); + fOperationCode = operationCode; + fOperationTarget = target; + update(); + } + + public MemoryViewAction( IAdaptable targetProvider, int operationCode ) + { + super(); + fTargetProvider = targetProvider; + fOperationCode = operationCode; + update(); + } + + /** + * The TextOperationAction implementation of this + * IUpdate method discovers the operation through the current + * editor's ITextOperationTarget adapter, and sets the + * enabled state accordingly. + */ + public void update() + { + if ( fTargetProvider != null && fOperationCode != -1 ) + { + ITextOperationTarget target = getTextOperationTarget(); + boolean isEnabled = ( target != null && target.canDoOperation( fOperationCode ) ); + setEnabled( isEnabled ); + } + } + + /** + * The TextOperationAction implementation of this + * IAction method runs the operation with the current + * operation code. + */ + public void run() + { + ITextOperationTarget target = getTextOperationTarget(); + if ( fOperationCode != -1 && target != null ) + target.doOperation( fOperationCode ); + } + + private ITextOperationTarget getTextOperationTarget() + { + if ( fOperationTarget == null ) + { + if ( fTargetProvider != null ) + return (ITextOperationTarget)fTargetProvider.getAdapter( ITextOperationTarget.class ); + } + return fOperationTarget; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java index d3bba69f064..fb600c09d33 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryControlArea.java @@ -14,10 +14,13 @@ import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; +import org.eclipse.swt.events.FocusEvent; +import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; @@ -37,7 +40,7 @@ import org.eclipse.swt.widgets.Text; * * @since Jul 25, 2002 */ -public class MemoryControlArea extends Composite +public class MemoryControlArea extends Composite implements ITextOperationTarget { private MemoryView fMemoryView; private MemoryPresentation fPresentation; @@ -120,7 +123,18 @@ public class MemoryControlArea extends Composite } } } ); + text.addFocusListener( new FocusListener() + { + public void focusGained( FocusEvent e ) + { + fMemoryView.updateObjects(); + } + public void focusLost( FocusEvent e ) + { + fMemoryView.updateObjects(); + } + } ); fEvaluateButton = new Button( composite, SWT.PUSH ); fEvaluateButton.setText( "Evaluate" ); fEvaluateButton.setToolTipText( "Evaluate expression to address" ); @@ -477,4 +491,44 @@ public class MemoryControlArea extends Composite } } } + + /* (non-Javadoc) + * @see org.eclipse.jface.text.ITextOperationTarget#canDoOperation(int) + */ + public boolean canDoOperation( int operation ) + { + switch( operation ) + { + case CUT: + case COPY: + return ( fAddressText != null && fAddressText.isFocusControl() && fAddressText.isEnabled() && fAddressText.getSelectionCount() > 0 ); + case PASTE: + case SELECT_ALL: + return ( fAddressText != null && fAddressText.isFocusControl() && fAddressText.isEnabled() ); + } + + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.text.ITextOperationTarget#doOperation(int) + */ + public void doOperation( int operation ) + { + switch( operation ) + { + case CUT: + fAddressText.cut(); + break; + case COPY: + fAddressText.copy(); + break; + case PASTE: + fAddressText.paste(); + break; + case SELECT_ALL: + fAddressText.setSelection( 0, fAddressText.getCharCount() ); + break; + } + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java index 480642a8730..20b3e88cd69 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryView.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.debug.internal.ui.actions.MemoryActionSelectionGroup; import org.eclipse.cdt.debug.internal.ui.actions.MemoryFormatAction; import org.eclipse.cdt.debug.internal.ui.actions.MemoryNumberOfColumnAction; import org.eclipse.cdt.debug.internal.ui.actions.MemorySizeAction; +import org.eclipse.cdt.debug.internal.ui.actions.MemoryViewAction; import org.eclipse.cdt.debug.internal.ui.actions.RefreshMemoryAction; import org.eclipse.cdt.debug.internal.ui.actions.ShowAsciiAction; import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants; @@ -31,6 +32,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; +import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.IContentProvider; @@ -43,6 +45,7 @@ import org.eclipse.swt.widgets.Control; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.eclipse.ui.texteditor.IUpdate; /** @@ -83,7 +86,33 @@ public class MemoryView extends AbstractDebugEventHandlerView */ protected void createActions() { - IAction action = new RefreshMemoryAction( (MemoryViewer)getViewer() ); + IAction action = null; + + action = new MemoryViewAction( this, ITextOperationTarget.CUT ); + action.setText( "Cut" ); + action.setToolTipText( "Cut" ); + action.setDescription( "Cut" ); + setGlobalAction( ITextEditorActionConstants.CUT, (MemoryViewAction)action ); + + action = new MemoryViewAction( this, ITextOperationTarget.COPY ); + action.setText( "Copy" ); + action.setToolTipText( "Copy" ); + action.setDescription( "Copy" ); + setGlobalAction( ITextEditorActionConstants.COPY, (MemoryViewAction)action ); + + action = new MemoryViewAction( this, ITextOperationTarget.PASTE ); + action.setText( "Paste" ); + action.setToolTipText( "Paste" ); + action.setDescription( "Paste" ); + setGlobalAction( ITextEditorActionConstants.PASTE, (MemoryViewAction)action ); + + action = new MemoryViewAction( this, ITextOperationTarget.SELECT_ALL ); + action.setText( "Select All" ); + action.setToolTipText( "Select All" ); + action.setDescription( "Select All" ); + setGlobalAction( ITextEditorActionConstants.SELECT_ALL, (MemoryViewAction)action ); + + action = new RefreshMemoryAction( (MemoryViewer)getViewer() ); action.setEnabled( false ); setAction( "RefreshMemory", action ); //$NON-NLS-1$ add( (RefreshMemoryAction)action ); @@ -377,4 +406,23 @@ public class MemoryView extends AbstractDebugEventHandlerView remove( (IUpdate)actions[i] ); } } + + private void setGlobalAction( String actionId, MemoryViewAction action ) + { + add( action ); + getViewSite().getActionBars().setGlobalActionHandler( actionId, action ); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) + */ + public Object getAdapter( Class adapter ) + { + if (ITextOperationTarget.class.equals( adapter ) ) + { + return ((MemoryViewer)getViewer()).getTextOperationTarget(); + } + + return super.getAdapter(adapter); + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java index 58414347ad9..376a932e7c0 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/memory/MemoryViewer.java @@ -8,6 +8,7 @@ package org.eclipse.cdt.debug.internal.ui.views.memory; import org.eclipse.cdt.debug.core.ICMemoryManager; import org.eclipse.cdt.debug.core.model.IFormattedMemoryBlock; import org.eclipse.debug.core.DebugException; +import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ContentViewer; import org.eclipse.jface.viewers.ISelection; @@ -280,4 +281,9 @@ public class MemoryViewer extends ContentViewer ((MemoryControlArea)fTabFolder.getSelection().getControl()).refresh(); } } + + protected ITextOperationTarget getTextOperationTarget() + { + return (MemoryControlArea)fTabFolder.getSelection().getControl(); + } }