Skip to content

Commit 64ab894

Browse files
committed
Merge pull request #555 from olivierdalang/SaveSqlQueriesInDbManager
[FEATURE] DBManager: allow to store SQL queries in the project file
2 parents 37a30bb + 6bd1b78 commit 64ab894

File tree

2 files changed

+91
-7
lines changed

2 files changed

+91
-7
lines changed

python/plugins/db_manager/dlg_sql_window.py

+47
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
from PyQt4.QtCore import *
2626
from PyQt4.QtGui import *
27+
from qgis.core import *
2728

2829
from .db_plugins.plugin import BaseError
2930
from .dlg_db_error import DlgDbError
@@ -61,6 +62,12 @@ def __init__(self, iface, db, parent=None):
6162
self.connect(self.btnClear, SIGNAL("clicked()"), self.clearSql)
6263
self.connect(self.buttonBox.button(QDialogButtonBox.Close), SIGNAL("clicked()"), self.close)
6364

65+
66+
self.connect(self.presetStore, SIGNAL("clicked()"), self.storePreset)
67+
self.connect(self.presetDelete, SIGNAL("clicked()"), self.deletePreset)
68+
self.connect(self.presetCombo, SIGNAL("activated(QString)"), self.loadPreset)
69+
self.connect(self.presetCombo, SIGNAL("activated(QString)"), self.presetName.setText)
70+
6471
# hide the load query as layer if feature is not supported
6572
self._loadAsLayerAvailable = self.db.connector.hasCustomQuerySupport()
6673
self.loadAsLayerGroup.setVisible( self._loadAsLayerAvailable )
@@ -71,6 +78,46 @@ def __init__(self, iface, db, parent=None):
7178
self.connect(self.loadAsLayerGroup, SIGNAL("toggled(bool)"), self.loadAsLayerToggled)
7279
self.loadAsLayerToggled(False)
7380

81+
def showEvent(self, event):
82+
QDialog.showEvent(self, event)
83+
self.updatePresetsCombobox()
84+
85+
86+
87+
def updatePresetsCombobox(self):
88+
entries = QgsProject.instance().subkeyList('DBManager','savedQueries')
89+
self.presetCombo.clear()
90+
names = []
91+
for entry in entries:
92+
name = QgsProject.instance().readEntry('DBManager','savedQueries/'+entry+'/name' )[0]
93+
names.append( name )
94+
95+
names.sort()
96+
97+
for name in names:
98+
self.presetCombo.addItem(name)
99+
100+
def storePreset(self):
101+
query = self.editSql.toPlainText()
102+
name = self.presetName.text()
103+
QgsProject.instance().writeEntry('DBManager','savedQueries/q'+str(name.__hash__())+'/name', name )
104+
QgsProject.instance().writeEntry('DBManager','savedQueries/q'+str(name.__hash__())+'/query', query )
105+
index = self.presetCombo.findText(name)
106+
if index == -1:
107+
self.presetCombo.addItem(name)
108+
self.presetCombo.setCurrentIndex(self.presetCombo.count()-1)
109+
else:
110+
self.presetCombo.setCurrentIndex(index)
111+
112+
def deletePreset(self):
113+
name = self.presetCombo.currentText()
114+
QgsProject.instance().removeEntry('DBManager','savedQueries/q'+str(name.__hash__()) )
115+
self.presetCombo.removeItem( self.presetCombo.findText(name) )
116+
self.presetCombo.setCurrentIndex(-1)
117+
def loadPreset(self, name):
118+
query = QgsProject.instance().readEntry('DBManager','savedQueries/q'+str(name.__hash__())+'/query' )[0]
119+
name = QgsProject.instance().readEntry('DBManager','savedQueries/q'+str(name.__hash__())+'/name' )[0]
120+
self.editSql.setText(query)
74121

75122
def closeEvent(self, e):
76123
""" save window state """

python/plugins/db_manager/ui/DlgSqlWindow.ui

+44-7
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,48 @@
2222
<widget class="QWidget" name="layoutWidget">
2323
<layout class="QVBoxLayout" name="verticalLayout_2">
2424
<item>
25-
<widget class="QLabel" name="label">
26-
<property name="text">
27-
<string>SQL query:</string>
28-
</property>
29-
</widget>
25+
<layout class="QHBoxLayout" name="horizontalLayout">
26+
<item>
27+
<widget class="QLabel" name="label">
28+
<property name="text">
29+
<string>SQL query:</string>
30+
</property>
31+
</widget>
32+
</item>
33+
<item>
34+
<spacer name="horizontalSpacer">
35+
<property name="orientation">
36+
<enum>Qt::Horizontal</enum>
37+
</property>
38+
<property name="sizeHint" stdset="0">
39+
<size>
40+
<width>40</width>
41+
<height>20</height>
42+
</size>
43+
</property>
44+
</spacer>
45+
</item>
46+
<item>
47+
<widget class="QLineEdit" name="presetName"/>
48+
</item>
49+
<item>
50+
<widget class="QComboBox" name="presetCombo"/>
51+
</item>
52+
<item>
53+
<widget class="QPushButton" name="presetStore">
54+
<property name="text">
55+
<string>Store</string>
56+
</property>
57+
</widget>
58+
</item>
59+
<item>
60+
<widget class="QPushButton" name="presetDelete">
61+
<property name="text">
62+
<string>Delete</string>
63+
</property>
64+
</widget>
65+
</item>
66+
</layout>
3067
</item>
3168
<item>
3269
<widget class="CompletionTextEdit" name="editSql">
@@ -40,8 +77,8 @@
4077
<string notr="true">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
4178
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
4279
p, li { white-space: pre-wrap; }
43-
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
44-
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
80+
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
81+
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'Ubuntu'; font-size:11pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
4582
</property>
4683
</widget>
4784
</item>

0 commit comments

Comments
 (0)