Skip to content

Commit f4133f2

Browse files
lanzagarastaric
authored andcommitted
Merge pull request biolab#1859 from ales-erjavec/fixes/select-columns-commit
[FIX] owselectcolumns: Fix auto commit on any change (cherry picked from commit a211299)
1 parent d24f049 commit f4133f2

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

Orange/widgets/data/owselectcolumns.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
QAbstractItemModel, QSortFilterProxyModel, QStringListModel,
1010
QItemSelection, QItemSelectionModel
1111
)
12+
from AnyQt.QtCore import pyqtSignal as Signal
1213

1314
from Orange.util import deprecated
1415
from Orange.widgets import gui, widget
@@ -90,17 +91,18 @@ class VariablesListItemView(QListView):
9091
""" A Simple QListView subclass initialized for displaying
9192
variables.
9293
"""
94+
#: Emitted with a Qt.DropAction when a drag/drop (originating from this
95+
#: view) completed successfully
96+
dragDropActionDidComplete = Signal(int)
97+
9398
def __init__(self, parent=None, acceptedType=Orange.data.Variable):
9499
super().__init__(parent)
95100
self.setSelectionMode(self.ExtendedSelection)
96101
self.setAcceptDrops(True)
97102
self.setDragEnabled(True)
98103
self.setDropIndicatorShown(True)
99104
self.setDragDropMode(self.DragDrop)
100-
if hasattr(self, "setDefaultDropAction"):
101-
# TODO do we still need this?
102-
# For compatibility with Qt version < 4.6
103-
self.setDefaultDropAction(Qt.MoveAction)
105+
self.setDefaultDropAction(Qt.MoveAction)
104106
self.setDragDropOverwriteMode(False)
105107
self.viewport().setAcceptDrops(True)
106108

@@ -119,8 +121,7 @@ def startDrag(self, supported_actions):
119121
drag.setMimeData(data)
120122

