@@ -122,12 +122,6 @@ public class WaveformView implements IWaveformView {
122122
123123 protected ObservableList <TrackEntry > streams ;
124124
125- private boolean waveformsContainTx =false ;
126-
127- public boolean isWaveformsContainTx () {
128- return waveformsContainTx ;
129- }
130-
131125 int selectedMarker = 0 ;
132126
133127 private int tracksVerticalHeight ;
@@ -166,8 +160,7 @@ public void mouseUp(MouseEvent e) {
166160 : streams .subList (firstIdx , lastIdx + 1 );
167161 setSelection (new StructuredSelection (res ), (e .stateMask & SWT .CTRL ) != 0 , false );
168162 } else
169- setSelection (new StructuredSelection (entry .getValue ()), (e .stateMask & SWT .CTRL ) != 0 ,
170- false );
163+ setSelection (new StructuredSelection (entry .getValue ()), (e .stateMask & SWT .CTRL ) != 0 , false );
171164 } else {
172165 setSelection (new StructuredSelection (entry .getValue ()), (e .stateMask & SWT .CTRL ) != 0 , false );
173166 }
@@ -295,8 +288,15 @@ protected long snapOffsetToEvent(Point p) {
295288 @ Override
296289 public void handleEvent (Event e ) {
297290 switch (e .type ) {
298- // case SWT.MouseWheel:
299- // break;
291+ case SWT .MouseWheel :
292+ if ((e .stateMask & SWT .CTRL ) != 0 ) {
293+ int zoom = waveformCanvas .getZoomLevel ();
294+ if (e .count <0 )
295+ waveformCanvas .setZoomLevel (zoom +1 );
296+ else
297+ waveformCanvas .setZoomLevel (zoom -1 );
298+ }
299+ break ;
300300 case SWT .MouseDown :
301301 start = new Point (e .x , e .y );
302302 end = new Point (e .x , e .y );
@@ -469,6 +469,17 @@ public void widgetSelected(SelectionEvent e) {
469469
470470 toolTipHandler = new ToolTipHandler (parent .getShell ());
471471 toolTipHandler .activateHoverHelp (waveformCanvas );
472+ // This is the filter that prevents it
473+ getControl ().getDisplay ().addFilter (SWT .MouseWheel , new Listener () {
474+ @ Override
475+ public void handleEvent (Event e ) {
476+ // Check if it's the correct widget
477+ if ((e .widget .equals (waveformCanvas ) || e .widget .equals (this )) && (e .stateMask & SWT .CTRL ) != 0 ) {
478+ waveformMouseListener .handleEvent (e );
479+ e .doit = false ;
480+ }
481+ }
482+ });
472483 }
473484
474485 private void createTextPane (Composite namePane , String text ) {
@@ -518,15 +529,13 @@ public void update() {
518529 boolean even = true ;
519530 TextLayout tl = new TextLayout (waveformCanvas .getDisplay ());
520531 tl .setFont (styleProvider .getNameFont ());
521- waveformsContainTx =false ;
522532 for (TrackEntry streamEntry : streams ) {
523533 streamEntry .height = styleProvider .getTrackHeight ();
524534 streamEntry .vOffset = tracksVerticalHeight ;
525535 if (streamEntry .waveform .getType () == WaveformType .TRANSACTION ) {
526536 streamEntry .currentValue = "" ;
527537 streamEntry .height *= streamEntry .waveform .getRowCount ();
528538 painter = new StreamPainter (waveformCanvas , even , streamEntry );
529- waveformsContainTx =true ;
530539 } else if (streamEntry .waveform .getType () == WaveformType .SIGNAL ) {
531540 streamEntry .currentValue = "---" ;
532541 painter = new SignalPainter (waveformCanvas , even , streamEntry );
@@ -762,27 +771,30 @@ public void setSelection(ISelection selection, boolean add, boolean addIfNeeded)
762771 if (!add )
763772 currentWaveformSelection .clear ();
764773 List <?> selList = sel .toList ();
765- if (selList .get (0 ) instanceof ITx ) {
766- ITx txSel = (ITx ) selList .get (0 );
767- TrackEntry trackEntry = selList .size () == 2 && selList .get (1 ) instanceof TrackEntry
768- ? (TrackEntry ) selList .get (1 )
769- : null ;
770- if (trackEntry == null ) {
771- trackEntry = getEntryFor (txSel );
772- if (trackEntry == null && addIfNeeded ) {
773- trackEntry = new TrackEntry (txSel .getStream (), styleProvider );
774- streams .add (trackEntry );
774+ for (Object o : selList ) {
775+ if (o instanceof ITx ) {
776+ ITx txSel = (ITx ) o ;
777+ TrackEntry trackEntry = selList .size () == 2 && selList .get (1 ) instanceof TrackEntry
778+ ? (TrackEntry ) selList .get (1 )
779+ : null ;
780+ if (trackEntry == null ) {
781+ trackEntry = getEntryFor (txSel );
782+ if (trackEntry == null && addIfNeeded ) {
783+ trackEntry = new TrackEntry (txSel .getStream (), styleProvider );
784+ streams .add (trackEntry );
785+ }
775786 }
787+ currentTxSelection = txSel ;
788+ currentWaveformSelection .clear ();
789+ currentWaveformSelection .add (trackEntry );
790+ selectionChanged = true ;
791+ } else if (o instanceof TrackEntry ) {
792+ TrackEntry e = (TrackEntry )o ;
793+ if (!currentWaveformSelection .contains (e ))
794+ currentWaveformSelection .add (e );
795+ selectionChanged = true ;
776796 }
777- currentTxSelection = txSel ;
778- currentWaveformSelection .clear ();
779- currentWaveformSelection .add (trackEntry );
780- selectionChanged = true ;
781- } else if (selList .size () == 1 && selList .get (0 ) instanceof TrackEntry ) {
782- currentWaveformSelection .add ((TrackEntry ) selList .get (0 ));
783- if (currentTxSelection != null )
784- currentTxSelection = null ;
785- selectionChanged = true ;
797+
786798 }
787799 }
788800 } else {
@@ -1563,4 +1575,9 @@ public TrackEntry addWaveform(IWaveform waveform, int idx) {
15631575 getStreamList ().add (idx , e );
15641576 return e ;
15651577 }
1578+
1579+ public boolean waveformsContainsTx () {
1580+ return streams .stream ().filter (e -> e .waveform .getType () == WaveformType .TRANSACTION ).findFirst ().isPresent ();
1581+ }
1582+
15661583}
0 commit comments