src/eric7/MicroPython/MicroPythonWindow.py

Wed, 24 Jan 2024 18:52:50 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 24 Jan 2024 18:52:50 +0100
branch
eric7
changeset 10523
e4069ddd7dc7
parent 10518
1682f3203ae5
child 10683
779cda568acb
permissions
-rw-r--r--

MicroPython
- Enhanced the MiucroPython file manager widget.

10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2024 Detlev Offenbach <detlev@die-offenbachs.de>
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the standalone MicroPython window.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import contextlib
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtCore import QSize, Qt, QUrl, pyqtSignal, pyqtSlot
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from PyQt6.QtGui import QDesktopServices
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkProxyFactory
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from PyQt6.QtWidgets import QDialog, QSplitter, QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 from eric7 import Preferences
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricNetwork.EricNetworkProxyFactory import (
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 EricNetworkProxyFactory,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 proxyAuthenticationRequired,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 from eric7.EricWidgets import EricMessageBox
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from eric7.EricWidgets.EricApplication import ericApp
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from eric7.EricWidgets.EricMainWindow import EricMainWindow
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 from eric7.EricWidgets.EricSideBar import EricSideBar, EricSideBarSide
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 from eric7.MicroPython.MicroPythonWidget import MicroPythonWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 from eric7.PipInterface.Pip import Pip
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 from eric7.QScintilla.MiniEditor import MiniEditor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 from eric7.SystemUtilities import FileSystemUtilities
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 try:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 from eric7.EricNetwork.EricSslErrorHandler import (
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 EricSslErrorHandler,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 EricSslErrorState,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 SSL_AVAILABLE = True
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 except ImportError:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 SSL_AVAILABLE = False
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 class MicroPythonWindow(EricMainWindow):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 Class implementing the standalone MicroPython window.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
10523
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
46 @signal editorCountChanged(count) emitted whenever the count of open editors
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
47 changed
10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @signal preferencesChanged() emitted after the preferences were changed
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50
10523
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
51 editorCountChanged = pyqtSignal(int)
10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 preferencesChanged = pyqtSignal()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 def __init__(self, parent=None):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 Constructor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @param parent reference to the parent widget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @type QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 super().__init__(parent)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.__pip = Pip(self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 # create the window layout
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__mpyWidget = MicroPythonWidget(parent=self, forMPyWindow=True)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.__mpyWidget.aboutToDisconnect.connect(self.__deviceDisconnect)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.__bottomSidebar = EricSideBar(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 EricSideBarSide.SOUTH, Preferences.getUI("IconBarSize")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 self.__bottomSidebar.setIconBarColor(Preferences.getUI("IconBarColor"))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__verticalSplitter = QSplitter(Qt.Orientation.Vertical)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.__verticalSplitter.setChildrenCollapsible(False)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.__verticalSplitter.addWidget(self.__mpyWidget)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.__verticalSplitter.addWidget(self.__bottomSidebar)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.setCentralWidget(self.__verticalSplitter)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.setWindowTitle(self.tr("MicroPython / CircuitPython Devices"))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 g = Preferences.getGeometry("MPyWindowGeometry")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 if g.isEmpty():
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 s = QSize(800, 1000)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.resize(s)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 else:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.restoreGeometry(g)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.__verticalSplitter.setSizes(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 Preferences.getMicroPython("MPyWindowSplitterSizes")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 # register the objects
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 ericApp().registerObject("UserInterface", self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 ericApp().registerObject("ViewManager", self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 ericApp().registerObject("Pip", self.__pip)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 ericApp().registerObject("MicroPython", self.__mpyWidget)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 # attributes to manage the open editors
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 self.__editors = []
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 self.__activeEditor = None
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 ericApp().focusChanged.connect(self.__appFocusChanged)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 # network related setup
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 if Preferences.getUI("UseSystemProxy"):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 QNetworkProxyFactory.setUseSystemConfiguration(True)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 else:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 self.__proxyFactory = EricNetworkProxyFactory()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 QNetworkProxyFactory.setApplicationProxyFactory(self.__proxyFactory)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 QNetworkProxyFactory.setUseSystemConfiguration(False)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 self.__networkManager = QNetworkAccessManager(self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 self.__networkManager.proxyAuthenticationRequired.connect(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 proxyAuthenticationRequired
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 if SSL_AVAILABLE:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 self.__sslErrorHandler = EricSslErrorHandler(self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 self.__networkManager.sslErrors.connect(self.__sslErrors)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self.__replies = []
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.__bottomSidebar.setVisible(False)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 def closeEvent(self, evt):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 Protected event handler for the close event.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 @param evt reference to the close event
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 <br />This event is simply accepted after the history has been
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 saved and all window references have been deleted.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 @type QCloseEvent
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 Preferences.setGeometry("MPyWindowGeometry", self.saveGeometry())
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 Preferences.setMicroPython(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 "MPyWindowSplitterSizes", self.__verticalSplitter.sizes()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 for editor in self.__editors[:]:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 with contextlib.suppress(RuntimeError):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 editor.close()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 evt.accept()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 def __sslErrors(self, reply, errors):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 Private slot to handle SSL errors.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 @param reply reference to the reply object
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 @type QNetworkReply
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @param errors list of SSL errors
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @type list of QSslError
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 ignored = self.__sslErrorHandler.sslErrorsReply(reply, errors)[0]
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 if ignored == EricSslErrorState.NOT_IGNORED:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.__downloadCancelled = True
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 #######################################################################
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 ## Methods below implement user interface methods needed by the
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 ## MicroPython widget.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 #######################################################################
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 def addSideWidget(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 self,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 side, # noqa U100
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 widget,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 icon,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 label,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 ):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 Public method to add a widget to the sides.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 @param side side to add the widget to
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 @type UserInterfaceSide
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 @param widget reference to the widget to add
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 @type QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 @param icon icon to be used
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 @type QIcon
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 @param label label text to be shown
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 @type str
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 self.__bottomSidebar.addTab(widget, icon, label)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.__bottomSidebar.setVisible(True)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 def showSideWidget(self, widget):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 Public method to show a specific widget placed in the side widgets.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 @param widget reference to the widget to be shown
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 @type QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 index = self.__bottomSidebar.indexOf(widget)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 if index != -1:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 self.__bottomSidebar.show()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 self.__bottomSidebar.setCurrentIndex(index)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 self.__bottomSidebar.raise_()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 def removeSideWidget(self, widget):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 Public method to remove a widget added using addSideWidget().
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 @param widget reference to the widget to remove
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 @type QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 index = self.__bottomSidebar.indexOf(widget)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if index != -1:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 self.__bottomSidebar.removeTab(index)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 self.__bottomSidebar.setVisible(self.__bottomSidebar.count() > 0)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 def networkAccessManager(self):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 Public method to get a reference to the network access manager object.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 @return reference to the network access manager object
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 @rtype QNetworkAccessManager
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 return self.__networkManager
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 def launchHelpViewer(self, url):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 Public slot to start the help viewer/web browser.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 @param url URL to be opened
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 @type str or QUrl
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 started = QDesktopServices.openUrl(QUrl(url))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 if not started:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 EricMessageBox.critical(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self, self.tr("Open Browser"), self.tr("Could not start a web browser")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 @pyqtSlot()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 @pyqtSlot(str)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 def showPreferences(self, pageName=None):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 Public slot to set the preferences.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 @param pageName name of the configuration page to show
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 @type str
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 from eric7.Preferences.ConfigurationDialog import (
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 ConfigurationDialog,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 ConfigurationMode,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 dlg = ConfigurationDialog(
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 None,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 "Configuration",
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 True,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 fromEric=True,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 displayMode=ConfigurationMode.MICROPYTHONMODE,
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 )
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 dlg.show()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 if pageName is not None:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 dlg.showConfigurationPageByName(pageName)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 else:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 dlg.showConfigurationPageByName("empty")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 dlg.exec()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 if dlg.result() == QDialog.DialogCode.Accepted:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 dlg.setPreferences()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 Preferences.syncPreferences()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 self.__preferencesChanged()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 @pyqtSlot()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 def __preferencesChanged(self):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 Private slot to handle a change of the preferences.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 self.__bottomSidebar.setIconBarColor(Preferences.getUI("IconBarColor"))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 self.__bottomSidebar.setIconBarSize(Preferences.getUI("IconBarSize"))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 if Preferences.getUI("UseSystemProxy"):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 QNetworkProxyFactory.setUseSystemConfiguration(True)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 else:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 self.__proxyFactory = EricNetworkProxyFactory()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 QNetworkProxyFactory.setApplicationProxyFactory(self.__proxyFactory)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 QNetworkProxyFactory.setUseSystemConfiguration(False)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 self.preferencesChanged.emit()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 #######################################################################
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 ## Methods below implement view manager methods needed by the
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 ## MicroPython widget.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 #######################################################################
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 def activeWindow(self):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 Public method to get a reference to the active editor.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 @return reference to the active editor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 @rtype MiniEditor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 return self.__activeEditor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 def getEditor(self, fn):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 Public method to return the editor displaying the given file.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 @param fn filename to look for
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 @type str
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 for editor in self.__editors:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 if editor.getFileName() == fn:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 editor.raise_()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 break
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 else:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 editor = MiniEditor(filename=fn, parent=self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 editor.closing.connect(lambda: self.__editorClosing(editor))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 editor.show()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 self.__editors.append(editor)
10523
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
311 self.editorCountChanged.emit(len(self.__editors))
10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 def newEditorWithText(self, text, language="", fileName=""):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 Public method to generate a new editor with a given text and associated file
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 name.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 @param text text for the editor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 @type str
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 @param language source language (defaults to "")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 @type str (optional)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 @param fileName associated file name (defaults to "")
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 @type str (optional)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 editor = MiniEditor(filename=fileName, parent=self)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 editor.closing.connect(lambda: self.__editorClosing(editor))
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 editor.setText(text, filetype=language)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 editor.setLanguage(fileName)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 editor.show()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 self.__editors.append(editor)
10523
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
332 self.editorCountChanged.emit(len(self.__editors))
10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 def __editorClosing(self, editor):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 Private method called, when an editor is closing.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 @param editor reference to the closing editor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 @type MiniEditor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 with contextlib.suppress(ValueError):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 self.__editors.remove(editor)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 del editor
10523
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
344 self.editorCountChanged.emit(len(self.__editors))
10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 if self.__editors:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 # make the last one (i.e. most recently opened one) the active editor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 self.__activeEditor = self.__editors[-1]
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 else:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 self.__activeEditor = None
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351
10523
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
352 def getOpenEditorsCount(self):
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
353 """
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
354 Public method to get the number of open editors.
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
355
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
356 @return number of open editors
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
357 @rtype int
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
358 """
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
359 return len(self.__editors)
e4069ddd7dc7 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10518
diff changeset
360
10518
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
361 @pyqtSlot(QWidget, QWidget)
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
362 def __appFocusChanged(self, old, now):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
363 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
364 Private slot to track the application focus.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
365
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
366 @param old reference to the widget loosing focus
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
367 @type QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
368 @param now reference to the widget gaining focus
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
369 @type QWidget
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
370 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371 if now is None:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
372 return
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
373
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
374 for editor in self.__editors:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
375 if now in editor.findChildren(QWidget):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
376 self.__activeEditor = editor
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
377 break
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
378
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
379 @pyqtSlot()
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
380 def __deviceDisconnect(self):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
381 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
382 Private slot handling the device being disconnected.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
383
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
384 This closes all editors directly connected to the device about to
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
385 be disconnected.
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
386 """
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
387 for editor in self.__editors[:]:
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 if FileSystemUtilities.isDeviceFileName(editor.getFileName()):
1682f3203ae5 MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
389 editor.close()

eric ide

mercurial