From f9c2b91e52dfd7016093e53c0d761830d7f7d0f0 Mon Sep 17 00:00:00 2001 From: Alexander Bruy Date: Thu, 3 Oct 2013 20:32:55 +0300 Subject: [PATCH] [processing] use list widget in Multiple selection dialog --- .../processing/gui/MultipleInputDialog.py | 64 ++++++++++++------- .../processing/ui/DlgMultipleSelection.ui | 31 +++++---- .../processing/ui/ui_DlgMultipleSelection.py | 18 +++--- 3 files changed, 66 insertions(+), 47 deletions(-) diff --git a/python/plugins/processing/gui/MultipleInputDialog.py b/python/plugins/processing/gui/MultipleInputDialog.py index a2d98160614..c838ecac7c4 100644 --- a/python/plugins/processing/gui/MultipleInputDialog.py +++ b/python/plugins/processing/gui/MultipleInputDialog.py @@ -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) \ No newline at end of file + 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) \ No newline at end of file diff --git a/python/plugins/processing/ui/DlgMultipleSelection.ui b/python/plugins/processing/ui/DlgMultipleSelection.ui index 15d3e57ba0c..e8bb5e61202 100644 --- a/python/plugins/processing/ui/DlgMultipleSelection.ui +++ b/python/plugins/processing/ui/DlgMultipleSelection.ui @@ -17,24 +17,29 @@ 2 - + + 0 + + + 5 + + + 0 + + 0 - - - 1 + + + QAbstractItemView::NoEditTriggers - - false - - + true - - - false - - + + + QAbstractItemView::ExtendedSelection + diff --git a/python/plugins/processing/ui/ui_DlgMultipleSelection.py b/python/plugins/processing/ui/ui_DlgMultipleSelection.py index 5189373be3c..e9a958be022 100644 --- a/python/plugins/processing/ui/ui_DlgMultipleSelection.py +++ b/python/plugins/processing/ui/ui_DlgMultipleSelection.py @@ -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)