37
37
from .db_plugins .postgis .plugin import PGDatabase
38
38
from .dlg_db_error import DlgDbError
39
39
from .dlg_query_builder import QueryBuilderDlg
40
- from .dlg_cancel_task_query import DlgCancelTaskQuery
41
40
42
41
try :
43
42
from qgis .gui import QgsCodeEditorSQL # NOQA
@@ -57,12 +56,11 @@ class DlgSqlWindow(QWidget, Ui_Dialog):
57
56
58
57
def __init__ (self , iface , db , parent = None ):
59
58
QWidget .__init__ (self , parent )
59
+ self .mainWindow = parent
60
60
self .iface = iface
61
61
self .db = db
62
62
self .filter = ""
63
63
self .modelAsync = None
64
- self .dlg_cancel_task = DlgCancelTaskQuery (self )
65
- self .dlg_cancel_task .canceled .connect (self .executeSqlCanceled )
66
64
self .allowMultiColumnPk = isinstance (db , PGDatabase ) # at the moment only PostgreSQL allows a primary key to span multiple columns, SpatiaLite doesn't
67
65
self .aliasSubQuery = isinstance (db , PGDatabase ) # only PostgreSQL requires subqueries to be aliases
68
66
self .setupUi (self )
@@ -81,6 +79,16 @@ def __init__(self, iface, db, parent=None):
81
79
self .editSql .setMarginVisible (True )
82
80
self .initCompleter ()
83
81
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
+
84
92
# allow copying results
85
93
copyAction = QAction ("copy" , self )
86
94
self .viewResult .addAction (copyAction )
@@ -181,11 +189,45 @@ def clearSql(self):
181
189
self .editSql .setFocus ()
182
190
self .filter = ""
183
191
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
+
184
225
def executeSqlCanceled (self ):
226
+ self .btnCancel .setEnabled (False )
185
227
self .modelAsync .cancel ()
186
228
187
229
def executeSqlCompleted (self ):
188
- self .dlg_cancel_task . hide ( )
230
+ self .updateUiWhileSqlExecution ( False )
189
231
190
232
with OverrideCursor (Qt .WaitCursor ):
191
233
if self .modelAsync .task .status () == QgsTask .Complete :
@@ -201,7 +243,7 @@ def executeSqlCompleted(self):
201
243
202
244
self .setColumnCombos (cols , quotedCols )
203
245
self .update ()
204
- elif not self .dlg_cancel_task . cancelStatus :
246
+ elif not self .modelAsync . canceled :
205
247
DlgDbError .showError (self .modelAsync .error , self )
206
248
self .uniqueModel .clear ()
207
249
self .geomCombo .clear ()
@@ -222,7 +264,7 @@ def executeSql(self):
222
264
try :
223
265
self .modelAsync = self .db .sqlResultModelAsync (sql , self )
224
266
self .modelAsync .done .connect (self .executeSqlCompleted )
225
- self .dlg_cancel_task . show ( )
267
+ self .updateUiWhileSqlExecution ( True )
226
268
QgsApplication .taskManager ().addTask (self .modelAsync .task )
227
269
except Exception as e :
228
270
DlgDbError .showError (e , self )
0 commit comments