Skip to content

Commit fef20aa

Browse files
committed
owpythonscript: avoid setting state at every change
1 parent c240790 commit fef20aa

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

Orange/widgets/data/owpythonscript.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
from Orange.base import Learner, Model
2222
from Orange.widgets import widget, gui
2323
from Orange.widgets.utils import itemmodels
24-
from Orange.widgets.settings import Setting
24+
from Orange.widgets.settings import Setting, SettingsHandler
2525
from Orange.widgets.utils.widgetpreview import WidgetPreview
2626
from 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+
367375
class 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

Comments
 (0)