Added the Adafruit Feather nRF52840 to the list of known NRF52 boards and changed the list of known CircuitPython boards to be more explicit with respect to Adafruit boards (i.e. VID 0x239A).
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
11090
|
3
|
# Copyright (c) 2023 - 2025 Detlev Offenbach <detlev@die-offenbachs.de> |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4
|
# |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7
|
Module implementing the MicroPython REPL widget. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10
|
import re |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12
|
from PyQt6.QtCore import QPoint, Qt, pyqtSignal, pyqtSlot |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13
|
from PyQt6.QtGui import ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14
|
QBrush, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15
|
QClipboard, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16
|
QColor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17
|
QGuiApplication, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18
|
QKeySequence, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19
|
QTextCursor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21
|
from PyQt6.QtWidgets import ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22
|
QHBoxLayout, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23
|
QLabel, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24
|
QMenu, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25
|
QSizePolicy, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26
|
QTextEdit, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27
|
QVBoxLayout, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28
|
QWidget, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31
|
from eric7 import Preferences |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32
|
from eric7.EricGui import EricPixmapCache |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33
|
from eric7.EricWidgets.EricZoomWidget import EricZoomWidget |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34
|
from eric7.SystemUtilities import OSUtilities |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36
|
AnsiColorSchemes = { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37
|
"Windows 7": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38
|
0: QBrush(QColor(0, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39
|
1: QBrush(QColor(128, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40
|
2: QBrush(QColor(0, 128, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41
|
3: QBrush(QColor(128, 128, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42
|
4: QBrush(QColor(0, 0, 128)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43
|
5: QBrush(QColor(128, 0, 128)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44
|
6: QBrush(QColor(0, 128, 128)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45
|
7: QBrush(QColor(192, 192, 192)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46
|
10: QBrush(QColor(128, 128, 128)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47
|
11: QBrush(QColor(255, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48
|
12: QBrush(QColor(0, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49
|
13: QBrush(QColor(255, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50
|
14: QBrush(QColor(0, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51
|
15: QBrush(QColor(255, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52
|
16: QBrush(QColor(0, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53
|
17: QBrush(QColor(255, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55
|
"Windows 10": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56
|
0: QBrush(QColor(12, 12, 12)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57
|
1: QBrush(QColor(197, 15, 31)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58
|
2: QBrush(QColor(19, 161, 14)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59
|
3: QBrush(QColor(193, 156, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60
|
4: QBrush(QColor(0, 55, 218)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61
|
5: QBrush(QColor(136, 23, 152)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62
|
6: QBrush(QColor(58, 150, 221)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63
|
7: QBrush(QColor(204, 204, 204)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64
|
10: QBrush(QColor(118, 118, 118)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65
|
11: QBrush(QColor(231, 72, 86)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66
|
12: QBrush(QColor(22, 198, 12)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67
|
13: QBrush(QColor(249, 241, 165)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68
|
14: QBrush(QColor(59, 12, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69
|
15: QBrush(QColor(180, 0, 158)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70
|
16: QBrush(QColor(97, 214, 214)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71
|
17: QBrush(QColor(242, 242, 242)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73
|
"PuTTY": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74
|
0: QBrush(QColor(0, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75
|
1: QBrush(QColor(187, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76
|
2: QBrush(QColor(0, 187, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77
|
3: QBrush(QColor(187, 187, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78
|
4: QBrush(QColor(0, 0, 187)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79
|
5: QBrush(QColor(187, 0, 187)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80
|
6: QBrush(QColor(0, 187, 187)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81
|
7: QBrush(QColor(187, 187, 187)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82
|
10: QBrush(QColor(85, 85, 85)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83
|
11: QBrush(QColor(255, 85, 85)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84
|
12: QBrush(QColor(85, 255, 85)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85
|
13: QBrush(QColor(255, 255, 85)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86
|
14: QBrush(QColor(85, 85, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87
|
15: QBrush(QColor(255, 85, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88
|
16: QBrush(QColor(85, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89
|
17: QBrush(QColor(255, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91
|
"xterm": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92
|
0: QBrush(QColor(0, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93
|
1: QBrush(QColor(205, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94
|
2: QBrush(QColor(0, 205, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95
|
3: QBrush(QColor(205, 205, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96
|
4: QBrush(QColor(0, 0, 238)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97
|
5: QBrush(QColor(205, 0, 205)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98
|
6: QBrush(QColor(0, 205, 205)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99
|
7: QBrush(QColor(229, 229, 229)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100
|
10: QBrush(QColor(127, 127, 127)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101
|
11: QBrush(QColor(255, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102
|
12: QBrush(QColor(0, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103
|
13: QBrush(QColor(255, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104
|
14: QBrush(QColor(0, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105
|
15: QBrush(QColor(255, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106
|
16: QBrush(QColor(0, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107
|
17: QBrush(QColor(255, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109
|
"Ubuntu": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110
|
0: QBrush(QColor(1, 1, 1)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111
|
1: QBrush(QColor(222, 56, 43)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
112
|
2: QBrush(QColor(57, 181, 74)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113
|
3: QBrush(QColor(255, 199, 6)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
114
|
4: QBrush(QColor(0, 11, 184)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
115
|
5: QBrush(QColor(118, 38, 113)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116
|
6: QBrush(QColor(44, 181, 233)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117
|
7: QBrush(QColor(204, 204, 204)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118
|
10: QBrush(QColor(128, 128, 128)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119
|
11: QBrush(QColor(255, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120
|
12: QBrush(QColor(0, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
121
|
13: QBrush(QColor(255, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122
|
14: QBrush(QColor(0, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123
|
15: QBrush(QColor(255, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124
|
16: QBrush(QColor(0, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125
|
17: QBrush(QColor(255, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127
|
"Ubuntu (dark)": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128
|
0: QBrush(QColor(96, 96, 96)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129
|
1: QBrush(QColor(235, 58, 45)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130
|
2: QBrush(QColor(57, 181, 74)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131
|
3: QBrush(QColor(255, 199, 29)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132
|
4: QBrush(QColor(25, 56, 230)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133
|
5: QBrush(QColor(200, 64, 193)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134
|
6: QBrush(QColor(48, 200, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135
|
7: QBrush(QColor(204, 204, 204)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136
|
10: QBrush(QColor(128, 128, 128)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137
|
11: QBrush(QColor(255, 0, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138
|
12: QBrush(QColor(0, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139
|
13: QBrush(QColor(255, 255, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140
|
14: QBrush(QColor(0, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141
|
15: QBrush(QColor(255, 0, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142
|
16: QBrush(QColor(0, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143
|
17: QBrush(QColor(255, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145
|
"Breeze (dark)": { |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146
|
0: QBrush(QColor(35, 38, 39)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147
|
1: QBrush(QColor(237, 21, 21)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148
|
2: QBrush(QColor(17, 209, 22)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149
|
3: QBrush(QColor(246, 116, 0)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150
|
4: QBrush(QColor(29, 153, 243)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151
|
5: QBrush(QColor(155, 89, 182)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152
|
6: QBrush(QColor(26, 188, 156)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153
|
7: QBrush(QColor(252, 252, 252)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154
|
10: QBrush(QColor(127, 140, 141)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155
|
11: QBrush(QColor(192, 57, 43)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156
|
12: QBrush(QColor(28, 220, 154)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157
|
13: QBrush(QColor(253, 188, 75)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158
|
14: QBrush(QColor(61, 174, 233)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159
|
15: QBrush(QColor(142, 68, 173)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160
|
16: QBrush(QColor(22, 160, 133)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161
|
17: QBrush(QColor(255, 255, 255)), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162
|
}, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163
|
} |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166
|
class MicroPythonReplWidget(QWidget): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
168
|
Class implementing the MicroPython REPL widget. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171
|
ZoomMin = -10 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172
|
ZoomMax = 20 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174
|
def __init__(self, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181
|
super().__init__(parent=parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183
|
self.__layout = QVBoxLayout(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184
|
self.__layout.setContentsMargins(0, 0, 0, 0) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186
|
self.__zoomLayout = QHBoxLayout() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187
|
self.__osdLabel = QLabel() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188
|
self.__osdLabel.setSizePolicy( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189
|
QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191
|
self.__zoomLayout.addWidget(self.__osdLabel) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193
|
self.__zoomWidget = EricZoomWidget( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194
|
EricPixmapCache.getPixmap("zoomOut"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195
|
EricPixmapCache.getPixmap("zoomIn"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196
|
EricPixmapCache.getPixmap("zoomReset"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197
|
self, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199
|
self.__zoomWidget.setMinimum(self.ZoomMin) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200
|
self.__zoomWidget.setMaximum(self.ZoomMax) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201
|
self.__zoomLayout.addWidget(self.__zoomWidget) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202
|
self.__layout.addLayout(self.__zoomLayout) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204
|
self.__replEdit = MicroPythonReplEdit(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205
|
self.__layout.addWidget(self.__replEdit) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207
|
self.setLayout(self.__layout) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209
|
self.__zoomWidget.valueChanged.connect(self.__replEdit.doZoom) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210
|
self.__replEdit.osdInfo.connect(self.setOSDInfo) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212
|
@pyqtSlot(str) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213
|
def setOSDInfo(self, infoStr): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215
|
Public slot to set the OSD information. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217
|
@param infoStr string to be shown |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218
|
@type str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220
|
self.__osdLabel.setText(infoStr) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
221
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223
|
def clearOSD(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225
|
Public slot to clear the OSD info. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227
|
self.__osdLabel.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229
|
def replEdit(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231
|
Public method to get a reference to the REPL edit. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233
|
@return reference to the REPL edit |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234
|
@rtype MicroPythonReplEdit |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236
|
return self.__replEdit |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
237
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
238
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239
|
class MicroPythonReplEdit(QTextEdit): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
241
|
Class implementing the REPL edit pane. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
243
|
@signal osdInfo(str) emitted when some OSD data was received from the device |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246
|
osdInfo = pyqtSignal(str) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248
|
def __init__(self, parent=None): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250
|
Constructor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252
|
@param parent reference to the parent widget (defaults to None) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253
|
@type QWidget (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255
|
super().__init__(parent=parent) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257
|
self.setAcceptRichText(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258
|
self.setUndoRedoEnabled(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259
|
self.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260
|
self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262
|
self.__currentZoom = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264
|
self.__replBuffer = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266
|
self.__vt100Re = re.compile( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267
|
r"(?P<count>\d*)(?P<color>(?:;?\d*)*)(?P<action>[ABCDKm])" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270
|
self.customContextMenuRequested.connect(self.__showContextMenu) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272
|
charFormat = self.currentCharFormat() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273
|
self.DefaultForeground = charFormat.foreground() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274
|
self.DefaultBackground = charFormat.background() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
275
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276
|
self.__interface = None |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
277
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278
|
def setInterface(self, deviceInterface): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
279
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280
|
Public method to set the reference to the device interface object. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282
|
@param deviceInterface reference to the device interface object |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283
|
@type MicroPythonDeviceInterface |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
285
|
self.__interface = deviceInterface |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
286
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287
|
@pyqtSlot(int) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288
|
def doZoom(self, value): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290
|
Public slot to zoom in or out. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292
|
@param value zoom value |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293
|
@type int |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295
|
if value < self.__currentZoom: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296
|
self.zoomOut(self.__currentZoom - value) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297
|
elif value > self.__currentZoom: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298
|
self.zoomIn(value - self.__currentZoom) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299
|
self.__currentZoom = value |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301
|
@pyqtSlot(QPoint) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302
|
def __showContextMenu(self, pos): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304
|
Private slot to show the REPL context menu. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306
|
@param pos position to show the menu at |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
307
|
@type QPoint |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
308
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
309
|
connected = bool(self.__interface) and self.__interface.isConnected() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
310
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311
|
if OSUtilities.isMacPlatform(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312
|
copyKeys = QKeySequence("Ctrl+C") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
313
|
pasteKeys = QKeySequence("Ctrl+V") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314
|
selectAllKeys = QKeySequence("Ctrl+A") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316
|
copyKeys = QKeySequence("Ctrl+Shift+C") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317
|
pasteKeys = QKeySequence("Ctrl+Shift+V") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318
|
selectAllKeys = QKeySequence("Ctrl+Shift+A") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320
|
menu = QMenu(self) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321
|
menu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
322
|
EricPixmapCache.getIcon("editDelete"), self.tr("Clear"), self.__clear |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
323
|
).setEnabled(bool(self.toPlainText())) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
324
|
menu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
325
|
menu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326
|
EricPixmapCache.getIcon("editCopy"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327
|
self.tr("Copy"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
328
|
copyKeys, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329
|
self.copy, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330
|
).setEnabled(self.textCursor().hasSelection()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
331
|
menu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
332
|
EricPixmapCache.getIcon("editPaste"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
333
|
self.tr("Paste"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
334
|
pasteKeys, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335
|
self.__paste, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336
|
).setEnabled(self.canPaste() and connected) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
337
|
menu.addSeparator() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338
|
menu.addAction( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339
|
EricPixmapCache.getIcon("editSelectAll"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
340
|
self.tr("Select All"), |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341
|
selectAllKeys, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342
|
self.selectAll, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
343
|
).setEnabled(bool(self.toPlainText())) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
345
|
menu.exec(self.mapToGlobal(pos)) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348
|
def handlePreferencesChanged(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
349
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
350
|
Public slot to handle a change in preferences. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
351
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
352
|
self.__colorScheme = Preferences.getMicroPython("ColorScheme") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354
|
self.__font = Preferences.getEditorOtherFonts("MonospacedFont") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355
|
self.setFontFamily(self.__font.family()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356
|
self.setFontPointSize(self.__font.pointSize()) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358
|
if Preferences.getMicroPython("ReplLineWrap"): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359
|
self.setLineWrapMode(QTextEdit.LineWrapMode.WidgetWidth) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
361
|
self.setLineWrapMode(QTextEdit.LineWrapMode.NoWrap) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
362
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364
|
def __clear(self): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366
|
Private slot to clear the REPL pane. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368
|
self.clear() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369
|
if bool(self.__interface) and self.__interface.isConnected(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370
|
self.__interface.write(b"\r") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372
|
@pyqtSlot() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373
|
def __paste(self, mode=QClipboard.Mode.Clipboard): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375
|
Private slot to perform a paste operation. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377
|
@param mode paste mode (defaults to QClipboard.Mode.Clipboard) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378
|
@type QClipboard.Mode (optional) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380
|
# add support for paste by mouse middle button |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381
|
clipboard = QGuiApplication.clipboard() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
382
|
if clipboard: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
383
|
pasteText = clipboard.text(mode=mode) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
384
|
if pasteText: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
385
|
pasteText = pasteText.replace("\n\r", "\r") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
386
|
pasteText = pasteText.replace("\n", "\r") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387
|
if bool(self.__interface) and self.__interface.isConnected(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388
|
self.__interface.write(b"\x05") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
389
|
self.__interface.write(pasteText.encode("utf-8")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
390
|
self.__interface.write(b"\x04") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
391
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
392
|
def keyPressEvent(self, evt): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394
|
Protected method to handle key press events. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396
|
@param evt reference to the key press event |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397
|
@type QKeyEvent |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399
|
key = evt.key() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400
|
msg = bytes(evt.text(), "utf8") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
401
|
if key == Qt.Key.Key_Backspace: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
402
|
msg = b"\b" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
403
|
elif key == Qt.Key.Key_Delete: |
11124
|
404
|
msg = b"\x1b[\x33\x7e" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405
|
elif key == Qt.Key.Key_Up: |
11124
|
406
|
msg = b"\x1b[A" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
407
|
elif key == Qt.Key.Key_Down: |
11124
|
408
|
msg = b"\x1b[B" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
409
|
elif key == Qt.Key.Key_Right: |
11124
|
410
|
msg = b"\x1b[C" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411
|
elif key == Qt.Key.Key_Left: |
11124
|
412
|
msg = b"\x1b[D" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413
|
elif key == Qt.Key.Key_Home: |
11124
|
414
|
msg = b"\x1b[H" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415
|
elif key == Qt.Key.Key_End: |
11124
|
416
|
msg = b"\x1b[F" |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
417
|
elif ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418
|
OSUtilities.isMacPlatform() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
419
|
and evt.modifiers() == Qt.KeyboardModifier.MetaModifier |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
420
|
) or ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
421
|
not OSUtilities.isMacPlatform() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
422
|
and evt.modifiers() == Qt.KeyboardModifier.ControlModifier |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
423
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
424
|
if Qt.Key.Key_A <= key <= Qt.Key.Key_Z: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
425
|
# devices treat an input of \x01 as Ctrl+A, etc. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
426
|
msg = bytes([1 + key - Qt.Key.Key_A]) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
427
|
elif evt.modifiers() == ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
428
|
Qt.KeyboardModifier.ControlModifier | Qt.KeyboardModifier.ShiftModifier |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
429
|
) or ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
430
|
OSUtilities.isMacPlatform() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
431
|
and evt.modifiers() == Qt.KeyboardModifier.ControlModifier |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
432
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
433
|
if key == Qt.Key.Key_C: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
434
|
self.copy() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
435
|
msg = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
436
|
elif key == Qt.Key.Key_V: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
437
|
self.__paste() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
438
|
msg = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
439
|
elif key == Qt.Key.Key_A: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
440
|
self.selectAll() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
441
|
msg = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
442
|
elif key in (Qt.Key.Key_Return, Qt.Key.Key_Enter): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
443
|
tc = self.textCursor() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
444
|
tc.movePosition(QTextCursor.MoveOperation.EndOfLine) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
445
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
446
|
if bool(self.__interface) and self.__interface.isConnected(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
447
|
self.__interface.write(msg) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
448
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
449
|
evt.accept() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
450
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
451
|
def mouseReleaseEvent(self, evt): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
452
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
453
|
Protected method to handle mouse release events. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
454
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
455
|
@param evt reference to the event object |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
456
|
@type QMouseEvent |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
457
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
458
|
if evt.button() == Qt.MouseButton.MiddleButton: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
459
|
self.__paste(mode=QClipboard.Mode.Selection) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
460
|
msg = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
461
|
if bool(self.__interface) and self.__interface.isConnected(): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
462
|
self.__interface.write(msg) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
463
|
evt.accept() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
464
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
465
|
super().mouseReleaseEvent(evt) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
466
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
467
|
@pyqtSlot(bytes) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
468
|
def processData(self, data): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
469
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
470
|
Public slot to process the data received from the device. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
471
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
472
|
@param data data received from the device |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
473
|
@type bytes |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
474
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
475
|
tc = self.textCursor() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
476
|
# the text cursor must be on the last line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
477
|
while tc.movePosition(QTextCursor.MoveOperation.Down): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
478
|
pass |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
479
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
480
|
# reset the font |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
481
|
self.__setCharFormat(None, tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
482
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
483
|
# add received data to the buffered one |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
484
|
data = self.__replBuffer + data |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486
|
index = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487
|
while index < len(data): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488
|
if data[index] == 8: # \b |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489
|
tc.movePosition(QTextCursor.MoveOperation.Left) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491
|
elif data[index] in (4, 13): # EOT, \r |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492
|
pass |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493
|
elif len(data) > index + 1 and data[index] == 27 and data[index + 1] == 91: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494
|
# VT100 cursor command detected: <Esc>[ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495
|
index += 2 # move index to after the [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
496
|
match = self.__vt100Re.search( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
497
|
data[index:].decode("utf-8", errors="replace") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
498
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
499
|
if match: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500
|
# move to last position in control sequence |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
501
|
# ++ will be done at end of loop |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
502
|
index += match.end() - 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
503
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
504
|
action = match.group("action") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
505
|
if action in "ABCD": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
506
|
if match.group("count") == "": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
507
|
count = 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
508
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
509
|
count = int(match.group("count")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
510
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
511
|
if action == "A": # up |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
512
|
tc.movePosition(QTextCursor.MoveOperation.Up, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
513
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514
|
elif action == "B": # down |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
515
|
tc.movePosition(QTextCursor.MoveOperation.Down, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
516
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
517
|
elif action == "C": # right |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
518
|
tc.movePosition(QTextCursor.MoveOperation.Right, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
519
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
520
|
elif action == "D": # left |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521
|
tc.movePosition(QTextCursor.MoveOperation.Left, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
522
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523
|
elif action == "K": # delete things |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524
|
if match.group("count") in ("", "0"): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
525
|
# delete to end of line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526
|
tc.movePosition( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
527
|
QTextCursor.MoveOperation.EndOfLine, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528
|
mode=QTextCursor.MoveMode.KeepAnchor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
530
|
tc.removeSelectedText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
532
|
elif match.group("count") == "1": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
533
|
# delete to beginning of line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
534
|
tc.movePosition( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
535
|
QTextCursor.MoveOperation.StartOfLine, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
536
|
mode=QTextCursor.MoveMode.KeepAnchor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
537
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
538
|
tc.removeSelectedText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
539
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540
|
elif match.group("count") == "2": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
541
|
# delete whole line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
542
|
tc.movePosition(QTextCursor.MoveOperation.EndOfLine) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
543
|
tc.movePosition( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
544
|
QTextCursor.MoveOperation.StartOfLine, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
545
|
mode=QTextCursor.MoveMode.KeepAnchor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
546
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547
|
tc.removeSelectedText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
548
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
549
|
elif action == "m": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
550
|
self.__setCharFormat(match.group(0)[:-1].split(";"), tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551
|
elif ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552
|
len(data) > index + 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
553
|
and data[index] == 27 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554
|
and data[index + 1 : index + 4] == b"]0;" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556
|
if b"\x1b\\" in data[index + 4 :]: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
557
|
# 'set window title' command detected: <Esc>]0;...<Esc>\ |
11148
|
558
|
# __IGNORE_WARNING_M-891__ |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
559
|
titleData = data[index + 4 :].split(b"\x1b\\")[0] |
10012
|
560
|
title = titleData.decode("utf-8") |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
561
|
index += len(titleData) + 5 # one more is done at the end |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
562
|
self.osdInfo.emit(title) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
563
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
564
|
# data is incomplete; buffer and stop processing |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
565
|
self.__replBuffer = data[index:] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
566
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
567
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
568
|
tc.deleteChar() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
569
|
self.setTextCursor(tc) |
10234
|
570
|
# unicode handling |
|
571
|
if data[index] & 0b11110000 == 0b11110000: |
|
572
|
length = 4 |
|
573
|
elif data[index] & 0b11100000 == 0b11100000: |
|
574
|
length = 3 |
|
575
|
elif data[index] & 0b11000000 == 0b11000000: |
|
576
|
length = 2 |
|
577
|
else: |
|
578
|
length = 1 |
11055
e68bcb2b5ec1
Improved the CircuitPython device class and fixed som issues in the MPy REPL and main widget.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
579
|
try: |
e68bcb2b5ec1
Improved the CircuitPython device class and fixed som issues in the MPy REPL and main widget.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
580
|
txt = data[index : index + length].decode("utf8") |
e68bcb2b5ec1
Improved the CircuitPython device class and fixed som issues in the MPy REPL and main widget.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
581
|
except UnicodeDecodeError: |
e68bcb2b5ec1
Improved the CircuitPython device class and fixed som issues in the MPy REPL and main widget.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
582
|
txt = data[index : index + length].decode("iso8859-1") |
10234
|
583
|
index += length - 1 # one more is done at the end |
|
584
|
self.insertPlainText(txt) |
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586
|
index += 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
588
|
self.ensureCursorVisible() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
589
|
self.__replBuffer = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
590
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591
|
def __setCharFormat(self, formatCodes, textCursor): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
592
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593
|
Private method setting the current text format of the REPL pane based |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
594
|
on the passed ANSI codes. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596
|
Following codes are used: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597
|
<ul> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
598
|
<li>0: Reset</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
599
|
<li>1: Bold font (weight 75)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
600
|
<li>2: Light font (weight 25)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
601
|
<li>3: Italic font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
602
|
<li>4: Underlined font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
603
|
<li>9: Strikeout font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
604
|
<li>21: Bold off (weight 50)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
605
|
<li>22: Light off (weight 50)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
606
|
<li>23: Italic off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
607
|
<li>24: Underline off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
608
|
<li>29: Strikeout off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
609
|
<li>30: foreground Black</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610
|
<li>31: foreground Dark Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
611
|
<li>32: foreground Dark Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
612
|
<li>33: foreground Dark Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
613
|
<li>34: foreground Dark Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
614
|
<li>35: foreground Dark Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
615
|
<li>36: foreground Dark Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
616
|
<li>37: foreground Light Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
617
|
<li>39: reset foreground to default</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
618
|
<li>40: background Black</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
619
|
<li>41: background Dark Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
620
|
<li>42: background Dark Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
621
|
<li>43: background Dark Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
622
|
<li>44: background Dark Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
623
|
<li>45: background Dark Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
624
|
<li>46: background Dark Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
625
|
<li>47: background Light Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
626
|
<li>49: reset background to default</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
627
|
<li>53: Overlined font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
628
|
<li>55: Overline off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
629
|
<li>90: bright foreground Dark Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
630
|
<li>91: bright foreground Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
631
|
<li>92: bright foreground Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
632
|
<li>93: bright foreground Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
633
|
<li>94: bright foreground Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
634
|
<li>95: bright foreground Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
635
|
<li>96: bright foreground Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636
|
<li>97: bright foreground White</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637
|
<li>100: bright background Dark Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638
|
<li>101: bright background Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
639
|
<li>102: bright background Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
640
|
<li>103: bright background Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
641
|
<li>104: bright background Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642
|
<li>105: bright background Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643
|
<li>106: bright background Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644
|
<li>107: bright background White</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645
|
</ul> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647
|
@param formatCodes list of format codes |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
649
|
@param textCursor reference to the text cursor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650
|
@type QTextCursor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
652
|
if not formatCodes: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
653
|
# empty format codes list is treated as a reset |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654
|
formatCodes = ["0"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
655
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656
|
charFormat = textCursor.charFormat() |
10030
512d8ecbfdab
Fixed an issue in the MicroPythonReplEdit widget causing a wrong font being used.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
657
|
charFormat.setFontFamilies([self.__font.family()]) |
512d8ecbfdab
Fixed an issue in the MicroPythonReplEdit widget causing a wrong font being used.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
658
|
charFormat.setFontPointSize(self.__font.pointSize()) |
512d8ecbfdab
Fixed an issue in the MicroPythonReplEdit widget causing a wrong font being used.
Detlev Offenbach <detlev@die-offenbachs.de>
diff
changeset
|
659
|
|
10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660
|
for formatCode in formatCodes: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661
|
try: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
662
|
formatCode = int(formatCode) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663
|
except ValueError: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664
|
# ignore non digit values |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665
|
continue |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667
|
if formatCode == 0: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668
|
charFormat.setFontWeight(50) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669
|
charFormat.setFontItalic(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670
|
charFormat.setFontUnderline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671
|
charFormat.setFontStrikeOut(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672
|
charFormat.setFontOverline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
673
|
charFormat.setForeground(self.DefaultForeground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
674
|
charFormat.setBackground(self.DefaultBackground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
675
|
elif formatCode == 1: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
676
|
charFormat.setFontWeight(75) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
677
|
elif formatCode == 2: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
678
|
charFormat.setFontWeight(25) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
679
|
elif formatCode == 3: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
680
|
charFormat.setFontItalic(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
681
|
elif formatCode == 4: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
682
|
charFormat.setFontUnderline(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
683
|
elif formatCode == 9: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
684
|
charFormat.setFontStrikeOut(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
685
|
elif formatCode in (21, 22): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
686
|
charFormat.setFontWeight(50) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
687
|
elif formatCode == 23: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
688
|
charFormat.setFontItalic(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
689
|
elif formatCode == 24: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
690
|
charFormat.setFontUnderline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
691
|
elif formatCode == 29: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692
|
charFormat.setFontStrikeOut(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
693
|
elif formatCode == 53: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694
|
charFormat.setFontOverline(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
695
|
elif formatCode == 55: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
696
|
charFormat.setFontOverline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
697
|
elif formatCode in (30, 31, 32, 33, 34, 35, 36, 37): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
698
|
charFormat.setForeground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699
|
AnsiColorSchemes[self.__colorScheme][formatCode - 30] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
701
|
elif formatCode in (40, 41, 42, 43, 44, 45, 46, 47): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
702
|
charFormat.setBackground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
703
|
AnsiColorSchemes[self.__colorScheme][formatCode - 40] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
704
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
705
|
elif formatCode in (90, 91, 92, 93, 94, 95, 96, 97): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
706
|
charFormat.setForeground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
707
|
AnsiColorSchemes[self.__colorScheme][formatCode - 80] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
708
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
709
|
elif formatCode in (100, 101, 102, 103, 104, 105, 106, 107): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
710
|
charFormat.setBackground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
711
|
AnsiColorSchemes[self.__colorScheme][formatCode - 90] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
712
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
713
|
elif formatCode == 39: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
714
|
charFormat.setForeground(self.DefaultForeground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
715
|
elif formatCode == 49: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
716
|
charFormat.setBackground(self.DefaultBackground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
717
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
718
|
textCursor.setCharFormat(charFormat) |