2121from Orange .base import Learner , Model
2222from Orange .widgets import widget , gui
2323from Orange .widgets .utils import itemmodels
24- from Orange .widgets .settings import Setting
24+ from Orange .widgets .settings import Setting , SettingsHandler
2525from Orange .widgets .utils .widgetpreview import WidgetPreview
2626from Orange .widgets .widget import OWWidget , Input , Output
2727
@@ -364,6 +364,14 @@ def select_row(view, row):
364364 QItemSelectionModel .ClearAndSelect )
365365
366366
367+ class PrepareSavingSettingsHandler (SettingsHandler ):
368+ """Calls storeSpecificSettings, which is currently not called from non-context handlers."""
369+
370+ def pack_data (self , widget ):
371+ widget .storeSpecificSettings ()
372+ return super ().pack_data (widget )
373+
374+
367375class OWPythonScript (widget .OWWidget ):
368376 name = "Python Script"
369377 description = "Write a Python script and run it on input data or models."
@@ -389,6 +397,8 @@ class Outputs:
389397
390398 signal_names = ("data" , "learner" , "classifier" , "object" )
391399
400+ settingsHandler = PrepareSavingSettingsHandler ()
401+
392402 libraryListSource = \
393403 Setting ([Script ("Hello world" , "print('Hello world')\n " )])
394404 currentScriptIndex = Setting (0 )
@@ -518,7 +528,6 @@ def __init__(self):
518528 select_row (self .libraryView , self .currentScriptIndex )
519529
520530 self .restoreScriptText ()
521- self .text .textChanged .connect (self .saveScriptText ) # after restoring
522531
523532 self .splitCanvas .setSizes ([2 , 1 ])
524533 if self .splitterState is not None :
@@ -528,6 +537,9 @@ def __init__(self):
528537 self .controlArea .layout ().addStretch (1 )
529538 self .resize (800 , 600 )
530539
540+ def storeSpecificSettings (self ):
541+ self .saveScriptText ()
542+
531543 def restoreScriptText (self ):
532544 if self .scriptText is not None :
533545 current = self .text .toPlainText ()
0 commit comments