From f5900614c5e6317d64c0d6ebb6594b81be1290c6 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Fri, 31 Jan 2003 22:38:15 +0000 Subject: [PATCH] Implementing the 'Signals' view. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 9 + .../debug/core/ICSharedLibraryManager.java | 7 - .../cdt/debug/core/ICSignalManager.java | 22 ++ .../cdt/debug/core/model/ICSignal.java | 33 +++ .../debug/internal/core/CSignalManager.java | 113 +++++++++ .../internal/core/model/CDebugTarget.java | 35 ++- .../debug/internal/core/model/CSignal.java | 101 ++++++++ debug/org.eclipse.cdt.debug.ui/ChangeLog | 18 ++ .../icons/full/clcl16/signal_co.gif | Bin 0 -> 136 bytes .../icons/full/cview16/signals_view.gif | Bin 0 -> 883 bytes .../icons/full/dlcl16/signal_co.gif | Bin 0 -> 136 bytes .../icons/full/elcl16/signal_co.gif | Bin 0 -> 136 bytes .../icons/full/eview16/signals_view.gif | Bin 0 -> 883 bytes .../icons/full/obj16/signal_obj.gif | Bin 0 -> 129 bytes .../plugin.properties | 3 + debug/org.eclipse.cdt.debug.ui/plugin.xml | 33 ++- .../cdt/debug/internal/ui/CDebugImages.java | 2 + .../internal/ui/ICDebugHelpContextIds.java | 1 + .../ui/actions/SignalActionDelegate.java | 126 ++++++++++ .../ui/views/AbstractDebugEventHandler.java | 17 ++ .../ui/views/signals/SignalsView.java | 222 ++++++++++++++++++ .../signals/SignalsViewContentProvider.java | 94 ++++++++ .../signals/SignalsViewEventHandler.java | 77 ++++++ .../ui/views/signals/SignalsViewer.java | 112 +++++++++ 24 files changed, 1015 insertions(+), 10 deletions(-) create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSignalManager.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSignal.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSignalManager.java create mode 100644 debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/signal_co.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/cview16/signals_view.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/dlcl16/signal_co.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/signal_co.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/eview16/signals_view.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/icons/full/obj16/signal_obj.gif create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsView.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewContentProvider.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewEventHandler.java create mode 100644 debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewer.java diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index aea4b96b5c5..8285a4eda96 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,12 @@ +2003-01-31 Mikhail Khodjaiants + Implementing the 'Signals' view. + * ICSharedLibraryManager.java + * ICSignalManager.java: new + * ICSignal.java: new + * CSignalManager.java: new + * CSignal.java: new + * CDebugTarget.java + 2003-01-30 Mikhail Khodjaiants Create an address breakpoint if the source locator can not find the file specified by gdb. * CDebugTarget.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java index d7b27200383..c37ea0f9fce 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSharedLibraryManager.java @@ -5,7 +5,6 @@ */ package org.eclipse.cdt.debug.core; -import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; import org.eclipse.cdt.debug.core.model.ICSharedLibrary; import org.eclipse.core.runtime.IAdaptable; @@ -16,12 +15,6 @@ import org.eclipse.core.runtime.IAdaptable; */ public interface ICSharedLibraryManager extends IAdaptable { - void sharedLibraryLoaded( ICDISharedLibrary library ); - - void sharedLibraryUnloaded( ICDISharedLibrary library ); - - void symbolsLoaded( ICDISharedLibrary library ); - ICSharedLibrary[] getSharedLibraries(); void dispose(); diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSignalManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSignalManager.java new file mode 100644 index 00000000000..2caf7bd8805 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/ICSignalManager.java @@ -0,0 +1,22 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core; + +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.DebugException; + +/** + * Enter type comment. + * + * @since: Jan 31, 2003 + */ +public interface ICSignalManager extends IAdaptable +{ + ICSignal[] getSignals() throws DebugException; + + void dispose(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSignal.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSignal.java new file mode 100644 index 00000000000..3ab35fc1567 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/ICSignal.java @@ -0,0 +1,33 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core.model; + +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IDebugElement; + +/** + * Enter type comment. + * + * @since: Jan 31, 2003 + */ +public interface ICSignal extends IDebugElement +{ + String getName(); + + String getDescription(); + + boolean isPassEnabled(); + + boolean isStopEnabled(); + + void setPassEnabled( boolean enable ) throws DebugException; + + void setStopEnabled( boolean enable ) throws DebugException; + + void signal() throws DebugException; + + void dispose(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSignalManager.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSignalManager.java new file mode 100644 index 00000000000..b97baae3c30 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CSignalManager.java @@ -0,0 +1,113 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core; + +import org.eclipse.cdt.debug.core.ICSignalManager; +import org.eclipse.cdt.debug.core.cdi.model.ICDISignal; +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.cdt.debug.internal.core.model.CDebugTarget; +import org.eclipse.cdt.debug.internal.core.model.CSignal; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IDebugTarget; + +/** + * Enter type comment. + * + * @since: Jan 31, 2003 + */ +public class CSignalManager implements ICSignalManager +{ + private CDebugTarget fDebugTarget = null; + private ICSignal[] fSignals = null; + + /** + * Constructor for CSignalManager. + */ + public CSignalManager( CDebugTarget target ) + { + setDebugTarget( target ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSignalManager#getSignals() + */ + public ICSignal[] getSignals() throws DebugException + { + if ( fSignals == null ) + { + // load signals from target + } + return ( fSignals != null ) ? fSignals : new ICSignal[0]; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.ICSignalManager#dispose() + */ + public void dispose() + { + if ( fSignals != null ) + for ( int i = 0; i < fSignals.length; ++i ) + { + fSignals[i].dispose(); + } + fSignals = null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) + */ + public Object getAdapter( Class adapter ) + { + if ( adapter.equals( ICSignalManager.class ) ) + { + return this; + } + if ( adapter.equals( CSignalManager.class ) ) + { + return this; + } + if ( adapter.equals( IDebugTarget.class ) ) + { + return fDebugTarget; + } + return null; + } + + public IDebugTarget getDebugTarget() + { + return fDebugTarget; + } + + protected void setDebugTarget( CDebugTarget target ) + { + fDebugTarget = target; + } + + public void signalChanged( ICDISignal cdiSignal ) + { + CSignal signal = find( cdiSignal ); + if ( signal != null ) + { + signal.fireChangeEvent( DebugEvent.STATE ); + } + } + + private CSignal find( ICDISignal cdiSignal ) + { + try + { + ICSignal[] signals = getSignals(); + for ( int i = 0; i < signals.length; ++i ) + if ( signals[i].getName().equals( cdiSignal.getName() ) ) + return (CSignal)signals[i]; + } + catch( DebugException e ) + { + } + return null; + } +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index fa3e6f3f254..246c643a0eb 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -22,6 +22,7 @@ import org.eclipse.cdt.debug.core.CDebugModel; import org.eclipse.cdt.debug.core.ICBreakpointManager; import org.eclipse.cdt.debug.core.ICMemoryManager; import org.eclipse.cdt.debug.core.ICSharedLibraryManager; +import org.eclipse.cdt.debug.core.ICSignalManager; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointManager; @@ -51,6 +52,7 @@ import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint; import org.eclipse.cdt.debug.core.cdi.model.ICDIObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIRegisterObject; import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; +import org.eclipse.cdt.debug.core.cdi.model.ICDISignal; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; import org.eclipse.cdt.debug.core.cdi.model.ICDIWatchpoint; @@ -73,6 +75,7 @@ import org.eclipse.cdt.debug.core.sourcelookup.ISourceMode; import org.eclipse.cdt.debug.internal.core.CDebugUtils; import org.eclipse.cdt.debug.internal.core.CMemoryManager; import org.eclipse.cdt.debug.internal.core.CSharedLibraryManager; +import org.eclipse.cdt.debug.internal.core.CSignalManager; import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; import org.eclipse.cdt.debug.internal.core.breakpoints.CBreakpoint; import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceManager; @@ -227,6 +230,11 @@ public class CDebugTarget extends CDebugElement */ private CSharedLibraryManager fSharedLibraryManager; + /** + * A signal manager for this target. + */ + private CSignalManager fSignalManager; + /** * Whether the debugger process is default. */ @@ -272,6 +280,7 @@ public class CDebugTarget extends CDebugElement setThreadList( new ArrayList( 5 ) ); setDisassemblyManager( new DisassemblyManager( this ) ); setSharedLibraryManager( new CSharedLibraryManager( this ) ); + setSignalManager( new CSignalManager( this ) ); initialize(); DebugPlugin.getDefault().getLaunchManager().addLaunchListener( this ); DebugPlugin.getDefault().getExpressionManager().addExpressionListener( this ); @@ -877,9 +886,11 @@ public class CDebugTarget extends CDebugElement if ( adapter.equals( ICBreakpointManager.class ) ) return this; if ( adapter.equals( DisassemblyManager.class ) ) - return fDisassemblyManager; + return getDisassemblyManager(); if ( adapter.equals( ICSharedLibraryManager.class ) ) - return fSharedLibraryManager; + return getSharedLibraryManager(); + if ( adapter.equals( ICSignalManager.class ) ) + return getSignalManager(); return super.getAdapter( adapter ); } @@ -969,6 +980,10 @@ public class CDebugTarget extends CDebugElement { getSharedLibraryManager().symbolsLoaded( (ICDISharedLibrary)source ); } + if ( source instanceof ICDISignal ) + { + getSignalManager().signalChanged( (ICDISignal)source ); + } if ( source instanceof ICDIBreakpoint ) { handleBreakpointChangedEvent( (ICDIBreakpoint)source ); @@ -1127,6 +1142,7 @@ public class CDebugTarget extends CDebugElement DebugPlugin.getDefault().getLaunchManager().removeLaunchListener( this ); disposeMemoryManager(); disposeSharedLibraryManager(); + disposeSignalManager(); removeAllExpressions(); try { @@ -2328,6 +2344,21 @@ public class CDebugTarget extends CDebugElement fSharedLibraryManager.dispose(); } + protected void setSignalManager( CSignalManager sm ) + { + fSignalManager = sm; + } + + protected CSignalManager getSignalManager() + { + return fSignalManager; + } + + protected void disposeSignalManager() + { + fSignalManager.dispose(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.debug.core.ICBreakpointManager#getBreakpointAddress(IBreakpoint) */ diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java new file mode 100644 index 00000000000..f0b93aa9695 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CSignal.java @@ -0,0 +1,101 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.core.model; + +import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent; +import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener; +import org.eclipse.cdt.debug.core.cdi.model.ICDISignal; +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.debug.core.DebugException; + +/** + * Enter type comment. + * + * @since: Jan 31, 2003 + */ +public class CSignal extends CDebugElement implements ICSignal, ICDIEventListener +{ + private ICDISignal fCDISignal; + + /** + * Constructor for CSignal. + * @param target + */ + public CSignal( CDebugTarget target, ICDISignal cdiSignal ) + { + super( target ); + fCDISignal = cdiSignal; + getCDISession().getEventManager().addEventListener( this ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#getDescription() + */ + public String getDescription() + { + return ""; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#getName() + */ + public String getName() + { + return ""; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#isPassEnabled() + */ + public boolean isPassEnabled() + { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#isStopEnabled() + */ + public boolean isStopEnabled() + { + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#setPassEnabled(boolean) + */ + public void setPassEnabled( boolean enable ) throws DebugException + { + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#setStopEnabled(boolean) + */ + public void setStopEnabled( boolean enable ) throws DebugException + { + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvent(ICDIEvent) + */ + public void handleDebugEvent( ICDIEvent event ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#dispose() + */ + public void dispose() + { + getCDISession().getEventManager().removeEventListener( this ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.core.model.ICSignal#signal() + */ + public void signal() throws DebugException + { + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index 717f847bb99..b016bce7907 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,21 @@ +2003-01-31 Mikhail Khodjaiants + Implementing the 'Signals' view. + * CDebugImages.java + * ICDebugHelpContextIds.java + * SignalActionDelegate.java + * SignalsView.java: new + * SignalsViewContentProvider.java: new + * SignalsViewer.java: new + * SignalsViewEventHandler.java: new + * AbstractDebugEventHandler.java + * plugin.xml + * plugin.properties + icons/full/clcl16/signal_co.gif + icons/full/dlcl16/signal_co.gif + icons/full/elcl16/signal_co.gif + icons/full/eview6/signals_view.gif + icons/full/cview6/signals_view.gif + 2003-01-30 Mikhail Khodjaiants Disassembly editor input fix. * CDTDebugModelPresentation.java diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/signal_co.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/clcl16/signal_co.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a65ffa4f9e5ee9b219eb095af785d815d645c9c GIT binary patch literal 136 zcmZ?wbhEHb6krfw_{_lY|NsAM*RB=17|g6H@wL(Yb3o$HlljhyQVa|X3Hqvk?{}X$ zb7o$p@9tR{6EdBFf{H&`7=aXn4u}Am!OUVRaKdx--iTc>($RCSXmD~U+^CqLeoKzE literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/signals_view.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/cview16/signals_view.gif new file mode 100644 index 0000000000000000000000000000000000000000..f51bec130a495d5705e1b6b6177cea58aa521a86 GIT binary patch literal 883 zcmZ?wbhEHb6krfw_|Cxa=YYiD``v$@%-=mLV_v22giL2&8{I+|g9Lq5XGN)*RVDxb z|G#$a+L<$F7)HTp2n@Rr&;j`flouE{A{fLuWIQ%3IM~d=E*3DO;2;ANuZ)w6g#tqp zo2b6rni&kq4SmwA3bf~&((V)w#D2GnsY>jgG1&<#tijaqO65y jwpjBz1?61o(Y12X->fmk>8Ns$WKtW`!WAOIj11NQo)$8u literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/signal_co.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/elcl16/signal_co.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a65ffa4f9e5ee9b219eb095af785d815d645c9c GIT binary patch literal 136 zcmZ?wbhEHb6krfw_{_lY|NsAM*RB=17|g6H@wL(Yb3o$HlljhyQVa|X3Hqvk?{}X$ zb7o$p@9tR{6EdBFf{H&`7=aXn4u}Am!OUVRaKdx--iTc>($RCSXmD~U+^CqLeoKzE literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/icons/full/eview16/signals_view.gif b/debug/org.eclipse.cdt.debug.ui/icons/full/eview16/signals_view.gif new file mode 100644 index 0000000000000000000000000000000000000000..f51bec130a495d5705e1b6b6177cea58aa521a86 GIT binary patch literal 883 zcmZ?wbhEHb6krfw_|Cxa=YYiD``v$@%-=mLV_v22giL2&8{I+|g9Lq5XGN)*RVDxb z|G#$a+L<$F7)HTp2n@Rr&;j`flouE{A{fLuWIQ%3IM~d=E*3DO;2;ANuZ)w6g#tqp zo2b6rni&kq4SmwA3BZD;nufi}V literal 0 HcmV?d00001 diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties index 3dc22cce4d2..c927418b68d 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.properties +++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties @@ -9,6 +9,7 @@ providerName=Eclipse.org RegistersView.name=Registers MemoryView.name=Memory SharedLibrariesView.name=Shared Libraries +SignalsView.name=Signals CDebuggerPage.name=C Debugger UI Page MemoryPreferencePage.name=Memory View @@ -54,3 +55,5 @@ SourcePropertyPage.name=Source Lookup DisassemblyEditor.name=Disassembly Editor LoadSymbolsAction.label=Load Symbols +SignalAction.label=Signal + diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml index fc61a7d9dad..2d444b706e6 100644 --- a/debug/org.eclipse.cdt.debug.ui/plugin.xml +++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml @@ -55,6 +55,13 @@ class="org.eclipse.cdt.debug.internal.ui.views.sharedlibs.SharedLibrariesView" id="org.eclipse.cdt.debug.ui.SharedLibrariesView"> + + @@ -75,6 +82,11 @@ relationship="stack" id="org.eclipse.cdt.debug.ui.SharedLibrariesView"> + + @@ -654,7 +666,7 @@ + + + + + + + + diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java index a0161ed3a6c..aa43309d361 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDebugImages.java @@ -67,6 +67,7 @@ public class CDebugImages public static final String IMG_OBJS_FOLDER = NAME_PREFIX + "folder_obj.gif"; //$NON-NLS-1$ public static final String IMG_OBJS_LOADED_SHARED_LIBRARY = NAME_PREFIX + "library_syms_obj.gif"; //$NON-NLS-1$ public static final String IMG_OBJS_SHARED_LIBRARY = NAME_PREFIX + "library_obj.gif"; //$NON-NLS-1$ + public static final String IMG_OBJS_SIGNAL = NAME_PREFIX + "signal_obj.gif"; //$NON-NLS-1$ public static final String IMG_LCL_TYPE_NAMES = NAME_PREFIX + "tnames_co.gif"; //$NON-NLS-1$ public static final String IMG_LCL_CHANGE_REGISTER_VALUE = NAME_PREFIX + "change_reg_value_co.gif"; //$NON-NLS-1$ @@ -116,6 +117,7 @@ public class CDebugImages public static final ImageDescriptor DESC_OBJS_FOLDER = createManaged( T_OBJ, IMG_OBJS_FOLDER ); public static final ImageDescriptor DESC_OBJS_LOADED_SHARED_LIBRARY = createManaged( T_OBJ, IMG_OBJS_LOADED_SHARED_LIBRARY ); public static final ImageDescriptor DESC_OBJS_SHARED_LIBRARY = createManaged( T_OBJ, IMG_OBJS_SHARED_LIBRARY ); + public static final ImageDescriptor DESC_OBJS_SIGNAL = createManaged( T_OBJ, IMG_OBJS_SIGNAL ); public static final ImageDescriptor DESC_WIZBAN_ADD_SOURCE_LOCATION = createManaged( T_WIZBAN, IMG_WIZBAN_ADD_SOURCE_LOCATION ); //$NON-NLS-1$ public static final ImageDescriptor DESC_WIZBAN_ADD_PRJ_SOURCE_LOCATION = createManaged( T_WIZBAN, IMG_WIZBAN_ADD_PRJ_SOURCE_LOCATION ); //$NON-NLS-1$ public static final ImageDescriptor DESC_WIZBAN_ADD_DIR_SOURCE_LOCATION = createManaged( T_WIZBAN, IMG_WIZBAN_ADD_DIR_SOURCE_LOCATION ); //$NON-NLS-1$ diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java index 74da2ebbc28..8a21fcb7e1e 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java @@ -35,6 +35,7 @@ public interface ICDebugHelpContextIds public static final String REGISTERS_VIEW = PREFIX + "registers_view_context"; //$NON-NLS-1$ public static final String MEMORY_VIEW = PREFIX + "memory_view_context"; //$NON-NLS-1$ public static final String SHARED_LIBRARIES_VIEW = PREFIX + "shared_libraries_view_context"; //$NON-NLS-1$ + public static final String SIGNALS_VIEW = PREFIX + "signals_view_context"; //$NON-NLS-1$ // Preference pages public static final String MEMORY_PREFERENCE_PAGE = PREFIX + "memory_preference_page_context"; //$NON-NLS-1$ diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java new file mode 100644 index 00000000000..be2434d850c --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/SignalActionDelegate.java @@ -0,0 +1,126 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.actions; + +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.core.runtime.MultiStatus; +import org.eclipse.debug.core.DebugException; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.custom.BusyIndicator; +import org.eclipse.swt.widgets.Display; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; + +/** + * Enter type comment. + * + * @since: Jan 31, 2003 + */ +public class SignalActionDelegate implements IObjectActionDelegate +{ + private ICSignal fSignal = null; + + /** + * Constructor for SignalActionDelegate. + */ + public SignalActionDelegate() + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) + */ + public void setActivePart( IAction action, IWorkbenchPart targetPart ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#run(IAction) + */ + public void run( IAction action ) + { + if ( getSignal() != null ) + { + final MultiStatus ms = new MultiStatus( CDebugUIPlugin.getUniqueIdentifier(), + DebugException.REQUEST_FAILED, "Unable to load symbols of shared library.", null ); + BusyIndicator.showWhile( Display.getCurrent(), + new Runnable() + { + public void run() + { + try + { + doAction( getSignal() ); + } + catch( DebugException e ) + { + ms.merge( e.getStatus() ); + } + } + } ); + if ( !ms.isOK() ) + { + IWorkbenchWindow window = CDebugUIPlugin.getActiveWorkbenchWindow(); + if ( window != null ) + { + CDebugUIPlugin.errorDialog( "Operation failed.", ms ); + } + else + { + CDebugUIPlugin.log( ms ); + } + } + + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#selectionChanged(IAction, ISelection) + */ + public void selectionChanged( IAction action, ISelection selection ) + { + if ( selection instanceof IStructuredSelection ) + { + Object element = ((IStructuredSelection)selection).getFirstElement(); + if ( element instanceof ICSignal ) + { + boolean enabled = enablesFor( (ICSignal)element ); + action.setEnabled( enabled ); + if ( enabled ) + { + setSignal( (ICSignal)element ); + return; + } + } + } + action.setEnabled( false ); + setSignal( null ); + } + + protected void doAction( ICSignal signal ) throws DebugException + { + signal.signal(); + } + + private boolean enablesFor( ICSignal signal ) + { + return ( signal != null ); + } + + private void setSignal( ICSignal signal ) + { + fSignal = signal; + } + + protected ICSignal getSignal() + { + return fSignal; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractDebugEventHandler.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractDebugEventHandler.java index cedd98a8431..a8d77f729ee 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractDebugEventHandler.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractDebugEventHandler.java @@ -13,6 +13,7 @@ import org.eclipse.debug.ui.AbstractDebugView; import org.eclipse.jface.viewers.IBasicPropertyConstants; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; @@ -204,6 +205,22 @@ public abstract class AbstractDebugEventHandler implements IDebugEventSetListene return null; } + /** + * Returns this event handler's viewer as a table + * viewer or null if none. + * + * @return this event handler's viewer as a tree + * viewer or null if none + */ + protected TableViewer getTableViewer() + { + if ( getViewer() instanceof TableViewer ) + { + return (TableViewer)getViewer(); + } + return null; + } + /** * Returns whether this event handler's viewer is * currently available. diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsView.java new file mode 100644 index 00000000000..4451bee015f --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsView.java @@ -0,0 +1,222 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.views.signals; + +import org.eclipse.cdt.debug.core.ICSignalManager; +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.cdt.debug.internal.ui.CDebugImages; +import org.eclipse.cdt.debug.internal.ui.CImageDescriptor; +import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; +import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandlerView; +import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.debug.core.DebugException; +import org.eclipse.debug.core.model.IDebugElement; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jface.action.IMenuManager; +import org.eclipse.jface.action.IToolBarManager; +import org.eclipse.jface.action.Separator; +import org.eclipse.jface.util.IPropertyChangeListener; +import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.viewers.IContentProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.ISelectionListener; +import org.eclipse.ui.IWorkbenchActionConstants; +import org.eclipse.ui.IWorkbenchPart; + +/** + * Enter type comment. + * + * @since: Jan 30, 2003 + */ +public class SignalsView extends AbstractDebugEventHandlerView + implements ISelectionListener, + IPropertyChangeListener, + IDebugExceptionHandler +{ + /** + * Enter type comment. + * + * @since: Jan 30, 2003 + */ + public class SignalsViewLabelProvider extends LabelProvider implements ITableLabelProvider + { + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(Object, int) + */ + public Image getColumnImage( Object element, int columnIndex ) + { + if ( columnIndex == 0 ) + return CDebugUIPlugin.getImageDescriptorRegistry().get( new CImageDescriptor( CDebugImages.DESC_OBJS_SIGNAL, 0 ) ); + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(Object, int) + */ + public String getColumnText( Object element, int columnIndex ) + { + if ( element instanceof ICSignal ) + { + switch( columnIndex ) + { + case 0: + return ((ICSignal)element).getName(); + case 1: + return ( ((ICSignal)element).isPassEnabled() ) ? + SignalsViewer.YES_VALUE : SignalsViewer.NO_VALUE; + case 2: + return ( ((ICSignal)element).isStopEnabled() ) ? + SignalsViewer.YES_VALUE : SignalsViewer.NO_VALUE; + case 3: + return ((ICSignal)element).getDescription(); + } + } + return null; + } + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractDebugView#createViewer(Composite) + */ + protected Viewer createViewer( Composite parent ) + { + CDebugUIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener( this ); + + // add tree viewer + final SignalsViewer vv = new SignalsViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL ); + vv.setContentProvider( new SignalsViewContentProvider() ); + vv.setLabelProvider( new SignalsViewLabelProvider() ); + vv.setUseHashlookup( true ); + + // listen to selection in debug view + getSite().getPage().addSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); + setEventHandler( new SignalsViewEventHandler( this ) ); + + return vv; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractDebugView#createActions() + */ + protected void createActions() + { + // set initial content here, as viewer has to be set + setInitialContent(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractDebugView#getHelpContextId() + */ + protected String getHelpContextId() + { + return ICDebugHelpContextIds.SIGNALS_VIEW; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractDebugView#fillContextMenu(IMenuManager) + */ + protected void fillContextMenu( IMenuManager menu ) + { + menu.add( new Separator( IWorkbenchActionConstants.MB_ADDITIONS ) ); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.ui.AbstractDebugView#configureToolBar(IToolBarManager) + */ + protected void configureToolBar( IToolBarManager tbm ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.ui.ISelectionListener#selectionChanged(IWorkbenchPart, ISelection) + */ + public void selectionChanged( IWorkbenchPart part, ISelection selection ) + { + if ( selection instanceof IStructuredSelection ) + { + setViewerInput( (IStructuredSelection)selection ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(PropertyChangeEvent) + */ + public void propertyChange( PropertyChangeEvent event ) + { + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler#handleException(DebugException) + */ + public void handleException( DebugException e ) + { + } + + protected void setViewerInput( IStructuredSelection ssel ) + { + ICSignalManager sm = null; + if ( ssel != null && ssel.size() == 1 ) + { + Object input = ssel.getFirstElement(); + if ( input instanceof IDebugElement ) + { + sm = (ICSignalManager)((IDebugElement)input).getDebugTarget().getAdapter( ICSignalManager.class ); + } + } + + Object current = getViewer().getInput(); + if ( current != null && current.equals( sm ) ) + { + return; + } + showViewer(); + getViewer().setInput( sm ); + updateObjects(); + } + + /** + * Initializes the viewer input on creation + */ + protected void setInitialContent() + { + ISelection selection = + getSite().getPage().getSelection( IDebugUIConstants.ID_DEBUG_VIEW ); + if ( selection instanceof IStructuredSelection && !selection.isEmpty() ) + { + setViewerInput( (IStructuredSelection)selection ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchPart#dispose() + */ + public void dispose() + { + getSite().getPage().removeSelectionListener( IDebugUIConstants.ID_DEBUG_VIEW, this ); + CDebugUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener( this ); + super.dispose(); + } + + /** + * Creates this view's content provider. + * + * @return a content provider + */ + protected IContentProvider createContentProvider() + { + SignalsViewContentProvider cp = new SignalsViewContentProvider(); + cp.setExceptionHandler( this ); + return cp; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewContentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewContentProvider.java new file mode 100644 index 00000000000..9002e792bb9 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewContentProvider.java @@ -0,0 +1,94 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.views.signals; + +import org.eclipse.cdt.debug.core.ICSignalManager; +import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler; +import org.eclipse.cdt.debug.ui.CDebugUIPlugin; +import org.eclipse.debug.core.DebugException; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.Viewer; + +/** + * Enter type comment. + * + * @since: Jan 30, 2003 + */ +public class SignalsViewContentProvider implements IStructuredContentProvider +{ + /** + * Handler for exceptions as content is retrieved + */ + private IDebugExceptionHandler fExceptionHandler = null; + + /** + * Constructor for SignalsViewContentProvider. + */ + public SignalsViewContentProvider() + { + super(); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(Object) + */ + public Object[] getElements( Object inputElement ) + { + if ( inputElement instanceof ICSignalManager ) + { + try + { + return ((ICSignalManager)inputElement).getSignals(); + } + catch( DebugException e ) + { + if ( getExceptionHandler() != null ) + { + getExceptionHandler().handleException( e ); + } + else + { + CDebugUIPlugin.log( e ); + } + } + } + return new Object[0]; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#dispose() + */ + public void dispose() + { + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(Viewer, Object, Object) + */ + public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) + { + } + + /** + * Sets an exception handler for this content provider. + * + * @param handler debug exception handler or null + */ + protected void setExceptionHandler( IDebugExceptionHandler handler ) + { + fExceptionHandler = handler; + } + + /** + * Returns the exception handler for this content provider. + * + * @return debug exception handler or null + */ + protected IDebugExceptionHandler getExceptionHandler() + { + return fExceptionHandler; + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewEventHandler.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewEventHandler.java new file mode 100644 index 00000000000..4edb068e3ee --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewEventHandler.java @@ -0,0 +1,77 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.views.signals; + +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler; +import org.eclipse.debug.core.DebugEvent; +import org.eclipse.debug.core.model.IDebugTarget; +import org.eclipse.debug.ui.AbstractDebugView; + +/** + * Enter type comment. + * + * @since: Jan 30, 2003 + */ +public class SignalsViewEventHandler extends AbstractDebugEventHandler +{ + /** + * Constructor for SignalsViewEventHandler. + * @param view + */ + public SignalsViewEventHandler( AbstractDebugView view ) + { + super( view ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler#doHandleDebugEvents(DebugEvent[]) + */ + protected void doHandleDebugEvents( DebugEvent[] events ) + { + for( int i = 0; i < events.length; i++ ) + { + DebugEvent event = events[i]; + switch( event.getKind() ) + { + case DebugEvent.CREATE: + case DebugEvent.TERMINATE: + if ( event.getSource() instanceof IDebugTarget || + event.getSource() instanceof ICSignal ) + refresh(); + break; + case DebugEvent.CHANGE : + if ( event.getSource() instanceof ICSignal ) + refresh( event.getSource() ); + break; + } + } + } + + /** + * Refresh the given element in the viewer - must be called in UI thread. + */ + protected void refresh( Object element ) + { + if ( isAvailable() ) + { + getView().showViewer(); + getTableViewer().refresh( element ); + } + } + + /** + * Refresh the viewer - must be called in UI thread. + */ + public void refresh() + { + if ( isAvailable() ) + { + getView().showViewer(); + getTableViewer().refresh(); + } + } +} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewer.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewer.java new file mode 100644 index 00000000000..d7122200ae0 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/signals/SignalsViewer.java @@ -0,0 +1,112 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.internal.ui.views.signals; + +import org.eclipse.cdt.debug.core.model.ICSignal; +import org.eclipse.cdt.debug.internal.ui.PixelConverter; +import org.eclipse.jface.viewers.CellEditor; +import org.eclipse.jface.viewers.ComboBoxCellEditor; +import org.eclipse.jface.viewers.ICellModifier; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; + +/** + * Enter type comment. + * + * @since: Jan 30, 2003 + */ +public class SignalsViewer extends TableViewer +{ + // String constants + protected static final String YES_VALUE = "yes"; + protected static final String NO_VALUE = "no"; + + // Column properties + private static final String CP_NAME = "name"; + private static final String CP_PASS = "pass"; + private static final String CP_SUSPEND = "suspend"; + private static final String CP_DESCRIPTION = "description"; + + /** + * Constructor for SignalsViewer. + * @param parent + * @param style + */ + public SignalsViewer( Composite parent, int style ) + { + super( parent, style ); + Table table = getTable(); + table.setLinesVisible( true ); + table.setHeaderVisible( true ); + table.setLayoutData( new GridData( GridData.FILL_BOTH ) ); + + // Create the table columns + new TableColumn( table, SWT.NULL ); + new TableColumn( table, SWT.NULL ); + new TableColumn( table, SWT.NULL ); + new TableColumn( table, SWT.NULL ); + TableColumn[] columns = table.getColumns(); + columns[0].setResizable( true ); + columns[1].setResizable( false ); + columns[2].setResizable( false ); + columns[3].setResizable( true ); + + columns[0].setText( "Name" ); + columns[1].setText( "Pass" ); + columns[2].setText( "Suspend" ); + columns[3].setText( "Description" ); + + PixelConverter pc = new PixelConverter( parent ); + columns[0].setWidth( pc.convertWidthInCharsToPixels( 20 ) ); + columns[1].setWidth( pc.convertWidthInCharsToPixels( 15 ) ); + columns[2].setWidth( pc.convertWidthInCharsToPixels( 15 ) ); + columns[3].setWidth( pc.convertWidthInCharsToPixels( 50 ) ); + + CellEditor cellEditor = new ComboBoxCellEditor( table, new String[]{ YES_VALUE, NO_VALUE } ); + setCellEditors( new CellEditor[]{ null, cellEditor, cellEditor, null } ); + setColumnProperties( new String[]{ CP_NAME, CP_PASS, CP_SUSPEND, CP_DESCRIPTION } ); + setCellModifier( createCellModifier() ); + } + + private ICellModifier createCellModifier() + { + return new ICellModifier() + { + public boolean canModify( Object element, String property ) + { + if ( element instanceof ICSignal ) + { + return ((ICSignal)element).getDebugTarget().isSuspended(); + } + return false; + } + + public Object getValue( Object element, String property ) + { + if ( element instanceof ICSignal ) + { + if ( CP_PASS.equals( property ) ) + { + return ( ((ICSignal)element).isPassEnabled() ) ? new Integer( 0 ) : new Integer( 1 ); + } + else if ( CP_SUSPEND.equals( property ) ) + { + return ( ((ICSignal)element).isStopEnabled() ) ? new Integer( 0 ) : new Integer( 1 ); + } + } + return null; + } + + public void modify( Object element, String property, Object value ) + { + } + }; + } +}