Skip to content

Commit 8a223b9

Browse files
committed
OWColor: Add reset button
1 parent cf0f69f commit 8a223b9

File tree

2 files changed

+85
-6
lines changed

2 files changed

+85
-6
lines changed

Orange/widgets/data/owcolor.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ def __init__(self, var):
3535
self.var = var
3636
self.new_name = None
3737

38+
def reset(self):
39+
self.new_name = None
40+
3841
@property
3942
def name(self):
4043
return self.new_name or self.var.name
@@ -61,6 +64,11 @@ def __init__(self, var):
6164
self.new_colors = None
6265
self.new_values = None
6366

67+
def reset(self):
68+
super().reset()
69+
self.new_colors = None
70+
self.new_values = None
71+
6472
@property
6573
def colors(self):
6674
if self.new_colors is None:
@@ -102,10 +110,17 @@ class ContAttrDesc(AttrDesc):
102110
"""
103111
def __init__(self, var):
104112
super().__init__(var)
105-
if var.palette.name not in colorpalettes.ContinuousPalettes:
106-
self.new_palette_name = colorpalettes.DefaultContinuousPaletteName
113+
self.new_palette_name = self._default_palette_name()
114+
115+
def reset(self):
116+
super().reset()
117+
self.new_palette_name = self._default_palette_name()
118+
119+
def _default_palette_name(self):
120+
if self.var.palette.name not in colorpalettes.ContinuousPalettes:
121+
return colorpalettes.DefaultContinuousPaletteName
107122
else:
108-
self.new_palette_name = None
123+
return None
109124

110125
@property
111126
def palette_name(self):
@@ -170,6 +185,12 @@ def setData(self, index, value, role):
170185
self.dataChanged.emit(index, index)
171186
return True
172187

188+
def reset(self):
189+
self.beginResetModel()
190+
for desc in self.attrdescs:
191+
desc.reset()
192+
self.endResetModel()
193+
173194

174195
class DiscColorTableModel(ColorTableModel):
175196
"""
@@ -460,7 +481,9 @@ def __init__(self):
460481

461482
box = gui.auto_apply(self.controlArea, self, "auto_apply")
462483
box.button.setFixedWidth(180)
463-
box.layout().insertStretch(0)
484+
reset = gui.button(None, self, "Reset", callback=self.reset)
485+
box.layout().insertWidget(0, reset)
486+
box.layout().insertStretch(1)
464487

465488
self.info.set_input_summary(self.info.NoInput)
466489
self.info.set_output_summary(self.info.NoOutput)
@@ -496,6 +519,11 @@ def set_data(self, data):
496519
def _on_data_changed(self):
497520
self.commit()
498521

522+
def reset(self):
523+
self.disc_model.reset()
524+
self.cont_model.reset()
525+
self.commit()
526+
499527
def commit(self):
500528
def make(variables):
501529
new_vars = []

Orange/widgets/data/tests/test_owcolor.py

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,20 @@ def test_name(self):
2828
desc.name = None
2929
self.assertEqual(desc.name, "x")
3030

31+
def test_reset(self):
32+
x = ContinuousVariable("x")
33+
desc = owcolor.AttrDesc(x)
34+
desc.reset()
35+
self.assertEqual(desc.name, "x")
36+
desc.name = "y"
37+
desc.reset()
38+
self.assertEqual(desc.name, "x")
39+
3140

3241
class DiscAttrTest(unittest.TestCase):
3342
def setUp(self):
34-
x = DiscreteVariable("x", ["a", "b", "c"])
35-
self.desc = owcolor.DiscAttrDesc(x)
43+
self.var = DiscreteVariable("x", ["a", "b", "c"])
44+
self.desc = owcolor.DiscAttrDesc(self.var)
3645

3746
def test_colors(self):
3847
desc = self.desc
@@ -69,6 +78,16 @@ def test_create_variable(self):
6978
self.assertIsInstance(var.compute_value, Identity)
7079
self.assertIs(var.compute_value.variable, desc.var)
7180

81+
def test_reset(self):
82+
desc = self.desc
83+
desc.set_color(0, [1, 2, 3])
84+
desc.set_color(1, [4, 5, 6])
85+
desc.set_color(2, [7, 8, 9])
86+
desc.set_value(1, "d")
87+
desc.reset()
88+
np.testing.assert_equal(desc.colors, self.var.colors)
89+
self.assertEqual(desc.values, self.var.values)
90+
7291

7392
class ContAttrDesc(unittest.TestCase):
7493
def setUp(self):
@@ -104,6 +123,14 @@ def test_create_variable(self):
104123
self.assertIsInstance(var.compute_value, Identity)
105124
self.assertIs(var.compute_value.variable, desc.var)
106125

126+
def test_reset(self):
127+
desc = self.desc
128+
palette_name = desc.palette_name
129+
desc.palette_name = _find_other_palette(
130+
colorpalettes.ContinuousPalettes[palette_name]).name
131+
desc.reset()
132+
np.testing.assert_equal(desc.palette_name, palette_name)
133+
107134

108135
class BaseTestColorTableModel:
109136
def test_row_count(self):
@@ -150,6 +177,14 @@ def test_set_data(self):
150177
finally:
151178
self.model.dataChanged.disconnect(emit)
152179

180+
def test_reset(self):
181+
for desc in self.descs:
182+
desc.reset = Mock()
183+
self.model.set_data(self.descs)
184+
self.model.reset()
185+
for desc in self.descs:
186+
desc.reset.assert_called()
187+
153188

154189
class TestDiscColorTableModel(GuiTest, BaseTestColorTableModel):
155190
def setUp(self):
@@ -511,6 +546,22 @@ def test_summary(self):
511546
output_sum.assert_called_once()
512547
self.assertEqual(output_sum.call_args[0][0].brief, "")
513548

549+
def test_reset(self):
550+
self.send_signal(self.widget.Inputs.data, self.iris)
551+
cont_model = self.widget.cont_model
552+
disc_model = self.widget.disc_model
553+
cont_model.setData(cont_model.index(0, 0), "a", Qt.EditRole)
554+
disc_model.setData(disc_model.index(0, 0), "b", Qt.EditRole)
555+
outp = self.get_output(self.widget.Outputs.data)
556+
self.assertEqual(outp.domain[0].name, "a")
557+
self.assertEqual(outp.domain.class_var.name, "b")
558+
self.widget.reset()
559+
outp = self.get_output(self.widget.Outputs.data)
560+
self.assertEqual(
561+
outp.domain[0].name, self.iris.domain[0].name)
562+
self.assertEqual(
563+
outp.domain.class_var.name, self.iris.domain.class_var.name)
564+
514565

515566
if __name__ == "__main__":
516567
unittest.main()

0 commit comments

Comments
 (0)