77
88from spikeinterface import load_sorting_analyzer , load
99from spikeinterface .core .core_tools import is_path_remote
10+ from .utils_global import get_config_folder
1011
12+ import spikeinterface_gui
1113from spikeinterface_gui .controller import Controller
1214
1315
@@ -30,6 +32,8 @@ def run_mainwindow(
3032 panel_start_server_kwargs = None ,
3133 panel_window_servable = True ,
3234 verbose = False ,
35+ user_settings = None ,
36+ disable_save_settings_button = False ,
3337):
3438 """
3539 Create the main window and start the QT app loop.
@@ -82,6 +86,10 @@ def run_mainwindow(
8286 the `panel_window_servable` should be set to False.
8387 verbose: bool, default: False
8488 If True, print some information in the console
89+ user_settings: dict, default: None
90+ A dictionary of user settings for each view, which overwrite the default settings.
91+ disable_save_settings_button: bool, default: False
92+ If True, disables the "save default settings" button, so that user cannot do this.
8593 """
8694
8795 if mode == "desktop" :
@@ -91,6 +99,21 @@ def run_mainwindow(
9199 else :
92100 raise ValueError (f"spikeinterface-gui wrong mode { mode } " )
93101
102+ # Order of preference for settings is set here:
103+ # 1) User specified settings
104+ # 2) Settings in the config folder
105+ # 3) Default settings of each view
106+ if user_settings is None :
107+ sigui_version = spikeinterface_gui .__version__
108+ config_version_folder = get_config_folder () / sigui_version
109+ settings_file = config_version_folder / "settings.json"
110+ if settings_file .is_file ():
111+ try :
112+ with open (settings_file ) as f :
113+ user_settings = json .load (f )
114+ except json .JSONDecodeError as e :
115+ print (f"Config file at { settings_file } is not decodable. Error: { e } " )
116+ print ("Using default settings." )
94117
95118 if recording is not None :
96119 analyzer .set_temporary_recording (recording )
@@ -106,6 +129,7 @@ def run_mainwindow(
106129 displayed_unit_properties = displayed_unit_properties ,
107130 extra_unit_properties = extra_unit_properties ,
108131 skip_extensions = skip_extensions ,
132+ disable_save_settings_button = disable_save_settings_button
109133 )
110134 if verbose :
111135 t1 = time .perf_counter ()
@@ -122,7 +146,7 @@ def run_mainwindow(
122146
123147 app = mkQApp ()
124148
125- win = QtMainWindow (controller , layout_preset = layout_preset , layout = layout )
149+ win = QtMainWindow (controller , layout_preset = layout_preset , layout = layout , user_settings = user_settings )
126150 win .setWindowTitle ('SpikeInterface GUI' )
127151 # Set window icon
128152 icon_file = Path (__file__ ).absolute ().parent / 'img' / 'si.png'
@@ -134,7 +158,7 @@ def run_mainwindow(
134158
135159 elif backend == "panel" :
136160 from .backend_panel import PanelMainWindow , start_server
137- win = PanelMainWindow (controller , layout_preset = layout_preset , layout = layout )
161+ win = PanelMainWindow (controller , layout_preset = layout_preset , layout = layout , user_settings = user_settings )
138162
139163 if start_app or panel_window_servable :
140164 win .main_layout .servable (title = 'SpikeInterface GUI' )
@@ -261,6 +285,8 @@ def run_mainwindow_cli():
261285 parser .add_argument ('--address' , help = 'Address for web mode' , default = 'localhost' )
262286 parser .add_argument ('--layout-file' , help = 'Path to json file defining layout' , default = None )
263287 parser .add_argument ('--curation-file' , help = 'Path to json file defining a curation' , default = None )
288+ parser .add_argument ('--settings-file' , help = 'Path to json file specifying the settings of each view' , default = None )
289+ parser .add_argument ('--disable_save_settings_button' , help = 'Disables button allowing for user to save default settings' , action = 'store_true' , default = False )
264290
265291 args = parser .parse_args (argv )
266292
@@ -302,6 +328,14 @@ def run_mainwindow_cli():
302328 else :
303329 curation_data = None
304330
331+ if args .settings_file is not None :
332+ with open (args .settings_file , "r" ) as f :
333+ user_settings = json .load (f )
334+ else :
335+ user_settings = None
336+
337+ disable_save_settings_button = args .disable_save_settings_button
338+
305339 run_mainwindow (
306340 analyzer ,
307341 mode = args .mode ,
@@ -311,5 +345,7 @@ def run_mainwindow_cli():
311345 verbose = args .verbose ,
312346 layout = args .layout_file ,
313347 curation_dict = curation_data ,
348+ user_settings = user_settings ,
349+ disable_save_settings_button = disable_save_settings_button ,
314350 )
315351
0 commit comments