From 35dfb7a9a99169b69b5926b3895894fe09389c5c Mon Sep 17 00:00:00 2001
From: Mikhail Khodjaiants
Date: Mon, 7 Apr 2008 17:31:51 +0000
Subject: Contributing new disassembly.
---
debug/org.eclipse.cdt.debug.ui/plugin.properties | 7 ++
debug/org.eclipse.cdt.debug.ui/plugin.xml | 40 ++++++++++
.../internal/ui/IInternalCDebugUIConstants.java | 7 ++
.../commands/DisassemblyDisplayModeHandler.java | 92 ++++++++++++++++++++++
.../ui/disassembly/editor/DisassemblyEditor.java | 2 +-
.../editor/DisassemblyEditorManager.java | 6 +-
.../editor/DisassemblyEditorPresentation.java | 46 +++++++++++
.../rendering/DisassemblyMemoryRendering.java | 2 +-
.../viewer/DisassemblyDocumentProvider.java | 3 +-
.../ui/disassembly/viewer/DisassemblyPane.java | 6 +-
.../ui/preferences/ICDebugPreferenceConstants.java | 4 +
.../eclipse/cdt/debug/ui/ICDebugUIConstants.java | 13 ++-
12 files changed, 215 insertions(+), 13 deletions(-)
create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java
create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorPresentation.java
(limited to 'debug')
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties
index ad3b46faef5..54b66e6c789 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.properties
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties
@@ -116,6 +116,13 @@ OpenDisassembly.label = Open Disassembly
OpenDisassembly.tooltip = Open disassembly window
DisassemblyEditor.name = Disassembly
DisassemblyRendering.name = Disassembly
+
+DisassemblyDisplayMode.name = Disassembly Display Mode
+DisassemblyDisplayMode.description = Disassembly display mode
+InstructionsDisplayMode.label = Show Instructions
+InstructionsDisplayMode.tooltip = Show disassembly instructions
+SourceDisplayMode.label = Show Source
+SourceDisplayMode.tooltip = Show source code
# new disassembly (end)
DebugTextHover.label=Debugger
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 14eaf08422a..2659851eb03 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -1560,6 +1560,19 @@
id="org.eclipse.cdt.debug.ui.command.openDisassembly"
name="%OpenDisassembly.name">
+
+
+
+
@@ -1584,6 +1597,33 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java
index 959c154e5b2..8b164103aaa 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/IInternalCDebugUIConstants.java
@@ -73,4 +73,11 @@ public interface IInternalCDebugUIConstants {
* Status code indicating an unexpected internal error.
*/
public static final int INTERNAL_ERROR = 150;
+
+ // new disassembly (start)
+
+ public static final String DISASM_DISPLAY_MODE_INSTRUCTIONS = "instructions"; //$NON-NLS-1$
+ public static final String DISASM_DISPLAY_MODE_SOURCE = "source"; //$NON-NLS-1$
+
+ // new disassembly (end)
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java
new file mode 100644
index 00000000000..c372cf0c121
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/commands/DisassemblyDisplayModeHandler.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2008 ARM Limited 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:
+ * ARM Limited - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.debug.internal.ui.disassembly.commands;
+
+import java.util.Map;
+
+import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
+import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditorInput;
+import org.eclipse.cdt.debug.internal.ui.disassembly.editor.DisassemblyEditorPresentation;
+import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.DisassemblyDocumentProvider;
+import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants;
+import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.commands.IElementUpdater;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.ui.menus.UIElement;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+
+public class DisassemblyDisplayModeHandler extends AbstractHandler implements IElementUpdater {
+
+ private static final String ID_PARAMETER_MODE = "org.eclipse.cdt.debug.command.disassemblyDisplayMode.parameterMode"; //$NON-NLS-1$
+
+ private boolean fShowInstructions = false;
+ private boolean fShowSource = false;
+
+ public DisassemblyDisplayModeHandler() {
+ super();
+ fShowInstructions = CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean( ICDebugPreferenceConstants.PREF_DISASM_SHOW_INSTRUCTIONS );
+ fShowSource = CDebugUIPlugin.getDefault().getPreferenceStore().getBoolean( ICDebugPreferenceConstants.PREF_DISASM_SHOW_SOURCE );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+ */
+ @Override
+ public Object execute( ExecutionEvent event ) throws ExecutionException {
+ DisassemblyEditorPresentation presentation = getEditorPresentation( event );
+ if ( presentation != null ) {
+ String param = event.getParameter( ID_PARAMETER_MODE );
+ if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_INSTRUCTIONS.equals( param ) ) {
+ fShowInstructions = !fShowInstructions;
+ presentation.setShowIntstructions( fShowInstructions );
+ }
+ else if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_SOURCE.equals( param ) ) {
+ fShowSource = !fShowSource;
+ presentation.setShowSource( fShowSource );
+ }
+ }
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.commands.IElementUpdater#updateElement(org.eclipse.ui.menus.UIElement, java.util.Map)
+ */
+ @SuppressWarnings("unchecked")
+ public void updateElement( UIElement element, Map parameters ) {
+ String param = (String)parameters.get( ID_PARAMETER_MODE );
+ if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_INSTRUCTIONS.equals( param ) ) {
+ element.setChecked( fShowInstructions );
+ }
+ else if ( IInternalCDebugUIConstants.DISASM_DISPLAY_MODE_SOURCE.equals( param ) ) {
+ element.setChecked( fShowSource );
+ }
+ }
+
+ private DisassemblyEditorPresentation getEditorPresentation( ExecutionEvent event ) throws ExecutionException {
+ ISelection s = HandlerUtil.getActiveMenuEditorInputChecked( event );
+ if ( s instanceof IStructuredSelection ) {
+ Object o = ((IStructuredSelection)s).getFirstElement();
+ if ( o instanceof DisassemblyEditorInput ) {
+ IDocumentProvider dp = CDebugUIPlugin.getDefault().getDisassemblyEditorManager().getDocumentProvider();
+ if ( dp instanceof DisassemblyDocumentProvider ) {
+ return (DisassemblyEditorPresentation)((DisassemblyDocumentProvider)dp).getDocumentPresentation( o );
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java
index 0a1c5349f45..1b002f14674 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditor.java
@@ -49,7 +49,7 @@ public class DisassemblyEditor extends EditorPart implements ITextEditor, IReusa
public DisassemblyEditor() {
super();
- fDisassemblyPane = new DisassemblyPane();
+ fDisassemblyPane = new DisassemblyPane( "#DisassemblyEditorContext", "#DisassemblyEditorRulerContext" ); //$NON-NLS-1$ //$NON-NLS-2$
}
/* (non-Javadoc)
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java
index c10d3159185..fc97f3826fe 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/editor/DisassemblyEditorManager.java
@@ -23,6 +23,7 @@ import org.eclipse.cdt.debug.core.model.ISteppingModeTarget;
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
import org.eclipse.cdt.debug.internal.ui.disassembly.viewer.DisassemblyDocumentProvider;
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
+import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -45,7 +46,6 @@ import org.eclipse.ui.progress.UIJob;
public class DisassemblyEditorManager implements IWindowListener, IDisassemblyContextListener, IPartListener2 {
- private static final String DEFAULT_EDITOR_ID = "org.eclipse.cdt.debug.ui.disassemblyEditor"; //$NON-NLS-1$
private Map