From 0cf8c37fd5795482be551842ee38d5e5cd587538 Mon Sep 17 00:00:00 2001 From: Mikhail Khodjaiants Date: Mon, 3 Feb 2003 23:08:44 +0000 Subject: [PATCH] Implementing the 'Signals' view. --- debug/org.eclipse.cdt.debug.core/ChangeLog | 5 ++++ .../debug/internal/core/CSignalManager.java | 26 +++++++++++++++++-- .../debug/internal/core/model/CSignal.java | 22 +++++++++++++--- debug/org.eclipse.cdt.debug.ui/ChangeLog | 6 +++++ .../ui/CDTDebugModelPresentation.java | 4 +-- .../ui/actions/SignalActionDelegate.java | 6 ++++- .../ui/views/signals/SignalsViewer.java | 23 ++++++++++++++++ 7 files changed, 83 insertions(+), 9 deletions(-) diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index 2654a3e1db2..5bee6a82939 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,8 @@ +2003-02-03 Mikhail Khodjaiants + Implementing the 'Signals' view. + * CSignalManager.java: new + * CSignal.java: new + 2003-02-03 Alain Magloire * src/org/eclipse/cdt/debug/core/cdi/event/ICDIExitEvent.java: 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 index b97baae3c30..253b506cc34 100644 --- 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 @@ -5,7 +5,10 @@ */ package org.eclipse.cdt.debug.internal.core; +import java.util.ArrayList; + import org.eclipse.cdt.debug.core.ICSignalManager; +import org.eclipse.cdt.debug.core.cdi.CDIException; 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; @@ -23,6 +26,7 @@ public class CSignalManager implements ICSignalManager { private CDebugTarget fDebugTarget = null; private ICSignal[] fSignals = null; + private boolean fIsDisposed = false; /** * Constructor for CSignalManager. @@ -37,9 +41,21 @@ public class CSignalManager implements ICSignalManager */ public ICSignal[] getSignals() throws DebugException { - if ( fSignals == null ) + if ( !isDisposed() && fSignals == null ) { - // load signals from target + try + { + ICDISignal[] cdiSignals = ((CDebugTarget)getDebugTarget()).getCDISession().getSignalManager().getSignals(); + ArrayList list = new ArrayList( cdiSignals.length ); + for ( int i = 0; i < cdiSignals.length; ++i ) + { + list.add( new CSignal( (CDebugTarget)getDebugTarget(), cdiSignals[i] ) ); + } + fSignals = (ICSignal[])list.toArray( new ICSignal[list.size()] ); + } + catch( CDIException e ) + { + } } return ( fSignals != null ) ? fSignals : new ICSignal[0]; } @@ -55,6 +71,7 @@ public class CSignalManager implements ICSignalManager fSignals[i].dispose(); } fSignals = null; + fIsDisposed = true; } /* (non-Javadoc) @@ -110,4 +127,9 @@ public class CSignalManager implements ICSignalManager } return null; } + + protected boolean isDisposed() + { + return fIsDisposed; + } } 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 index f0b93aa9695..58a46d33cd8 100644 --- 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 @@ -5,6 +5,7 @@ */ package org.eclipse.cdt.debug.internal.core.model; +import org.eclipse.cdt.debug.core.cdi.CDIException; 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; @@ -36,7 +37,7 @@ public class CSignal extends CDebugElement implements ICSignal, ICDIEventListene */ public String getDescription() { - return ""; + return getCDISignal().getDescription(); } /* (non-Javadoc) @@ -44,7 +45,7 @@ public class CSignal extends CDebugElement implements ICSignal, ICDIEventListene */ public String getName() { - return ""; + return getCDISignal().getName(); } /* (non-Javadoc) @@ -52,7 +53,7 @@ public class CSignal extends CDebugElement implements ICSignal, ICDIEventListene */ public boolean isPassEnabled() { - return false; + return !getCDISignal().isIgnore(); } /* (non-Javadoc) @@ -60,7 +61,7 @@ public class CSignal extends CDebugElement implements ICSignal, ICDIEventListene */ public boolean isStopEnabled() { - return false; + return getCDISignal().isStopSet(); } /* (non-Javadoc) @@ -97,5 +98,18 @@ public class CSignal extends CDebugElement implements ICSignal, ICDIEventListene */ public void signal() throws DebugException { + try + { + getCDISignal().signal(); + } + catch( CDIException e ) + { + targetRequestFailed( e.getMessage(), null ); + } + } + + protected ICDISignal getCDISignal() + { + return fCDISignal; } } diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index b016bce7907..f3b3f671d59 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,9 @@ +2003-02-03 Mikhail Khodjaiants + Implementing the 'Signals' view. + * SignalActionDelegate.java + * SignalsViewer.java: new + * CDTDebugModelPresentation.java + 2003-01-31 Mikhail Khodjaiants Implementing the 'Signals' view. * CDebugImages.java diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java index 3a2ac8c86b5..9d03c4f4aa1 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/CDTDebugModelPresentation.java @@ -358,7 +358,7 @@ public class CDTDebugModelPresentation extends LabelProvider if ( info != null && info instanceof ICDISignalExitInfo) { ICDISignalExitInfo sigInfo = (ICDISignalExitInfo)info; - label += MessageFormat.format( " (Signal ''{0}'' received. Meaning: {1})", + label += MessageFormat.format( " (Signal ''{0}'' received. Description: {1})", new String[] { sigInfo.getName(), sigInfo.getDescription() } ); } else if ( info != null && info instanceof ICDIExitInfo ) @@ -374,7 +374,7 @@ public class CDTDebugModelPresentation extends LabelProvider { ICDISignal signal = ((ICDISignalReceived)info).getSignal(); String label = target.getName() + - MessageFormat.format( " (Signal ''{0}'' received. Meaning: {1})", + MessageFormat.format( " (Signal ''{0}'' received. Description: {1})", new String[] { signal.getName(), signal.getDescription() } ); return label; } 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 index be2434d850c..222129897d3 100644 --- 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 @@ -5,6 +5,8 @@ */ package org.eclipse.cdt.debug.internal.ui.actions; +import java.text.MessageFormat; + import org.eclipse.cdt.debug.core.model.ICSignal; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.core.runtime.MultiStatus; @@ -49,7 +51,9 @@ public class SignalActionDelegate implements IObjectActionDelegate if ( getSignal() != null ) { final MultiStatus ms = new MultiStatus( CDebugUIPlugin.getUniqueIdentifier(), - DebugException.REQUEST_FAILED, "Unable to load symbols of shared library.", null ); + DebugException.REQUEST_FAILED, + MessageFormat.format( "Unable to deliver the signal ''{0}'' to the target.", new String[] { getSignal().getName() } ), + null ); BusyIndicator.showWhile( Display.getCurrent(), new Runnable() { 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 index d7122200ae0..1e9f9eea306 100644 --- 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 @@ -7,9 +7,11 @@ 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.debug.core.DebugException; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.ComboBoxCellEditor; import org.eclipse.jface.viewers.ICellModifier; +import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; @@ -106,6 +108,27 @@ public class SignalsViewer extends TableViewer public void modify( Object element, String property, Object value ) { + IStructuredSelection sel = (IStructuredSelection)getSelection(); + Object entry = sel.getFirstElement(); + if ( entry instanceof ICSignal && value instanceof Integer ) + { + try + { + boolean enable = ( ((Integer)value).intValue() == 0 ); + if ( CP_PASS.equals( property ) ) + { + ((ICSignal)entry).setPassEnabled( enable ); + } + else if ( CP_SUSPEND.equals( property ) ) + { + ((ICSignal)entry).setStopEnabled( enable ); + } + refresh( entry ); + } + catch( DebugException e ) + { + } + } } }; }