Skip to content

Commit c240790

Browse files
committed
owpythonscript: also store the script text
1 parent f266fa5 commit c240790

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

Orange/widgets/data/owpythonscript.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,7 @@ class Outputs:
392392
libraryListSource = \
393393
Setting([Script("Hello world", "print('Hello world')\n")])
394394
currentScriptIndex = Setting(0)
395+
scriptText = Setting(None, schema_only=True)
395396
splitterState = Setting(None)
396397

397398
class Error(OWWidget.Error):
@@ -516,6 +517,9 @@ def __init__(self):
516517

517518
select_row(self.libraryView, self.currentScriptIndex)
518519

520+
self.restoreScriptText()
521+
self.text.textChanged.connect(self.saveScriptText) # after restoring
522+
519523
self.splitCanvas.setSizes([2, 1])
520524
if self.splitterState is not None:
521525
self.splitCanvas.restoreState(QByteArray(self.splitterState))
@@ -524,6 +528,16 @@ def __init__(self):
524528
self.controlArea.layout().addStretch(1)
525529
self.resize(800, 600)
526530

531+
def restoreScriptText(self):
532+
if self.scriptText is not None:
533+
current = self.text.toPlainText()
534+
# do not mark scripts as modified
535+
if self.scriptText != current:
536+
self.text.document().setPlainText(self.scriptText)
537+
538+
def saveScriptText(self):
539+
self.scriptText = self.text.toPlainText()
540+
527541
def handle_input(self, obj, id, signal):
528542
id = id[0]
529543
dic = getattr(self, signal)

Orange/widgets/data/tests/test_owpythonscript.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,13 @@ def test_restore_from_library(self):
124124
self.widget.restoreSaved()
125125
script = self.widget.text.toPlainText()
126126
self.assertEqual(before, script)
127+
128+
def test_store_current_script(self):
129+
self.widget.text.setPlainText("42")
130+
settings = self.widget.settingsHandler.pack_data(self.widget)
131+
self.widget = self.create_widget(OWPythonScript)
132+
script = self.widget.text.toPlainText()
133+
self.assertNotEqual("42", script)
134+
self.widget = self.create_widget(OWPythonScript, stored_settings=settings)
135+
script = self.widget.text.toPlainText()
136+
self.assertEqual("42", script)

0 commit comments

Comments
 (0)