Skip to content

Commit 80b10d2

Browse files
committed
VizRank: Add filter
1 parent 9316b84 commit 80b10d2

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

Orange/widgets/visualize/utils/__init__.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
from bisect import bisect_left
66
from operator import attrgetter
77

8-
from AnyQt.QtCore import Qt, QSize, pyqtSignal as Signal
8+
from AnyQt.QtCore import Qt, QSize, pyqtSignal as Signal, QSortFilterProxyModel
99
from AnyQt.QtGui import QStandardItemModel, QStandardItem, QColor, QBrush, QPen
1010
from AnyQt.QtWidgets import (
1111
QTableView, QGraphicsTextItem, QGraphicsRectItem, QGraphicsView, QDialog,
12-
QVBoxLayout
12+
QVBoxLayout, QLineEdit
1313
)
1414
from Orange.data import Variable
1515
from Orange.widgets import gui
@@ -96,7 +96,16 @@ def __init__(self, master):
9696
self.saved_progress = 0
9797
self.scores = []
9898

99+
self.filter = QLineEdit()
100+
self.filter.setPlaceholderText("Filter ...")
101+
self.filter.textChanged.connect(self.filter_changed)
102+
self.layout().addWidget(self.filter)
103+
# Remove focus from line edit
104+
self.setFocus(Qt.ActiveWindowFocusReason)
105+
99106
self.rank_model = QStandardItemModel(self)
107+
self.model_proxy = QSortFilterProxyModel(self)
108+
self.model_proxy.setSourceModel(self.rank_model)
100109
self.rank_table = view = QTableView(
101110
selectionBehavior=QTableView.SelectRows,
102111
selectionMode=QTableView.SingleSelection,
@@ -105,7 +114,7 @@ def __init__(self, master):
105114
view.setItemDelegate(TableBarItem())
106115
else:
107116
view.setItemDelegate(HorizontalGridDelegate())
108-
view.setModel(self.rank_model)
117+
view.setModel(self.model_proxy)
109118
view.selectionModel().selectionChanged.connect(
110119
self.on_selection_changed)
111120
view.horizontalHeader().setStretchLastSection(True)
@@ -185,6 +194,9 @@ def initialize(self):
185194
self.button.setText("Start")
186195
self.button.setEnabled(self.check_preconditions())
187196

197+
def filter_changed(self, text):
198+
self.model_proxy.setFilterFixedString(text)
199+
188200
def stop_and_reset(self, reset_method=None):
189201
if self.keep_running:
190202
self.scheduled_call = reset_method or self.initialize
@@ -388,6 +400,9 @@ def check_preconditions(self):
388400
return can_rank
389401

390402
def on_selection_changed(self, selected, deselected):
403+
selection = selected.indexes()
404+
if not selection:
405+
return
391406
attrs = selected.indexes()[0].data(self._AttrRole)
392407
self.selectionChanged.emit(attrs)
393408

0 commit comments

Comments
 (0)