Skip to content

Commit fea66f9

Browse files
committedMar 2, 2018
Update ui and add shortcut to cancel pending query
1 parent 86d66c7 commit fea66f9

File tree

4 files changed

+71
-71
lines changed

4 files changed

+71
-71
lines changed
 

‎python/plugins/db_manager/db_plugins/data_model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,10 @@ def __init__(self):
158158
self.status = None
159159
self.model = None
160160
self.task = None
161+
self.canceled = False
161162

162163
def cancel(self):
164+
self.canceled = True
163165
if self.task:
164166
self.task.cancel()
165167

‎python/plugins/db_manager/dlg_cancel_task_query.py

Lines changed: 0 additions & 65 deletions
This file was deleted.

‎python/plugins/db_manager/dlg_sql_window.py

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
from .db_plugins.postgis.plugin import PGDatabase
3838
from .dlg_db_error import DlgDbError
3939
from .dlg_query_builder import QueryBuilderDlg
40-
from .dlg_cancel_task_query import DlgCancelTaskQuery
4140

4241
try:
4342
from qgis.gui import QgsCodeEditorSQL # NOQA
@@ -57,12 +56,11 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
5756

5857
def __init__(self, iface, db, parent=None):
5958
QWidget.__init__(self, parent)
59+
self.mainWindow = parent
6060
self.iface = iface
6161
self.db = db
6262
self.filter = ""
6363
self.modelAsync = None
64-
self.dlg_cancel_task = DlgCancelTaskQuery(self)
65-
self.dlg_cancel_task.canceled.connect(self.executeSqlCanceled)
6664
self.allowMultiColumnPk = isinstance(db, PGDatabase) # at the moment only PostgreSQL allows a primary key to span multiple columns, SpatiaLite doesn't
6765
self.aliasSubQuery = isinstance(db, PGDatabase) # only PostgreSQL requires subqueries to be aliases
6866
self.setupUi(self)
@@ -81,6 +79,16 @@ def __init__(self, iface, db, parent=None):
8179
self.editSql.setMarginVisible(True)
8280
self.initCompleter()
8381

82+
self.btnCancel.setText(self.tr("Cancel (ESC)"))
83+
self.btnCancel.setEnabled(False)
84+
self.btnCancel.clicked.connect(self.executeSqlCanceled)
85+
self.btnCancel.setShortcut(QKeySequence.Cancel)
86+
self.progressBar.setEnabled(False)
87+
self.progressBar.setRange(0, 100)
88+
self.progressBar.setValue(0)
89+
self.progressBar.setFormat("")
90+
self.progressBar.setAlignment(Qt.AlignCenter)
91+
8492
# allow copying results
8593
copyAction = QAction("copy", self)
8694
self.viewResult.addAction(copyAction)
@@ -181,11 +189,45 @@ def clearSql(self):
181189
self.editSql.setFocus()
182190
self.filter = ""
183191

192+
def updateUiWhileSqlExecution(self, status):
193+
if status:
194+
for i in range(0, self.mainWindow.tabs.count()):
195+
if i != self.mainWindow.tabs.currentIndex():
196+
self.mainWindow.tabs.setTabEnabled(i, False)
197+
198+
self.mainWindow.menuBar.setEnabled(False)
199+
self.mainWindow.toolBar.setEnabled(False)
200+
self.mainWindow.tree.setEnabled(False)
201+
202+
for w in self.findChildren(QWidget):
203+
w.setEnabled(False)
204+
205+
self.btnCancel.setEnabled(True)
206+
self.progressBar.setEnabled(True)
207+
self.progressBar.setRange(0, 0)
208+
else:
209+
for i in range(0, self.mainWindow.tabs.count()):
210+
if i != self.mainWindow.tabs.currentIndex():
211+
self.mainWindow.tabs.setTabEnabled(i, True)
212+
213+
self.mainWindow.refreshTabs()
214+
self.mainWindow.menuBar.setEnabled(True)
215+
self.mainWindow.toolBar.setEnabled(True)
216+
self.mainWindow.tree.setEnabled(True)
217+
218+
for w in self.findChildren(QWidget):
219+
w.setEnabled(True)
220+
221+
self.btnCancel.setEnabled(False)
222+
self.progressBar.setRange(0, 100)
223+
self.progressBar.setEnabled(False)
224+
184225
def executeSqlCanceled(self):
226+
self.btnCancel.setEnabled(False)
185227
self.modelAsync.cancel()
186228

187229
def executeSqlCompleted(self):
188-
self.dlg_cancel_task.hide()
230+
self.updateUiWhileSqlExecution(False)
189231

190232
with OverrideCursor(Qt.WaitCursor):
191233
if self.modelAsync.task.status() == QgsTask.Complete:
@@ -201,7 +243,7 @@ def executeSqlCompleted(self):
201243

202244
self.setColumnCombos(cols, quotedCols)
203245
self.update()
204-
elif not self.dlg_cancel_task.cancelStatus:
246+
elif not self.modelAsync.canceled:
205247
DlgDbError.showError(self.modelAsync.error, self)
206248
self.uniqueModel.clear()
207249
self.geomCombo.clear()
@@ -222,7 +264,7 @@ def executeSql(self):
222264
try:
223265
self.modelAsync = self.db.sqlResultModelAsync(sql, self)
224266
self.modelAsync.done.connect(self.executeSqlCompleted)
225-
self.dlg_cancel_task.show()
267+
self.updateUiWhileSqlExecution(True)
226268
QgsApplication.taskManager().addTask(self.modelAsync.task)
227269
except Exception as e:
228270
DlgDbError.showError(e, self)

‎python/plugins/db_manager/ui/DlgSqlWindow.ui

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,27 @@ unique values</string>
393393
</widget>
394394
</widget>
395395
</item>
396+
<item row="4" column="0">
397+
<layout class="QHBoxLayout" name="horizontalLayout_4">
398+
<property name="bottomMargin">
399+
<number>0</number>
400+
</property>
401+
<item>
402+
<widget class="QProgressBar" name="progressBar">
403+
<property name="value">
404+
<number>24</number>
405+
</property>
406+
</widget>
407+
</item>
408+
<item>
409+
<widget class="QPushButton" name="btnCancel">
410+
<property name="text">
411+
<string>Cancel (ESC)</string>
412+
</property>
413+
</widget>
414+
</item>
415+
</layout>
416+
</item>
396417
</layout>
397418
</widget>
398419
<customwidgets>

0 commit comments

Comments
 (0)
Please sign in to comment.