src/eric7/Tools/TrayStarter.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9377
b9c8dc3b7da1
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
31 31
32 class TrayStarter(QSystemTrayIcon): 32 class TrayStarter(QSystemTrayIcon):
33 """ 33 """
34 Class implementing a starter for the system tray. 34 Class implementing a starter for the system tray.
35 """ 35 """
36
36 def __init__(self, settingsDir): 37 def __init__(self, settingsDir):
37 """ 38 """
38 Constructor 39 Constructor
39 40
40 @param settingsDir directory to be used for the settings files 41 @param settingsDir directory to be used for the settings files
41 @type str 42 @type str
42 """ 43 """
43 super().__init__( 44 super().__init__(
44 UI.PixmapCache.getIcon( 45 UI.PixmapCache.getIcon(Preferences.getTrayStarter("TrayStarterIcon"))
45 Preferences.getTrayStarter("TrayStarterIcon"))) 46 )
46 47
47 self.settingsDir = settingsDir 48 self.settingsDir = settingsDir
48 49
49 self.maxMenuFilePathLen = 75 50 self.maxMenuFilePathLen = 75
50 51
51 self.rsettings = QSettings( 52 self.rsettings = QSettings(
52 QSettings.Format.IniFormat, 53 QSettings.Format.IniFormat,
53 QSettings.Scope.UserScope, 54 QSettings.Scope.UserScope,
54 Globals.settingsNameOrganization, 55 Globals.settingsNameOrganization,
55 Globals.settingsNameRecent) 56 Globals.settingsNameRecent,
56 57 )
58
57 self.recentProjects = [] 59 self.recentProjects = []
58 self.__loadRecentProjects() 60 self.__loadRecentProjects()
59 self.recentMultiProjects = [] 61 self.recentMultiProjects = []
60 self.__loadRecentMultiProjects() 62 self.__loadRecentMultiProjects()
61 self.recentFiles = [] 63 self.recentFiles = []
62 self.__loadRecentFiles() 64 self.__loadRecentFiles()
63 65
64 self.activated.connect(self.__activated) 66 self.activated.connect(self.__activated)
65 67
66 self.__menu = QMenu(self.tr("eric tray starter")) 68 self.__menu = QMenu(self.tr("eric tray starter"))
67 69
68 self.recentProjectsMenu = QMenu( 70 self.recentProjectsMenu = QMenu(self.tr("Recent Projects"), self.__menu)
69 self.tr('Recent Projects'), self.__menu) 71 self.recentProjectsMenu.aboutToShow.connect(self.__showRecentProjectsMenu)
70 self.recentProjectsMenu.aboutToShow.connect(
71 self.__showRecentProjectsMenu)
72 self.recentProjectsMenu.triggered.connect(self.__openRecent) 72 self.recentProjectsMenu.triggered.connect(self.__openRecent)
73 73
74 self.recentMultiProjectsMenu = QMenu( 74 self.recentMultiProjectsMenu = QMenu(
75 self.tr('Recent Multiprojects'), self.__menu) 75 self.tr("Recent Multiprojects"), self.__menu
76 )
76 self.recentMultiProjectsMenu.aboutToShow.connect( 77 self.recentMultiProjectsMenu.aboutToShow.connect(
77 self.__showRecentMultiProjectsMenu) 78 self.__showRecentMultiProjectsMenu
79 )
78 self.recentMultiProjectsMenu.triggered.connect(self.__openRecent) 80 self.recentMultiProjectsMenu.triggered.connect(self.__openRecent)
79 81
80 self.recentFilesMenu = QMenu(self.tr('Recent Files'), self.__menu) 82 self.recentFilesMenu = QMenu(self.tr("Recent Files"), self.__menu)
81 self.recentFilesMenu.aboutToShow.connect(self.__showRecentFilesMenu) 83 self.recentFilesMenu.aboutToShow.connect(self.__showRecentFilesMenu)
82 self.recentFilesMenu.triggered.connect(self.__openRecent) 84 self.recentFilesMenu.triggered.connect(self.__openRecent)
83 85
84 act = self.__menu.addAction( 86 act = self.__menu.addAction(self.tr("eric tray starter"), self.__about)
85 self.tr("eric tray starter"), self.__about)
86 font = act.font() 87 font = act.font()
87 font.setBold(True) 88 font.setBold(True)
88 act.setFont(font) 89 act.setFont(font)
89 self.__menu.addSeparator() 90 self.__menu.addSeparator()
90 91
91 self.__menu.addAction( 92 self.__menu.addAction(self.tr("Show Versions"), self.__showVersions)
92 self.tr("Show Versions"), self.__showVersions) 93 self.__menu.addSeparator()
93 self.__menu.addSeparator() 94
94 95 self.__menu.addAction(
95 self.__menu.addAction( 96 self.tr("QRegularExpression editor"), self.__startQRegularExpression
96 self.tr("QRegularExpression editor"), 97 )
97 self.__startQRegularExpression) 98 self.__menu.addAction(self.tr("Python re editor"), self.__startPyRe)
98 self.__menu.addAction( 99 self.__menu.addSeparator()
99 self.tr("Python re editor"), self.__startPyRe) 100
100 self.__menu.addSeparator()
101
102 self.__menu.addAction( 101 self.__menu.addAction(
103 UI.PixmapCache.getIcon("uiPreviewer"), 102 UI.PixmapCache.getIcon("uiPreviewer"),
104 self.tr("UI Previewer"), self.__startUIPreviewer) 103 self.tr("UI Previewer"),
104 self.__startUIPreviewer,
105 )
105 self.__menu.addAction( 106 self.__menu.addAction(
106 UI.PixmapCache.getIcon("trPreviewer"), 107 UI.PixmapCache.getIcon("trPreviewer"),
107 self.tr("Translations Previewer"), self.__startTRPreviewer) 108 self.tr("Translations Previewer"),
108 self.__menu.addAction( 109 self.__startTRPreviewer,
109 UI.PixmapCache.getIcon("unittest"), 110 )
110 self.tr("Testing"), self.__startTesting) 111 self.__menu.addAction(
111 self.__menu.addSeparator() 112 UI.PixmapCache.getIcon("unittest"), self.tr("Testing"), self.__startTesting
112 113 )
114 self.__menu.addSeparator()
115
113 self.__menu.addAction( 116 self.__menu.addAction(
114 UI.PixmapCache.getIcon("diffFiles"), 117 UI.PixmapCache.getIcon("diffFiles"),
115 self.tr("Compare Files"), self.__startDiff) 118 self.tr("Compare Files"),
119 self.__startDiff,
120 )
116 self.__menu.addAction( 121 self.__menu.addAction(
117 UI.PixmapCache.getIcon("compareFiles"), 122 UI.PixmapCache.getIcon("compareFiles"),
118 self.tr("Compare Files side by side"), self.__startCompare) 123 self.tr("Compare Files side by side"),
119 self.__menu.addSeparator() 124 self.__startCompare,
120 125 )
126 self.__menu.addSeparator()
127
121 self.__menu.addAction( 128 self.__menu.addAction(
122 UI.PixmapCache.getIcon("sqlBrowser"), 129 UI.PixmapCache.getIcon("sqlBrowser"),
123 self.tr("SQL Browser"), self.__startSqlBrowser) 130 self.tr("SQL Browser"),
124 self.__menu.addSeparator() 131 self.__startSqlBrowser,
125 132 )
133 self.__menu.addSeparator()
134
126 self.__menu.addAction( 135 self.__menu.addAction(
127 UI.PixmapCache.getIcon("ericSnap"), 136 UI.PixmapCache.getIcon("ericSnap"),
128 self.tr("Snapshot"), self.__startSnapshot) 137 self.tr("Snapshot"),
138 self.__startSnapshot,
139 )
129 self.__menu.addAction( 140 self.__menu.addAction(
130 UI.PixmapCache.getIcon("iconEditor"), 141 UI.PixmapCache.getIcon("iconEditor"),
131 self.tr("Icon Editor"), self.__startIconEditor) 142 self.tr("Icon Editor"),
132 self.__menu.addSeparator() 143 self.__startIconEditor,
133 144 )
145 self.__menu.addSeparator()
146
134 self.__menu.addAction( 147 self.__menu.addAction(
135 UI.PixmapCache.getIcon("pluginInstall"), 148 UI.PixmapCache.getIcon("pluginInstall"),
136 self.tr("Install Plugin"), self.__startPluginInstall) 149 self.tr("Install Plugin"),
150 self.__startPluginInstall,
151 )
137 self.__menu.addAction( 152 self.__menu.addAction(
138 UI.PixmapCache.getIcon("pluginUninstall"), 153 UI.PixmapCache.getIcon("pluginUninstall"),
139 self.tr("Uninstall Plugin"), self.__startPluginUninstall) 154 self.tr("Uninstall Plugin"),
155 self.__startPluginUninstall,
156 )
140 self.__menu.addAction( 157 self.__menu.addAction(
141 UI.PixmapCache.getIcon("pluginRepository"), 158 UI.PixmapCache.getIcon("pluginRepository"),
142 self.tr("Plugin Repository"), self.__startPluginRepository) 159 self.tr("Plugin Repository"),
143 self.__menu.addSeparator() 160 self.__startPluginRepository,
144 161 )
162 self.__menu.addSeparator()
163
145 self.__menu.addAction( 164 self.__menu.addAction(
146 UI.PixmapCache.getIcon("virtualenv"), 165 UI.PixmapCache.getIcon("virtualenv"),
147 self.tr("Virtual Environments"), self.__startVirtualenvManager) 166 self.tr("Virtual Environments"),
148 self.__menu.addSeparator() 167 self.__startVirtualenvManager,
149 168 )
169 self.__menu.addSeparator()
170
150 self.__menu.addAction( 171 self.__menu.addAction(
151 UI.PixmapCache.getIcon("configure"), 172 UI.PixmapCache.getIcon("configure"),
152 self.tr('Preferences'), self.__startPreferences) 173 self.tr("Preferences"),
153 self.__menu.addSeparator() 174 self.__startPreferences,
154 175 )
176 self.__menu.addSeparator()
177
155 self.__menu.addAction( 178 self.__menu.addAction(
156 UI.PixmapCache.getIcon("editor"), 179 UI.PixmapCache.getIcon("editor"),
157 self.tr("eric Mini Editor"), self.__startMiniEditor) 180 self.tr("eric Mini Editor"),
181 self.__startMiniEditor,
182 )
158 self.__menu.addAction( 183 self.__menu.addAction(
159 UI.PixmapCache.getIcon("hexEditor"), 184 UI.PixmapCache.getIcon("hexEditor"),
160 self.tr("eric Hex Editor"), self.__startHexEditor) 185 self.tr("eric Hex Editor"),
186 self.__startHexEditor,
187 )
161 self.__menu.addAction( 188 self.__menu.addAction(
162 UI.PixmapCache.getIcon("shell"), 189 UI.PixmapCache.getIcon("shell"),
163 self.tr("eric Shell Window"), self.__startShell) 190 self.tr("eric Shell Window"),
164 self.__menu.addSeparator() 191 self.__startShell,
165 192 )
193 self.__menu.addSeparator()
194
166 self.__menu.addAction( 195 self.__menu.addAction(
167 UI.PixmapCache.getIcon("ericWeb"), 196 UI.PixmapCache.getIcon("ericWeb"),
168 self.tr("eric Web Browser"), self.__startWebBrowser) 197 self.tr("eric Web Browser"),
198 self.__startWebBrowser,
199 )
169 self.__menu.addAction( 200 self.__menu.addAction(
170 UI.PixmapCache.getIcon("ericWeb"), 201 UI.PixmapCache.getIcon("ericWeb"),
171 self.tr("eric Web Browser (with QtHelp)"), 202 self.tr("eric Web Browser (with QtHelp)"),
172 self.__startWebBrowserQtHelp) 203 self.__startWebBrowserQtHelp,
204 )
173 self.__menu.addAction( 205 self.__menu.addAction(
174 UI.PixmapCache.getIcon("ericWeb"), 206 UI.PixmapCache.getIcon("ericWeb"),
175 self.tr("eric Web Browser (Private Mode)"), 207 self.tr("eric Web Browser (Private Mode)"),
176 self.__startWebBrowserPrivate) 208 self.__startWebBrowserPrivate,
177 self.__menu.addSeparator() 209 )
178 210 self.__menu.addSeparator()
211
179 # recent files 212 # recent files
180 self.menuRecentFilesAct = self.__menu.addMenu(self.recentFilesMenu) 213 self.menuRecentFilesAct = self.__menu.addMenu(self.recentFilesMenu)
181 # recent multi projects 214 # recent multi projects
182 self.menuRecentMultiProjectsAct = self.__menu.addMenu( 215 self.menuRecentMultiProjectsAct = self.__menu.addMenu(
183 self.recentMultiProjectsMenu) 216 self.recentMultiProjectsMenu
217 )
184 # recent projects 218 # recent projects
185 self.menuRecentProjectsAct = self.__menu.addMenu( 219 self.menuRecentProjectsAct = self.__menu.addMenu(self.recentProjectsMenu)
186 self.recentProjectsMenu) 220 self.__menu.addSeparator()
187 self.__menu.addSeparator() 221
188 222 self.__menu.addAction(
189 self.__menu.addAction( 223 UI.PixmapCache.getIcon("erict"), self.tr("eric IDE"), self.__startEric
190 UI.PixmapCache.getIcon("erict"), 224 )
191 self.tr("eric IDE"), self.__startEric) 225 self.__menu.addSeparator()
192 self.__menu.addSeparator() 226
193
194 self.__menu.addAction( 227 self.__menu.addAction(
195 UI.PixmapCache.getIcon("configure"), 228 UI.PixmapCache.getIcon("configure"),
196 self.tr('Configure Tray Starter'), self.__showPreferences) 229 self.tr("Configure Tray Starter"),
197 self.__menu.addSeparator() 230 self.__showPreferences,
198 231 )
199 self.__menu.addAction( 232 self.__menu.addSeparator()
200 UI.PixmapCache.getIcon("exit"), 233
201 self.tr('Quit'), ericApp().quit) 234 self.__menu.addAction(
202 235 UI.PixmapCache.getIcon("exit"), self.tr("Quit"), ericApp().quit
236 )
237
203 def __loadRecentProjects(self): 238 def __loadRecentProjects(self):
204 """ 239 """
205 Private method to load the recently opened project filenames. 240 Private method to load the recently opened project filenames.
206 """ 241 """
207 rp = self.rsettings.value(Globals.recentNameProject) 242 rp = self.rsettings.value(Globals.recentNameProject)
208 if rp is not None: 243 if rp is not None:
209 for f in rp: 244 for f in rp:
210 if pathlib.Path(f).exists(): 245 if pathlib.Path(f).exists():
211 self.recentProjects.append(f) 246 self.recentProjects.append(f)
212 247
213 def __loadRecentMultiProjects(self): 248 def __loadRecentMultiProjects(self):
214 """ 249 """
215 Private method to load the recently opened multi project filenames. 250 Private method to load the recently opened multi project filenames.
216 """ 251 """
217 rmp = self.rsettings.value(Globals.recentNameMultiProject) 252 rmp = self.rsettings.value(Globals.recentNameMultiProject)
218 if rmp is not None: 253 if rmp is not None:
219 for f in rmp: 254 for f in rmp:
220 if pathlib.Path(f).exists(): 255 if pathlib.Path(f).exists():
221 self.recentMultiProjects.append(f) 256 self.recentMultiProjects.append(f)
222 257
223 def __loadRecentFiles(self): 258 def __loadRecentFiles(self):
224 """ 259 """
225 Private method to load the recently opened filenames. 260 Private method to load the recently opened filenames.
226 """ 261 """
227 rf = self.rsettings.value(Globals.recentNameFiles) 262 rf = self.rsettings.value(Globals.recentNameFiles)
228 if rf is not None: 263 if rf is not None:
229 for f in rf: 264 for f in rf:
230 if pathlib.Path(f).exists(): 265 if pathlib.Path(f).exists():
231 self.recentFiles.append(f) 266 self.recentFiles.append(f)
232 267
233 def __activated(self, reason): 268 def __activated(self, reason):
234 """ 269 """
235 Private slot to handle the activated signal. 270 Private slot to handle the activated signal.
236 271
237 @param reason reason code of the signal 272 @param reason reason code of the signal
238 (QSystemTrayIcon.ActivationReason) 273 (QSystemTrayIcon.ActivationReason)
239 """ 274 """
240 if reason in ( 275 if reason in (
241 QSystemTrayIcon.ActivationReason.Context, 276 QSystemTrayIcon.ActivationReason.Context,
242 QSystemTrayIcon.ActivationReason.MiddleClick 277 QSystemTrayIcon.ActivationReason.MiddleClick,
243 ): 278 ):
244 self.__showContextMenu() 279 self.__showContextMenu()
245 elif reason == QSystemTrayIcon.ActivationReason.DoubleClick: 280 elif reason == QSystemTrayIcon.ActivationReason.DoubleClick:
246 self.__startEric() 281 self.__startEric()
247 282
248 def __showContextMenu(self): 283 def __showContextMenu(self):
249 """ 284 """
250 Private slot to show the context menu. 285 Private slot to show the context menu.
251 """ 286 """
252 self.menuRecentProjectsAct.setEnabled(len(self.recentProjects) > 0) 287 self.menuRecentProjectsAct.setEnabled(len(self.recentProjects) > 0)
253 self.menuRecentMultiProjectsAct.setEnabled( 288 self.menuRecentMultiProjectsAct.setEnabled(len(self.recentMultiProjects) > 0)
254 len(self.recentMultiProjects) > 0)
255 self.menuRecentFilesAct.setEnabled(len(self.recentFiles) > 0) 289 self.menuRecentFilesAct.setEnabled(len(self.recentFiles) > 0)
256 290
257 pos = QCursor.pos() 291 pos = QCursor.pos()
258 x = pos.x() - self.__menu.sizeHint().width() 292 x = pos.x() - self.__menu.sizeHint().width()
259 pos.setX(x > 0 and x or 0) 293 pos.setX(x > 0 and x or 0)
260 y = pos.y() - self.__menu.sizeHint().height() 294 y = pos.y() - self.__menu.sizeHint().height()
261 pos.setY(y > 0 and y or 0) 295 pos.setY(y > 0 and y or 0)
262 self.__menu.popup(pos) 296 self.__menu.popup(pos)
263 297
264 def __startProc(self, applName, *applArgs): 298 def __startProc(self, applName, *applArgs):
265 """ 299 """
266 Private method to start an eric application. 300 Private method to start an eric application.
267 301
268 @param applName name of the eric application script (string) 302 @param applName name of the eric application script (string)
269 @param *applArgs variable list of application arguments 303 @param *applArgs variable list of application arguments
270 """ 304 """
271 proc = QProcess() 305 proc = QProcess()
272 applPath = os.path.join(getConfig("ericDir"), applName) 306 applPath = os.path.join(getConfig("ericDir"), applName)
273 307
274 args = [] 308 args = []
275 args.append(applPath) 309 args.append(applPath)
276 args.append("--config={0}".format(Utilities.getConfigDir())) 310 args.append("--config={0}".format(Utilities.getConfigDir()))
277 if self.settingsDir: 311 if self.settingsDir:
278 args.append("--settings={0}".format(self.settingsDir)) 312 args.append("--settings={0}".format(self.settingsDir))
279 for arg in applArgs: 313 for arg in applArgs:
280 args.append(arg) 314 args.append(arg)
281 315
282 if ( 316 if not os.path.isfile(applPath) or not proc.startDetached(
283 not os.path.isfile(applPath) or 317 Globals.getPythonExecutable(), args
284 not proc.startDetached(Globals.getPythonExecutable(), args)
285 ): 318 ):
286 EricMessageBox.critical( 319 EricMessageBox.critical(
287 self, 320 self,
288 self.tr('Process Generation Error'), 321 self.tr("Process Generation Error"),
289 self.tr( 322 self.tr(
290 '<p>Could not start the process.<br>' 323 "<p>Could not start the process.<br>"
291 'Ensure that it is available as <b>{0}</b>.</p>' 324 "Ensure that it is available as <b>{0}</b>.</p>"
292 ).format(applPath), 325 ).format(applPath),
293 self.tr('OK')) 326 self.tr("OK"),
294 327 )
328
295 def __startMiniEditor(self): 329 def __startMiniEditor(self):
296 """ 330 """
297 Private slot to start the eric Mini Editor. 331 Private slot to start the eric Mini Editor.
298 """ 332 """
299 self.__startProc("eric7_editor.py") 333 self.__startProc("eric7_editor.py")
300 334
301 def __startEric(self): 335 def __startEric(self):
302 """ 336 """
303 Private slot to start the eric IDE. 337 Private slot to start the eric IDE.
304 """ 338 """
305 self.__startProc("eric7.py") 339 self.__startProc("eric7.py")
385 def __startCompare(self): 419 def __startCompare(self):
386 """ 420 """
387 Private slot to start the eric compare dialog. 421 Private slot to start the eric compare dialog.
388 """ 422 """
389 self.__startProc("eric7_compare.py") 423 self.__startProc("eric7_compare.py")
390 424
391 def __startSqlBrowser(self): 425 def __startSqlBrowser(self):
392 """ 426 """
393 Private slot to start the eric sql browser dialog. 427 Private slot to start the eric sql browser dialog.
394 """ 428 """
395 self.__startProc("eric7_sqlbrowser.py") 429 self.__startProc("eric7_sqlbrowser.py")
415 def __startPyRe(self): 449 def __startPyRe(self):
416 """ 450 """
417 Private slot to start the eric Python re editor dialog. 451 Private slot to start the eric Python re editor dialog.
418 """ 452 """
419 self.__startProc("eric7_re.py") 453 self.__startProc("eric7_re.py")
420 454
421 def __startHexEditor(self): 455 def __startHexEditor(self):
422 """ 456 """
423 Private slot to start the eric hex editor dialog. 457 Private slot to start the eric hex editor dialog.
424 """ 458 """
425 self.__startProc("eric7_hexeditor.py") 459 self.__startProc("eric7_hexeditor.py")
426 460
427 def __startShell(self): 461 def __startShell(self):
428 """ 462 """
429 Private slot to start the eric Shell window. 463 Private slot to start the eric Shell window.
430 """ 464 """
431 self.__startProc("eric7_shell.py") 465 self.__startProc("eric7_shell.py")
435 Private method to set up the recent projects menu. 469 Private method to set up the recent projects menu.
436 """ 470 """
437 self.recentProjects = [] 471 self.recentProjects = []
438 self.rsettings.sync() 472 self.rsettings.sync()
439 self.__loadRecentProjects() 473 self.__loadRecentProjects()
440 474
441 self.recentProjectsMenu.clear() 475 self.recentProjectsMenu.clear()
442 476
443 for idx, rp in enumerate(self.recentProjects, start=1): 477 for idx, rp in enumerate(self.recentProjects, start=1):
444 formatStr = '&{0:d}. {1}' if idx < 10 else '{0:d}. {1}' 478 formatStr = "&{0:d}. {1}" if idx < 10 else "{0:d}. {1}"
445 act = self.recentProjectsMenu.addAction( 479 act = self.recentProjectsMenu.addAction(
446 formatStr.format( 480 formatStr.format(
447 idx, Utilities.compactPath(rp, self.maxMenuFilePathLen))) 481 idx, Utilities.compactPath(rp, self.maxMenuFilePathLen)
482 )
483 )
448 act.setData(rp) 484 act.setData(rp)
449 485
450 def __showRecentMultiProjectsMenu(self): 486 def __showRecentMultiProjectsMenu(self):
451 """ 487 """
452 Private method to set up the recent multi projects menu. 488 Private method to set up the recent multi projects menu.
453 """ 489 """
454 self.recentMultiProjects = [] 490 self.recentMultiProjects = []
455 self.rsettings.sync() 491 self.rsettings.sync()
456 self.__loadRecentMultiProjects() 492 self.__loadRecentMultiProjects()
457 493
458 self.recentMultiProjectsMenu.clear() 494 self.recentMultiProjectsMenu.clear()
459 495
460 for idx, rmp in enumerate(self.recentMultiProjects, start=1): 496 for idx, rmp in enumerate(self.recentMultiProjects, start=1):
461 formatStr = '&{0:d}. {1}' if idx < 10 else '{0:d}. {1}' 497 formatStr = "&{0:d}. {1}" if idx < 10 else "{0:d}. {1}"
462 act = self.recentMultiProjectsMenu.addAction( 498 act = self.recentMultiProjectsMenu.addAction(
463 formatStr.format( 499 formatStr.format(
464 idx, Utilities.compactPath(rmp, self.maxMenuFilePathLen))) 500 idx, Utilities.compactPath(rmp, self.maxMenuFilePathLen)
501 )
502 )
465 act.setData(rmp) 503 act.setData(rmp)
466 504
467 def __showRecentFilesMenu(self): 505 def __showRecentFilesMenu(self):
468 """ 506 """
469 Private method to set up the recent files menu. 507 Private method to set up the recent files menu.
470 """ 508 """
471 self.recentFiles = [] 509 self.recentFiles = []
472 self.rsettings.sync() 510 self.rsettings.sync()
473 self.__loadRecentFiles() 511 self.__loadRecentFiles()
474 512
475 self.recentFilesMenu.clear() 513 self.recentFilesMenu.clear()
476 514
477 for idx, rf in enumerate(self.recentFiles, start=1): 515 for idx, rf in enumerate(self.recentFiles, start=1):
478 formatStr = '&{0:d}. {1}' if idx < 10 else '{0:d}. {1}' 516 formatStr = "&{0:d}. {1}" if idx < 10 else "{0:d}. {1}"
479 act = self.recentFilesMenu.addAction( 517 act = self.recentFilesMenu.addAction(
480 formatStr.format( 518 formatStr.format(
481 idx, Utilities.compactPath(rf, self.maxMenuFilePathLen))) 519 idx, Utilities.compactPath(rf, self.maxMenuFilePathLen)
520 )
521 )
482 act.setData(rf) 522 act.setData(rf)
483 523
484 def __openRecent(self, act): 524 def __openRecent(self, act):
485 """ 525 """
486 Private method to open a project or file from the list of recently 526 Private method to open a project or file from the list of recently
487 opened projects or files. 527 opened projects or files.
488 528
489 @param act reference to the action that triggered (QAction) 529 @param act reference to the action that triggered (QAction)
490 """ 530 """
491 filename = act.data() 531 filename = act.data()
492 if filename: 532 if filename:
493 self.__startProc( 533 self.__startProc("eric7.py", filename)
494 "eric7.py", 534
495 filename)
496
497 def __showPreferences(self): 535 def __showPreferences(self):
498 """ 536 """
499 Private slot to set the preferences. 537 Private slot to set the preferences.
500 """ 538 """
501 from Preferences.ConfigurationDialog import ( 539 from Preferences.ConfigurationDialog import (
502 ConfigurationDialog, ConfigurationMode 540 ConfigurationDialog,
503 ) 541 ConfigurationMode,
542 )
543
504 dlg = ConfigurationDialog( 544 dlg = ConfigurationDialog(
505 None, 'Configuration', True, fromEric=True, 545 None,
506 displayMode=ConfigurationMode.TRAYSTARTERMODE) 546 "Configuration",
547 True,
548 fromEric=True,
549 displayMode=ConfigurationMode.TRAYSTARTERMODE,
550 )
507 dlg.preferencesChanged.connect(self.preferencesChanged) 551 dlg.preferencesChanged.connect(self.preferencesChanged)
508 dlg.show() 552 dlg.show()
509 dlg.showConfigurationPageByName("trayStarterPage") 553 dlg.showConfigurationPageByName("trayStarterPage")
510 dlg.exec() 554 dlg.exec()
511 QApplication.processEvents() 555 QApplication.processEvents()
512 if dlg.result() == QDialog.DialogCode.Accepted: 556 if dlg.result() == QDialog.DialogCode.Accepted:
513 dlg.setPreferences() 557 dlg.setPreferences()
514 Preferences.syncPreferences() 558 Preferences.syncPreferences()
515 self.preferencesChanged() 559 self.preferencesChanged()
516 560
517 def preferencesChanged(self): 561 def preferencesChanged(self):
518 """ 562 """
519 Public slot to handle a change of preferences. 563 Public slot to handle a change of preferences.
520 """ 564 """
521 self.setIcon( 565 self.setIcon(
522 UI.PixmapCache.getIcon( 566 UI.PixmapCache.getIcon(Preferences.getTrayStarter("TrayStarterIcon"))
523 Preferences.getTrayStarter("TrayStarterIcon"))) 567 )
524 568
525 def __about(self): 569 def __about(self):
526 """ 570 """
527 Private slot to handle the About dialog. 571 Private slot to handle the About dialog.
528 """ 572 """
529 from Plugins.AboutPlugin.AboutDialog import AboutDialog 573 from Plugins.AboutPlugin.AboutDialog import AboutDialog
574
530 dlg = AboutDialog() 575 dlg = AboutDialog()
531 dlg.exec() 576 dlg.exec()
532 577
533 def __showVersions(self): 578 def __showVersions(self):
534 """ 579 """
535 Private slot to handle the Versions dialog. 580 Private slot to handle the Versions dialog.
536 """ 581 """
537 from PyQt6.QtCore import qVersion, PYQT_VERSION_STR 582 from PyQt6.QtCore import qVersion, PYQT_VERSION_STR
538 from PyQt6.Qsci import QSCINTILLA_VERSION_STR 583 from PyQt6.Qsci import QSCINTILLA_VERSION_STR
539 584
540 try: 585 try:
541 try: 586 try:
542 from PyQt6 import sip 587 from PyQt6 import sip
543 except ImportError: 588 except ImportError:
544 import sip 589 import sip
545 sip_version_str = sip.SIP_VERSION_STR 590 sip_version_str = sip.SIP_VERSION_STR
546 except (ImportError, AttributeError): 591 except (ImportError, AttributeError):
547 sip_version_str = "sip version not available" 592 sip_version_str = "sip version not available"
548 593
549 versionText = self.tr( 594 versionText = self.tr("""<h3>Version Numbers</h3>""" """<table>""")
550 """<h3>Version Numbers</h3>""" 595
551 """<table>""")
552
553 # Python version 596 # Python version
554 versionText += ( 597 versionText += """<tr><td><b>Python</b></td><td>{0}</td></tr>""".format(
555 """<tr><td><b>Python</b></td><td>{0}</td></tr>""" 598 sys.version.split()[0]
556 .format(sys.version.split()[0]) 599 )
557 ) 600
558
559 # Qt version 601 # Qt version
560 versionText += ( 602 versionText += """<tr><td><b>Qt</b></td><td>{0}</td></tr>""".format(qVersion())
561 """<tr><td><b>Qt</b></td><td>{0}</td></tr>""" 603
562 .format(qVersion())
563 )
564
565 # PyQt versions 604 # PyQt versions
566 versionText += ( 605 versionText += """<tr><td><b>PyQt</b></td><td>{0}</td></tr>""".format(
567 """<tr><td><b>PyQt</b></td><td>{0}</td></tr>""" 606 PYQT_VERSION_STR
568 .format(PYQT_VERSION_STR) 607 )
569 ) 608 versionText += """<tr><td><b>sip</b></td><td>{0}</td></tr>""".format(
570 versionText += ( 609 sip_version_str
571 """<tr><td><b>sip</b></td><td>{0}</td></tr>""" 610 )
572 .format(sip_version_str) 611 versionText += """<tr><td><b>QScintilla</b></td><td>{0}</td></tr>""".format(
573 ) 612 QSCINTILLA_VERSION_STR
574 versionText += ( 613 )
575 """<tr><td><b>QScintilla</b></td><td>{0}</td></tr>""" 614
576 .format(QSCINTILLA_VERSION_STR)
577 )
578
579 # webengine (chromium) version 615 # webengine (chromium) version
580 with contextlib.suppress(ImportError): 616 with contextlib.suppress(ImportError):
581 from WebBrowser.Tools import WebBrowserTools 617 from WebBrowser.Tools import WebBrowserTools
582 chromiumVersion, chromiumSecurityVersion = ( 618
583 WebBrowserTools.getWebEngineVersions()[0:2] 619 (
584 ) 620 chromiumVersion,
585 versionText += ( 621 chromiumSecurityVersion,
586 """<tr><td><b>WebEngine</b></td><td>{0}</td></tr>""" 622 ) = WebBrowserTools.getWebEngineVersions()[0:2]
587 .format(chromiumVersion) 623 versionText += """<tr><td><b>WebEngine</b></td><td>{0}</td></tr>""".format(
624 chromiumVersion
588 ) 625 )
589 if chromiumSecurityVersion: 626 if chromiumSecurityVersion:
590 versionText += self.tr( 627 versionText += self.tr(
591 """<tr><td><b>WebEngine (Security)</b></td>""" 628 """<tr><td><b>WebEngine (Security)</b></td>"""
592 """<td>{0}</td></tr>""" 629 """<td>{0}</td></tr>"""
593 ).format(chromiumSecurityVersion) 630 ).format(chromiumSecurityVersion)
594 631
595 # eric7 version 632 # eric7 version
596 versionText += ( 633 versionText += """<tr><td><b>{0}</b></td><td>{1}</td></tr>""".format(
597 """<tr><td><b>{0}</b></td><td>{1}</td></tr>""" 634 Program, Version
598 .format(Program, Version) 635 )
599 ) 636
600
601 # desktop and session type 637 # desktop and session type
602 desktop = Globals.desktopName() 638 desktop = Globals.desktopName()
603 session = Globals.sessionType() 639 session = Globals.sessionType()
604 if desktop or session: 640 if desktop or session:
605 versionText += "<tr><td></td><td></td></tr>" 641 versionText += "<tr><td></td><td></td></tr>"
606 if desktop: 642 if desktop:
607 versionText += ("<tr><td><b>{0}</b></td><td>{1}</td></tr>" 643 versionText += ("<tr><td><b>{0}</b></td><td>{1}</td></tr>").format(
608 ).format(self.tr("Desktop"), desktop) 644 self.tr("Desktop"), desktop
645 )
609 if session: 646 if session:
610 versionText += ("<tr><td><b>{0}</b></td><td>{1}</td></tr>" 647 versionText += ("<tr><td><b>{0}</b></td><td>{1}</td></tr>").format(
611 ).format(self.tr("Session Type"), session) 648 self.tr("Session Type"), session
612 649 )
650
613 versionText += self.tr("""</table>""") 651 versionText += self.tr("""</table>""")
614 652
615 EricMessageBox.about(None, Program, versionText) 653 EricMessageBox.about(None, Program, versionText)

eric ide

mercurial