11
11
from larray_editor .arraywidget import ArrayEditorWidget
12
12
from larray_editor .commands import EditSessionArrayCommand , EditCurrentArrayCommand
13
13
14
- from qtpy .QtCore import Qt , QUrl
14
+ from qtpy .QtCore import Qt , QUrl , QSettings
15
15
from qtpy .QtGui import QDesktopServices , QKeySequence
16
16
from qtpy .QtWidgets import (QMainWindow , QWidget , QListWidget , QListWidgetItem , QSplitter , QFileDialog , QPushButton ,
17
17
QDialogButtonBox , QShortcut , QHBoxLayout , QVBoxLayout , QGridLayout , QLineEdit , QUndoStack ,
@@ -74,6 +74,9 @@ def __init__(self, parent=None, editable=False, file_menu=False, help_menu=False
74
74
if editable :
75
75
self .edit_undo_stack = QUndoStack (self )
76
76
77
+ self .settings_group_name = self .name .lower ().replace (' ' , '_' )
78
+ self .widget_state_settings = {}
79
+
77
80
def setup_and_check (self , data , title = '' , readonly = False , caller_info = None , ** kwargs ):
78
81
"""Return False if data is not supported, True otherwise"""
79
82
# set icon
@@ -103,10 +106,12 @@ def setup_and_check(self, data, title='', readonly=False, caller_info=None, **kw
103
106
# setup central widget
104
107
self ._setup_and_check (widget , data , title , readonly , ** kwargs )
105
108
106
- # resize
107
- self .resize (1000 , 600 )
109
+ if not self .restore_widgets_state_and_geometry ():
110
+ # resize
111
+ self .resize (1000 , 600 )
108
112
# This is more or less the minimum space required to display a 1D array
109
113
self .setMinimumSize (300 , 180 )
114
+
110
115
return True
111
116
112
117
def setup_menu_bar (self ):
@@ -276,6 +281,31 @@ def get_value(self):
276
281
# already been destroyed, due to the Qt.WA_DeleteOnClose attribute
277
282
return self .data
278
283
284
+ def save_widgets_state_and_geometry (self ):
285
+ settings = QSettings ()
286
+ settings .beginGroup (self .settings_group_name )
287
+ settings .setValue ('geometry' , self .saveGeometry ())
288
+ settings .setValue ('state' , self .saveState ())
289
+ for widget_name , widget in self .widget_state_settings .items ():
290
+ settings .setValue ('state/{}' .format (widget_name ), widget .saveState ())
291
+ settings .endGroup ()
292
+
293
+ def restore_widgets_state_and_geometry (self ):
294
+ settings = QSettings ()
295
+ settings .beginGroup (self .settings_group_name )
296
+ geometry = settings .value ('geometry' )
297
+ if geometry :
298
+ self .restoreGeometry (geometry )
299
+ state = settings .value ('state' )
300
+ if state :
301
+ self .restoreState (state )
302
+ for widget_name , widget in self .widget_state_settings .items ():
303
+ state = settings .value ('state/{}' .format (widget_name ))
304
+ if state :
305
+ widget .restoreState (state )
306
+ settings .endGroup ()
307
+ return (geometry is not None ) or (state is not None )
308
+
279
309
def _setup_and_check (self , widget , data , title , readonly , ** kwargs ):
280
310
raise NotImplementedError ()
281
311
@@ -360,6 +390,7 @@ def void_formatter(array, *args, **kwargs):
360
390
right_panel_widget .addWidget (self .arraywidget )
361
391
right_panel_widget .addWidget (self .eval_box )
362
392
right_panel_widget .setSizes ([90 , 10 ])
393
+ self .widget_state_settings ['right_panel_widget' ] = right_panel_widget
363
394
else :
364
395
self .eval_box = QLineEdit ()
365
396
self .eval_box .returnPressed .connect (self .line_edit_update )
@@ -378,6 +409,7 @@ def void_formatter(array, *args, **kwargs):
378
409
main_splitter .addWidget (right_panel_widget )
379
410
main_splitter .setSizes ([10 , 90 ])
380
411
main_splitter .setCollapsible (1 , False )
412
+ self .widget_state_settings ['main_splitter' ] = main_splitter
381
413
382
414
layout .addWidget (main_splitter )
383
415
@@ -695,6 +727,9 @@ def closeEvent(self, event):
695
727
event .accept ()
696
728
else :
697
729
event .ignore ()
730
+ self .save_widgets_state_and_geometry ()
731
+ AbstractEditor .closeEvent (self , event )
732
+
698
733
699
734
#########################################
700
735
# FILE MENU #
0 commit comments