-rw-r--r-- | core/apps/embeddedkonsole/TEWidget.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp index cacc3c4..4c6ea2a 100644 --- a/core/apps/embeddedkonsole/TEWidget.cpp +++ b/core/apps/embeddedkonsole/TEWidget.cpp | |||
@@ -1,250 +1,250 @@ | |||
1 | /* ------------------------------------------------------------------------ */ | 1 | /* ------------------------------------------------------------------------ */ |
2 | /* */ | 2 | /* */ |
3 | /* [TEWidget.C] Terminal Emulation Widget */ | 3 | /* [TEWidget.C] Terminal Emulation Widget */ |
4 | /* */ | 4 | /* */ |
5 | /* ------------------------------------------------------------------------ */ | 5 | /* ------------------------------------------------------------------------ */ |
6 | /* */ | 6 | /* */ |
7 | /* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ | 7 | /* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ |
8 | /* */ | 8 | /* */ |
9 | /* This file is part of Konsole - an X terminal for KDE */ | 9 | /* This file is part of Konsole - an X terminal for KDE */ |
10 | /* */ | 10 | /* */ |
11 | /* ------------------------------------------------------------------------ */ | 11 | /* ------------------------------------------------------------------------ */ |
12 | /* */ | 12 | /* */ |
13 | /* Ported Konsole to Qt/Embedded */ | 13 | /* Ported Konsole to Qt/Embedded */ |
14 | /* */ | 14 | /* */ |
15 | /* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ | 15 | /* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ |
16 | /* */ | 16 | /* */ |
17 | /* -------------------------------------------------------------------------- */ | 17 | /* -------------------------------------------------------------------------- */ |
18 | /*! \class TEWidget | 18 | /*! \class TEWidget |
19 | 19 | ||
20 | \brief Visible screen contents | 20 | \brief Visible screen contents |
21 | 21 | ||
22 | This class is responsible to map the `image' of a terminal emulation to the | 22 | This class is responsible to map the `image' of a terminal emulation to the |
23 | display. All the dependency of the emulation to a specific GUI or toolkit is | 23 | display. All the dependency of the emulation to a specific GUI or toolkit is |
24 | localized here. Further, this widget has no knowledge about being part of an | 24 | localized here. Further, this widget has no knowledge about being part of an |
25 | emulation, it simply work within the terminal emulation framework by exposing | 25 | emulation, it simply work within the terminal emulation framework by exposing |
26 | size and key events and by being ordered to show a new image. | 26 | size and key events and by being ordered to show a new image. |
27 | 27 | ||
28 | <ul> | 28 | <ul> |
29 | <li> The internal image has the size of the widget (evtl. rounded up) | 29 | <li> The internal image has the size of the widget (evtl. rounded up) |
30 | <li> The external image used in setImage can have any size. | 30 | <li> The external image used in setImage can have any size. |
31 | <li> (internally) the external image is simply copied to the internal | 31 | <li> (internally) the external image is simply copied to the internal |
32 | when a setImage happens. During a resizeEvent no painting is done | 32 | when a setImage happens. During a resizeEvent no painting is done |
33 | a paintEvent is expected to follow anyway. | 33 | a paintEvent is expected to follow anyway. |
34 | </ul> | 34 | </ul> |
35 | 35 | ||
36 | \sa TEScreen \sa Emulation | 36 | \sa TEScreen \sa Emulation |
37 | */ | 37 | */ |
38 | 38 | ||
39 | /* FIXME: | 39 | /* FIXME: |
40 | - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent | 40 | - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent |
41 | - 'font_a' not used in mouse events | 41 | - 'font_a' not used in mouse events |
42 | - add destructor | 42 | - add destructor |
43 | */ | 43 | */ |
44 | 44 | ||
45 | /* TODO | 45 | /* TODO |
46 | - evtl. be sensitive to `paletteChange' while using default colors. | 46 | - evtl. be sensitive to `paletteChange' while using default colors. |
47 | - set different 'rounding' styles? I.e. have a mode to show clipped chars? | 47 | - set different 'rounding' styles? I.e. have a mode to show clipped chars? |
48 | */ | 48 | */ |
49 | 49 | ||
50 | // #include "config.h" | 50 | // #include "config.h" |
51 | #include "TEWidget.h" | 51 | #include "TEWidget.h" |
52 | #include "session.h" | 52 | #include "session.h" |
53 | #include <qpe/config.h> | 53 | #include <qpe/config.h> |
54 | 54 | ||
55 | #include <qpe/resource.h> | 55 | #include <qpe/resource.h> |
56 | #include <qpe/sound.h> | 56 | #include <qpe/sound.h> |
57 | 57 | ||
58 | #ifdef QWS | 58 | #if !(QT_NO_COP) |
59 | #include <qpe/qcopenvelope_qws.h> | 59 | #include <qpe/qcopenvelope_qws.h> |
60 | #endif | 60 | #endif |
61 | 61 | ||
62 | #include <qcursor.h> | 62 | #include <qcursor.h> |
63 | #include <qregexp.h> | 63 | #include <qregexp.h> |
64 | #include <qpainter.h> | 64 | #include <qpainter.h> |
65 | #include <qclipboard.h> | 65 | #include <qclipboard.h> |
66 | #include <qstyle.h> | 66 | #include <qstyle.h> |
67 | #include <qfile.h> | 67 | #include <qfile.h> |
68 | #include <qdragobject.h> | 68 | #include <qdragobject.h> |
69 | 69 | ||
70 | #include <stdio.h> | 70 | #include <stdio.h> |
71 | #include <stdlib.h> | 71 | #include <stdlib.h> |
72 | #include <unistd.h> | 72 | #include <unistd.h> |
73 | #include <ctype.h> | 73 | #include <ctype.h> |
74 | #include <sys/stat.h> | 74 | #include <sys/stat.h> |
75 | #include <sys/types.h> | 75 | #include <sys/types.h> |
76 | #include <signal.h> | 76 | #include <signal.h> |
77 | 77 | ||
78 | #include <assert.h> | 78 | #include <assert.h> |
79 | 79 | ||
80 | // #include "TEWidget.moc" | 80 | // #include "TEWidget.moc" |
81 | //#include <kapp.h> | 81 | //#include <kapp.h> |
82 | //#include <kcursor.h> | 82 | //#include <kcursor.h> |
83 | //#include <kurl.h> | 83 | //#include <kurl.h> |
84 | //#include <kdebug.h> | 84 | //#include <kdebug.h> |
85 | //#include <klocale.h> | 85 | //#include <klocale.h> |
86 | 86 | ||
87 | #define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) | 87 | #define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) |
88 | #define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } | 88 | #define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } |
89 | 89 | ||
90 | #define loc(X,Y) ((Y)*columns+(X)) | 90 | #define loc(X,Y) ((Y)*columns+(X)) |
91 | 91 | ||
92 | //FIXME: the rim should normally be 1, 0 only when running in full screen mode. | 92 | //FIXME: the rim should normally be 1, 0 only when running in full screen mode. |
93 | #define rimX 0 // left/right rim width | 93 | #define rimX 0 // left/right rim width |
94 | #define rimY 0 // top/bottom rim high | 94 | #define rimY 0 // top/bottom rim high |
95 | 95 | ||
96 | #define SCRWIDTH 16 // width of the scrollbar | 96 | #define SCRWIDTH 16 // width of the scrollbar |
97 | 97 | ||
98 | #define yMouseScroll 1 | 98 | #define yMouseScroll 1 |
99 | // scroll increment used when dragging selection at top/bottom of window. | 99 | // scroll increment used when dragging selection at top/bottom of window. |
100 | 100 | ||
101 | /* ------------------------------------------------------------------------- */ | 101 | /* ------------------------------------------------------------------------- */ |
102 | /* */ | 102 | /* */ |
103 | /* Colors */ | 103 | /* Colors */ |
104 | /* */ | 104 | /* */ |
105 | /* ------------------------------------------------------------------------- */ | 105 | /* ------------------------------------------------------------------------- */ |
106 | 106 | ||
107 | //FIXME: the default color table is in session.C now. | 107 | //FIXME: the default color table is in session.C now. |
108 | // We need a way to get rid of this one, here. | 108 | // We need a way to get rid of this one, here. |
109 | static const ColorEntry base_color_table[TABLE_COLORS] = | 109 | static const ColorEntry base_color_table[TABLE_COLORS] = |
110 | // The following are almost IBM standard color codes, with some slight | 110 | // The following are almost IBM standard color codes, with some slight |
111 | // gamma correction for the dim colors to compensate for bright X screens. | 111 | // gamma correction for the dim colors to compensate for bright X screens. |
112 | // It contains the 8 ansiterm/xterm colors in 2 intensities. | 112 | // It contains the 8 ansiterm/xterm colors in 2 intensities. |
113 | { | 113 | { |
114 | // Fixme: could add faint colors here, also. | 114 | // Fixme: could add faint colors here, also. |
115 | // normal | 115 | // normal |
116 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback | 116 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback |
117 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red | 117 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red |
118 | ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow | 118 | ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow |
119 | ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta | 119 | ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta |
120 | ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White | 120 | ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White |
121 | // intensiv | 121 | // intensiv |
122 | ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), | 122 | ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), |
123 | ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), | 123 | ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), |
124 | ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), | 124 | ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), |
125 | ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), | 125 | ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), |
126 | ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) | 126 | ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) |
127 | }; | 127 | }; |
128 | 128 | ||
129 | /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) | 129 | /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) |
130 | 130 | ||
131 | Code 0 1 2 3 4 5 6 7 | 131 | Code 0 1 2 3 4 5 6 7 |
132 | ----------- ------- ------- ------- ------- ------- ------- ------- ------- | 132 | ----------- ------- ------- ------- ------- ------- ------- ------- ------- |
133 | ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White | 133 | ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White |
134 | IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White | 134 | IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White |
135 | */ | 135 | */ |
136 | 136 | ||
137 | QColor TEWidget::getDefaultBackColor() | 137 | QColor TEWidget::getDefaultBackColor() |
138 | { | 138 | { |
139 | return color_table[DEFAULT_BACK_COLOR].color; | 139 | return color_table[DEFAULT_BACK_COLOR].color; |
140 | } | 140 | } |
141 | 141 | ||
142 | const ColorEntry* TEWidget::getColorTable() const | 142 | const ColorEntry* TEWidget::getColorTable() const |
143 | { | 143 | { |
144 | return color_table; | 144 | return color_table; |
145 | } | 145 | } |
146 | 146 | ||
147 | const ColorEntry* TEWidget::getdefaultColorTable() const | 147 | const ColorEntry* TEWidget::getdefaultColorTable() const |
148 | { | 148 | { |
149 | return base_color_table; | 149 | return base_color_table; |
150 | } | 150 | } |
151 | 151 | ||
152 | 152 | ||
153 | const QPixmap *TEWidget::backgroundPixmap() | 153 | const QPixmap *TEWidget::backgroundPixmap() |
154 | { | 154 | { |
155 | static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); | 155 | static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); |
156 | const QPixmap *pm = bg; | 156 | const QPixmap *pm = bg; |
157 | return pm; | 157 | return pm; |
158 | } | 158 | } |
159 | 159 | ||
160 | void TEWidget::setColorTable(const ColorEntry table[]) | 160 | void TEWidget::setColorTable(const ColorEntry table[]) |
161 | { | 161 | { |
162 | for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; | 162 | for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; |
163 | 163 | ||
164 | const QPixmap* pm = backgroundPixmap(); | 164 | const QPixmap* pm = backgroundPixmap(); |
165 | if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); | 165 | if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); |
166 | update(); | 166 | update(); |
167 | } | 167 | } |
168 | 168 | ||
169 | //FIXME: add backgroundPixmapChanged. | 169 | //FIXME: add backgroundPixmapChanged. |
170 | 170 | ||
171 | /* ------------------------------------------------------------------------- */ | 171 | /* ------------------------------------------------------------------------- */ |
172 | /* */ | 172 | /* */ |
173 | /* Font */ | 173 | /* Font */ |
174 | /* */ | 174 | /* */ |
175 | /* ------------------------------------------------------------------------- */ | 175 | /* ------------------------------------------------------------------------- */ |
176 | 176 | ||
177 | /* | 177 | /* |
178 | The VT100 has 32 special graphical characters. The usual vt100 extended | 178 | The VT100 has 32 special graphical characters. The usual vt100 extended |
179 | xterm fonts have these at 0x00..0x1f. | 179 | xterm fonts have these at 0x00..0x1f. |
180 | 180 | ||
181 | QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals | 181 | QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals |
182 | come in here as proper unicode characters. | 182 | come in here as proper unicode characters. |
183 | 183 | ||
184 | We treat non-iso10646 fonts as VT100 extended and do the requiered mapping | 184 | We treat non-iso10646 fonts as VT100 extended and do the requiered mapping |
185 | from unicode to 0x00..0x1f. The remaining translation is then left to the | 185 | from unicode to 0x00..0x1f. The remaining translation is then left to the |
186 | QCodec. | 186 | QCodec. |
187 | */ | 187 | */ |
188 | 188 | ||
189 | // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. | 189 | // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. |
190 | 190 | ||
191 | unsigned short vt100_graphics[32] = | 191 | unsigned short vt100_graphics[32] = |
192 | { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 | 192 | { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 |
193 | 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, | 193 | 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, |
194 | 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, | 194 | 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, |
195 | 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, | 195 | 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, |
196 | 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 | 196 | 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 |
197 | }; | 197 | }; |
198 | 198 | ||
199 | static QChar vt100extended(QChar c) | 199 | static QChar vt100extended(QChar c) |
200 | { | 200 | { |
201 | switch (c.unicode()) | 201 | switch (c.unicode()) |
202 | { | 202 | { |
203 | case 0x25c6 : return 1; | 203 | case 0x25c6 : return 1; |
204 | case 0x2592 : return 2; | 204 | case 0x2592 : return 2; |
205 | case 0x2409 : return 3; | 205 | case 0x2409 : return 3; |
206 | case 0x240c : return 4; | 206 | case 0x240c : return 4; |
207 | case 0x240d : return 5; | 207 | case 0x240d : return 5; |
208 | case 0x240a : return 6; | 208 | case 0x240a : return 6; |
209 | case 0x00b0 : return 7; | 209 | case 0x00b0 : return 7; |
210 | case 0x00b1 : return 8; | 210 | case 0x00b1 : return 8; |
211 | case 0x2424 : return 9; | 211 | case 0x2424 : return 9; |
212 | case 0x240b : return 10; | 212 | case 0x240b : return 10; |
213 | case 0x2518 : return 11; | 213 | case 0x2518 : return 11; |
214 | case 0x2510 : return 12; | 214 | case 0x2510 : return 12; |
215 | case 0x250c : return 13; | 215 | case 0x250c : return 13; |
216 | case 0x2514 : return 14; | 216 | case 0x2514 : return 14; |
217 | case 0x253c : return 15; | 217 | case 0x253c : return 15; |
218 | case 0xf800 : return 16; | 218 | case 0xf800 : return 16; |
219 | case 0xf801 : return 17; | 219 | case 0xf801 : return 17; |
220 | case 0x2500 : return 18; | 220 | case 0x2500 : return 18; |
221 | case 0xf803 : return 19; | 221 | case 0xf803 : return 19; |
222 | case 0xf804 : return 20; | 222 | case 0xf804 : return 20; |
223 | case 0x251c : return 21; | 223 | case 0x251c : return 21; |
224 | case 0x2524 : return 22; | 224 | case 0x2524 : return 22; |
225 | case 0x2534 : return 23; | 225 | case 0x2534 : return 23; |
226 | case 0x252c : return 24; | 226 | case 0x252c : return 24; |
227 | case 0x2502 : return 25; | 227 | case 0x2502 : return 25; |
228 | case 0x2264 : return 26; | 228 | case 0x2264 : return 26; |
229 | case 0x2265 : return 27; | 229 | case 0x2265 : return 27; |
230 | case 0x03c0 : return 28; | 230 | case 0x03c0 : return 28; |
231 | case 0x2260 : return 29; | 231 | case 0x2260 : return 29; |
232 | case 0x00a3 : return 30; | 232 | case 0x00a3 : return 30; |
233 | case 0x00b7 : return 31; | 233 | case 0x00b7 : return 31; |
234 | } | 234 | } |
235 | return c; | 235 | return c; |
236 | } | 236 | } |
237 | 237 | ||
238 | static QChar identicalMap(QChar c) | 238 | static QChar identicalMap(QChar c) |
239 | { | 239 | { |
240 | return c; | 240 | return c; |
241 | } | 241 | } |
242 | 242 | ||
243 | void TEWidget::fontChange(const QFont &) | 243 | void TEWidget::fontChange(const QFont &) |
244 | { | 244 | { |
245 | QFontMetrics fm(font()); | 245 | QFontMetrics fm(font()); |
246 | font_h = fm.height(); | 246 | font_h = fm.height(); |
247 | font_w = fm.maxWidth(); | 247 | font_w = fm.maxWidth(); |
248 | font_a = fm.ascent(); | 248 | font_a = fm.ascent(); |
249 | //printf("font_h: %d\n",font_h); | 249 | //printf("font_h: %d\n",font_h); |
250 | //printf("font_w: %d\n",font_w); | 250 | //printf("font_w: %d\n",font_w); |