From 3ce6fcd31d8cbf1b28279f60dacfd3ccc238eee2 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Sun, 30 Jul 2017 22:36:51 +0200 Subject: [PATCH] Even more endless hourglass avoidance --- python/plugins/db_manager/db_model.py | 57 +++++++++---------- python/plugins/db_manager/dlg_create_table.py | 21 +++---- .../processing/gui/ScriptEditorDialog.py | 17 +++--- 3 files changed, 43 insertions(+), 52 deletions(-) diff --git a/python/plugins/db_manager/db_model.py b/python/plugins/db_manager/db_model.py index 4ee0f4d2284..0650791f480 100644 --- a/python/plugins/db_manager/db_model.py +++ b/python/plugins/db_manager/db_model.py @@ -32,6 +32,7 @@ from .db_plugins.plugin import BaseError, Table, Database from .dlg_db_error import DlgDbError from qgis.core import QgsDataSourceUri, QgsVectorLayer, QgsRasterLayer, QgsMimeDataUtils +from qgis.utils import OverrideCursor from . import resources_rc # NOQA @@ -458,17 +459,15 @@ class DBModel(QAbstractItemModel): if new_value == obj.name: return False - QApplication.setOverrideCursor(Qt.WaitCursor) - try: - obj.rename(new_value) - self._onDataChanged(index) - except BaseError as e: - DlgDbError.showError(e, self.treeView) - return False - finally: - QApplication.restoreOverrideCursor() - - return True + with OverrideCursor(Qt.WaitCursor): + try: + obj.rename(new_value) + self._onDataChanged(index) + except BaseError as e: + DlgDbError.showError(e, self.treeView) + return False + else: + return True return False @@ -480,27 +479,23 @@ class DBModel(QAbstractItemModel): self.endRemoveRows() def _refreshIndex(self, index, force=False): - QApplication.setOverrideCursor(Qt.WaitCursor) - try: - item = index.internalPointer() if index.isValid() else self.rootItem - prevPopulated = item.populated - if prevPopulated: - self.removeRows(0, self.rowCount(index), index) + with OverrideCursor(Qt.WaitCursor): + try: + item = index.internalPointer() if index.isValid() else self.rootItem + prevPopulated = item.populated + if prevPopulated: + self.removeRows(0, self.rowCount(index), index) + item.populated = False + if prevPopulated or force: + if item.populate(): + for child in item.childItems: + child.changed.connect(partial(self.refreshItem, child)) + self._onDataChanged(index) + else: + self.notPopulated.emit(index) + + except BaseError: item.populated = False - if prevPopulated or force: - if item.populate(): - for child in item.childItems: - child.changed.connect(partial(self.refreshItem, child)) - self._onDataChanged(index) - else: - self.notPopulated.emit(index) - - except BaseError: - item.populated = False - return - - finally: - QApplication.restoreOverrideCursor() def _onDataChanged(self, indexFrom, indexTo=None): if indexTo is None: diff --git a/python/plugins/db_manager/dlg_create_table.py b/python/plugins/db_manager/dlg_create_table.py index 0e76e7416ef..4508736a0e1 100644 --- a/python/plugins/db_manager/dlg_create_table.py +++ b/python/plugins/db_manager/dlg_create_table.py @@ -297,19 +297,16 @@ class DlgCreateTable(QDialog, Ui_Dialog): flds[pk_index].primaryKey = True # commit to DB - QApplication.setOverrideCursor(Qt.WaitCursor) - try: - if not useGeomColumn: - self.db.createTable(table, flds, schema) - else: - geom = geomColumn, geomType, geomSrid, geomDim, useSpatialIndex - self.db.createVectorTable(table, flds, geom, schema) + with OverrideCursor(Qt.WaitCursor): + try: + if not useGeomColumn: + self.db.createTable(table, flds, schema) + else: + geom = geomColumn, geomType, geomSrid, geomDim, useSpatialIndex + self.db.createVectorTable(table, flds, geom, schema) - except (ConnectionError, DbError) as e: - DlgDbError.showError(e, self) + except (ConnectionError, DbError) as e: + DlgDbError.showError(e, self) return - finally: - QApplication.restoreOverrideCursor() - QMessageBox.information(self, self.tr("Good"), self.tr("everything went fine")) diff --git a/python/plugins/processing/gui/ScriptEditorDialog.py b/python/plugins/processing/gui/ScriptEditorDialog.py index cb2d85266fa..87b9f8db3a2 100644 --- a/python/plugins/processing/gui/ScriptEditorDialog.py +++ b/python/plugins/processing/gui/ScriptEditorDialog.py @@ -38,7 +38,7 @@ from qgis.PyQt.QtWidgets import (QMessageBox, QApplication) from qgis.core import QgsApplication, QgsSettings -from qgis.utils import iface +from qgis.utils import iface, OverrideCursor from processing.gui.AlgorithmDialog import AlgorithmDialog from processing.gui.HelpEditionDialog import HelpEditionDialog @@ -207,15 +207,14 @@ class ScriptEditorDialog(BASE, WIDGET): if self.filename == '': return - QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) - with codecs.open(self.filename, 'r', encoding='utf-8') as f: - txt = f.read() + with OverrideCursor(Qt.WaitCursor): + with codecs.open(self.filename, 'r', encoding='utf-8') as f: + txt = f.read() - self.editor.setText(txt) - self.hasChanged = False - self.editor.setModified(False) - self.editor.recolor() - QApplication.restoreOverrideCursor() + self.editor.setText(txt) + self.hasChanged = False + self.editor.setModified(False) + self.editor.recolor() def save(self): self.saveScript(False)