[processing] config dialog: only save menu configuration if needed

Conflicts:
	python/plugins/processing/gui/ConfigDialog.py
This commit is contained in:
volaya 2016-12-12 15:01:11 +01:00
parent f852603f07
commit 4c31bc407e

View File

@ -31,8 +31,7 @@ import os
from qgis.PyQt import uic from qgis.PyQt import uic
from qgis.PyQt.QtCore import (Qt, from qgis.PyQt.QtCore import (Qt,
QEvent QEvent)
)
from qgis.PyQt.QtWidgets import (QFileDialog, from qgis.PyQt.QtWidgets import (QFileDialog,
QDialog, QDialog,
QStyle, QStyle,
@ -46,7 +45,9 @@ from qgis.PyQt.QtWidgets import (QFileDialog,
QPushButton) QPushButton)
from qgis.PyQt.QtGui import (QIcon, from qgis.PyQt.QtGui import (QIcon,
QStandardItemModel, QStandardItemModel,
QStandardItem) QStandardItem,
QApplication,
QCursor)
from qgis.gui import (QgsDoubleSpinBox, from qgis.gui import (QgsDoubleSpinBox,
QgsSpinBox QgsSpinBox
@ -58,8 +59,7 @@ from processing.core.ProcessingConfig import (ProcessingConfig,
Setting) Setting)
from processing.core.Processing import Processing from processing.core.Processing import Processing
from processing.gui.DirectorySelectorDialog import DirectorySelectorDialog from processing.gui.DirectorySelectorDialog import DirectorySelectorDialog
from processing.gui.menus import defaultMenuEntries, updateMenus from processing.gui.menus import defaultMenuEntries, updateMenus, menusSettingsGroup
from processing.gui.menus import menusSettingsGroup
pluginPath = os.path.split(os.path.dirname(__file__))[0] pluginPath = os.path.split(os.path.dirname(__file__))[0]
@ -93,7 +93,8 @@ class ConfigDialog(BASE, WIDGET):
self.fillTree() self.fillTree()
self.tree.expanded.connect(self.adjustColumns) self.saveMenus = False
self.tree.expanded.connect(self.itemExpanded)
def textChanged(self): def textChanged(self):
text = str(self.searchBox.text().lower()) text = str(self.searchBox.text().lower())
@ -192,14 +193,14 @@ class ConfigDialog(BASE, WIDGET):
""" """
Filter 'Menus' items Filter 'Menus' items
""" """
menusItem = QStandardItem(self.tr('Menus')) self.menusItem = QStandardItem(self.tr('Menus'))
icon = QIcon(os.path.join(pluginPath, 'images', 'menu.png')) icon = QIcon(os.path.join(pluginPath, 'images', 'menu.png'))
menusItem.setIcon(icon) self.menusItem.setIcon(icon)
menusItem.setEditable(False) self.menusItem.setEditable(False)
emptyItem = QStandardItem() emptyItem = QStandardItem()
emptyItem.setEditable(False) emptyItem.setEditable(False)
rootItem.insertRow(0, [menusItem, emptyItem]) rootItem.insertRow(0, [self.menusItem, emptyItem])
button = QPushButton(self.tr('Reset to defaults')) button = QPushButton(self.tr('Reset to defaults'))
button.clicked.connect(self.resetMenusToDefaults) button.clicked.connect(self.resetMenusToDefaults)
@ -248,7 +249,7 @@ class ConfigDialog(BASE, WIDGET):
emptyItem = QStandardItem() emptyItem = QStandardItem()
emptyItem.setEditable(False) emptyItem.setEditable(False)
menusItem.appendRow([groupItem, emptyItem]) self.menusItem.appendRow([groupItem, emptyItem])
self.tree.sortByColumn(0, Qt.AscendingOrder) self.tree.sortByColumn(0, Qt.AscendingOrder)
self.adjustColumns() self.adjustColumns()
@ -261,24 +262,32 @@ class ConfigDialog(BASE, WIDGET):
setting = ProcessingConfig.settings["MENU_" + alg.commandLineName()] setting = ProcessingConfig.settings["MENU_" + alg.commandLineName()]
item = self.items[setting] item = self.items[setting]
item.setData(d, Qt.EditRole) item.setData(d, Qt.EditRole)
self.saveMenus = True
def accept(self): def accept(self):
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
for setting in list(self.items.keys()): for setting in list(self.items.keys()):
if isinstance(setting.value, bool): if setting.group != menusSettingsGroup or self.saveMenus:
setting.setValue(self.items[setting].checkState() == Qt.Checked) if isinstance(setting.value, bool):
else: setting.setValue(self.items[setting].checkState() == Qt.Checked)
try: else:
setting.setValue(str(self.items[setting].text())) try:
except ValueError as e: setting.setValue(str(self.items[setting].text()))
QMessageBox.warning(self, self.tr('Wrong value'), except ValueError as e:
self.tr('Wrong value for parameter "%s":\n\n%s' % (setting.description, str(e)))) QMessageBox.warning(self, self.tr('Wrong value'),
return self.tr('Wrong value for parameter "%s":\n\n%s' % (setting.description, str(e))))
setting.save() return
setting.save()
Processing.updateAlgsList() Processing.updateAlgsList()
settingsWatcher.settingsChanged.emit() settingsWatcher.settingsChanged.emit()
QApplication.restoreOverrideCursor()
QDialog.accept(self) QDialog.accept(self)
def itemExpanded(self, idx):
if idx == self.menusItem.index():
self.saveMenus = True
self.adjustColumns()
def adjustColumns(self): def adjustColumns(self):
self.tree.resizeColumnToContents(0) self.tree.resizeColumnToContents(0)
self.tree.resizeColumnToContents(1) self.tree.resizeColumnToContents(1)