[processing] use list widget in Multiple selection dialog

This commit is contained in:
Alexander Bruy 2013-10-03 20:32:55 +03:00
parent 1d87841f8a
commit f9c2b91e52
3 changed files with 66 additions and 47 deletions

View File

@ -41,42 +41,58 @@ class MultipleInputDialog(QDialog, Ui_DlgMultipleSelection):
self.selectedoptions = selectedoptions
# Additional buttons
self.btnSelectAll = QPushButton(self.tr('(de)Select all'))
self.btnSelectAll = QPushButton(self.tr('Select all'))
self.buttonBox.addButton(self.btnSelectAll,
QDialogButtonBox.ActionRole)
self.btnClearSelection = QPushButton(self.tr('Clear selection'))
self.buttonBox.addButton(self.btnClearSelection,
QDialogButtonBox.ActionRole)
self.btnToggleSelection = QPushButton(self.tr('Toggle selection'))
self.buttonBox.addButton(self.btnToggleSelection,
QDialogButtonBox.ActionRole)
self.btnSelectAll.clicked.connect(self.toggleSelection)
self.btnSelectAll.clicked.connect(self.selectAll)
self.btnClearSelection.clicked.connect(self.lstLayers.clearSelection)
self.btnToggleSelection.clicked.connect(self.toggleSelection)
self.setTableContent()
self.populateList()
def setTableContent(self):
self.tblLayers.setRowCount(len(self.options))
for i in range(len(self.options)):
item = QCheckBox()
item.setText(self.options[i])
if i in self.selectedoptions:
item.setChecked(True)
self.tblLayers.setCellWidget(i, 0, item)
def populateList(self):
self.lstLayers.clear()
self.lstLayers.addItems(self.options)
selModel = self.lstLayers.selectionModel()
self.lstLayers.blockSignals(True)
for i in xrange(self.lstLayers.count()):
item = self.lstLayers.item(i)
if item.text() in self.selectedoptions:
selModel.select(self.lstLayers.indexFromItem(item),
QItemSelectionModel.Select)
self.lstLayers.blockSignals(False)
def accept(self):
self.selectedoptions = []
for i in range(len(self.options)):
widget = self.tblLayers.cellWidget(i, 0)
if widget.isChecked():
self.selectedoptions.append(i)
for i in self.lstLayers.selectedItems():
self.selectedoptions.append(i.text())
QDialog.accept(self)
def reject(self):
self.selectedoptions = None
QDialog.reject(self)
def selectAll(self):
selModel = self.lstLayers.selectionModel()
self.lstLayers.blockSignals(True)
for i in xrange(self.lstLayers.count()):
item = self.lstLayers.item(i)
selModel.select(self.lstLayers.indexFromItem(item),
QItemSelectionModel.Select)
self.lstLayers.blockSignals(False)
def toggleSelection(self):
checked = False
for i in range(len(self.options)):
widget = self.tblLayers.cellWidget(i, 0)
if not widget.isChecked():
checked = True
break
for i in range(len(self.options)):
widget = self.tblLayers.cellWidget(i, 0)
widget.setChecked(checked)
selModel = self.lstLayers.selectionModel()
self.lstLayers.blockSignals(True)
for i in xrange(self.lstLayers.count()):
item = self.lstLayers.item(i)
selModel.select(self.lstLayers.indexFromItem(item),
QItemSelectionModel.Toggle)
self.lstLayers.blockSignals(False)

View File

@ -17,24 +17,29 @@
<property name="spacing">
<number>2</number>
</property>
<property name="margin">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTableWidget" name="tblLayers">
<property name="columnCount">
<number>1</number>
<widget class="QListWidget" name="lstLayers">
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<attribute name="horizontalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="horizontalHeaderStretchLastSection">
<property name="alternatingRowColors">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<column/>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::ExtendedSelection</enum>
</property>
</widget>
</item>
<item>

View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'python/plugins/processing/ui/DlgMultipleSelection.ui'
#
# Created: Wed Oct 2 20:04:27 2013
# Created: Thu Oct 3 20:32:49 2013
# by: PyQt4 UI code generator 4.9.1
#
# WARNING! All changes made in this file will be lost!
@ -20,16 +20,14 @@ class Ui_DlgMultipleSelection(object):
DlgMultipleSelection.resize(380, 320)
self.horizontalLayout = QtGui.QHBoxLayout(DlgMultipleSelection)
self.horizontalLayout.setSpacing(2)
self.horizontalLayout.setMargin(0)
self.horizontalLayout.setContentsMargins(0, 5, 0, 0)
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
self.tblLayers = QtGui.QTableWidget(DlgMultipleSelection)
self.tblLayers.setColumnCount(1)
self.tblLayers.setObjectName(_fromUtf8("tblLayers"))
self.tblLayers.setRowCount(0)
self.tblLayers.horizontalHeader().setVisible(False)
self.tblLayers.horizontalHeader().setStretchLastSection(True)
self.tblLayers.verticalHeader().setVisible(False)
self.horizontalLayout.addWidget(self.tblLayers)
self.lstLayers = QtGui.QListWidget(DlgMultipleSelection)
self.lstLayers.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
self.lstLayers.setAlternatingRowColors(True)
self.lstLayers.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
self.lstLayers.setObjectName(_fromUtf8("lstLayers"))
self.horizontalLayout.addWidget(self.lstLayers)
self.buttonBox = QtGui.QDialogButtonBox(DlgMultipleSelection)
self.buttonBox.setOrientation(QtCore.Qt.Vertical)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)