@@ -48,12 +48,11 @@ class SbSController(Controller):
4848
4949 def __init__ (self , settings : Settings | None = None ):
5050 super ().__init__ (SbSWindow ())
51- self .connect_signals ()
5251 self .settings : Settings = settings or Settings ()
53-
5452 self ._last_selected_optics_path : Path = self .settings .main .cwd
5553 self ._running_tasks : list [BackgroundThread ] = []
5654
55+ self .connect_signals ()
5756 self .set_measurement_interaction_buttons_enabled (False )
5857 self .set_all_segment_buttons_enabled (False )
5958
@@ -64,6 +63,12 @@ def connect_signals(self):
6463 # Menu Bar -------------------------------------------------------------
6564 view .sig_menu_settings .connect (self .show_settings )
6665
66+ view .add_settings_to_menu (
67+ menu = "View" ,
68+ settings = self .settings .plotting ,
69+ hook = partial (self .plot , weak = True ),
70+ )
71+
6772 # Measurements -------------------------------------------------------------
6873 view .button_load_measurement .clicked .connect (self .open_measurements )
6974 view .button_edit_measurement .clicked .connect (self .edit_measurement )
@@ -607,7 +612,7 @@ def run_segments(self, segments: Sequence[SegmentItemModel] | None = None):
607612 return
608613
609614 all_selected_segment_data : list [SegmentDataModel ] = [sdata for s in segments for sdata in s .segments ]
610- for measurement in selected_measurements :
615+ for idx , measurement in enumerate ( selected_measurements ) :
611616 # Filter segments that are in the measurement and sort into segments/elements
612617 selected_segments_in_meas = [s for s in measurement .segments if s in all_selected_segment_data ]
613618 if not selected_segments_in_meas :
@@ -626,41 +631,47 @@ def run_segments(self, segments: Sequence[SegmentItemModel] | None = None):
626631 )
627632
628633 def clear_all ():
629- """ Clear all segment data, so that the GUI loads the new SbS data. """
634+ """ Clear all chached segment data, so that the GUI loads the new SbS data. """
630635 for segment in selected_segments_in_meas :
631636 segment .data .clear ()
632637
638+ # At the very end, update plots.
639+ if idx == len (selected_measurements ) - 1 :
640+ self .plot ()
641+
633642 # Create thread
634643 measurement_task = BackgroundThread (
635644 function = sbs_function ,
636645 message = f"SbS for { measurement .display ()} " ,
637646 on_end_function = clear_all ,
638647 )
639648
640- # Run task
641- LOGGER .info (f"Starting { measurement_task .message } " )
642- self ._add_running_task (task = measurement_task )
643- measurement_task .start ()
644-
649+ # For Real Use: Run Task ---
650+ # LOGGER.info(f"Starting {measurement_task.message}")
651+ # self._add_running_task(task=measurement_task)
652+ # measurement_task.start()
653+
645654 # For Debugging: Start sbs directly ---
646- # sbs_function()
655+ sbs_function ()
656+ clear_all ()
647657 # -------------------------------------
648658
649659# Plotting ---------------------------------------------------------------------
650- def plot (self ):
660+ def plot (self , weak : bool = False ):
651661 """ Trigger a plot update with the currently selected segments. """
652662 view : SbSWindow = self ._view
653663 settings : PlotSettings = self .settings .plotting
654-
655- segments = view .get_selected_segments ()
656- if len (segments ) != 1 :
657- LOGGER .error ("Please select exactly one segment to plot." )
658- return
659664
660665 if not settings .forward and not settings .backward :
661666 LOGGER .error ("Please enable at least one propagation method to show." )
662667 return
663668
669+ segments = view .get_selected_segments ()
670+ if len (segments ) != 1 :
671+ if not weak :
672+ LOGGER .error ("Please select exactly one segment to plot." )
673+ return
674+
664675 self .clear_plots ()
665676
666677 segments_data : list [SegmentDataModel ] = segments [0 ].segments
@@ -684,5 +695,10 @@ def show_settings(self):
684695 LOGGER .debug ("Showing settings." )
685696 settings_dialog = SettingsDialog (settings = self .settings )
686697 if settings_dialog .exec_ ():
687- self .plot ()
698+ view : SbSWindow = self ._view
699+ view .update_menu_settings (
700+ menu = "View" ,
701+ settings = self .settings .plotting ,
702+ )
703+ self .plot (weak = True )
688704
0 commit comments