----- 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>
<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.