Skip to content

Commit fc22065

Browse files
committed
Silhouette, Mosaic, Venn: Make selection a schema-only setting
1 parent 5afd276 commit fc22065

File tree

4 files changed

+36
-13
lines changed

4 files changed

+36
-13
lines changed

Orange/widgets/visualize/owmosaic.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ class Outputs:
290290
variable3 = ContextSetting(None)
291291
variable4 = ContextSetting(None)
292292
variable_color = ContextSetting(None)
293-
selection = ContextSetting(set())
293+
selection = Setting(set(), schema_only=True)
294294

295295
BAR_WIDTH = 5
296296
SPACING = 4
@@ -317,7 +317,8 @@ def __init__(self):
317317
self.discrete_data = None
318318
self.subset_data = None
319319
self.subset_indices = None
320-
self.__pending_selection = None
320+
self.__pending_selection = self.selection
321+
self.selection = set()
321322

322323
self.color_data = None
323324

@@ -443,7 +444,6 @@ def set_data(self, data):
443444

444445
self.init_combos(self.data)
445446
self.openContext(self.data)
446-
self.__pending_selection = self.selection
447447

448448
@Inputs.data_subset
449449
def set_subset_data(self, data):
@@ -462,8 +462,14 @@ def handleNewSignals(self):
462462
else:
463463
indices = {e.id for e in transformed}
464464
self.subset_indices = [ex.id in indices for ex in self.data]
465+
if self.data is not None and self.__pending_selection is not None:
466+
self.selection = self.__pending_selection
467+
self.__pending_selection = None
468+
else:
469+
self.selection = set()
465470
self.set_color_data()
466-
self.reset_graph()
471+
self.update_graph()
472+
self.send_selection()
467473

468474
def clear_selection(self):
469475
self.selection = set()
@@ -477,11 +483,6 @@ def coloring_changed(self):
477483
def reset_graph(self):
478484
self.clear_selection()
479485
self.update_graph()
480-
if self.__pending_selection is not None:
481-
self.selection = self.__pending_selection
482-
self.__pending_selection = None
483-
self.update_selection_rects()
484-
self.send_selection()
485486

486487
def set_color_data(self):
487488
if self.data is None:

Orange/widgets/visualize/owsilhouetteplot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class Outputs:
7676
add_scores = settings.Setting(False)
7777
auto_commit = settings.Setting(True)
7878

79-
pending_selection = settings.ContextSetting(None, schema_only=True)
79+
pending_selection = settings.Setting(None, schema_only=True)
8080

8181
Distances = [("Euclidean", Orange.distance.Euclidean),
8282
("Manhattan", Orange.distance.Manhattan),

Orange/widgets/visualize/owvenndiagram.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class Outputs:
5757
selection: list
5858

5959
# Selected disjoint subset indices
60-
selection = settings.Setting([])
60+
selection = settings.Setting([], schema_only=True)
6161
#: Stored input set hints
6262
#: {(index, inputname, attributes): (selectedattrname, itemsettitle)}
6363
#: The 'selectedattrname' can be None

Orange/widgets/visualize/tests/test_owmosaic.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,35 @@ def test_selection_setting(self):
154154
QMouseEvent(QEvent.MouseButtonPress, QPoint(), Qt.LeftButton,
155155
Qt.LeftButton, Qt.KeyboardModifiers()))
156156

157+
# Changing the data must reset the selection
158+
self.send_signal(widget.Inputs.data, Table("titanic"))
159+
self.assertFalse(bool(widget.selection))
160+
self.assertIsNone(self.get_output(widget.Outputs.selected_data))
161+
162+
self.send_signal(widget.Inputs.data, data)
163+
self.assertFalse(bool(widget.selection))
164+
self.assertIsNone(self.get_output(widget.Outputs.selected_data))
165+
166+
widget.select_area(
167+
1,
168+
QMouseEvent(QEvent.MouseButtonPress, QPoint(), Qt.LeftButton,
169+
Qt.LeftButton, Qt.KeyboardModifiers()))
170+
settings = self.widget.settingsHandler.pack_data(self.widget)
171+
172+
# Setting data to None must reset the selection
157173
self.send_signal(widget.Inputs.data, None)
158174
self.assertFalse(bool(widget.selection))
159175
self.assertIsNone(self.get_output(widget.Outputs.selected_data))
160176

161177
self.send_signal(widget.Inputs.data, data)
162-
self.assertEqual(widget.selection, {1})
163-
self.assertIsNotNone(self.get_output(widget.Outputs.selected_data))
178+
self.assertFalse(bool(widget.selection))
179+
self.assertIsNone(self.get_output(widget.Outputs.selected_data))
180+
181+
w = self.create_widget(OWMosaicDisplay, stored_settings=settings)
182+
self.assertFalse(bool(widget.selection))
183+
self.send_signal(w.Inputs.data, data, widget=w)
184+
self.assertEqual(w.selection, {1})
185+
self.assertIsNotNone(self.get_output(w.Outputs.selected_data, widget=w))
164186

165187

166188
# Derive from WidgetTest to simplify creation of the Mosaic widget, although

0 commit comments

Comments
 (0)