Skip to content

Commit 4801e64

Browse files
authored
Merge pull request #3795 from janezd/reset-settings
[ENH] Reset settings button
2 parents b00a72a + 54fc253 commit 4801e64

File tree

9 files changed

+91
-5
lines changed

9 files changed

+91
-5
lines changed

Orange/widgets/data/tests/test_owfeaturestatistics.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,6 @@ def setUp(self):
439439
self.widget = self.create_widget(
440440
OWFeatureStatistics, stored_settings={'auto_commit': False}
441441
)
442-
self.widget.resetSettings()
443442
self.data1 = Table('iris')
444443
self.data2 = Table('zoo')
445444
self.select_rows = partial(select_rows, widget=self.widget)

Orange/widgets/gui.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ def __init__(self, widget=None):
138138
if widget is not None and widget.settingsHandler:
139139
widget.settingsHandler.initialize(self)
140140

141+
def _reset_settings(self):
142+
"""
143+
Copy default settings to instance's settings. This method can be
144+
called from OWWidget's reset_settings, but will mostly have to be
145+
followed by calling a method that updates the widget.
146+
"""
147+
self.settingsHandler.reset_to_original(self)
148+
141149
def connect_control(self, name, func):
142150
"""
143151
Add `func` to the list of functions called when the value of the
Lines changed: 25 additions & 0 deletions
Loading

Orange/widgets/icons/reset.svg

Lines changed: 25 additions & 0 deletions
Loading

Orange/widgets/settings.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,10 @@ def initialize(self, instance, data=None):
190190
self._initialize_settings(instance, data)
191191
self._initialize_providers(instance, data)
192192

193+
def reset_to_original(self, instance):
194+
self._initialize_settings(instance, None)
195+
self._initialize_providers(instance, None)
196+
193197
def _initialize_settings(self, instance, data):
194198
if data is None:
195199
data = {}
@@ -502,6 +506,10 @@ def initialize(self, instance, data=None):
502506

503507
provider.initialize(instance, data)
504508

509+
def reset_to_original(self, instance):
510+
provider = self._select_provider(instance)
511+
provider.reset_to_original(instance)
512+
505513
def _migrate_settings(self, settings):
506514
"""Ask widget to migrate settings to the latest version."""
507515
if settings:

Orange/widgets/tests/test_widget.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,12 @@ class MySubWidget2(MyWidget2):
208208

209209
warn.assert_not_called()
210210

211+
def test_reset_settings(self):
212+
w = MyWidget()
213+
w.field = 43
214+
w._reset_settings()
215+
self.assertEqual(42, w.field)
216+
211217

212218
class WidgetMsgTestCase(WidgetTest):
213219

Orange/widgets/visualize/ownomogram.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,10 @@ def get_points_from_coeffs(current_value, coefficients, possible_values):
11911191
return sorted_coefficients[i - 1] * sorted_values[i - 1] * k + \
11921192
sorted_coefficients[i] * sorted_values[i] * (1 - k)
11931193

1194+
def reset_settings(self):
1195+
self._reset_settings()
1196+
self.update_scene()
1197+
11941198

11951199
if __name__ == "__main__": # pragma: no cover
11961200
from Orange.classification import NaiveBayesLearner #, LogisticRegressionLearner

Orange/widgets/visualize/tests/test_ownomogram.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,12 @@ def test_output(self):
244244
attrs = self.get_output(self.widget.Outputs.features)
245245
self.assertIsNone(attrs)
246246

247+
def test_reset_settings(self):
248+
self.widget.n_attributes = 5
249+
self.widget.n_spin.valueChanged.emit(5)
250+
self.widget.reset_settings()
251+
self.assertEqual(10, self.widget.n_attributes)
252+
247253

248254
if __name__ == "__main__":
249255
unittest.main()

Orange/widgets/widget.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,15 @@ def _():
474474
)
475475
b.clicked.connect(self.show_report)
476476
sb.addWidget(b)
477+
if hasattr(self, "reset_settings"):
478+
icon = QIcon(gui.resource_filename("icons/reset.svg"))
479+
icon.addFile(gui.resource_filename("icons/reset-hover.svg"), mode=QIcon.Active)
480+
b = SimpleButton(
481+
icon=icon,
482+
toolTip="Reset settings to defaults"
483+
)
484+
b.clicked.connect(self.reset_settings)
485+
sb.addWidget(b)
477486
self.message_bar = MessagesWidget(
478487
defaultStyleSheet=textwrap.dedent("""
479488
div.field-text {
@@ -1026,10 +1035,6 @@ def isBlocking(self):
10261035
"""Is this widget blocking signal processing."""
10271036
return self.__blocking
10281037

1029-
def resetSettings(self):
1030-
"""Reset the widget settings to default"""
1031-
self.settingsHandler.reset_settings(self)
1032-
10331038
def workflowEnv(self):
10341039
"""
10351040
Return (a view to) the workflow runtime environment.

0 commit comments

Comments
 (0)