123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- """
- ***************************************************************************
- DirectorySelectorDialog.py
- ---------------------
- Date : May 2016
- Copyright : (C) 2016 by Alexander Bruy
- Email : alexander dot bruy at gmail dot com
- ***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- ***************************************************************************
- """
- __author__ = 'Alexander Bruy'
- __date__ = 'May 2016'
- __copyright__ = '(C) 2016, Victor Olaya'
- import os
- import warnings
- from qgis.PyQt import uic
- from qgis.core import QgsSettings
- from qgis.PyQt.QtWidgets import QDialog, QAbstractItemView, QPushButton, QDialogButtonBox, QFileDialog
- from qgis.PyQt.QtGui import QStandardItemModel, QStandardItem
- pluginPath = os.path.split(os.path.dirname(__file__))[0]
- with warnings.catch_warnings():
- warnings.filterwarnings("ignore", category=DeprecationWarning)
- WIDGET, BASE = uic.loadUiType(
- os.path.join(pluginPath, 'ui', 'DlgMultipleSelection.ui'))
- class DirectorySelectorDialog(BASE, WIDGET):
- def __init__(self, parent, options):
- super().__init__(None)
- self.setupUi(self)
- self.lstLayers.setSelectionMode(QAbstractItemView.ExtendedSelection)
- self.options = options
- # Additional buttons
- self.btnAdd = QPushButton(self.tr('Add'))
- self.buttonBox.addButton(self.btnAdd,
- QDialogButtonBox.ActionRole)
- self.btnRemove = QPushButton(self.tr('Remove'))
- self.buttonBox.addButton(self.btnRemove,
- QDialogButtonBox.ActionRole)
- self.btnRemoveAll = QPushButton(self.tr('Remove all'))
- self.buttonBox.addButton(self.btnRemoveAll,
- QDialogButtonBox.ActionRole)
- self.btnAdd.clicked.connect(self.addDirectory)
- self.btnRemove.clicked.connect(lambda: self.removeRows())
- self.btnRemoveAll.clicked.connect(lambda: self.removeRows(True))
- self.populateList()
- def populateList(self):
- model = QStandardItemModel()
- for option in self.options:
- item = QStandardItem(option)
- model.appendRow(item)
- self.lstLayers.setModel(model)
- def accept(self):
- self.selectedoptions = []
- model = self.lstLayers.model()
- for i in range(model.rowCount()):
- item = model.item(i)
- self.selectedoptions.append(item.text())
- QDialog.accept(self)
- def reject(self):
- QDialog.reject(self)
- def addDirectory(self):
- settings = QgsSettings()
- if settings.contains('/Processing/lastDirectory'):
- path = settings.value('/Processing/lastDirectory')
- else:
- path = ''
- folder = QFileDialog.getExistingDirectory(self,
- self.tr('Select directory'),
- path,
- QFileDialog.ShowDirsOnly)
- if folder == '':
- return
- model = self.lstLayers.model()
- item = QStandardItem(folder)
- model.appendRow(item)
- settings.setValue('/Processing/lastDirectory',
- os.path.dirname(folder))
- def removeRows(self, removeAll=False):
- if removeAll:
- self.lstLayers.model().clear()
- else:
- self.lstLayers.setUpdatesEnabled(False)
- indexes = sorted(self.lstLayers.selectionModel().selectedIndexes())
- for i in reversed(indexes):
- self.lstLayers.model().removeRow(i.row())
- self.lstLayers.setUpdatesEnabled(True)
- def value(self):
- folders = []
- model = self.lstLayers.model()
- for i in range(model.rowCount()):
- folders.append(model.item(i).text())
- return ';'.join(folders)
|