121123
default_action = Qt.IgnoreAction
122-
if hasattr(self, "defaultDropAction") and \
123-
self.defaultDropAction() != Qt.IgnoreAction and \
124+
if self.defaultDropAction() != Qt.IgnoreAction and \
124125
supported_actions & self.defaultDropAction():
125126
default_action = self.defaultDropAction()
126127
elif (supported_actions & Qt.CopyAction and
@@ -132,6 +133,7 @@ def startDrag(self, supported_actions):
132133
rows = list(map(QModelIndex.row, selected))
133134
for s1, s2 in reversed(list(slices(rows))):
134135
delslice(self.model(), s1, s2)
136+
self.dragDropActionDidComplete.emit(res)
135137

136138
def dragEnterEvent(self, event):
137139
"""
@@ -282,18 +284,25 @@ def __init__(self):
282284
self.completer_navigator = CompleterNavigator(self)
283285
self.filter_edit.installEventFilter(self.completer_navigator)
284286

285-
self.available_attrs = VariableListModel(enable_dnd=True)
286-
self.available_attrs.rowsRemoved.connect(self.update_completer_model)
287+
def dropcompleted(action):
288+
if action == Qt.MoveAction:
289+
self.commit()
287290

291+
self.available_attrs = VariableListModel(enable_dnd=True)
288292
self.available_attrs_proxy = VariableFilterProxyModel()
289293
self.available_attrs_proxy.setSourceModel(self.available_attrs)
290294
self.available_attrs_view = VariablesListItemView(
291295
acceptedType=Orange.data.Variable)
292296
self.available_attrs_view.setModel(self.available_attrs_proxy)
293297

298+
aa = self.available_attrs
299+
aa.dataChanged.connect(self.update_completer_model)
300+
aa.rowsInserted.connect(self.update_completer_model)
301+
aa.rowsRemoved.connect(self.update_completer_model)
294302

295303
self.available_attrs_view.selectionModel().selectionChanged.connect(
296304
partial(self.update_interface_state, self.available_attrs_view))
305+
self.available_attrs_view.dragDropActionDidComplete.connect(dropcompleted)
297306
self.filter_edit.textChanged.connect(self.update_completer_prefix)
298307
self.filter_edit.textChanged.connect(
299308
self.available_attrs_proxy.set_filter_string)
@@ -303,38 +312,38 @@ def __init__(self):
303312

304313
box = gui.vBox(self.controlArea, "Features", addToLayout=False)
305314
self.used_attrs = VariableListModel(enable_dnd=True)
306-
self.used_attrs.rowsRemoved.connect(self.update_completer_model)
307315
self.used_attrs_view = VariablesListItemView(
308316
acceptedType=(Orange.data.DiscreteVariable,
309317
Orange.data.ContinuousVariable))
310318

311319
self.used_attrs_view.setModel(self.used_attrs)
312320
self.used_attrs_view.selectionModel().selectionChanged.connect(
313321
partial(self.update_interface_state, self.used_attrs_view))
322+
self.used_attrs_view.dragDropActionDidComplete.connect(dropcompleted)
314323
box.layout().addWidget(self.used_attrs_view)
315324
layout.addWidget(box, 0, 2, 1, 1)
316325

317326
box = gui.vBox(self.controlArea, "Target Variable", addToLayout=False)
318327
self.class_attrs = ClassVarListItemModel(enable_dnd=True)
319-
self.class_attrs.rowsRemoved.connect(self.update_completer_model)
320328
self.class_attrs_view = ClassVariableItemView(
321329
acceptedType=(Orange.data.DiscreteVariable,
322330
Orange.data.ContinuousVariable))
323331
self.class_attrs_view.setModel(self.class_attrs)
324332
self.class_attrs_view.selectionModel().selectionChanged.connect(
325333
partial(self.update_interface_state, self.class_attrs_view))
334+
self.class_attrs_view.dragDropActionDidComplete.connect(dropcompleted)
326335
self.class_attrs_view.setMaximumHeight(24)
327336
box.layout().addWidget(self.class_attrs_view)
328337
layout.addWidget(box, 1, 2, 1, 1)
329338

330339
box = gui.vBox(self.controlArea, "Meta Attributes", addToLayout=False)
331340
self.meta_attrs = VariableListModel(enable_dnd=True)
332-
self.meta_attrs.rowsRemoved.connect(self.update_completer_model)
333341
self.meta_attrs_view = VariablesListItemView(
334342
acceptedType=Orange.data.Variable)
335343
self.meta_attrs_view.setModel(self.meta_attrs)
336344
self.meta_attrs_view.selectionModel().selectionChanged.connect(
337345
partial(self.update_interface_state, self.meta_attrs_view))
346+
self.meta_attrs_view.dragDropActionDidComplete.connect(dropcompleted)
338347
box.layout().addWidget(self.meta_attrs_view)
339348
layout.addWidget(box, 2, 2, 1, 1)
340349

@@ -472,6 +481,8 @@ def move_rows(self, view, rows, offset):
472481
view.selectionModel().select(
473482
selection, QItemSelectionModel.ClearAndSelect)
474483

484+
self.commit()
485+
475486
def move_up(self, view):
476487
selected = self.selected_rows(view)
477488
self.move_rows(view, selected, -1)
@@ -507,6 +518,8 @@ def move_from_to(self, src, dst, rows, exclusive=False):
507518

508519
dst_model.extend(attrs)
509520

521+
self.commit()
522+
510523
def update_interface_state(self, focus=None, selected=None, deselected=None):
511524
for view in [self.available_attrs_view, self.used_attrs_view,
512525
self.class_attrs_view, self.meta_attrs_view]:
@@ -553,7 +566,6 @@ def update_completer_model(self, *_):
553566
vars = list(self.available_attrs)
554567
items = [var.name for var in vars]
555568
items += ["%s=%s" % item for v in vars for item in v.attributes.items()]
556-
self.commit()
557569

558570
new = sorted(set(items))
559571
if new != self.original_completer_items:
@@ -600,6 +612,7 @@ def reset(self):
600612
self.class_attrs[:] = self.data.domain.class_vars
601613
self.meta_attrs[:] = self.data.domain.metas
602614
self.update_domain_role_hints()
615+
self.commit()
603616

604617
def send_report(self):
605618
if not self.data or not self.output_data:

0 commit comments

Comments
 (0)