src/eric7/MicroPython/MicroPythonWindow.py

Sun, 21 Jan 2024 15:38:51 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 21 Jan 2024 15:38:51 +0100
branch
eric7
changeset 10518
1682f3203ae5
child 10523
e4069ddd7dc7
permissions
-rw-r--r--

MicroPython
- Added a standalone application of the built-in MicroPython interface (`eric7_mpy`).

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

eric ide

mercurial