eric7/SqlBrowser/SqlBrowser.py

branch
eric7
changeset 8312
800c432b34c8
parent 8218
7c09585bd960
child 8318
962bce857696
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the SQL Browser main window.
8 """
9
10 from PyQt5.QtCore import QTimer, QUrl
11 from PyQt5.QtGui import QKeySequence
12 from PyQt5.QtSql import QSqlError, QSqlDatabase
13
14 from E5Gui.E5Action import E5Action
15 from E5Gui import E5MessageBox
16 from E5Gui.E5MainWindow import E5MainWindow
17 from E5Gui.E5Application import e5App
18
19 import UI.PixmapCache
20 import UI.Config
21
22 import Preferences
23
24
25 class SqlBrowser(E5MainWindow):
26 """
27 Class implementing the SQL Browser main window.
28 """
29 def __init__(self, connections=None, parent=None):
30 """
31 Constructor
32
33 @param connections list of database connections to add
34 (list of strings)
35 @param parent reference to the parent widget (QWidget)
36 """
37 super().__init__(parent)
38 self.setObjectName("SqlBrowser")
39
40 if connections is None:
41 connections = []
42
43 self.setWindowTitle(self.tr("SQL Browser"))
44 self.setWindowIcon(UI.PixmapCache.getIcon("eric"))
45
46 self.setStyle(Preferences.getUI("Style"),
47 Preferences.getUI("StyleSheet"))
48
49 from .SqlBrowserWidget import SqlBrowserWidget
50 self.__browser = SqlBrowserWidget(self)
51 self.setCentralWidget(self.__browser)
52
53 self.__browser.statusMessage.connect(self.statusBar().showMessage)
54
55 self.__initActions()
56 self.__initMenus()
57 self.__initToolbars()
58
59 self.resize(self.__browser.size())
60
61 self.__warnings = []
62
63 for connection in connections:
64 url = QUrl(connection, QUrl.ParsingMode.TolerantMode)
65 if not url.isValid():
66 self.__warnings.append(
67 self.tr("Invalid URL: {0}").format(connection))
68 continue
69
70 err = self.__browser.addConnection(url.scheme(), url.path(),
71 url.userName(), url.password(),
72 url.host(), url.port(-1))
73 if err.type() != QSqlError.ErrorType.NoError:
74 self.__warnings.append(
75 self.tr("Unable to open connection: {0}".format(
76 err.text())))
77
78 QTimer.singleShot(0, self.__uiStartUp)
79
80 def __uiStartUp(self):
81 """
82 Private slot to do some actions after the UI has started and the main
83 loop is up.
84 """
85 for warning in self.__warnings:
86 E5MessageBox.warning(
87 self,
88 self.tr("SQL Browser startup problem"),
89 warning)
90
91 if len(QSqlDatabase.connectionNames()) == 0:
92 self.__browser.addConnectionByDialog()
93
94 def __initActions(self):
95 """
96 Private method to define the user interface actions.
97 """
98 # list of all actions
99 self.__actions = []
100
101 self.addConnectionAct = E5Action(
102 self.tr('Add Connection'),
103 UI.PixmapCache.getIcon("databaseConnection"),
104 self.tr('Add &Connection...'),
105 0, 0, self, 'sql_file_add_connection')
106 self.addConnectionAct.setStatusTip(self.tr(
107 'Open a dialog to add a new database connection'))
108 self.addConnectionAct.setWhatsThis(self.tr(
109 """<b>Add Connection</b>"""
110 """<p>This opens a dialog to add a new database"""
111 """ connection.</p>"""
112 ))
113 self.addConnectionAct.triggered.connect(
114 self.__browser.addConnectionByDialog)
115 self.__actions.append(self.addConnectionAct)
116
117 self.exitAct = E5Action(
118 self.tr('Quit'),
119 UI.PixmapCache.getIcon("exit"),
120 self.tr('&Quit'),
121 QKeySequence(self.tr("Ctrl+Q", "File|Quit")),
122 0, self, 'sql_file_quit')
123 self.exitAct.setStatusTip(self.tr('Quit the SQL browser'))
124 self.exitAct.setWhatsThis(self.tr(
125 """<b>Quit</b>"""
126 """<p>Quit the SQL browser.</p>"""
127 ))
128 self.exitAct.triggered.connect(e5App().closeAllWindows)
129
130 self.aboutAct = E5Action(
131 self.tr('About'),
132 self.tr('&About'),
133 0, 0, self, 'sql_help_about')
134 self.aboutAct.setStatusTip(self.tr(
135 'Display information about this software'))
136 self.aboutAct.setWhatsThis(self.tr(
137 """<b>About</b>"""
138 """<p>Display some information about this software.</p>"""
139 ))
140 self.aboutAct.triggered.connect(self.__about)
141 self.__actions.append(self.aboutAct)
142
143 self.aboutQtAct = E5Action(
144 self.tr('About Qt'),
145 self.tr('About &Qt'),
146 0, 0, self, 'sql_help_about_qt')
147 self.aboutQtAct.setStatusTip(
148 self.tr('Display information about the Qt toolkit'))
149 self.aboutQtAct.setWhatsThis(self.tr(
150 """<b>About Qt</b>"""
151 """<p>Display some information about the Qt toolkit.</p>"""
152 ))
153 self.aboutQtAct.triggered.connect(self.__aboutQt)
154 self.__actions.append(self.aboutQtAct)
155
156 def __initMenus(self):
157 """
158 Private method to create the menus.
159 """
160 mb = self.menuBar()
161
162 menu = mb.addMenu(self.tr('&File'))
163 menu.setTearOffEnabled(True)
164 menu.addAction(self.addConnectionAct)
165 menu.addSeparator()
166 menu.addAction(self.exitAct)
167
168 mb.addSeparator()
169
170 menu = mb.addMenu(self.tr('&Help'))
171 menu.setTearOffEnabled(True)
172 menu.addAction(self.aboutAct)
173 menu.addAction(self.aboutQtAct)
174
175 def __initToolbars(self):
176 """
177 Private method to create the toolbars.
178 """
179 filetb = self.addToolBar(self.tr("File"))
180 filetb.setObjectName("FileToolBar")
181 filetb.setIconSize(UI.Config.ToolBarIconSize)
182 filetb.addAction(self.addConnectionAct)
183 filetb.addSeparator()
184 filetb.addAction(self.exitAct)
185
186 def __about(self):
187 """
188 Private slot to show the about information.
189 """
190 E5MessageBox.about(
191 self,
192 self.tr("SQL Browser"),
193 self.tr(
194 """<h3>About SQL Browser</h3>"""
195 """<p>The SQL browser window is a little tool to examine """
196 """the data and the schema of a database and to execute """
197 """queries on a database.</p>"""
198 )
199 )
200
201 def __aboutQt(self):
202 """
203 Private slot to show info about Qt.
204 """
205 E5MessageBox.aboutQt(self, self.tr("SQL Browser"))

eric ide

mercurial