Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-debug-dev] Actions in Debug View

You shouldn't use the 'SwitchToDissassemblyAction' class as a prototype for your task.
Look at the 'org.eclipse.debug.internal.ui.actions.OpenBreakpointMarkerAction' class and the 'getDisassemblyEditorInput' method of 'org.eclipse.cdt.debug.internal.ui.CDTDebugModelPresentation'. You will find there everything you need.
----- Original Message -----
Sent: Tuesday, April 22, 2003 1:22 AM
Subject: Re: [cdt-debug-dev] Actions in Debug View

  Hi!
 
 Thanks for the answer!!!!
 
 I added info about my action in 3 places in plugin.xml
 
 I post some strings from plugin.xml and source code of the action Please, take look at this!!!
 
   1 place:
 
         <action
               label="%SwitchToDisassemblyAction.label"
               icon="icons/full/clcl16/disassembly.gif"
               helpContextId="switch_to_disassembly_action_context"
               class="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyActionDelegate"
               menubarPath="renderGroup"
               enablesFor="1"
               id="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyActionDelegate">
            <enablement>
               <pluginState
                     value="activated"
                     id="org.eclipse.cdt.debug.ui">
               </pluginState>
            </enablement>
         </action>
         <action
               label="%SwitchToDisassemblyByAddressAction.label"
               icon="icons/full/clcl16/addrdisassembly.gif"
               helpContextId="switch_to_addrdisassembly_action_context"
               class="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyByAddressActionDelegate"
               menubarPath="renderGroup"
               enablesFor="1"
               id="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyByAddressActionDelegate">
            <enablement>
               <pluginState
                     value="activated"
                     id="org.eclipse.cdt.debug.ui">
               </pluginState>
            </enablement>
         </action>
 
   2 place:
 
         <action
               toolbarPath="renderGroup"
               id="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyActionDelegate"
               hoverIcon="icons/full/clcl16/disassembly.gif"
               class="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyActionDelegate"
               disabledIcon="icons/full/dlcl16/disassembly.gif"
               enablesFor="1"
               icon="icons/full/elcl16/disassembly.gif"
               helpContextId="switch_to_disassembly_action_context"
               label="%SwitchToDisassemblyAction.label"
               tooltip="%SwitchToDisassemblyAction.tooltip">
            <enablement>
               <pluginState
                     value="activated"
                     id="org.eclipse.cdt.debug.ui">
               </pluginState>
            </enablement>
         </action>
         <action
               toolbarPath="renderGroup"
               id="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyByAddressActionDelegate"
               hoverIcon="icons/full/clcl16/addrdisassembly.gif"
               class="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyByAddressActionDelegate"
               disabledIcon="icons/full/dlcl16/addrdisassembly.gif"
               enablesFor="1"
               icon="icons/full/elcl16/addrdisassembly.gif"
               helpContextId="switch_to_addrdisassembly_action_context"
               label="%SwitchToDisassemblyByAddressAction.label"
               tooltip="%SwitchToDisassemblyByAddressAction.tooltip">
            <enablement>
               <pluginState
                     value="activated"
                     id="org.eclipse.cdt.debug.ui">
               </pluginState>
            </enablement>
         </action>
 
3 place:
 
         <action
               id="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyActionDelegate">
         </action>
         <action
               id="org.eclipse.cdt.debug.internal.ui.actions.SwitchToDisassemblyByAddressActionDelegate">
         </action>
 
 
 
Source of action:
 

package org.eclipse.cdt.debug.internal.ui.actions;

