1111import org .mastodon .mamut .model .ModelGraph ;
1212import org .mastodon .mamut .model .Spot ;
1313import org .mastodon .model .AutoNavigateFocusModel ;
14+ import org .mastodon .model .FocusListener ;
1415import org .mastodon .model .FocusModel ;
1516import org .mastodon .model .NavigationHandler ;
1617import org .mastodon .model .SelectionModel ;
18+ import org .mastodon .model .TimepointListener ;
1719import org .mastodon .model .TimepointModel ;
1820import org .mastodon .model .tag .ObjTagMap ;
21+ import org .mastodon .model .tag .TagSetModel ;
1922import org .mastodon .model .tag .TagSetStructure ;
2023import org .scijava .Context ;
2124
@@ -36,12 +39,16 @@ public class BlenderController
3639
3740 private final GroupHandle groupHandle ;
3841
39- private final NavigationHandler <Spot , Link > navigationModel ;
40-
4142 private final FocusModel <Spot , Link > focusModel ;
4243
4344 private final TimepointModel timePointModel ;
4445
46+ private final FocusListener focusListener = this ::onFocusModelEvent ;
47+
48+ private final TimepointListener timepointListener = this ::onTimepointModelEvent ;
49+
50+ private final TagSetModel .TagSetModelListener tagSetModelListener = this ::sendTagSetList ;
51+
4552 private TagSetStructure .TagSet tagSet ;
4653
4754 private int knownTimepoint = 0 ;
@@ -53,7 +60,7 @@ public BlenderController( Context context, MamutAppModel appModel ) {
5360 this .model = appModel .getModel ();
5461 this .groupHandle = appModel .getGroupManager ().createGroupHandle ();
5562 this .groupHandle .setGroupId ( -1 );
56- this . navigationModel = groupHandle .getModel ( appModel .NAVIGATION );
63+ NavigationHandler < Spot , Link > navigationModel = groupHandle .getModel ( appModel .NAVIGATION );
5764 this .focusModel = new AutoNavigateFocusModel <>( appModel .getFocusModel (), navigationModel );
5865 this .timePointModel = groupHandle .getModel ( appModel .TIMEPOINT );
5966 this .client = new ViewServiceClient ( context , new ViewServiceListener () );
@@ -62,12 +69,24 @@ public BlenderController( Context context, MamutAppModel appModel ) {
6269 sendTagSetList ();
6370 triggerRepaint ();
6471 client .subscribeToChangeEvents ();
65- focusModel .listeners ().add ( this ::onFocusModelEvent );
66- timePointModel .listeners ().add ( this ::onTimepointModelEvent );
67- model .getTagSetModel ().listeners ().add ( this ::sendTagSetList );
72+ subscribeListeners ();
6873 //MastodonUtils.logMastodonEvents(appModel);
6974 }
7075
76+ private void subscribeListeners ()
77+ {
78+ focusModel .listeners ().add ( focusListener );
79+ timePointModel .listeners ().add ( timepointListener );
80+ model .getTagSetModel ().listeners ().add ( tagSetModelListener );
81+ }
82+
83+ private void unsubscribeListeners ()
84+ {
85+ focusModel .listeners ().remove ( focusListener );
86+ timePointModel .listeners ().remove ( timepointListener );
87+ model .getTagSetModel ().listeners ().remove ( tagSetModelListener );
88+ }
89+
7190 private void onFocusModelEvent ()
7291 {
7392 ModelGraph graph = model .getGraph ();
@@ -227,5 +246,11 @@ public void onSelectedTagSetChanged()
227246 tagSet = client .receiveTagSet (model .getTagSetModel ().getTagSetStructure ());
228247 sendColors ();
229248 }
249+
250+ @ Override
251+ public void onConnectionLost ()
252+ {
253+ unsubscribeListeners ();
254+ }
230255 }
231256}
0 commit comments