1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 10:16:03 +02:00

Added support of context menu to the Disassembly view.

This commit is contained in:
Mikhail Khodjaiants 2004-04-28 22:35:27 +00:00
parent c59044d3ac
commit 8d88af92cd
2 changed files with 217 additions and 1 deletions

View file

@ -1,3 +1,7 @@
2004-04-28 Mikhail Khodjaiants
Added support of context menu to the Disassembly view.
* DisassemblyView.java
2004-04-28 Mikhail Khodjaiants 2004-04-28 Mikhail Khodjaiants
Added the overview ruler to the Disassembly view. Added the overview ruler to the Disassembly view.
* DisassemblyView.java * DisassemblyView.java

View file

@ -27,8 +27,11 @@ import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.model.IThread; import org.eclipse.debug.core.model.IThread;
import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.Separator;
import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.BadLocationException;
@ -51,7 +54,13 @@ import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.INullSelectionListener; import org.eclipse.ui.INullSelectionListener;
import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISelectionListener;
@ -63,6 +72,8 @@ import org.eclipse.ui.texteditor.AnnotationPreference;
import org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess; import org.eclipse.ui.texteditor.DefaultMarkerAnnotationAccess;
import org.eclipse.ui.texteditor.DefaultRangeIndicator; import org.eclipse.ui.texteditor.DefaultRangeIndicator;
import org.eclipse.ui.texteditor.ExtendedTextEditorPreferenceConstants; import org.eclipse.ui.texteditor.ExtendedTextEditorPreferenceConstants;
import org.eclipse.ui.texteditor.ITextEditorActionConstants;
import org.eclipse.ui.texteditor.IUpdate;
import org.eclipse.ui.texteditor.MarkerAnnotationPreferences; import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport; import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
@ -76,6 +87,78 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
IDebugExceptionHandler, IDebugExceptionHandler,
IDisassemblyListener { IDisassemblyListener {
/**
* Creates and returns the listener on this view's context menus.
*
* @return the menu listener
*/
protected final IMenuListener getContextMenuListener() {
if ( fMenuListener == null ) {
fMenuListener = new IMenuListener() {
public void menuAboutToShow( IMenuManager menu ) {
String id = menu.getId();
if ( getRulerContextMenuId().equals( id ) ) {
setFocus();
rulerContextMenuAboutToShow( menu );
}
else if ( getViewContextMenuId().equals( id ) ) {
setFocus();
viewContextMenuAboutToShow( menu );
}
}
};
}
return fMenuListener;
}
/**
* Creates and returns the listener on this editor's vertical ruler.
*
* @return the mouse listener
*/
protected final MouseListener getRulerMouseListener() {
if ( fMouseListener == null ) {
fMouseListener = new MouseListener() {
private boolean fDoubleClicked = false;
private void triggerAction( String actionID ) {
IAction action = getAction( actionID );
if ( action != null ) {
if ( action instanceof IUpdate )
((IUpdate)action).update();
if ( action.isEnabled() )
action.run();
}
}
public void mouseUp( MouseEvent e ) {
setFocus();
if ( 1 == e.button && !fDoubleClicked )
triggerAction( ITextEditorActionConstants.RULER_CLICK );
fDoubleClicked = false;
}
public void mouseDoubleClick( MouseEvent e ) {
if ( 1 == e.button ) {
fDoubleClicked = true;
triggerAction( ITextEditorActionConstants.RULER_DOUBLE_CLICK );
}
}
public void mouseDown( MouseEvent e ) {
StyledText text = getSourceViewer().getTextWidget();
if ( text != null && !text.isDisposed() ) {
Display display = text.getDisplay();
Point location = display.getCursorLocation();
getRulerContextMenu().setLocation( location.x, location.y );
}
}
};
}
return fMouseListener;
}
/** /**
* The width of the vertical ruler. * The width of the vertical ruler.
@ -92,6 +175,16 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
*/ */
private final static String CURRENT_LINE_COLOR = ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR; private final static String CURRENT_LINE_COLOR = ExtendedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR;
/**
* The view's context menu id.
*/
private String fViewContextMenuId;
/**
* The ruler's context menu id.
*/
private String fRulerContextMenuId;
/** /**
* The vertical ruler. * The vertical ruler.
*/ */
@ -133,11 +226,33 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
*/ */
private DisassemblyInstructionPointerAnnotation fInstrPointerAnnotation; private DisassemblyInstructionPointerAnnotation fInstrPointerAnnotation;
/**
* Context menu listener.
*/
private IMenuListener fMenuListener;
/**
* Vertical ruler mouse listener.
*/
private MouseListener fMouseListener;
/**
* The ruler context menu to be disposed.
*/
private Menu fRulerContextMenu;
/**
* The text context menu to be disposed.
*/
private Menu fTextContextMenu;
/** /**
* Constructor for DisassemblyView. * Constructor for DisassemblyView.
*/ */
public DisassemblyView() { public DisassemblyView() {
super(); super();
setViewContextMenuId( "#DisassemblyViewContext" ); //$NON-NLS-1$
setRulerContextMenuId( "#DisassemblyEditorRulerContext" ); //$NON-NLS-1$
fAnnotationPreferences = new MarkerAnnotationPreferences(); fAnnotationPreferences = new MarkerAnnotationPreferences();
} }
@ -170,7 +285,6 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
* @see org.eclipse.debug.ui.AbstractDebugView#createActions() * @see org.eclipse.debug.ui.AbstractDebugView#createActions()
*/ */
protected void createActions() { protected void createActions() {
// TODO Auto-generated method stub
} }
/* (non-Javadoc) /* (non-Javadoc)
@ -326,7 +440,9 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
if ( fDocumentProvider != null ) { if ( fDocumentProvider != null ) {
fDocumentProvider.dispose(); fDocumentProvider.dispose();
fDocumentProvider = null;
} }
super.dispose(); super.dispose();
} }
@ -453,6 +569,8 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
*/ */
public void createPartControl( Composite parent ) { public void createPartControl( Composite parent ) {
super.createPartControl( parent ); super.createPartControl( parent );
createViewContextMenu();
createRulerContextMenu();
if ( fSourceViewerDecorationSupport != null ) if ( fSourceViewerDecorationSupport != null )
fSourceViewerDecorationSupport.install( getEditorPreferenceStore() ); fSourceViewerDecorationSupport.install( getEditorPreferenceStore() );
} }
@ -600,4 +718,98 @@ public class DisassemblyView extends AbstractDebugEventHandlerView
fOverviewRuler = createOverviewRuler( getSharedColors() ); fOverviewRuler = createOverviewRuler( getSharedColors() );
return fOverviewRuler; return fOverviewRuler;
} }
protected String getRulerContextMenuId() {
return this.fRulerContextMenuId;
}
private void setRulerContextMenuId( String rulerContextMenuId ) {
Assert.isNotNull( rulerContextMenuId );
this.fRulerContextMenuId = rulerContextMenuId;
}
protected String getViewContextMenuId() {
return this.fViewContextMenuId;
}
private void setViewContextMenuId( String viewContextMenuId ) {
Assert.isNotNull( viewContextMenuId );
this.fViewContextMenuId = viewContextMenuId;
}
/**
* Sets up the ruler context menu before it is made visible.
*
* @param menu the menu
*/
protected void rulerContextMenuAboutToShow( IMenuManager menu ) {
menu.add( new Separator( ITextEditorActionConstants.GROUP_REST ) );
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
}
/**
* Sets up the view context menu before it is made visible.
*
* @param menu the menu
*/
protected void viewContextMenuAboutToShow( IMenuManager menu ) {
menu.add( new Separator( ITextEditorActionConstants.GROUP_REST ) );
menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) );
}
/**
* Convenience method to add the action installed under the given action id to the specified group of the menu.
* @param menu the menu to add the action to
* @param group the group in the menu
* @param actionId the id of the action to add
*/
protected final void addAction( IMenuManager menu, String group, String actionId ) {
IAction action = getAction( actionId );
if ( action != null ) {
if ( action instanceof IUpdate )
((IUpdate)action).update();
IMenuManager subMenu = menu.findMenuUsingPath( group );
if ( subMenu != null )
subMenu.add( action );
else
menu.appendToGroup( group, action );
}
}
protected Menu getRulerContextMenu() {
return this.fRulerContextMenu;
}
private void setRulerContextMenu( Menu rulerContextMenu ) {
this.fRulerContextMenu = rulerContextMenu;
}
private void createViewContextMenu() {
String id = getViewContextMenuId();
MenuManager manager = new MenuManager( id, id );
manager.setRemoveAllWhenShown( true );
manager.addMenuListener( getContextMenuListener() );
StyledText styledText = getSourceViewer().getTextWidget();
setTextContextMenu( manager.createContextMenu( styledText ) );
styledText.setMenu( getTextContextMenu() );
}
private void createRulerContextMenu() {
String id = getRulerContextMenuId();
MenuManager manager = new MenuManager( id, id );
manager.setRemoveAllWhenShown( true );
manager.addMenuListener( getContextMenuListener() );
Control rulerControl = fVerticalRuler.getControl();
setRulerContextMenu( manager.createContextMenu( rulerControl ) );
rulerControl.setMenu( getRulerContextMenu() );
rulerControl.addMouseListener( getRulerMouseListener() );
}
private Menu getTextContextMenu() {
return this.fTextContextMenu;
}
private void setTextContextMenu( Menu textContextMenu ) {
this.fTextContextMenu = textContextMenu;
}
} }