public class SwitchToDisassemblyByAddressActionDelegate extends AbstractListenerActionDelegate {

static public IViewPart fViewPart = null;

 

/* (non-Javadoc)

* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractDebugActionDelegate#doAction(Object)

*/

protected void doAction( Object element ) throws DebugException

{

if ( element != null && element instanceof CDebugElement )

{

InputDialog dialog = new InputDialog( getPage().getWorkbenchWindow().getShell(),

"Add start address",

"Enter address:",

null,

null );

ISourceMode sourceMode = (ISourceMode)((CDebugElement)element).getDebugTarget().getAdapter( ISourceMode.class );

if ( sourceMode != null )

{

sourceMode.setMode( ( sourceMode.getMode() == ISourceMode.MODE_SOURCE ) ? ISourceMode.MODE_DISASSEMBLY : ISourceMode.MODE_SOURCE );

if (sourceMode.getMode() == ISourceMode.MODE_DISASSEMBLY ) {

if ( dialog.open() == Window.OK ) {

CStackFrame sframe = (CStackFrame)element;

if (dialog.getValue().trim().equals("") != true) {

sframe.setSpecAddress(Long.parseLong(dialog.getValue().trim()));

CDebugCorePlugin.Disasm_mode = true;

}

}

}

((CDebugElement)element).fireChangeEvent( DebugEvent.CLIENT_REQUEST );

if ( fViewPart != null && fViewPart instanceof ISelectionChangedListener )

{

final AbstractDebugView view = (AbstractDebugView)fViewPart;

fViewPart.getViewSite().getShell().getDisplay().asyncExec(

new Runnable()

{

public void run()

{

Viewer viewer = view.getViewer();

viewer.setSelection( viewer.getSelection() );

} );

}

}

}

}

/* (non-Javadoc)

* @see org.eclipse.cdt.debug.internal.ui.actions.AbstractDebugActionDelegate#isEnabledFor(Object)

*/

protected boolean isEnabledFor( Object element )

{

if ( element != null && element instanceof CDebugElement )

{

return ( ((CDebugElement)element).getDebugTarget().getAdapter( ISourceMode.class ) != null );

}

return false;

}

/**

* @see AbstractDebugActionDelegate#enableForMultiSelection()

*/

protected boolean enableForMultiSelection()

{

return false;

}

/**

* @see AbstractDebugActionDelegate#getStatusMessage()

*/

protected String getStatusMessage()

{

return "Exceptions occurred attempting to switch to disassembly/source mode.";

}

/**

* @see AbstractDebugActionDelegate#getErrorDialogMessage()

*/

protected String getErrorDialogMessage()

{

return "Switch to disassembly/source mode failed.";

}

/**

* @see AbstractDebugActionDelegate#getErrorDialogTitle()

*/

protected String getErrorDialogTitle()

{

return "Switch to disassembly/source mode";

}

/* (non-Javadoc)

* @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection)

*/

public void selectionChanged( IAction action, ISelection selection )

{

super.selectionChanged( action, selection );

boolean checked = false;

if ( selection != null && selection instanceof IStructuredSelection )

{

Object element = ((IStructuredSelection)selection).getFirstElement();

if ( element != null && element instanceof CDebugElement )

{

ISourceMode sourceMode = (ISourceMode)((CDebugElement)element).getDebugTarget().getAdapter( ISourceMode.class );

checked = ( sourceMode != null && sourceMode.getMode() == ISourceMode.MODE_DISASSEMBLY );

}

}

action.setChecked( checked );

}

/* (non-Javadoc)

* @see org.eclipse.ui.IViewActionDelegate#init(IViewPart)

*/

public void init( IViewPart view )

{

super.init( view );

fViewPart = view;

CDebugUIPlugin.fView = fViewPart;

}

}

  Thanks!!!!
 
  Igor S. Zamyatin
  Interstron Ltd.
 
----- Original Message -----
Sent: Monday, April 21, 2003 9:48 PM
Subject: Re: [cdt-debug-dev] Actions in Debug View

Did you change the action identifier in plugin.xml when copying?
----- Original Message -----
Sent: Friday, April 18, 2003 8:02 AM
Subject: [cdt-debug-dev] Actions in Debug View

      Hi all!
 
May be my question is not suitable for this mailing list but my problem conserning CDT Debugger too.
 
   I have a task to create an action which can demonstrate disassembler input from any address that user will wish.    So I've created an action which almost completely repeats CDT's "SwitchToDisassemblyAction". I've named it "SwitchToDisassemblyByAddressAction".   Only difference between them is that InputDialog creates in "doAction" function in order to input address. And there appeared one problem: all this two action work together.  I mean their buttons in Debug view become pressed or unpressed at the same time. And their menu items in popup menu become checked or unchecked simultaneously too.
 
   I don't understand why it happens, may be someone, who deals with Disassembler and Launch View, have some thoughts about it.
 
  Thanks in advance,
 
  Igor S. Zamyatin
  Interstron Ltd.
 
    
 
 

Back to the top