Skip to content

Commit b7673dc

Browse files
committed
owpaintdata: Fix undo of add new class label
'undoable' param was passed from triggered signal (checked state). This was wrong.
1 parent 6c4af05 commit b7673dc

2 files changed

Lines changed: 29 additions & 7 deletions

File tree

Orange/widgets/data/owpaintdata.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1074,19 +1074,14 @@ def reset_to_input(self):
10741074

10751075
self.commit.deferred()
10761076

1077-
def add_new_class_label(self, undoable=True):
1078-
1077+
def add_new_class_label(self):
10791078
newlabel = next(label for label in namegen('C', 1)
10801079
if label not in self.class_model)
1081-
10821080
command = SimpleUndoCommand(
10831081
lambda: self.class_model.append(newlabel),
10841082
lambda: self.class_model.__delitem__(-1)
10851083
)
1086-
if undoable:
1087-
self.undo_stack.push(command)
1088-
else:
1089-
command.redo()
1084+
self.undo_stack.push(command)
10901085

10911086
def remove_selected_class_label(self):
10921087
index = self.selected_class_label()

Orange/widgets/data/tests/test_owpaintdata.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from orangecanvas.gui.test import mouseMove
1414

1515
from Orange.data import Table, DiscreteVariable, ContinuousVariable, Domain
16+
from Orange.widgets.utils import itemmodels
1617
from Orange.widgets.data import owpaintdata
1718
from Orange.widgets.data.owpaintdata import OWPaintData
1819
from Orange.widgets.tests.base import WidgetTest, datasets
@@ -189,6 +190,32 @@ def assert_close(p1, p2):
189190
w.undo_stack.undo()
190191
assert_close(w.data[0], p0)
191192

193+
def test_add_remove_class(self):
194+
def put_instance():
195+
w.set_current_tool(owpaintdata.PutInstanceTool)
196+
QTest.mouseClick(viewport, Qt.LeftButton)
197+
198+
def assert_class_column_equal(data):
199+
assert_array_equal(np.array(w.data)[:, 2].ravel(), data)
200+
201+
w = self.widget
202+
viewport = w.plotview.viewport()
203+
put_instance()
204+
itemmodels.select_row(w.classValuesView, 1)
205+
put_instance()
206+
w.add_new_class_label()
207+
itemmodels.select_row(w.classValuesView, 2)
208+
put_instance()
209+
self.assertSequenceEqual(w.class_model, ["C1", "C2", "C3"])
210+
assert_class_column_equal([0, 1, 2])
211+
itemmodels.select_row(w.classValuesView, 0)
212+
w.remove_selected_class_label()
213+
self.assertSequenceEqual(w.class_model, ["C2", "C3"])
214+
assert_class_column_equal([0, 1])
215+
w.undo_stack.undo()
216+
self.assertSequenceEqual(w.class_model, ["C1", "C2", "C3"])
217+
assert_class_column_equal([0, 1, 2])
218+
192219

193220
class TestCommands(unittest.TestCase):
194221
def test_merge_cmd(self): # pylint: disable=import-outside-toplevel

0 commit comments

Comments
 (0)