Skip to content

Commit 5fb52fa

Browse files
committed
Remove query dialog. Replace with tabs
1 parent bbce092 commit 5fb52fa

File tree

3 files changed

+189
-188
lines changed

3 files changed

+189
-188
lines changed

python/plugins/db_manager/db_manager.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
***************************************************************************/
2323
"""
2424

25+
import functools
26+
2527
from PyQt4.QtCore import QObject, Qt, QSettings, QByteArray, SIGNAL, QSize
2628
from PyQt4.QtGui import QMainWindow, QApplication, QMenu, QIcon, QTabWidget, QGridLayout, QSpacerItem, QSizePolicy, \
2729
QDockWidget, QStatusBar, QMenuBar, QToolBar, QKeySequence
@@ -188,17 +190,22 @@ def runSqlWindow(self):
188190

189191
from dlg_sql_window import DlgSqlWindow
190192

191-
dlg = DlgSqlWindow(self.iface, db, self)
192-
# refreshDb = lambda x: self.refreshItem( db.connection() ) # refresh the database tree
193-
#self.connect( dlg, SIGNAL( "queryExecuted(const QString &)" ), refreshDb )
194-
dlg.show()
195-
dlg.exec_()
193+
query = DlgSqlWindow(self.iface, db, self)
194+
index = self.tabs.addTab(query, self.tr("Query"))
195+
self.tabs.setCurrentIndex(index)
196+
try:
197+
self.tabs.setTabIcon(index, self.tree.currentItem().icon())
198+
except AttributeError:
199+
pass
200+
query.nameChanged.connect(functools.partial(self.update_tab_name, index))
196201

202+
def update_tab_name(self, index, name):
203+
name = name + "(query)"
204+
self.tabs.setTabText(index, name)
197205

198206
def showSystemTables(self):
199207
self.tree.showSystemTables(self.actionShowSystemTables.isChecked())
200208

201-
202209
def registerAction(self, action, menuName, callback=None):
203210
""" register an action to the manager's main menu """
204211
if not hasattr(self, '_registeredDbActions'):
@@ -340,13 +347,21 @@ def unregisterAllActions(self):
340347
self.unregisterAction(action, menuName)
341348
del self._registeredDbActions
342349

350+
def close_tab(self, index):
351+
widget = self.tabs.widget(index)
352+
if widget not in [self.info, self.table, self.preview]:
353+
self.tabs.removeTab(index)
354+
widget.deleteLater()
355+
343356
def setupUi(self):
344357
self.setWindowTitle(self.tr("DB Manager"))
345358
self.setWindowIcon(QIcon(":/db_manager/icon"))
346359
self.resize(QSize(700, 500).expandedTo(self.minimumSizeHint()))
347360

348361
# create central tab widget
349362
self.tabs = QTabWidget()
363+
self.tabs.setTabsClosable(True)
364+
self.tabs.tabCloseRequested.connect(self.close_tab)
350365
self.info = InfoViewer(self)
351366
self.tabs.addTab(self.info, self.tr("Info"))
352367
self.table = TableViewer(self)

