eric7/QScintilla/ShellWindow.py

branch
eric7
changeset 8312
800c432b34c8
parent 8265
0090cfa83159
child 8314
e3642a6a1e71
equal deleted inserted replaced
8311:4e8b98454baa 8312:800c432b34c8
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2017 - 2021 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing a stand alone shell window.
8 """
9
10 import sys
11 import os
12
13 from PyQt5.QtCore import (
14 Qt, QCoreApplication, QPoint, QSize, QSignalMapper, QProcess
15 )
16 from PyQt5.QtGui import QKeySequence
17 from PyQt5.QtWidgets import (
18 QWidget, QVBoxLayout, QApplication, QAction, QWhatsThis, QDialog
19 )
20 from PyQt5.Qsci import QsciScintilla
21
22 from E5Gui.E5MainWindow import E5MainWindow
23 from E5Gui.E5Action import E5Action, createActionGroup
24 from E5Gui.E5Application import e5App
25 from E5Gui.E5ZoomWidget import E5ZoomWidget
26 from E5Gui import E5MessageBox
27
28 import UI.Config
29 import UI.PixmapCache
30 import Preferences
31
32 from Globals import isMacPlatform
33
34 from .Shell import Shell
35 from .APIsManager import APIsManager
36
37 from Debugger.DebugServer import DebugServer
38 from UI.SearchWidget import SearchWidget
39 from VirtualEnv.VirtualenvManager import VirtualenvManager
40
41 from eric6config import getConfig
42
43
44 class ShellWindow(E5MainWindow):
45 """
46 Class implementing a stand alone shell window.
47 """
48 def __init__(self, originalPathString, parent=None, name=None):
49 """
50 Constructor
51
52 @param originalPathString original PATH environment variable
53 @type str
54 @param parent reference to the parent widget
55 @type QWidget
56 @param name object name of the window
57 @type str
58 """
59 super().__init__(parent)
60 if name is not None:
61 self.setObjectName(name)
62 self.setWindowIcon(UI.PixmapCache.getIcon("shell"))
63 self.setWindowTitle(self.tr("eric Shell"))
64
65 self.setStyle(Preferences.getUI("Style"),
66 Preferences.getUI("StyleSheet"))
67
68 self.__lastDebuggerId = ""
69
70 # initialize the APIs manager
71 self.__apisManager = APIsManager(parent=self)
72
73 # initialize the debug server and shell widgets
74 self.__debugServer = DebugServer(originalPathString,
75 preventPassiveDebugging=True,
76 parent=self)
77 self.__debugServer.clientDebuggerId.connect(self.__clientDebuggerId)
78
79 self.__shell = Shell(self.__debugServer, self, None, True, self)
80 self.__shell.registerDebuggerIdMethod(self.getDebuggerId)
81
82 self.__searchWidget = SearchWidget(self.__shell, self, showLine=True)
83
84 centralWidget = QWidget()
85 layout = QVBoxLayout()
86 layout.setContentsMargins(1, 1, 1, 1)
87 layout.addWidget(self.__shell)
88 layout.addWidget(self.__searchWidget)
89 centralWidget.setLayout(layout)
90 self.setCentralWidget(centralWidget)
91 self.__searchWidget.hide()
92
93 self.__searchWidget.searchNext.connect(self.__shell.searchNext)
94 self.__searchWidget.searchPrevious.connect(self.__shell.searchPrev)
95 self.__shell.searchStringFound.connect(
96 self.__searchWidget.searchStringFound)
97
98 self.__shell.zoomValueChanged.connect(self.__zoomValueChanged)
99
100 self.__createActions()
101 self.__createMenus()
102 self.__createToolBars()
103 self.__createStatusBar()
104
105 self.__readSettings()
106
107 self.__shell.historyStyleChanged.connect(self.__historyStyleChanged)
108
109 # Generate the virtual environment manager and register it
110 self.virtualenvManager = VirtualenvManager(self)
111 e5App().registerObject("VirtualEnvManager", self.virtualenvManager)
112
113 self.__shell.virtualEnvironmentChanged.connect(
114 self.__virtualEnvironmentChanged)
115
116 # now start the debug client with the most recently used virtual
117 # environment
118 self.__debugServer.startClient(
119 False, venvName=Preferences.getShell("LastVirtualEnvironment")
120 )
121
122 # set the keyboard input interval
123 interval = Preferences.getUI("KeyboardInputInterval")
124 if interval > 0:
125 QApplication.setKeyboardInputInterval(interval)
126
127 def closeEvent(self, event):
128 """
129 Protected method to handle the close event.
130
131 @param event close event
132 @type QCloseEvent
133 """
134 self.__writeSettings()
135 self.__debugServer.shutdownServer()
136 self.__shell.closeShell()
137 Preferences.syncPreferences()
138
139 event.accept()
140
141 def __clientDebuggerId(self, debuggerId):
142 """
143 Private slot to receive the ID of a newly connected debugger backend.
144
145 @param debuggerId ID of a newly connected debugger backend
146 @type str
147 """
148 self.__lastDebuggerId = debuggerId
149
150 def getDebuggerId(self):
151 """
152 Public method to get the most recently registered debugger ID.
153
154 @return debugger ID
155 @rtype str
156 """
157 return self.__lastDebuggerId
158
159 ##################################################################
160 ## Below are API handling methods
161 ##################################################################
162
163 def getAPIsManager(self):
164 """
165 Public method to get a reference to the APIs manager.
166
167 @return the APIs manager object (eric6.QScintilla.APIsManager)
168 """
169 return self.__apisManager
170
171 ##################################################################
172 ## Below are action related methods
173 ##################################################################
174
175 def __readShortcut(self, act, category):
176 """
177 Private function to read a single keyboard shortcut from the settings.
178
179 @param act reference to the action object
180 @type E5Action
181 @param category category the action belongs to
182 @type str
183 """
184 if act.objectName():
185 accel = Preferences.Prefs.settings.value(
186 "Shortcuts/{0}/{1}/Accel".format(category, act.objectName()))
187 if accel is not None:
188 act.setShortcut(QKeySequence(accel))
189 accel = Preferences.Prefs.settings.value(
190 "Shortcuts/{0}/{1}/AltAccel".format(
191 category, act.objectName()))
192 if accel is not None:
193 act.setAlternateShortcut(QKeySequence(accel), removeEmpty=True)
194
195 def __createActions(self):
196 """
197 Private method to create the actions.
198 """
199 self.fileActions = []
200 self.editActions = []
201 self.searchActions = []
202 self.viewActions = []
203 self.helpActions = []
204
205 self.viewActGrp = createActionGroup(self)
206
207 self.__createFileActions()
208 self.__createEditActions()
209 self.__createSearchActions()
210 self.__createViewActions()
211 self.__createHelpActions()
212 self.__createHistoryActions()
213
214 # read the keyboard shortcuts and make them identical to the main
215 # eric shortcuts
216 for act in self.helpActions:
217 self.__readShortcut(act, "General")
218 for act in self.editActions:
219 self.__readShortcut(act, "Edit")
220 for act in self.fileActions:
221 self.__readShortcut(act, "View")
222 for act in self.searchActions:
223 self.__readShortcut(act, "Search")
224
225 def __createFileActions(self):
226 """
227 Private method defining the user interface actions for the file
228 commands.
229 """
230 self.exitAct = E5Action(
231 self.tr('Quit'),
232 UI.PixmapCache.getIcon("exit"),
233 self.tr('&Quit'),
234 QKeySequence(self.tr("Ctrl+Q", "File|Quit")),
235 0, self, 'quit')
236 self.exitAct.setStatusTip(self.tr('Quit the Shell'))
237 self.exitAct.setWhatsThis(self.tr(
238 """<b>Quit the Shell</b>"""
239 """<p>This quits the Shell window.</p>"""
240 ))
241 self.exitAct.triggered.connect(self.quit)
242 self.exitAct.setMenuRole(QAction.MenuRole.QuitRole)
243 self.fileActions.append(self.exitAct)
244
245 self.newWindowAct = E5Action(
246 self.tr('New Window'),
247 UI.PixmapCache.getIcon("newWindow"),
248 self.tr('New &Window'),
249 QKeySequence(self.tr("Ctrl+Shift+N", "File|New Window")),
250 0, self, 'new_window')
251 self.newWindowAct.setStatusTip(self.tr(
252 'Open a new Shell window'))
253 self.newWindowAct.setWhatsThis(self.tr(
254 """<b>New Window</b>"""
255 """<p>This opens a new instance of the Shell window.</p>"""
256 ))
257 self.newWindowAct.triggered.connect(self.__newWindow)
258 self.fileActions.append(self.newWindowAct)
259
260 self.restartAct = E5Action(
261 self.tr('Restart'),
262 UI.PixmapCache.getIcon("restart"),
263 self.tr('Restart'),
264 0, 0, self, 'shell_restart')
265 self.restartAct.setStatusTip(self.tr(
266 'Restart the shell'))
267 self.restartAct.setWhatsThis(self.tr(
268 """<b>Restart</b>"""
269 """<p>Restart the shell for the currently selected"""
270 """ environment.</p>"""
271 ))
272 self.restartAct.triggered.connect(self.__shell.doRestart)
273 self.fileActions.append(self.restartAct)
274
275 self.clearRestartAct = E5Action(
276 self.tr('Restart and Clear'),
277 UI.PixmapCache.getIcon("restartDelete"),
278 self.tr('Restart and Clear'),
279 Qt.Key.Key_F4, 0, self, 'shell_clear_restart')
280 self.clearRestartAct.setStatusTip(self.tr(
281 'Clear the window and restart the shell'))
282 self.clearRestartAct.setWhatsThis(self.tr(
283 """<b>Restart and Clear</b>"""
284 """<p>Clear the shell window and restart the shell for the"""
285 """ currently selected environment.</p>"""
286 ))
287 self.clearRestartAct.triggered.connect(self.__shell.doClearRestart)
288 self.fileActions.append(self.clearRestartAct)
289
290 def __createEditActions(self):
291 """
292 Private method defining the user interface actions for the edit
293 commands.
294 """
295 self.editActGrp = createActionGroup(self)
296 self.copyActGrp = createActionGroup(self.editActGrp)
297
298 self.cutAct = E5Action(
299 QCoreApplication.translate('ViewManager', 'Cut'),
300 UI.PixmapCache.getIcon("editCut"),
301 QCoreApplication.translate('ViewManager', 'Cu&t'),
302 QKeySequence(QCoreApplication.translate(
303 'ViewManager', "Ctrl+X", "Edit|Cut")),
304 QKeySequence(QCoreApplication.translate(
305 'ViewManager', "Shift+Del", "Edit|Cut")),
306 self.copyActGrp, 'vm_edit_cut')
307 self.cutAct.setStatusTip(QCoreApplication.translate(
308 'ViewManager', 'Cut the selection'))
309 self.cutAct.setWhatsThis(self.tr(
310 """<b>Cut</b>"""
311 """<p>Cut the selected text to the clipboard.</p>"""
312 ))
313 self.cutAct.triggered.connect(self.__shell.cut)
314 self.editActions.append(self.cutAct)
315
316 self.copyAct = E5Action(
317 QCoreApplication.translate('ViewManager', 'Copy'),
318 UI.PixmapCache.getIcon("editCopy"),
319 QCoreApplication.translate('ViewManager', '&Copy'),
320 QKeySequence(QCoreApplication.translate(
321 'ViewManager', "Ctrl+C", "Edit|Copy")),
322 QKeySequence(QCoreApplication.translate(
323 'ViewManager', "Ctrl+Ins", "Edit|Copy")),
324 self.copyActGrp, 'vm_edit_copy')
325 self.copyAct.setStatusTip(QCoreApplication.translate(
326 'ViewManager', 'Copy the selection'))
327 self.copyAct.setWhatsThis(self.tr(
328 """<b>Copy</b>"""
329 """<p>Copy the selected text to the clipboard.</p>"""
330 ))
331 self.copyAct.triggered.connect(self.__shell.copy)
332 self.editActions.append(self.copyAct)
333
334 self.pasteAct = E5Action(
335 QCoreApplication.translate('ViewManager', 'Paste'),
336 UI.PixmapCache.getIcon("editPaste"),
337 QCoreApplication.translate('ViewManager', '&Paste'),
338 QKeySequence(QCoreApplication.translate(
339 'ViewManager', "Ctrl+V", "Edit|Paste")),
340 QKeySequence(QCoreApplication.translate(
341 'ViewManager', "Shift+Ins", "Edit|Paste")),
342 self.copyActGrp, 'vm_edit_paste')
343 self.pasteAct.setStatusTip(QCoreApplication.translate(
344 'ViewManager', 'Paste the last cut/copied text'))
345 self.pasteAct.setWhatsThis(self.tr(
346 """<b>Paste</b>"""
347 """<p>Paste the last cut/copied text from the clipboard.</p>"""
348 ))
349 self.pasteAct.triggered.connect(self.__shell.paste)
350 self.editActions.append(self.pasteAct)
351
352 self.clearAct = E5Action(
353 QCoreApplication.translate('ViewManager', 'Clear'),
354 UI.PixmapCache.getIcon("editDelete"),
355 QCoreApplication.translate('ViewManager', 'Clear'),
356 QKeySequence(QCoreApplication.translate(
357 'ViewManager', "Alt+Shift+C", "Edit|Clear")),
358 0,
359 self.copyActGrp, 'vm_edit_clear')
360 self.clearAct.setStatusTip(QCoreApplication.translate(
361 'ViewManager', 'Clear all text'))
362 self.clearAct.setWhatsThis(self.tr(
363 """<b>Clear</b>"""
364 """<p>Delete all text.</p>"""
365 ))
366 self.clearAct.triggered.connect(self.__shell.clear)
367 self.editActions.append(self.clearAct)
368
369 self.cutAct.setEnabled(False)
370 self.copyAct.setEnabled(False)
371 self.__shell.copyAvailable.connect(self.cutAct.setEnabled)
372 self.__shell.copyAvailable.connect(self.copyAct.setEnabled)
373
374 ####################################################################
375 ## Below follow the actions for QScintilla standard commands.
376 ####################################################################
377
378 self.esm = QSignalMapper(self)
379 try:
380 self.esm.mappedInt.connect(self.__shell.editorCommand)
381 except AttributeError:
382 # pre Qt 5.15
383 self.esm.mapped[int].connect(self.__shell.editorCommand)
384
385 self.editorActGrp = createActionGroup(self)
386
387 act = E5Action(
388 QCoreApplication.translate('ViewManager', 'Delete current line'),
389 QCoreApplication.translate('ViewManager', 'Delete current line'),
390 QKeySequence(QCoreApplication.translate(
391 'ViewManager', 'Ctrl+Shift+L')),
392 0,
393 self.editorActGrp, 'vm_edit_delete_current_line')
394 self.esm.setMapping(act, QsciScintilla.SCI_LINEDELETE)
395 act.triggered.connect(self.esm.map)
396 self.editActions.append(act)
397
398 act = E5Action(
399 QCoreApplication.translate('ViewManager', 'Indent one level'),
400 QCoreApplication.translate('ViewManager', 'Indent one level'),
401 QKeySequence(QCoreApplication.translate('ViewManager', 'Tab')), 0,
402 self.editorActGrp, 'vm_edit_indent_one_level')
403 self.esm.setMapping(act, QsciScintilla.SCI_TAB)
404 act.triggered.connect(self.esm.map)
405 self.editActions.append(act)
406
407 act = E5Action(
408 QCoreApplication.translate('ViewManager', 'Insert new line'),
409 QCoreApplication.translate('ViewManager', 'Insert new line'),
410 QKeySequence(QCoreApplication.translate('ViewManager', 'Return')),
411 QKeySequence(QCoreApplication.translate('ViewManager', 'Enter')),
412 self.editorActGrp, 'vm_edit_insert_line')
413 self.esm.setMapping(act, QsciScintilla.SCI_NEWLINE)
414 act.triggered.connect(self.esm.map)
415 self.editActions.append(act)
416
417 act = E5Action(
418 QCoreApplication.translate('ViewManager',
419 'Delete previous character'),
420 QCoreApplication.translate('ViewManager',
421 'Delete previous character'),
422 QKeySequence(QCoreApplication.translate('ViewManager',
423 'Backspace')),
424 0, self.editorActGrp, 'vm_edit_delete_previous_char')
425 if isMacPlatform():
426 act.setAlternateShortcut(QKeySequence(
427 QCoreApplication.translate('ViewManager', 'Meta+H')))
428 else:
429 act.setAlternateShortcut(QKeySequence(
430 QCoreApplication.translate('ViewManager', 'Shift+Backspace')))
431 self.esm.setMapping(act, QsciScintilla.SCI_DELETEBACK)
432 act.triggered.connect(self.esm.map)
433 self.editActions.append(act)
434
435 act = E5Action(
436 QCoreApplication.translate('ViewManager',
437 'Delete current character'),
438 QCoreApplication.translate('ViewManager',
439 'Delete current character'),
440 QKeySequence(QCoreApplication.translate('ViewManager', 'Del')),
441 0, self.editorActGrp, 'vm_edit_delete_current_char')
442 if isMacPlatform():
443 act.setAlternateShortcut(QKeySequence(
444 QCoreApplication.translate('ViewManager', 'Meta+D')))
445 self.esm.setMapping(act, QsciScintilla.SCI_CLEAR)
446 act.triggered.connect(self.esm.map)
447 self.editActions.append(act)
448
449 act = E5Action(
450 QCoreApplication.translate('ViewManager', 'Delete word to left'),
451 QCoreApplication.translate('ViewManager', 'Delete word to left'),
452 QKeySequence(QCoreApplication.translate(
453 'ViewManager', 'Ctrl+Backspace')),
454 0,
455 self.editorActGrp, 'vm_edit_delete_word_left')
456 self.esm.setMapping(act, QsciScintilla.SCI_DELWORDLEFT)
457 act.triggered.connect(self.esm.map)
458 self.editActions.append(act)
459
460 act = E5Action(
461 QCoreApplication.translate('ViewManager', 'Delete word to right'),
462 QCoreApplication.translate('ViewManager', 'Delete word to right'),
463 QKeySequence(QCoreApplication.translate('ViewManager',
464 'Ctrl+Del')),
465 0, self.editorActGrp, 'vm_edit_delete_word_right')
466 self.esm.setMapping(act, QsciScintilla.SCI_DELWORDRIGHT)
467 act.triggered.connect(self.esm.map)
468 self.editActions.append(act)
469
470 act = E5Action(
471 QCoreApplication.translate('ViewManager', 'Delete line to left'),
472 QCoreApplication.translate('ViewManager', 'Delete line to left'),
473 QKeySequence(QCoreApplication.translate(
474 'ViewManager', 'Ctrl+Shift+Backspace')),
475 0,
476 self.editorActGrp, 'vm_edit_delete_line_left')
477 self.esm.setMapping(act, QsciScintilla.SCI_DELLINELEFT)
478 act.triggered.connect(self.esm.map)
479 self.editActions.append(act)
480
481 act = E5Action(
482 QCoreApplication.translate('ViewManager', 'Delete line to right'),
483 QCoreApplication.translate('ViewManager', 'Delete line to right'),
484 0, 0,
485 self.editorActGrp, 'vm_edit_delete_line_right')
486 if isMacPlatform():
487 act.setShortcut(QKeySequence(
488 QCoreApplication.translate('ViewManager', 'Meta+K')))
489 else:
490 act.setShortcut(QKeySequence(
491 QCoreApplication.translate('ViewManager', 'Ctrl+Shift+Del')))
492 self.esm.setMapping(act, QsciScintilla.SCI_DELLINERIGHT)
493 act.triggered.connect(self.esm.map)
494 self.editActions.append(act)
495
496 act = E5Action(
497 QCoreApplication.translate('ViewManager',
498 'Move left one character'),
499 QCoreApplication.translate('ViewManager',
500 'Move left one character'),
501 QKeySequence(QCoreApplication.translate('ViewManager', 'Left')), 0,
502 self.editorActGrp, 'vm_edit_move_left_char')
503 self.esm.setMapping(act, QsciScintilla.SCI_CHARLEFT)
504 if isMacPlatform():
505 act.setAlternateShortcut(QKeySequence(
506 QCoreApplication.translate('ViewManager', 'Meta+B')))
507 act.triggered.connect(self.esm.map)
508 self.editActions.append(act)
509
510 act = E5Action(
511 QCoreApplication.translate('ViewManager',
512 'Move right one character'),
513 QCoreApplication.translate('ViewManager',
514 'Move right one character'),
515 QKeySequence(QCoreApplication.translate('ViewManager', 'Right')),
516 0, self.editorActGrp, 'vm_edit_move_right_char')
517 if isMacPlatform():
518 act.setAlternateShortcut(QKeySequence(
519 QCoreApplication.translate('ViewManager', 'Meta+F')))
520 self.esm.setMapping(act, QsciScintilla.SCI_CHARRIGHT)
521 act.triggered.connect(self.esm.map)
522 self.editActions.append(act)
523
524 act = E5Action(
525 QCoreApplication.translate('ViewManager', 'Move left one word'),
526 QCoreApplication.translate('ViewManager', 'Move left one word'),
527 0, 0,
528 self.editorActGrp, 'vm_edit_move_left_word')
529 if isMacPlatform():
530 act.setShortcut(QKeySequence(
531 QCoreApplication.translate('ViewManager', 'Alt+Left')))
532 else:
533 act.setShortcut(QKeySequence(
534 QCoreApplication.translate('ViewManager', 'Ctrl+Left')))
535 self.esm.setMapping(act, QsciScintilla.SCI_WORDLEFT)
536 act.triggered.connect(self.esm.map)
537 self.editActions.append(act)
538
539 act = E5Action(
540 QCoreApplication.translate('ViewManager', 'Move right one word'),
541 QCoreApplication.translate('ViewManager', 'Move right one word'),
542 0, 0,
543 self.editorActGrp, 'vm_edit_move_right_word')
544 if not isMacPlatform():
545 act.setShortcut(QKeySequence(
546 QCoreApplication.translate('ViewManager', 'Ctrl+Right')))
547 self.esm.setMapping(act, QsciScintilla.SCI_WORDRIGHT)
548 act.triggered.connect(self.esm.map)
549 self.editActions.append(act)
550
551 act = E5Action(
552 QCoreApplication.translate(
553 'ViewManager',
554 'Move to first visible character in document line'),
555 QCoreApplication.translate(
556 'ViewManager',
557 'Move to first visible character in document line'),
558 0, 0,
559 self.editorActGrp, 'vm_edit_move_first_visible_char')
560 if not isMacPlatform():
561 act.setShortcut(QKeySequence(
562 QCoreApplication.translate('ViewManager', 'Home')))
563 self.esm.setMapping(act, QsciScintilla.SCI_VCHOME)
564 act.triggered.connect(self.esm.map)
565 self.editActions.append(act)
566
567 act = E5Action(
568 QCoreApplication.translate(
569 'ViewManager', 'Move to end of document line'),
570 QCoreApplication.translate(
571 'ViewManager', 'Move to end of document line'),
572 0, 0,
573 self.editorActGrp, 'vm_edit_move_end_line')
574 if isMacPlatform():
575 act.setShortcut(QKeySequence(
576 QCoreApplication.translate('ViewManager', 'Meta+E')))
577 else:
578 act.setShortcut(QKeySequence(
579 QCoreApplication.translate('ViewManager', 'End')))
580 self.esm.setMapping(act, QsciScintilla.SCI_LINEEND)
581 act.triggered.connect(self.esm.map)
582 self.editActions.append(act)
583
584 act = E5Action(
585 QCoreApplication.translate('ViewManager', 'Move up one line'),
586 QCoreApplication.translate('ViewManager', 'Move up one line'),
587 QKeySequence(QCoreApplication.translate('ViewManager', 'Up')), 0,
588 self.editorActGrp, 'vm_edit_move_up_line')
589 if isMacPlatform():
590 act.setAlternateShortcut(QKeySequence(
591 QCoreApplication.translate('ViewManager', 'Meta+P')))
592 self.esm.setMapping(act, QsciScintilla.SCI_LINEUP)
593 act.triggered.connect(self.esm.map)
594 self.editActions.append(act)
595
596 act = E5Action(
597 QCoreApplication.translate('ViewManager', 'Move down one line'),
598 QCoreApplication.translate('ViewManager', 'Move down one line'),
599 QKeySequence(QCoreApplication.translate('ViewManager', 'Down')), 0,
600 self.editorActGrp, 'vm_edit_move_down_line')
601 if isMacPlatform():
602 act.setAlternateShortcut(QKeySequence(
603 QCoreApplication.translate('ViewManager', 'Meta+N')))
604 self.esm.setMapping(act, QsciScintilla.SCI_LINEDOWN)
605 act.triggered.connect(self.esm.map)
606 self.editActions.append(act)
607
608 act = E5Action(
609 self.tr('Move forward one history entry'),
610 self.tr('Move forward one history entry'),
611 QKeySequence(QCoreApplication.translate('ViewManager',
612 'Ctrl+Down')),
613 0, self.editorActGrp, 'vm_edit_scroll_down_line')
614 self.esm.setMapping(act, QsciScintilla.SCI_LINESCROLLDOWN)
615 act.triggered.connect(self.esm.map)
616 self.editActions.append(act)
617
618 act = E5Action(
619 self.tr('Move back one history entry'),
620 self.tr('Move back one history entry'),
621 QKeySequence(QCoreApplication.translate('ViewManager', 'Ctrl+Up')),
622 0, self.editorActGrp, 'vm_edit_scroll_up_line')
623 self.esm.setMapping(act, QsciScintilla.SCI_LINESCROLLUP)
624 act.triggered.connect(self.esm.map)
625 self.editActions.append(act)
626
627 act = E5Action(
628 QCoreApplication.translate('ViewManager', 'Move up one page'),
629 QCoreApplication.translate('ViewManager', 'Move up one page'),
630 QKeySequence(QCoreApplication.translate('ViewManager', 'PgUp')), 0,
631 self.editorActGrp, 'vm_edit_move_up_page')
632 self.esm.setMapping(act, QsciScintilla.SCI_PAGEUP)
633 act.triggered.connect(self.esm.map)
634 self.editActions.append(act)
635
636 act = E5Action(
637 QCoreApplication.translate('ViewManager', 'Move down one page'),
638 QCoreApplication.translate('ViewManager', 'Move down one page'),
639 QKeySequence(QCoreApplication.translate('ViewManager', 'PgDown')),
640 0, self.editorActGrp, 'vm_edit_move_down_page')
641 if isMacPlatform():
642 act.setAlternateShortcut(QKeySequence(
643 QCoreApplication.translate('ViewManager', 'Meta+V')))
644 self.esm.setMapping(act, QsciScintilla.SCI_PAGEDOWN)
645 act.triggered.connect(self.esm.map)
646 self.editActions.append(act)
647
648 act = E5Action(
649 QCoreApplication.translate('ViewManager', 'Escape'),
650 QCoreApplication.translate('ViewManager', 'Escape'),
651 QKeySequence(QCoreApplication.translate('ViewManager', 'Esc')), 0,
652 self.editorActGrp, 'vm_edit_escape')
653 self.esm.setMapping(act, QsciScintilla.SCI_CANCEL)
654 act.triggered.connect(self.esm.map)
655 self.editActions.append(act)
656
657 act = E5Action(
658 QCoreApplication.translate(
659 'ViewManager', 'Extend selection left one character'),
660 QCoreApplication.translate(
661 'ViewManager', 'Extend selection left one character'),
662 QKeySequence(QCoreApplication.translate('ViewManager',
663 'Shift+Left')),
664 0, self.editorActGrp, 'vm_edit_extend_selection_left_char')
665 if isMacPlatform():
666 act.setAlternateShortcut(QKeySequence(
667 QCoreApplication.translate('ViewManager', 'Meta+Shift+B')))
668 self.esm.setMapping(act, QsciScintilla.SCI_CHARLEFTEXTEND)
669 act.triggered.connect(self.esm.map)
670 self.editActions.append(act)
671
672 act = E5Action(
673 QCoreApplication.translate(
674 'ViewManager', 'Extend selection right one character'),
675 QCoreApplication.translate(
676 'ViewManager', 'Extend selection right one character'),
677 QKeySequence(QCoreApplication.translate('ViewManager',
678 'Shift+Right')),
679 0, self.editorActGrp, 'vm_edit_extend_selection_right_char')
680 if isMacPlatform():
681 act.setAlternateShortcut(QKeySequence(
682 QCoreApplication.translate('ViewManager', 'Meta+Shift+F')))
683 self.esm.setMapping(act, QsciScintilla.SCI_CHARRIGHTEXTEND)
684 act.triggered.connect(self.esm.map)
685 self.editActions.append(act)
686
687 act = E5Action(
688 QCoreApplication.translate(
689 'ViewManager', 'Extend selection left one word'),
690 QCoreApplication.translate(
691 'ViewManager', 'Extend selection left one word'),
692 0, 0,
693 self.editorActGrp, 'vm_edit_extend_selection_left_word')
694 if isMacPlatform():
695 act.setShortcut(QKeySequence(
696 QCoreApplication.translate('ViewManager', 'Alt+Shift+Left')))
697 else:
698 act.setShortcut(QKeySequence(
699 QCoreApplication.translate('ViewManager', 'Ctrl+Shift+Left')))
700 self.esm.setMapping(act, QsciScintilla.SCI_WORDLEFTEXTEND)
701 act.triggered.connect(self.esm.map)
702 self.editActions.append(act)
703
704 act = E5Action(
705 QCoreApplication.translate(
706 'ViewManager', 'Extend selection right one word'),
707 QCoreApplication.translate(
708 'ViewManager', 'Extend selection right one word'),
709 0, 0,
710 self.editorActGrp, 'vm_edit_extend_selection_right_word')
711 if isMacPlatform():
712 act.setShortcut(QKeySequence(
713 QCoreApplication.translate('ViewManager', 'Alt+Shift+Right')))
714 else:
715 act.setShortcut(QKeySequence(
716 QCoreApplication.translate('ViewManager', 'Ctrl+Shift+Right')))
717 self.esm.setMapping(act, QsciScintilla.SCI_WORDRIGHTEXTEND)
718 act.triggered.connect(self.esm.map)
719 self.editActions.append(act)
720
721 act = E5Action(
722 QCoreApplication.translate(
723 'ViewManager',
724 'Extend selection to first visible character in document'
725 ' line'),
726 QCoreApplication.translate(
727 'ViewManager',
728 'Extend selection to first visible character in document'
729 ' line'),
730 0, 0,
731 self.editorActGrp, 'vm_edit_extend_selection_first_visible_char')
732 if not isMacPlatform():
733 act.setShortcut(QKeySequence(
734 QCoreApplication.translate('ViewManager', 'Shift+Home')))
735 self.esm.setMapping(act, QsciScintilla.SCI_VCHOMEEXTEND)
736 act.triggered.connect(self.esm.map)
737 self.editActions.append(act)
738
739 act = E5Action(
740 QCoreApplication.translate(
741 'ViewManager', 'Extend selection to end of document line'),
742 QCoreApplication.translate(
743 'ViewManager', 'Extend selection to end of document line'),
744 0, 0,
745 self.editorActGrp, 'vm_edit_extend_selection_end_line')
746 if isMacPlatform():
747 act.setShortcut(QKeySequence(
748 QCoreApplication.translate('ViewManager', 'Meta+Shift+E')))
749 else:
750 act.setShortcut(QKeySequence(
751 QCoreApplication.translate('ViewManager', 'Shift+End')))
752 self.esm.setMapping(act, QsciScintilla.SCI_LINEENDEXTEND)
753 act.triggered.connect(self.esm.map)
754 self.editActions.append(act)
755
756 def __createSearchActions(self):
757 """
758 Private method defining the user interface actions for the search
759 commands.
760 """
761 self.searchActGrp = createActionGroup(self)
762
763 self.searchAct = E5Action(
764 QCoreApplication.translate('ViewManager', 'Search'),
765 UI.PixmapCache.getIcon("find"),
766 QCoreApplication.translate('ViewManager', '&Search...'),
767 QKeySequence(QCoreApplication.translate(
768 'ViewManager', "Ctrl+F", "Search|Search")),
769 0,
770 self, 'vm_search')
771 self.searchAct.setStatusTip(QCoreApplication.translate(
772 'ViewManager', 'Search for a text'))
773 self.searchAct.setWhatsThis(QCoreApplication.translate(
774 'ViewManager',
775 """<b>Search</b>"""
776 """<p>Search for some text in the shell window. A"""
777 """ dialog is shown to enter the search text and options"""
778 """ for the search.</p>"""
779 ))
780 self.searchAct.triggered.connect(self.__showFind)
781 self.searchActions.append(self.searchAct)
782
783 self.searchNextAct = E5Action(
784 QCoreApplication.translate(
785 'ViewManager', 'Search next'),
786 UI.PixmapCache.getIcon("findNext"),
787 QCoreApplication.translate('ViewManager', 'Search &next'),
788 QKeySequence(QCoreApplication.translate(
789 'ViewManager', "F3", "Search|Search next")),
790 0,
791 self, 'vm_search_next')
792 self.searchNextAct.setStatusTip(QCoreApplication.translate(
793 'ViewManager', 'Search next occurrence of text'))
794 self.searchNextAct.setWhatsThis(QCoreApplication.translate(
795 'ViewManager',
796 """<b>Search next</b>"""
797 """<p>Search the next occurrence of some text in the shell"""
798 """ window. The previously entered search text and options are"""
799 """ reused.</p>"""
800 ))
801 self.searchNextAct.triggered.connect(
802 self.__searchWidget.on_findNextButton_clicked)
803 self.searchActions.append(self.searchNextAct)
804
805 self.searchPrevAct = E5Action(
806 QCoreApplication.translate('ViewManager', 'Search previous'),
807 UI.PixmapCache.getIcon("findPrev"),
808 QCoreApplication.translate('ViewManager', 'Search &previous'),
809 QKeySequence(QCoreApplication.translate(
810 'ViewManager', "Shift+F3", "Search|Search previous")),
811 0,
812 self, 'vm_search_previous')
813 self.searchPrevAct.setStatusTip(QCoreApplication.translate(
814 'ViewManager', 'Search previous occurrence of text'))
815 self.searchPrevAct.setWhatsThis(QCoreApplication.translate(
816 'ViewManager',
817 """<b>Search previous</b>"""
818 """<p>Search the previous occurrence of some text in the shell"""
819 """ window. The previously entered search text and options are"""
820 """ reused.</p>"""
821 ))
822 self.searchPrevAct.triggered.connect(
823 self.__searchWidget.on_findPrevButton_clicked)
824 self.searchActions.append(self.searchPrevAct)
825
826 def __createViewActions(self):
827 """
828 Private method defining the user interface actions for the view
829 commands.
830 """
831 self.viewActGrp = createActionGroup(self)
832
833 self.zoomInAct = E5Action(
834 QCoreApplication.translate('ViewManager', 'Zoom in'),
835 UI.PixmapCache.getIcon("zoomIn"),
836 QCoreApplication.translate('ViewManager', 'Zoom &in'),
837 QKeySequence(QCoreApplication.translate(
838 'ViewManager', "Ctrl++", "View|Zoom in")),
839 QKeySequence(QCoreApplication.translate(
840 'ViewManager', "Zoom In", "View|Zoom in")),
841 self.viewActGrp, 'vm_view_zoom_in')
842 self.zoomInAct.setStatusTip(QCoreApplication.translate(
843 'ViewManager', 'Zoom in on the text'))
844 self.zoomInAct.setWhatsThis(QCoreApplication.translate(
845 'ViewManager',
846 """<b>Zoom in</b>"""
847 """<p>Zoom in on the text. This makes the text bigger.</p>"""
848 ))
849 self.zoomInAct.triggered.connect(self.__zoomIn)
850 self.viewActions.append(self.zoomInAct)
851
852 self.zoomOutAct = E5Action(
853 QCoreApplication.translate('ViewManager', 'Zoom out'),
854 UI.PixmapCache.getIcon("zoomOut"),
855 QCoreApplication.translate('ViewManager', 'Zoom &out'),
856 QKeySequence(QCoreApplication.translate(
857 'ViewManager', "Ctrl+-", "View|Zoom out")),
858 QKeySequence(QCoreApplication.translate(
859 'ViewManager', "Zoom Out", "View|Zoom out")),
860 self.viewActGrp, 'vm_view_zoom_out')
861 self.zoomOutAct.setStatusTip(QCoreApplication.translate(
862 'ViewManager', 'Zoom out on the text'))
863 self.zoomOutAct.setWhatsThis(QCoreApplication.translate(
864 'ViewManager',
865 """<b>Zoom out</b>"""
866 """<p>Zoom out on the text. This makes the text smaller.</p>"""
867 ))
868 self.zoomOutAct.triggered.connect(self.__zoomOut)
869 self.viewActions.append(self.zoomOutAct)
870
871 self.zoomResetAct = E5Action(
872 QCoreApplication.translate('ViewManager', 'Zoom reset'),
873 UI.PixmapCache.getIcon("zoomReset"),
874 QCoreApplication.translate('ViewManager', 'Zoom &reset'),
875 QKeySequence(QCoreApplication.translate(
876 'ViewManager', "Ctrl+0", "View|Zoom reset")),
877 0,
878 self.viewActGrp, 'vm_view_zoom_reset')
879 self.zoomResetAct.setStatusTip(QCoreApplication.translate(
880 'ViewManager', 'Reset the zoom of the text'))
881 self.zoomResetAct.setWhatsThis(QCoreApplication.translate(
882 'ViewManager',
883 """<b>Zoom reset</b>"""
884 """<p>Reset the zoom of the text. """
885 """This sets the zoom factor to 100%.</p>"""
886 ))
887 self.zoomResetAct.triggered.connect(self.__zoomReset)
888 self.viewActions.append(self.zoomResetAct)
889
890 self.zoomToAct = E5Action(
891 QCoreApplication.translate('ViewManager', 'Zoom'),
892 UI.PixmapCache.getIcon("zoomTo"),
893 QCoreApplication.translate('ViewManager', '&Zoom'),
894 QKeySequence(QCoreApplication.translate(
895 'ViewManager', "Ctrl+#", "View|Zoom")),
896 0,
897 self.viewActGrp, 'vm_view_zoom')
898 self.zoomToAct.setStatusTip(QCoreApplication.translate(
899 'ViewManager', 'Zoom the text'))
900 self.zoomToAct.setWhatsThis(QCoreApplication.translate(
901 'ViewManager',
902 """<b>Zoom</b>"""
903 """<p>Zoom the text. This opens a dialog where the"""
904 """ desired size can be entered.</p>"""
905 ))
906 self.zoomToAct.triggered.connect(self.__zoom)
907 self.viewActions.append(self.zoomToAct)
908
909 def __createHistoryActions(self):
910 """
911 Private method defining the user interface actions for the history
912 commands.
913 """
914 self.showHistoryAct = E5Action(
915 self.tr('Show History'),
916 UI.PixmapCache.getIcon("history"),
917 self.tr('&Show History...'),
918 0, 0,
919 self, 'shell_show_history')
920 self.showHistoryAct.setStatusTip(self.tr(
921 "Show the shell history in a dialog"))
922 self.showHistoryAct.triggered.connect(self.__shell.showHistory)
923
924 self.clearHistoryAct = E5Action(
925 self.tr('Clear History'),
926 UI.PixmapCache.getIcon("historyClear"),
927 self.tr('&Clear History...'),
928 0, 0,
929 self, 'shell_clear_history')
930 self.clearHistoryAct.setStatusTip(self.tr(
931 "Clear the shell history"))
932 self.clearHistoryAct.triggered.connect(self.__shell.clearHistory)
933
934 self.selectHistoryAct = E5Action(
935 self.tr('Select History Entry'),
936 self.tr('Select History &Entry'),
937 0, 0,
938 self, 'shell_select_history')
939 self.selectHistoryAct.setStatusTip(self.tr(
940 "Select an entry of the shell history"))
941 self.selectHistoryAct.triggered.connect(self.__shell.selectHistory)
942
943 def __createHelpActions(self):
944 """
945 Private method to create the Help actions.
946 """
947 self.aboutAct = E5Action(
948 self.tr('About'),
949 self.tr('&About'),
950 0, 0, self, 'about_eric')
951 self.aboutAct.setStatusTip(self.tr(
952 'Display information about this software'))
953 self.aboutAct.setWhatsThis(self.tr(
954 """<b>About</b>"""
955 """<p>Display some information about this software.</p>"""))
956 self.aboutAct.triggered.connect(self.__about)
957 self.helpActions.append(self.aboutAct)
958
959 self.aboutQtAct = E5Action(
960 self.tr('About Qt'),
961 self.tr('About &Qt'),
962 0, 0, self, 'about_qt')
963 self.aboutQtAct.setStatusTip(
964 self.tr('Display information about the Qt toolkit'))
965 self.aboutQtAct.setWhatsThis(self.tr(
966 """<b>About Qt</b>"""
967 """<p>Display some information about the Qt toolkit.</p>"""
968 ))
969 self.aboutQtAct.triggered.connect(self.__aboutQt)
970 self.helpActions.append(self.aboutQtAct)
971
972 self.whatsThisAct = E5Action(
973 self.tr('What\'s This?'),
974 UI.PixmapCache.getIcon("whatsThis"),
975 self.tr('&What\'s This?'),
976 QKeySequence(self.tr("Shift+F1", "Help|What's This?'")),
977 0, self, 'help_help_whats_this')
978 self.whatsThisAct.setStatusTip(self.tr('Context sensitive help'))
979 self.whatsThisAct.setWhatsThis(self.tr(
980 """<b>Display context sensitive help</b>"""
981 """<p>In What's This? mode, the mouse cursor shows an arrow"""
982 """ with a question mark, and you can click on the interface"""
983 """ elements to get a short description of what they do and"""
984 """ how to use them. In dialogs, this feature can be"""
985 """ accessed using the context help button in the titlebar."""
986 """</p>"""
987 ))
988 self.whatsThisAct.triggered.connect(self.__whatsThis)
989 self.helpActions.append(self.whatsThisAct)
990
991 def __showFind(self):
992 """
993 Private method to display the search widget.
994 """
995 txt = self.__shell.selectedText()
996 self.showFind(txt)
997
998 def showFind(self, txt=""):
999 """
1000 Public method to display the search widget.
1001
1002 @param txt text to be shown in the combo
1003 @type str
1004 """
1005 self.__searchWidget.showFind(txt)
1006
1007 def activeWindow(self):
1008 """
1009 Public method to get a reference to the active shell.
1010
1011 @return reference to the shell widget
1012 @rtype Shell
1013 """
1014 return self.__shell
1015
1016 def __readSettings(self):
1017 """
1018 Private method to read the settings remembered last time.
1019 """
1020 settings = Preferences.Prefs.settings
1021 pos = settings.value("ShellWindow/Position", QPoint(0, 0))
1022 size = settings.value("ShellWindow/Size", QSize(800, 600))
1023 self.resize(size)
1024 self.move(pos)
1025
1026 def __writeSettings(self):
1027 """
1028 Private method to write the settings for reuse.
1029 """
1030 settings = Preferences.Prefs.settings
1031 settings.setValue("ShellWindow/Position", self.pos())
1032 settings.setValue("ShellWindow/Size", self.size())
1033
1034 def quit(self):
1035 """
1036 Public method to quit the application.
1037 """
1038 e5App().closeAllWindows()
1039
1040 def __newWindow(self):
1041 """
1042 Private slot to start a new instance of eric.
1043 """
1044 program = sys.executable
1045 eric6 = os.path.join(getConfig("ericDir"), "eric6_shell.py")
1046 args = [eric6]
1047 QProcess.startDetached(program, args)
1048
1049 def __virtualEnvironmentChanged(self, venvName):
1050 """
1051 Private slot handling a change of the shell's virtual environment.
1052
1053 @param venvName name of the virtual environment of the shell
1054 @type str
1055 """
1056 if venvName:
1057 self.setWindowTitle(self.tr("eric Shell [{0}]").format(venvName))
1058 else:
1059 self.setWindowTitle(self.tr("eric Shell"))
1060
1061 ##################################################################
1062 ## Below are the action methods for the view menu
1063 ##################################################################
1064
1065 def __zoomIn(self):
1066 """
1067 Private method to handle the zoom in action.
1068 """
1069 self.__shell.zoomIn()
1070 self.__sbZoom.setValue(self.__shell.getZoom())
1071
1072 def __zoomOut(self):
1073 """
1074 Private method to handle the zoom out action.
1075 """
1076 self.__shell.zoomOut()
1077 self.__sbZoom.setValue(self.__shell.getZoom())
1078
1079 def __zoomReset(self):
1080 """
1081 Private method to reset the zoom factor.
1082 """
1083 self.__shell.zoomTo(0)
1084 self.__sbZoom.setValue(self.__shell.getZoom())
1085
1086 def __zoom(self):
1087 """
1088 Private method to handle the zoom action.
1089 """
1090 from QScintilla.ZoomDialog import ZoomDialog
1091 dlg = ZoomDialog(self.__shell.getZoom(), self, None, True)
1092 if dlg.exec() == QDialog.DialogCode.Accepted:
1093 value = dlg.getZoomSize()
1094 self.__zoomTo(value)
1095
1096 def __zoomTo(self, value):
1097 """
1098 Private slot to zoom to a given value.
1099
1100 @param value zoom value to be set
1101 @type int
1102 """
1103 self.__shell.zoomTo(value)
1104 self.__sbZoom.setValue(self.__shell.getZoom())
1105
1106 def __zoomValueChanged(self, value):
1107 """
1108 Private slot to handle changes of the zoom value.
1109
1110 @param value new zoom value
1111 @type int
1112 """
1113 self.__sbZoom.setValue(value)
1114
1115 ##################################################################
1116 ## Below are the action methods for the help menu
1117 ##################################################################
1118
1119 def __about(self):
1120 """
1121 Private slot to show a little About message.
1122 """
1123 E5MessageBox.about(
1124 self,
1125 self.tr("About eric Shell Window"),
1126 self.tr(
1127 "The eric Shell is a standalone shell window."
1128 " It uses the same backend as the debugger of"
1129 " the full IDE, but is executed independently."))
1130
1131 def __aboutQt(self):
1132 """
1133 Private slot to handle the About Qt dialog.
1134 """
1135 E5MessageBox.aboutQt(self, "eric Shell Window")
1136
1137 def __whatsThis(self):
1138 """
1139 Private slot called in to enter Whats This mode.
1140 """
1141 QWhatsThis.enterWhatsThisMode()
1142
1143 ##################################################################
1144 ## Below are the main menu handling methods
1145 ##################################################################
1146
1147 def __createMenus(self):
1148 """
1149 Private method to create the menus of the menu bar.
1150 """
1151 self.__fileMenu = self.menuBar().addMenu(self.tr("&File"))
1152 self.__fileMenu.setTearOffEnabled(True)
1153 self.__fileMenu.addAction(self.newWindowAct)
1154 self.__fileMenu.addSeparator()
1155 self.__fileMenu.addAction(self.restartAct)
1156 self.__fileMenu.addAction(self.clearRestartAct)
1157 self.__fileMenu.addSeparator()
1158 self.__fileMenu.addAction(self.exitAct)
1159
1160 self.__editMenu = self.menuBar().addMenu(self.tr("&Edit"))
1161 self.__editMenu.setTearOffEnabled(True)
1162 self.__editMenu.addAction(self.cutAct)
1163 self.__editMenu.addAction(self.copyAct)
1164 self.__editMenu.addAction(self.pasteAct)
1165 self.__editMenu.addAction(self.clearAct)
1166 self.__editMenu.addSeparator()
1167 self.__editMenu.addAction(self.searchAct)
1168 self.__editMenu.addAction(self.searchNextAct)
1169 self.__editMenu.addAction(self.searchPrevAct)
1170
1171 self.__viewMenu = self.menuBar().addMenu(self.tr("&View"))
1172 self.__viewMenu.setTearOffEnabled(True)
1173 self.__viewMenu.addAction(self.zoomInAct)
1174 self.__viewMenu.addAction(self.zoomOutAct)
1175 self.__viewMenu.addAction(self.zoomResetAct)
1176 self.__viewMenu.addAction(self.zoomToAct)
1177
1178 self.__historyMenu = self.menuBar().addMenu(self.tr("Histor&y"))
1179 self.__historyMenu.setTearOffEnabled(True)
1180 self.__historyMenu.addAction(self.selectHistoryAct)
1181 self.__historyMenu.addAction(self.showHistoryAct)
1182 self.__historyMenu.addAction(self.clearHistoryAct)
1183 self.__historyMenu.setEnabled(self.__shell.isHistoryEnabled())
1184
1185 self.__startMenu = self.menuBar().addMenu(self.tr("&Start"))
1186 self.__startMenu.aboutToShow.connect(self.__showStartMenu)
1187 self.__startMenu.triggered.connect(self.__startShell)
1188
1189 self.menuBar().addSeparator()
1190
1191 self.__helpMenu = self.menuBar().addMenu(self.tr("&Help"))
1192 self.__helpMenu.setTearOffEnabled(True)
1193 self.__helpMenu.addAction(self.aboutAct)
1194 self.__helpMenu.addAction(self.aboutQtAct)
1195 self.__helpMenu.addSeparator()
1196 self.__helpMenu.addAction(self.whatsThisAct)
1197
1198 def __showStartMenu(self):
1199 """
1200 Private slot to prepare the language menu.
1201 """
1202 self.__startMenu.clear()
1203 for venvName in sorted(self.virtualenvManager.getVirtualenvNames()):
1204 self.__startMenu.addAction(venvName)
1205
1206 def __startShell(self, action):
1207 """
1208 Private slot to start a shell according to the action triggered.
1209
1210 @param action menu action that was triggered (QAction)
1211 """
1212 venvName = action.text()
1213 self.__debugServer.startClient(False, venvName=venvName)
1214 self.__debugServer.remoteBanner()
1215
1216 ##################################################################
1217 ## Below are the toolbar handling methods
1218 ##################################################################
1219
1220 def __createToolBars(self):
1221 """
1222 Private method to create the various toolbars.
1223 """
1224 filetb = self.addToolBar(self.tr("File"))
1225 filetb.setIconSize(UI.Config.ToolBarIconSize)
1226 filetb.addAction(self.newWindowAct)
1227 filetb.addSeparator()
1228 filetb.addAction(self.restartAct)
1229 filetb.addAction(self.clearRestartAct)
1230 filetb.addSeparator()
1231 filetb.addAction(self.exitAct)
1232
1233 edittb = self.addToolBar(self.tr("Edit"))
1234 edittb.setIconSize(UI.Config.ToolBarIconSize)
1235 edittb.addAction(self.cutAct)
1236 edittb.addAction(self.copyAct)
1237 edittb.addAction(self.pasteAct)
1238 edittb.addAction(self.clearAct)
1239
1240 findtb = self.addToolBar(self.tr("Find"))
1241 findtb.setIconSize(UI.Config.ToolBarIconSize)
1242 findtb.addAction(self.searchAct)
1243 findtb.addAction(self.searchNextAct)
1244 findtb.addAction(self.searchPrevAct)
1245
1246 viewtb = self.addToolBar(self.tr("View"))
1247 viewtb.setIconSize(UI.Config.ToolBarIconSize)
1248 viewtb.addAction(self.zoomInAct)
1249 viewtb.addAction(self.zoomOutAct)
1250 viewtb.addAction(self.zoomResetAct)
1251 viewtb.addAction(self.zoomToAct)
1252
1253 self.__historyToolbar = self.addToolBar(self.tr("History"))
1254 self.__historyToolbar.setIconSize(UI.Config.ToolBarIconSize)
1255 self.__historyToolbar.addAction(self.showHistoryAct)
1256 self.__historyToolbar.addAction(self.clearHistoryAct)
1257 self.__historyToolbar.setEnabled(self.__shell.isHistoryEnabled())
1258
1259 helptb = self.addToolBar(self.tr("Help"))
1260 helptb.setIconSize(UI.Config.ToolBarIconSize)
1261 helptb.addAction(self.whatsThisAct)
1262
1263 ##################################################################
1264 ## Below are the status bar handling methods
1265 ##################################################################
1266
1267 def __createStatusBar(self):
1268 """
1269 Private slot to set up the status bar.
1270 """
1271 self.__statusBar = self.statusBar()
1272 self.__statusBar.setSizeGripEnabled(True)
1273
1274 self.__sbZoom = E5ZoomWidget(
1275 UI.PixmapCache.getPixmap("zoomOut"),
1276 UI.PixmapCache.getPixmap("zoomIn"),
1277 UI.PixmapCache.getPixmap("zoomReset"),
1278 self.__statusBar)
1279 self.__statusBar.addPermanentWidget(self.__sbZoom)
1280 self.__sbZoom.setWhatsThis(self.tr(
1281 """<p>This part of the status bar allows zooming the shell.</p>"""
1282 ))
1283
1284 self.__sbZoom.valueChanged.connect(self.__zoomTo)
1285 self.__sbZoom.setValue(0)
1286
1287 def __historyStyleChanged(self, historyStyle):
1288 """
1289 Private slot to handle a change of the shell history style.
1290
1291 @param historyStyle style to be used for the history
1292 @type ShellHistoryStyle
1293 """
1294 enabled = self.__shell.isHistoryEnabled()
1295 self.__historyMenu.setEnabled(enabled)
1296 self.__historyToolbar.setEnabled(enabled)

eric ide

mercurial