|
78 | 78 | import java.util.Collection; |
79 | 79 | import java.util.List; |
80 | 80 | import java.util.Set; |
81 | | -import java.util.concurrent.CopyOnWriteArrayList; |
82 | 81 | import java.util.stream.Collectors; |
83 | 82 | import javax.swing.DefaultBoundedRangeModel; |
84 | 83 | import javax.swing.JSlider; |
@@ -241,7 +240,7 @@ protected synchronized RepaintType getAndClear() |
241 | 240 | * calling {@link #requestRepaint()} so listeners have the chance to |
242 | 241 | * interfere. |
243 | 242 | */ |
244 | | - protected final CopyOnWriteArrayList< TimePointListener > timePointListeners; |
| 243 | + private final Listeners.List< TimePointListener > timePointListeners; |
245 | 244 |
|
246 | 245 | /** |
247 | 246 | * Current animator for viewer transform, or null. This is for example used |
@@ -360,7 +359,7 @@ public VolumeViewerPanel( |
360 | 359 | if ( renderData != null ) |
361 | 360 | l.transformChanged( renderData.getRenderTransformWorldToScreen() ); |
362 | 361 | } ); |
363 | | - timePointListeners = new CopyOnWriteArrayList<>(); |
| 362 | + timePointListeners = new Listeners.SynchronizedList<>( l -> l.timePointChanged( state.getCurrentTimepoint() ) ); |
364 | 363 |
|
365 | 364 | msgOverlay = options.getMsgOverlay(); |
366 | 365 |
|
@@ -656,8 +655,7 @@ else if ( numTimepoints == 1 && sliderVisible ) |
656 | 655 | sliderTime.setValue( timepoint ); |
657 | 656 | blockSliderTimeEvents = false; |
658 | 657 | } ); |
659 | | - for ( final TimePointListener l : timePointListeners ) |
660 | | - l.timePointChanged( timepoint ); |
| 658 | + timePointListeners.list.forEach( l -> l.timePointChanged( timepoint ) ); |
661 | 659 | requestRepaint(); |
662 | 660 | break; |
663 | 661 | } |
@@ -791,6 +789,7 @@ public TransformEventHandler getTransformEventHandler() |
791 | 789 | return transformEventHandler; |
792 | 790 | } |
793 | 791 |
|
| 792 | + @Override |
794 | 793 | public ConverterSetups getConverterSetups() |
795 | 794 | { |
796 | 795 | return setups; |
@@ -847,50 +846,41 @@ public Listeners< TransformListener< AffineTransform3D > > renderTransformListen |
847 | 846 | } |
848 | 847 |
|
849 | 848 | /** |
850 | | - * Add a {@link TimePointListener} to notify about time-point |
| 849 | + * Add/remove {@link TimePointListener} to notify about time-point |
851 | 850 | * 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. |
856 | 852 | */ |
| 853 | + @Override |
| 854 | + public Listeners< TimePointListener > timePointListeners() |
| 855 | + { |
| 856 | + return timePointListeners; |
| 857 | + } |
| 858 | + |
| 859 | + /** |
| 860 | + * @deprecated Use {@code timePointListeners().add( listener )}. |
| 861 | + */ |
| 862 | + @Deprecated |
857 | 863 | public void addTimePointListener( final TimePointListener listener ) |
858 | 864 | { |
859 | | - addTimePointListener( listener, Integer.MAX_VALUE ); |
| 865 | + timePointListeners().add( listener ); |
860 | 866 | } |
861 | 867 |
|
862 | 868 | /** |
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 )}. |
871 | 870 | */ |
| 871 | + @Deprecated |
872 | 872 | public void addTimePointListener( final TimePointListener listener, final int index ) |
873 | 873 | { |
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 ); |
880 | 875 | } |
881 | 876 |
|
882 | 877 | /** |
883 | | - * Remove a {@link TimePointListener}. |
884 | | - * |
885 | | - * @param listener |
886 | | - * the listener to remove. |
| 878 | + * @deprecated Use {@code timePointListeners().remove( listener )}. |
887 | 879 | */ |
| 880 | + @Deprecated |
888 | 881 | public void removeTimePointListener( final TimePointListener listener ) |
889 | 882 | { |
890 | | - synchronized ( timePointListeners ) |
891 | | - { |
892 | | - timePointListeners.remove( listener ); |
893 | | - } |
| 883 | + timePointListeners().remove( listener ); |
894 | 884 | } |
895 | 885 |
|
896 | 886 | private static int getDitherStep( final int ditherWidth ) |
|
0 commit comments