Skip to content

Commit

Permalink
gui.listView: Add test, refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
janezd authored and kernc committed Dec 4, 2017
1 parent fb0fd3f commit 0831eb1
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 16 deletions.
16 changes: 5 additions & 11 deletions Orange/widgets/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import pkg_resources

from AnyQt import QtWidgets, QtCore, QtGui
from AnyQt.QtCore import Qt, QSize, pyqtSignal as Signal
from AnyQt.QtCore import Qt, QSize, QItemSelection, pyqtSignal as Signal
from AnyQt.QtGui import QCursor, QColor
from AnyQt.QtWidgets import (
QApplication, QStyle, QSizePolicy, QWidget, QLabel, QGroupBox, QSlider,
Expand Down Expand Up @@ -2477,20 +2477,13 @@ def action(self, values):
model = view.model()
sel_model = view.selectionModel()

if view.selectionMode == view.SingleSelection:
flags = sel_model.ClearAndSelect
else:
sel_model.clearSelection()
flags = sel_model.Select

if not isinstance(values, Sequence):
values = [values]

selection = QItemSelection()
for value in values:
if not isinstance(value, int):
if isinstance(value, str):
search_role = Qt.DisplayRole
elif isinstance(value, Variable):
if isinstance(value, Variable):
search_role = TableVariable
else:
search_role = Qt.DisplayRole
Expand All @@ -2499,7 +2492,8 @@ def action(self, values):
if model.data(model.index(i), search_role) == value:
value = i
break
sel_model.select(model.index(value), flags)
selection.select(model.index(value), model.index(value))
sel_model.select(selection, sel_model.ClearAndSelect)


class CallFrontListBox(ControlledCallFront):
Expand Down
47 changes: 42 additions & 5 deletions Orange/widgets/tests/test_gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,62 @@ def test_checked_extension(self):


class TestListModel(GuiTest):
def test_select(self):
widget = OWWidget()
widget.foo = None
def setUp(self):
self.widget = OWWidget()
self.widget.foo = None
self.attrs = VariableListModel()
view = gui.listView(widget.controlArea, widget, "foo", model=self.attrs)
self.view = gui.listView(
self.widget.controlArea, self.widget, "foo", model=self.attrs)

def test_select_callback(self):
widget = self.widget
view = self.view

self.assertIsNone(widget.foo)

a, b, c = (ContinuousVariable(x) for x in "abc")
self.attrs[:] = [a, b, c]

view.setCurrentIndex(self.attrs.index(0, 0))
self.assertIs(widget.foo, a)
view.setCurrentIndex(self.attrs.index(2, 0))
self.assertIs(widget.foo, c)

view.setSelectionMode(view.MultiSelection)
sel_model = view.selectionModel()
sel_model.clear()
view.setCurrentIndex(self.attrs.index(1, 0))
self.assertEqual(widget.foo, [b])

def test_select_callfront(self):
widget = self.widget
view = self.view

a, b, c = (ContinuousVariable(x) for x in "abc")
self.attrs[:] = [a, b, c]

widget.foo = b
selection = view.selectedIndexes()
self.assertEqual(len(selection), 1)
self.assertEqual(selection[0].row(), 1)

class ComboBoxText(GuiTest):
view.setSelectionMode(view.MultiSelection)
widget.foo = [a, c]
selection = view.selectedIndexes()
self.assertEqual(len(selection), 2)
self.assertEqual({selection[0].row(), selection[1].row()}, {0, 2})

widget.foo = []
selection = view.selectedIndexes()
self.assertEqual(len(selection), 0)

widget.foo = [2, "b"]
selection = view.selectedIndexes()
self.assertEqual(len(selection), 2)
self.assertEqual({selection[0].row(), selection[1].row()}, {1, 2})


class ComboBoxTest(GuiTest):
def test_set_initial_value(self):
widget = OWWidget()
variables = [ContinuousVariable(x) for x in "abc"]
Expand Down

0 comments on commit 0831eb1

Please sign in to comment.