10011
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1
|
# -*- coding: utf-8 -*- |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3
|
# Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de> |
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: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
404
|
msg = b"\x1B[\x33\x7E" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405
|
elif key == Qt.Key.Key_Up: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
406
|
msg = b"\x1B[A" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
407
|
elif key == Qt.Key.Key_Down: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
408
|
msg = b"\x1B[B" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
409
|
elif key == Qt.Key.Key_Right: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
410
|
msg = b"\x1B[C" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411
|
elif key == Qt.Key.Key_Left: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
412
|
msg = b"\x1B[D" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413
|
elif key == Qt.Key.Key_Home: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
414
|
msg = b"\x1B[H" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415
|
elif key == Qt.Key.Key_End: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
416
|
msg = b"\x1B[F" |
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
|
charFormat = tc.charFormat() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
482
|
self.__setCharFormat(None, tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
483
|
tc.setCharFormat(charFormat) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
484
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485
|
# add received data to the buffered one |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486
|
data = self.__replBuffer + data |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488
|
index = 0 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489
|
while index < len(data): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490
|
if data[index] == 8: # \b |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491
|
tc.movePosition(QTextCursor.MoveOperation.Left) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493
|
elif data[index] in (4, 13): # EOT, \r |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494
|
pass |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495
|
elif len(data) > index + 1 and data[index] == 27 and data[index + 1] == 91: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
496
|
# VT100 cursor command detected: <Esc>[ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
497
|
index += 2 # move index to after the [ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
498
|
match = self.__vt100Re.search( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
499
|
data[index:].decode("utf-8", errors="replace") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
501
|
if match: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
502
|
# move to last position in control sequence |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
503
|
# ++ will be done at end of loop |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
504
|
index += match.end() - 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
505
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
506
|
action = match.group("action") |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
507
|
if action in "ABCD": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
508
|
if match.group("count") == "": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
509
|
count = 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
510
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
511
|
count = int(match.group("count")) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
512
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
513
|
if action == "A": # up |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514
|
tc.movePosition(QTextCursor.MoveOperation.Up, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
515
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
516
|
elif action == "B": # down |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
517
|
tc.movePosition(QTextCursor.MoveOperation.Down, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
518
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
519
|
elif action == "C": # right |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
520
|
tc.movePosition(QTextCursor.MoveOperation.Right, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
522
|
elif action == "D": # left |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523
|
tc.movePosition(QTextCursor.MoveOperation.Left, n=count) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
525
|
elif action == "K": # delete things |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526
|
if match.group("count") in ("", "0"): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
527
|
# delete to end of line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528
|
tc.movePosition( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529
|
QTextCursor.MoveOperation.EndOfLine, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
530
|
mode=QTextCursor.MoveMode.KeepAnchor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
532
|
tc.removeSelectedText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
533
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
534
|
elif match.group("count") == "1": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
535
|
# delete to beginning of line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
536
|
tc.movePosition( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
537
|
QTextCursor.MoveOperation.StartOfLine, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
538
|
mode=QTextCursor.MoveMode.KeepAnchor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
539
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540
|
tc.removeSelectedText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
541
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
542
|
elif match.group("count") == "2": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
543
|
# delete whole line |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
544
|
tc.movePosition(QTextCursor.MoveOperation.EndOfLine) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
545
|
tc.movePosition( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
546
|
QTextCursor.MoveOperation.StartOfLine, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547
|
mode=QTextCursor.MoveMode.KeepAnchor, |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
548
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
549
|
tc.removeSelectedText() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
550
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551
|
elif action == "m": |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552
|
self.__setCharFormat(match.group(0)[:-1].split(";"), tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
553
|
elif ( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554
|
len(data) > index + 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555
|
and data[index] == 27 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556
|
and data[index + 1 : index + 4] == b"]0;" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
557
|
): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
558
|
if b"\x1b\\" in data[index + 4 :]: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
559
|
# 'set window title' command detected: <Esc>]0;...<Esc>\ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
560
|
# __IGNORE_WARNING_M891__ |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
561
|
titleData = data[index + 4 :].split(b"\x1b\\")[0] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
562
|
title = titleData.decode() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
563
|
index += len(titleData) + 5 # one more is done at the end |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
564
|
self.osdInfo.emit(title) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
565
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
566
|
# data is incomplete; buffer and stop processing |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
567
|
self.__replBuffer = data[index:] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
568
|
return |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
569
|
else: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
570
|
tc.deleteChar() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
571
|
self.setTextCursor(tc) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
572
|
self.insertPlainText(chr(data[index])) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
573
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
574
|
index += 1 |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
575
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
576
|
self.ensureCursorVisible() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
577
|
self.__replBuffer = b"" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
578
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
579
|
def __setCharFormat(self, formatCodes, textCursor): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
580
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
581
|
Private method setting the current text format of the REPL pane based |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
582
|
on the passed ANSI codes. |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
583
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
584
|
Following codes are used: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585
|
<ul> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586
|
<li>0: Reset</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587
|
<li>1: Bold font (weight 75)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
588
|
<li>2: Light font (weight 25)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
589
|
<li>3: Italic font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
590
|
<li>4: Underlined font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591
|
<li>9: Strikeout font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
592
|
<li>21: Bold off (weight 50)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593
|
<li>22: Light off (weight 50)</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
594
|
<li>23: Italic off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595
|
<li>24: Underline off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596
|
<li>29: Strikeout off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597
|
<li>30: foreground Black</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
598
|
<li>31: foreground Dark Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
599
|
<li>32: foreground Dark Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
600
|
<li>33: foreground Dark Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
601
|
<li>34: foreground Dark Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
602
|
<li>35: foreground Dark Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
603
|
<li>36: foreground Dark Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
604
|
<li>37: foreground Light Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
605
|
<li>39: reset foreground to default</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
606
|
<li>40: background Black</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
607
|
<li>41: background Dark Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
608
|
<li>42: background Dark Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
609
|
<li>43: background Dark Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610
|
<li>44: background Dark Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
611
|
<li>45: background Dark Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
612
|
<li>46: background Dark Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
613
|
<li>47: background Light Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
614
|
<li>49: reset background to default</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
615
|
<li>53: Overlined font</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
616
|
<li>55: Overline off</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
617
|
<li>90: bright foreground Dark Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
618
|
<li>91: bright foreground Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
619
|
<li>92: bright foreground Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
620
|
<li>93: bright foreground Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
621
|
<li>94: bright foreground Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
622
|
<li>95: bright foreground Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
623
|
<li>96: bright foreground Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
624
|
<li>97: bright foreground White</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
625
|
<li>100: bright background Dark Gray</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
626
|
<li>101: bright background Red</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
627
|
<li>102: bright background Green</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
628
|
<li>103: bright background Yellow</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
629
|
<li>104: bright background Blue</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
630
|
<li>105: bright background Magenta</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
631
|
<li>106: bright background Cyan</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
632
|
<li>107: bright background White</li> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
633
|
</ul> |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
634
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
635
|
@param formatCodes list of format codes |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636
|
@type list of str |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637
|
@param textCursor reference to the text cursor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638
|
@type QTextCursor |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
639
|
""" |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
640
|
if not formatCodes: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
641
|
# empty format codes list is treated as a reset |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642
|
formatCodes = ["0"] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644
|
charFormat = textCursor.charFormat() |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645
|
for formatCode in formatCodes: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646
|
try: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647
|
formatCode = int(formatCode) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648
|
except ValueError: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
649
|
# ignore non digit values |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650
|
continue |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
652
|
if formatCode == 0: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
653
|
charFormat.setFontWeight(50) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654
|
charFormat.setFontItalic(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
655
|
charFormat.setFontUnderline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656
|
charFormat.setFontStrikeOut(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
657
|
charFormat.setFontOverline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
658
|
charFormat.setForeground(self.DefaultForeground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
659
|
charFormat.setBackground(self.DefaultBackground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660
|
elif formatCode == 1: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661
|
charFormat.setFontWeight(75) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
662
|
elif formatCode == 2: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663
|
charFormat.setFontWeight(25) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664
|
elif formatCode == 3: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665
|
charFormat.setFontItalic(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666
|
elif formatCode == 4: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667
|
charFormat.setFontUnderline(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668
|
elif formatCode == 9: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669
|
charFormat.setFontStrikeOut(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670
|
elif formatCode in (21, 22): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671
|
charFormat.setFontWeight(50) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672
|
elif formatCode == 23: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
673
|
charFormat.setFontItalic(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
674
|
elif formatCode == 24: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
675
|
charFormat.setFontUnderline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
676
|
elif formatCode == 29: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
677
|
charFormat.setFontStrikeOut(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
678
|
elif formatCode == 53: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
679
|
charFormat.setFontOverline(True) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
680
|
elif formatCode == 55: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
681
|
charFormat.setFontOverline(False) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
682
|
elif formatCode in (30, 31, 32, 33, 34, 35, 36, 37): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
683
|
charFormat.setForeground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
684
|
AnsiColorSchemes[self.__colorScheme][formatCode - 30] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
685
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
686
|
elif formatCode in (40, 41, 42, 43, 44, 45, 46, 47): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
687
|
charFormat.setBackground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
688
|
AnsiColorSchemes[self.__colorScheme][formatCode - 40] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
689
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
690
|
elif formatCode in (90, 91, 92, 93, 94, 95, 96, 97): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
691
|
charFormat.setForeground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692
|
AnsiColorSchemes[self.__colorScheme][formatCode - 80] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
693
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694
|
elif formatCode in (100, 101, 102, 103, 104, 105, 106, 107): |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
695
|
charFormat.setBackground( |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
696
|
AnsiColorSchemes[self.__colorScheme][formatCode - 90] |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
697
|
) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
698
|
elif formatCode == 39: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699
|
charFormat.setForeground(self.DefaultForeground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700
|
elif formatCode == 49: |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
701
|
charFormat.setBackground(self.DefaultBackground) |
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
702
|
|
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
703
|
textCursor.setCharFormat(charFormat) |