Skip to content

Commit 369d6d5

Browse files
committed
oweditdomain: Clear domain_change_hints for key that was used to restore
1 parent c59c405 commit 369d6d5

File tree

2 files changed

+31
-10
lines changed

2 files changed

+31
-10
lines changed

Orange/widgets/data/oweditdomain.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1580,6 +1580,9 @@ def variable_icon(var):
15801580
#: Any warnings applying to the transform (`list[tuple[Msg, str]]`)
15811581
RestoreWarningRole = TransformRole + 1
15821582

1583+
#: Hint key that was used to load stored settings.
1584+
RestoreHintKey = RestoreWarningRole + 1
1585+
15831586

15841587
class VariableEditDelegate(QStyledItemDelegate):
15851588
ReinterpretNames = {
@@ -2133,12 +2136,12 @@ def reset_selected(self):
21332136
modified = []
21342137
for ind in self.selected_var_indices():
21352138
midx = model.index(ind)
2139+
model.setData(midx, [], TransformRole)
21362140
model.setData(midx, None, RestoreWarningRole)
2137-
if midx.data(TransformRole):
2138-
model.setData(midx, [], TransformRole)
2139-
var = midx.data(Qt.EditRole)
2140-
self._store_transform(var, [])
2141-
modified.append(var)
2141+
key = model.data(midx, RestoreHintKey)
2142+
var = midx.data(Qt.EditRole)
2143+
self._domain_change_hints.pop(key, None)
2144+
modified.append(var)
21422145
if modified:
21432146
with disconnected(editor.variable_changed,
21442147
self._on_variable_changed):
@@ -2154,6 +2157,8 @@ def reset_all(self):
21542157
midx = model.index(i)
21552158
model.setData(midx, [], TransformRole)
21562159
model.setData(midx, None, RestoreWarningRole)
2160+
key = model.data(midx, RestoreHintKey)
2161+
self._domain_change_hints.pop(key, None)
21572162
self.open_editor()
21582163
self._invalidate()
21592164
self._update_restore_warnings()
@@ -2224,6 +2229,7 @@ def _restore(self):
22242229
tr, msgs = self._sanitize_transform(coldesc.vtype, tr)
22252230
model.setData(midx, tr, TransformRole)
22262231
model.setData(midx, msgs, RestoreWarningRole)
2232+
model.setData(midx, key, RestoreHintKey)
22272233
if first_key is None:
22282234
first_key = key
22292235
# Reduce the number of hints to MAX_HINTS, but keep all current hints
@@ -2251,7 +2257,7 @@ def messages(midx):
22512257
)
22522258
self.Warning.cat_mapping_does_not_apply.clear()
22532259
# Show warnings for non-applicable transforms
2254-
for msg, names in groupby(msgs, key=itemgetter(0)):
2260+
for msg, names in groupby(sorted(msgs), key=itemgetter(0)):
22552261
msg(", ".join(map(itemgetter(1), names)))
22562262

22572263
def _on_selection_changed(self, _, deselected):
@@ -2308,15 +2314,16 @@ def _on_variable_changed(self):
23082314
self._update_restore_warnings()
23092315

23102316
def _store_transform(
2311-
self, var: Variable, transform: Iterable[Transform], deconvar=None
2317+
self, var: Variable, transform: Sequence[Transform] | None, deconvar=None
23122318
) -> None:
23132319
deconvar = deconvar or deconstruct(var)
23142320
# Remove the existing key (if any) to put the new one at the end,
23152321
# to make sure it comes after the sentinel
23162322
self._domain_change_hints.pop(deconvar, None)
23172323
# pylint: disable=unsupported-assignment-operation
2318-
self._domain_change_hints[deconvar] = \
2319-
[deconstruct(t) for t in transform]
2324+
if transform:
2325+
self._domain_change_hints[deconvar] = \
2326+
[deconstruct(t) for t in transform]
23202327

23212328
def _find_stored_transform(
23222329
self, var: Variable

Orange/widgets/data/tests/test_oweditdomain.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
VariableEditDelegate, TransformRole,
3636
RealVector, TimeVector, StringVector, make_dict_mapper,
3737
LookupMappingTransform, as_float_or_nan, column_str_repr,
38-
GroupItemsDialog, VariableListModel, StrpTime, RestoreOriginal, BaseEditor
38+
GroupItemsDialog, VariableListModel, StrpTime, RestoreOriginal, BaseEditor,
39+
RestoreWarningRole
3940
)
4041
from Orange.widgets.data.owcolor import OWColor, ColorRole
4142
from Orange.widgets.tests.base import WidgetTest, GuiTest
@@ -383,6 +384,12 @@ def restore(state):
383384
self.assertEqual(output.domain.class_var.values,
384385
("Iris-setosa", "Iris-versicolor", "Iris-virginica"))
385386

387+
restore({viris_1: [("Rename", ("K",),),
388+
("CategoriesMapping", ([("A", "AA")],))]})
389+
self.assertTrue(w.Warning.cat_mapping_does_not_apply.is_shown())
390+
w.reset_all()
391+
self.assertFalse(w.Warning.cat_mapping_does_not_apply.is_shown())
392+
386393
select_row(w.variables_view, 4)
387394
w.reset_selected()
388395
self.assertFalse(w.Warning.cat_mapping_does_not_apply.is_shown())
@@ -1227,6 +1234,13 @@ def get_style_option(row: int) -> QStyleOptionViewItem:
12271234
)
12281235
p.assert_called_once()
12291236

1237+
set_item(1, {
1238+
TransformRole: Rename("bb"),
1239+
RestoreWarningRole: ("bb", "aa"),
1240+
})
1241+
opt = get_style_option(1)
1242+
self.assertEqual(opt.palette.color(QPalette.Text), QColor(Qt.yellow))
1243+
12301244

12311245
class TestTransforms(TestCase):
12321246
def _test_common(self, var):

0 commit comments

Comments
 (0)