Skip to content

Commit fcc24e9

Browse files
committed
[processing] added checkboxes to multiple input selector
1 parent fad280e commit fcc24e9

File tree

3 files changed

+47
-42
lines changed

3 files changed

+47
-42
lines changed

python/plugins/processing/gui/MultipleInputDialog.py

+27-31
Original file line numberDiff line numberDiff line change
@@ -51,48 +51,44 @@ def __init__(self, options, selectedoptions=None):
5151
self.buttonBox.addButton(self.btnToggleSelection,
5252
QDialogButtonBox.ActionRole)
5353

54-
self.btnSelectAll.clicked.connect(self.selectAll)
55-
self.btnClearSelection.clicked.connect(self.lstLayers.clearSelection)
54+
self.btnSelectAll.clicked.connect(lambda: self.selectAll(True))
55+
self.btnClearSelection.clicked.connect(lambda: self.selectAll(False))
5656
self.btnToggleSelection.clicked.connect(self.toggleSelection)
5757

5858
self.populateList()
5959

6060
def populateList(self):
61-
self.lstLayers.clear()
62-
self.lstLayers.addItems(self.options)
63-
selModel = self.lstLayers.selectionModel()
64-
self.lstLayers.blockSignals(True)
65-
for i in xrange(self.lstLayers.count()):
66-
item = self.lstLayers.item(i)
67-
if self.lstLayers.indexFromItem(item).row() in self.selectedoptions:
68-
selModel.select(self.lstLayers.indexFromItem(item),
69-
QItemSelectionModel.Select)
70-
self.lstLayers.blockSignals(False)
61+
model = QStandardItemModel()
62+
for i, option in enumerate(self.options):
63+
item = QStandardItem(option)
64+
item.setCheckState(Qt.Checked if i in self.selectedoptions else Qt.Unchecked)
65+
item.setCheckable(True)
66+
model.appendRow(item)
67+
68+
self.lstLayers.setModel(model)
7169

7270
def accept(self):
7371
self.selectedoptions = []
74-
for i in self.lstLayers.selectedItems():
75-
self.selectedoptions.append(self.lstLayers.indexFromItem(i).row())
72+
model = self.lstLayers.model()
73+
for i in xrange(model.rowCount()):
74+
item = model.item(i)
75+
if item.checkState() == Qt.Checked:
76+
self.selectedoptions.append(i)
7677
QDialog.accept(self)
7778

7879
def reject(self):
7980
self.selectedoptions = None
8081
QDialog.reject(self)
8182

82-
def selectAll(self):
83-
selModel = self.lstLayers.selectionModel()
84-
self.lstLayers.blockSignals(True)
85-
for i in xrange(self.lstLayers.count()):
86-
item = self.lstLayers.item(i)
87-
selModel.select(self.lstLayers.indexFromItem(item),
88-
QItemSelectionModel.Select)
89-
self.lstLayers.blockSignals(False)
90-
91-
def toggleSelection(self):
92-
selModel = self.lstLayers.selectionModel()
93-
self.lstLayers.blockSignals(True)
94-
for i in xrange(self.lstLayers.count()):
95-
item = self.lstLayers.item(i)
96-
selModel.select(self.lstLayers.indexFromItem(item),
97-
QItemSelectionModel.Toggle)
98-
self.lstLayers.blockSignals(False)
83+
def selectAll(self, value):
84+
model = self.lstLayers.model()
85+
for i in xrange(model.rowCount()):
86+
item = model.item(i)
87+
item.setCheckState(Qt.Checked if value else Qt.Unchecked)
88+
89+
def toggleSelection(self):
90+
model = self.lstLayers.model()
91+
for i in xrange(model.rowCount()):
92+
item = model.item(i)
93+
checked = item.checkState() == Qt.Checked
94+
item.setCheckState(Qt.Unchecked if checked else Qt.Checked)

python/plugins/processing/ui/DlgMultipleSelection.ui

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121
<number>9</number>
2222
</property>
2323
<item>
24-
<widget class="QListWidget" name="lstLayers">
24+
<widget class="QListView" name="lstLayers">
2525
<property name="editTriggers">
2626
<set>QAbstractItemView::NoEditTriggers</set>
2727
</property>
2828
<property name="alternatingRowColors">
2929
<bool>true</bool>
3030
</property>
3131
<property name="selectionMode">
32-
<enum>QAbstractItemView::ExtendedSelection</enum>
32+
<enum>QAbstractItemView::NoSelection</enum>
3333
</property>
3434
</widget>
3535
</item>
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# -*- coding: utf-8 -*-
22

3-
# Form implementation generated from reading ui file 'python/plugins/processing/ui/DlgMultipleSelection.ui'
3+
# Form implementation generated from reading ui file 'DlgMultipleSelection.ui'
44
#
5-
# Created: Thu Oct 3 20:32:49 2013
6-
# by: PyQt4 UI code generator 4.9.1
5+
# Created: Tue May 20 13:40:43 2014
6+
# by: PyQt4 UI code generator 4.9.6
77
#
88
# WARNING! All changes made in this file will be lost!
99

@@ -12,20 +12,29 @@
1212
try:
1313
_fromUtf8 = QtCore.QString.fromUtf8
1414
except AttributeError:
15-
_fromUtf8 = lambda s: s
15+
def _fromUtf8(s):
16+
return s
17+
18+
try:
19+
_encoding = QtGui.QApplication.UnicodeUTF8
20+
def _translate(context, text, disambig):
21+
return QtGui.QApplication.translate(context, text, disambig, _encoding)
22+
except AttributeError:
23+
def _translate(context, text, disambig):
24+
return QtGui.QApplication.translate(context, text, disambig)
1625

1726
class Ui_DlgMultipleSelection(object):
1827
def setupUi(self, DlgMultipleSelection):
1928
DlgMultipleSelection.setObjectName(_fromUtf8("DlgMultipleSelection"))
2029
DlgMultipleSelection.resize(380, 320)
2130
self.horizontalLayout = QtGui.QHBoxLayout(DlgMultipleSelection)
22-
self.horizontalLayout.setSpacing(2)
23-
self.horizontalLayout.setContentsMargins(0, 5, 0, 0)
31+
self.horizontalLayout.setSpacing(6)
32+
self.horizontalLayout.setMargin(9)
2433
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
25-
self.lstLayers = QtGui.QListWidget(DlgMultipleSelection)
34+
self.lstLayers = QtGui.QListView(DlgMultipleSelection)
2635
self.lstLayers.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
2736
self.lstLayers.setAlternatingRowColors(True)
28-
self.lstLayers.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
37+
self.lstLayers.setSelectionMode(QtGui.QAbstractItemView.NoSelection)
2938
self.lstLayers.setObjectName(_fromUtf8("lstLayers"))
3039
self.horizontalLayout.addWidget(self.lstLayers)
3140
self.buttonBox = QtGui.QDialogButtonBox(DlgMultipleSelection)
@@ -40,5 +49,5 @@ def setupUi(self, DlgMultipleSelection):
4049
QtCore.QMetaObject.connectSlotsByName(DlgMultipleSelection)
4150

4251
def retranslateUi(self, DlgMultipleSelection):
43-
DlgMultipleSelection.setWindowTitle(QtGui.QApplication.translate("DlgMultipleSelection", "Multiple selection", None, QtGui.QApplication.UnicodeUTF8))
52+
DlgMultipleSelection.setWindowTitle(_translate("DlgMultipleSelection", "Multiple selection", None))
4453

0 commit comments

Comments
 (0)