Skip to content

Commit ab97e2c

Browse files
authored
Merge pull request #2685 from lanzagar/owrank
[FIX] OWRank: Fix autocommit
2 parents cfecca8 + d70ace3 commit ab97e2c

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

Orange/widgets/data/owrank.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ def __init__(self):
212212
self.mainArea.layout().addWidget(view)
213213
view.setModel(model)
214214
view.setColumnWidth(0, 30)
215-
view.selectionModel().selectionChanged.connect(self.commit)
215+
view.selectionModel().selectionChanged.connect(self.on_select)
216216

217217
def _set_select_manual():
218218
self.setSelectionMethod(OWRank.SelectManual)
@@ -331,7 +331,7 @@ def handleNewSignals(self):
331331
self.setStatusMessage('Running')
332332
self.updateScores()
333333
self.setStatusMessage('')
334-
self.commit()
334+
self.on_select()
335335

336336
@Inputs.scorer
337337
def set_learner(self, scorer, id):
@@ -438,12 +438,18 @@ def updateScores(self):
438438
self.autoSelection()
439439
self.Outputs.scores.send(self.create_scores_table(labels))
440440

441+
def on_select(self):
442+
# Save indices of attributes in the original, unsorted domain
443+
self.selected_rows = self.ranksModel.mapToSourceRows([
444+
i.row() for i in self.ranksView.selectionModel().selectedRows(0)])
445+
self.commit()
446+
441447
def setSelectionMethod(self, method):
442448
if self.selectionMethod != method:
443449
self.selectionMethod = method
444450
self.selectButtons.button(method).setChecked(True)
445451
self.autoSelection()
446-
self.commit()
452+
self.on_select()
447453

448454
def autoSelection(self):
449455
selModel = self.ranksView.selectionModel()
@@ -500,10 +506,6 @@ def send_report(self):
500506
self.report_items("Output", self.out_domain_desc)
501507

502508
def commit(self):
503-
# Save indices of attributes in the original, unsorted domain
504-
self.selected_rows = self.ranksModel.mapToSourceRows([
505-
i.row() for i in self.ranksView.selectionModel().selectedRows(0)])
506-
507509
selected_attrs = []
508510
if self.data is not None:
509511
attributes = self.data.domain.attributes
@@ -512,8 +514,7 @@ def commit(self):
512514
self.selectButtons.button(self.selectionMethod).setChecked(True)
513515
selected_attrs = [attributes[i]
514516
for i in self.selected_rows]
515-
516-
if self.data is None or not selected_attrs:
517+
if not selected_attrs:
517518
self.Outputs.reduced_data.send(None)
518519
self.out_domain_desc = None
519520
else:

Orange/widgets/data/tests/test_owrank.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from Orange.widgets.data.owrank import OWRank, ProblemType, CLS_SCORES, REG_SCORES
1010
from Orange.widgets.tests.base import WidgetTest
1111

12-
from AnyQt.QtCore import Qt
12+
from AnyQt.QtCore import Qt, QItemSelection
1313
from AnyQt.QtWidgets import QCheckBox
1414

1515

@@ -295,3 +295,33 @@ def test_setting_migration_fixes_header_state(self):
295295
w = self.create_widget(OWRank, stored_settings=settings)
296296

297297
self.assertEqual(w.sorting, (0, Qt.AscendingOrder))
298+
299+
def test_auto_send(self):
300+
widget = self.widget
301+
model = widget.ranksModel
302+
selectionModel = widget.ranksView.selectionModel()
303+
304+
# Auto-send disabled
305+
widget.controls.auto_apply.setChecked(False)
306+
self.send_signal(self.widget.Inputs.data, self.iris)
307+
self.assertIsNone(self.get_output(widget.Outputs.reduced_data))
308+
309+
# Make selection, but auto-send disabled
310+
selection = QItemSelection(model.index(1, 0),
311+
model.index(1, model.columnCount() - 1))
312+
selectionModel.select(selection, selectionModel.ClearAndSelect)
313+
self.assertIsNone(self.get_output(widget.Outputs.reduced_data))
314+
315+
# Enable auto-send: should output data
316+
widget.controls.auto_apply.setChecked(True)
317+
reduced_data = self.get_output(widget.Outputs.reduced_data)
318+
self.assertEqual(reduced_data.domain.attributes,
319+
(self.iris.domain["petal width"], ))
320+
321+
# Change selection: should change the output immediately
322+
selection = QItemSelection(model.index(0, 0),
323+
model.index(0, model.columnCount() - 1))
324+
selectionModel.select(selection, selectionModel.ClearAndSelect)
325+
reduced_data = self.get_output(widget.Outputs.reduced_data)
326+
self.assertEqual(reduced_data.domain.attributes,
327+
(self.iris.domain["petal length"], ))

0 commit comments

Comments
 (0)