Skip to content

Commit d28e3f2

Browse files
NicoKiarutpietzsch
authored andcommitted
Implement timePointListeners() for AbstractViewerPanel harmonization
Replace CopyOnWriteArrayList<TimePointListener> with Listeners.SynchronizedList to match BDV's pattern. Deprecate addTimePointListener()/removeTimePointListener() in favor of the new timePointListeners() method. Companion to bigdataviewer/bigdataviewer-core#216
1 parent 7ca399a commit d28e3f2

3 files changed

Lines changed: 40 additions & 34 deletions

File tree

pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@
154154
<dependency>
155155
<groupId>sc.fiji</groupId>
156156
<artifactId>bigdataviewer-core</artifactId>
157+
<version>10.6.8</version>
157158
</dependency>
158159
<dependency>
159160
<groupId>sc.fiji</groupId>
@@ -182,4 +183,19 @@
182183
<scope>test</scope>
183184
</dependency>
184185
</dependencies>
186+
187+
<build>
188+
<plugins>
189+
<plugin>
190+
<groupId>org.apache.maven.plugins</groupId>
191+
<artifactId>maven-compiler-plugin</artifactId>
192+
<configuration>
193+
<!-- Use source/target instead of release to allow sun.misc.Unsafe access on JDK 16+ -->
194+
<release combine.self="override"/>
195+
<source>1.8</source>
196+
<target>1.8</target>
197+
</configuration>
198+
</plugin>
199+
</plugins>
200+
</build>
185201
</project>

src/main/java/bvv/core/VolumeViewerPanel.java

Lines changed: 23 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@
7878
import java.util.Collection;
7979
import java.util.List;
8080
import java.util.Set;
81-
import java.util.concurrent.CopyOnWriteArrayList;
8281
import java.util.stream.Collectors;
8382
import javax.swing.DefaultBoundedRangeModel;
8483
import javax.swing.JSlider;
@@ -241,7 +240,7 @@ protected synchronized RepaintType getAndClear()
241240
* calling {@link #requestRepaint()} so listeners have the chance to
242241
* interfere.
243242
*/
244-
protected final CopyOnWriteArrayList< TimePointListener > timePointListeners;
243+
private final Listeners.List< TimePointListener > timePointListeners;
245244

246245
/**
247246
* Current animator for viewer transform, or null. This is for example used
@@ -360,7 +359,7 @@ public VolumeViewerPanel(
360359
if ( renderData != null )
361360
l.transformChanged( renderData.getRenderTransformWorldToScreen() );
362361
} );
363-
timePointListeners = new CopyOnWriteArrayList<>();
362+
timePointListeners = new Listeners.SynchronizedList<>( l -> l.timePointChanged( state.getCurrentTimepoint() ) );
364363

365364
msgOverlay = options.getMsgOverlay();
366365

@@ -656,8 +655,7 @@ else if ( numTimepoints == 1 && sliderVisible )
656655
sliderTime.setValue( timepoint );
657656
blockSliderTimeEvents = false;
658657
} );
659-
for ( final TimePointListener l : timePointListeners )
660-
l.timePointChanged( timepoint );
658+
timePointListeners.list.forEach( l -> l.timePointChanged( timepoint ) );
661659
requestRepaint();
662660
break;
663661
}
@@ -791,6 +789,7 @@ public TransformEventHandler getTransformEventHandler()
791789
return transformEventHandler;
792790
}
793791

792+
@Override
794793
public ConverterSetups getConverterSetups()
795794
{
796795
return setups;
@@ -847,50 +846,41 @@ public Listeners< TransformListener< AffineTransform3D > > renderTransformListen
847846
}
848847

849848
/**
850-
* Add a {@link TimePointListener} to notify about time-point
849+
* Add/remove {@link TimePointListener} to notify about time-point
851850
* changes. Listeners will be notified <em>before</em> calling
852-
* {@link #requestRepaint()} so they have the chance to interfere.
853-
*
854-
* @param listener
855-
* the listener to add.
851+
* {@link #requestRepaint()} so listeners have the chance to interfere.
856852
*/
853+
@Override
854+
public Listeners< TimePointListener > timePointListeners()
855+
{
856+
return timePointListeners;
857+
}
858+
859+
/**
860+
* @deprecated Use {@code timePointListeners().add( listener )}.
861+
*/
862+
@Deprecated
857863
public void addTimePointListener( final TimePointListener listener )
858864
{
859-
addTimePointListener( listener, Integer.MAX_VALUE );
865+
timePointListeners().add( listener );
860866
}
861867

862868
/**
863-
* Add a {@link TimePointListener} to notify about time-point
864-
* changes. Listeners will be notified <em>before</em> calling
865-
* {@link #requestRepaint()} so they have the chance to interfere.
866-
*
867-
* @param listener
868-
* the listener to add.
869-
* @param index
870-
* position in the list of listeners at which to insert this one.
869+
* @deprecated Use {@code timePointListeners().add( index, listener )}.
871870
*/
871+
@Deprecated
872872
public void addTimePointListener( final TimePointListener listener, final int index )
873873
{
874-
synchronized ( timePointListeners )
875-
{
876-
final int s = timePointListeners.size();
877-
timePointListeners.add( index < 0 ? 0 : index > s ? s : index, listener );
878-
listener.timePointChanged( state.getCurrentTimepoint() );
879-
}
874+
timePointListeners().add( index, listener );
880875
}
881876

882877
/**
883-
* Remove a {@link TimePointListener}.
884-
*
885-
* @param listener
886-
* the listener to remove.
878+
* @deprecated Use {@code timePointListeners().remove( listener )}.
887879
*/
880+
@Deprecated
888881
public void removeTimePointListener( final TimePointListener listener )
889882
{
890-
synchronized ( timePointListeners )
891-
{
892-
timePointListeners.remove( listener );
893-
}
883+
timePointListeners().remove( listener );
894884
}
895885

896886
private static int getDitherStep( final int ditherWidth )

src/main/java/bvv/vistools/BvvHandle.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ void remove(
244244

245245
if ( timepointListeners != null )
246246
for ( final TimePointListener l : timepointListeners )
247-
viewer.removeTimePointListener( l );
247+
viewer.timePointListeners().remove( l );
248248

249249
if ( viewerStateChangeListeners != null )
250250
viewer.state().changeListeners().removeAll( viewerStateChangeListeners );

0 commit comments

Comments
 (0)