python/plugins/db_manager/dlg_sql_window.py

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
***************************************************************************/
2323
"""
2424

25-
from PyQt4.QtCore import Qt, QObject, QSettings, QByteArray, SIGNAL
26-
from PyQt4.QtGui import QDialog, QAction, QKeySequence, QDialogButtonBox, QApplication, QCursor, QMessageBox, QClipboard, QInputDialog, QIcon
25+
from PyQt4.QtCore import Qt, QObject, QSettings, QByteArray, SIGNAL, pyqtSignal
26+
from PyQt4.QtGui import QDialog, QWidget, QAction, QKeySequence, \
27+
QDialogButtonBox, QApplication, QCursor, QMessageBox, QClipboard, QInputDialog, QIcon
2728
from PyQt4.Qsci import QsciAPIs
2829

2930
from qgis.core import QgsProject
@@ -45,9 +46,10 @@
4546
import re
4647

4748

48-
class DlgSqlWindow(QDialog, Ui_Dialog):
49+
class DlgSqlWindow(QWidget, Ui_Dialog):
50+
nameChanged = pyqtSignal(str)
4951
def __init__(self, iface, db, parent=None):
50-
QDialog.__init__(self, parent)
52+
QWidget.__init__(self, parent)
5153
self.iface = iface
5254
self.db = db
5355
self.setupUi(self)
@@ -56,9 +58,6 @@ def __init__(self, iface, db, parent=None):
5658

5759
self.defaultLayerName = 'QueryLayer'
5860

59-
settings = QSettings()
60-
self.restoreGeometry(settings.value("/DB_Manager/sqlWindow/geometry", QByteArray(), type=QByteArray))
61-
6261
self.editSql.setFocus()
6362
self.editSql.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
6463
self.initCompleter()
@@ -67,36 +66,39 @@ def __init__(self, iface, db, parent=None):
6766
copyAction = QAction("copy", self)
6867
self.viewResult.addAction(copyAction)
6968
copyAction.setShortcuts(QKeySequence.Copy)
70-
QObject.connect(copyAction, SIGNAL("triggered()"), self.copySelectedResults)
7169

72-
self.connect(self.btnExecute, SIGNAL("clicked()"), self.executeSql)
73-
self.connect(self.btnClear, SIGNAL("clicked()"), self.clearSql)
74-
self.connect(self.buttonBox.button(QDialogButtonBox.Close), SIGNAL("clicked()"), self.close)
70+
copyAction.triggered.connect(self.copySelectedResults)
71+
72+
self.btnExecute.clicked.connect(self.executeSql)
73+
self.btnClear.clicked.connect(self.clearSql)
74+
75+
self.presetStore.clicked.connect(self.storePreset)
76+
self.presetDelete.clicked.connect(self.deletePreset)
77+
self.presetCombo.activated[str].connect(self.loadPreset)
78+
self.presetCombo.activated[str].connect(self.presetName.setText)
7579

76-
self.connect(self.presetStore, SIGNAL("clicked()"), self.storePreset)
77-
self.connect(self.presetDelete, SIGNAL("clicked()"), self.deletePreset)
78-
self.connect(self.presetCombo, SIGNAL("activated(QString)"), self.loadPreset)
79-
self.connect(self.presetCombo, SIGNAL("activated(QString)"), self.presetName.setText)
8080
self.updatePresetsCombobox()
8181

8282
# hide the load query as layer if feature is not supported
8383
self._loadAsLayerAvailable = self.db.connector.hasCustomQuerySupport()
8484
self.loadAsLayerGroup.setVisible(self._loadAsLayerAvailable)
8585
if self._loadAsLayerAvailable:
8686
self.layerTypeWidget.hide() # show if load as raster is supported
87-
self.connect(self.loadLayerBtn, SIGNAL("clicked()"), self.loadSqlLayer)
88-
self.connect(self.getColumnsBtn, SIGNAL("clicked()"), self.fillColumnCombos)
89-
self.connect(self.loadAsLayerGroup, SIGNAL("toggled(bool)"), self.loadAsLayerToggled)
87+
self.loadLayerBtn.clicked.connect(self.loadSqlLayer)
88+
self.getColumnsBtn.clicked.connect(self.fillColumnCombos)
89+
self.loadAsLayerGroup.toggled.connect(self.loadAsLayerToggled)
9090
self.loadAsLayerToggled(False)
9191

9292
self._createViewAvailable = self.db.connector.hasCreateSpatialViewSupport()
9393
self.btnCreateView.setVisible( self._createViewAvailable )
9494
if self._createViewAvailable:
95-
self.connect( self.btnCreateView, SIGNAL("clicked()"), self.createView )
95+
self.btnCreateView.clicked.connect(self.createView)
9696

9797
self.queryBuilderFirst = True
9898
self.queryBuilderBtn.setIcon(QIcon(":/db_manager/icons/sql.gif"))
99-
self.connect( self.queryBuilderBtn, SIGNAL("clicked()"), self.displayQueryBuilder )
99+
self.queryBuilderBtn.clicked.connect(self.displayQueryBuilder)
100+
101+
self.presetName.textChanged.connect(self.nameChanged)
100102

101103
def updatePresetsCombobox(self):
102104
self.presetCombo.clear()
@@ -135,13 +137,6 @@ def loadPreset(self, name):
135137
name = QgsProject.instance().readEntry('DBManager', 'savedQueries/q' + unicode(name.__hash__()) + '/name')[0]
136138
self.editSql.setText(query)
137139

138-
def closeEvent(self, e):
139-
""" save window state """
140-
settings = QSettings()
141-
settings.setValue("/DB_Manager/sqlWindow/geometry", self.saveGeometry())
142-
143-
QDialog.closeEvent(self, e)
144-
145140
def loadAsLayerToggled(self, checked):
146141
self.loadAsLayerGroup.setChecked(checked)
147142
self.loadAsLayerWidget.setVisible(checked)

0 commit comments

Comments
 (0)