author | ar <ar> | 2005-01-21 19:56:15 (UTC) |
---|---|---|
committer | ar <ar> | 2005-01-21 19:56:15 (UTC) |
commit | cd51d382be50bc021739395309e23760f1619759 (patch) (unidiff) | |
tree | e76155f772df7faea5fcf38667c6da8c916208db | |
parent | fdc37fbd908472e28735a8f0b01e3e66a43535e0 (diff) | |
download | opie-cd51d382be50bc021739395309e23760f1619759.zip opie-cd51d382be50bc021739395309e23760f1619759.tar.gz opie-cd51d382be50bc021739395309e23760f1619759.tar.bz2 |
- make opie compilable against qte 2.3.10 snapshot
check QT_VERSION against 0x030000 instead of 300
26 files changed, 45 insertions, 45 deletions
diff --git a/core/apps/embeddedkonsole/TEWidget.cpp b/core/apps/embeddedkonsole/TEWidget.cpp index 5171bf1..bee58e7 100644 --- a/core/apps/embeddedkonsole/TEWidget.cpp +++ b/core/apps/embeddedkonsole/TEWidget.cpp | |||
@@ -1,640 +1,640 @@ | |||
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 | 55 | ||
56 | #if !(QT_NO_COP) | 56 | #if !(QT_NO_COP) |
57 | #include <qpe/qcopenvelope_qws.h> | 57 | #include <qpe/qcopenvelope_qws.h> |
58 | #endif | 58 | #endif |
59 | 59 | ||
60 | #include <qclipboard.h> | 60 | #include <qclipboard.h> |
61 | 61 | ||
62 | #ifndef QT_NO_DRAGANDDROP | 62 | #ifndef QT_NO_DRAGANDDROP |
63 | #include <qdragobject.h> | 63 | #include <qdragobject.h> |
64 | #include <qfile.h> | 64 | #include <qfile.h> |
65 | #endif | 65 | #endif |
66 | 66 | ||
67 | #include <stdio.h> | 67 | #include <stdio.h> |
68 | #include <stdlib.h> | 68 | #include <stdlib.h> |
69 | #include <unistd.h> | 69 | #include <unistd.h> |
70 | #include <ctype.h> | 70 | #include <ctype.h> |
71 | #include <sys/stat.h> | 71 | #include <sys/stat.h> |
72 | #include <sys/types.h> | 72 | #include <sys/types.h> |
73 | #include <signal.h> | 73 | #include <signal.h> |
74 | 74 | ||
75 | #include <assert.h> | 75 | #include <assert.h> |
76 | 76 | ||
77 | // #include "TEWidget.moc" | 77 | // #include "TEWidget.moc" |
78 | //#include <kapp.h> | 78 | //#include <kapp.h> |
79 | //#include <kcursor.h> | 79 | //#include <kcursor.h> |
80 | //#include <kurl.h> | 80 | //#include <kurl.h> |
81 | //#include <kdebug.h> | 81 | //#include <kdebug.h> |
82 | //#include <klocale.h> | 82 | //#include <klocale.h> |
83 | 83 | ||
84 | #define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) | 84 | #define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) |
85 | #define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } | 85 | #define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } |
86 | 86 | ||
87 | #define loc(X,Y) ((Y)*columns+(X)) | 87 | #define loc(X,Y) ((Y)*columns+(X)) |
88 | 88 | ||
89 | //FIXME: the rim should normally be 1, 0 only when running in full screen mode. | 89 | //FIXME: the rim should normally be 1, 0 only when running in full screen mode. |
90 | #define rimX 0 // left/right rim width | 90 | #define rimX 0 // left/right rim width |
91 | #define rimY 0 // top/bottom rim high | 91 | #define rimY 0 // top/bottom rim high |
92 | 92 | ||
93 | #define SCRWIDTH 16 // width of the scrollbar | 93 | #define SCRWIDTH 16 // width of the scrollbar |
94 | 94 | ||
95 | #define yMouseScroll 1 | 95 | #define yMouseScroll 1 |
96 | // scroll increment used when dragging selection at top/bottom of window. | 96 | // scroll increment used when dragging selection at top/bottom of window. |
97 | 97 | ||
98 | /* ------------------------------------------------------------------------- */ | 98 | /* ------------------------------------------------------------------------- */ |
99 | /* */ | 99 | /* */ |
100 | /* Colors */ | 100 | /* Colors */ |
101 | /* */ | 101 | /* */ |
102 | /* ------------------------------------------------------------------------- */ | 102 | /* ------------------------------------------------------------------------- */ |
103 | 103 | ||
104 | //FIXME: the default color table is in session.C now. | 104 | //FIXME: the default color table is in session.C now. |
105 | // We need a way to get rid of this one, here. | 105 | // We need a way to get rid of this one, here. |
106 | static const ColorEntry base_color_table[TABLE_COLORS] = | 106 | static const ColorEntry base_color_table[TABLE_COLORS] = |
107 | // The following are almost IBM standard color codes, with some slight | 107 | // The following are almost IBM standard color codes, with some slight |
108 | // gamma correction for the dim colors to compensate for bright X screens. | 108 | // gamma correction for the dim colors to compensate for bright X screens. |
109 | // It contains the 8 ansiterm/xterm colors in 2 intensities. | 109 | // It contains the 8 ansiterm/xterm colors in 2 intensities. |
110 | { | 110 | { |
111 | // Fixme: could add faint colors here, also. | 111 | // Fixme: could add faint colors here, also. |
112 | // normal | 112 | // normal |
113 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback | 113 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback |
114 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red | 114 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red |
115 | ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow | 115 | ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow |
116 | ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta | 116 | ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta |
117 | ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White | 117 | ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White |
118 | // intensiv | 118 | // intensiv |
119 | ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), | 119 | ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), |
120 | ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), | 120 | ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), |
121 | ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), | 121 | ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), |
122 | ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), | 122 | ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), |
123 | ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) | 123 | ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) |
124 | }; | 124 | }; |
125 | 125 | ||
126 | /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) | 126 | /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) |
127 | 127 | ||
128 | Code 0 1 2 3 4 5 6 7 | 128 | Code 0 1 2 3 4 5 6 7 |
129 | ----------- ------- ------- ------- ------- ------- ------- ------- ------- | 129 | ----------- ------- ------- ------- ------- ------- ------- ------- ------- |
130 | ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White | 130 | ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White |
131 | IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White | 131 | IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White |
132 | */ | 132 | */ |
133 | 133 | ||
134 | QColor TEWidget::getDefaultBackColor() | 134 | QColor TEWidget::getDefaultBackColor() |
135 | { | 135 | { |
136 | return color_table[DEFAULT_BACK_COLOR].color; | 136 | return color_table[DEFAULT_BACK_COLOR].color; |
137 | } | 137 | } |
138 | 138 | ||
139 | const ColorEntry* TEWidget::getColorTable() const | 139 | const ColorEntry* TEWidget::getColorTable() const |
140 | { | 140 | { |
141 | return color_table; | 141 | return color_table; |
142 | } | 142 | } |
143 | 143 | ||
144 | const ColorEntry* TEWidget::getdefaultColorTable() const | 144 | const ColorEntry* TEWidget::getdefaultColorTable() const |
145 | { | 145 | { |
146 | return base_color_table; | 146 | return base_color_table; |
147 | } | 147 | } |
148 | 148 | ||
149 | 149 | ||
150 | const QPixmap *TEWidget::backgroundPixmap() | 150 | const QPixmap *TEWidget::backgroundPixmap() |
151 | { | 151 | { |
152 | static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); | 152 | static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); |
153 | const QPixmap *pm = bg; | 153 | const QPixmap *pm = bg; |
154 | return pm; | 154 | return pm; |
155 | } | 155 | } |
156 | 156 | ||
157 | void TEWidget::setColorTable(const ColorEntry table[]) | 157 | void TEWidget::setColorTable(const ColorEntry table[]) |
158 | { | 158 | { |
159 | for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; | 159 | for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; |
160 | 160 | ||
161 | const QPixmap* pm = backgroundPixmap(); | 161 | const QPixmap* pm = backgroundPixmap(); |
162 | if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); | 162 | if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); |
163 | update(); | 163 | update(); |
164 | } | 164 | } |
165 | 165 | ||
166 | //FIXME: add backgroundPixmapChanged. | 166 | //FIXME: add backgroundPixmapChanged. |
167 | 167 | ||
168 | /* ------------------------------------------------------------------------- */ | 168 | /* ------------------------------------------------------------------------- */ |
169 | /* */ | 169 | /* */ |
170 | /* Font */ | 170 | /* Font */ |
171 | /* */ | 171 | /* */ |
172 | /* ------------------------------------------------------------------------- */ | 172 | /* ------------------------------------------------------------------------- */ |
173 | 173 | ||
174 | /* | 174 | /* |
175 | The VT100 has 32 special graphical characters. The usual vt100 extended | 175 | The VT100 has 32 special graphical characters. The usual vt100 extended |
176 | xterm fonts have these at 0x00..0x1f. | 176 | xterm fonts have these at 0x00..0x1f. |
177 | 177 | ||
178 | QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals | 178 | QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals |
179 | come in here as proper unicode characters. | 179 | come in here as proper unicode characters. |
180 | 180 | ||
181 | We treat non-iso10646 fonts as VT100 extended and do the requiered mapping | 181 | We treat non-iso10646 fonts as VT100 extended and do the requiered mapping |
182 | from unicode to 0x00..0x1f. The remaining translation is then left to the | 182 | from unicode to 0x00..0x1f. The remaining translation is then left to the |
183 | QCodec. | 183 | QCodec. |
184 | */ | 184 | */ |
185 | 185 | ||
186 | // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. | 186 | // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. |
187 | 187 | ||
188 | unsigned short vt100_graphics[32] = | 188 | unsigned short vt100_graphics[32] = |
189 | { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 | 189 | { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 |
190 | 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, | 190 | 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, |
191 | 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, | 191 | 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, |
192 | 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, | 192 | 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, |
193 | 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 | 193 | 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 |
194 | }; | 194 | }; |
195 | 195 | ||
196 | static QChar vt100extended(QChar c) | 196 | static QChar vt100extended(QChar c) |
197 | { | 197 | { |
198 | switch (c.unicode()) | 198 | switch (c.unicode()) |
199 | { | 199 | { |
200 | case 0x25c6 : return 1; | 200 | case 0x25c6 : return 1; |
201 | case 0x2592 : return 2; | 201 | case 0x2592 : return 2; |
202 | case 0x2409 : return 3; | 202 | case 0x2409 : return 3; |
203 | case 0x240c : return 4; | 203 | case 0x240c : return 4; |
204 | case 0x240d : return 5; | 204 | case 0x240d : return 5; |
205 | case 0x240a : return 6; | 205 | case 0x240a : return 6; |
206 | case 0x00b0 : return 7; | 206 | case 0x00b0 : return 7; |
207 | case 0x00b1 : return 8; | 207 | case 0x00b1 : return 8; |
208 | case 0x2424 : return 9; | 208 | case 0x2424 : return 9; |
209 | case 0x240b : return 10; | 209 | case 0x240b : return 10; |
210 | case 0x2518 : return 11; | 210 | case 0x2518 : return 11; |
211 | case 0x2510 : return 12; | 211 | case 0x2510 : return 12; |
212 | case 0x250c : return 13; | 212 | case 0x250c : return 13; |
213 | case 0x2514 : return 14; | 213 | case 0x2514 : return 14; |
214 | case 0x253c : return 15; | 214 | case 0x253c : return 15; |
215 | case 0xf800 : return 16; | 215 | case 0xf800 : return 16; |
216 | case 0xf801 : return 17; | 216 | case 0xf801 : return 17; |
217 | case 0x2500 : return 18; | 217 | case 0x2500 : return 18; |
218 | case 0xf803 : return 19; | 218 | case 0xf803 : return 19; |
219 | case 0xf804 : return 20; | 219 | case 0xf804 : return 20; |
220 | case 0x251c : return 21; | 220 | case 0x251c : return 21; |
221 | case 0x2524 : return 22; | 221 | case 0x2524 : return 22; |
222 | case 0x2534 : return 23; | 222 | case 0x2534 : return 23; |
223 | case 0x252c : return 24; | 223 | case 0x252c : return 24; |
224 | case 0x2502 : return 25; | 224 | case 0x2502 : return 25; |
225 | case 0x2264 : return 26; | 225 | case 0x2264 : return 26; |
226 | case 0x2265 : return 27; | 226 | case 0x2265 : return 27; |
227 | case 0x03c0 : return 28; | 227 | case 0x03c0 : return 28; |
228 | case 0x2260 : return 29; | 228 | case 0x2260 : return 29; |
229 | case 0x00a3 : return 30; | 229 | case 0x00a3 : return 30; |
230 | case 0x00b7 : return 31; | 230 | case 0x00b7 : return 31; |
231 | } | 231 | } |
232 | return c; | 232 | return c; |
233 | } | 233 | } |
234 | 234 | ||
235 | static QChar identicalMap(QChar c) | 235 | static QChar identicalMap(QChar c) |
236 | { | 236 | { |
237 | return c; | 237 | return c; |
238 | } | 238 | } |
239 | 239 | ||
240 | void TEWidget::fontChange(const QFont &) | 240 | void TEWidget::fontChange(const QFont &) |
241 | { | 241 | { |
242 | QFontMetrics fm(font()); | 242 | QFontMetrics fm(font()); |
243 | font_h = fm.height(); | 243 | font_h = fm.height(); |
244 | // font_w = fm.maxWidth(); | 244 | // font_w = fm.maxWidth(); |
245 | font_w = fm.width("m"); | 245 | font_w = fm.width("m"); |
246 | font_a = fm.ascent(); | 246 | font_a = fm.ascent(); |
247 | printf("font h=%d max_width=%d width_m=%d assent=%d\n", font_h, | 247 | printf("font h=%d max_width=%d width_m=%d assent=%d\n", font_h, |
248 | fm.maxWidth(), font_w, font_a); | 248 | fm.maxWidth(), font_w, font_a); |
249 | 249 | ||
250 | //printf("font_h: %d\n",font_h); | 250 | //printf("font_h: %d\n",font_h); |
251 | //printf("font_w: %d\n",font_w); | 251 | //printf("font_w: %d\n",font_w); |
252 | //printf("font_a: %d\n",font_a); | 252 | //printf("font_a: %d\n",font_a); |
253 | //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); | 253 | //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); |
254 | //printf("rawname: %s\n",font().rawName().ascii()); | 254 | //printf("rawname: %s\n",font().rawName().ascii()); |
255 | fontMap = | 255 | fontMap = |
256 | #if QT_VERSION < 300 | 256 | #if QT_VERSION < 0x030000 |
257 | strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") | 257 | strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") |
258 | ? vt100extended | 258 | ? vt100extended |
259 | : | 259 | : |
260 | #endif | 260 | #endif |
261 | identicalMap; | 261 | identicalMap; |
262 | propagateSize(); | 262 | propagateSize(); |
263 | update(); | 263 | update(); |
264 | } | 264 | } |
265 | 265 | ||
266 | void TEWidget::setVTFont(const QFont& f) | 266 | void TEWidget::setVTFont(const QFont& f) |
267 | { | 267 | { |
268 | QFrame::setFont(f); | 268 | QFrame::setFont(f); |
269 | } | 269 | } |
270 | 270 | ||
271 | QFont TEWidget::getVTFont() { | 271 | QFont TEWidget::getVTFont() { |
272 | return font(); | 272 | return font(); |
273 | } | 273 | } |
274 | 274 | ||
275 | void TEWidget::setFont(const QFont &) | 275 | void TEWidget::setFont(const QFont &) |
276 | { | 276 | { |
277 | // ignore font change request if not coming from konsole itself | 277 | // ignore font change request if not coming from konsole itself |
278 | } | 278 | } |
279 | 279 | ||
280 | /* ------------------------------------------------------------------------- */ | 280 | /* ------------------------------------------------------------------------- */ |
281 | /* */ | 281 | /* */ |
282 | /* Constructor / Destructor */ | 282 | /* Constructor / Destructor */ |
283 | /* */ | 283 | /* */ |
284 | /* ------------------------------------------------------------------------- */ | 284 | /* ------------------------------------------------------------------------- */ |
285 | 285 | ||
286 | TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name) | 286 | TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name) |
287 | { | 287 | { |
288 | #ifndef QT_NO_CLIPBOARD | 288 | #ifndef QT_NO_CLIPBOARD |
289 | cb = QApplication::clipboard(); | 289 | cb = QApplication::clipboard(); |
290 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), | 290 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), |
291 | this, SLOT(onClearSelection()) ); | 291 | this, SLOT(onClearSelection()) ); |
292 | #endif | 292 | #endif |
293 | 293 | ||
294 | scrollbar = new QScrollBar(this); | 294 | scrollbar = new QScrollBar(this); |
295 | scrollbar->setCursor( arrowCursor ); | 295 | scrollbar->setCursor( arrowCursor ); |
296 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); | 296 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); |
297 | 297 | ||
298 | hScrollbar = new QScrollBar(this); | 298 | hScrollbar = new QScrollBar(this); |
299 | hScrollbar->setCursor( arrowCursor ); | 299 | hScrollbar->setCursor( arrowCursor ); |
300 | hScrollbar->setOrientation(QScrollBar::Horizontal); | 300 | hScrollbar->setOrientation(QScrollBar::Horizontal); |
301 | // hScrollbar->setMaximumHeight(16); | 301 | // hScrollbar->setMaximumHeight(16); |
302 | 302 | ||
303 | connect( hScrollbar, SIGNAL(valueChanged(int)), this, SLOT( hScrollChanged(int))); | 303 | connect( hScrollbar, SIGNAL(valueChanged(int)), this, SLOT( hScrollChanged(int))); |
304 | 304 | ||
305 | Config cfg( "Konsole" ); | 305 | Config cfg( "Konsole" ); |
306 | cfg.setGroup("ScrollBar"); | 306 | cfg.setGroup("ScrollBar"); |
307 | switch( cfg.readNumEntry("Position",2)){ | 307 | switch( cfg.readNumEntry("Position",2)){ |
308 | case 0: | 308 | case 0: |
309 | scrollLoc = SCRNONE; | 309 | scrollLoc = SCRNONE; |
310 | break; | 310 | break; |
311 | case 1: | 311 | case 1: |
312 | scrollLoc = SCRLEFT; | 312 | scrollLoc = SCRLEFT; |
313 | break; | 313 | break; |
314 | case 2: | 314 | case 2: |
315 | scrollLoc = SCRRIGHT; | 315 | scrollLoc = SCRRIGHT; |
316 | break; | 316 | break; |
317 | }; | 317 | }; |
318 | 318 | ||
319 | useHorzScroll=cfg.readBoolEntry("HorzScroll",0); | 319 | useHorzScroll=cfg.readBoolEntry("HorzScroll",0); |
320 | 320 | ||
321 | blinkT = new QTimer(this); | 321 | blinkT = new QTimer(this); |
322 | connect(blinkT, SIGNAL(timeout()), this, SLOT(blinkEvent())); | 322 | connect(blinkT, SIGNAL(timeout()), this, SLOT(blinkEvent())); |
323 | // blinking = FALSE; | 323 | // blinking = FALSE; |
324 | blinking = TRUE; | 324 | blinking = TRUE; |
325 | 325 | ||
326 | resizing = FALSE; | 326 | resizing = FALSE; |
327 | actSel = 0; | 327 | actSel = 0; |
328 | image = 0; | 328 | image = 0; |
329 | lines = 1; | 329 | lines = 1; |
330 | columns = 1; | 330 | columns = 1; |
331 | font_w = 1; | 331 | font_w = 1; |
332 | font_h = 1; | 332 | font_h = 1; |
333 | font_a = 1; | 333 | font_a = 1; |
334 | word_selection_mode = FALSE; | 334 | word_selection_mode = FALSE; |
335 | hposition = 0; | 335 | hposition = 0; |
336 | vcolumns = 0; | 336 | vcolumns = 0; |
337 | useBeep = true; | 337 | useBeep = true; |
338 | 338 | ||
339 | setMouseMarks(TRUE); | 339 | setMouseMarks(TRUE); |
340 | setVTFont( QFont("fixed") ); | 340 | setVTFont( QFont("fixed") ); |
341 | setColorTable(base_color_table); // init color table | 341 | setColorTable(base_color_table); // init color table |
342 | 342 | ||
343 | qApp->installEventFilter( this ); //FIXME: see below | 343 | qApp->installEventFilter( this ); //FIXME: see below |
344 | // KCursor::setAutoHideCursor( this, true ); | 344 | // KCursor::setAutoHideCursor( this, true ); |
345 | 345 | ||
346 | // Init DnD //////////////////////////////////////////////////////////////// | 346 | // Init DnD //////////////////////////////////////////////////////////////// |
347 | currentSession = NULL; | 347 | currentSession = NULL; |
348 | // setAcceptDrops(true); // attempt | 348 | // setAcceptDrops(true); // attempt |
349 | // m_drop = new QPopupMenu(this); | 349 | // m_drop = new QPopupMenu(this); |
350 | // m_drop->insertItem( QString("Paste"), 0); | 350 | // m_drop->insertItem( QString("Paste"), 0); |
351 | // m_drop->insertItem( QString("cd"), 1); | 351 | // m_drop->insertItem( QString("cd"), 1); |
352 | // connect(m_drop, SIGNAL(activated(int)), SLOT(drop_menu_activated(int))); | 352 | // connect(m_drop, SIGNAL(activated(int)), SLOT(drop_menu_activated(int))); |
353 | 353 | ||
354 | // we need focus so that the auto-hide cursor feature works | 354 | // we need focus so that the auto-hide cursor feature works |
355 | setFocus(); | 355 | setFocus(); |
356 | setFocusPolicy( WheelFocus ); | 356 | setFocusPolicy( WheelFocus ); |
357 | } | 357 | } |
358 | 358 | ||
359 | //FIXME: make proper destructor | 359 | //FIXME: make proper destructor |
360 | // Here's a start (David) | 360 | // Here's a start (David) |
361 | TEWidget::~TEWidget() | 361 | TEWidget::~TEWidget() |
362 | { | 362 | { |
363 | qApp->removeEventFilter( this ); | 363 | qApp->removeEventFilter( this ); |
364 | if (image) free(image); | 364 | if (image) free(image); |
365 | } | 365 | } |
366 | 366 | ||
367 | /* ------------------------------------------------------------------------- */ | 367 | /* ------------------------------------------------------------------------- */ |
368 | /* */ | 368 | /* */ |
369 | /* Display Operations */ | 369 | /* Display Operations */ |
370 | /* */ | 370 | /* */ |
371 | /* ------------------------------------------------------------------------- */ | 371 | /* ------------------------------------------------------------------------- */ |
372 | 372 | ||
373 | /*! | 373 | /*! |
374 | attributed string draw primitive | 374 | attributed string draw primitive |
375 | */ | 375 | */ |
376 | 376 | ||
377 | void TEWidget::drawAttrStr(QPainter &paint, QRect rect, | 377 | void TEWidget::drawAttrStr(QPainter &paint, QRect rect, |
378 | QString& str, ca attr, BOOL pm, BOOL clear) | 378 | QString& str, ca attr, BOOL pm, BOOL clear) |
379 | { | 379 | { |
380 | if (pm && color_table[attr.b].transparent) | 380 | if (pm && color_table[attr.b].transparent) |
381 | { | 381 | { |
382 | paint.setBackgroundMode( TransparentMode ); | 382 | paint.setBackgroundMode( TransparentMode ); |
383 | if (clear) erase(rect); | 383 | if (clear) erase(rect); |
384 | } | 384 | } |
385 | else | 385 | else |
386 | { | 386 | { |
387 | if (blinking) | 387 | if (blinking) |
388 | paint.fillRect(rect, color_table[attr.b].color); | 388 | paint.fillRect(rect, color_table[attr.b].color); |
389 | else | 389 | else |
390 | { | 390 | { |
391 | paint.setBackgroundMode( OpaqueMode ); | 391 | paint.setBackgroundMode( OpaqueMode ); |
392 | paint.setBackgroundColor( color_table[attr.b].color ); | 392 | paint.setBackgroundColor( color_table[attr.b].color ); |
393 | } | 393 | } |
394 | } | 394 | } |
395 | 395 | ||
396 | if (color_table[attr.f].bold) | 396 | if (color_table[attr.f].bold) |
397 | paint.setPen(QColor( 0x8F, 0x00, 0x00 )); | 397 | paint.setPen(QColor( 0x8F, 0x00, 0x00 )); |
398 | else | 398 | else |
399 | paint.setPen(color_table[attr.f].color); | 399 | paint.setPen(color_table[attr.f].color); |
400 | 400 | ||
401 | paint.drawText(rect.x(),rect.y()+font_a, str); | 401 | paint.drawText(rect.x(),rect.y()+font_a, str); |
402 | 402 | ||
403 | if (attr.r & RE_UNDERLINE) | 403 | if (attr.r & RE_UNDERLINE) |
404 | paint.drawLine(rect.left(), rect.y()+font_a+1, rect.right(),rect.y()+font_a+1 ); | 404 | paint.drawLine(rect.left(), rect.y()+font_a+1, rect.right(),rect.y()+font_a+1 ); |
405 | } | 405 | } |
406 | 406 | ||
407 | /*! | 407 | /*! |
408 | The image can only be set completely. | 408 | The image can only be set completely. |
409 | 409 | ||
410 | The size of the new image may or may not match the size of the widget. | 410 | The size of the new image may or may not match the size of the widget. |
411 | */ | 411 | */ |
412 | 412 | ||
413 | void TEWidget::setImage(const ca* const newimg, int lines, int columns) | 413 | void TEWidget::setImage(const ca* const newimg, int lines, int columns) |
414 | { int y,x,len; | 414 | { int y,x,len; |
415 | const QPixmap* pm = backgroundPixmap(); | 415 | const QPixmap* pm = backgroundPixmap(); |
416 | QPainter paint; | 416 | QPainter paint; |
417 | setUpdatesEnabled(FALSE); | 417 | setUpdatesEnabled(FALSE); |
418 | paint.begin( this ); | 418 | paint.begin( this ); |
419 | HCNT("setImage"); | 419 | HCNT("setImage"); |
420 | 420 | ||
421 | QPoint tL = contentsRect().topLeft(); | 421 | QPoint tL = contentsRect().topLeft(); |
422 | int tLx = tL.x(); | 422 | int tLx = tL.x(); |
423 | int tLy = tL.y(); | 423 | int tLy = tL.y(); |
424 | hasBlinker = FALSE; | 424 | hasBlinker = FALSE; |
425 | 425 | ||
426 | int cf = -1; // undefined | 426 | int cf = -1; // undefined |
427 | int cb = -1; // undefined | 427 | int cb = -1; // undefined |
428 | int cr = -1; // undefined | 428 | int cr = -1; // undefined |
429 | 429 | ||
430 | int lins = QMIN(this->lines, QMAX(0,lines )); | 430 | int lins = QMIN(this->lines, QMAX(0,lines )); |
431 | int cols = QMIN(this->columns,QMAX(0,columns)); | 431 | int cols = QMIN(this->columns,QMAX(0,columns)); |
432 | QChar *disstrU = new QChar[cols]; | 432 | QChar *disstrU = new QChar[cols]; |
433 | for (y = 0; y < lins; y++) { | 433 | for (y = 0; y < lins; y++) { |
434 | const ca* lcl = &image[y*this->columns]; | 434 | const ca* lcl = &image[y*this->columns]; |
435 | const ca* const ext = &newimg[y*columns]; | 435 | const ca* const ext = &newimg[y*columns]; |
436 | if (!resizing) // not while resizing, we're expecting a paintEvent | 436 | if (!resizing) // not while resizing, we're expecting a paintEvent |
437 | for (x = 0; x < cols; x++) | 437 | for (x = 0; x < cols; x++) |
438 | { | 438 | { |
439 | hasBlinker |= (ext[x].r & RE_BLINK); | 439 | hasBlinker |= (ext[x].r & RE_BLINK); |
440 | if (ext[x] != lcl[x]) | 440 | if (ext[x] != lcl[x]) |
441 | { | 441 | { |
442 | cr = ext[x].r; | 442 | cr = ext[x].r; |
443 | cb = ext[x].b; | 443 | cb = ext[x].b; |
444 | if (ext[x].f != cf) cf = ext[x].f; | 444 | if (ext[x].f != cf) cf = ext[x].f; |
445 | int lln = cols - x; | 445 | int lln = cols - x; |
446 | disstrU[0] = fontMap(ext[x+0].c); | 446 | disstrU[0] = fontMap(ext[x+0].c); |
447 | for (len = 1; len < lln; len++) | 447 | for (len = 1; len < lln; len++) |
448 | { | 448 | { |
449 | if (ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr || | 449 | if (ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr || |
450 | ext[x+len] == lcl[x+len] ) | 450 | ext[x+len] == lcl[x+len] ) |
451 | break; | 451 | break; |
452 | disstrU[len] = fontMap(ext[x+len].c); | 452 | disstrU[len] = fontMap(ext[x+len].c); |
453 | } | 453 | } |
454 | QString unistr(disstrU,len); | 454 | QString unistr(disstrU,len); |
455 | drawAttrStr(paint, | 455 | drawAttrStr(paint, |
456 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), | 456 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), |
457 | unistr, ext[x], pm != NULL, true); | 457 | unistr, ext[x], pm != NULL, true); |
458 | x += len - 1; | 458 | x += len - 1; |
459 | } | 459 | } |
460 | } | 460 | } |
461 | // finally, make `image' become `newimg'. | 461 | // finally, make `image' become `newimg'. |
462 | memcpy((void*)lcl,(const void*)ext,cols*sizeof(ca)); | 462 | memcpy((void*)lcl,(const void*)ext,cols*sizeof(ca)); |
463 | } | 463 | } |
464 | drawFrame( &paint ); | 464 | drawFrame( &paint ); |
465 | paint.end(); | 465 | paint.end(); |
466 | setUpdatesEnabled(TRUE); | 466 | setUpdatesEnabled(TRUE); |
467 | if ( hasBlinker && !blinkT->isActive()) blinkT->start(1000); // 1000 ms | 467 | if ( hasBlinker && !blinkT->isActive()) blinkT->start(1000); // 1000 ms |
468 | if (!hasBlinker && blinkT->isActive()) { blinkT->stop(); blinking = FALSE; } | 468 | if (!hasBlinker && blinkT->isActive()) { blinkT->stop(); blinking = FALSE; } |
469 | delete [] disstrU; | 469 | delete [] disstrU; |
470 | } | 470 | } |
471 | 471 | ||
472 | // paint Event //////////////////////////////////////////////////// | 472 | // paint Event //////////////////////////////////////////////////// |
473 | 473 | ||
474 | /*! | 474 | /*! |
475 | The difference of this routine vs. the `setImage' is, | 475 | The difference of this routine vs. the `setImage' is, |
476 | that the drawing does not include a difference analysis | 476 | that the drawing does not include a difference analysis |
477 | between the old and the new image. Instead, the internal | 477 | between the old and the new image. Instead, the internal |
478 | image is used and the painting bound by the PaintEvent box. | 478 | image is used and the painting bound by the PaintEvent box. |
479 | */ | 479 | */ |
480 | 480 | ||
481 | void TEWidget::paintEvent( QPaintEvent* pe ) | 481 | void TEWidget::paintEvent( QPaintEvent* pe ) |
482 | { | 482 | { |
483 | 483 | ||
484 | //{ static int cnt = 0; printf("paint %d\n",cnt++); } | 484 | //{ static int cnt = 0; printf("paint %d\n",cnt++); } |
485 | const QPixmap* pm = backgroundPixmap(); | 485 | const QPixmap* pm = backgroundPixmap(); |
486 | QPainter paint; | 486 | QPainter paint; |
487 | setUpdatesEnabled(FALSE); | 487 | setUpdatesEnabled(FALSE); |
488 | paint.begin( this ); | 488 | paint.begin( this ); |
489 | paint.setBackgroundMode( TransparentMode ); | 489 | paint.setBackgroundMode( TransparentMode ); |
490 | HCNT("paintEvent"); | 490 | HCNT("paintEvent"); |
491 | 491 | ||
492 | // Note that the actual widget size can be slightly larger | 492 | // Note that the actual widget size can be slightly larger |
493 | // that the image (the size is truncated towards the smaller | 493 | // that the image (the size is truncated towards the smaller |
494 | // number of characters in `resizeEvent'. The paint rectangle | 494 | // number of characters in `resizeEvent'. The paint rectangle |
495 | // can thus be larger than the image, but less then the size | 495 | // can thus be larger than the image, but less then the size |
496 | // of one character. | 496 | // of one character. |
497 | 497 | ||
498 | QRect rect = pe->rect().intersect(contentsRect()); | 498 | QRect rect = pe->rect().intersect(contentsRect()); |
499 | 499 | ||
500 | QPoint tL = contentsRect().topLeft(); | 500 | QPoint tL = contentsRect().topLeft(); |
501 | int tLx = tL.x(); | 501 | int tLx = tL.x(); |
502 | int tLy = tL.y(); | 502 | int tLy = tL.y(); |
503 | 503 | ||
504 | int lux = QMIN(columns-1, QMAX(0,(rect.left() - tLx - blX ) / font_w)); | 504 | int lux = QMIN(columns-1, QMAX(0,(rect.left() - tLx - blX ) / font_w)); |
505 | int luy = QMIN(lines-1, QMAX(0,(rect.top() - tLy - bY ) / font_h)); | 505 | int luy = QMIN(lines-1, QMAX(0,(rect.top() - tLy - bY ) / font_h)); |
506 | int rlx = QMIN(columns-1, QMAX(0,(rect.right() - tLx - blX ) / font_w)); | 506 | int rlx = QMIN(columns-1, QMAX(0,(rect.right() - tLx - blX ) / font_w)); |
507 | int rly = QMIN(lines-1, QMAX(0,(rect.bottom() - tLy - bY ) / font_h)); | 507 | int rly = QMIN(lines-1, QMAX(0,(rect.bottom() - tLy - bY ) / font_h)); |
508 | 508 | ||
509 | /* | 509 | /* |
510 | printf("paintEvent: %d..%d, %d..%d (%d..%d, %d..%d)\n",lux,rlx,luy,rly, | 510 | printf("paintEvent: %d..%d, %d..%d (%d..%d, %d..%d)\n",lux,rlx,luy,rly, |
511 | rect.left(), rect.right(), rect.top(), rect.bottom()); | 511 | rect.left(), rect.right(), rect.top(), rect.bottom()); |
512 | */ | 512 | */ |
513 | 513 | ||
514 | // if (pm != NULL && color_table[image->b].transparent) | 514 | // if (pm != NULL && color_table[image->b].transparent) |
515 | // erase(rect); | 515 | // erase(rect); |
516 | // BL: I have no idea why we need this, and it breaks the refresh. | 516 | // BL: I have no idea why we need this, and it breaks the refresh. |
517 | 517 | ||
518 | QChar *disstrU = new QChar[columns]; | 518 | QChar *disstrU = new QChar[columns]; |
519 | for (int y = luy; y <= rly; y++) | 519 | for (int y = luy; y <= rly; y++) |
520 | for (int x = lux; x <= rlx; x++) | 520 | for (int x = lux; x <= rlx; x++) |
521 | { | 521 | { |
522 | int len = 1; | 522 | int len = 1; |
523 | disstrU[0] = fontMap(image[loc(x,y)].c); | 523 | disstrU[0] = fontMap(image[loc(x,y)].c); |
524 | int cf = image[loc(x,y)].f; | 524 | int cf = image[loc(x,y)].f; |
525 | int cb = image[loc(x,y)].b; | 525 | int cb = image[loc(x,y)].b; |
526 | int cr = image[loc(x,y)].r; | 526 | int cr = image[loc(x,y)].r; |
527 | while (x+len <= rlx && | 527 | while (x+len <= rlx && |
528 | image[loc(x+len,y)].f == cf && | 528 | image[loc(x+len,y)].f == cf && |
529 | image[loc(x+len,y)].b == cb && | 529 | image[loc(x+len,y)].b == cb && |
530 | image[loc(x+len,y)].r == cr ) | 530 | image[loc(x+len,y)].r == cr ) |
531 | { | 531 | { |
532 | disstrU[len] = fontMap(image[loc(x+len,y)].c); | 532 | disstrU[len] = fontMap(image[loc(x+len,y)].c); |
533 | len += 1; | 533 | len += 1; |
534 | } | 534 | } |
535 | QString unistr(disstrU,len); | 535 | QString unistr(disstrU,len); |
536 | drawAttrStr(paint, | 536 | drawAttrStr(paint, |
537 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), | 537 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), |
538 | unistr, image[loc(x,y)], pm != NULL, false); | 538 | unistr, image[loc(x,y)], pm != NULL, false); |
539 | x += len - 1; | 539 | x += len - 1; |
540 | } | 540 | } |
541 | delete [] disstrU; | 541 | delete [] disstrU; |
542 | drawFrame( &paint ); | 542 | drawFrame( &paint ); |
543 | paint.end(); | 543 | paint.end(); |
544 | setUpdatesEnabled(TRUE); | 544 | setUpdatesEnabled(TRUE); |
545 | } | 545 | } |
546 | 546 | ||
547 | void TEWidget::blinkEvent() | 547 | void TEWidget::blinkEvent() |
548 | { | 548 | { |
549 | blinking = !blinking; | 549 | blinking = !blinking; |
550 | repaint(FALSE); | 550 | repaint(FALSE); |
551 | } | 551 | } |
552 | 552 | ||
553 | /* ------------------------------------------------------------------------- */ | 553 | /* ------------------------------------------------------------------------- */ |
554 | /* */ | 554 | /* */ |
555 | /* Resizing */ | 555 | /* Resizing */ |
556 | /* */ | 556 | /* */ |
557 | /* ------------------------------------------------------------------------- */ | 557 | /* ------------------------------------------------------------------------- */ |
558 | 558 | ||
559 | void TEWidget::resizeEvent(QResizeEvent* ev) | 559 | void TEWidget::resizeEvent(QResizeEvent* ev) |
560 | { | 560 | { |
561 | // printf("resize: %d,%d\n",ev->size().width(),ev->size().height()); | 561 | // printf("resize: %d,%d\n",ev->size().width(),ev->size().height()); |
562 | //printf("approx: %d,%d\n",ev->size().width()/font_w,ev->size().height()/font_h); | 562 | //printf("approx: %d,%d\n",ev->size().width()/font_w,ev->size().height()/font_h); |
563 | //printf("leaves: %d,%d\n",ev->size().width()%font_w,ev->size().height()%font_h); | 563 | //printf("leaves: %d,%d\n",ev->size().width()%font_w,ev->size().height()%font_h); |
564 | //printf("curren: %d,%d\n",width(),height()); | 564 | //printf("curren: %d,%d\n",width(),height()); |
565 | HCNT("resizeEvent"); | 565 | HCNT("resizeEvent"); |
566 | 566 | ||
567 | // see comment in `paintEvent' concerning the rounding. | 567 | // see comment in `paintEvent' concerning the rounding. |
568 | //FIXME: could make a routine here; check width(),height() | 568 | //FIXME: could make a routine here; check width(),height() |
569 | assert(ev->size().width() == width()); | 569 | assert(ev->size().width() == width()); |
570 | assert(ev->size().height() == height()); | 570 | assert(ev->size().height() == height()); |
571 | 571 | ||
572 | propagateSize(); | 572 | propagateSize(); |
573 | } | 573 | } |
574 | 574 | ||
575 | void TEWidget::propagateSize() | 575 | void TEWidget::propagateSize() |
576 | { | 576 | { |
577 | ca* oldimg = image; | 577 | ca* oldimg = image; |
578 | int oldlin = lines; | 578 | int oldlin = lines; |
579 | int oldcol = columns; | 579 | int oldcol = columns; |
580 | makeImage(); | 580 | makeImage(); |
581 | // we copy the old image to reduce flicker | 581 | // we copy the old image to reduce flicker |
582 | int lins = QMIN(oldlin,lines); | 582 | int lins = QMIN(oldlin,lines); |
583 | int cols = QMIN(oldcol,columns); | 583 | int cols = QMIN(oldcol,columns); |
584 | if (oldimg) | 584 | if (oldimg) |
585 | { | 585 | { |
586 | for (int lin = 0; lin < lins; lin++) | 586 | for (int lin = 0; lin < lins; lin++) |
587 | memcpy((void*)&image[columns*lin], | 587 | memcpy((void*)&image[columns*lin], |
588 | (void*)&oldimg[oldcol*lin],cols*sizeof(ca)); | 588 | (void*)&oldimg[oldcol*lin],cols*sizeof(ca)); |
589 | free(oldimg); //FIXME: try new,delete | 589 | free(oldimg); //FIXME: try new,delete |
590 | } | 590 | } |
591 | else | 591 | else |
592 | clearImage(); | 592 | clearImage(); |
593 | 593 | ||
594 | //NOTE: control flows from the back through the chest right into the eye. | 594 | //NOTE: control flows from the back through the chest right into the eye. |
595 | // `emu' will call back via `setImage'. | 595 | // `emu' will call back via `setImage'. |
596 | 596 | ||
597 | resizing = TRUE; | 597 | resizing = TRUE; |
598 | emit changedImageSizeSignal(lines, columns); // expose resizeEvent | 598 | emit changedImageSizeSignal(lines, columns); // expose resizeEvent |
599 | resizing = FALSE; | 599 | resizing = FALSE; |
600 | } | 600 | } |
601 | 601 | ||
602 | /* ------------------------------------------------------------------------- */ | 602 | /* ------------------------------------------------------------------------- */ |
603 | /* */ | 603 | /* */ |
604 | /* Scrollbar */ | 604 | /* Scrollbar */ |
605 | /* */ | 605 | /* */ |
606 | /* ------------------------------------------------------------------------- */ | 606 | /* ------------------------------------------------------------------------- */ |
607 | 607 | ||
608 | void TEWidget::scrollChanged(int) { | 608 | void TEWidget::scrollChanged(int) { |
609 | emit changedHistoryCursor(scrollbar->value()); //expose | 609 | emit changedHistoryCursor(scrollbar->value()); //expose |
610 | } | 610 | } |
611 | 611 | ||
612 | void TEWidget::hScrollChanged(int loc) { | 612 | void TEWidget::hScrollChanged(int loc) { |
613 | hposition = loc; | 613 | hposition = loc; |
614 | propagateSize(); | 614 | propagateSize(); |
615 | update(); | 615 | update(); |
616 | 616 | ||
617 | // emit changedHorzCursor( hScrollbar->value()); //expose | 617 | // emit changedHorzCursor( hScrollbar->value()); //expose |
618 | } | 618 | } |
619 | 619 | ||
620 | void TEWidget::setScroll(int cursor, int slines) | 620 | void TEWidget::setScroll(int cursor, int slines) |
621 | { | 621 | { |
622 | disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); | 622 | disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); |
623 | scrollbar->setRange(0,slines); | 623 | scrollbar->setRange(0,slines); |
624 | scrollbar->setSteps(1,lines); | 624 | scrollbar->setSteps(1,lines); |
625 | scrollbar->setValue(cursor); | 625 | scrollbar->setValue(cursor); |
626 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); | 626 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); |
627 | } | 627 | } |
628 | 628 | ||
629 | void TEWidget::setScrollbarLocation(int loc) | 629 | void TEWidget::setScrollbarLocation(int loc) |
630 | { | 630 | { |
631 | if (scrollLoc == loc) return; // quickly | 631 | if (scrollLoc == loc) return; // quickly |
632 | scrollLoc = loc; | 632 | scrollLoc = loc; |
633 | propagateSize(); | 633 | propagateSize(); |
634 | update(); | 634 | update(); |
635 | } | 635 | } |
636 | 636 | ||
637 | /* ------------------------------------------------------------------------- */ | 637 | /* ------------------------------------------------------------------------- */ |
638 | /* */ | 638 | /* */ |
639 | /* Mouse */ | 639 | /* Mouse */ |
640 | /* */ | 640 | /* */ |
diff --git a/core/apps/textedit/textedit.cpp b/core/apps/textedit/textedit.cpp index cabeb20..c7273c5 100644 --- a/core/apps/textedit/textedit.cpp +++ b/core/apps/textedit/textedit.cpp | |||
@@ -1,432 +1,432 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | // textedit.cpp | 2 | // textedit.cpp |
3 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 3 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
4 | ** | 4 | ** |
5 | ** This file is part of Opie Environment. | 5 | ** This file is part of Opie Environment. |
6 | ** | 6 | ** |
7 | ** This file may be distributed and/or modified under the terms of the | 7 | ** This file may be distributed and/or modified under the terms of the |
8 | ** GNU General Public License version 2 as published by the Free Software | 8 | ** GNU General Public License version 2 as published by the Free Software |
9 | ** Foundation and appearing in the file LICENSE.GPL included in the | 9 | ** Foundation and appearing in the file LICENSE.GPL included in the |
10 | ** packaging of this file. | 10 | ** packaging of this file. |
11 | ** | 11 | ** |
12 | **********************************************************************/ | 12 | **********************************************************************/ |
13 | // changes added by L. J. Potter Sun 02-17-2002 21:31:31 | 13 | // changes added by L. J. Potter Sun 02-17-2002 21:31:31 |
14 | 14 | ||
15 | #include "textedit.h" | 15 | #include "textedit.h" |
16 | #include "filePermissions.h" | 16 | #include "filePermissions.h" |
17 | 17 | ||
18 | /* OPIE */ | 18 | /* OPIE */ |
19 | #include <opie2/odebug.h> | 19 | #include <opie2/odebug.h> |
20 | #include <opie2/ofileselector.h> | 20 | #include <opie2/ofileselector.h> |
21 | #include <opie2/ofiledialog.h> | 21 | #include <opie2/ofiledialog.h> |
22 | #include <opie2/ofontselector.h> | 22 | #include <opie2/ofontselector.h> |
23 | #include <qpe/resource.h> | 23 | #include <qpe/resource.h> |
24 | #include <qpe/config.h> | 24 | #include <qpe/config.h> |
25 | #include <qpe/qpeapplication.h> | 25 | #include <qpe/qpeapplication.h> |
26 | 26 | ||
27 | 27 | ||
28 | /* QT */ | 28 | /* QT */ |
29 | #include <qmenubar.h> | 29 | #include <qmenubar.h> |
30 | #include <qtoolbar.h> | 30 | #include <qtoolbar.h> |
31 | #include <qtextstream.h> | 31 | #include <qtextstream.h> |
32 | #include <qclipboard.h> | 32 | #include <qclipboard.h> |
33 | #include <qaction.h> | 33 | #include <qaction.h> |
34 | #include <qlineedit.h> | 34 | #include <qlineedit.h> |
35 | #include <qmessagebox.h> | 35 | #include <qmessagebox.h> |
36 | #include <qlayout.h> | 36 | #include <qlayout.h> |
37 | #include <qtimer.h> | 37 | #include <qtimer.h> |
38 | #include <qdir.h> | 38 | #include <qdir.h> |
39 | 39 | ||
40 | /* STD */ | 40 | /* STD */ |
41 | #include <unistd.h> | 41 | #include <unistd.h> |
42 | #include <sys/stat.h> | 42 | #include <sys/stat.h> |
43 | #include <stdlib.h> //getenv | 43 | #include <stdlib.h> //getenv |
44 | 44 | ||
45 | using namespace Opie::Core; | 45 | using namespace Opie::Core; |
46 | using namespace Opie::Ui; | 46 | using namespace Opie::Ui; |
47 | 47 | ||
48 | #if QT_VERSION < 300 | 48 | #if QT_VERSION < 0x030000 |
49 | class QpeEditor : public QMultiLineEdit | 49 | class QpeEditor : public QMultiLineEdit |
50 | { | 50 | { |
51 | 51 | ||
52 | public: | 52 | public: |
53 | QpeEditor( QWidget *parent, const char * name = 0 ) | 53 | QpeEditor( QWidget *parent, const char * name = 0 ) |
54 | : QMultiLineEdit( parent, name ) { | 54 | : QMultiLineEdit( parent, name ) { |
55 | clearTableFlags(); | 55 | clearTableFlags(); |
56 | setTableFlags( Tbl_vScrollBar | Tbl_autoHScrollBar ); | 56 | setTableFlags( Tbl_vScrollBar | Tbl_autoHScrollBar ); |
57 | } | 57 | } |
58 | 58 | ||
59 | void find( const QString &txt, bool caseSensitive, | 59 | void find( const QString &txt, bool caseSensitive, |
60 | bool backwards ); | 60 | bool backwards ); |
61 | protected: | 61 | protected: |
62 | bool markIt; | 62 | bool markIt; |
63 | int line1, line2, col1, col2; | 63 | int line1, line2, col1, col2; |
64 | void mousePressEvent( QMouseEvent * ); | 64 | void mousePressEvent( QMouseEvent * ); |
65 | void mouseReleaseEvent( QMouseEvent * ); | 65 | void mouseReleaseEvent( QMouseEvent * ); |
66 | 66 | ||
67 | //public slots: | 67 | //public slots: |
68 | /* | 68 | /* |
69 | signals: | 69 | signals: |
70 | void notFound(); | 70 | void notFound(); |
71 | void searchWrapped(); | 71 | void searchWrapped(); |
72 | */ | 72 | */ |
73 | 73 | ||
74 | private: | 74 | private: |
75 | 75 | ||
76 | }; | 76 | }; |
77 | 77 | ||
78 | void QpeEditor::mousePressEvent( QMouseEvent *e ) { | 78 | void QpeEditor::mousePressEvent( QMouseEvent *e ) { |
79 | switch(e->button()) { | 79 | switch(e->button()) { |
80 | case RightButton: | 80 | case RightButton: |
81 | { //rediculous workaround for qt popup menu | 81 | { //rediculous workaround for qt popup menu |
82 | //and the hold right click mechanism | 82 | //and the hold right click mechanism |
83 | this->setSelection( line1, col1, line2, col2); | 83 | this->setSelection( line1, col1, line2, col2); |
84 | QMultiLineEdit::mousePressEvent( e ); | 84 | QMultiLineEdit::mousePressEvent( e ); |
85 | markIt = false; | 85 | markIt = false; |
86 | } | 86 | } |
87 | break; | 87 | break; |
88 | default: | 88 | default: |
89 | { | 89 | { |
90 | if(!markIt) { | 90 | if(!markIt) { |
91 | int line, col; | 91 | int line, col; |
92 | this->getCursorPosition(&line, &col); | 92 | this->getCursorPosition(&line, &col); |
93 | line1=line2=line; | 93 | line1=line2=line; |
94 | col1=col2=col; | 94 | col1=col2=col; |
95 | } | 95 | } |
96 | QMultiLineEdit::mousePressEvent( e ); | 96 | QMultiLineEdit::mousePressEvent( e ); |
97 | } | 97 | } |
98 | break; | 98 | break; |
99 | }; | 99 | }; |
100 | } | 100 | } |
101 | 101 | ||
102 | void QpeEditor::mouseReleaseEvent( QMouseEvent * ) { | 102 | void QpeEditor::mouseReleaseEvent( QMouseEvent * ) { |
103 | if(this->hasMarkedText()) { | 103 | if(this->hasMarkedText()) { |
104 | markIt = true; | 104 | markIt = true; |
105 | this->getMarkedRegion( &line1, &col1, &line2, & col2 ); | 105 | this->getMarkedRegion( &line1, &col1, &line2, & col2 ); |
106 | } else { | 106 | } else { |
107 | markIt = false; | 107 | markIt = false; |
108 | } | 108 | } |
109 | } | 109 | } |
110 | 110 | ||
111 | void QpeEditor::find ( const QString &txt, bool caseSensitive, | 111 | void QpeEditor::find ( const QString &txt, bool caseSensitive, |
112 | bool backwards ) | 112 | bool backwards ) |
113 | { | 113 | { |
114 | static bool wrap = false; | 114 | static bool wrap = false; |
115 | int line, col; | 115 | int line, col; |
116 | if ( wrap ) { | 116 | if ( wrap ) { |
117 | if ( !backwards ) | 117 | if ( !backwards ) |
118 | line = col = 0; | 118 | line = col = 0; |
119 | wrap = false; | 119 | wrap = false; |
120 | // emit searchWrapped(); | 120 | // emit searchWrapped(); |
121 | } else { | 121 | } else { |
122 | getCursorPosition( &line, &col ); | 122 | getCursorPosition( &line, &col ); |
123 | } | 123 | } |
124 | //ignore backwards for now.... | 124 | //ignore backwards for now.... |
125 | if ( !backwards ) { | 125 | if ( !backwards ) { |
126 | for ( ; ; ) { | 126 | for ( ; ; ) { |
127 | if ( line >= numLines() ) { | 127 | if ( line >= numLines() ) { |
128 | wrap = true; | 128 | wrap = true; |
129 | //emit notFound(); | 129 | //emit notFound(); |
130 | break; | 130 | break; |
131 | } | 131 | } |
132 | int findCol = getString( line )->find( txt, col, caseSensitive ); | 132 | int findCol = getString( line )->find( txt, col, caseSensitive ); |
133 | if ( findCol >= 0 ) { | 133 | if ( findCol >= 0 ) { |
134 | setCursorPosition( line, findCol, false ); | 134 | setCursorPosition( line, findCol, false ); |
135 | col = findCol + txt.length(); | 135 | col = findCol + txt.length(); |
136 | setCursorPosition( line, col, true ); | 136 | setCursorPosition( line, col, true ); |
137 | 137 | ||
138 | //found = true; | 138 | //found = true; |
139 | break; | 139 | break; |
140 | } | 140 | } |
141 | line++; | 141 | line++; |
142 | col = 0; | 142 | col = 0; |
143 | } | 143 | } |
144 | } | 144 | } |
145 | } | 145 | } |
146 | 146 | ||
147 | 147 | ||
148 | #else | 148 | #else |
149 | 149 | ||
150 | #error "Must make a QpeEditor that inherits QTextEdit" | 150 | #error "Must make a QpeEditor that inherits QTextEdit" |
151 | 151 | ||
152 | #endif | 152 | #endif |
153 | 153 | ||
154 | 154 | ||
155 | static const int nfontsizes = 6; | 155 | static const int nfontsizes = 6; |
156 | static const int fontsize[nfontsizes] = {8,10,12,14,18,24}; | 156 | static const int fontsize[nfontsizes] = {8,10,12,14,18,24}; |
157 | 157 | ||
158 | TextEdit::TextEdit( QWidget *parent, const char *name, WFlags f ) | 158 | TextEdit::TextEdit( QWidget *parent, const char *name, WFlags f ) |
159 | : QMainWindow( parent, name, f ), bFromDocView( false ) | 159 | : QMainWindow( parent, name, f ), bFromDocView( false ) |
160 | { | 160 | { |
161 | doc = 0; | 161 | doc = 0; |
162 | edited=false; | 162 | edited=false; |
163 | fromSetDocument=false; | 163 | fromSetDocument=false; |
164 | 164 | ||
165 | setToolBarsMovable( false ); | 165 | setToolBarsMovable( false ); |
166 | connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); | 166 | connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); |
167 | 167 | ||
168 | channel = new QCopChannel( "QPE/Application/textedit", this ); | 168 | channel = new QCopChannel( "QPE/Application/textedit", this ); |
169 | connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), | 169 | connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), |
170 | this, SLOT(receive(const QCString&,const QByteArray&)) ); | 170 | this, SLOT(receive(const QCString&,const QByteArray&)) ); |
171 | 171 | ||
172 | setIcon( Resource::loadPixmap( "TextEditor" ) ); | 172 | setIcon( Resource::loadPixmap( "TextEditor" ) ); |
173 | 173 | ||
174 | QToolBar *bar = new QToolBar( this ); | 174 | QToolBar *bar = new QToolBar( this ); |
175 | bar->setHorizontalStretchable( true ); | 175 | bar->setHorizontalStretchable( true ); |
176 | menu = bar; | 176 | menu = bar; |
177 | 177 | ||
178 | QMenuBar *mb = new QMenuBar( bar ); | 178 | QMenuBar *mb = new QMenuBar( bar ); |
179 | QPopupMenu *file = new QPopupMenu( this ); | 179 | QPopupMenu *file = new QPopupMenu( this ); |
180 | QPopupMenu *edit = new QPopupMenu( this ); | 180 | QPopupMenu *edit = new QPopupMenu( this ); |
181 | QPopupMenu *advancedMenu = new QPopupMenu(this); | 181 | QPopupMenu *advancedMenu = new QPopupMenu(this); |
182 | 182 | ||
183 | font = new QPopupMenu( this ); | 183 | font = new QPopupMenu( this ); |
184 | 184 | ||
185 | bar = new QToolBar( this ); | 185 | bar = new QToolBar( this ); |
186 | editBar = bar; | 186 | editBar = bar; |
187 | 187 | ||
188 | QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), | 188 | QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), |
189 | QString::null, 0, this, 0 ); | 189 | QString::null, 0, this, 0 ); |
190 | connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); | 190 | connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); |
191 | // a->addTo( bar ); | 191 | // a->addTo( bar ); |
192 | a->addTo( file ); | 192 | a->addTo( file ); |
193 | 193 | ||
194 | a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), | 194 | a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), |
195 | QString::null, 0, this, 0 ); | 195 | QString::null, 0, this, 0 ); |
196 | connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); | 196 | connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); |
197 | a->addTo( bar ); | 197 | a->addTo( bar ); |
198 | a->addTo( file ); | 198 | a->addTo( file ); |
199 | 199 | ||
200 | a = new QAction( tr( "Save" ), Resource::loadPixmap("save") , | 200 | a = new QAction( tr( "Save" ), Resource::loadPixmap("save") , |
201 | QString::null, 0, this, 0 ); | 201 | QString::null, 0, this, 0 ); |
202 | connect( a, SIGNAL( activated() ), this, SLOT( save() ) ); | 202 | connect( a, SIGNAL( activated() ), this, SLOT( save() ) ); |
203 | file->insertSeparator(); | 203 | file->insertSeparator(); |
204 | a->addTo( bar ); | 204 | a->addTo( bar ); |
205 | a->addTo( file ); | 205 | a->addTo( file ); |
206 | 206 | ||
207 | a = new QAction( tr( "Save As" ), Resource::loadPixmap("save") , | 207 | a = new QAction( tr( "Save As" ), Resource::loadPixmap("save") , |
208 | QString::null, 0, this, 0 ); | 208 | QString::null, 0, this, 0 ); |
209 | connect( a, SIGNAL( activated() ), this, SLOT( saveAs() ) ); | 209 | connect( a, SIGNAL( activated() ), this, SLOT( saveAs() ) ); |
210 | a->addTo( file ); | 210 | a->addTo( file ); |
211 | 211 | ||
212 | a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), | 212 | a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), |
213 | QString::null, 0, this, 0 ); | 213 | QString::null, 0, this, 0 ); |
214 | connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); | 214 | connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); |
215 | a->addTo( editBar ); | 215 | a->addTo( editBar ); |
216 | a->addTo( edit ); | 216 | a->addTo( edit ); |
217 | 217 | ||
218 | a = new QAction( tr( "Copy" ), Resource::loadPixmap( "copy" ), | 218 | a = new QAction( tr( "Copy" ), Resource::loadPixmap( "copy" ), |
219 | QString::null, 0, this, 0 ); | 219 | QString::null, 0, this, 0 ); |
220 | connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); | 220 | connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); |
221 | a->addTo( editBar ); | 221 | a->addTo( editBar ); |
222 | a->addTo( edit ); | 222 | a->addTo( edit ); |
223 | 223 | ||
224 | a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), | 224 | a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), |
225 | QString::null, 0, this, 0 ); | 225 | QString::null, 0, this, 0 ); |
226 | connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); | 226 | connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); |
227 | a->addTo( editBar ); | 227 | a->addTo( editBar ); |
228 | a->addTo( edit ); | 228 | a->addTo( edit ); |
229 | 229 | ||
230 | 230 | ||
231 | #ifndef QT_NO_CLIPBOARD | 231 | #ifndef QT_NO_CLIPBOARD |
232 | a = new QAction( tr( "Insert Time and Date" ), Resource::loadPixmap( "paste" ), | 232 | a = new QAction( tr( "Insert Time and Date" ), Resource::loadPixmap( "paste" ), |
233 | QString::null, 0, this, 0 ); | 233 | QString::null, 0, this, 0 ); |
234 | connect( a, SIGNAL( activated() ), this, SLOT( editPasteTimeDate() ) ); | 234 | connect( a, SIGNAL( activated() ), this, SLOT( editPasteTimeDate() ) ); |
235 | a->addTo( edit ); | 235 | a->addTo( edit ); |
236 | #endif | 236 | #endif |
237 | 237 | ||
238 | a = new QAction( tr( "Goto Line..." ), Resource::loadPixmap( "find" ), | 238 | a = new QAction( tr( "Goto Line..." ), Resource::loadPixmap( "find" ), |
239 | QString::null, 0, this, 0 ); | 239 | QString::null, 0, this, 0 ); |
240 | connect( a, SIGNAL( activated() ), this, SLOT( gotoLine() ) ); | 240 | connect( a, SIGNAL( activated() ), this, SLOT( gotoLine() ) ); |
241 | edit->insertSeparator(); | 241 | edit->insertSeparator(); |
242 | a->addTo( edit ); | 242 | a->addTo( edit ); |
243 | 243 | ||
244 | a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), | 244 | a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), |
245 | QString::null, 0, this, 0 ); | 245 | QString::null, 0, this, 0 ); |
246 | connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) ); | 246 | connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) ); |
247 | a->addTo( bar ); | 247 | a->addTo( bar ); |
248 | a->addTo( edit ); | 248 | a->addTo( edit ); |
249 | 249 | ||
250 | zin = new QAction( tr("Zoom in"), QString::null, 0, this, 0 ); | 250 | zin = new QAction( tr("Zoom in"), QString::null, 0, this, 0 ); |
251 | connect( zin, SIGNAL( activated() ), this, SLOT( zoomIn() ) ); | 251 | connect( zin, SIGNAL( activated() ), this, SLOT( zoomIn() ) ); |
252 | zin->addTo( font ); | 252 | zin->addTo( font ); |
253 | 253 | ||
254 | zout = new QAction( tr("Zoom out"), QString::null, 0, this, 0 ); | 254 | zout = new QAction( tr("Zoom out"), QString::null, 0, this, 0 ); |
255 | connect( zout, SIGNAL( activated() ), this, SLOT( zoomOut() ) ); | 255 | connect( zout, SIGNAL( activated() ), this, SLOT( zoomOut() ) ); |
256 | zout->addTo( font ); | 256 | zout->addTo( font ); |
257 | 257 | ||
258 | font->insertSeparator(); | 258 | font->insertSeparator(); |
259 | 259 | ||
260 | font->insertItem(tr("Font"), this, SLOT(changeFont()) ); | 260 | font->insertItem(tr("Font"), this, SLOT(changeFont()) ); |
261 | 261 | ||
262 | font->insertSeparator(); | 262 | font->insertSeparator(); |
263 | font->insertItem(tr("Advanced Features"), advancedMenu); | 263 | font->insertItem(tr("Advanced Features"), advancedMenu); |
264 | 264 | ||
265 | QAction *wa = new QAction( tr("Wrap lines"), | 265 | QAction *wa = new QAction( tr("Wrap lines"), |
266 | QString::null, 0, this, 0 ); | 266 | QString::null, 0, this, 0 ); |
267 | connect( wa, SIGNAL( toggled(bool) ), | 267 | connect( wa, SIGNAL( toggled(bool) ), |
268 | this, SLOT( setWordWrap(bool) ) ); | 268 | this, SLOT( setWordWrap(bool) ) ); |
269 | wa->setToggleAction(true); | 269 | wa->setToggleAction(true); |
270 | wa->addTo( advancedMenu); | 270 | wa->addTo( advancedMenu); |
271 | 271 | ||
272 | nStart = new QAction( tr("Start with new file"), | 272 | nStart = new QAction( tr("Start with new file"), |
273 | QString::null, 0, this, 0 ); | 273 | QString::null, 0, this, 0 ); |
274 | connect( nStart, SIGNAL( toggled(bool) ), | 274 | connect( nStart, SIGNAL( toggled(bool) ), |
275 | this, SLOT( changeStartConfig(bool) ) ); | 275 | this, SLOT( changeStartConfig(bool) ) ); |
276 | nStart->setToggleAction(true); | 276 | nStart->setToggleAction(true); |
277 | nStart->addTo( advancedMenu ); | 277 | nStart->addTo( advancedMenu ); |
278 | nStart->setEnabled(false); | 278 | nStart->setEnabled(false); |
279 | 279 | ||
280 | nAdvanced = new QAction( tr("Prompt on Exit"), | 280 | nAdvanced = new QAction( tr("Prompt on Exit"), |
281 | QString::null, 0, this, 0 ); | 281 | QString::null, 0, this, 0 ); |
282 | connect( nAdvanced, SIGNAL( toggled(bool) ), | 282 | connect( nAdvanced, SIGNAL( toggled(bool) ), |
283 | this, SLOT( doPrompt(bool) ) ); | 283 | this, SLOT( doPrompt(bool) ) ); |
284 | nAdvanced->setToggleAction(true); | 284 | nAdvanced->setToggleAction(true); |
285 | nAdvanced->addTo( advancedMenu ); | 285 | nAdvanced->addTo( advancedMenu ); |
286 | 286 | ||
287 | desktopAction = new QAction( tr("Always open linked file"), | 287 | desktopAction = new QAction( tr("Always open linked file"), |
288 | QString::null, 0, this, 0 ); | 288 | QString::null, 0, this, 0 ); |
289 | connect( desktopAction, SIGNAL( toggled(bool) ), | 289 | connect( desktopAction, SIGNAL( toggled(bool) ), |
290 | this, SLOT( doDesktop(bool) ) ); | 290 | this, SLOT( doDesktop(bool) ) ); |
291 | desktopAction->setToggleAction(true); | 291 | desktopAction->setToggleAction(true); |
292 | desktopAction->addTo( advancedMenu); | 292 | desktopAction->addTo( advancedMenu); |
293 | 293 | ||
294 | filePermAction = new QAction( tr("File Permissions"), | 294 | filePermAction = new QAction( tr("File Permissions"), |
295 | QString::null, 0, this, 0 ); | 295 | QString::null, 0, this, 0 ); |
296 | connect( filePermAction, SIGNAL( toggled(bool) ), | 296 | connect( filePermAction, SIGNAL( toggled(bool) ), |
297 | this, SLOT( doFilePerms(bool) ) ); | 297 | this, SLOT( doFilePerms(bool) ) ); |
298 | filePermAction->setToggleAction(true); | 298 | filePermAction->setToggleAction(true); |
299 | filePermAction->addTo( advancedMenu); | 299 | filePermAction->addTo( advancedMenu); |
300 | 300 | ||
301 | searchBarAction = new QAction( tr("Search Bar Open"), | 301 | searchBarAction = new QAction( tr("Search Bar Open"), |
302 | QString::null, 0, this, 0 ); | 302 | QString::null, 0, this, 0 ); |
303 | connect( searchBarAction, SIGNAL( toggled(bool) ), | 303 | connect( searchBarAction, SIGNAL( toggled(bool) ), |
304 | this, SLOT( setSearchBar(bool) ) ); | 304 | this, SLOT( setSearchBar(bool) ) ); |
305 | searchBarAction->setToggleAction(true); | 305 | searchBarAction->setToggleAction(true); |
306 | searchBarAction->addTo( advancedMenu); | 306 | searchBarAction->addTo( advancedMenu); |
307 | 307 | ||
308 | nAutoSave = new QAction( tr("Auto Save 5 min."), | 308 | nAutoSave = new QAction( tr("Auto Save 5 min."), |
309 | QString::null, 0, this, 0 ); | 309 | QString::null, 0, this, 0 ); |
310 | connect( nAutoSave, SIGNAL( toggled(bool) ), | 310 | connect( nAutoSave, SIGNAL( toggled(bool) ), |
311 | this, SLOT( doTimer(bool) ) ); | 311 | this, SLOT( doTimer(bool) ) ); |
312 | nAutoSave->setToggleAction(true); | 312 | nAutoSave->setToggleAction(true); |
313 | nAutoSave->addTo( advancedMenu); | 313 | nAutoSave->addTo( advancedMenu); |
314 | 314 | ||
315 | 315 | ||
316 | //font->insertSeparator(); | 316 | //font->insertSeparator(); |
317 | 317 | ||
318 | //font->insertItem(tr("About"), this, SLOT( doAbout()) ); | 318 | //font->insertItem(tr("About"), this, SLOT( doAbout()) ); |
319 | 319 | ||
320 | mb->insertItem( tr( "File" ), file ); | 320 | mb->insertItem( tr( "File" ), file ); |
321 | mb->insertItem( tr( "Edit" ), edit ); | 321 | mb->insertItem( tr( "Edit" ), edit ); |
322 | mb->insertItem( tr( "View" ), font ); | 322 | mb->insertItem( tr( "View" ), font ); |
323 | 323 | ||
324 | searchBar = new QToolBar(this); | 324 | searchBar = new QToolBar(this); |
325 | addToolBar( searchBar, "Search", QMainWindow::Top, true ); | 325 | addToolBar( searchBar, "Search", QMainWindow::Top, true ); |
326 | 326 | ||
327 | searchBar->setHorizontalStretchable( true ); | 327 | searchBar->setHorizontalStretchable( true ); |
328 | 328 | ||
329 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); | 329 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); |
330 | searchBar->setStretchableWidget( searchEdit ); | 330 | searchBar->setStretchableWidget( searchEdit ); |
331 | connect( searchEdit, SIGNAL( textChanged(const QString&) ), | 331 | connect( searchEdit, SIGNAL( textChanged(const QString&) ), |
332 | this, SLOT( search() ) ); | 332 | this, SLOT( search() ) ); |
333 | 333 | ||
334 | a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), | 334 | a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), |
335 | QString::null, 0, this, 0 ); | 335 | QString::null, 0, this, 0 ); |
336 | connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); | 336 | connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); |
337 | a->addTo( searchBar ); | 337 | a->addTo( searchBar ); |
338 | a->addTo( edit ); | 338 | a->addTo( edit ); |
339 | 339 | ||
340 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), | 340 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), |
341 | QString::null, 0, this, 0 ); | 341 | QString::null, 0, this, 0 ); |
342 | connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); | 342 | connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); |
343 | a->addTo( searchBar ); | 343 | a->addTo( searchBar ); |
344 | 344 | ||
345 | edit->insertSeparator(); | 345 | edit->insertSeparator(); |
346 | a = new QAction( tr( "Delete" ), Resource::loadPixmap( "close" ), | 346 | a = new QAction( tr( "Delete" ), Resource::loadPixmap( "close" ), |
347 | QString::null, 0, this, 0 ); | 347 | QString::null, 0, this, 0 ); |
348 | connect( a, SIGNAL( activated() ), this, SLOT( editDelete() ) ); | 348 | connect( a, SIGNAL( activated() ), this, SLOT( editDelete() ) ); |
349 | a->addTo( edit ); | 349 | a->addTo( edit ); |
350 | 350 | ||
351 | searchBar->hide(); | 351 | searchBar->hide(); |
352 | 352 | ||
353 | editor = new QpeEditor( this ); | 353 | editor = new QpeEditor( this ); |
354 | setCentralWidget( editor ); | 354 | setCentralWidget( editor ); |
355 | editor->setFrameStyle( QFrame::Panel | QFrame::Sunken ); | 355 | editor->setFrameStyle( QFrame::Panel | QFrame::Sunken ); |
356 | connect( editor, SIGNAL( textChanged() ), | 356 | connect( editor, SIGNAL( textChanged() ), |
357 | this, SLOT( editorChanged() ) ); | 357 | this, SLOT( editorChanged() ) ); |
358 | 358 | ||
359 | QPEApplication::setStylusOperation( editor, QPEApplication::RightOnHold); | 359 | QPEApplication::setStylusOperation( editor, QPEApplication::RightOnHold); |
360 | 360 | ||
361 | Config cfg("TextEdit"); | 361 | Config cfg("TextEdit"); |
362 | cfg. setGroup ( "Font" ); | 362 | cfg. setGroup ( "Font" ); |
363 | 363 | ||
364 | QFont defaultFont = editor-> font ( ); | 364 | QFont defaultFont = editor-> font ( ); |
365 | 365 | ||
366 | QString family = cfg. readEntry ( "Family", defaultFont. family ( )); | 366 | QString family = cfg. readEntry ( "Family", defaultFont. family ( )); |
367 | int size = cfg. readNumEntry ( "Size", defaultFont. pointSize ( )); | 367 | int size = cfg. readNumEntry ( "Size", defaultFont. pointSize ( )); |
368 | int weight = cfg. readNumEntry ( "Weight", defaultFont. weight ( )); | 368 | int weight = cfg. readNumEntry ( "Weight", defaultFont. weight ( )); |
369 | bool italic = cfg. readBoolEntry ( "Italic", defaultFont. italic ( )); | 369 | bool italic = cfg. readBoolEntry ( "Italic", defaultFont. italic ( )); |
370 | 370 | ||
371 | defaultFont = QFont ( family, size, weight, italic ); | 371 | defaultFont = QFont ( family, size, weight, italic ); |
372 | editor-> setFont ( defaultFont ); | 372 | editor-> setFont ( defaultFont ); |
373 | // updateCaption(); | 373 | // updateCaption(); |
374 | 374 | ||
375 | cfg.setGroup ( "View" ); | 375 | cfg.setGroup ( "View" ); |
376 | 376 | ||
377 | promptExit = cfg.readBoolEntry ( "PromptExit", false ); | 377 | promptExit = cfg.readBoolEntry ( "PromptExit", false ); |
378 | openDesktop = cfg.readBoolEntry ( "OpenDesktop", true ); | 378 | openDesktop = cfg.readBoolEntry ( "OpenDesktop", true ); |
379 | filePerms = cfg.readBoolEntry ( "FilePermissions", false ); | 379 | filePerms = cfg.readBoolEntry ( "FilePermissions", false ); |
380 | useSearchBar = cfg.readBoolEntry ( "SearchBar", false ); | 380 | useSearchBar = cfg.readBoolEntry ( "SearchBar", false ); |
381 | startWithNew = cfg.readBoolEntry ( "startNew", true); | 381 | startWithNew = cfg.readBoolEntry ( "startNew", true); |
382 | featureAutoSave = cfg.readBoolEntry( "autosave", false); | 382 | featureAutoSave = cfg.readBoolEntry( "autosave", false); |
383 | 383 | ||
384 | if(useSearchBar) searchBarAction->setOn(true); | 384 | if(useSearchBar) searchBarAction->setOn(true); |
385 | if(promptExit) nAdvanced->setOn( true ); | 385 | if(promptExit) nAdvanced->setOn( true ); |
386 | if(openDesktop) desktopAction->setOn( true ); | 386 | if(openDesktop) desktopAction->setOn( true ); |
387 | if(filePerms) filePermAction->setOn( true ); | 387 | if(filePerms) filePermAction->setOn( true ); |
388 | if(startWithNew) nStart->setOn( true ); | 388 | if(startWithNew) nStart->setOn( true ); |
389 | if(featureAutoSave) nAutoSave->setOn(true); | 389 | if(featureAutoSave) nAutoSave->setOn(true); |
390 | 390 | ||
391 | // { | 391 | // { |
392 | // doTimer(true); | 392 | // doTimer(true); |
393 | // } | 393 | // } |
394 | 394 | ||
395 | bool wrap = cfg. readBoolEntry ( "Wrap", true ); | 395 | bool wrap = cfg. readBoolEntry ( "Wrap", true ); |
396 | wa-> setOn ( wrap ); | 396 | wa-> setOn ( wrap ); |
397 | setWordWrap ( wrap ); | 397 | setWordWrap ( wrap ); |
398 | 398 | ||
399 | ///////////////// | 399 | ///////////////// |
400 | if( qApp->argc() > 1) { | 400 | if( qApp->argc() > 1) { |
401 | currentFileName=qApp->argv()[1]; | 401 | currentFileName=qApp->argv()[1]; |
402 | 402 | ||
403 | QFileInfo fi(currentFileName); | 403 | QFileInfo fi(currentFileName); |
404 | 404 | ||
405 | if(fi.baseName().left(1) == "") { | 405 | if(fi.baseName().left(1) == "") { |
406 | openDotFile(currentFileName); | 406 | openDotFile(currentFileName); |
407 | } else { | 407 | } else { |
408 | openFile(currentFileName); | 408 | openFile(currentFileName); |
409 | } | 409 | } |
410 | } else { | 410 | } else { |
411 | edited1=false; | 411 | edited1=false; |
412 | openDotFile(""); | 412 | openDotFile(""); |
413 | } | 413 | } |
414 | 414 | ||
415 | viewSelection = cfg.readNumEntry( "FileView", 0 ); | 415 | viewSelection = cfg.readNumEntry( "FileView", 0 ); |
416 | } | 416 | } |
417 | 417 | ||
418 | TextEdit::~TextEdit() { | 418 | TextEdit::~TextEdit() { |
419 | owarn << "textedit d'tor" << oendl; | 419 | owarn << "textedit d'tor" << oendl; |
420 | delete editor; | 420 | delete editor; |
421 | } | 421 | } |
422 | 422 | ||
423 | void TextEdit::closeEvent(QCloseEvent *) { | 423 | void TextEdit::closeEvent(QCloseEvent *) { |
424 | if( edited1 && promptExit) | 424 | if( edited1 && promptExit) |
425 | { | 425 | { |
426 | switch( savePrompt() ) | 426 | switch( savePrompt() ) |
427 | { | 427 | { |
428 | case 1: | 428 | case 1: |
429 | { | 429 | { |
430 | saveAs(); | 430 | saveAs(); |
431 | qApp->quit(); | 431 | qApp->quit(); |
432 | } | 432 | } |
diff --git a/core/opie-login/loginwindowimpl.cpp b/core/opie-login/loginwindowimpl.cpp index 73c2cbe..ac24894 100644 --- a/core/opie-login/loginwindowimpl.cpp +++ b/core/opie-login/loginwindowimpl.cpp | |||
@@ -1,262 +1,262 @@ | |||
1 | /* | 1 | /* |
2 | =. This file is part of the OPIE Project | 2 | =. This file is part of the OPIE Project |
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | 3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> |
4 | .>+-= | 4 | .>+-= |
5 | _;:, .> :=|. This file is free software; you can | 5 | _;:, .> :=|. This file is free software; you can |
6 | .> <`_, > . <= redistribute it and/or modify it under | 6 | .> <`_, > . <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | 7 | :`=1 )Y*s>-.-- : the terms of the GNU General Public |
8 | .="- .-=="i, .._ License as published by the Free Software | 8 | .="- .-=="i, .._ License as published by the Free Software |
9 | - . .-<_> .<> Foundation; either version 2 of the License, | 9 | - . .-<_> .<> Foundation; either version 2 of the License, |
10 | ._= =} : or (at your option) any later version. | 10 | ._= =} : or (at your option) any later version. |
11 | .%`+i> _;_. | 11 | .%`+i> _;_. |
12 | .i_,=:_. -<s. This file is distributed in the hope that | 12 | .i_,=:_. -<s. This file is distributed in the hope that |
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
14 | : .. .:, . . . without even the implied warranty of | 14 | : .. .:, . . . without even the implied warranty of |
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | 16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General |
17 | ..}^=.= = ; Public License for more details. | 17 | ..}^=.= = ; Public License for more details. |
18 | ++= -. .` .: | 18 | ++= -. .` .: |
19 | : = ...= . :.=- You should have received a copy of the GNU | 19 | : = ...= . :.=- You should have received a copy of the GNU |
20 | -. .:....=;==+<; General Public License along with this file; | 20 | -. .:....=;==+<; General Public License along with this file; |
21 | -_. . . )=. = see the file COPYING. If not, write to the | 21 | -_. . . )=. = see the file COPYING. If not, write to the |
22 | -- :-=` Free Software Foundation, Inc., | 22 | -- :-=` Free Software Foundation, Inc., |
23 | 59 Temple Place - Suite 330, | 23 | 59 Temple Place - Suite 330, |
24 | Boston, MA 02111-1307, USA. | 24 | Boston, MA 02111-1307, USA. |
25 | 25 | ||
26 | */ | 26 | */ |
27 | #include <qpe/version.h> | 27 | #include <qpe/version.h> |
28 | #include <qpushbutton.h> | 28 | #include <qpushbutton.h> |
29 | #include <qlayout.h> | 29 | #include <qlayout.h> |
30 | #include <qlineedit.h> | 30 | #include <qlineedit.h> |
31 | #include <qtimer.h> | 31 | #include <qtimer.h> |
32 | #include <qcombobox.h> | 32 | #include <qcombobox.h> |
33 | #include <qlabel.h> | 33 | #include <qlabel.h> |
34 | #include <qpopupmenu.h> | 34 | #include <qpopupmenu.h> |
35 | #include <qmessagebox.h> | 35 | #include <qmessagebox.h> |
36 | #if QT_VERSION < 300 | 36 | #if QT_VERSION < 0x030000 |
37 | #include <qgfx_qws.h> | 37 | #include <qgfx_qws.h> |
38 | #endif | 38 | #endif |
39 | #include <qwindowsystem_qws.h> | 39 | #include <qwindowsystem_qws.h> |
40 | 40 | ||
41 | #include <qpe/resource.h> | 41 | #include <qpe/resource.h> |
42 | #include <qpe/qcopenvelope_qws.h> | 42 | #include <qpe/qcopenvelope_qws.h> |
43 | #include <qpe/config.h> | 43 | #include <qpe/config.h> |
44 | 44 | ||
45 | #include <opie2/odevice.h> | 45 | #include <opie2/odevice.h> |
46 | 46 | ||
47 | #include <stdio.h> | 47 | #include <stdio.h> |
48 | #include <stdlib.h> | 48 | #include <stdlib.h> |
49 | 49 | ||
50 | #include "passworddialogimpl.h" | 50 | #include "passworddialogimpl.h" |
51 | #include "loginwindowimpl.h" | 51 | #include "loginwindowimpl.h" |
52 | #include "loginapplication.h" | 52 | #include "loginapplication.h" |
53 | #include "inputmethods.h" | 53 | #include "inputmethods.h" |
54 | 54 | ||
55 | using namespace Opie::Core; | 55 | using namespace Opie::Core; |
56 | 56 | ||
57 | 57 | ||
58 | LoginWindowImpl::LoginWindowImpl ( ) : LoginWindow ( 0, "LOGIN-WINDOW", WStyle_Customize | WStyle_NoBorder | WDestructiveClose ) | 58 | LoginWindowImpl::LoginWindowImpl ( ) : LoginWindow ( 0, "LOGIN-WINDOW", WStyle_Customize | WStyle_NoBorder | WDestructiveClose ) |
59 | { | 59 | { |
60 | QPopupMenu *pop = new QPopupMenu ( this ); | 60 | QPopupMenu *pop = new QPopupMenu ( this ); |
61 | pop-> insertItem ( tr( "Restart" ), this, SLOT( restart())); | 61 | pop-> insertItem ( tr( "Restart" ), this, SLOT( restart())); |
62 | pop-> insertItem ( tr( "Quit" ), this, SLOT( quit())); | 62 | pop-> insertItem ( tr( "Quit" ), this, SLOT( quit())); |
63 | m_menu-> setPopup ( pop ); | 63 | m_menu-> setPopup ( pop ); |
64 | 64 | ||
65 | QCopChannel *channel = new QCopChannel ( "QPE/TaskBar", this ); | 65 | QCopChannel *channel = new QCopChannel ( "QPE/TaskBar", this ); |
66 | connect ( channel, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( receive(const QCString&,const QByteArray&))); | 66 | connect ( channel, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( receive(const QCString&,const QByteArray&))); |
67 | 67 | ||
68 | QHBoxLayout *lay = new QHBoxLayout ( m_taskbar, 4, 4 ); | 68 | QHBoxLayout *lay = new QHBoxLayout ( m_taskbar, 4, 4 ); |
69 | m_input = new InputMethods ( m_taskbar ); | 69 | m_input = new InputMethods ( m_taskbar ); |
70 | connect ( m_input, SIGNAL( inputToggled(bool)), this, SLOT( calcMaxWindowRect())); | 70 | connect ( m_input, SIGNAL( inputToggled(bool)), this, SLOT( calcMaxWindowRect())); |
71 | lay-> addWidget ( m_input ); | 71 | lay-> addWidget ( m_input ); |
72 | lay-> addStretch ( 10 ); | 72 | lay-> addStretch ( 10 ); |
73 | 73 | ||
74 | setActiveWindow ( ); | 74 | setActiveWindow ( ); |
75 | m_password-> setFocus ( ); | 75 | m_password-> setFocus ( ); |
76 | 76 | ||
77 | m_user-> insertStringList ( lApp-> allUsers ( )); | 77 | m_user-> insertStringList ( lApp-> allUsers ( )); |
78 | 78 | ||
79 | //there is no point in displaying the IM for a zaurus | 79 | //there is no point in displaying the IM for a zaurus |
80 | if (ODevice::inst ( )-> series ( ) != Model_Zaurus){ | 80 | if (ODevice::inst ( )-> series ( ) != Model_Zaurus){ |
81 | QTimer::singleShot ( 0, this, SLOT( showIM())); | 81 | QTimer::singleShot ( 0, this, SLOT( showIM())); |
82 | } | 82 | } |
83 | 83 | ||
84 | QString opiedir = ::getenv ( "OPIEDIR" ); | 84 | QString opiedir = ::getenv ( "OPIEDIR" ); |
85 | QPixmap bgpix ( opiedir + "/pics/launcher/opie-background.jpg" ); | 85 | QPixmap bgpix ( opiedir + "/pics/launcher/opie-background.jpg" ); |
86 | 86 | ||
87 | if ( !bgpix. isNull ( )) { | 87 | if ( !bgpix. isNull ( )) { |
88 | setBackgroundPixmap ( bgpix ); | 88 | setBackgroundPixmap ( bgpix ); |
89 | m_caption-> setBackgroundPixmap ( bgpix); | 89 | m_caption-> setBackgroundPixmap ( bgpix); |
90 | TextLabel1-> setBackgroundPixmap ( bgpix); | 90 | TextLabel1-> setBackgroundPixmap ( bgpix); |
91 | TextLabel2-> setBackgroundPixmap ( bgpix); | 91 | TextLabel2-> setBackgroundPixmap ( bgpix); |
92 | } | 92 | } |
93 | 93 | ||
94 | //m_caption-> setText ( tr("<center>Welcome to OPIE %1</center><center>& %2 %3</center>"). arg(QPE_VERSION). arg ( ODevice::inst ( )-> systemString ( )). arg ( ODevice::inst ( )-> systemVersionString ( ))); | 94 | //m_caption-> setText ( tr("<center>Welcome to OPIE %1</center><center>& %2 %3</center>"). arg(QPE_VERSION). arg ( ODevice::inst ( )-> systemString ( )). arg ( ODevice::inst ( )-> systemVersionString ( ))); |
95 | 95 | ||
96 | Config cfg ( "opie-login" ); | 96 | Config cfg ( "opie-login" ); |
97 | cfg. setGroup ( "General" ); | 97 | cfg. setGroup ( "General" ); |
98 | QString last = cfg. readEntry ( "LastLogin" ); | 98 | QString last = cfg. readEntry ( "LastLogin" ); |
99 | 99 | ||
100 | if ( !last. isEmpty ( )) | 100 | if ( !last. isEmpty ( )) |
101 | m_user-> setEditText ( last ); | 101 | m_user-> setEditText ( last ); |
102 | 102 | ||
103 | calcMaxWindowRect ( ); | 103 | calcMaxWindowRect ( ); |
104 | 104 | ||
105 | if ( PasswordDialogImpl::needDialog() ) | 105 | if ( PasswordDialogImpl::needDialog() ) |
106 | QTimer::singleShot(10, this, SLOT(showPasswordDialog()) ); | 106 | QTimer::singleShot(10, this, SLOT(showPasswordDialog()) ); |
107 | 107 | ||
108 | 108 | ||
109 | } | 109 | } |
110 | 110 | ||
111 | LoginWindowImpl::~LoginWindowImpl ( ) | 111 | LoginWindowImpl::~LoginWindowImpl ( ) |
112 | { | 112 | { |
113 | } | 113 | } |
114 | 114 | ||
115 | 115 | ||
116 | void LoginWindowImpl::receive ( const QCString &msg, const QByteArray &data ) | 116 | void LoginWindowImpl::receive ( const QCString &msg, const QByteArray &data ) |
117 | { | 117 | { |
118 | QDataStream stream ( data, IO_ReadOnly ); | 118 | QDataStream stream ( data, IO_ReadOnly ); |
119 | 119 | ||
120 | if ( msg == "hideInputMethod()" ) | 120 | if ( msg == "hideInputMethod()" ) |
121 | m_input-> hideInputMethod ( ); | 121 | m_input-> hideInputMethod ( ); |
122 | else if ( msg == "showInputMethod()" ) | 122 | else if ( msg == "showInputMethod()" ) |
123 | m_input-> showInputMethod ( ); | 123 | m_input-> showInputMethod ( ); |
124 | else if ( msg == "reloadInputMethods()" ) | 124 | else if ( msg == "reloadInputMethods()" ) |
125 | m_input-> loadInputMethods ( ); | 125 | m_input-> loadInputMethods ( ); |
126 | } | 126 | } |
127 | 127 | ||
128 | void LoginWindowImpl::calcMaxWindowRect ( ) | 128 | void LoginWindowImpl::calcMaxWindowRect ( ) |
129 | { | 129 | { |
130 | #ifdef Q_WS_QWS | 130 | #ifdef Q_WS_QWS |
131 | QRect wr; | 131 | QRect wr; |
132 | int displayWidth = qApp-> desktop ( )-> width ( ); | 132 | int displayWidth = qApp-> desktop ( )-> width ( ); |
133 | QRect ir = m_input-> inputRect ( ); | 133 | QRect ir = m_input-> inputRect ( ); |
134 | if ( ir.isValid() ) | 134 | if ( ir.isValid() ) |
135 | wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); | 135 | wr.setCoords( 0, 0, displayWidth-1, ir.top()-1 ); |
136 | else | 136 | else |
137 | wr.setCoords( 0, 0, displayWidth-1, m_taskbar->y()-1 ); | 137 | wr.setCoords( 0, 0, displayWidth-1, m_taskbar->y()-1 ); |
138 | 138 | ||
139 | #if QT_VERSION < 300 | 139 | #if QT_VERSION < 0x030000 |
140 | wr = qt_screen-> mapToDevice ( wr, QSize ( qt_screen-> width ( ), qt_screen-> height ( ))); | 140 | wr = qt_screen-> mapToDevice ( wr, QSize ( qt_screen-> width ( ), qt_screen-> height ( ))); |
141 | #endif | 141 | #endif |
142 | 142 | ||
143 | QWSServer::setMaxWindowRect( wr ); | 143 | QWSServer::setMaxWindowRect( wr ); |
144 | #endif | 144 | #endif |
145 | } | 145 | } |
146 | 146 | ||
147 | 147 | ||
148 | void LoginWindowImpl::keyPressEvent ( QKeyEvent *e ) | 148 | void LoginWindowImpl::keyPressEvent ( QKeyEvent *e ) |
149 | { | 149 | { |
150 | switch ( e-> key ( )) { | 150 | switch ( e-> key ( )) { |
151 | case HardKey_Suspend: suspend ( ); | 151 | case HardKey_Suspend: suspend ( ); |
152 | break; | 152 | break; |
153 | case HardKey_Backlight: backlight ( ); | 153 | case HardKey_Backlight: backlight ( ); |
154 | break; | 154 | break; |
155 | default: e-> ignore ( ); | 155 | default: e-> ignore ( ); |
156 | break; | 156 | break; |
157 | } | 157 | } |
158 | LoginWindow::keyPressEvent ( e ); | 158 | LoginWindow::keyPressEvent ( e ); |
159 | } | 159 | } |
160 | 160 | ||
161 | 161 | ||
162 | void LoginWindowImpl::toggleEchoMode ( bool t ) | 162 | void LoginWindowImpl::toggleEchoMode ( bool t ) |
163 | { | 163 | { |
164 | m_password-> setEchoMode ( t ? QLineEdit::Normal : QLineEdit::Password ); | 164 | m_password-> setEchoMode ( t ? QLineEdit::Normal : QLineEdit::Password ); |
165 | } | 165 | } |
166 | 166 | ||
167 | void LoginWindowImpl::showIM ( ) | 167 | void LoginWindowImpl::showIM ( ) |
168 | { | 168 | { |
169 | m_input-> showInputMethod ( ); | 169 | m_input-> showInputMethod ( ); |
170 | } | 170 | } |
171 | 171 | ||
172 | void LoginWindowImpl::restart ( ) | 172 | void LoginWindowImpl::restart ( ) |
173 | { | 173 | { |
174 | qApp-> quit ( ); | 174 | qApp-> quit ( ); |
175 | } | 175 | } |
176 | 176 | ||
177 | void LoginWindowImpl::quit ( ) | 177 | void LoginWindowImpl::quit ( ) |
178 | { | 178 | { |
179 | lApp-> quitToConsole ( ); | 179 | lApp-> quitToConsole ( ); |
180 | } | 180 | } |
181 | 181 | ||
182 | void LoginWindowImpl::suspend ( ) | 182 | void LoginWindowImpl::suspend ( ) |
183 | { | 183 | { |
184 | ODevice::inst ( )-> suspend ( ); | 184 | ODevice::inst ( )-> suspend ( ); |
185 | 185 | ||
186 | QCopEnvelope e("QPE/System", "setBacklight(int)"); | 186 | QCopEnvelope e("QPE/System", "setBacklight(int)"); |
187 | e << -3; // Force on | 187 | e << -3; // Force on |
188 | } | 188 | } |
189 | 189 | ||
190 | void LoginWindowImpl::backlight ( ) | 190 | void LoginWindowImpl::backlight ( ) |
191 | { | 191 | { |
192 | QCopEnvelope e("QPE/System", "setBacklight(int)"); | 192 | QCopEnvelope e("QPE/System", "setBacklight(int)"); |
193 | e << -2; // toggle | 193 | e << -2; // toggle |
194 | } | 194 | } |
195 | 195 | ||
196 | class WaitLogo : public QLabel { | 196 | class WaitLogo : public QLabel { |
197 | public: | 197 | public: |
198 | WaitLogo ( ) : QLabel ( 0, "wait hack!", WStyle_Customize | WStyle_NoBorder | WStyle_Tool ) | 198 | WaitLogo ( ) : QLabel ( 0, "wait hack!", WStyle_Customize | WStyle_NoBorder | WStyle_Tool ) |
199 | { | 199 | { |
200 | QImage img = Resource::loadImage ( "launcher/new_wait" ); | 200 | QImage img = Resource::loadImage ( "launcher/new_wait" ); |
201 | QPixmap pix; | 201 | QPixmap pix; |
202 | pix. convertFromImage ( img ); | 202 | pix. convertFromImage ( img ); |
203 | setPixmap ( pix ); | 203 | setPixmap ( pix ); |
204 | setAlignment ( AlignCenter ); | 204 | setAlignment ( AlignCenter ); |
205 | move ( 0, 0 ); | 205 | move ( 0, 0 ); |
206 | resize ( qApp-> desktop ( )-> width ( ), qApp-> desktop ( )-> height ( )); | 206 | resize ( qApp-> desktop ( )-> width ( ), qApp-> desktop ( )-> height ( )); |
207 | 207 | ||
208 | m_visible = false; | 208 | m_visible = false; |
209 | show ( ); | 209 | show ( ); |
210 | } | 210 | } |
211 | 211 | ||
212 | virtual void showEvent ( QShowEvent *e ) | 212 | virtual void showEvent ( QShowEvent *e ) |
213 | { | 213 | { |
214 | QLabel::showEvent ( e ); | 214 | QLabel::showEvent ( e ); |
215 | m_visible = true; | 215 | m_visible = true; |
216 | } | 216 | } |
217 | 217 | ||
218 | virtual void paintEvent ( QPaintEvent *e ) | 218 | virtual void paintEvent ( QPaintEvent *e ) |
219 | { | 219 | { |
220 | QLabel::paintEvent ( e ); | 220 | QLabel::paintEvent ( e ); |
221 | if ( m_visible ) | 221 | if ( m_visible ) |
222 | qApp-> quit ( ); | 222 | qApp-> quit ( ); |
223 | } | 223 | } |
224 | 224 | ||
225 | private: | 225 | private: |
226 | bool m_visible; | 226 | bool m_visible; |
227 | }; | 227 | }; |
228 | 228 | ||
229 | void LoginWindowImpl::login ( ) | 229 | void LoginWindowImpl::login ( ) |
230 | { | 230 | { |
231 | const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( )); | 231 | const char *user = ::strdup ( m_user-> currentText ( ). local8Bit ( )); |
232 | const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( )); | 232 | const char *pass = ::strdup ( m_password-> text ( ). local8Bit ( )); |
233 | 233 | ||
234 | if ( !user || !user [0] ) | 234 | if ( !user || !user [0] ) |
235 | return; | 235 | return; |
236 | if ( !pass ) | 236 | if ( !pass ) |
237 | pass = ""; | 237 | pass = ""; |
238 | 238 | ||
239 | if ( lApp-> checkPassword ( user, pass )) { | 239 | if ( lApp-> checkPassword ( user, pass )) { |
240 | Config cfg ( "opie-login" ); | 240 | Config cfg ( "opie-login" ); |
241 | cfg. setGroup ( "General" ); | 241 | cfg. setGroup ( "General" ); |
242 | cfg. writeEntry ( "LastLogin", user ); | 242 | cfg. writeEntry ( "LastLogin", user ); |
243 | cfg. write ( ); | 243 | cfg. write ( ); |
244 | 244 | ||
245 | lApp-> setLoginAs ( user ); | 245 | lApp-> setLoginAs ( user ); |
246 | 246 | ||
247 | // Draw a big wait icon, the image can be altered in later revisions | 247 | // Draw a big wait icon, the image can be altered in later revisions |
248 | m_input-> hideInputMethod ( ); | 248 | m_input-> hideInputMethod ( ); |
249 | new WaitLogo ( ); | 249 | new WaitLogo ( ); |
250 | // WaitLogo::showEvent() calls qApp-> quit() | 250 | // WaitLogo::showEvent() calls qApp-> quit() |
251 | } | 251 | } |
252 | else { | 252 | else { |
253 | QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." )); | 253 | QMessageBox::warning ( this, tr( "Wrong password" ), tr( "The given password is incorrect." )); |
254 | m_password-> clear ( ); | 254 | m_password-> clear ( ); |
255 | } | 255 | } |
256 | } | 256 | } |
257 | 257 | ||
258 | void LoginWindowImpl::showPasswordDialog() { | 258 | void LoginWindowImpl::showPasswordDialog() { |
259 | PasswordDialogImpl dia( this ); | 259 | PasswordDialogImpl dia( this ); |
260 | dia.showMaximized(); | 260 | dia.showMaximized(); |
261 | dia.exec(); | 261 | dia.exec(); |
262 | } | 262 | } |
diff --git a/freetype/fontfactoryttf_qws.h b/freetype/fontfactoryttf_qws.h index 208ab61..ff0fcfc 100644 --- a/freetype/fontfactoryttf_qws.h +++ b/freetype/fontfactoryttf_qws.h | |||
@@ -1,63 +1,63 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | 21 | ||
22 | #ifndef FONTFACTORY_FT_H | 22 | #ifndef FONTFACTORY_FT_H |
23 | #define FONTFACTORY_FT_H | 23 | #define FONTFACTORY_FT_H |
24 | 24 | ||
25 | #include <qfontmanager_qws.h> | 25 | #include <qfontmanager_qws.h> |
26 | #if QT_VERSION >= 300 | 26 | #if QT_VERSION >= 0x030000 |
27 | # include <private/qfontdata_p.h> | 27 | # include <private/qfontdata_p.h> |
28 | #else | 28 | #else |
29 | # include "qfontdata_p.h" | 29 | # include "qfontdata_p.h" |
30 | #endif | 30 | #endif |
31 | 31 | ||
32 | 32 | ||
33 | #ifdef QT_NO_FREETYPE | 33 | #ifdef QT_NO_FREETYPE |
34 | 34 | ||
35 | extern "C" { | 35 | extern "C" { |
36 | #include <freetype/freetype.h> | 36 | #include <freetype/freetype.h> |
37 | } | 37 | } |
38 | 38 | ||
39 | // ascent, descent, width(ch), width(string), maxwidth? | 39 | // ascent, descent, width(ch), width(string), maxwidth? |
40 | // leftbearing, rightbearing, minleftbearing,minrightbearing | 40 | // leftbearing, rightbearing, minleftbearing,minrightbearing |
41 | // leading | 41 | // leading |
42 | 42 | ||
43 | class QFontFactoryFT : public QFontFactory { | 43 | class QFontFactoryFT : public QFontFactory { |
44 | 44 | ||
45 | public: | 45 | public: |
46 | 46 | ||
47 | QFontFactoryFT(); | 47 | QFontFactoryFT(); |
48 | virtual ~QFontFactoryFT(); | 48 | virtual ~QFontFactoryFT(); |
49 | 49 | ||
50 | QRenderedFont * get(const QFontDef &,QDiskFont *); | 50 | QRenderedFont * get(const QFontDef &,QDiskFont *); |
51 | virtual void load(QDiskFont *) const; | 51 | virtual void load(QDiskFont *) const; |
52 | virtual QString name(); | 52 | virtual QString name(); |
53 | 53 | ||
54 | private: | 54 | private: |
55 | 55 | ||
56 | friend class QRenderedFontFT; | 56 | friend class QRenderedFontFT; |
57 | FT_Library library; | 57 | FT_Library library; |
58 | }; | 58 | }; |
59 | 59 | ||
60 | #endif // QT_NO_FREETYPE | 60 | #endif // QT_NO_FREETYPE |
61 | 61 | ||
62 | #endif // QFONTFACTORY_FT_H | 62 | #endif // QFONTFACTORY_FT_H |
63 | 63 | ||
diff --git a/libopie2/opieui/oseparator.cpp b/libopie2/opieui/oseparator.cpp index bbc4381..177368b 100644 --- a/libopie2/opieui/oseparator.cpp +++ b/libopie2/opieui/oseparator.cpp | |||
@@ -1,129 +1,129 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> | 3 | Copyright (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> |
4 | Copyright (C) 1997 Michael Roth <mroth@wirlweb.de> | 4 | Copyright (C) 1997 Michael Roth <mroth@wirlweb.de> |
5 | =. | 5 | =. |
6 | .=l. | 6 | .=l. |
7 | .>+-= | 7 | .>+-= |
8 | _;:, .> :=|. This program is free software; you can | 8 | _;:, .> :=|. This program is free software; you can |
9 | .> <`_, > . <= redistribute it and/or modify it under | 9 | .> <`_, > . <= redistribute it and/or modify it under |
10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 10 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
11 | .="- .-=="i, .._ License as published by the Free Software | 11 | .="- .-=="i, .._ License as published by the Free Software |
12 | - . .-<_> .<> Foundation; either version 2 of the License, | 12 | - . .-<_> .<> Foundation; either version 2 of the License, |
13 | ._= =} : or (at your option) any later version. | 13 | ._= =} : or (at your option) any later version. |
14 | .%`+i> _;_. | 14 | .%`+i> _;_. |
15 | .i_,=:_. -<s. This program is distributed in the hope that | 15 | .i_,=:_. -<s. This program is distributed in the hope that |
16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 16 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
17 | : .. .:, . . . without even the implied warranty of | 17 | : .. .:, . . . without even the implied warranty of |
18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 18 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 19 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
20 | ..}^=.= = ; Library General Public License for more | 20 | ..}^=.= = ; Library General Public License for more |
21 | ++= -. .` .: details. | 21 | ++= -. .` .: details. |
22 | : = ...= . :.=- | 22 | : = ...= . :.=- |
23 | -. .:....=;==+<; You should have received a copy of the GNU | 23 | -. .:....=;==+<; You should have received a copy of the GNU |
24 | -_. . . )=. = Library General Public License along with | 24 | -_. . . )=. = Library General Public License along with |
25 | -- :-=` this library; see the file COPYING.LIB. | 25 | -- :-=` this library; see the file COPYING.LIB. |
26 | If not, write to the Free Software Foundation, | 26 | If not, write to the Free Software Foundation, |
27 | Inc., 59 Temple Place - Suite 330, | 27 | Inc., 59 Temple Place - Suite 330, |
28 | Boston, MA 02111-1307, USA. | 28 | Boston, MA 02111-1307, USA. |
29 | 29 | ||
30 | */ | 30 | */ |
31 | 31 | ||
32 | /* OPIE */ | 32 | /* OPIE */ |
33 | 33 | ||
34 | #include <opie2/odebug.h> | 34 | #include <opie2/odebug.h> |
35 | #include <opie2/oseparator.h> | 35 | #include <opie2/oseparator.h> |
36 | 36 | ||
37 | /* QT */ | 37 | /* QT */ |
38 | 38 | ||
39 | using namespace Opie::Core; | 39 | using namespace Opie::Core; |
40 | using namespace Opie::Ui; | 40 | using namespace Opie::Ui; |
41 | 41 | ||
42 | OSeparator::OSeparator(QWidget* parent, const char* name, WFlags f) | 42 | OSeparator::OSeparator(QWidget* parent, const char* name, WFlags f) |
43 | : QFrame(parent, name, f) | 43 | : QFrame(parent, name, f) |
44 | { | 44 | { |
45 | setLineWidth(1); | 45 | setLineWidth(1); |
46 | setMidLineWidth(0); | 46 | setMidLineWidth(0); |
47 | setOrientation( HLine ); | 47 | setOrientation( HLine ); |
48 | } | 48 | } |
49 | 49 | ||
50 | 50 | ||
51 | 51 | ||
52 | OSeparator::OSeparator(int orientation, QWidget* parent, const char* name, WFlags f) | 52 | OSeparator::OSeparator(int orientation, QWidget* parent, const char* name, WFlags f) |
53 | : QFrame(parent, name, f) | 53 | : QFrame(parent, name, f) |
54 | { | 54 | { |
55 | setLineWidth(1); | 55 | setLineWidth(1); |
56 | setMidLineWidth(0); | 56 | setMidLineWidth(0); |
57 | setOrientation( orientation ); | 57 | setOrientation( orientation ); |
58 | } | 58 | } |
59 | 59 | ||
60 | 60 | ||
61 | 61 | ||
62 | void OSeparator::setOrientation(int orientation) | 62 | void OSeparator::setOrientation(int orientation) |
63 | { | 63 | { |
64 | switch(orientation) | 64 | switch(orientation) |
65 | { | 65 | { |
66 | case Vertical: | 66 | case Vertical: |
67 | case VLine: | 67 | case VLine: |
68 | setFrameStyle( QFrame::VLine | QFrame::Sunken ); | 68 | setFrameStyle( QFrame::VLine | QFrame::Sunken ); |
69 | setMinimumSize(2, 0); | 69 | setMinimumSize(2, 0); |
70 | break; | 70 | break; |
71 | 71 | ||
72 | default: | 72 | default: |
73 | owarn << "OSeparator::setOrientation(): invalid orientation, using default orientation HLine" << oendl; | 73 | owarn << "OSeparator::setOrientation(): invalid orientation, using default orientation HLine" << oendl; |
74 | 74 | ||
75 | case Horizontal: | 75 | case Horizontal: |
76 | case HLine: | 76 | case HLine: |
77 | setFrameStyle( QFrame::HLine | QFrame::Sunken ); | 77 | setFrameStyle( QFrame::HLine | QFrame::Sunken ); |
78 | setMinimumSize(0, 2); | 78 | setMinimumSize(0, 2); |
79 | break; | 79 | break; |
80 | } | 80 | } |
81 | } | 81 | } |
82 | 82 | ||
83 | 83 | ||
84 | 84 | ||
85 | int OSeparator::orientation() const | 85 | int OSeparator::orientation() const |
86 | { | 86 | { |
87 | if ( frameStyle() & VLine ) | 87 | if ( frameStyle() & VLine ) |
88 | return VLine; | 88 | return VLine; |
89 | 89 | ||
90 | if ( frameStyle() & HLine ) | 90 | if ( frameStyle() & HLine ) |
91 | return HLine; | 91 | return HLine; |
92 | 92 | ||
93 | return 0; | 93 | return 0; |
94 | } | 94 | } |
95 | 95 | ||
96 | void OSeparator::drawFrame(QPainter *p) | 96 | void OSeparator::drawFrame(QPainter *p) |
97 | { | 97 | { |
98 | QPointp1, p2; | 98 | QPointp1, p2; |
99 | QRectr = frameRect(); | 99 | QRectr = frameRect(); |
100 | const QColorGroup & g = colorGroup(); | 100 | const QColorGroup & g = colorGroup(); |
101 | 101 | ||
102 | if ( frameStyle() & HLine ) { | 102 | if ( frameStyle() & HLine ) { |
103 | p1 = QPoint( r.x(), r.height()/2 ); | 103 | p1 = QPoint( r.x(), r.height()/2 ); |
104 | p2 = QPoint( r.x()+r.width(), p1.y() ); | 104 | p2 = QPoint( r.x()+r.width(), p1.y() ); |
105 | } | 105 | } |
106 | else { | 106 | else { |
107 | p1 = QPoint( r.x()+r.width()/2, 0 ); | 107 | p1 = QPoint( r.x()+r.width()/2, 0 ); |
108 | p2 = QPoint( p1.x(), r.height() ); | 108 | p2 = QPoint( p1.x(), r.height() ); |
109 | } | 109 | } |
110 | 110 | ||
111 | #if QT_VERSION < 300 | 111 | #if QT_VERSION < 0x030000 |
112 | style().drawSeparator( p, p1.x(), p1.y(), p2.x(), p2.y(), g, true, 1, midLineWidth() ); | 112 | style().drawSeparator( p, p1.x(), p1.y(), p2.x(), p2.y(), g, true, 1, midLineWidth() ); |
113 | #else | 113 | #else |
114 | QStyleOption opt( lineWidth(), midLineWidth() ); | 114 | QStyleOption opt( lineWidth(), midLineWidth() ); |
115 | style().drawPrimitive( QStyle::PE_Separator, p, QRect( p1, p2 ), g, QStyle::Style_Sunken, opt ); | 115 | style().drawPrimitive( QStyle::PE_Separator, p, QRect( p1, p2 ), g, QStyle::Style_Sunken, opt ); |
116 | #endif | 116 | #endif |
117 | } | 117 | } |
118 | 118 | ||
119 | 119 | ||
120 | QSize OSeparator::sizeHint() const | 120 | QSize OSeparator::sizeHint() const |
121 | { | 121 | { |
122 | if ( frameStyle() & VLine ) | 122 | if ( frameStyle() & VLine ) |
123 | return QSize(2, 0); | 123 | return QSize(2, 0); |
124 | 124 | ||
125 | if ( frameStyle() & HLine ) | 125 | if ( frameStyle() & HLine ) |
126 | return QSize(0, 2); | 126 | return QSize(0, 2); |
127 | 127 | ||
128 | return QSize(-1, -1); | 128 | return QSize(-1, -1); |
129 | } | 129 | } |
diff --git a/libopie2/qt3/opieui/oeditlistbox.h b/libopie2/qt3/opieui/oeditlistbox.h index 63fab11..c9c207d 100644 --- a/libopie2/qt3/opieui/oeditlistbox.h +++ b/libopie2/qt3/opieui/oeditlistbox.h | |||
@@ -1,250 +1,250 @@ | |||
1 | /* This file is part of the KDE libraries | 1 | /* This file is part of the KDE libraries |
2 | Copyright (C) 2000 David Faure <faure@kde.org>, Alexander Neundorf <neundorf@kde.org> | 2 | Copyright (C) 2000 David Faure <faure@kde.org>, Alexander Neundorf <neundorf@kde.org> |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Library General Public | 5 | modify it under the terms of the GNU Library General Public |
6 | License as published by the Free Software Foundation; either | 6 | License as published by the Free Software Foundation; either |
7 | version 2 of the License, or (at your option) any later version. | 7 | version 2 of the License, or (at your option) any later version. |
8 | 8 | ||
9 | This library is distributed in the hope that it will be useful, | 9 | This library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Library General Public License for more details. | 12 | Library General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU Library General Public License | 14 | You should have received a copy of the GNU Library General Public License |
15 | along with this library; see the file COPYING.LIB. If not, write to | 15 | along with this library; see the file COPYING.LIB. If not, write to |
16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
17 | Boston, MA 02111-1307, USA. | 17 | Boston, MA 02111-1307, USA. |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #ifndef OEDITLISTBOX_H | 20 | #ifndef OEDITLISTBOX_H |
21 | #define OEDITLISTBOX_H | 21 | #define OEDITLISTBOX_H |
22 | 22 | ||
23 | #include <qgroupbox.h> | 23 | #include <qgroupbox.h> |
24 | #include <qlistbox.h> | 24 | #include <qlistbox.h> |
25 | 25 | ||
26 | class OLineEdit; | 26 | class OLineEdit; |
27 | class OComboBox; | 27 | class OComboBox; |
28 | class QPushButton; | 28 | class QPushButton; |
29 | 29 | ||
30 | #if QT_VERSION < 300 | 30 | #if QT_VERSION < 0x030000 |
31 | enum StringComparisonMode { | 31 | enum StringComparisonMode { |
32 | CaseSensitive = 0x00001, // 0 0001 | 32 | CaseSensitive = 0x00001, // 0 0001 |
33 | BeginsWith = 0x00002, // 0 0010 | 33 | BeginsWith = 0x00002, // 0 0010 |
34 | EndsWith = 0x00004, // 0 0100 | 34 | EndsWith = 0x00004, // 0 0100 |
35 | Contains = 0x00008, // 0 1000 | 35 | Contains = 0x00008, // 0 1000 |
36 | ExactMatch = 0x00010 // 1 0000 | 36 | ExactMatch = 0x00010 // 1 0000 |
37 | }; | 37 | }; |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | class OEditListBoxPrivate; | 40 | class OEditListBoxPrivate; |
41 | /** | 41 | /** |
42 | * An editable listbox | 42 | * An editable listbox |
43 | * | 43 | * |
44 | * This class provides a editable listbox ;-), this means | 44 | * This class provides a editable listbox ;-), this means |
45 | * a listbox which is accompanied by a line edit to enter new | 45 | * a listbox which is accompanied by a line edit to enter new |
46 | * items into the listbox and pushbuttons to add and remove | 46 | * items into the listbox and pushbuttons to add and remove |
47 | * items from the listbox and two buttons to move items up and down. | 47 | * items from the listbox and two buttons to move items up and down. |
48 | */ | 48 | */ |
49 | class OEditListBox : public QGroupBox | 49 | class OEditListBox : public QGroupBox |
50 | { | 50 | { |
51 | Q_OBJECT | 51 | Q_OBJECT |
52 | 52 | ||
53 | public: | 53 | public: |
54 | /// @since 3.1 | 54 | /// @since 3.1 |
55 | class CustomEditor | 55 | class CustomEditor |
56 | { | 56 | { |
57 | public: | 57 | public: |
58 | CustomEditor() | 58 | CustomEditor() |
59 | : m_representationWidget( 0L ), | 59 | : m_representationWidget( 0L ), |
60 | m_lineEdit( 0L ) {} | 60 | m_lineEdit( 0L ) {} |
61 | CustomEditor( QWidget *repWidget, OLineEdit *edit ) | 61 | CustomEditor( QWidget *repWidget, OLineEdit *edit ) |
62 | : m_representationWidget( repWidget ), | 62 | : m_representationWidget( repWidget ), |
63 | m_lineEdit( edit ) {} | 63 | m_lineEdit( edit ) {} |
64 | CustomEditor( OComboBox *combo ); | 64 | CustomEditor( OComboBox *combo ); |
65 | 65 | ||
66 | void setRepresentationWidget( QWidget *repWidget ) { | 66 | void setRepresentationWidget( QWidget *repWidget ) { |
67 | m_representationWidget = repWidget; | 67 | m_representationWidget = repWidget; |
68 | } | 68 | } |
69 | void setLineEdit( OLineEdit *edit ) { | 69 | void setLineEdit( OLineEdit *edit ) { |
70 | m_lineEdit = edit; | 70 | m_lineEdit = edit; |
71 | } | 71 | } |
72 | 72 | ||
73 | virtual QWidget *representationWidget() const { | 73 | virtual QWidget *representationWidget() const { |
74 | return m_representationWidget; | 74 | return m_representationWidget; |
75 | } | 75 | } |
76 | virtual OLineEdit *lineEdit() const { | 76 | virtual OLineEdit *lineEdit() const { |
77 | return m_lineEdit; | 77 | return m_lineEdit; |
78 | } | 78 | } |
79 | 79 | ||
80 | protected: | 80 | protected: |
81 | QWidget *m_representationWidget; | 81 | QWidget *m_representationWidget; |
82 | OLineEdit *m_lineEdit; | 82 | OLineEdit *m_lineEdit; |
83 | }; | 83 | }; |
84 | 84 | ||
85 | public: | 85 | public: |
86 | 86 | ||
87 | /** | 87 | /** |
88 | * Enumeration of the buttons, the listbox offers. Specify them in the | 88 | * Enumeration of the buttons, the listbox offers. Specify them in the |
89 | * constructor in the buttons parameter. | 89 | * constructor in the buttons parameter. |
90 | */ | 90 | */ |
91 | enum Button { Add = 1, Remove = 2, UpDown = 4, All = Add|Remove|UpDown }; | 91 | enum Button { Add = 1, Remove = 2, UpDown = 4, All = Add|Remove|UpDown }; |
92 | 92 | ||
93 | /** | 93 | /** |
94 | * Create an editable listbox. | 94 | * Create an editable listbox. |
95 | * | 95 | * |
96 | * If @p checkAtEntering is true, after every character you type | 96 | * If @p checkAtEntering is true, after every character you type |
97 | * in the line edit OEditListBox will enable or disable | 97 | * in the line edit OEditListBox will enable or disable |
98 | * the Add-button, depending whether the current content of the | 98 | * the Add-button, depending whether the current content of the |
99 | * line edit is already in the listbox. Maybe this can become a | 99 | * line edit is already in the listbox. Maybe this can become a |
100 | * performance hit with large lists on slow machines. | 100 | * performance hit with large lists on slow machines. |
101 | * If @p checkAtEntering is false, | 101 | * If @p checkAtEntering is false, |
102 | * it will be checked if you press the Add-button. It is not | 102 | * it will be checked if you press the Add-button. It is not |
103 | * possible to enter items twice into the listbox. | 103 | * possible to enter items twice into the listbox. |
104 | */ | 104 | */ |
105 | OEditListBox(QWidget *parent = 0, const char *name = 0, | 105 | OEditListBox(QWidget *parent = 0, const char *name = 0, |
106 | bool checkAtEntering=false, int buttons = All ); | 106 | bool checkAtEntering=false, int buttons = All ); |
107 | /** | 107 | /** |
108 | * Create an editable listbox. | 108 | * Create an editable listbox. |
109 | * | 109 | * |
110 | * The same as the other constructor, additionally it takes | 110 | * The same as the other constructor, additionally it takes |
111 | * @title, which will be the title of the frame around the listbox. | 111 | * @title, which will be the title of the frame around the listbox. |
112 | */ | 112 | */ |
113 | OEditListBox(const QString& title, QWidget *parent = 0, | 113 | OEditListBox(const QString& title, QWidget *parent = 0, |
114 | const char *name = 0, bool checkAtEntering=false, | 114 | const char *name = 0, bool checkAtEntering=false, |
115 | int buttons = All ); | 115 | int buttons = All ); |
116 | 116 | ||
117 | /** | 117 | /** |
118 | * Another constructor, which allows to use a custom editing widget | 118 | * Another constructor, which allows to use a custom editing widget |
119 | * instead of the standard OLineEdit widget. E.g. you can use a | 119 | * instead of the standard OLineEdit widget. E.g. you can use a |
120 | * @ref OURLRequester or a @ref OComboBox as input widget. The custom | 120 | * @ref OURLRequester or a @ref OComboBox as input widget. The custom |
121 | * editor must consist of a lineedit and optionally another widget that | 121 | * editor must consist of a lineedit and optionally another widget that |
122 | * is used as representation. A OComboBox or a OURLRequester have a | 122 | * is used as representation. A OComboBox or a OURLRequester have a |
123 | * OLineEdit as child-widget for example, so the OComboBox is used as | 123 | * OLineEdit as child-widget for example, so the OComboBox is used as |
124 | * the representation widget. | 124 | * the representation widget. |
125 | * | 125 | * |
126 | * @see OURLRequester::customEditor() | 126 | * @see OURLRequester::customEditor() |
127 | * @since 3.1 | 127 | * @since 3.1 |
128 | */ | 128 | */ |
129 | OEditListBox( const QString& title, | 129 | OEditListBox( const QString& title, |
130 | const CustomEditor &customEditor, | 130 | const CustomEditor &customEditor, |
131 | QWidget *parent = 0, const char *name = 0, | 131 | QWidget *parent = 0, const char *name = 0, |
132 | bool checkAtEntering = false, int buttons = All ); | 132 | bool checkAtEntering = false, int buttons = All ); |
133 | 133 | ||
134 | virtual ~OEditListBox(); | 134 | virtual ~OEditListBox(); |
135 | 135 | ||
136 | /** | 136 | /** |
137 | * Return a pointer to the embedded QListBox. | 137 | * Return a pointer to the embedded QListBox. |
138 | */ | 138 | */ |
139 | QListBox* listBox() const { return m_listBox; } | 139 | QListBox* listBox() const { return m_listBox; } |
140 | /** | 140 | /** |
141 | * Return a pointer to the embedded QLineEdit. | 141 | * Return a pointer to the embedded QLineEdit. |
142 | */ | 142 | */ |
143 | OLineEdit* lineEdit() const { return m_lineEdit; } | 143 | OLineEdit* lineEdit() const { return m_lineEdit; } |
144 | /** | 144 | /** |
145 | * Return a pointer to the Add button | 145 | * Return a pointer to the Add button |
146 | */ | 146 | */ |
147 | QPushButton* addButton() const { return servNewButton; } | 147 | QPushButton* addButton() const { return servNewButton; } |
148 | /** | 148 | /** |
149 | * Return a pointer to the Remove button | 149 | * Return a pointer to the Remove button |
150 | */ | 150 | */ |
151 | QPushButton* removeButton() const { return servRemoveButton; } | 151 | QPushButton* removeButton() const { return servRemoveButton; } |
152 | /** | 152 | /** |
153 | * Return a pointer to the Up button | 153 | * Return a pointer to the Up button |
154 | */ | 154 | */ |
155 | QPushButton* upButton() const { return servUpButton; } | 155 | QPushButton* upButton() const { return servUpButton; } |
156 | /** | 156 | /** |
157 | * Return a pointer to the Down button | 157 | * Return a pointer to the Down button |
158 | */ | 158 | */ |
159 | QPushButton* downButton() const { return servDownButton; } | 159 | QPushButton* downButton() const { return servDownButton; } |
160 | 160 | ||
161 | /** | 161 | /** |
162 | * See @ref QListBox::count() | 162 | * See @ref QListBox::count() |
163 | */ | 163 | */ |
164 | int count() const { return int(m_listBox->count()); } | 164 | int count() const { return int(m_listBox->count()); } |
165 | /** | 165 | /** |
166 | * See @ref QListBox::insertStringList() | 166 | * See @ref QListBox::insertStringList() |
167 | */ | 167 | */ |
168 | void insertStringList(const QStringList& list, int index=-1); | 168 | void insertStringList(const QStringList& list, int index=-1); |
169 | /** | 169 | /** |
170 | * See @ref QListBox::insertStringList() | 170 | * See @ref QListBox::insertStringList() |
171 | */ | 171 | */ |
172 | void insertStrList(const QStrList* list, int index=-1); | 172 | void insertStrList(const QStrList* list, int index=-1); |
173 | /** | 173 | /** |
174 | * See @ref QListBox::insertStrList() | 174 | * See @ref QListBox::insertStrList() |
175 | */ | 175 | */ |
176 | void insertStrList(const QStrList& list, int index=-1); | 176 | void insertStrList(const QStrList& list, int index=-1); |
177 | /** | 177 | /** |
178 | * See @ref QListBox::insertStrList() | 178 | * See @ref QListBox::insertStrList() |
179 | */ | 179 | */ |
180 | void insertStrList(const char ** list, int numStrings=-1, int index=-1); | 180 | void insertStrList(const char ** list, int numStrings=-1, int index=-1); |
181 | /** | 181 | /** |
182 | * See @ref QListBox::insertItem() | 182 | * See @ref QListBox::insertItem() |
183 | */ | 183 | */ |
184 | void insertItem(const QString& text, int index=-1) {m_listBox->insertItem(text,index);} | 184 | void insertItem(const QString& text, int index=-1) {m_listBox->insertItem(text,index);} |
185 | /** | 185 | /** |
186 | * Clears both the listbox and the line edit. | 186 | * Clears both the listbox and the line edit. |
187 | */ | 187 | */ |
188 | void clear(); | 188 | void clear(); |
189 | /** | 189 | /** |
190 | * See @ref QListBox::text() | 190 | * See @ref QListBox::text() |
191 | */ | 191 | */ |
192 | QString text(int index) const { return m_listBox->text(index); } | 192 | QString text(int index) const { return m_listBox->text(index); } |
193 | /** | 193 | /** |
194 | * See @ref QListBox::currentItem() | 194 | * See @ref QListBox::currentItem() |
195 | */ | 195 | */ |
196 | int currentItem() const; | 196 | int currentItem() const; |
197 | /** | 197 | /** |
198 | * See @ref QListBox::currentText() | 198 | * See @ref QListBox::currentText() |
199 | */ | 199 | */ |
200 | QString currentText() const { return m_listBox->currentText(); } | 200 | QString currentText() const { return m_listBox->currentText(); } |
201 | 201 | ||
202 | /** | 202 | /** |
203 | * @returns a stringlist of all items in the listbox | 203 | * @returns a stringlist of all items in the listbox |
204 | */ | 204 | */ |
205 | QStringList items() const; | 205 | QStringList items() const; |
206 | 206 | ||
207 | signals: | 207 | signals: |
208 | void changed(); | 208 | void changed(); |
209 | 209 | ||
210 | /** | 210 | /** |
211 | * This signal is emitted when the user adds a new string to the list, | 211 | * This signal is emitted when the user adds a new string to the list, |
212 | * the parameter is the added string. | 212 | * the parameter is the added string. |
213 | * @since 3.2 | 213 | * @since 3.2 |
214 | */ | 214 | */ |
215 | void added( const QString & text ); | 215 | void added( const QString & text ); |
216 | 216 | ||
217 | /** | 217 | /** |
218 | * This signal is emitted when the user removes a string from the list, | 218 | * This signal is emitted when the user removes a string from the list, |
219 | * the parameter is the removed string. | 219 | * the parameter is the removed string. |
220 | * @since 3.2 | 220 | * @since 3.2 |
221 | */ | 221 | */ |
222 | void removed( const QString & text ); | 222 | void removed( const QString & text ); |
223 | 223 | ||
224 | protected slots: | 224 | protected slots: |
225 | //the names should be self-explaining | 225 | //the names should be self-explaining |
226 | void moveItemUp(); | 226 | void moveItemUp(); |
227 | void moveItemDown(); | 227 | void moveItemDown(); |
228 | void addItem(); | 228 | void addItem(); |
229 | void removeItem(); | 229 | void removeItem(); |
230 | void enableMoveButtons(int index); | 230 | void enableMoveButtons(int index); |
231 | void typedSomething(const QString& text); | 231 | void typedSomething(const QString& text); |
232 | 232 | ||
233 | private: | 233 | private: |
234 | QListBox *m_listBox; | 234 | QListBox *m_listBox; |
235 | QPushButton *servUpButton, *servDownButton; | 235 | QPushButton *servUpButton, *servDownButton; |
236 | QPushButton *servNewButton, *servRemoveButton; | 236 | QPushButton *servNewButton, *servRemoveButton; |
237 | OLineEdit *m_lineEdit; | 237 | OLineEdit *m_lineEdit; |
238 | 238 | ||
239 | //this is called in both ctors, to avoid code duplication | 239 | //this is called in both ctors, to avoid code duplication |
240 | void init( bool checkAtEntering, int buttons, | 240 | void init( bool checkAtEntering, int buttons, |
241 | QWidget *representationWidget = 0L ); | 241 | QWidget *representationWidget = 0L ); |
242 | 242 | ||
243 | protected: | 243 | protected: |
244 | virtual void virtual_hook( int id, void* data ); | 244 | virtual void virtual_hook( int id, void* data ); |
245 | private: | 245 | private: |
246 | //our lovely private d-pointer | 246 | //our lovely private d-pointer |
247 | OEditListBoxPrivate *d; | 247 | OEditListBoxPrivate *d; |
248 | }; | 248 | }; |
249 | 249 | ||
250 | #endif // OEDITLISTBOX | 250 | #endif // OEDITLISTBOX |
diff --git a/libopie2/qt3/opieui/ojanuswidget.cpp b/libopie2/qt3/opieui/ojanuswidget.cpp index 063e393..8bdbc03 100644 --- a/libopie2/qt3/opieui/ojanuswidget.cpp +++ b/libopie2/qt3/opieui/ojanuswidget.cpp | |||
@@ -391,726 +391,726 @@ void OJanusWidget::InsertTreeListItem(const QStringList &items, const QPixmap &p | |||
391 | } | 391 | } |
392 | else { | 392 | else { |
393 | // the node had some children, but we didn't find the given name | 393 | // the node had some children, but we didn't find the given name |
394 | if (isTop) | 394 | if (isTop) |
395 | newChild = new QListViewItem(mTreeList, last, name); | 395 | newChild = new QListViewItem(mTreeList, last, name); |
396 | else | 396 | else |
397 | newChild = new QListViewItem(curTop, last, name); | 397 | newChild = new QListViewItem(curTop, last, name); |
398 | } | 398 | } |
399 | 399 | ||
400 | // Now make the element expandable if it is a path component, and make | 400 | // Now make the element expandable if it is a path component, and make |
401 | // ready for next loop | 401 | // ready for next loop |
402 | if (isPath) { | 402 | if (isPath) { |
403 | newChild->setExpandable(true); | 403 | newChild->setExpandable(true); |
404 | curTop = newChild; | 404 | curTop = newChild; |
405 | isTop = false; | 405 | isTop = false; |
406 | curPath << name; | 406 | curPath << name; |
407 | 407 | ||
408 | QString key = curPath.join("_/_"); | 408 | QString key = curPath.join("_/_"); |
409 | if (mFolderIconMap.contains(key)) { | 409 | if (mFolderIconMap.contains(key)) { |
410 | QPixmap p = mFolderIconMap[key]; | 410 | QPixmap p = mFolderIconMap[key]; |
411 | newChild->setPixmap(0,p); | 411 | newChild->setPixmap(0,p); |
412 | } | 412 | } |
413 | } | 413 | } |
414 | else { | 414 | else { |
415 | if (mShowIconsInTreeList) { | 415 | if (mShowIconsInTreeList) { |
416 | newChild->setPixmap(0, pixmap); | 416 | newChild->setPixmap(0, pixmap); |
417 | } | 417 | } |
418 | mTreeListToPageStack.insert(newChild, page); | 418 | mTreeListToPageStack.insert(newChild, page); |
419 | } | 419 | } |
420 | } | 420 | } |
421 | } | 421 | } |
422 | 422 | ||
423 | void OJanusWidget::addPageWidget( QFrame *page, const QStringList &items, | 423 | void OJanusWidget::addPageWidget( QFrame *page, const QStringList &items, |
424 | const QString &header,const QPixmap &pixmap ) | 424 | const QString &header,const QPixmap &pixmap ) |
425 | { | 425 | { |
426 | connect(page, SIGNAL(destroyed(QObject*)), SLOT(pageGone(QObject*))); | 426 | connect(page, SIGNAL(destroyed(QObject*)), SLOT(pageGone(QObject*))); |
427 | 427 | ||
428 | if( mFace == Tabbed ) | 428 | if( mFace == Tabbed ) |
429 | { | 429 | { |
430 | mTabControl->addTab (page, items.last()); | 430 | mTabControl->addTab (page, items.last()); |
431 | mPageList->append (page); | 431 | mPageList->append (page); |
432 | } | 432 | } |
433 | else if( mFace == TreeList || mFace == IconList ) | 433 | else if( mFace == TreeList || mFace == IconList ) |
434 | { | 434 | { |
435 | mPageList->append( page ); | 435 | mPageList->append( page ); |
436 | mPageStack->addWidget( page, 0 ); | 436 | mPageStack->addWidget( page, 0 ); |
437 | 437 | ||
438 | if (items.count() == 0) { | 438 | if (items.count() == 0) { |
439 | qDebug( "Invalid QStringList, with zero items" ); | 439 | qDebug( "Invalid QStringList, with zero items" ); |
440 | return; | 440 | return; |
441 | } | 441 | } |
442 | 442 | ||
443 | if( mFace == TreeList ) | 443 | if( mFace == TreeList ) |
444 | { | 444 | { |
445 | InsertTreeListItem(items, pixmap, page); | 445 | InsertTreeListItem(items, pixmap, page); |
446 | } | 446 | } |
447 | else // mFace == IconList | 447 | else // mFace == IconList |
448 | { | 448 | { |
449 | QString itemName = items.last(); | 449 | QString itemName = items.last(); |
450 | IconListItem *item = new IconListItem( mIconList, pixmap, itemName ); | 450 | IconListItem *item = new IconListItem( mIconList, pixmap, itemName ); |
451 | // | 451 | // |
452 | // 2000-06-01 Espen Sand: If I do this with Qt 2.1.1 all sorts of | 452 | // 2000-06-01 Espen Sand: If I do this with Qt 2.1.1 all sorts of |
453 | // strange things happen. With Qt <= 2.1 it worked but now I must | 453 | // strange things happen. With Qt <= 2.1 it worked but now I must |
454 | // either specify the listbox in the constructor on the item | 454 | // either specify the listbox in the constructor on the item |
455 | // or as below, not both. | 455 | // or as below, not both. |
456 | // mIconList->insertItem( item ); | 456 | // mIconList->insertItem( item ); |
457 | // | 457 | // |
458 | mIconListToPageStack.insert(item, page); | 458 | mIconListToPageStack.insert(item, page); |
459 | mIconList->invalidateHeight(); | 459 | mIconList->invalidateHeight(); |
460 | mIconList->invalidateWidth(); | 460 | mIconList->invalidateWidth(); |
461 | 461 | ||
462 | if (mIconList->isVisible()) | 462 | if (mIconList->isVisible()) |
463 | mIconList->updateWidth(); | 463 | mIconList->updateWidth(); |
464 | } | 464 | } |
465 | 465 | ||
466 | // | 466 | // |
467 | // Make sure the title label is sufficiently wide | 467 | // Make sure the title label is sufficiently wide |
468 | // | 468 | // |
469 | QString lastName = items.last(); | 469 | QString lastName = items.last(); |
470 | const QString &title = (header != QString::null ? header : lastName); | 470 | const QString &title = (header != QString::null ? header : lastName); |
471 | QRect r = mTitleLabel->fontMetrics().boundingRect( title ); | 471 | QRect r = mTitleLabel->fontMetrics().boundingRect( title ); |
472 | if( mTitleLabel->minimumWidth() < r.width() ) | 472 | if( mTitleLabel->minimumWidth() < r.width() ) |
473 | { | 473 | { |
474 | mTitleLabel->setMinimumWidth( r.width() ); | 474 | mTitleLabel->setMinimumWidth( r.width() ); |
475 | } | 475 | } |
476 | mTitleList->append( title ); | 476 | mTitleList->append( title ); |
477 | 477 | ||
478 | if( mTitleList->count() == 1 ) | 478 | if( mTitleList->count() == 1 ) |
479 | { | 479 | { |
480 | showPage(0); | 480 | showPage(0); |
481 | } | 481 | } |
482 | } | 482 | } |
483 | else | 483 | else |
484 | { | 484 | { |
485 | qDebug( "OJanusWidget::addPageWidget: can only add a page in Tabbed, TreeList or IconList modes" ); | 485 | qDebug( "OJanusWidget::addPageWidget: can only add a page in Tabbed, TreeList or IconList modes" ); |
486 | } | 486 | } |
487 | 487 | ||
488 | } | 488 | } |
489 | 489 | ||
490 | void OJanusWidget::setFolderIcon(const QStringList &path, const QPixmap &pixmap) | 490 | void OJanusWidget::setFolderIcon(const QStringList &path, const QPixmap &pixmap) |
491 | { | 491 | { |
492 | QString key = path.join("_/_"); | 492 | QString key = path.join("_/_"); |
493 | mFolderIconMap.insert(key,pixmap); | 493 | mFolderIconMap.insert(key,pixmap); |
494 | } | 494 | } |
495 | 495 | ||
496 | 496 | ||
497 | 497 | ||
498 | bool OJanusWidget::setSwallowedWidget( QWidget *widget ) | 498 | bool OJanusWidget::setSwallowedWidget( QWidget *widget ) |
499 | { | 499 | { |
500 | if( mFace != Swallow || mValid == false ) | 500 | if( mFace != Swallow || mValid == false ) |
501 | { | 501 | { |
502 | return( false ); | 502 | return( false ); |
503 | } | 503 | } |
504 | 504 | ||
505 | // | 505 | // |
506 | // Remove current layout and make a new. | 506 | // Remove current layout and make a new. |
507 | // | 507 | // |
508 | if( mSwallowPage->layout() != 0 ) | 508 | if( mSwallowPage->layout() != 0 ) |
509 | { | 509 | { |
510 | delete mSwallowPage->layout(); | 510 | delete mSwallowPage->layout(); |
511 | } | 511 | } |
512 | QGridLayout *gbox = new QGridLayout( mSwallowPage, 1, 1, 0 ); | 512 | QGridLayout *gbox = new QGridLayout( mSwallowPage, 1, 1, 0 ); |
513 | 513 | ||
514 | // | 514 | // |
515 | // Hide old children | 515 | // Hide old children |
516 | // | 516 | // |
517 | QObjectList *l = (QObjectList*)mSwallowPage->children(); // silence please | 517 | QObjectList *l = (QObjectList*)mSwallowPage->children(); // silence please |
518 | for( uint i=0; i < l->count(); i++ ) | 518 | for( uint i=0; i < l->count(); i++ ) |
519 | { | 519 | { |
520 | QObject *o = l->at(i); | 520 | QObject *o = l->at(i); |
521 | if( o->isWidgetType() ) | 521 | if( o->isWidgetType() ) |
522 | { | 522 | { |
523 | ((QWidget*)o)->hide(); | 523 | ((QWidget*)o)->hide(); |
524 | } | 524 | } |
525 | } | 525 | } |
526 | 526 | ||
527 | // | 527 | // |
528 | // Add new child or make default size | 528 | // Add new child or make default size |
529 | // | 529 | // |
530 | if( widget == 0 ) | 530 | if( widget == 0 ) |
531 | { | 531 | { |
532 | gbox->addRowSpacing(0,100); | 532 | gbox->addRowSpacing(0,100); |
533 | gbox->addColSpacing(0,100); | 533 | gbox->addColSpacing(0,100); |
534 | mSwallowPage->setMinimumSize(100,100); | 534 | mSwallowPage->setMinimumSize(100,100); |
535 | } | 535 | } |
536 | else | 536 | else |
537 | { | 537 | { |
538 | if( widget->parent() != mSwallowPage ) | 538 | if( widget->parent() != mSwallowPage ) |
539 | { | 539 | { |
540 | widget->reparent( mSwallowPage, 0, QPoint(0,0) ); | 540 | widget->reparent( mSwallowPage, 0, QPoint(0,0) ); |
541 | } | 541 | } |
542 | gbox->addWidget(widget, 0, 0 ); | 542 | gbox->addWidget(widget, 0, 0 ); |
543 | gbox->activate(); | 543 | gbox->activate(); |
544 | mSwallowPage->setMinimumSize( widget->minimumSize() ); | 544 | mSwallowPage->setMinimumSize( widget->minimumSize() ); |
545 | } | 545 | } |
546 | 546 | ||
547 | return( true ); | 547 | return( true ); |
548 | } | 548 | } |
549 | 549 | ||
550 | bool OJanusWidget::slotShowPage() | 550 | bool OJanusWidget::slotShowPage() |
551 | { | 551 | { |
552 | if( mValid == false ) | 552 | if( mValid == false ) |
553 | { | 553 | { |
554 | return( false ); | 554 | return( false ); |
555 | } | 555 | } |
556 | 556 | ||
557 | if( mFace == TreeList ) | 557 | if( mFace == TreeList ) |
558 | { | 558 | { |
559 | QListViewItem *node = mTreeList->selectedItem(); | 559 | QListViewItem *node = mTreeList->selectedItem(); |
560 | if( node == 0 ) { return( false ); } | 560 | if( node == 0 ) { return( false ); } |
561 | 561 | ||
562 | QWidget *stackItem = mTreeListToPageStack[node]; | 562 | QWidget *stackItem = mTreeListToPageStack[node]; |
563 | return showPage(stackItem); | 563 | return showPage(stackItem); |
564 | } | 564 | } |
565 | else if( mFace == IconList ) | 565 | else if( mFace == IconList ) |
566 | { | 566 | { |
567 | QListBoxItem *node = mIconList->item( mIconList->currentItem() ); | 567 | QListBoxItem *node = mIconList->item( mIconList->currentItem() ); |
568 | if( node == 0 ) { return( false ); } | 568 | if( node == 0 ) { return( false ); } |
569 | QWidget *stackItem = mIconListToPageStack[node]; | 569 | QWidget *stackItem = mIconListToPageStack[node]; |
570 | return showPage(stackItem); | 570 | return showPage(stackItem); |
571 | } | 571 | } |
572 | 572 | ||
573 | return( false ); | 573 | return( false ); |
574 | } | 574 | } |
575 | 575 | ||
576 | 576 | ||
577 | bool OJanusWidget::showPage( int index ) | 577 | bool OJanusWidget::showPage( int index ) |
578 | { | 578 | { |
579 | if( mPageList == 0 || mValid == false ) | 579 | if( mPageList == 0 || mValid == false ) |
580 | { | 580 | { |
581 | return( false ); | 581 | return( false ); |
582 | } | 582 | } |
583 | else | 583 | else |
584 | { | 584 | { |
585 | return showPage(mPageList->at(index)); | 585 | return showPage(mPageList->at(index)); |
586 | } | 586 | } |
587 | } | 587 | } |
588 | 588 | ||
589 | 589 | ||
590 | bool OJanusWidget::showPage( QWidget *w ) | 590 | bool OJanusWidget::showPage( QWidget *w ) |
591 | { | 591 | { |
592 | if( w == 0 || mValid == false ) | 592 | if( w == 0 || mValid == false ) |
593 | { | 593 | { |
594 | return( false ); | 594 | return( false ); |
595 | } | 595 | } |
596 | 596 | ||
597 | if( mFace == TreeList || mFace == IconList ) | 597 | if( mFace == TreeList || mFace == IconList ) |
598 | { | 598 | { |
599 | mPageStack->raiseWidget( w ); | 599 | mPageStack->raiseWidget( w ); |
600 | mActivePageWidget = w; | 600 | mActivePageWidget = w; |
601 | 601 | ||
602 | int index = mPageList->findRef( w ); | 602 | int index = mPageList->findRef( w ); |
603 | mTitleLabel->setText( *mTitleList->at(index) ); | 603 | mTitleLabel->setText( *mTitleList->at(index) ); |
604 | if( mFace == TreeList ) | 604 | if( mFace == TreeList ) |
605 | { | 605 | { |
606 | QMap<QListViewItem *, QWidget *>::Iterator it; | 606 | QMap<QListViewItem *, QWidget *>::Iterator it; |
607 | for (it = mTreeListToPageStack.begin(); it != mTreeListToPageStack.end(); ++it){ | 607 | for (it = mTreeListToPageStack.begin(); it != mTreeListToPageStack.end(); ++it){ |
608 | QListViewItem *key = it.key(); | 608 | QListViewItem *key = it.key(); |
609 | QWidget *val = it.data(); | 609 | QWidget *val = it.data(); |
610 | if (val == w) { | 610 | if (val == w) { |
611 | mTreeList->setSelected(key, true ); | 611 | mTreeList->setSelected(key, true ); |
612 | break; | 612 | break; |
613 | } | 613 | } |
614 | } | 614 | } |
615 | } | 615 | } |
616 | else | 616 | else |
617 | { | 617 | { |
618 | QMap<QListBoxItem *, QWidget *>::Iterator it; | 618 | QMap<QListBoxItem *, QWidget *>::Iterator it; |
619 | for (it = mIconListToPageStack.begin(); it != mIconListToPageStack.end(); ++it){ | 619 | for (it = mIconListToPageStack.begin(); it != mIconListToPageStack.end(); ++it){ |
620 | QListBoxItem *key = it.key(); | 620 | QListBoxItem *key = it.key(); |
621 | QWidget *val = it.data(); | 621 | QWidget *val = it.data(); |
622 | if (val == w) { | 622 | if (val == w) { |
623 | mIconList->setSelected( key, true ); | 623 | mIconList->setSelected( key, true ); |
624 | break; | 624 | break; |
625 | } | 625 | } |
626 | } | 626 | } |
627 | 627 | ||
628 | // | 628 | // |
629 | // 2000-02-13 Espen Sand | 629 | // 2000-02-13 Espen Sand |
630 | // Don't ask me why (because I don't know). If I select a page | 630 | // Don't ask me why (because I don't know). If I select a page |
631 | // with the mouse the page is not updated until it receives an | 631 | // with the mouse the page is not updated until it receives an |
632 | // event. It seems this event get lost if the mouse is not moved | 632 | // event. It seems this event get lost if the mouse is not moved |
633 | // when released. The timer ensures the update | 633 | // when released. The timer ensures the update |
634 | // | 634 | // |
635 | QTimer::singleShot( 0, mActivePageWidget, SLOT(update()) ); | 635 | QTimer::singleShot( 0, mActivePageWidget, SLOT(update()) ); |
636 | } | 636 | } |
637 | } | 637 | } |
638 | else if( mFace == Tabbed ) | 638 | else if( mFace == Tabbed ) |
639 | { | 639 | { |
640 | mTabControl->showPage(w); | 640 | mTabControl->showPage(w); |
641 | mActivePageWidget = w; | 641 | mActivePageWidget = w; |
642 | } | 642 | } |
643 | else | 643 | else |
644 | { | 644 | { |
645 | return( false ); | 645 | return( false ); |
646 | } | 646 | } |
647 | 647 | ||
648 | return( true ); | 648 | return( true ); |
649 | } | 649 | } |
650 | 650 | ||
651 | 651 | ||
652 | int OJanusWidget::activePageIndex() const | 652 | int OJanusWidget::activePageIndex() const |
653 | { | 653 | { |
654 | if( mFace == TreeList) { | 654 | if( mFace == TreeList) { |
655 | QListViewItem *node = mTreeList->selectedItem(); | 655 | QListViewItem *node = mTreeList->selectedItem(); |
656 | if( node == 0 ) { return -1; } | 656 | if( node == 0 ) { return -1; } |
657 | QWidget *stackItem = mTreeListToPageStack[node]; | 657 | QWidget *stackItem = mTreeListToPageStack[node]; |
658 | return mPageList->findRef(stackItem); | 658 | return mPageList->findRef(stackItem); |
659 | } | 659 | } |
660 | else if (mFace == IconList) { | 660 | else if (mFace == IconList) { |
661 | QListBoxItem *node = mIconList->item( mIconList->currentItem() ); | 661 | QListBoxItem *node = mIconList->item( mIconList->currentItem() ); |
662 | if( node == 0 ) { return( false ); } | 662 | if( node == 0 ) { return( false ); } |
663 | QWidget *stackItem = mIconListToPageStack[node]; | 663 | QWidget *stackItem = mIconListToPageStack[node]; |
664 | return mPageList->findRef(stackItem); | 664 | return mPageList->findRef(stackItem); |
665 | } | 665 | } |
666 | else if( mFace == Tabbed ) { | 666 | else if( mFace == Tabbed ) { |
667 | QWidget *widget = mTabControl->currentPage(); | 667 | QWidget *widget = mTabControl->currentPage(); |
668 | return( widget == 0 ? -1 : mPageList->findRef( widget ) ); | 668 | return( widget == 0 ? -1 : mPageList->findRef( widget ) ); |
669 | } | 669 | } |
670 | else { | 670 | else { |
671 | return( -1 ); | 671 | return( -1 ); |
672 | } | 672 | } |
673 | } | 673 | } |
674 | 674 | ||
675 | 675 | ||
676 | int OJanusWidget::pageIndex( QWidget *widget ) const | 676 | int OJanusWidget::pageIndex( QWidget *widget ) const |
677 | { | 677 | { |
678 | if( widget == 0 ) | 678 | if( widget == 0 ) |
679 | { | 679 | { |
680 | return( -1 ); | 680 | return( -1 ); |
681 | } | 681 | } |
682 | else if( mFace == TreeList || mFace == IconList ) | 682 | else if( mFace == TreeList || mFace == IconList ) |
683 | { | 683 | { |
684 | return( mPageList->findRef( widget ) ); | 684 | return( mPageList->findRef( widget ) ); |
685 | } | 685 | } |
686 | else if( mFace == Tabbed ) | 686 | else if( mFace == Tabbed ) |
687 | { | 687 | { |
688 | // | 688 | // |
689 | // The user gets the real page widget with addVBoxPage(), addHBoxPage() | 689 | // The user gets the real page widget with addVBoxPage(), addHBoxPage() |
690 | // and addGridPage() but not with addPage() which returns a child of | 690 | // and addGridPage() but not with addPage() which returns a child of |
691 | // the toplevel page. addPage() returns a QFrame so I check for that. | 691 | // the toplevel page. addPage() returns a QFrame so I check for that. |
692 | // | 692 | // |
693 | if( widget->isA("QFrame") ) | 693 | if( widget->isA("QFrame") ) |
694 | { | 694 | { |
695 | return( mPageList->findRef( widget->parentWidget() ) ); | 695 | return( mPageList->findRef( widget->parentWidget() ) ); |
696 | } | 696 | } |
697 | else | 697 | else |
698 | { | 698 | { |
699 | return( mPageList->findRef( widget ) ); | 699 | return( mPageList->findRef( widget ) ); |
700 | } | 700 | } |
701 | } | 701 | } |
702 | else | 702 | else |
703 | { | 703 | { |
704 | return( -1 ); | 704 | return( -1 ); |
705 | } | 705 | } |
706 | } | 706 | } |
707 | 707 | ||
708 | void OJanusWidget::slotFontChanged() | 708 | void OJanusWidget::slotFontChanged() |
709 | { | 709 | { |
710 | #ifdef FIXME | 710 | #ifdef FIXME |
711 | 711 | ||
712 | if ( mTitleLabel != 0 ) | 712 | if ( mTitleLabel != 0 ) |
713 | { | 713 | { |
714 | mTitleLabel->setFont( KGlobalSettings::generalFont() ); | 714 | mTitleLabel->setFont( KGlobalSettings::generalFont() ); |
715 | QFont titleFont( mTitleLabel->font() ); | 715 | QFont titleFont( mTitleLabel->font() ); |
716 | titleFont.setBold( true ); | 716 | titleFont.setBold( true ); |
717 | mTitleLabel->setFont( titleFont ); | 717 | mTitleLabel->setFont( titleFont ); |
718 | } | 718 | } |
719 | #endif | 719 | #endif |
720 | 720 | ||
721 | if( mFace == IconList ) | 721 | if( mFace == IconList ) |
722 | { | 722 | { |
723 | QFont listFont( mIconList->font() ); | 723 | QFont listFont( mIconList->font() ); |
724 | listFont.setBold( true ); | 724 | listFont.setBold( true ); |
725 | mIconList->setFont( listFont ); | 725 | mIconList->setFont( listFont ); |
726 | mIconList->invalidateHeight(); | 726 | mIconList->invalidateHeight(); |
727 | mIconList->invalidateWidth(); | 727 | mIconList->invalidateWidth(); |
728 | } | 728 | } |
729 | } | 729 | } |
730 | 730 | ||
731 | // makes the treelist behave like the list of kcontrol | 731 | // makes the treelist behave like the list of kcontrol |
732 | void OJanusWidget::slotItemClicked(QListViewItem *it) | 732 | void OJanusWidget::slotItemClicked(QListViewItem *it) |
733 | { | 733 | { |
734 | if(it && (it->childCount()>0)) | 734 | if(it && (it->childCount()>0)) |
735 | it->setOpen(!it->isOpen()); | 735 | it->setOpen(!it->isOpen()); |
736 | } | 736 | } |
737 | 737 | ||
738 | void OJanusWidget::setFocus() | 738 | void OJanusWidget::setFocus() |
739 | { | 739 | { |
740 | if( mValid == false ) { return; } | 740 | if( mValid == false ) { return; } |
741 | if( mFace == TreeList ) | 741 | if( mFace == TreeList ) |
742 | { | 742 | { |
743 | mTreeList->setFocus(); | 743 | mTreeList->setFocus(); |
744 | } | 744 | } |
745 | if( mFace == IconList ) | 745 | if( mFace == IconList ) |
746 | { | 746 | { |
747 | mIconList->setFocus(); | 747 | mIconList->setFocus(); |
748 | } | 748 | } |
749 | else if( mFace == Tabbed ) | 749 | else if( mFace == Tabbed ) |
750 | { | 750 | { |
751 | mTabControl->setFocus(); | 751 | mTabControl->setFocus(); |
752 | } | 752 | } |
753 | else if( mFace == Swallow ) | 753 | else if( mFace == Swallow ) |
754 | { | 754 | { |
755 | mSwallowPage->setFocus(); | 755 | mSwallowPage->setFocus(); |
756 | } | 756 | } |
757 | else if( mFace == Plain ) | 757 | else if( mFace == Plain ) |
758 | { | 758 | { |
759 | mPlainPage->setFocus(); | 759 | mPlainPage->setFocus(); |
760 | } | 760 | } |
761 | } | 761 | } |
762 | 762 | ||
763 | 763 | ||
764 | QSize OJanusWidget::minimumSizeHint() const | 764 | QSize OJanusWidget::minimumSizeHint() const |
765 | { | 765 | { |
766 | if( mFace == TreeList || mFace == IconList ) | 766 | if( mFace == TreeList || mFace == IconList ) |
767 | { | 767 | { |
768 | QSize s1( ODialog::spacingHint(), ODialog::spacingHint()*2 ); | 768 | QSize s1( ODialog::spacingHint(), ODialog::spacingHint()*2 ); |
769 | QSize s2(0,0); | 769 | QSize s2(0,0); |
770 | QSize s3(0,0); | 770 | QSize s3(0,0); |
771 | QSize s4( mPageStack->sizeHint() ); | 771 | QSize s4( mPageStack->sizeHint() ); |
772 | 772 | ||
773 | if( mFace == TreeList ) | 773 | if( mFace == TreeList ) |
774 | { | 774 | { |
775 | #if QT_VERSION < 300 | 775 | #if QT_VERSION < 0x030000 |
776 | s1.rwidth() += style().splitterWidth(); | 776 | s1.rwidth() += style().splitterWidth(); |
777 | #else | 777 | #else |
778 | s1.rwidth() += style().pixelMetric( QStyle::PM_SplitterWidth ); | 778 | s1.rwidth() += style().pixelMetric( QStyle::PM_SplitterWidth ); |
779 | #endif | 779 | #endif |
780 | s2 = mTreeList->minimumSize(); | 780 | s2 = mTreeList->minimumSize(); |
781 | } | 781 | } |
782 | else | 782 | else |
783 | { | 783 | { |
784 | mIconList->updateMinimumHeight(); | 784 | mIconList->updateMinimumHeight(); |
785 | mIconList->updateWidth(); | 785 | mIconList->updateWidth(); |
786 | s2 = mIconList->minimumSize(); | 786 | s2 = mIconList->minimumSize(); |
787 | } | 787 | } |
788 | 788 | ||
789 | if( mTitleLabel->isVisible() == true ) | 789 | if( mTitleLabel->isVisible() == true ) |
790 | { | 790 | { |
791 | s3 += mTitleLabel->sizeHint(); | 791 | s3 += mTitleLabel->sizeHint(); |
792 | s3.rheight() += mTitleSep->minimumSize().height(); | 792 | s3.rheight() += mTitleSep->minimumSize().height(); |
793 | } | 793 | } |
794 | 794 | ||
795 | // | 795 | // |
796 | // Select the tallest item. It has only effect in IconList mode | 796 | // Select the tallest item. It has only effect in IconList mode |
797 | // | 797 | // |
798 | int h1 = s1.rheight() + s3.rheight() + s4.height(); | 798 | int h1 = s1.rheight() + s3.rheight() + s4.height(); |
799 | int h2 = QMAX( h1, s2.rheight() ); | 799 | int h2 = QMAX( h1, s2.rheight() ); |
800 | 800 | ||
801 | return( QSize( s1.width()+s2.width()+QMAX(s3.width(),s4.width()), h2 ) ); | 801 | return( QSize( s1.width()+s2.width()+QMAX(s3.width(),s4.width()), h2 ) ); |
802 | } | 802 | } |
803 | else if( mFace == Tabbed ) | 803 | else if( mFace == Tabbed ) |
804 | { | 804 | { |
805 | return( mTabControl->sizeHint() ); | 805 | return( mTabControl->sizeHint() ); |
806 | } | 806 | } |
807 | else if( mFace == Swallow ) | 807 | else if( mFace == Swallow ) |
808 | { | 808 | { |
809 | return( mSwallowPage->minimumSize() ); | 809 | return( mSwallowPage->minimumSize() ); |
810 | } | 810 | } |
811 | else if( mFace == Plain ) | 811 | else if( mFace == Plain ) |
812 | { | 812 | { |
813 | return( mPlainPage->sizeHint() ); | 813 | return( mPlainPage->sizeHint() ); |
814 | } | 814 | } |
815 | else | 815 | else |
816 | { | 816 | { |
817 | return( QSize( 100, 100 ) ); // Should never happen though. | 817 | return( QSize( 100, 100 ) ); // Should never happen though. |
818 | } | 818 | } |
819 | 819 | ||
820 | } | 820 | } |
821 | 821 | ||
822 | 822 | ||
823 | QSize OJanusWidget::sizeHint() const | 823 | QSize OJanusWidget::sizeHint() const |
824 | { | 824 | { |
825 | return( minimumSizeHint() ); | 825 | return( minimumSizeHint() ); |
826 | } | 826 | } |
827 | 827 | ||
828 | 828 | ||
829 | void OJanusWidget::setTreeListAutoResize( bool state ) | 829 | void OJanusWidget::setTreeListAutoResize( bool state ) |
830 | { | 830 | { |
831 | if( mFace == TreeList ) | 831 | if( mFace == TreeList ) |
832 | { | 832 | { |
833 | mTreeListResizeMode = state == false ? | 833 | mTreeListResizeMode = state == false ? |
834 | QSplitter::KeepSize : QSplitter::Stretch; | 834 | QSplitter::KeepSize : QSplitter::Stretch; |
835 | QSplitter *splitter = (QSplitter*)(mTreeList->parentWidget()); | 835 | QSplitter *splitter = (QSplitter*)(mTreeList->parentWidget()); |
836 | splitter->setResizeMode( mTreeList, mTreeListResizeMode ); | 836 | splitter->setResizeMode( mTreeList, mTreeListResizeMode ); |
837 | } | 837 | } |
838 | } | 838 | } |
839 | 839 | ||
840 | 840 | ||
841 | void OJanusWidget::setIconListAllVisible( bool state ) | 841 | void OJanusWidget::setIconListAllVisible( bool state ) |
842 | { | 842 | { |
843 | if( mFace == IconList ) | 843 | if( mFace == IconList ) |
844 | { | 844 | { |
845 | mIconList->setShowAll( state ); | 845 | mIconList->setShowAll( state ); |
846 | } | 846 | } |
847 | } | 847 | } |
848 | 848 | ||
849 | void OJanusWidget::setShowIconsInTreeList( bool state ) | 849 | void OJanusWidget::setShowIconsInTreeList( bool state ) |
850 | { | 850 | { |
851 | mShowIconsInTreeList = state; | 851 | mShowIconsInTreeList = state; |
852 | } | 852 | } |
853 | 853 | ||
854 | void OJanusWidget::setRootIsDecorated( bool state ) | 854 | void OJanusWidget::setRootIsDecorated( bool state ) |
855 | { | 855 | { |
856 | if( mFace == TreeList ) { | 856 | if( mFace == TreeList ) { |
857 | mTreeList->setRootIsDecorated(state); | 857 | mTreeList->setRootIsDecorated(state); |
858 | } | 858 | } |
859 | } | 859 | } |
860 | 860 | ||
861 | void OJanusWidget::unfoldTreeList( bool persist ) | 861 | void OJanusWidget::unfoldTreeList( bool persist ) |
862 | { | 862 | { |
863 | if( mFace == TreeList ) | 863 | if( mFace == TreeList ) |
864 | { | 864 | { |
865 | if( persist ) | 865 | if( persist ) |
866 | connect( mTreeList, SIGNAL( collapsed(QListViewItem*) ), this, SLOT( slotReopen(QListViewItem*) ) ); | 866 | connect( mTreeList, SIGNAL( collapsed(QListViewItem*) ), this, SLOT( slotReopen(QListViewItem*) ) ); |
867 | else | 867 | else |
868 | disconnect( mTreeList, SIGNAL( collapsed(QListViewItem*) ), this, SLOT( slotReopen(QListViewItem*) ) ); | 868 | disconnect( mTreeList, SIGNAL( collapsed(QListViewItem*) ), this, SLOT( slotReopen(QListViewItem*) ) ); |
869 | 869 | ||
870 | for( QListViewItem * item = mTreeList->firstChild(); item; item = item->itemBelow() ) | 870 | for( QListViewItem * item = mTreeList->firstChild(); item; item = item->itemBelow() ) |
871 | item->setOpen( true ); | 871 | item->setOpen( true ); |
872 | } | 872 | } |
873 | } | 873 | } |
874 | 874 | ||
875 | void OJanusWidget::showEvent( QShowEvent * ) | 875 | void OJanusWidget::showEvent( QShowEvent * ) |
876 | { | 876 | { |
877 | if( mFace == TreeList ) | 877 | if( mFace == TreeList ) |
878 | { | 878 | { |
879 | QSplitter *splitter = (QSplitter*)(mTreeList->parentWidget()); | 879 | QSplitter *splitter = (QSplitter*)(mTreeList->parentWidget()); |
880 | splitter->setResizeMode( mTreeList, mTreeListResizeMode ); | 880 | splitter->setResizeMode( mTreeList, mTreeListResizeMode ); |
881 | } | 881 | } |
882 | } | 882 | } |
883 | 883 | ||
884 | 884 | ||
885 | // | 885 | // |
886 | // 2000-13-02 Espen Sand | 886 | // 2000-13-02 Espen Sand |
887 | // It should be obvious that this eventfilter must only be | 887 | // It should be obvious that this eventfilter must only be |
888 | // be installed on the vertical scrollbar of the mIconList. | 888 | // be installed on the vertical scrollbar of the mIconList. |
889 | // | 889 | // |
890 | bool OJanusWidget::eventFilter( QObject *o, QEvent *e ) | 890 | bool OJanusWidget::eventFilter( QObject *o, QEvent *e ) |
891 | { | 891 | { |
892 | if( e->type() == QEvent::Show ) | 892 | if( e->type() == QEvent::Show ) |
893 | { | 893 | { |
894 | IconListItem *item = (IconListItem*)mIconList->item(0); | 894 | IconListItem *item = (IconListItem*)mIconList->item(0); |
895 | if( item != 0 ) | 895 | if( item != 0 ) |
896 | { | 896 | { |
897 | int lw = item->width( mIconList ); | 897 | int lw = item->width( mIconList ); |
898 | int sw = mIconList->verticalScrollBar()->sizeHint().width(); | 898 | int sw = mIconList->verticalScrollBar()->sizeHint().width(); |
899 | mIconList->setFixedWidth( lw+sw+mIconList->frameWidth()*2 ); | 899 | mIconList->setFixedWidth( lw+sw+mIconList->frameWidth()*2 ); |
900 | } | 900 | } |
901 | } | 901 | } |
902 | else if( e->type() == QEvent::Hide ) | 902 | else if( e->type() == QEvent::Hide ) |
903 | { | 903 | { |
904 | IconListItem *item = (IconListItem*)mIconList->item(0); | 904 | IconListItem *item = (IconListItem*)mIconList->item(0); |
905 | if( item != 0 ) | 905 | if( item != 0 ) |
906 | { | 906 | { |
907 | int lw = item->width( mIconList ); | 907 | int lw = item->width( mIconList ); |
908 | mIconList->setFixedWidth( lw+mIconList->frameWidth()*2 ); | 908 | mIconList->setFixedWidth( lw+mIconList->frameWidth()*2 ); |
909 | } | 909 | } |
910 | } | 910 | } |
911 | return QWidget::eventFilter( o, e ); | 911 | return QWidget::eventFilter( o, e ); |
912 | } | 912 | } |
913 | 913 | ||
914 | 914 | ||
915 | 915 | ||
916 | // | 916 | // |
917 | // Code for the icon list box | 917 | // Code for the icon list box |
918 | // | 918 | // |
919 | 919 | ||
920 | 920 | ||
921 | OJanusWidget::IconListBox::IconListBox( QWidget *parent, const char *name, | 921 | OJanusWidget::IconListBox::IconListBox( QWidget *parent, const char *name, |
922 | WFlags f ) | 922 | WFlags f ) |
923 | :QListBox( parent, name, f ), mShowAll(false), mHeightValid(false), | 923 | :QListBox( parent, name, f ), mShowAll(false), mHeightValid(false), |
924 | mWidthValid(false) | 924 | mWidthValid(false) |
925 | { | 925 | { |
926 | } | 926 | } |
927 | 927 | ||
928 | 928 | ||
929 | void OJanusWidget::IconListBox::updateMinimumHeight() | 929 | void OJanusWidget::IconListBox::updateMinimumHeight() |
930 | { | 930 | { |
931 | if( mShowAll == true && mHeightValid == false ) | 931 | if( mShowAll == true && mHeightValid == false ) |
932 | { | 932 | { |
933 | int h = frameWidth()*2; | 933 | int h = frameWidth()*2; |
934 | for( QListBoxItem *i = item(0); i != 0; i = i->next() ) | 934 | for( QListBoxItem *i = item(0); i != 0; i = i->next() ) |
935 | { | 935 | { |
936 | h += i->height( this ); | 936 | h += i->height( this ); |
937 | } | 937 | } |
938 | setMinimumHeight( h ); | 938 | setMinimumHeight( h ); |
939 | mHeightValid = true; | 939 | mHeightValid = true; |
940 | } | 940 | } |
941 | } | 941 | } |
942 | 942 | ||
943 | 943 | ||
944 | void OJanusWidget::IconListBox::updateWidth() | 944 | void OJanusWidget::IconListBox::updateWidth() |
945 | { | 945 | { |
946 | if( mWidthValid == false ) | 946 | if( mWidthValid == false ) |
947 | { | 947 | { |
948 | int maxWidth = 10; | 948 | int maxWidth = 10; |
949 | for( QListBoxItem *i = item(0); i != 0; i = i->next() ) | 949 | for( QListBoxItem *i = item(0); i != 0; i = i->next() ) |
950 | { | 950 | { |
951 | int w = ((IconListItem *)i)->width(this); | 951 | int w = ((IconListItem *)i)->width(this); |
952 | maxWidth = QMAX( w, maxWidth ); | 952 | maxWidth = QMAX( w, maxWidth ); |
953 | } | 953 | } |
954 | 954 | ||
955 | for( QListBoxItem *i = item(0); i != 0; i = i->next() ) | 955 | for( QListBoxItem *i = item(0); i != 0; i = i->next() ) |
956 | { | 956 | { |
957 | ((IconListItem *)i)->expandMinimumWidth( maxWidth ); | 957 | ((IconListItem *)i)->expandMinimumWidth( maxWidth ); |
958 | } | 958 | } |
959 | 959 | ||
960 | if( verticalScrollBar()->isVisible() ) | 960 | if( verticalScrollBar()->isVisible() ) |
961 | { | 961 | { |
962 | maxWidth += verticalScrollBar()->sizeHint().width(); | 962 | maxWidth += verticalScrollBar()->sizeHint().width(); |
963 | } | 963 | } |
964 | 964 | ||
965 | setFixedWidth( maxWidth + frameWidth()*2 ); | 965 | setFixedWidth( maxWidth + frameWidth()*2 ); |
966 | mWidthValid = true; | 966 | mWidthValid = true; |
967 | } | 967 | } |
968 | } | 968 | } |
969 | 969 | ||
970 | 970 | ||
971 | void OJanusWidget::IconListBox::invalidateHeight() | 971 | void OJanusWidget::IconListBox::invalidateHeight() |
972 | { | 972 | { |
973 | mHeightValid = false; | 973 | mHeightValid = false; |
974 | } | 974 | } |
975 | 975 | ||
976 | 976 | ||
977 | void OJanusWidget::IconListBox::invalidateWidth() | 977 | void OJanusWidget::IconListBox::invalidateWidth() |
978 | { | 978 | { |
979 | mWidthValid = false; | 979 | mWidthValid = false; |
980 | } | 980 | } |
981 | 981 | ||
982 | 982 | ||
983 | void OJanusWidget::IconListBox::setShowAll( bool showAll ) | 983 | void OJanusWidget::IconListBox::setShowAll( bool showAll ) |
984 | { | 984 | { |
985 | mShowAll = showAll; | 985 | mShowAll = showAll; |
986 | mHeightValid = false; | 986 | mHeightValid = false; |
987 | } | 987 | } |
988 | 988 | ||
989 | 989 | ||
990 | 990 | ||
991 | OJanusWidget::IconListItem::IconListItem( QListBox *listbox, const QPixmap &pixmap, | 991 | OJanusWidget::IconListItem::IconListItem( QListBox *listbox, const QPixmap &pixmap, |
992 | const QString &text ) | 992 | const QString &text ) |
993 | : QListBoxItem( listbox ) | 993 | : QListBoxItem( listbox ) |
994 | { | 994 | { |
995 | mPixmap = pixmap; | 995 | mPixmap = pixmap; |
996 | if( mPixmap.isNull() == true ) | 996 | if( mPixmap.isNull() == true ) |
997 | { | 997 | { |
998 | mPixmap = defaultPixmap(); | 998 | mPixmap = defaultPixmap(); |
999 | } | 999 | } |
1000 | setText( text ); | 1000 | setText( text ); |
1001 | mMinimumWidth = 0; | 1001 | mMinimumWidth = 0; |
1002 | } | 1002 | } |
1003 | 1003 | ||
1004 | 1004 | ||
1005 | int OJanusWidget::IconListItem::expandMinimumWidth( int width ) | 1005 | int OJanusWidget::IconListItem::expandMinimumWidth( int width ) |
1006 | { | 1006 | { |
1007 | mMinimumWidth = QMAX( mMinimumWidth, width ); | 1007 | mMinimumWidth = QMAX( mMinimumWidth, width ); |
1008 | return( mMinimumWidth ); | 1008 | return( mMinimumWidth ); |
1009 | } | 1009 | } |
1010 | 1010 | ||
1011 | 1011 | ||
1012 | const QPixmap &OJanusWidget::IconListItem::defaultPixmap() | 1012 | const QPixmap &OJanusWidget::IconListItem::defaultPixmap() |
1013 | { | 1013 | { |
1014 | static QPixmap *pix=0; | 1014 | static QPixmap *pix=0; |
1015 | if( pix == 0 ) | 1015 | if( pix == 0 ) |
1016 | { | 1016 | { |
1017 | pix = new QPixmap( 32, 32 ); | 1017 | pix = new QPixmap( 32, 32 ); |
1018 | QPainter p( pix ); | 1018 | QPainter p( pix ); |
1019 | p.eraseRect( 0, 0, pix->width(), pix->height() ); | 1019 | p.eraseRect( 0, 0, pix->width(), pix->height() ); |
1020 | p.setPen( Qt::red ); | 1020 | p.setPen( Qt::red ); |
1021 | p.drawRect ( 0, 0, pix->width(), pix->height() ); | 1021 | p.drawRect ( 0, 0, pix->width(), pix->height() ); |
1022 | p.end(); | 1022 | p.end(); |
1023 | 1023 | ||
1024 | QBitmap mask( pix->width(), pix->height(), true ); | 1024 | QBitmap mask( pix->width(), pix->height(), true ); |
1025 | mask.fill( Qt::black ); | 1025 | mask.fill( Qt::black ); |
1026 | p.begin( &mask ); | 1026 | p.begin( &mask ); |
1027 | p.setPen( Qt::white ); | 1027 | p.setPen( Qt::white ); |
1028 | p.drawRect ( 0, 0, pix->width(), pix->height() ); | 1028 | p.drawRect ( 0, 0, pix->width(), pix->height() ); |
1029 | p.end(); | 1029 | p.end(); |
1030 | 1030 | ||
1031 | pix->setMask( mask ); | 1031 | pix->setMask( mask ); |
1032 | } | 1032 | } |
1033 | return( *pix ); | 1033 | return( *pix ); |
1034 | } | 1034 | } |
1035 | 1035 | ||
1036 | 1036 | ||
1037 | void OJanusWidget::IconListItem::paint( QPainter *painter ) | 1037 | void OJanusWidget::IconListItem::paint( QPainter *painter ) |
1038 | { | 1038 | { |
1039 | QFontMetrics fm = painter->fontMetrics(); | 1039 | QFontMetrics fm = painter->fontMetrics(); |
1040 | //int wt = fm.boundingRect(text()).width(); | 1040 | //int wt = fm.boundingRect(text()).width(); |
1041 | int wp = mPixmap.width(); | 1041 | int wp = mPixmap.width(); |
1042 | int ht = fm.lineSpacing(); | 1042 | int ht = fm.lineSpacing(); |
1043 | int hp = mPixmap.height(); | 1043 | int hp = mPixmap.height(); |
1044 | 1044 | ||
1045 | painter->drawPixmap( (mMinimumWidth-wp)/2, 5, mPixmap ); | 1045 | painter->drawPixmap( (mMinimumWidth-wp)/2, 5, mPixmap ); |
1046 | if( text().isEmpty() == false ) | 1046 | if( text().isEmpty() == false ) |
1047 | { | 1047 | { |
1048 | painter->drawText( 0, hp+7, mMinimumWidth, ht, Qt::AlignCenter, text() ); | 1048 | painter->drawText( 0, hp+7, mMinimumWidth, ht, Qt::AlignCenter, text() ); |
1049 | } | 1049 | } |
1050 | } | 1050 | } |
1051 | 1051 | ||
1052 | int OJanusWidget::IconListItem::height( const QListBox *lb ) const | 1052 | int OJanusWidget::IconListItem::height( const QListBox *lb ) const |
1053 | { | 1053 | { |
1054 | if( text().isEmpty() == true ) | 1054 | if( text().isEmpty() == true ) |
1055 | { | 1055 | { |
1056 | return( mPixmap.height() ); | 1056 | return( mPixmap.height() ); |
1057 | } | 1057 | } |
1058 | else | 1058 | else |
1059 | { | 1059 | { |
1060 | return( mPixmap.height() + lb->fontMetrics().lineSpacing()+10 ); | 1060 | return( mPixmap.height() + lb->fontMetrics().lineSpacing()+10 ); |
1061 | } | 1061 | } |
1062 | } | 1062 | } |
1063 | 1063 | ||
1064 | 1064 | ||
1065 | int OJanusWidget::IconListItem::width( const QListBox *lb ) const | 1065 | int OJanusWidget::IconListItem::width( const QListBox *lb ) const |
1066 | { | 1066 | { |
1067 | int wt = lb->fontMetrics().boundingRect(text()).width()+10; | 1067 | int wt = lb->fontMetrics().boundingRect(text()).width()+10; |
1068 | int wp = mPixmap.width() + 10; | 1068 | int wp = mPixmap.width() + 10; |
1069 | int w = QMAX( wt, wp ); | 1069 | int w = QMAX( wt, wp ); |
1070 | return( QMAX( w, mMinimumWidth ) ); | 1070 | return( QMAX( w, mMinimumWidth ) ); |
1071 | } | 1071 | } |
1072 | 1072 | ||
1073 | // Just remove the page from our stack of widgets. Do not modify the given widget in | 1073 | // Just remove the page from our stack of widgets. Do not modify the given widget in |
1074 | // any way. No memory leak occurs as parent is not changed. | 1074 | // any way. No memory leak occurs as parent is not changed. |
1075 | // Make this virtual in KDE 4.0. | 1075 | // Make this virtual in KDE 4.0. |
1076 | // Ravikiran Rajagopal <ravi@ee.eng.ohio-state.edu> | 1076 | // Ravikiran Rajagopal <ravi@ee.eng.ohio-state.edu> |
1077 | void OJanusWidget::removePage( QWidget *page ) | 1077 | void OJanusWidget::removePage( QWidget *page ) |
1078 | { | 1078 | { |
1079 | if (!mPageList || !mPageList->containsRef(page)) | 1079 | if (!mPageList || !mPageList->containsRef(page)) |
1080 | return; | 1080 | return; |
1081 | 1081 | ||
1082 | int index = mPageList->findRef( page ); | 1082 | int index = mPageList->findRef( page ); |
1083 | if ( mTitleList ) | 1083 | if ( mTitleList ) |
1084 | mTitleList->remove(mTitleList->at(index)); | 1084 | mTitleList->remove(mTitleList->at(index)); |
1085 | 1085 | ||
1086 | mPageList->removeRef(page); | 1086 | mPageList->removeRef(page); |
1087 | 1087 | ||
1088 | if ( mFace == TreeList ) | 1088 | if ( mFace == TreeList ) |
1089 | { | 1089 | { |
1090 | QMap<QListViewItem*, QWidget *>::Iterator i; | 1090 | QMap<QListViewItem*, QWidget *>::Iterator i; |
1091 | for( i = mTreeListToPageStack.begin(); i != mTreeListToPageStack.end(); ++i ) | 1091 | for( i = mTreeListToPageStack.begin(); i != mTreeListToPageStack.end(); ++i ) |
1092 | if (i.data()==page) | 1092 | if (i.data()==page) |
1093 | { | 1093 | { |
1094 | delete i.key(); | 1094 | delete i.key(); |
1095 | mPageStack->removeWidget(page); | 1095 | mPageStack->removeWidget(page); |
1096 | mTreeListToPageStack.remove(i); | 1096 | mTreeListToPageStack.remove(i); |
1097 | break; | 1097 | break; |
1098 | } | 1098 | } |
1099 | } | 1099 | } |
1100 | else if ( mFace == IconList ) | 1100 | else if ( mFace == IconList ) |
1101 | { | 1101 | { |
1102 | QMap<QListBoxItem*, QWidget *>::Iterator i; | 1102 | QMap<QListBoxItem*, QWidget *>::Iterator i; |
1103 | for( i = mIconListToPageStack.begin(); i != mIconListToPageStack.end(); ++i ) | 1103 | for( i = mIconListToPageStack.begin(); i != mIconListToPageStack.end(); ++i ) |
1104 | if (i.data()==page) | 1104 | if (i.data()==page) |
1105 | { | 1105 | { |
1106 | delete i.key(); | 1106 | delete i.key(); |
1107 | mPageStack->removeWidget(page); | 1107 | mPageStack->removeWidget(page); |
1108 | mIconListToPageStack.remove(i); | 1108 | mIconListToPageStack.remove(i); |
1109 | break; | 1109 | break; |
1110 | } | 1110 | } |
1111 | } | 1111 | } |
1112 | else // Tabbed | 1112 | else // Tabbed |
1113 | { | 1113 | { |
1114 | mTabControl->removePage(page); | 1114 | mTabControl->removePage(page); |
1115 | } | 1115 | } |
1116 | } | 1116 | } |
diff --git a/library/lightstyle.cpp b/library/lightstyle.cpp index f18bdca..3bd1623 100644 --- a/library/lightstyle.cpp +++ b/library/lightstyle.cpp | |||
@@ -1,818 +1,818 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | #include "lightstyle.h" | 20 | #include "lightstyle.h" |
21 | 21 | ||
22 | #if QT_VERSION < 300 | 22 | #if QT_VERSION < 0x030000 |
23 | 23 | ||
24 | #define INCLUDE_MENUITEM_DEF | 24 | #define INCLUDE_MENUITEM_DEF |
25 | #include "qmenubar.h" | 25 | #include "qmenubar.h" |
26 | #include "qapplication.h" | 26 | #include "qapplication.h" |
27 | #include "qpainter.h" | 27 | #include "qpainter.h" |
28 | #include "qpalette.h" | 28 | #include "qpalette.h" |
29 | #include "qframe.h" | 29 | #include "qframe.h" |
30 | #include "qpushbutton.h" | 30 | #include "qpushbutton.h" |
31 | #include "qdrawutil.h" | 31 | #include "qdrawutil.h" |
32 | #include "qscrollbar.h" | 32 | #include "qscrollbar.h" |
33 | #include "qtabbar.h" | 33 | #include "qtabbar.h" |
34 | #include "qguardedptr.h" | 34 | #include "qguardedptr.h" |
35 | #include "qlayout.h" | 35 | #include "qlayout.h" |
36 | #include "qlineedit.h" | 36 | #include "qlineedit.h" |
37 | 37 | ||
38 | 38 | ||
39 | class LightStylePrivate | 39 | class LightStylePrivate |
40 | { | 40 | { |
41 | public: | 41 | public: |
42 | LightStylePrivate() | 42 | LightStylePrivate() |
43 | : hoverWidget(0), ref(1), savePalette(0) | 43 | : hoverWidget(0), ref(1), savePalette(0) |
44 | { | 44 | { |
45 | } | 45 | } |
46 | 46 | ||
47 | QGuardedPtr<QWidget> hoverWidget; | 47 | QGuardedPtr<QWidget> hoverWidget; |
48 | QPalette oldPalette, hoverPalette; | 48 | QPalette oldPalette, hoverPalette; |
49 | int ref; | 49 | int ref; |
50 | QPoint mousePos; | 50 | QPoint mousePos; |
51 | QPalette *savePalette; | 51 | QPalette *savePalette; |
52 | }; | 52 | }; |
53 | 53 | ||
54 | 54 | ||
55 | static LightStylePrivate *singleton = 0; | 55 | static LightStylePrivate *singleton = 0; |
56 | 56 | ||
57 | 57 | ||
58 | LightStyle::LightStyle() | 58 | LightStyle::LightStyle() |
59 | : QWindowsStyle() | 59 | : QWindowsStyle() |
60 | { | 60 | { |
61 | if (! singleton) { | 61 | if (! singleton) { |
62 | singleton = new LightStylePrivate; | 62 | singleton = new LightStylePrivate; |
63 | 63 | ||
64 | QPalette pal = QApplication::palette(); | 64 | QPalette pal = QApplication::palette(); |
65 | singleton->oldPalette = pal; | 65 | singleton->oldPalette = pal; |
66 | 66 | ||
67 | QColor bg = pal.color(QPalette::Active, QColorGroup::Background); | 67 | QColor bg = pal.color(QPalette::Active, QColorGroup::Background); |
68 | QColor prelight; | 68 | QColor prelight; |
69 | 69 | ||
70 | if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128) | 70 | if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128) |
71 | prelight = pal.color(QPalette::Active, | 71 | prelight = pal.color(QPalette::Active, |
72 | QColorGroup::Background).light(110); | 72 | QColorGroup::Background).light(110); |
73 | else | 73 | else |
74 | prelight = pal.color(QPalette::Active, | 74 | prelight = pal.color(QPalette::Active, |
75 | QColorGroup::Background).light(120); | 75 | QColorGroup::Background).light(120); |
76 | 76 | ||
77 | QColorGroup active2(pal.color(QPalette::Active, | 77 | QColorGroup active2(pal.color(QPalette::Active, |
78 | QColorGroup::Foreground), // foreground | 78 | QColorGroup::Foreground), // foreground |
79 | prelight, // button | 79 | prelight, // button |
80 | prelight.light(), // light | 80 | prelight.light(), // light |
81 | prelight.dark(), // dark | 81 | prelight.dark(), // dark |
82 | prelight.dark(120), // mid | 82 | prelight.dark(120), // mid |
83 | pal.color(QPalette::Active, | 83 | pal.color(QPalette::Active, |
84 | QColorGroup::Text), // text | 84 | QColorGroup::Text), // text |
85 | pal.color(QPalette::Active, | 85 | pal.color(QPalette::Active, |
86 | QColorGroup::BrightText), // bright text | 86 | QColorGroup::BrightText), // bright text |
87 | pal.color(QPalette::Active, | 87 | pal.color(QPalette::Active, |
88 | QColorGroup::Base), // base | 88 | QColorGroup::Base), // base |
89 | bg); // background | 89 | bg); // background |
90 | active2.setColor(QColorGroup::Highlight, | 90 | active2.setColor(QColorGroup::Highlight, |
91 | pal.color(QPalette::Active, QColorGroup::Highlight)); | 91 | pal.color(QPalette::Active, QColorGroup::Highlight)); |
92 | 92 | ||
93 | singleton->hoverPalette = pal; | 93 | singleton->hoverPalette = pal; |
94 | singleton->hoverPalette.setActive(active2); | 94 | singleton->hoverPalette.setActive(active2); |
95 | singleton->hoverPalette.setInactive(active2); | 95 | singleton->hoverPalette.setInactive(active2); |
96 | } else | 96 | } else |
97 | singleton->ref++; | 97 | singleton->ref++; |
98 | } | 98 | } |
99 | 99 | ||
100 | 100 | ||
101 | LightStyle::~LightStyle() | 101 | LightStyle::~LightStyle() |
102 | { | 102 | { |
103 | if (singleton && singleton->ref-- <= 0) { | 103 | if (singleton && singleton->ref-- <= 0) { |
104 | delete singleton; | 104 | delete singleton; |
105 | singleton = 0; | 105 | singleton = 0; |
106 | } | 106 | } |
107 | } | 107 | } |
108 | 108 | ||
109 | 109 | ||
110 | QSize LightStyle::scrollBarExtent() const | 110 | QSize LightStyle::scrollBarExtent() const |
111 | { | 111 | { |
112 | return QSize(12 + defaultFrameWidth(), 12 + defaultFrameWidth()); | 112 | return QSize(12 + defaultFrameWidth(), 12 + defaultFrameWidth()); |
113 | } | 113 | } |
114 | 114 | ||
115 | 115 | ||
116 | int LightStyle::buttonDefaultIndicatorWidth() const | 116 | int LightStyle::buttonDefaultIndicatorWidth() const |
117 | { | 117 | { |
118 | return 2; | 118 | return 2; |
119 | } | 119 | } |
120 | 120 | ||
121 | 121 | ||
122 | int LightStyle::sliderThickness() const | 122 | int LightStyle::sliderThickness() const |
123 | { | 123 | { |
124 | return 16; | 124 | return 16; |
125 | } | 125 | } |
126 | 126 | ||
127 | int LightStyle::sliderLength() const | 127 | int LightStyle::sliderLength() const |
128 | { | 128 | { |
129 | return 13; | 129 | return 13; |
130 | } | 130 | } |
131 | 131 | ||
132 | 132 | ||
133 | int LightStyle::buttonMargin() const | 133 | int LightStyle::buttonMargin() const |
134 | { | 134 | { |
135 | return 4; | 135 | return 4; |
136 | } | 136 | } |
137 | 137 | ||
138 | 138 | ||
139 | QSize LightStyle::exclusiveIndicatorSize() const | 139 | QSize LightStyle::exclusiveIndicatorSize() const |
140 | { | 140 | { |
141 | return QSize(13, 13); | 141 | return QSize(13, 13); |
142 | } | 142 | } |
143 | 143 | ||
144 | 144 | ||
145 | int LightStyle::defaultFrameWidth() const | 145 | int LightStyle::defaultFrameWidth() const |
146 | { | 146 | { |
147 | return 2; | 147 | return 2; |
148 | } | 148 | } |
149 | 149 | ||
150 | 150 | ||
151 | QSize LightStyle::indicatorSize() const | 151 | QSize LightStyle::indicatorSize() const |
152 | { | 152 | { |
153 | return QSize(13, 13); | 153 | return QSize(13, 13); |
154 | } | 154 | } |
155 | 155 | ||
156 | 156 | ||
157 | void LightStyle::polish(QWidget *widget) | 157 | void LightStyle::polish(QWidget *widget) |
158 | { | 158 | { |
159 | if (widget->inherits("QPushButton")) | 159 | if (widget->inherits("QPushButton")) |
160 | widget->installEventFilter(this); | 160 | widget->installEventFilter(this); |
161 | 161 | ||
162 | #if QT_VERSION >= 300 | 162 | #if QT_VERSION >= 0x030000 |
163 | if (widget->inherits("QLineEdit")) { | 163 | if (widget->inherits("QLineEdit")) { |
164 | QLineEdit *lineedit = (QLineEdit *) widget; | 164 | QLineEdit *lineedit = (QLineEdit *) widget; |
165 | lineedit->setFrameShape(QFrame::StyledPanel); | 165 | lineedit->setFrameShape(QFrame::StyledPanel); |
166 | lineedit->setLineWidth(2); | 166 | lineedit->setLineWidth(2); |
167 | } | 167 | } |
168 | #endif | 168 | #endif |
169 | 169 | ||
170 | QWindowsStyle::polish(widget); | 170 | QWindowsStyle::polish(widget); |
171 | } | 171 | } |
172 | 172 | ||
173 | 173 | ||
174 | void LightStyle::unPolish(QWidget *widget) | 174 | void LightStyle::unPolish(QWidget *widget) |
175 | { | 175 | { |
176 | if (widget->inherits("QPushButton")) | 176 | if (widget->inherits("QPushButton")) |
177 | widget->removeEventFilter(this); | 177 | widget->removeEventFilter(this); |
178 | 178 | ||
179 | #if QT_VERSION >= 300 | 179 | #if QT_VERSION >= 0x030000 |
180 | if (widget->inherits("QLineEdit")) { | 180 | if (widget->inherits("QLineEdit")) { |
181 | QLineEdit *lineedit = (QLineEdit *) widget; | 181 | QLineEdit *lineedit = (QLineEdit *) widget; |
182 | lineedit->setLineWidth(1); | 182 | lineedit->setLineWidth(1); |
183 | lineedit->setFrameShape(QFrame::WinPanel); | 183 | lineedit->setFrameShape(QFrame::WinPanel); |
184 | } | 184 | } |
185 | #endif | 185 | #endif |
186 | 186 | ||
187 | QWindowsStyle::unPolish(widget); | 187 | QWindowsStyle::unPolish(widget); |
188 | } | 188 | } |
189 | 189 | ||
190 | 190 | ||
191 | void LightStyle::polish(QApplication *app) | 191 | void LightStyle::polish(QApplication *app) |
192 | { | 192 | { |
193 | QPalette pal = app->palette(); | 193 | QPalette pal = app->palette(); |
194 | 194 | ||
195 | QColorGroup active(pal.color(QPalette::Active, | 195 | QColorGroup active(pal.color(QPalette::Active, |
196 | QColorGroup::Foreground), // foreground | 196 | QColorGroup::Foreground), // foreground |
197 | pal.color(QPalette::Active, | 197 | pal.color(QPalette::Active, |
198 | QColorGroup::Button), // button | 198 | QColorGroup::Button), // button |
199 | pal.color(QPalette::Active, | 199 | pal.color(QPalette::Active, |
200 | QColorGroup::Background).light(), // light | 200 | QColorGroup::Background).light(), // light |
201 | pal.color(QPalette::Active, | 201 | pal.color(QPalette::Active, |
202 | QColorGroup::Background).dark(175), // dark | 202 | QColorGroup::Background).dark(175), // dark |
203 | pal.color(QPalette::Active, | 203 | pal.color(QPalette::Active, |
204 | QColorGroup::Background).dark(110), // mid | 204 | QColorGroup::Background).dark(110), // mid |
205 | pal.color(QPalette::Active, | 205 | pal.color(QPalette::Active, |
206 | QColorGroup::Text), // text | 206 | QColorGroup::Text), // text |
207 | pal.color(QPalette::Active, | 207 | pal.color(QPalette::Active, |
208 | QColorGroup::BrightText), // bright text | 208 | QColorGroup::BrightText), // bright text |
209 | pal.color(QPalette::Active, | 209 | pal.color(QPalette::Active, |
210 | QColorGroup::Base), // base | 210 | QColorGroup::Base), // base |
211 | pal.color(QPalette::Active, | 211 | pal.color(QPalette::Active, |
212 | QColorGroup::Background)), // background | 212 | QColorGroup::Background)), // background |
213 | 213 | ||
214 | 214 | ||
215 | disabled(pal.color(QPalette::Disabled, | 215 | disabled(pal.color(QPalette::Disabled, |
216 | QColorGroup::Foreground), // foreground | 216 | QColorGroup::Foreground), // foreground |
217 | pal.color(QPalette::Disabled, | 217 | pal.color(QPalette::Disabled, |
218 | QColorGroup::Button), // button | 218 | QColorGroup::Button), // button |
219 | pal.color(QPalette::Disabled, | 219 | pal.color(QPalette::Disabled, |
220 | QColorGroup::Background).light(), // light | 220 | QColorGroup::Background).light(), // light |
221 | pal.color(QPalette::Disabled, | 221 | pal.color(QPalette::Disabled, |
222 | QColorGroup::Background).dark(), // dark | 222 | QColorGroup::Background).dark(), // dark |
223 | pal.color(QPalette::Disabled, | 223 | pal.color(QPalette::Disabled, |
224 | QColorGroup::Background).dark(110), // mid | 224 | QColorGroup::Background).dark(110), // mid |
225 | pal.color(QPalette::Disabled, | 225 | pal.color(QPalette::Disabled, |
226 | QColorGroup::Text), // text | 226 | QColorGroup::Text), // text |
227 | pal.color(QPalette::Disabled, | 227 | pal.color(QPalette::Disabled, |
228 | QColorGroup::BrightText), // bright text | 228 | QColorGroup::BrightText), // bright text |
229 | pal.color(QPalette::Disabled, | 229 | pal.color(QPalette::Disabled, |
230 | QColorGroup::Base), // base | 230 | QColorGroup::Base), // base |
231 | pal.color(QPalette::Disabled, | 231 | pal.color(QPalette::Disabled, |
232 | QColorGroup::Background)); // background | 232 | QColorGroup::Background)); // background |
233 | 233 | ||
234 | active.setColor(QColorGroup::Highlight, | 234 | active.setColor(QColorGroup::Highlight, |
235 | pal.color(QPalette::Active, QColorGroup::Highlight)); | 235 | pal.color(QPalette::Active, QColorGroup::Highlight)); |
236 | disabled.setColor(QColorGroup::Highlight, | 236 | disabled.setColor(QColorGroup::Highlight, |
237 | pal.color(QPalette::Disabled, QColorGroup::Highlight)); | 237 | pal.color(QPalette::Disabled, QColorGroup::Highlight)); |
238 | 238 | ||
239 | active.setColor(QColorGroup::HighlightedText, | 239 | active.setColor(QColorGroup::HighlightedText, |
240 | pal.color(QPalette::Active, QColorGroup::HighlightedText)); | 240 | pal.color(QPalette::Active, QColorGroup::HighlightedText)); |
241 | disabled.setColor(QColorGroup::HighlightedText, | 241 | disabled.setColor(QColorGroup::HighlightedText, |
242 | pal.color(QPalette::Disabled, QColorGroup::HighlightedText)); | 242 | pal.color(QPalette::Disabled, QColorGroup::HighlightedText)); |
243 | 243 | ||
244 | pal.setActive(active); | 244 | pal.setActive(active); |
245 | pal.setInactive(active); | 245 | pal.setInactive(active); |
246 | pal.setDisabled(disabled); | 246 | pal.setDisabled(disabled); |
247 | 247 | ||
248 | singleton->oldPalette = pal; | 248 | singleton->oldPalette = pal; |
249 | 249 | ||
250 | QColor bg = pal.color(QPalette::Active, QColorGroup::Background); | 250 | QColor bg = pal.color(QPalette::Active, QColorGroup::Background); |
251 | QColor prelight; | 251 | QColor prelight; |
252 | 252 | ||
253 | if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128) | 253 | if ( (bg.red() + bg.green() + bg.blue()) / 3 > 128) |
254 | prelight = pal.color(QPalette::Active, | 254 | prelight = pal.color(QPalette::Active, |
255 | QColorGroup::Background).light(110); | 255 | QColorGroup::Background).light(110); |
256 | else | 256 | else |
257 | prelight = pal.color(QPalette::Active, | 257 | prelight = pal.color(QPalette::Active, |
258 | QColorGroup::Background).light(120); | 258 | QColorGroup::Background).light(120); |
259 | 259 | ||
260 | QColorGroup active2(pal.color(QPalette::Active, | 260 | QColorGroup active2(pal.color(QPalette::Active, |
261 | QColorGroup::Foreground), // foreground | 261 | QColorGroup::Foreground), // foreground |
262 | prelight, // button | 262 | prelight, // button |
263 | prelight.light(), // light | 263 | prelight.light(), // light |
264 | prelight.dark(), // dark | 264 | prelight.dark(), // dark |
265 | prelight.dark(120), // mid | 265 | prelight.dark(120), // mid |
266 | pal.color(QPalette::Active, | 266 | pal.color(QPalette::Active, |
267 | QColorGroup::Text), // text | 267 | QColorGroup::Text), // text |
268 | pal.color(QPalette::Active, | 268 | pal.color(QPalette::Active, |
269 | QColorGroup::BrightText), // bright text | 269 | QColorGroup::BrightText), // bright text |
270 | pal.color(QPalette::Active, | 270 | pal.color(QPalette::Active, |
271 | QColorGroup::Base), // base | 271 | QColorGroup::Base), // base |
272 | bg); // background | 272 | bg); // background |
273 | active2.setColor(QColorGroup::Highlight, | 273 | active2.setColor(QColorGroup::Highlight, |
274 | pal.color(QPalette::Active, QColorGroup::Highlight)); | 274 | pal.color(QPalette::Active, QColorGroup::Highlight)); |
275 | 275 | ||
276 | singleton->hoverPalette = pal; | 276 | singleton->hoverPalette = pal; |
277 | singleton->hoverPalette.setActive(active2); | 277 | singleton->hoverPalette.setActive(active2); |
278 | singleton->hoverPalette.setInactive(active2); | 278 | singleton->hoverPalette.setInactive(active2); |
279 | 279 | ||
280 | app->setPalette(pal); | 280 | app->setPalette(pal); |
281 | } | 281 | } |
282 | 282 | ||
283 | 283 | ||
284 | void LightStyle::unPolish(QApplication *app) | 284 | void LightStyle::unPolish(QApplication *app) |
285 | { | 285 | { |
286 | app->setPalette(singleton->oldPalette); | 286 | app->setPalette(singleton->oldPalette); |
287 | } | 287 | } |
288 | 288 | ||
289 | 289 | ||
290 | void LightStyle::polishPopupMenu(QPopupMenu *menu) | 290 | void LightStyle::polishPopupMenu(QPopupMenu *menu) |
291 | { | 291 | { |
292 | menu->setMouseTracking(TRUE); | 292 | menu->setMouseTracking(TRUE); |
293 | } | 293 | } |
294 | 294 | ||
295 | 295 | ||
296 | void LightStyle::drawPushButton(QPushButton *button, QPainter *p) | 296 | void LightStyle::drawPushButton(QPushButton *button, QPainter *p) |
297 | { | 297 | { |
298 | int x1, y1, x2, y2; | 298 | int x1, y1, x2, y2; |
299 | button->rect().coords(&x1, &y1, &x2, &y2); | 299 | button->rect().coords(&x1, &y1, &x2, &y2); |
300 | 300 | ||
301 | if (button->isDefault()) { | 301 | if (button->isDefault()) { |
302 | p->save(); | 302 | p->save(); |
303 | p->setPen(button->palette().active().color(QColorGroup::Highlight)); | 303 | p->setPen(button->palette().active().color(QColorGroup::Highlight)); |
304 | p->setBrush(button->palette().active().brush(QColorGroup::Highlight)); | 304 | p->setBrush(button->palette().active().brush(QColorGroup::Highlight)); |
305 | p->drawRoundRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 15, 15); | 305 | p->drawRoundRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 15, 15); |
306 | p->restore(); | 306 | p->restore(); |
307 | } | 307 | } |
308 | 308 | ||
309 | if (button->isDefault() || button->autoDefault()) { | 309 | if (button->isDefault() || button->autoDefault()) { |
310 | x1 += buttonDefaultIndicatorWidth(); | 310 | x1 += buttonDefaultIndicatorWidth(); |
311 | y1 += buttonDefaultIndicatorWidth(); | 311 | y1 += buttonDefaultIndicatorWidth(); |
312 | x2 -= buttonDefaultIndicatorWidth(); | 312 | x2 -= buttonDefaultIndicatorWidth(); |
313 | y2 -= buttonDefaultIndicatorWidth(); | 313 | y2 -= buttonDefaultIndicatorWidth(); |
314 | 314 | ||
315 | if (button->isDefault()) { | 315 | if (button->isDefault()) { |
316 | QPointArray pa(8); | 316 | QPointArray pa(8); |
317 | pa.setPoint(0, x1 + 2, y1 ); | 317 | pa.setPoint(0, x1 + 2, y1 ); |
318 | pa.setPoint(1, x2 - 1, y1 ); | 318 | pa.setPoint(1, x2 - 1, y1 ); |
319 | pa.setPoint(2, x2 + 1, y1 + 2); | 319 | pa.setPoint(2, x2 + 1, y1 + 2); |
320 | pa.setPoint(3, x2 + 1, y2 - 2); | 320 | pa.setPoint(3, x2 + 1, y2 - 2); |
321 | pa.setPoint(4, x2 - 2, y2 + 1); | 321 | pa.setPoint(4, x2 - 2, y2 + 1); |
322 | pa.setPoint(5, x1 + 2, y2 + 1); | 322 | pa.setPoint(5, x1 + 2, y2 + 1); |
323 | pa.setPoint(6, x1, y2 - 1); | 323 | pa.setPoint(6, x1, y2 - 1); |
324 | pa.setPoint(7, x1, y1 + 2); | 324 | pa.setPoint(7, x1, y1 + 2); |
325 | QRegion r(pa); | 325 | QRegion r(pa); |
326 | p->setClipRegion(r); | 326 | p->setClipRegion(r); |
327 | } | 327 | } |
328 | } | 328 | } |
329 | 329 | ||
330 | QBrush fill; | 330 | QBrush fill; |
331 | if (button->isDown() || button->isOn()) | 331 | if (button->isDown() || button->isOn()) |
332 | fill = button->colorGroup().brush(QColorGroup::Mid); | 332 | fill = button->colorGroup().brush(QColorGroup::Mid); |
333 | else | 333 | else |
334 | fill = button->colorGroup().brush(QColorGroup::Button); | 334 | fill = button->colorGroup().brush(QColorGroup::Button); |
335 | 335 | ||
336 | if ( !button->isFlat() || button->isOn() || button->isDown() ) | 336 | if ( !button->isFlat() || button->isOn() || button->isDown() ) |
337 | drawButton(p, x1, y1, x2 - x1 + 1, y2 - y1 + 1, | 337 | drawButton(p, x1, y1, x2 - x1 + 1, y2 - y1 + 1, |
338 | button->colorGroup(), button->isOn() || button->isDown(), &fill); | 338 | button->colorGroup(), button->isOn() || button->isDown(), &fill); |
339 | } | 339 | } |
340 | 340 | ||
341 | 341 | ||
342 | void LightStyle::drawButton(QPainter *p, int x, int y, int w, int h, | 342 | void LightStyle::drawButton(QPainter *p, int x, int y, int w, int h, |
343 | const QColorGroup &g, | 343 | const QColorGroup &g, |
344 | bool sunken, const QBrush *fill) | 344 | bool sunken, const QBrush *fill) |
345 | { | 345 | { |
346 | p->save(); | 346 | p->save(); |
347 | if ( fill ) | 347 | if ( fill ) |
348 | p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill); | 348 | p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill); |
349 | else | 349 | else |
350 | p->fillRect(x + 2, y + 2, w - 4, h - 4, | 350 | p->fillRect(x + 2, y + 2, w - 4, h - 4, |
351 | QBrush(sunken ? g.mid() : g.button())); | 351 | QBrush(sunken ? g.mid() : g.button())); |
352 | 352 | ||
353 | // frame | 353 | // frame |
354 | p->setPen(g.dark()); | 354 | p->setPen(g.dark()); |
355 | p->drawLine(x, y + 2, x, y + h - 3); // left | 355 | p->drawLine(x, y + 2, x, y + h - 3); // left |
356 | p->drawLine(x + 2, y, x + w - 3, y); // top | 356 | p->drawLine(x + 2, y, x + w - 3, y); // top |
357 | p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right | 357 | p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right |
358 | p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom | 358 | p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom |
359 | p->drawPoint(x + 1, y + 1); | 359 | p->drawPoint(x + 1, y + 1); |
360 | p->drawPoint(x + 1, y + h - 2); | 360 | p->drawPoint(x + 1, y + h - 2); |
361 | p->drawPoint(x + w - 2, y + 1); | 361 | p->drawPoint(x + w - 2, y + 1); |
362 | p->drawPoint(x + w - 2, y + h - 2); | 362 | p->drawPoint(x + w - 2, y + h - 2); |
363 | 363 | ||
364 | // bevel | 364 | // bevel |
365 | if (sunken) | 365 | if (sunken) |
366 | p->setPen(g.mid()); | 366 | p->setPen(g.mid()); |
367 | else | 367 | else |
368 | p->setPen(g.light()); | 368 | p->setPen(g.light()); |
369 | 369 | ||
370 | p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left | 370 | p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left |
371 | p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top | 371 | p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top |
372 | 372 | ||
373 | if (sunken) | 373 | if (sunken) |
374 | p->setPen(g.light()); | 374 | p->setPen(g.light()); |
375 | else | 375 | else |
376 | p->setPen(g.mid()); | 376 | p->setPen(g.mid()); |
377 | 377 | ||
378 | p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1 | 378 | p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1 |
379 | p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1 | 379 | p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1 |
380 | 380 | ||
381 | p->restore(); | 381 | p->restore(); |
382 | } | 382 | } |
383 | 383 | ||
384 | 384 | ||
385 | void LightStyle::drawBevelButton(QPainter *p, int x, int y, int w, int h, | 385 | void LightStyle::drawBevelButton(QPainter *p, int x, int y, int w, int h, |
386 | const QColorGroup &g, | 386 | const QColorGroup &g, |
387 | bool sunken, const QBrush *fill) | 387 | bool sunken, const QBrush *fill) |
388 | { | 388 | { |
389 | drawButton(p, x, y, w, h, g, sunken, fill); | 389 | drawButton(p, x, y, w, h, g, sunken, fill); |
390 | } | 390 | } |
391 | 391 | ||
392 | 392 | ||
393 | void LightStyle::getButtonShift(int &x, int &y) const | 393 | void LightStyle::getButtonShift(int &x, int &y) const |
394 | { | 394 | { |
395 | x = y = 0; | 395 | x = y = 0; |
396 | } | 396 | } |
397 | 397 | ||
398 | 398 | ||
399 | void LightStyle::drawComboButton(QPainter *p, int x, int y, int w, int h, | 399 | void LightStyle::drawComboButton(QPainter *p, int x, int y, int w, int h, |
400 | const QColorGroup &g, bool, | 400 | const QColorGroup &g, bool, |
401 | bool editable, bool, | 401 | bool editable, bool, |
402 | const QBrush *fill) | 402 | const QBrush *fill) |
403 | { | 403 | { |
404 | drawButton(p, x, y, w, h, g, FALSE, fill); | 404 | drawButton(p, x, y, w, h, g, FALSE, fill); |
405 | 405 | ||
406 | if (editable) { | 406 | if (editable) { |
407 | QRect r = comboButtonRect(x, y, w, h); | 407 | QRect r = comboButtonRect(x, y, w, h); |
408 | qDrawShadePanel(p, r.x() - 1, r.y() - 1, | 408 | qDrawShadePanel(p, r.x() - 1, r.y() - 1, |
409 | r.width() + defaultFrameWidth(), | 409 | r.width() + defaultFrameWidth(), |
410 | r.height() + defaultFrameWidth(), | 410 | r.height() + defaultFrameWidth(), |
411 | g, TRUE); | 411 | g, TRUE); |
412 | } | 412 | } |
413 | 413 | ||
414 | int indent = ((y + h) / 2) - 3; | 414 | int indent = ((y + h) / 2) - 3; |
415 | int xpos = x; | 415 | int xpos = x; |
416 | 416 | ||
417 | #if QT_VERSION >= 300 | 417 | #if QT_VERSION >= 0x030000 |
418 | if( QApplication::reverseLayout() ) | 418 | if( QApplication::reverseLayout() ) |
419 | xpos += indent; | 419 | xpos += indent; |
420 | else | 420 | else |
421 | #endif | 421 | #endif |
422 | xpos += w - indent - 5; | 422 | xpos += w - indent - 5; |
423 | 423 | ||
424 | drawArrow(p, Qt::DownArrow, TRUE, xpos, indent, 5, 5, g, TRUE, fill); | 424 | drawArrow(p, Qt::DownArrow, TRUE, xpos, indent, 5, 5, g, TRUE, fill); |
425 | } | 425 | } |
426 | 426 | ||
427 | 427 | ||
428 | QRect LightStyle::comboButtonRect( int x, int y, int w, int h ) const | 428 | QRect LightStyle::comboButtonRect( int x, int y, int w, int h ) const |
429 | { | 429 | { |
430 | QRect r(x + 3, y + 3, w - 6, h - 6); | 430 | QRect r(x + 3, y + 3, w - 6, h - 6); |
431 | int indent = ((y + h) / 2) - 3; | 431 | int indent = ((y + h) / 2) - 3; |
432 | r.setRight(r.right() - indent - 10); | 432 | r.setRight(r.right() - indent - 10); |
433 | 433 | ||
434 | #if QT_VERSION >= 300 | 434 | #if QT_VERSION >= 0x030000 |
435 | if( QApplication::reverseLayout() ) | 435 | if( QApplication::reverseLayout() ) |
436 | r.moveBy( indent + 10, 0 ); | 436 | r.moveBy( indent + 10, 0 ); |
437 | #endif | 437 | #endif |
438 | 438 | ||
439 | return r; | 439 | return r; |
440 | } | 440 | } |
441 | 441 | ||
442 | 442 | ||
443 | QRect LightStyle::comboButtonFocusRect(int x, int y, int w, int h ) const | 443 | QRect LightStyle::comboButtonFocusRect(int x, int y, int w, int h ) const |
444 | { | 444 | { |
445 | return comboButtonRect(x, y, w, h); | 445 | return comboButtonRect(x, y, w, h); |
446 | } | 446 | } |
447 | 447 | ||
448 | 448 | ||
449 | void LightStyle::drawPanel(QPainter *p, int x, int y, int w, int h, | 449 | void LightStyle::drawPanel(QPainter *p, int x, int y, int w, int h, |
450 | const QColorGroup &g, bool sunken, | 450 | const QColorGroup &g, bool sunken, |
451 | int lw, const QBrush *fill) | 451 | int lw, const QBrush *fill) |
452 | { | 452 | { |
453 | if (lw >= 2) { | 453 | if (lw >= 2) { |
454 | if ( fill ) | 454 | if ( fill ) |
455 | p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill); | 455 | p->fillRect(x + 2, y + 2, w - 4, h - 4, *fill); |
456 | 456 | ||
457 | QPen oldpen = p->pen(); | 457 | QPen oldpen = p->pen(); |
458 | 458 | ||
459 | // frame | 459 | // frame |
460 | p->setPen(g.dark()); | 460 | p->setPen(g.dark()); |
461 | p->drawLine(x, y + 2, x, y + h - 3); // left | 461 | p->drawLine(x, y + 2, x, y + h - 3); // left |
462 | p->drawLine(x + 2, y, x + w - 3, y); // top | 462 | p->drawLine(x + 2, y, x + w - 3, y); // top |
463 | p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right | 463 | p->drawLine(x + w - 1, y + 2, x + w - 1, y + h - 3); // right |
464 | p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom | 464 | p->drawLine(x + 2, y + h - 1, x + w - 3, y + h - 1); // bottom |
465 | p->drawPoint(x + 1, y + 1); | 465 | p->drawPoint(x + 1, y + 1); |
466 | p->drawPoint(x + 1, y + h - 2); | 466 | p->drawPoint(x + 1, y + h - 2); |
467 | p->drawPoint(x + w - 2, y + 1); | 467 | p->drawPoint(x + w - 2, y + 1); |
468 | p->drawPoint(x + w - 2, y + h - 2); | 468 | p->drawPoint(x + w - 2, y + h - 2); |
469 | 469 | ||
470 | // bevel | 470 | // bevel |
471 | if (sunken) | 471 | if (sunken) |
472 | p->setPen(g.mid()); | 472 | p->setPen(g.mid()); |
473 | else | 473 | else |
474 | p->setPen(g.light()); | 474 | p->setPen(g.light()); |
475 | 475 | ||
476 | p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left | 476 | p->drawLine(x + 1, y + 2, x + 1, y + h - 3); // left |
477 | p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top | 477 | p->drawLine(x + 2, y + 1, x + w - 3, y + 1); // top |
478 | 478 | ||
479 | if (sunken) | 479 | if (sunken) |
480 | p->setPen(g.light()); | 480 | p->setPen(g.light()); |
481 | else | 481 | else |
482 | p->setPen(g.mid()); | 482 | p->setPen(g.mid()); |
483 | 483 | ||
484 | p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1 | 484 | p->drawLine(x + w - 2, y + 2, x + w - 2, y + h - 3); // right + 1 |
485 | p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1 | 485 | p->drawLine(x + 2, y + h - 2, x + w - 3, y + h - 2); // bottom + 1 |
486 | 486 | ||
487 | // corners | 487 | // corners |
488 | p->setPen(g.background()); | 488 | p->setPen(g.background()); |
489 | p->drawLine(x, y, x + 1, y); | 489 | p->drawLine(x, y, x + 1, y); |
490 | p->drawLine(x, y + h - 1, x + 1, y + h - 1); | 490 | p->drawLine(x, y + h - 1, x + 1, y + h - 1); |
491 | p->drawLine(x + w - 2, y, x + w - 1, y); | 491 | p->drawLine(x + w - 2, y, x + w - 1, y); |
492 | p->drawLine(x + w - 2, y + h - 1, x + w - 1, y + h - 1); | 492 | p->drawLine(x + w - 2, y + h - 1, x + w - 1, y + h - 1); |
493 | p->drawPoint(x, y + 1); | 493 | p->drawPoint(x, y + 1); |
494 | p->drawPoint(x, y + h - 2); | 494 | p->drawPoint(x, y + h - 2); |
495 | p->drawPoint(x + w - 1, y + 1); | 495 | p->drawPoint(x + w - 1, y + 1); |
496 | p->drawPoint(x + w - 1, y + h - 2); | 496 | p->drawPoint(x + w - 1, y + h - 2); |
497 | 497 | ||
498 | p->setPen(oldpen); | 498 | p->setPen(oldpen); |
499 | } else | 499 | } else |
500 | qDrawShadePanel(p, x, y, w, h, g, sunken, lw, fill); | 500 | qDrawShadePanel(p, x, y, w, h, g, sunken, lw, fill); |
501 | } | 501 | } |
502 | 502 | ||
503 | 503 | ||
504 | void LightStyle::drawIndicator(QPainter *p, int x, int y ,int w, int h, | 504 | void LightStyle::drawIndicator(QPainter *p, int x, int y ,int w, int h, |
505 | const QColorGroup &g, int state, | 505 | const QColorGroup &g, int state, |
506 | bool down, bool) | 506 | bool down, bool) |
507 | { | 507 | { |
508 | drawButton(p, x, y, w, h, g, TRUE, | 508 | drawButton(p, x, y, w, h, g, TRUE, |
509 | &g.brush(down ? QColorGroup::Mid : QColorGroup::Base)); | 509 | &g.brush(down ? QColorGroup::Mid : QColorGroup::Base)); |
510 | 510 | ||
511 | p->save(); | 511 | p->save(); |
512 | 512 | ||
513 | p->setPen(g.foreground()); | 513 | p->setPen(g.foreground()); |
514 | if (state == QButton::NoChange) { | 514 | if (state == QButton::NoChange) { |
515 | p->drawLine(x + 3, y + h / 2, x + w - 4, y + h / 2); | 515 | p->drawLine(x + 3, y + h / 2, x + w - 4, y + h / 2); |
516 | p->drawLine(x + 3, y + 1 + h / 2, x + w - 4, y + 1 + h / 2); | 516 | p->drawLine(x + 3, y + 1 + h / 2, x + w - 4, y + 1 + h / 2); |
517 | p->drawLine(x + 3, y - 1 + h / 2, x + w - 4, y - 1 + h / 2); | 517 | p->drawLine(x + 3, y - 1 + h / 2, x + w - 4, y - 1 + h / 2); |
518 | } else if (state == QButton::On) { | 518 | } else if (state == QButton::On) { |
519 | p->drawLine(x + 4, y + 3, x + w - 4, y + h - 5); | 519 | p->drawLine(x + 4, y + 3, x + w - 4, y + h - 5); |
520 | p->drawLine(x + 3, y + 3, x + w - 4, y + h - 4); | 520 | p->drawLine(x + 3, y + 3, x + w - 4, y + h - 4); |
521 | p->drawLine(x + 3, y + 4, x + w - 5, y + h - 4); | 521 | p->drawLine(x + 3, y + 4, x + w - 5, y + h - 4); |
522 | p->drawLine(x + 3, y + h - 5, x + w - 5, y + 3); | 522 | p->drawLine(x + 3, y + h - 5, x + w - 5, y + 3); |
523 | p->drawLine(x + 3, y + h - 4, x + w - 4, y + 3); | 523 | p->drawLine(x + 3, y + h - 4, x + w - 4, y + 3); |
524 | p->drawLine(x + 4, y + h - 4, x + w - 4, y + 4); | 524 | p->drawLine(x + 4, y + h - 4, x + w - 4, y + 4); |
525 | } | 525 | } |
526 | 526 | ||
527 | p->restore(); | 527 | p->restore(); |
528 | } | 528 | } |
529 | 529 | ||
530 | 530 | ||
531 | void LightStyle::drawExclusiveIndicator(QPainter *p, int x, int y, int w, int h, | 531 | void LightStyle::drawExclusiveIndicator(QPainter *p, int x, int y, int w, int h, |
532 | const QColorGroup &g, bool on, | 532 | const QColorGroup &g, bool on, |
533 | bool down, bool) | 533 | bool down, bool) |
534 | { | 534 | { |
535 | p->save(); | 535 | p->save(); |
536 | 536 | ||
537 | p->fillRect(x, y, w, h, g.brush(QColorGroup::Background)); | 537 | p->fillRect(x, y, w, h, g.brush(QColorGroup::Background)); |
538 | 538 | ||
539 | p->setPen(g.dark()); | 539 | p->setPen(g.dark()); |
540 | p->drawArc(x, y, w, h, 0, 16*360); | 540 | p->drawArc(x, y, w, h, 0, 16*360); |
541 | p->setPen(g.mid()); | 541 | p->setPen(g.mid()); |
542 | p->drawArc(x + 1, y + 1, w - 2, h - 2, 45*16, 180*16); | 542 | p->drawArc(x + 1, y + 1, w - 2, h - 2, 45*16, 180*16); |
543 | p->setPen(g.light()); | 543 | p->setPen(g.light()); |
544 | p->drawArc(x + 1, y + 1, w - 2, h - 2, 235*16, 180*16); | 544 | p->drawArc(x + 1, y + 1, w - 2, h - 2, 235*16, 180*16); |
545 | 545 | ||
546 | p->setPen(down ? g.mid() : g.base()); | 546 | p->setPen(down ? g.mid() : g.base()); |
547 | p->setBrush(down ? g.mid() : g.base()); | 547 | p->setBrush(down ? g.mid() : g.base()); |
548 | p->drawEllipse(x + 2, y + 2, w - 4, h - 4); | 548 | p->drawEllipse(x + 2, y + 2, w - 4, h - 4); |
549 | 549 | ||
550 | if (on) { | 550 | if (on) { |
551 | p->setBrush(g.foreground()); | 551 | p->setBrush(g.foreground()); |
552 | p->drawEllipse(x + 3, y + 3, w - x - 6, h - y - 6); | 552 | p->drawEllipse(x + 3, y + 3, w - x - 6, h - y - 6); |
553 | } | 553 | } |
554 | 554 | ||
555 | p->restore(); | 555 | p->restore(); |
556 | } | 556 | } |
557 | 557 | ||
558 | 558 | ||
559 | 559 | ||
560 | #if 1 | 560 | #if 1 |
561 | //copied from QPE style | 561 | //copied from QPE style |
562 | void LightStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected ) | 562 | void LightStyle::drawTab( QPainter *p, const QTabBar *tb, QTab *t, bool selected ) |
563 | { | 563 | { |
564 | #if 0 | 564 | #if 0 |
565 | //We can't do this, because QTabBar::focusInEvent redraws the | 565 | //We can't do this, because QTabBar::focusInEvent redraws the |
566 | // tab label with the default font. | 566 | // tab label with the default font. |
567 | QFont f = tb->font(); | 567 | QFont f = tb->font(); |
568 | f.setBold( selected ); | 568 | f.setBold( selected ); |
569 | p->setFont( f ); | 569 | p->setFont( f ); |
570 | #endif | 570 | #endif |
571 | QRect r( t->rect() ); | 571 | QRect r( t->rect() ); |
572 | if ( tb->shape() == QTabBar::RoundedAbove ) { | 572 | if ( tb->shape() == QTabBar::RoundedAbove ) { |
573 | p->setPen( tb->colorGroup().light() ); | 573 | p->setPen( tb->colorGroup().light() ); |
574 | p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); | 574 | p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); |
575 | if ( r.left() == 0 ) | 575 | if ( r.left() == 0 ) |
576 | p->drawPoint( tb->rect().bottomLeft() ); | 576 | p->drawPoint( tb->rect().bottomLeft() ); |
577 | else { | 577 | else { |
578 | p->setPen( tb->colorGroup().light() ); | 578 | p->setPen( tb->colorGroup().light() ); |
579 | p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); | 579 | p->drawLine( r.left(), r.bottom(), r.right(), r.bottom() ); |
580 | } | 580 | } |
581 | 581 | ||
582 | if ( selected ) { | 582 | if ( selected ) { |
583 | p->setPen( tb->colorGroup().background() ); | 583 | p->setPen( tb->colorGroup().background() ); |
584 | p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); | 584 | p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); |
585 | p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2), | 585 | p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-2), |
586 | tb->colorGroup().brush( QColorGroup::Background )); | 586 | tb->colorGroup().brush( QColorGroup::Background )); |
587 | 587 | ||
588 | } else { | 588 | } else { |
589 | r.setRect( r.left() + 2, r.top() + 2, | 589 | r.setRect( r.left() + 2, r.top() + 2, |
590 | r.width() - 4, r.height() - 2 ); | 590 | r.width() - 4, r.height() - 2 ); |
591 | p->setPen( tb->colorGroup().button() ); | 591 | p->setPen( tb->colorGroup().button() ); |
592 | p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); | 592 | p->drawLine( r.left()+2, r.top()+1, r.right()-2, r.top()+1 ); |
593 | p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3), | 593 | p->fillRect( QRect( r.left()+1, r.top()+2, r.width()-2, r.height()-3), |
594 | tb->colorGroup().brush( QColorGroup::Button )); | 594 | tb->colorGroup().brush( QColorGroup::Button )); |
595 | //do shading; will not work for pixmap brushes | 595 | //do shading; will not work for pixmap brushes |
596 | QColor bg = tb->colorGroup().button(); | 596 | QColor bg = tb->colorGroup().button(); |
597 | // int h,s,v; | 597 | // int h,s,v; |
598 | // bg.hsv( &h, &s, &v ); | 598 | // bg.hsv( &h, &s, &v ); |
599 | int n = r.height()/2; | 599 | int n = r.height()/2; |
600 | int dark = 100; | 600 | int dark = 100; |
601 | for ( int i = 1; i < n; i++ ) { | 601 | for ( int i = 1; i < n; i++ ) { |
602 | dark = (dark * (100+(i*15)/n) )/100; | 602 | dark = (dark * (100+(i*15)/n) )/100; |
603 | p->setPen( bg.dark( dark ) ); | 603 | p->setPen( bg.dark( dark ) ); |
604 | int y = r.bottom()-n+i; | 604 | int y = r.bottom()-n+i; |
605 | int x1 = r.left()+1; | 605 | int x1 = r.left()+1; |
606 | int x2 = r.right()-1; | 606 | int x2 = r.right()-1; |
607 | p->drawLine( x1, y, x2, y ); | 607 | p->drawLine( x1, y, x2, y ); |
608 | } | 608 | } |
609 | 609 | ||
610 | } | 610 | } |
611 | 611 | ||
612 | p->setPen( tb->colorGroup().light() ); | 612 | p->setPen( tb->colorGroup().light() ); |
613 | p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 ); | 613 | p->drawLine( r.left(), r.bottom()-1, r.left(), r.top() + 2 ); |
614 | p->drawPoint( r.left()+1, r.top() + 1 ); | 614 | p->drawPoint( r.left()+1, r.top() + 1 ); |
615 | p->drawLine( r.left()+2, r.top(), | 615 | p->drawLine( r.left()+2, r.top(), |
616 | r.right() - 2, r.top() ); | 616 | r.right() - 2, r.top() ); |
617 | 617 | ||
618 | p->setPen( tb->colorGroup().dark() ); | 618 | p->setPen( tb->colorGroup().dark() ); |
619 | p->drawPoint( r.right() - 1, r.top() + 1 ); | 619 | p->drawPoint( r.right() - 1, r.top() + 1 ); |
620 | p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1); | 620 | p->drawLine( r.right(), r.top() + 2, r.right(), r.bottom() - 1); |
621 | } else if ( tb->shape() == QTabBar::RoundedBelow ) { | 621 | } else if ( tb->shape() == QTabBar::RoundedBelow ) { |
622 | if ( selected ) { | 622 | if ( selected ) { |
623 | p->setPen( tb->colorGroup().background() ); | 623 | p->setPen( tb->colorGroup().background() ); |
624 | p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); | 624 | p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); |
625 | p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2), | 625 | p->fillRect( QRect( r.left()+1, r.top(), r.width()-2, r.height()-2), |
626 | tb->palette().normal().brush( QColorGroup::Background )); | 626 | tb->palette().normal().brush( QColorGroup::Background )); |
627 | } else { | 627 | } else { |
628 | p->setPen( tb->colorGroup().dark() ); | 628 | p->setPen( tb->colorGroup().dark() ); |
629 | p->drawLine( r.left(), r.top(), | 629 | p->drawLine( r.left(), r.top(), |
630 | r.right(), r.top() ); | 630 | r.right(), r.top() ); |
631 | r.setRect( r.left() + 2, r.top(), | 631 | r.setRect( r.left() + 2, r.top(), |
632 | r.width() - 4, r.height() - 2 ); | 632 | r.width() - 4, r.height() - 2 ); |
633 | p->setPen( tb->colorGroup().button() ); | 633 | p->setPen( tb->colorGroup().button() ); |
634 | p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); | 634 | p->drawLine( r.left()+2, r.bottom()-1, r.right()-2, r.bottom()-1 ); |
635 | p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3), | 635 | p->fillRect( QRect( r.left()+1, r.top()+1, r.width()-2, r.height()-3), |
636 | tb->palette().normal().brush( QColorGroup::Button )); | 636 | tb->palette().normal().brush( QColorGroup::Button )); |
637 | } | 637 | } |
638 | 638 | ||
639 | p->setPen( tb->colorGroup().dark() ); | 639 | p->setPen( tb->colorGroup().dark() ); |
640 | p->drawLine( r.right(), r.top(), | 640 | p->drawLine( r.right(), r.top(), |
641 | r.right(), r.bottom() - 2 ); | 641 | r.right(), r.bottom() - 2 ); |
642 | p->drawPoint( r.right() - 1, r.bottom() - 1 ); | 642 | p->drawPoint( r.right() - 1, r.bottom() - 1 ); |
643 | p->drawLine( r.right() - 2, r.bottom(), | 643 | p->drawLine( r.right() - 2, r.bottom(), |
644 | r.left() + 2, r.bottom() ); | 644 | r.left() + 2, r.bottom() ); |
645 | 645 | ||
646 | p->setPen( tb->colorGroup().light() ); | 646 | p->setPen( tb->colorGroup().light() ); |
647 | p->drawLine( r.left(), r.top()+1, | 647 | p->drawLine( r.left(), r.top()+1, |
648 | r.left(), r.bottom() - 2 ); | 648 | r.left(), r.bottom() - 2 ); |
649 | p->drawPoint( r.left() + 1, r.bottom() - 1 ); | 649 | p->drawPoint( r.left() + 1, r.bottom() - 1 ); |
650 | if ( r.left() == 0 ) | 650 | if ( r.left() == 0 ) |
651 | p->drawPoint( tb->rect().topLeft() ); | 651 | p->drawPoint( tb->rect().topLeft() ); |
652 | 652 | ||
653 | } else { | 653 | } else { |
654 | QCommonStyle::drawTab( p, tb, t, selected ); | 654 | QCommonStyle::drawTab( p, tb, t, selected ); |
655 | } | 655 | } |
656 | } | 656 | } |
657 | 657 | ||
658 | #else | 658 | #else |
659 | 659 | ||
660 | void LightStyle::drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab, | 660 | void LightStyle::drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab, |
661 | bool selected) | 661 | bool selected) |
662 | { | 662 | { |
663 | p->save(); | 663 | p->save(); |
664 | 664 | ||
665 | QColorGroup g = tabbar->colorGroup(); | 665 | QColorGroup g = tabbar->colorGroup(); |
666 | QRect fr(tab->r); | 666 | QRect fr(tab->r); |
667 | fr.setLeft(fr.left() + 2); | 667 | fr.setLeft(fr.left() + 2); |
668 | 668 | ||
669 | if (! selected) { | 669 | if (! selected) { |
670 | if (tabbar->shape() == QTabBar::RoundedAbove || | 670 | if (tabbar->shape() == QTabBar::RoundedAbove || |
671 | tabbar->shape() == QTabBar::TriangularAbove) { | 671 | tabbar->shape() == QTabBar::TriangularAbove) { |
672 | 672 | ||
673 | fr.setTop(fr.top() + 2); | 673 | fr.setTop(fr.top() + 2); |
674 | } else { | 674 | } else { |
675 | fr.setBottom(fr.bottom() - 2); | 675 | fr.setBottom(fr.bottom() - 2); |
676 | } | 676 | } |
677 | } | 677 | } |
678 | 678 | ||
679 | QRegion tabr(tab->r); | 679 | QRegion tabr(tab->r); |
680 | 680 | ||
681 | QPointArray cliptri(4); | 681 | QPointArray cliptri(4); |
682 | cliptri.setPoint(0, fr.left(), fr.top()); | 682 | cliptri.setPoint(0, fr.left(), fr.top()); |
683 | cliptri.setPoint(1, fr.left(), fr.top() + 5); | 683 | cliptri.setPoint(1, fr.left(), fr.top() + 5); |
684 | cliptri.setPoint(2, fr.left() + 5, fr.top()); | 684 | cliptri.setPoint(2, fr.left() + 5, fr.top()); |
685 | cliptri.setPoint(3, fr.left(), fr.top()); | 685 | cliptri.setPoint(3, fr.left(), fr.top()); |
686 | QRegion trir(cliptri); | 686 | QRegion trir(cliptri); |
687 | p->setClipRegion(tabr - trir); | 687 | p->setClipRegion(tabr - trir); |
688 | 688 | ||
689 | p->setPen( NoPen ); | 689 | p->setPen( NoPen ); |
690 | p->setBrush(g.brush(selected ? QColorGroup::Background : QColorGroup::Mid)); | 690 | p->setBrush(g.brush(selected ? QColorGroup::Background : QColorGroup::Mid)); |
691 | 691 | ||
692 | fr.setWidth(fr.width() - 1); | 692 | fr.setWidth(fr.width() - 1); |
693 | p->drawRect(fr.left() + 1, fr.top() + 1, fr.width() - 2, fr.height() - 2); | 693 | p->drawRect(fr.left() + 1, fr.top() + 1, fr.width() - 2, fr.height() - 2); |
694 | 694 | ||
695 | if (tabbar->shape() == QTabBar::RoundedAbove) { | 695 | if (tabbar->shape() == QTabBar::RoundedAbove) { |
696 | // "rounded" tabs on top | 696 | // "rounded" tabs on top |
697 | fr.setBottom(fr.bottom() - 1); | 697 | fr.setBottom(fr.bottom() - 1); |
698 | 698 | ||
699 | p->setPen(g.dark()); | 699 | p->setPen(g.dark()); |
700 | p->drawLine(fr.left(), fr.top() + 5, fr.left(), fr.bottom() - 1); | 700 | p->drawLine(fr.left(), fr.top() + 5, fr.left(), fr.bottom() - 1); |
701 | p->drawLine(fr.left(), fr.top() + 5, fr.left() + 5, fr.top()); | 701 | p->drawLine(fr.left(), fr.top() + 5, fr.left() + 5, fr.top()); |
702 | p->drawLine(fr.left() + 5, fr.top(), fr.right() - 1, fr.top()); | 702 | p->drawLine(fr.left() + 5, fr.top(), fr.right() - 1, fr.top()); |
703 | p->drawLine(fr.right(), fr.top() + 1, fr.right(), fr.bottom() - 1); | 703 | p->drawLine(fr.right(), fr.top() + 1, fr.right(), fr.bottom() - 1); |
704 | 704 | ||
705 | if (selected) { | 705 | if (selected) { |
706 | p->drawLine(fr.right(), fr.bottom(), fr.right() + 2, fr.bottom()); | 706 | p->drawLine(fr.right(), fr.bottom(), fr.right() + 2, fr.bottom()); |
707 | p->drawPoint(fr.left(), fr.bottom()); | 707 | p->drawPoint(fr.left(), fr.bottom()); |
708 | } else | 708 | } else |
709 | p->drawLine(fr.left(), fr.bottom(), fr.right() + 2, fr.bottom()); | 709 | p->drawLine(fr.left(), fr.bottom(), fr.right() + 2, fr.bottom()); |
710 | 710 | ||
711 | if (fr.left() == 2) { | 711 | if (fr.left() == 2) { |
712 | p->drawPoint(fr.left() - 1, fr.bottom() + 1); | 712 | p->drawPoint(fr.left() - 1, fr.bottom() + 1); |
713 | p->drawPoint(fr.left() - 2, fr.bottom() + 2); | 713 | p->drawPoint(fr.left() - 2, fr.bottom() + 2); |
714 | } | 714 | } |
715 | 715 | ||
716 | if (selected) { | 716 | if (selected) { |
717 | p->setPen(g.mid()); | 717 | p->setPen(g.mid()); |
718 | p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 2); | 718 | p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 2); |
719 | } | 719 | } |
720 | 720 | ||
721 | p->setPen(g.light()); p->setPen(red); | 721 | p->setPen(g.light()); p->setPen(red); |
722 | p->drawLine(fr.left() + 1, fr.top() + 6, fr.left() + 1, | 722 | p->drawLine(fr.left() + 1, fr.top() + 6, fr.left() + 1, |
723 | fr.bottom() - (selected ? 0 : 1)); | 723 | fr.bottom() - (selected ? 0 : 1)); |
724 | p->drawLine(fr.left() + 1, fr.top() + 5, fr.left() + 5, fr.top() + 1); | 724 | p->drawLine(fr.left() + 1, fr.top() + 5, fr.left() + 5, fr.top() + 1); |
725 | p->drawLine(fr.left() + 6, fr.top() + 1, fr.right() - 3, fr.top() + 1); | 725 | p->drawLine(fr.left() + 6, fr.top() + 1, fr.right() - 3, fr.top() + 1); |
726 | if (selected) { | 726 | if (selected) { |
727 | p->drawLine(fr.right() + 1, fr.bottom() + 1, | 727 | p->drawLine(fr.right() + 1, fr.bottom() + 1, |
728 | fr.right() + 2, fr.bottom() + 1); | 728 | fr.right() + 2, fr.bottom() + 1); |
729 | p->drawLine(fr.left(), fr.bottom() + 1, fr.left() + 1, fr.bottom() + 1); | 729 | p->drawLine(fr.left(), fr.bottom() + 1, fr.left() + 1, fr.bottom() + 1); |
730 | } else | 730 | } else |
731 | p->drawLine(fr.left(), fr.bottom() + 1, | 731 | p->drawLine(fr.left(), fr.bottom() + 1, |
732 | fr.right() + 2, fr.bottom() + 1); | 732 | fr.right() + 2, fr.bottom() + 1); |
733 | } else if (tabbar->shape() == QTabBar::RoundedBelow) { | 733 | } else if (tabbar->shape() == QTabBar::RoundedBelow) { |
734 | // "rounded" tabs on bottom | 734 | // "rounded" tabs on bottom |
735 | fr.setTop(fr.top() + 1); | 735 | fr.setTop(fr.top() + 1); |
736 | 736 | ||
737 | p->setPen(g.dark()); | 737 | p->setPen(g.dark()); |
738 | p->drawLine(fr.left(), fr.top(), fr.left(), fr.bottom() - 1); | 738 | p->drawLine(fr.left(), fr.top(), fr.left(), fr.bottom() - 1); |
739 | p->drawLine(fr.left() + 1, fr.bottom(), fr.right() - 1, fr.bottom()); | 739 | p->drawLine(fr.left() + 1, fr.bottom(), fr.right() - 1, fr.bottom()); |
740 | p->drawLine(fr.right(), fr.top(), fr.right(), fr.bottom() - 1); | 740 | p->drawLine(fr.right(), fr.top(), fr.right(), fr.bottom() - 1); |
741 | 741 | ||
742 | if (! selected) | 742 | if (! selected) |
743 | p->drawLine(fr.left(), fr.top(), fr.right() + 3, fr.top()); | 743 | p->drawLine(fr.left(), fr.top(), fr.right() + 3, fr.top()); |
744 | else | 744 | else |
745 | p->drawLine(fr.right(), fr.top(), fr.right() + 3, fr.top()); | 745 | p->drawLine(fr.right(), fr.top(), fr.right() + 3, fr.top()); |
746 | 746 | ||
747 | p->setPen(g.mid()); | 747 | p->setPen(g.mid()); |
748 | if (selected) | 748 | if (selected) |
749 | p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 1); | 749 | p->drawLine(fr.right() - 1, fr.top() + 1, fr.right() - 1, fr.bottom() - 1); |
750 | else | 750 | else |
751 | p->drawLine(fr.left(), fr.top() - 1, fr.right() + 3, fr.top() - 1); | 751 | p->drawLine(fr.left(), fr.top() - 1, fr.right() + 3, fr.top() - 1); |
752 | 752 | ||
753 | p->setPen(g.light()); | 753 | p->setPen(g.light()); |
754 | p->drawLine(fr.left() + 1, fr.top() + (selected ? -1 : 2), | 754 | p->drawLine(fr.left() + 1, fr.top() + (selected ? -1 : 2), |
755 | fr.left() + 1, fr.bottom() - 1); | 755 | fr.left() + 1, fr.bottom() - 1); |
756 | 756 | ||
757 | } else { | 757 | } else { |
758 | // triangular drawing code | 758 | // triangular drawing code |
759 | QCommonStyle::drawTab(p, tabbar, tab, selected); | 759 | QCommonStyle::drawTab(p, tabbar, tab, selected); |
760 | } | 760 | } |
761 | 761 | ||
762 | p->restore(); | 762 | p->restore(); |
763 | } | 763 | } |
764 | #endif | 764 | #endif |
765 | 765 | ||
766 | void LightStyle::drawSlider(QPainter *p, int x, int y, int w, int h, | 766 | void LightStyle::drawSlider(QPainter *p, int x, int y, int w, int h, |
767 | const QColorGroup &g, Qt::Orientation orientation, | 767 | const QColorGroup &g, Qt::Orientation orientation, |
768 | bool above, bool below) | 768 | bool above, bool below) |
769 | { | 769 | { |
770 | drawButton(p, x, y, w, h, g, FALSE, &g.brush(QColorGroup::Button)); | 770 | drawButton(p, x, y, w, h, g, FALSE, &g.brush(QColorGroup::Button)); |
771 | 771 | ||
772 | if (orientation == Horizontal) { | 772 | if (orientation == Horizontal) { |
773 | if (above && below) { | 773 | if (above && below) { |
774 | drawArrow(p, Qt::UpArrow, FALSE, x + 1, y + 1, w, h / 2, g, TRUE); | 774 | drawArrow(p, Qt::UpArrow, FALSE, x + 1, y + 1, w, h / 2, g, TRUE); |
775 | drawArrow(p, Qt::DownArrow, FALSE, x + 1, y + (h / 2) - 1, | 775 | drawArrow(p, Qt::DownArrow, FALSE, x + 1, y + (h / 2) - 1, |
776 | w, h / 2, g, TRUE); | 776 | w, h / 2, g, TRUE); |
777 | } else | 777 | } else |
778 | drawArrow(p, (above) ? Qt::UpArrow : Qt::DownArrow, | 778 | drawArrow(p, (above) ? Qt::UpArrow : Qt::DownArrow, |
779 | FALSE, x + 1, y, w, h, g, TRUE); | 779 | FALSE, x + 1, y, w, h, g, TRUE); |
780 | } else { | 780 | } else { |
781 | if (above && below) { | 781 | if (above && below) { |
782 | drawArrow(p, Qt::LeftArrow, FALSE, x + 1, y, w / 2, h, g, TRUE); | 782 | drawArrow(p, Qt::LeftArrow, FALSE, x + 1, y, w / 2, h, g, TRUE); |
783 | drawArrow(p, Qt::RightArrow, FALSE, x + (w / 2) - 2, y, w / 2, h, g, TRUE); | 783 | drawArrow(p, Qt::RightArrow, FALSE, x + (w / 2) - 2, y, w / 2, h, g, TRUE); |
784 | } else | 784 | } else |
785 | drawArrow(p, (above) ? Qt::LeftArrow : Qt::RightArrow, | 785 | drawArrow(p, (above) ? Qt::LeftArrow : Qt::RightArrow, |
786 | FALSE, x, y, w, h, g, TRUE); | 786 | FALSE, x, y, w, h, g, TRUE); |
787 | } | 787 | } |
788 | } | 788 | } |
789 | 789 | ||
790 | 790 | ||
791 | void LightStyle::drawSliderGroove(QPainter *p, int x, int y, int w, int h, | 791 | void LightStyle::drawSliderGroove(QPainter *p, int x, int y, int w, int h, |
792 | const QColorGroup& g, QCOORD c, | 792 | const QColorGroup& g, QCOORD c, |
793 | Qt::Orientation orientation) | 793 | Qt::Orientation orientation) |
794 | { | 794 | { |
795 | if (orientation == Horizontal) | 795 | if (orientation == Horizontal) |
796 | drawButton(p, x, y+c - 3, w, 6, g, TRUE, &g.brush(QColorGroup::Mid)); | 796 | drawButton(p, x, y+c - 3, w, 6, g, TRUE, &g.brush(QColorGroup::Mid)); |
797 | else | 797 | else |
798 | drawButton(p, x+c - 3, y, 6, h, g, TRUE, &g.brush(QColorGroup::Mid)); | 798 | drawButton(p, x+c - 3, y, 6, h, g, TRUE, &g.brush(QColorGroup::Mid)); |
799 | } | 799 | } |
800 | 800 | ||
801 | 801 | ||
802 | void LightStyle::scrollBarMetrics(const QScrollBar *scrollbar, | 802 | void LightStyle::scrollBarMetrics(const QScrollBar *scrollbar, |
803 | int &sliderMin, int &sliderMax, | 803 | int &sliderMin, int &sliderMax, |
804 | int &sliderLength, int &buttonDim) const | 804 | int &sliderLength, int &buttonDim) const |
805 | { | 805 | { |
806 | int maxLength; | 806 | int maxLength; |
807 | int length = ((scrollbar->orientation() == Horizontal) ? | 807 | int length = ((scrollbar->orientation() == Horizontal) ? |
808 | scrollbar->width() : scrollbar->height()); | 808 | scrollbar->width() : scrollbar->height()); |
809 | int extent = ((scrollbar->orientation() == Horizontal) ? | 809 | int extent = ((scrollbar->orientation() == Horizontal) ? |
810 | scrollbar->height() : scrollbar->width()); | 810 | scrollbar->height() : scrollbar->width()); |
811 | extent--; | 811 | extent--; |
812 | 812 | ||
813 | if (length > (extent + defaultFrameWidth() - 1) * 2 + defaultFrameWidth()) | 813 | if (length > (extent + defaultFrameWidth() - 1) * 2 + defaultFrameWidth()) |
814 | buttonDim = extent - defaultFrameWidth(); | 814 | buttonDim = extent - defaultFrameWidth(); |
815 | else | 815 | else |
816 | buttonDim = (length - defaultFrameWidth()) / 2 - 1; | 816 | buttonDim = (length - defaultFrameWidth()) / 2 - 1; |
817 | 817 | ||
818 | sliderMin = buttonDim; | 818 | sliderMin = buttonDim; |
diff --git a/library/lightstyle.h b/library/lightstyle.h index c377cc2..0392957 100644 --- a/library/lightstyle.h +++ b/library/lightstyle.h | |||
@@ -1,120 +1,120 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | #ifndef LIGHTSTYLE_H | 20 | #ifndef LIGHTSTYLE_H |
21 | #define LIGHTSTYLE_H | 21 | #define LIGHTSTYLE_H |
22 | 22 | ||
23 | 23 | ||
24 | #ifndef QT_H | 24 | #ifndef QT_H |
25 | #include <qstyle.h> | 25 | #include <qstyle.h> |
26 | #include <qwindowsstyle.h> | 26 | #include <qwindowsstyle.h> |
27 | #endif // QT_H | 27 | #endif // QT_H |
28 | 28 | ||
29 | #if QT_VERSION < 300 | 29 | #if QT_VERSION < 0x030000 |
30 | 30 | ||
31 | #ifdef QT_PLUGIN_STYLE_LIGHT | 31 | #ifdef QT_PLUGIN_STYLE_LIGHT |
32 | # define Q_EXPORT_STYLE_LIGHT | 32 | # define Q_EXPORT_STYLE_LIGHT |
33 | #else | 33 | #else |
34 | # define Q_EXPORT_STYLE_LIGHT Q_EXPORT | 34 | # define Q_EXPORT_STYLE_LIGHT Q_EXPORT |
35 | #endif // QT_PLUGIN_STYLE_LIGHT | 35 | #endif // QT_PLUGIN_STYLE_LIGHT |
36 | 36 | ||
37 | 37 | ||
38 | class Q_EXPORT_STYLE_LIGHT LightStyle : public QWindowsStyle | 38 | class Q_EXPORT_STYLE_LIGHT LightStyle : public QWindowsStyle |
39 | { | 39 | { |
40 | public: | 40 | public: |
41 | LightStyle(); | 41 | LightStyle(); |
42 | virtual ~LightStyle(); | 42 | virtual ~LightStyle(); |
43 | 43 | ||
44 | void polish(QWidget *widget); | 44 | void polish(QWidget *widget); |
45 | void unPolish(QWidget*widget); | 45 | void unPolish(QWidget*widget); |
46 | 46 | ||
47 | void polish(QApplication *app); | 47 | void polish(QApplication *app); |
48 | void unPolish(QApplication *app); | 48 | void unPolish(QApplication *app); |
49 | 49 | ||
50 | void polishPopupMenu(QPopupMenu *menu); | 50 | void polishPopupMenu(QPopupMenu *menu); |
51 | 51 | ||
52 | void drawPushButton(QPushButton *button, QPainter *p); | 52 | void drawPushButton(QPushButton *button, QPainter *p); |
53 | void drawButton(QPainter *p, int x, int y, int w, int h, | 53 | void drawButton(QPainter *p, int x, int y, int w, int h, |
54 | const QColorGroup &g, bool sunken = FALSE, | 54 | const QColorGroup &g, bool sunken = FALSE, |
55 | const QBrush *fill = 0); | 55 | const QBrush *fill = 0); |
56 | void drawBevelButton(QPainter *p, int x, int y, int w, int h, | 56 | void drawBevelButton(QPainter *p, int x, int y, int w, int h, |
57 | const QColorGroup &g, bool sunken = FALSE, | 57 | const QColorGroup &g, bool sunken = FALSE, |
58 | const QBrush *fill = 0); | 58 | const QBrush *fill = 0); |
59 | void getButtonShift(int &x, int &y) const; | 59 | void getButtonShift(int &x, int &y) const; |
60 | 60 | ||
61 | void drawComboButton(QPainter *p, int x, int y, int w, int h, | 61 | void drawComboButton(QPainter *p, int x, int y, int w, int h, |
62 | const QColorGroup &g, bool sunken = FALSE, | 62 | const QColorGroup &g, bool sunken = FALSE, |
63 | bool editable = FALSE, bool = TRUE, | 63 | bool editable = FALSE, bool = TRUE, |
64 | const QBrush *fill = 0); | 64 | const QBrush *fill = 0); |
65 | QRect comboButtonRect(int x, int y, int w, int h) const; | 65 | QRect comboButtonRect(int x, int y, int w, int h) const; |
66 | QRect comboButtonFocusRect(int x, int y, int w, int h) const; | 66 | QRect comboButtonFocusRect(int x, int y, int w, int h) const; |
67 | 67 | ||
68 | void drawIndicator(QPainter *p, int x, int y ,int w, int h, | 68 | void drawIndicator(QPainter *p, int x, int y ,int w, int h, |
69 | const QColorGroup &g, int state, | 69 | const QColorGroup &g, int state, |
70 | bool = FALSE, bool = TRUE); | 70 | bool = FALSE, bool = TRUE); |
71 | QSize indicatorSize() const; | 71 | QSize indicatorSize() const; |
72 | 72 | ||
73 | void drawExclusiveIndicator(QPainter *p, int x, int y ,int w, int h, | 73 | void drawExclusiveIndicator(QPainter *p, int x, int y ,int w, int h, |
74 | const QColorGroup &g, bool on, | 74 | const QColorGroup &g, bool on, |
75 | bool = FALSE, bool = TRUE); | 75 | bool = FALSE, bool = TRUE); |
76 | QSize exclusiveIndicatorSize() const; | 76 | QSize exclusiveIndicatorSize() const; |
77 | 77 | ||
78 | void drawPanel(QPainter * p, int x, int y, int w, int h, | 78 | void drawPanel(QPainter * p, int x, int y, int w, int h, |
79 | const QColorGroup &g, bool sunken = FALSE, | 79 | const QColorGroup &g, bool sunken = FALSE, |
80 | int = 1, const QBrush * = 0); | 80 | int = 1, const QBrush * = 0); |
81 | 81 | ||
82 | void scrollBarMetrics( const QScrollBar *, | 82 | void scrollBarMetrics( const QScrollBar *, |
83 | int &, int &, int &, int & ) const; | 83 | int &, int &, int &, int & ) const; |
84 | void drawScrollBarControls(QPainter* p, const QScrollBar* sb, | 84 | void drawScrollBarControls(QPainter* p, const QScrollBar* sb, |
85 | int sliderStart, uint controls, | 85 | int sliderStart, uint controls, |
86 | uint activeControl); | 86 | uint activeControl); |
87 | QStyle::ScrollControl scrollBarPointOver(const QScrollBar *, int, const QPoint& p); | 87 | QStyle::ScrollControl scrollBarPointOver(const QScrollBar *, int, const QPoint& p); |
88 | 88 | ||
89 | void drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab, bool selected); | 89 | void drawTab(QPainter *p, const QTabBar *tabbar, QTab *tab, bool selected); |
90 | 90 | ||
91 | void drawSlider(QPainter *p, int x, int y, int w, int h, | 91 | void drawSlider(QPainter *p, int x, int y, int w, int h, |
92 | const QColorGroup &g, Qt::Orientation orientation, | 92 | const QColorGroup &g, Qt::Orientation orientation, |
93 | bool, bool); | 93 | bool, bool); |
94 | void drawSliderGroove(QPainter *p, int x, int y, int w, int h, | 94 | void drawSliderGroove(QPainter *p, int x, int y, int w, int h, |
95 | const QColorGroup& g, QCOORD, | 95 | const QColorGroup& g, QCOORD, |
96 | Qt::Orientation ); | 96 | Qt::Orientation ); |
97 | 97 | ||
98 | void drawToolBarHandle(QPainter *, const QRect &, Qt::Orientation, | 98 | void drawToolBarHandle(QPainter *, const QRect &, Qt::Orientation, |
99 | bool, const QColorGroup &, bool = FALSE ); | 99 | bool, const QColorGroup &, bool = FALSE ); |
100 | 100 | ||
101 | QSize scrollBarExtent() const; | 101 | QSize scrollBarExtent() const; |
102 | int buttonDefaultIndicatorWidth() const; | 102 | int buttonDefaultIndicatorWidth() const; |
103 | int buttonMargin() const; | 103 | int buttonMargin() const; |
104 | int sliderThickness() const; | 104 | int sliderThickness() const; |
105 | int sliderLength() const; | 105 | int sliderLength() const; |
106 | int defaultFrameWidth() const; | 106 | int defaultFrameWidth() const; |
107 | 107 | ||
108 | int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& ); | 108 | int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& ); |
109 | int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& ); | 109 | int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& ); |
110 | void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, | 110 | void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, |
111 | const QPalette& pal, | 111 | const QPalette& pal, |
112 | bool act, bool enabled, int x, int y, int w, int h); | 112 | bool act, bool enabled, int x, int y, int w, int h); |
113 | 113 | ||
114 | protected: | 114 | protected: |
115 | bool eventFilter(QObject *, QEvent *); | 115 | bool eventFilter(QObject *, QEvent *); |
116 | }; | 116 | }; |
117 | 117 | ||
118 | #endif | 118 | #endif |
119 | 119 | ||
120 | #endif // LIGHTSTYLE_H | 120 | #endif // LIGHTSTYLE_H |
diff --git a/library/qpeapplication.cpp b/library/qpeapplication.cpp index af00f49..1c5ced3 100644 --- a/library/qpeapplication.cpp +++ b/library/qpeapplication.cpp | |||
@@ -1,447 +1,447 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | */ | 19 | */ |
20 | #define QTOPIA_INTERNAL_LANGLIST | 20 | #define QTOPIA_INTERNAL_LANGLIST |
21 | #include <stdlib.h> | 21 | #include <stdlib.h> |
22 | #include <unistd.h> | 22 | #include <unistd.h> |
23 | #ifndef Q_OS_MACX | 23 | #ifndef Q_OS_MACX |
24 | #include <linux/limits.h> // needed for some toolchains (PATH_MAX) | 24 | #include <linux/limits.h> // needed for some toolchains (PATH_MAX) |
25 | #endif | 25 | #endif |
26 | #include <qfile.h> | 26 | #include <qfile.h> |
27 | #include <qqueue.h> | 27 | #include <qqueue.h> |
28 | #ifdef Q_WS_QWS | 28 | #ifdef Q_WS_QWS |
29 | #ifndef QT_NO_COP | 29 | #ifndef QT_NO_COP |
30 | #if QT_VERSION <= 231 | 30 | #if QT_VERSION <= 231 |
31 | #define private public | 31 | #define private public |
32 | #define sendLocally processEvent | 32 | #define sendLocally processEvent |
33 | #include "qcopenvelope_qws.h" | 33 | #include "qcopenvelope_qws.h" |
34 | #undef private | 34 | #undef private |
35 | #else | 35 | #else |
36 | #include "qcopenvelope_qws.h" | 36 | #include "qcopenvelope_qws.h" |
37 | #endif | 37 | #endif |
38 | #endif | 38 | #endif |
39 | #include <qwindowsystem_qws.h> | 39 | #include <qwindowsystem_qws.h> |
40 | #endif | 40 | #endif |
41 | #include <qtextstream.h> | 41 | #include <qtextstream.h> |
42 | #include <qpalette.h> | 42 | #include <qpalette.h> |
43 | #include <qbuffer.h> | 43 | #include <qbuffer.h> |
44 | #include <qptrdict.h> | 44 | #include <qptrdict.h> |
45 | #include <qregexp.h> | 45 | #include <qregexp.h> |
46 | #include <qdir.h> | 46 | #include <qdir.h> |
47 | #include <qlabel.h> | 47 | #include <qlabel.h> |
48 | #include <qdialog.h> | 48 | #include <qdialog.h> |
49 | #include <qdragobject.h> | 49 | #include <qdragobject.h> |
50 | #include <qtextcodec.h> | 50 | #include <qtextcodec.h> |
51 | #include <qevent.h> | 51 | #include <qevent.h> |
52 | #include <qtooltip.h> | 52 | #include <qtooltip.h> |
53 | #include <qsignal.h> | 53 | #include <qsignal.h> |
54 | #include <qmainwindow.h> | 54 | #include <qmainwindow.h> |
55 | #include <qwidgetlist.h> | 55 | #include <qwidgetlist.h> |
56 | #include <qpixmapcache.h> | 56 | #include <qpixmapcache.h> |
57 | 57 | ||
58 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 58 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
59 | #define QTOPIA_INTERNAL_INITAPP | 59 | #define QTOPIA_INTERNAL_INITAPP |
60 | #include "qpeapplication.h" | 60 | #include "qpeapplication.h" |
61 | #include "qpestyle.h" | 61 | #include "qpestyle.h" |
62 | #include "styleinterface.h" | 62 | #include "styleinterface.h" |
63 | #if QT_VERSION >= 300 | 63 | #if QT_VERSION >= 0x030000 |
64 | #include <qstylefactory.h> | 64 | #include <qstylefactory.h> |
65 | #else | 65 | #else |
66 | #include <qplatinumstyle.h> | 66 | #include <qplatinumstyle.h> |
67 | #include <qwindowsstyle.h> | 67 | #include <qwindowsstyle.h> |
68 | #include <qmotifstyle.h> | 68 | #include <qmotifstyle.h> |
69 | #include <qmotifplusstyle.h> | 69 | #include <qmotifplusstyle.h> |
70 | #include "lightstyle.h" | 70 | #include "lightstyle.h" |
71 | 71 | ||
72 | #include <qpe/qlibrary.h> | 72 | #include <qpe/qlibrary.h> |
73 | #endif | 73 | #endif |
74 | #include "global.h" | 74 | #include "global.h" |
75 | #include "resource.h" | 75 | #include "resource.h" |
76 | #if QT_VERSION <= 230 && defined(QT_NO_CODECS) | 76 | #if QT_VERSION <= 230 && defined(QT_NO_CODECS) |
77 | #include "qutfcodec.h" | 77 | #include "qutfcodec.h" |
78 | #endif | 78 | #endif |
79 | #include "config.h" | 79 | #include "config.h" |
80 | #include "network.h" | 80 | #include "network.h" |
81 | #ifdef QWS | 81 | #ifdef QWS |
82 | #include "fontmanager.h" | 82 | #include "fontmanager.h" |
83 | #include "fontdatabase.h" | 83 | #include "fontdatabase.h" |
84 | #endif | 84 | #endif |
85 | 85 | ||
86 | #include "alarmserver.h" | 86 | #include "alarmserver.h" |
87 | #include "applnk.h" | 87 | #include "applnk.h" |
88 | #include "qpemenubar.h" | 88 | #include "qpemenubar.h" |
89 | #include "textcodecinterface.h" | 89 | #include "textcodecinterface.h" |
90 | #include "imagecodecinterface.h" | 90 | #include "imagecodecinterface.h" |
91 | #include <qtopia/qpeglobal.h> | 91 | #include <qtopia/qpeglobal.h> |
92 | 92 | ||
93 | #include <unistd.h> | 93 | #include <unistd.h> |
94 | #include <sys/file.h> | 94 | #include <sys/file.h> |
95 | #include <sys/ioctl.h> | 95 | #include <sys/ioctl.h> |
96 | #ifndef QT_NO_SOUND | 96 | #ifndef QT_NO_SOUND |
97 | #include <sys/soundcard.h> | 97 | #include <sys/soundcard.h> |
98 | #endif | 98 | #endif |
99 | #include "qt_override_p.h" | 99 | #include "qt_override_p.h" |
100 | 100 | ||
101 | #include <backend/rohfeedback.h> | 101 | #include <backend/rohfeedback.h> |
102 | 102 | ||
103 | 103 | ||
104 | static bool useBigPixmaps = 0; | 104 | static bool useBigPixmaps = 0; |
105 | 105 | ||
106 | class HackWidget : public QWidget | 106 | class HackWidget : public QWidget |
107 | { | 107 | { |
108 | public: | 108 | public: |
109 | bool needsOk() | 109 | bool needsOk() |
110 | { return (getWState() & WState_Reserved1 ); } | 110 | { return (getWState() & WState_Reserved1 ); } |
111 | 111 | ||
112 | QRect normalGeometry() | 112 | QRect normalGeometry() |
113 | { return topData()->normalGeometry; }; | 113 | { return topData()->normalGeometry; }; |
114 | }; | 114 | }; |
115 | 115 | ||
116 | class QPEApplicationData | 116 | class QPEApplicationData |
117 | { | 117 | { |
118 | public: | 118 | public: |
119 | QPEApplicationData ( ) : | 119 | QPEApplicationData ( ) : |
120 | presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), | 120 | presstimer( 0 ), presswidget( 0 ), rightpressed( false ), kbgrabbed( false ), |
121 | notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), | 121 | notbusysent( false ), preloaded( false ), forceshow( false ), nomaximize( false ), |
122 | keep_running( true ), qcopQok( false ), | 122 | keep_running( true ), qcopQok( false ), |
123 | fontFamily( "Vera" ), fontSize( 10 ), smallIconSize( 14 ), | 123 | fontFamily( "Vera" ), fontSize( 10 ), smallIconSize( 14 ), |
124 | bigIconSize( 32 ), qpe_main_widget( 0 ) | 124 | bigIconSize( 32 ), qpe_main_widget( 0 ) |
125 | { | 125 | { |
126 | Config cfg( "qpe" ); | 126 | Config cfg( "qpe" ); |
127 | cfg.setGroup( "Appearance" ); | 127 | cfg.setGroup( "Appearance" ); |
128 | useBigPixmaps = cfg.readBoolEntry( "useBigPixmaps", false ); | 128 | useBigPixmaps = cfg.readBoolEntry( "useBigPixmaps", false ); |
129 | fontFamily = cfg.readEntry( "FontFamily", "Vera" ); | 129 | fontFamily = cfg.readEntry( "FontFamily", "Vera" ); |
130 | fontSize = cfg.readNumEntry( "FontSize", 10 ); | 130 | fontSize = cfg.readNumEntry( "FontSize", 10 ); |
131 | smallIconSize = cfg.readNumEntry( "SmallIconSize", 14 ); | 131 | smallIconSize = cfg.readNumEntry( "SmallIconSize", 14 ); |
132 | bigIconSize = cfg.readNumEntry( "BigIconSize", 32 ); | 132 | bigIconSize = cfg.readNumEntry( "BigIconSize", 32 ); |
133 | #ifdef OPIE_WITHROHFEEDBACK | 133 | #ifdef OPIE_WITHROHFEEDBACK |
134 | RoH = 0; | 134 | RoH = 0; |
135 | #endif | 135 | #endif |
136 | } | 136 | } |
137 | 137 | ||
138 | int presstimer; | 138 | int presstimer; |
139 | QWidget* presswidget; | 139 | QWidget* presswidget; |
140 | QPoint presspos; | 140 | QPoint presspos; |
141 | #ifdef OPIE_WITHROHFEEDBACK | 141 | #ifdef OPIE_WITHROHFEEDBACK |
142 | Opie::Internal::RoHFeedback *RoH; | 142 | Opie::Internal::RoHFeedback *RoH; |
143 | #endif | 143 | #endif |
144 | 144 | ||
145 | bool rightpressed : 1; | 145 | bool rightpressed : 1; |
146 | bool kbgrabbed : 1; | 146 | bool kbgrabbed : 1; |
147 | bool notbusysent : 1; | 147 | bool notbusysent : 1; |
148 | bool preloaded : 1; | 148 | bool preloaded : 1; |
149 | bool forceshow : 1; | 149 | bool forceshow : 1; |
150 | bool nomaximize : 1; | 150 | bool nomaximize : 1; |
151 | bool keep_running : 1; | 151 | bool keep_running : 1; |
152 | bool qcopQok : 1; | 152 | bool qcopQok : 1; |
153 | 153 | ||
154 | QCString fontFamily; | 154 | QCString fontFamily; |
155 | int fontSize; | 155 | int fontSize; |
156 | int smallIconSize; | 156 | int smallIconSize; |
157 | int bigIconSize; | 157 | int bigIconSize; |
158 | 158 | ||
159 | QString appName; | 159 | QString appName; |
160 | struct QCopRec | 160 | struct QCopRec |
161 | { | 161 | { |
162 | QCopRec( const QCString &ch, const QCString &msg, | 162 | QCopRec( const QCString &ch, const QCString &msg, |
163 | const QByteArray &d ) : | 163 | const QByteArray &d ) : |
164 | channel( ch ), message( msg ), data( d ) | 164 | channel( ch ), message( msg ), data( d ) |
165 | { } | 165 | { } |
166 | 166 | ||
167 | QCString channel; | 167 | QCString channel; |
168 | QCString message; | 168 | QCString message; |
169 | QByteArray data; | 169 | QByteArray data; |
170 | }; | 170 | }; |
171 | QWidget* qpe_main_widget; | 171 | QWidget* qpe_main_widget; |
172 | QGuardedPtr<QWidget> lastraised; | 172 | QGuardedPtr<QWidget> lastraised; |
173 | QQueue<QCopRec> qcopq; | 173 | QQueue<QCopRec> qcopq; |
174 | QString styleName; | 174 | QString styleName; |
175 | QString decorationName; | 175 | QString decorationName; |
176 | 176 | ||
177 | void enqueueQCop( const QCString &ch, const QCString &msg, | 177 | void enqueueQCop( const QCString &ch, const QCString &msg, |
178 | const QByteArray &data ) | 178 | const QByteArray &data ) |
179 | { | 179 | { |
180 | qcopq.enqueue( new QCopRec( ch, msg, data ) ); | 180 | qcopq.enqueue( new QCopRec( ch, msg, data ) ); |
181 | } | 181 | } |
182 | void sendQCopQ() | 182 | void sendQCopQ() |
183 | { | 183 | { |
184 | if (!qcopQok ) | 184 | if (!qcopQok ) |
185 | return; | 185 | return; |
186 | 186 | ||
187 | QCopRec * r; | 187 | QCopRec * r; |
188 | 188 | ||
189 | while((r=qcopq.dequeue())) { | 189 | while((r=qcopq.dequeue())) { |
190 | // remove from queue before sending... | 190 | // remove from queue before sending... |
191 | // event loop can come around again before getting | 191 | // event loop can come around again before getting |
192 | // back from sendLocally | 192 | // back from sendLocally |
193 | #ifndef QT_NO_COP | 193 | #ifndef QT_NO_COP |
194 | QCopChannel::sendLocally( r->channel, r->message, r->data ); | 194 | QCopChannel::sendLocally( r->channel, r->message, r->data ); |
195 | #endif | 195 | #endif |
196 | 196 | ||
197 | delete r; | 197 | delete r; |
198 | } | 198 | } |
199 | } | 199 | } |
200 | 200 | ||
201 | static void show_mx(QWidget* mw, bool nomaximize, QString &strName) { | 201 | static void show_mx(QWidget* mw, bool nomaximize, QString &strName) { |
202 | if ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) | 202 | if ( mw->inherits("QMainWindow") || mw->isA("QMainWindow") ) |
203 | { | 203 | { |
204 | ( ( QMainWindow* ) mw )->setUsesBigPixmaps( useBigPixmaps ); | 204 | ( ( QMainWindow* ) mw )->setUsesBigPixmaps( useBigPixmaps ); |
205 | } | 205 | } |
206 | QPoint p; | 206 | QPoint p; |
207 | QSize s; | 207 | QSize s; |
208 | bool max; | 208 | bool max; |
209 | 209 | ||
210 | if ( mw->isVisible() ) { | 210 | if ( mw->isVisible() ) { |
211 | if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) { | 211 | if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) { |
212 | mw->resize(s); | 212 | mw->resize(s); |
213 | mw->move(p); | 213 | mw->move(p); |
214 | } | 214 | } |
215 | mw->raise(); | 215 | mw->raise(); |
216 | } else { | 216 | } else { |
217 | 217 | ||
218 | if ( mw->layout() && mw->inherits("QDialog") ) { | 218 | if ( mw->layout() && mw->inherits("QDialog") ) { |
219 | if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) { | 219 | if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) { |
220 | mw->resize(s); | 220 | mw->resize(s); |
221 | mw->move(p); | 221 | mw->move(p); |
222 | 222 | ||
223 | if ( max && !nomaximize ) { | 223 | if ( max && !nomaximize ) { |
224 | mw->showMaximized(); | 224 | mw->showMaximized(); |
225 | } else { | 225 | } else { |
226 | mw->show(); | 226 | mw->show(); |
227 | } | 227 | } |
228 | } else { | 228 | } else { |
229 | QPEApplication::showDialog((QDialog*)mw,nomaximize); | 229 | QPEApplication::showDialog((QDialog*)mw,nomaximize); |
230 | } | 230 | } |
231 | } else { | 231 | } else { |
232 | if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) { | 232 | if ( read_widget_rect(strName, max, p, s) && validate_widget_size(mw, p, s) ) { |
233 | mw->resize(s); | 233 | mw->resize(s); |
234 | mw->move(p); | 234 | mw->move(p); |
235 | } else { //no stored rectangle, make an estimation | 235 | } else { //no stored rectangle, make an estimation |
236 | int x = (qApp->desktop()->width()-mw->frameGeometry().width())/2; | 236 | int x = (qApp->desktop()->width()-mw->frameGeometry().width())/2; |
237 | int y = (qApp->desktop()->height()-mw->frameGeometry().height())/2; | 237 | int y = (qApp->desktop()->height()-mw->frameGeometry().height())/2; |
238 | mw->move( QMAX(x,0), QMAX(y,0) ); | 238 | mw->move( QMAX(x,0), QMAX(y,0) ); |
239 | #ifdef Q_WS_QWS | 239 | #ifdef Q_WS_QWS |
240 | if ( !nomaximize ) | 240 | if ( !nomaximize ) |
241 | mw->showMaximized(); | 241 | mw->showMaximized(); |
242 | #endif | 242 | #endif |
243 | } | 243 | } |
244 | if ( max && !nomaximize ) | 244 | if ( max && !nomaximize ) |
245 | mw->showMaximized(); | 245 | mw->showMaximized(); |
246 | else | 246 | else |
247 | mw->show(); | 247 | mw->show(); |
248 | } | 248 | } |
249 | } | 249 | } |
250 | } | 250 | } |
251 | 251 | ||
252 | static bool read_widget_rect(const QString &app, bool &maximized, QPoint &p, QSize &s) | 252 | static bool read_widget_rect(const QString &app, bool &maximized, QPoint &p, QSize &s) |
253 | { | 253 | { |
254 | maximized = TRUE; | 254 | maximized = TRUE; |
255 | // 350 is the trigger in qwsdefaultdecoration for providing a resize button | 255 | // 350 is the trigger in qwsdefaultdecoration for providing a resize button |
256 | if ( qApp->desktop()->width() <= 350 ) | 256 | if ( qApp->desktop()->width() <= 350 ) |
257 | return FALSE; | 257 | return FALSE; |
258 | 258 | ||
259 | Config cfg( "qpe" ); | 259 | Config cfg( "qpe" ); |
260 | cfg.setGroup("ApplicationPositions"); | 260 | cfg.setGroup("ApplicationPositions"); |
261 | QString str = cfg.readEntry( app, QString::null ); | 261 | QString str = cfg.readEntry( app, QString::null ); |
262 | QStringList l = QStringList::split(",", str); | 262 | QStringList l = QStringList::split(",", str); |
263 | 263 | ||
264 | if ( l.count() == 5) { | 264 | if ( l.count() == 5) { |
265 | p.setX( l[0].toInt() ); | 265 | p.setX( l[0].toInt() ); |
266 | p.setY( l[1].toInt() ); | 266 | p.setY( l[1].toInt() ); |
267 | 267 | ||
268 | s.setWidth( l[2].toInt() ); | 268 | s.setWidth( l[2].toInt() ); |
269 | s.setHeight( l[3].toInt() ); | 269 | s.setHeight( l[3].toInt() ); |
270 | 270 | ||
271 | maximized = l[4].toInt(); | 271 | maximized = l[4].toInt(); |
272 | 272 | ||
273 | return TRUE; | 273 | return TRUE; |
274 | } | 274 | } |
275 | 275 | ||
276 | return FALSE; | 276 | return FALSE; |
277 | } | 277 | } |
278 | 278 | ||
279 | 279 | ||
280 | static bool validate_widget_size(const QWidget *w, QPoint &p, QSize &s) | 280 | static bool validate_widget_size(const QWidget *w, QPoint &p, QSize &s) |
281 | { | 281 | { |
282 | #ifndef Q_WS_QWS | 282 | #ifndef Q_WS_QWS |
283 | QRect qt_maxWindowRect = qApp->desktop()->geometry(); | 283 | QRect qt_maxWindowRect = qApp->desktop()->geometry(); |
284 | #endif | 284 | #endif |
285 | int maxX = qt_maxWindowRect.width(); | 285 | int maxX = qt_maxWindowRect.width(); |
286 | int maxY = qt_maxWindowRect.height(); | 286 | int maxY = qt_maxWindowRect.height(); |
287 | int wWidth = s.width() + ( w->frameGeometry().width() - w->geometry().width() ); | 287 | int wWidth = s.width() + ( w->frameGeometry().width() - w->geometry().width() ); |
288 | int wHeight = s.height() + ( w->frameGeometry().height() - w->geometry().height() ); | 288 | int wHeight = s.height() + ( w->frameGeometry().height() - w->geometry().height() ); |
289 | 289 | ||
290 | // total window size is not allowed to be larger than desktop window size | 290 | // total window size is not allowed to be larger than desktop window size |
291 | if ( ( wWidth >= maxX ) && ( wHeight >= maxY ) ) | 291 | if ( ( wWidth >= maxX ) && ( wHeight >= maxY ) ) |
292 | return FALSE; | 292 | return FALSE; |
293 | 293 | ||
294 | if ( wWidth > maxX ) { | 294 | if ( wWidth > maxX ) { |
295 | s.setWidth( maxX - (w->frameGeometry().width() - w->geometry().width() ) ); | 295 | s.setWidth( maxX - (w->frameGeometry().width() - w->geometry().width() ) ); |
296 | wWidth = maxX; | 296 | wWidth = maxX; |
297 | } | 297 | } |
298 | 298 | ||
299 | if ( wHeight > maxY ) { | 299 | if ( wHeight > maxY ) { |
300 | s.setHeight( maxY - (w->frameGeometry().height() - w->geometry().height() ) ); | 300 | s.setHeight( maxY - (w->frameGeometry().height() - w->geometry().height() ) ); |
301 | wHeight = maxY; | 301 | wHeight = maxY; |
302 | } | 302 | } |
303 | 303 | ||
304 | // any smaller than this and the maximize/close/help buttons will be overlapping | 304 | // any smaller than this and the maximize/close/help buttons will be overlapping |
305 | if ( wWidth < 80 || wHeight < 60 ) | 305 | if ( wWidth < 80 || wHeight < 60 ) |
306 | return FALSE; | 306 | return FALSE; |
307 | 307 | ||
308 | if ( p.x() < 0 ) | 308 | if ( p.x() < 0 ) |
309 | p.setX(0); | 309 | p.setX(0); |
310 | if ( p.y() < 0 ) | 310 | if ( p.y() < 0 ) |
311 | p.setY(0); | 311 | p.setY(0); |
312 | 312 | ||
313 | if ( p.x() + wWidth > maxX ) | 313 | if ( p.x() + wWidth > maxX ) |
314 | p.setX( maxX - wWidth ); | 314 | p.setX( maxX - wWidth ); |
315 | if ( p.y() + wHeight > maxY ) | 315 | if ( p.y() + wHeight > maxY ) |
316 | p.setY( maxY - wHeight ); | 316 | p.setY( maxY - wHeight ); |
317 | 317 | ||
318 | return TRUE; | 318 | return TRUE; |
319 | } | 319 | } |
320 | 320 | ||
321 | static void store_widget_rect(QWidget *w, QString &app) | 321 | static void store_widget_rect(QWidget *w, QString &app) |
322 | { | 322 | { |
323 | // 350 is the trigger in qwsdefaultdecoration for providing a resize button | 323 | // 350 is the trigger in qwsdefaultdecoration for providing a resize button |
324 | if ( qApp->desktop()->width() <= 350 ) | 324 | if ( qApp->desktop()->width() <= 350 ) |
325 | return; | 325 | return; |
326 | // we use these to map the offset of geometry and pos. ( we can only use normalGeometry to | 326 | // we use these to map the offset of geometry and pos. ( we can only use normalGeometry to |
327 | // get the non-maximized version, so we have to do it the hard way ) | 327 | // get the non-maximized version, so we have to do it the hard way ) |
328 | int offsetX = w->x() - w->geometry().left(); | 328 | int offsetX = w->x() - w->geometry().left(); |
329 | int offsetY = w->y() - w->geometry().top(); | 329 | int offsetY = w->y() - w->geometry().top(); |
330 | 330 | ||
331 | QRect r; | 331 | QRect r; |
332 | if ( w->isMaximized() ) | 332 | if ( w->isMaximized() ) |
333 | r = ( (HackWidget *) w)->normalGeometry(); | 333 | r = ( (HackWidget *) w)->normalGeometry(); |
334 | else | 334 | else |
335 | r = w->geometry(); | 335 | r = w->geometry(); |
336 | 336 | ||
337 | // Stores the window placement as pos(), size() (due to the offset mapping) | 337 | // Stores the window placement as pos(), size() (due to the offset mapping) |
338 | Config cfg( "qpe" ); | 338 | Config cfg( "qpe" ); |
339 | cfg.setGroup("ApplicationPositions"); | 339 | cfg.setGroup("ApplicationPositions"); |
340 | QString s; | 340 | QString s; |
341 | s.sprintf("%d,%d,%d,%d,%d", r.left() + offsetX, r.top() + offsetY, r.width(), r.height(), w->isMaximized() ); | 341 | s.sprintf("%d,%d,%d,%d,%d", r.left() + offsetX, r.top() + offsetY, r.width(), r.height(), w->isMaximized() ); |
342 | cfg.writeEntry( app, s ); | 342 | cfg.writeEntry( app, s ); |
343 | } | 343 | } |
344 | 344 | ||
345 | static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) | 345 | static bool setWidgetCaptionFromAppName( QWidget* /*mw*/, const QString& /*appName*/, const QString& /*appsPath*/ ) |
346 | { | 346 | { |
347 | /* | 347 | /* |
348 | // This works but disable it for now until it is safe to apply | 348 | // This works but disable it for now until it is safe to apply |
349 | // What is does is scan the .desktop files of all the apps for | 349 | // What is does is scan the .desktop files of all the apps for |
350 | // the applnk that has the corresponding argv[0] as this program | 350 | // the applnk that has the corresponding argv[0] as this program |
351 | // then it uses the name stored in the .desktop file as the caption | 351 | // then it uses the name stored in the .desktop file as the caption |
352 | // for the main widget. This saves duplicating translations for | 352 | // for the main widget. This saves duplicating translations for |
353 | // the app name in the program and in the .desktop files. | 353 | // the app name in the program and in the .desktop files. |
354 | 354 | ||
355 | AppLnkSet apps( appsPath ); | 355 | AppLnkSet apps( appsPath ); |
356 | 356 | ||
357 | QList<AppLnk> appsList = apps.children(); | 357 | QList<AppLnk> appsList = apps.children(); |
358 | for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { | 358 | for ( QListIterator<AppLnk> it(appsList); it.current(); ++it ) { |
359 | if ( (*it)->exec() == appName ) { | 359 | if ( (*it)->exec() == appName ) { |
360 | mw->setCaption( (*it)->name() ); | 360 | mw->setCaption( (*it)->name() ); |
361 | return TRUE; | 361 | return TRUE; |
362 | } | 362 | } |
363 | } | 363 | } |
364 | */ | 364 | */ |
365 | return FALSE; | 365 | return FALSE; |
366 | } | 366 | } |
367 | 367 | ||
368 | 368 | ||
369 | void show(QWidget* mw, bool nomax) | 369 | void show(QWidget* mw, bool nomax) |
370 | { | 370 | { |
371 | setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); | 371 | setWidgetCaptionFromAppName( mw, appName, QPEApplication::qpeDir() + "apps" ); |
372 | nomaximize = nomax; | 372 | nomaximize = nomax; |
373 | qpe_main_widget = mw; | 373 | qpe_main_widget = mw; |
374 | qcopQok = TRUE; | 374 | qcopQok = TRUE; |
375 | #ifndef QT_NO_COP | 375 | #ifndef QT_NO_COP |
376 | 376 | ||
377 | sendQCopQ(); | 377 | sendQCopQ(); |
378 | #endif | 378 | #endif |
379 | 379 | ||
380 | if ( preloaded ) { | 380 | if ( preloaded ) { |
381 | if (forceshow) | 381 | if (forceshow) |
382 | show_mx(mw, nomax, appName); | 382 | show_mx(mw, nomax, appName); |
383 | } | 383 | } |
384 | else if ( keep_running ) { | 384 | else if ( keep_running ) { |
385 | show_mx(mw, nomax, appName); | 385 | show_mx(mw, nomax, appName); |
386 | } | 386 | } |
387 | } | 387 | } |
388 | 388 | ||
389 | void loadTextCodecs() | 389 | void loadTextCodecs() |
390 | { | 390 | { |
391 | QString path = QPEApplication::qpeDir() + "plugins/textcodecs"; | 391 | QString path = QPEApplication::qpeDir() + "plugins/textcodecs"; |
392 | #ifdef Q_OS_MACX | 392 | #ifdef Q_OS_MACX |
393 | QDir dir( path, "lib*.dylib" ); | 393 | QDir dir( path, "lib*.dylib" ); |
394 | #else | 394 | #else |
395 | QDir dir( path, "lib*.so" ); | 395 | QDir dir( path, "lib*.so" ); |
396 | #endif | 396 | #endif |
397 | QStringList list; | 397 | QStringList list; |
398 | if ( dir. exists ( )) | 398 | if ( dir. exists ( )) |
399 | list = dir.entryList(); | 399 | list = dir.entryList(); |
400 | QStringList::Iterator it; | 400 | QStringList::Iterator it; |
401 | for ( it = list.begin(); it != list.end(); ++it ) { | 401 | for ( it = list.begin(); it != list.end(); ++it ) { |
402 | TextCodecInterface *iface = 0; | 402 | TextCodecInterface *iface = 0; |
403 | QLibrary *lib = new QLibrary( path + "/" + *it ); | 403 | QLibrary *lib = new QLibrary( path + "/" + *it ); |
404 | if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { | 404 | if ( lib->queryInterface( IID_QtopiaTextCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { |
405 | QValueList<int> mibs = iface->mibEnums(); | 405 | QValueList<int> mibs = iface->mibEnums(); |
406 | for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { | 406 | for (QValueList<int>::ConstIterator i = mibs.begin(); i != mibs.end(); ++i) { |
407 | (void)iface->createForMib(*i); | 407 | (void)iface->createForMib(*i); |
408 | // ### it exists now; need to remember if we can delete it | 408 | // ### it exists now; need to remember if we can delete it |
409 | } | 409 | } |
410 | } | 410 | } |
411 | else { | 411 | else { |
412 | lib->unload(); | 412 | lib->unload(); |
413 | delete lib; | 413 | delete lib; |
414 | } | 414 | } |
415 | } | 415 | } |
416 | } | 416 | } |
417 | 417 | ||
418 | void loadImageCodecs() | 418 | void loadImageCodecs() |
419 | { | 419 | { |
420 | QString path = QPEApplication::qpeDir() + "plugins/imagecodecs"; | 420 | QString path = QPEApplication::qpeDir() + "plugins/imagecodecs"; |
421 | #ifdef Q_OS_MACX | 421 | #ifdef Q_OS_MACX |
422 | QDir dir( path, "lib*.dylib" ); | 422 | QDir dir( path, "lib*.dylib" ); |
423 | #else | 423 | #else |
424 | QDir dir( path, "lib*.so" ); | 424 | QDir dir( path, "lib*.so" ); |
425 | #endif | 425 | #endif |
426 | QStringList list; | 426 | QStringList list; |
427 | if ( dir. exists ( )) | 427 | if ( dir. exists ( )) |
428 | list = dir.entryList(); | 428 | list = dir.entryList(); |
429 | QStringList::Iterator it; | 429 | QStringList::Iterator it; |
430 | for ( it = list.begin(); it != list.end(); ++it ) { | 430 | for ( it = list.begin(); it != list.end(); ++it ) { |
431 | ImageCodecInterface *iface = 0; | 431 | ImageCodecInterface *iface = 0; |
432 | QLibrary *lib = new QLibrary( path + "/" + *it ); | 432 | QLibrary *lib = new QLibrary( path + "/" + *it ); |
433 | if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { | 433 | if ( lib->queryInterface( IID_QtopiaImageCodec, (QUnknownInterface**)&iface ) == QS_OK && iface ) { |
434 | QStringList formats = iface->keys(); | 434 | QStringList formats = iface->keys(); |
435 | for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { | 435 | for (QStringList::ConstIterator i = formats.begin(); i != formats.end(); ++i) { |
436 | (void)iface->installIOHandler(*i); | 436 | (void)iface->installIOHandler(*i); |
437 | // ### it exists now; need to remember if we can delete it | 437 | // ### it exists now; need to remember if we can delete it |
438 | } | 438 | } |
439 | } | 439 | } |
440 | else { | 440 | else { |
441 | lib->unload(); | 441 | lib->unload(); |
442 | delete lib; | 442 | delete lib; |
443 | } | 443 | } |
444 | } | 444 | } |
445 | } | 445 | } |
446 | 446 | ||
447 | }; | 447 | }; |
@@ -1462,769 +1462,769 @@ void QPEApplication::systemMessage( const QCString& msg, const QByteArray& data | |||
1462 | if ( type() == GuiServer ) { | 1462 | if ( type() == GuiServer ) { |
1463 | int r; | 1463 | int r; |
1464 | stream >> r; | 1464 | stream >> r; |
1465 | setDefaultRotation( r ); | 1465 | setDefaultRotation( r ); |
1466 | } | 1466 | } |
1467 | } | 1467 | } |
1468 | else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net> | 1468 | else if ( msg == "setCurrentMode(int,int,int)" ) { // Added: 2003-06-11 by Tim Ansell <mithro@mithis.net> |
1469 | if ( type() == GuiServer ) { | 1469 | if ( type() == GuiServer ) { |
1470 | int x, y, depth; | 1470 | int x, y, depth; |
1471 | stream >> x; | 1471 | stream >> x; |
1472 | stream >> y; | 1472 | stream >> y; |
1473 | stream >> depth; | 1473 | stream >> depth; |
1474 | setCurrentMode( x, y, depth ); | 1474 | setCurrentMode( x, y, depth ); |
1475 | } | 1475 | } |
1476 | } | 1476 | } |
1477 | else if ( msg == "reset()" ) { | 1477 | else if ( msg == "reset()" ) { |
1478 | if ( type() != GuiServer ) | 1478 | if ( type() != GuiServer ) |
1479 | reset(); | 1479 | reset(); |
1480 | } | 1480 | } |
1481 | else if ( msg == "setCurrentRotation(int)" ) { | 1481 | else if ( msg == "setCurrentRotation(int)" ) { |
1482 | int r; | 1482 | int r; |
1483 | stream >> r; | 1483 | stream >> r; |
1484 | setCurrentRotation( r ); | 1484 | setCurrentRotation( r ); |
1485 | } | 1485 | } |
1486 | else if ( msg == "shutdown()" ) { | 1486 | else if ( msg == "shutdown()" ) { |
1487 | if ( type() == GuiServer ) | 1487 | if ( type() == GuiServer ) |
1488 | shutdown(); | 1488 | shutdown(); |
1489 | } | 1489 | } |
1490 | else if ( msg == "quit()" ) { | 1490 | else if ( msg == "quit()" ) { |
1491 | if ( type() != GuiServer ) | 1491 | if ( type() != GuiServer ) |
1492 | tryQuit(); | 1492 | tryQuit(); |
1493 | } | 1493 | } |
1494 | else if ( msg == "forceQuit()" ) { | 1494 | else if ( msg == "forceQuit()" ) { |
1495 | if ( type() != GuiServer ) | 1495 | if ( type() != GuiServer ) |
1496 | quit(); | 1496 | quit(); |
1497 | } | 1497 | } |
1498 | else if ( msg == "restart()" ) { | 1498 | else if ( msg == "restart()" ) { |
1499 | if ( type() == GuiServer ) | 1499 | if ( type() == GuiServer ) |
1500 | restart(); | 1500 | restart(); |
1501 | } | 1501 | } |
1502 | else if ( msg == "language(QString)" ) { | 1502 | else if ( msg == "language(QString)" ) { |
1503 | if ( type() == GuiServer ) { | 1503 | if ( type() == GuiServer ) { |
1504 | QString l; | 1504 | QString l; |
1505 | stream >> l; | 1505 | stream >> l; |
1506 | QString cl = getenv( "LANG" ); | 1506 | QString cl = getenv( "LANG" ); |
1507 | if ( cl != l ) { | 1507 | if ( cl != l ) { |
1508 | if ( l.isNull() ) | 1508 | if ( l.isNull() ) |
1509 | unsetenv( "LANG" ); | 1509 | unsetenv( "LANG" ); |
1510 | else | 1510 | else |
1511 | setenv( "LANG", l.latin1(), 1 ); | 1511 | setenv( "LANG", l.latin1(), 1 ); |
1512 | restart(); | 1512 | restart(); |
1513 | } | 1513 | } |
1514 | } | 1514 | } |
1515 | } | 1515 | } |
1516 | else if ( msg == "timeChange(QString)" ) { | 1516 | else if ( msg == "timeChange(QString)" ) { |
1517 | QString t; | 1517 | QString t; |
1518 | stream >> t; | 1518 | stream >> t; |
1519 | if ( t.isNull() ) | 1519 | if ( t.isNull() ) |
1520 | unsetenv( "TZ" ); | 1520 | unsetenv( "TZ" ); |
1521 | else | 1521 | else |
1522 | setenv( "TZ", t.latin1(), 1 ); | 1522 | setenv( "TZ", t.latin1(), 1 ); |
1523 | // emit the signal so everyone else knows... | 1523 | // emit the signal so everyone else knows... |
1524 | emit timeChanged(); | 1524 | emit timeChanged(); |
1525 | } | 1525 | } |
1526 | else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { | 1526 | else if ( msg == "addAlarm(QDateTime,QCString,QCString,int)" ) { |
1527 | if ( type() == GuiServer ) { | 1527 | if ( type() == GuiServer ) { |
1528 | QDateTime when; | 1528 | QDateTime when; |
1529 | QCString channel, message; | 1529 | QCString channel, message; |
1530 | int data; | 1530 | int data; |
1531 | stream >> when >> channel >> message >> data; | 1531 | stream >> when >> channel >> message >> data; |
1532 | AlarmServer::addAlarm( when, channel, message, data ); | 1532 | AlarmServer::addAlarm( when, channel, message, data ); |
1533 | } | 1533 | } |
1534 | } | 1534 | } |
1535 | else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { | 1535 | else if ( msg == "deleteAlarm(QDateTime,QCString,QCString,int)" ) { |
1536 | if ( type() == GuiServer ) { | 1536 | if ( type() == GuiServer ) { |
1537 | QDateTime when; | 1537 | QDateTime when; |
1538 | QCString channel, message; | 1538 | QCString channel, message; |
1539 | int data; | 1539 | int data; |
1540 | stream >> when >> channel >> message >> data; | 1540 | stream >> when >> channel >> message >> data; |
1541 | AlarmServer::deleteAlarm( when, channel, message, data ); | 1541 | AlarmServer::deleteAlarm( when, channel, message, data ); |
1542 | } | 1542 | } |
1543 | } | 1543 | } |
1544 | else if ( msg == "clockChange(bool)" ) { | 1544 | else if ( msg == "clockChange(bool)" ) { |
1545 | int tmp; | 1545 | int tmp; |
1546 | stream >> tmp; | 1546 | stream >> tmp; |
1547 | emit clockChanged( tmp ); | 1547 | emit clockChanged( tmp ); |
1548 | } | 1548 | } |
1549 | else if ( msg == "weekChange(bool)" ) { | 1549 | else if ( msg == "weekChange(bool)" ) { |
1550 | int tmp; | 1550 | int tmp; |
1551 | stream >> tmp; | 1551 | stream >> tmp; |
1552 | emit weekChanged( tmp ); | 1552 | emit weekChanged( tmp ); |
1553 | } | 1553 | } |
1554 | else if ( msg == "setDateFormat(DateFormat)" ) { | 1554 | else if ( msg == "setDateFormat(DateFormat)" ) { |
1555 | DateFormat tmp; | 1555 | DateFormat tmp; |
1556 | stream >> tmp; | 1556 | stream >> tmp; |
1557 | emit dateFormatChanged( tmp ); | 1557 | emit dateFormatChanged( tmp ); |
1558 | } | 1558 | } |
1559 | else if ( msg == "setVolume(int,int)" ) { | 1559 | else if ( msg == "setVolume(int,int)" ) { |
1560 | int t, v; | 1560 | int t, v; |
1561 | stream >> t >> v; | 1561 | stream >> t >> v; |
1562 | setVolume( t, v ); | 1562 | setVolume( t, v ); |
1563 | emit volumeChanged( muted ); | 1563 | emit volumeChanged( muted ); |
1564 | } | 1564 | } |
1565 | else if ( msg == "volumeChange(bool)" ) { | 1565 | else if ( msg == "volumeChange(bool)" ) { |
1566 | stream >> muted; | 1566 | stream >> muted; |
1567 | setVolume(); | 1567 | setVolume(); |
1568 | emit volumeChanged( muted ); | 1568 | emit volumeChanged( muted ); |
1569 | } | 1569 | } |
1570 | else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> | 1570 | else if ( msg == "setMic(int,int)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> |
1571 | int t, v; | 1571 | int t, v; |
1572 | stream >> t >> v; | 1572 | stream >> t >> v; |
1573 | setMic( t, v ); | 1573 | setMic( t, v ); |
1574 | emit micChanged( micMuted ); | 1574 | emit micChanged( micMuted ); |
1575 | } | 1575 | } |
1576 | else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> | 1576 | else if ( msg == "micChange(bool)" ) { // Added: 2002-02-08 by Jeremy Cowgar <jc@cowgar.com> |
1577 | stream >> micMuted; | 1577 | stream >> micMuted; |
1578 | setMic(); | 1578 | setMic(); |
1579 | emit micChanged( micMuted ); | 1579 | emit micChanged( micMuted ); |
1580 | } | 1580 | } |
1581 | else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> | 1581 | else if ( msg == "setBass(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> |
1582 | int t, v; | 1582 | int t, v; |
1583 | stream >> t >> v; | 1583 | stream >> t >> v; |
1584 | setBass( t, v ); | 1584 | setBass( t, v ); |
1585 | } | 1585 | } |
1586 | else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> | 1586 | else if ( msg == "bassChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> |
1587 | setBass(); | 1587 | setBass(); |
1588 | } | 1588 | } |
1589 | else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> | 1589 | else if ( msg == "setTreble(int,int)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> |
1590 | int t, v; | 1590 | int t, v; |
1591 | stream >> t >> v; | 1591 | stream >> t >> v; |
1592 | setTreble( t, v ); | 1592 | setTreble( t, v ); |
1593 | } | 1593 | } |
1594 | else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> | 1594 | else if ( msg == "trebleChange(bool)" ) { // Added: 2002-12-13 by Maximilian Reiss <harlekin@handhelds.org> |
1595 | setTreble(); | 1595 | setTreble(); |
1596 | } else if ( msg == "getMarkedText()" ) { | 1596 | } else if ( msg == "getMarkedText()" ) { |
1597 | if ( type() == GuiServer ) { | 1597 | if ( type() == GuiServer ) { |
1598 | const ushort unicode = 'C'-'@'; | 1598 | const ushort unicode = 'C'-'@'; |
1599 | const int scan = Key_C; | 1599 | const int scan = Key_C; |
1600 | qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); | 1600 | qwsServer->processKeyEvent( unicode, scan, ControlButton, TRUE, FALSE ); |
1601 | qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); | 1601 | qwsServer->processKeyEvent( unicode, scan, ControlButton, FALSE, FALSE ); |
1602 | } | 1602 | } |
1603 | } else if ( msg == "newChannel(QString)") { | 1603 | } else if ( msg == "newChannel(QString)") { |
1604 | QString myChannel = "QPE/Application/" + d->appName; | 1604 | QString myChannel = "QPE/Application/" + d->appName; |
1605 | QString channel; | 1605 | QString channel; |
1606 | stream >> channel; | 1606 | stream >> channel; |
1607 | if (channel == myChannel) { | 1607 | if (channel == myChannel) { |
1608 | processQCopFile(); | 1608 | processQCopFile(); |
1609 | d->sendQCopQ(); | 1609 | d->sendQCopQ(); |
1610 | } | 1610 | } |
1611 | } | 1611 | } |
1612 | 1612 | ||
1613 | 1613 | ||
1614 | #endif | 1614 | #endif |
1615 | } | 1615 | } |
1616 | 1616 | ||
1617 | 1617 | ||
1618 | 1618 | ||
1619 | 1619 | ||
1620 | 1620 | ||
1621 | /*! | 1621 | /*! |
1622 | \internal | 1622 | \internal |
1623 | */ | 1623 | */ |
1624 | bool QPEApplication::raiseAppropriateWindow() | 1624 | bool QPEApplication::raiseAppropriateWindow() |
1625 | { | 1625 | { |
1626 | bool r=FALSE; | 1626 | bool r=FALSE; |
1627 | 1627 | ||
1628 | // 1. Raise the main widget | 1628 | // 1. Raise the main widget |
1629 | QWidget *top = d->qpe_main_widget; | 1629 | QWidget *top = d->qpe_main_widget; |
1630 | if ( !top ) top = mainWidget(); | 1630 | if ( !top ) top = mainWidget(); |
1631 | 1631 | ||
1632 | if ( top && d->keep_running ) { | 1632 | if ( top && d->keep_running ) { |
1633 | if ( top->isVisible() ) | 1633 | if ( top->isVisible() ) |
1634 | r = TRUE; | 1634 | r = TRUE; |
1635 | else if (d->preloaded) { | 1635 | else if (d->preloaded) { |
1636 | // We are preloaded and not visible.. pretend we just started.. | 1636 | // We are preloaded and not visible.. pretend we just started.. |
1637 | #ifndef QT_NO_COP | 1637 | #ifndef QT_NO_COP |
1638 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); | 1638 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); |
1639 | e << d->appName; | 1639 | e << d->appName; |
1640 | #endif | 1640 | #endif |
1641 | } | 1641 | } |
1642 | 1642 | ||
1643 | d->show_mx(top,d->nomaximize, d->appName); | 1643 | d->show_mx(top,d->nomaximize, d->appName); |
1644 | top->raise(); | 1644 | top->raise(); |
1645 | } | 1645 | } |
1646 | 1646 | ||
1647 | QWidget *topm = activeModalWidget(); | 1647 | QWidget *topm = activeModalWidget(); |
1648 | 1648 | ||
1649 | // 2. Raise any parentless widgets (except top and topm, as they | 1649 | // 2. Raise any parentless widgets (except top and topm, as they |
1650 | // are raised before and after this loop). Order from most | 1650 | // are raised before and after this loop). Order from most |
1651 | // recently raised as deepest to least recently as top, so | 1651 | // recently raised as deepest to least recently as top, so |
1652 | // that repeated calls cycle through widgets. | 1652 | // that repeated calls cycle through widgets. |
1653 | QWidgetList *list = topLevelWidgets(); | 1653 | QWidgetList *list = topLevelWidgets(); |
1654 | if ( list ) { | 1654 | if ( list ) { |
1655 | bool foundlast = FALSE; | 1655 | bool foundlast = FALSE; |
1656 | QWidget* topsub = 0; | 1656 | QWidget* topsub = 0; |
1657 | if ( d->lastraised ) { | 1657 | if ( d->lastraised ) { |
1658 | for (QWidget* w = list->first(); w; w = list->next()) { | 1658 | for (QWidget* w = list->first(); w; w = list->next()) { |
1659 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { | 1659 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { |
1660 | if ( w == d->lastraised ) | 1660 | if ( w == d->lastraised ) |
1661 | foundlast = TRUE; | 1661 | foundlast = TRUE; |
1662 | if ( foundlast ) { | 1662 | if ( foundlast ) { |
1663 | w->raise(); | 1663 | w->raise(); |
1664 | topsub = w; | 1664 | topsub = w; |
1665 | } | 1665 | } |
1666 | } | 1666 | } |
1667 | } | 1667 | } |
1668 | } | 1668 | } |
1669 | for (QWidget* w = list->first(); w; w = list->next()) { | 1669 | for (QWidget* w = list->first(); w; w = list->next()) { |
1670 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { | 1670 | if ( !w->parentWidget() && w != topm && w->isVisible() && !w->isDesktop() ) { |
1671 | if ( w == d->lastraised ) | 1671 | if ( w == d->lastraised ) |
1672 | break; | 1672 | break; |
1673 | w->raise(); | 1673 | w->raise(); |
1674 | topsub = w; | 1674 | topsub = w; |
1675 | } | 1675 | } |
1676 | } | 1676 | } |
1677 | d->lastraised = topsub; | 1677 | d->lastraised = topsub; |
1678 | delete list; | 1678 | delete list; |
1679 | } | 1679 | } |
1680 | 1680 | ||
1681 | // 3. Raise the active modal widget. | 1681 | // 3. Raise the active modal widget. |
1682 | if ( topm ) { | 1682 | if ( topm ) { |
1683 | topm->show(); | 1683 | topm->show(); |
1684 | topm->raise(); | 1684 | topm->raise(); |
1685 | // If we haven't already handled the fastAppShowing message | 1685 | // If we haven't already handled the fastAppShowing message |
1686 | if (!top && d->preloaded) { | 1686 | if (!top && d->preloaded) { |
1687 | #ifndef QT_NO_COP | 1687 | #ifndef QT_NO_COP |
1688 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); | 1688 | QCopEnvelope e("QPE/System", "fastAppShowing(QString)"); |
1689 | e << d->appName; | 1689 | e << d->appName; |
1690 | #endif | 1690 | #endif |
1691 | } | 1691 | } |
1692 | r = FALSE; | 1692 | r = FALSE; |
1693 | } | 1693 | } |
1694 | 1694 | ||
1695 | return r; | 1695 | return r; |
1696 | } | 1696 | } |
1697 | 1697 | ||
1698 | 1698 | ||
1699 | void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) | 1699 | void QPEApplication::pidMessage( const QCString& msg, const QByteArray& data) |
1700 | { | 1700 | { |
1701 | #ifdef Q_WS_QWS | 1701 | #ifdef Q_WS_QWS |
1702 | 1702 | ||
1703 | if ( msg == "quit()" ) { | 1703 | if ( msg == "quit()" ) { |
1704 | tryQuit(); | 1704 | tryQuit(); |
1705 | } | 1705 | } |
1706 | else if ( msg == "quitIfInvisible()" ) { | 1706 | else if ( msg == "quitIfInvisible()" ) { |
1707 | if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) | 1707 | if ( d->qpe_main_widget && !d->qpe_main_widget->isVisible() ) |
1708 | quit(); | 1708 | quit(); |
1709 | } | 1709 | } |
1710 | else if ( msg == "close()" ) { | 1710 | else if ( msg == "close()" ) { |
1711 | hideOrQuit(); | 1711 | hideOrQuit(); |
1712 | } | 1712 | } |
1713 | else if ( msg == "disablePreload()" ) { | 1713 | else if ( msg == "disablePreload()" ) { |
1714 | d->preloaded = FALSE; | 1714 | d->preloaded = FALSE; |
1715 | d->keep_running = TRUE; | 1715 | d->keep_running = TRUE; |
1716 | /* so that quit will quit */ | 1716 | /* so that quit will quit */ |
1717 | } | 1717 | } |
1718 | else if ( msg == "enablePreload()" ) { | 1718 | else if ( msg == "enablePreload()" ) { |
1719 | if (d->qpe_main_widget) | 1719 | if (d->qpe_main_widget) |
1720 | d->preloaded = TRUE; | 1720 | d->preloaded = TRUE; |
1721 | d->keep_running = TRUE; | 1721 | d->keep_running = TRUE; |
1722 | /* so next quit won't quit */ | 1722 | /* so next quit won't quit */ |
1723 | } | 1723 | } |
1724 | else if ( msg == "raise()" ) { | 1724 | else if ( msg == "raise()" ) { |
1725 | d->keep_running = TRUE; | 1725 | d->keep_running = TRUE; |
1726 | d->notbusysent = FALSE; | 1726 | d->notbusysent = FALSE; |
1727 | raiseAppropriateWindow(); | 1727 | raiseAppropriateWindow(); |
1728 | // Tell the system we're still chugging along... | 1728 | // Tell the system we're still chugging along... |
1729 | QCopEnvelope e("QPE/System", "appRaised(QString)"); | 1729 | QCopEnvelope e("QPE/System", "appRaised(QString)"); |
1730 | e << d->appName; | 1730 | e << d->appName; |
1731 | } | 1731 | } |
1732 | else if ( msg == "flush()" ) { | 1732 | else if ( msg == "flush()" ) { |
1733 | emit flush(); | 1733 | emit flush(); |
1734 | // we need to tell the desktop | 1734 | // we need to tell the desktop |
1735 | QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); | 1735 | QCopEnvelope e( "QPE/Desktop", "flushDone(QString)" ); |
1736 | e << d->appName; | 1736 | e << d->appName; |
1737 | } | 1737 | } |
1738 | else if ( msg == "reload()" ) { | 1738 | else if ( msg == "reload()" ) { |
1739 | emit reload(); | 1739 | emit reload(); |
1740 | } | 1740 | } |
1741 | else if ( msg == "setDocument(QString)" ) { | 1741 | else if ( msg == "setDocument(QString)" ) { |
1742 | d->keep_running = TRUE; | 1742 | d->keep_running = TRUE; |
1743 | QDataStream stream( data, IO_ReadOnly ); | 1743 | QDataStream stream( data, IO_ReadOnly ); |
1744 | QString doc; | 1744 | QString doc; |
1745 | stream >> doc; | 1745 | stream >> doc; |
1746 | QWidget *mw = mainWidget(); | 1746 | QWidget *mw = mainWidget(); |
1747 | if ( !mw ) | 1747 | if ( !mw ) |
1748 | mw = d->qpe_main_widget; | 1748 | mw = d->qpe_main_widget; |
1749 | if ( mw ) | 1749 | if ( mw ) |
1750 | Global::setDocument( mw, doc ); | 1750 | Global::setDocument( mw, doc ); |
1751 | 1751 | ||
1752 | } else if ( msg == "QPEProcessQCop()" ) { | 1752 | } else if ( msg == "QPEProcessQCop()" ) { |
1753 | processQCopFile(); | 1753 | processQCopFile(); |
1754 | d->sendQCopQ(); | 1754 | d->sendQCopQ(); |
1755 | }else | 1755 | }else |
1756 | { | 1756 | { |
1757 | bool p = d->keep_running; | 1757 | bool p = d->keep_running; |
1758 | d->keep_running = FALSE; | 1758 | d->keep_running = FALSE; |
1759 | emit appMessage( msg, data); | 1759 | emit appMessage( msg, data); |
1760 | if ( d->keep_running ) { | 1760 | if ( d->keep_running ) { |
1761 | d->notbusysent = FALSE; | 1761 | d->notbusysent = FALSE; |
1762 | raiseAppropriateWindow(); | 1762 | raiseAppropriateWindow(); |
1763 | if ( !p ) { | 1763 | if ( !p ) { |
1764 | // Tell the system we're still chugging along... | 1764 | // Tell the system we're still chugging along... |
1765 | #ifndef QT_NO_COP | 1765 | #ifndef QT_NO_COP |
1766 | QCopEnvelope e("QPE/System", "appRaised(QString)"); | 1766 | QCopEnvelope e("QPE/System", "appRaised(QString)"); |
1767 | e << d->appName; | 1767 | e << d->appName; |
1768 | #endif | 1768 | #endif |
1769 | } | 1769 | } |
1770 | } | 1770 | } |
1771 | if ( p ) | 1771 | if ( p ) |
1772 | d->keep_running = p; | 1772 | d->keep_running = p; |
1773 | } | 1773 | } |
1774 | #endif | 1774 | #endif |
1775 | } | 1775 | } |
1776 | 1776 | ||
1777 | 1777 | ||
1778 | /*! | 1778 | /*! |
1779 | Sets widget \a mw as the mainWidget() and shows it. For small windows, | 1779 | Sets widget \a mw as the mainWidget() and shows it. For small windows, |
1780 | consider passing TRUE for \a nomaximize rather than the default FALSE. | 1780 | consider passing TRUE for \a nomaximize rather than the default FALSE. |
1781 | 1781 | ||
1782 | \sa showMainDocumentWidget() | 1782 | \sa showMainDocumentWidget() |
1783 | */ | 1783 | */ |
1784 | void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) | 1784 | void QPEApplication::showMainWidget( QWidget* mw, bool nomaximize ) |
1785 | { | 1785 | { |
1786 | // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit | 1786 | // setMainWidget(mw); this breaks FastLoading because lastWindowClose() would quit |
1787 | d->show(mw, nomaximize ); | 1787 | d->show(mw, nomaximize ); |
1788 | } | 1788 | } |
1789 | 1789 | ||
1790 | /*! | 1790 | /*! |
1791 | Sets widget \a mw as the mainWidget() and shows it. For small windows, | 1791 | Sets widget \a mw as the mainWidget() and shows it. For small windows, |
1792 | consider passing TRUE for \a nomaximize rather than the default FALSE. | 1792 | consider passing TRUE for \a nomaximize rather than the default FALSE. |
1793 | 1793 | ||
1794 | This calls designates the application as | 1794 | This calls designates the application as |
1795 | a \link docwidget.html document-oriented\endlink application. | 1795 | a \link docwidget.html document-oriented\endlink application. |
1796 | 1796 | ||
1797 | The \a mw widget \e must have this slot: setDocument(const QString&). | 1797 | The \a mw widget \e must have this slot: setDocument(const QString&). |
1798 | 1798 | ||
1799 | \sa showMainWidget() | 1799 | \sa showMainWidget() |
1800 | */ | 1800 | */ |
1801 | void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) | 1801 | void QPEApplication::showMainDocumentWidget( QWidget* mw, bool nomaximize ) |
1802 | { | 1802 | { |
1803 | if ( mw && argc() == 2 ) | 1803 | if ( mw && argc() == 2 ) |
1804 | Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); | 1804 | Global::setDocument( mw, QString::fromUtf8(argv()[1]) ); |
1805 | 1805 | ||
1806 | 1806 | ||
1807 | // setMainWidget(mw); see above | 1807 | // setMainWidget(mw); see above |
1808 | d->show(mw, nomaximize ); | 1808 | d->show(mw, nomaximize ); |
1809 | } | 1809 | } |
1810 | 1810 | ||
1811 | 1811 | ||
1812 | /*! | 1812 | /*! |
1813 | If an application is started via a \link qcop.html QCop\endlink | 1813 | If an application is started via a \link qcop.html QCop\endlink |
1814 | message, the application will process the \link qcop.html | 1814 | message, the application will process the \link qcop.html |
1815 | QCop\endlink message and then quit. If the application calls this | 1815 | QCop\endlink message and then quit. If the application calls this |
1816 | function while processing a \link qcop.html QCop\endlink message, | 1816 | function while processing a \link qcop.html QCop\endlink message, |
1817 | after processing its outstanding \link qcop.html QCop\endlink | 1817 | after processing its outstanding \link qcop.html QCop\endlink |
1818 | messages the application will start 'properly' and show itself. | 1818 | messages the application will start 'properly' and show itself. |
1819 | 1819 | ||
1820 | \sa keepRunning() | 1820 | \sa keepRunning() |
1821 | */ | 1821 | */ |
1822 | void QPEApplication::setKeepRunning() | 1822 | void QPEApplication::setKeepRunning() |
1823 | { | 1823 | { |
1824 | if ( qApp && qApp->inherits( "QPEApplication" ) ) { | 1824 | if ( qApp && qApp->inherits( "QPEApplication" ) ) { |
1825 | QPEApplication * qpeApp = ( QPEApplication* ) qApp; | 1825 | QPEApplication * qpeApp = ( QPEApplication* ) qApp; |
1826 | qpeApp->d->keep_running = TRUE; | 1826 | qpeApp->d->keep_running = TRUE; |
1827 | } | 1827 | } |
1828 | } | 1828 | } |
1829 | 1829 | ||
1830 | /*! | 1830 | /*! |
1831 | Returns TRUE if the application will quit after processing the | 1831 | Returns TRUE if the application will quit after processing the |
1832 | current list of qcop messages; otherwise returns FALSE. | 1832 | current list of qcop messages; otherwise returns FALSE. |
1833 | 1833 | ||
1834 | \sa setKeepRunning() | 1834 | \sa setKeepRunning() |
1835 | */ | 1835 | */ |
1836 | bool QPEApplication::keepRunning() const | 1836 | bool QPEApplication::keepRunning() const |
1837 | { | 1837 | { |
1838 | return d->keep_running; | 1838 | return d->keep_running; |
1839 | } | 1839 | } |
1840 | 1840 | ||
1841 | /*! | 1841 | /*! |
1842 | \internal | 1842 | \internal |
1843 | */ | 1843 | */ |
1844 | void QPEApplication::internalSetStyle( const QString &style ) | 1844 | void QPEApplication::internalSetStyle( const QString &style ) |
1845 | { | 1845 | { |
1846 | #if QT_VERSION >= 300 | 1846 | #if QT_VERSION >= 0x030000 |
1847 | if ( style == "QPE" ) { | 1847 | if ( style == "QPE" ) { |
1848 | setStyle( new QPEStyle ); | 1848 | setStyle( new QPEStyle ); |
1849 | } | 1849 | } |
1850 | else { | 1850 | else { |
1851 | QStyle *s = QStyleFactory::create( style ); | 1851 | QStyle *s = QStyleFactory::create( style ); |
1852 | if ( s ) | 1852 | if ( s ) |
1853 | setStyle( s ); | 1853 | setStyle( s ); |
1854 | } | 1854 | } |
1855 | #else | 1855 | #else |
1856 | if ( style == "Windows" ) { | 1856 | if ( style == "Windows" ) { |
1857 | setStyle( new QWindowsStyle ); | 1857 | setStyle( new QWindowsStyle ); |
1858 | } | 1858 | } |
1859 | else if ( style == "QPE" ) { | 1859 | else if ( style == "QPE" ) { |
1860 | setStyle( new QPEStyle ); | 1860 | setStyle( new QPEStyle ); |
1861 | } | 1861 | } |
1862 | else if ( style == "Light" ) { | 1862 | else if ( style == "Light" ) { |
1863 | setStyle( new LightStyle ); | 1863 | setStyle( new LightStyle ); |
1864 | } | 1864 | } |
1865 | #ifndef QT_NO_STYLE_PLATINUM | 1865 | #ifndef QT_NO_STYLE_PLATINUM |
1866 | else if ( style == "Platinum" ) { | 1866 | else if ( style == "Platinum" ) { |
1867 | setStyle( new QPlatinumStyle ); | 1867 | setStyle( new QPlatinumStyle ); |
1868 | } | 1868 | } |
1869 | #endif | 1869 | #endif |
1870 | #ifndef QT_NO_STYLE_MOTIF | 1870 | #ifndef QT_NO_STYLE_MOTIF |
1871 | else if ( style == "Motif" ) { | 1871 | else if ( style == "Motif" ) { |
1872 | setStyle( new QMotifStyle ); | 1872 | setStyle( new QMotifStyle ); |
1873 | } | 1873 | } |
1874 | #endif | 1874 | #endif |
1875 | #ifndef QT_NO_STYLE_MOTIFPLUS | 1875 | #ifndef QT_NO_STYLE_MOTIFPLUS |
1876 | else if ( style == "MotifPlus" ) { | 1876 | else if ( style == "MotifPlus" ) { |
1877 | setStyle( new QMotifPlusStyle ); | 1877 | setStyle( new QMotifPlusStyle ); |
1878 | } | 1878 | } |
1879 | #endif | 1879 | #endif |
1880 | 1880 | ||
1881 | else { | 1881 | else { |
1882 | QStyle *sty = 0; | 1882 | QStyle *sty = 0; |
1883 | QString path = QPEApplication::qpeDir ( ) + "plugins/styles/"; | 1883 | QString path = QPEApplication::qpeDir ( ) + "plugins/styles/"; |
1884 | 1884 | ||
1885 | #ifdef Q_OS_MACX | 1885 | #ifdef Q_OS_MACX |
1886 | if ( style. find ( ".dylib" ) > 0 ) | 1886 | if ( style. find ( ".dylib" ) > 0 ) |
1887 | path += style; | 1887 | path += style; |
1888 | else | 1888 | else |
1889 | path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility | 1889 | path = path + "lib" + style. lower ( ) + ".dylib"; // compatibility |
1890 | #else | 1890 | #else |
1891 | if ( style. find ( ".so" ) > 0 ) | 1891 | if ( style. find ( ".so" ) > 0 ) |
1892 | path += style; | 1892 | path += style; |
1893 | else | 1893 | else |
1894 | path = path + "lib" + style. lower ( ) + ".so"; // compatibility | 1894 | path = path + "lib" + style. lower ( ) + ".so"; // compatibility |
1895 | #endif | 1895 | #endif |
1896 | static QLibrary *lastlib = 0; | 1896 | static QLibrary *lastlib = 0; |
1897 | static StyleInterface *lastiface = 0; | 1897 | static StyleInterface *lastiface = 0; |
1898 | 1898 | ||
1899 | QLibrary *lib = new QLibrary ( path ); | 1899 | QLibrary *lib = new QLibrary ( path ); |
1900 | StyleInterface *iface = 0; | 1900 | StyleInterface *iface = 0; |
1901 | 1901 | ||
1902 | if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) | 1902 | if (( lib-> queryInterface ( IID_Style, ( QUnknownInterface ** ) &iface ) == QS_OK ) && iface ) |
1903 | sty = iface-> style ( ); | 1903 | sty = iface-> style ( ); |
1904 | 1904 | ||
1905 | if ( sty ) { | 1905 | if ( sty ) { |
1906 | setStyle ( sty ); | 1906 | setStyle ( sty ); |
1907 | 1907 | ||
1908 | if ( lastiface ) | 1908 | if ( lastiface ) |
1909 | lastiface-> release ( ); | 1909 | lastiface-> release ( ); |
1910 | lastiface = iface; | 1910 | lastiface = iface; |
1911 | 1911 | ||
1912 | if ( lastlib ) { | 1912 | if ( lastlib ) { |
1913 | lastlib-> unload ( ); | 1913 | lastlib-> unload ( ); |
1914 | delete lastlib; | 1914 | delete lastlib; |
1915 | } | 1915 | } |
1916 | lastlib = lib; | 1916 | lastlib = lib; |
1917 | } | 1917 | } |
1918 | else { | 1918 | else { |
1919 | if ( iface ) | 1919 | if ( iface ) |
1920 | iface-> release ( ); | 1920 | iface-> release ( ); |
1921 | delete lib; | 1921 | delete lib; |
1922 | 1922 | ||
1923 | setStyle ( new LightStyle ( )); | 1923 | setStyle ( new LightStyle ( )); |
1924 | } | 1924 | } |
1925 | } | 1925 | } |
1926 | #endif | 1926 | #endif |
1927 | } | 1927 | } |
1928 | 1928 | ||
1929 | /*! | 1929 | /*! |
1930 | \internal | 1930 | \internal |
1931 | */ | 1931 | */ |
1932 | void QPEApplication::prepareForTermination( bool willrestart ) | 1932 | void QPEApplication::prepareForTermination( bool willrestart ) |
1933 | { | 1933 | { |
1934 | if ( willrestart ) { | 1934 | if ( willrestart ) { |
1935 | QLabel *lblWait = new QLabel( tr( "Please wait..." ), 0, "wait hack", QWidget::WStyle_Customize | | 1935 | QLabel *lblWait = new QLabel( tr( "Please wait..." ), 0, "wait hack", QWidget::WStyle_Customize | |
1936 | QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); | 1936 | QWidget::WStyle_NoBorder | QWidget::WStyle_Tool ); |
1937 | lblWait->setAlignment( QWidget::AlignCenter ); | 1937 | lblWait->setAlignment( QWidget::AlignCenter ); |
1938 | lblWait->show(); | 1938 | lblWait->show(); |
1939 | lblWait->showMaximized(); | 1939 | lblWait->showMaximized(); |
1940 | } | 1940 | } |
1941 | { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); | 1941 | { QCopEnvelope envelope( "QPE/System", "forceQuit()" ); |
1942 | } | 1942 | } |
1943 | processEvents(); // ensure the message goes out. | 1943 | processEvents(); // ensure the message goes out. |
1944 | } | 1944 | } |
1945 | 1945 | ||
1946 | /*! | 1946 | /*! |
1947 | \internal | 1947 | \internal |
1948 | */ | 1948 | */ |
1949 | void QPEApplication::shutdown() | 1949 | void QPEApplication::shutdown() |
1950 | { | 1950 | { |
1951 | // Implement in server's QPEApplication subclass | 1951 | // Implement in server's QPEApplication subclass |
1952 | } | 1952 | } |
1953 | 1953 | ||
1954 | /*! | 1954 | /*! |
1955 | \internal | 1955 | \internal |
1956 | */ | 1956 | */ |
1957 | void QPEApplication::restart() | 1957 | void QPEApplication::restart() |
1958 | { | 1958 | { |
1959 | // Implement in server's QPEApplication subclass | 1959 | // Implement in server's QPEApplication subclass |
1960 | } | 1960 | } |
1961 | 1961 | ||
1962 | static QPtrDict<void>* stylusDict = 0; | 1962 | static QPtrDict<void>* stylusDict = 0; |
1963 | static void createDict() | 1963 | static void createDict() |
1964 | { | 1964 | { |
1965 | if ( !stylusDict ) | 1965 | if ( !stylusDict ) |
1966 | stylusDict = new QPtrDict<void>; | 1966 | stylusDict = new QPtrDict<void>; |
1967 | } | 1967 | } |
1968 | 1968 | ||
1969 | /*! | 1969 | /*! |
1970 | Returns the current StylusMode for widget \a w. | 1970 | Returns the current StylusMode for widget \a w. |
1971 | 1971 | ||
1972 | \sa setStylusOperation() StylusMode | 1972 | \sa setStylusOperation() StylusMode |
1973 | */ | 1973 | */ |
1974 | QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) | 1974 | QPEApplication::StylusMode QPEApplication::stylusOperation( QWidget* w ) |
1975 | { | 1975 | { |
1976 | if ( stylusDict ) | 1976 | if ( stylusDict ) |
1977 | return ( StylusMode ) ( int ) stylusDict->find( w ); | 1977 | return ( StylusMode ) ( int ) stylusDict->find( w ); |
1978 | return LeftOnly; | 1978 | return LeftOnly; |
1979 | } | 1979 | } |
1980 | 1980 | ||
1981 | /*! | 1981 | /*! |
1982 | \enum QPEApplication::StylusMode | 1982 | \enum QPEApplication::StylusMode |
1983 | 1983 | ||
1984 | \value LeftOnly the stylus only generates LeftButton | 1984 | \value LeftOnly the stylus only generates LeftButton |
1985 | events (the default). | 1985 | events (the default). |
1986 | \value RightOnHold the stylus generates RightButton events | 1986 | \value RightOnHold the stylus generates RightButton events |
1987 | if the user uses the press-and-hold gesture. | 1987 | if the user uses the press-and-hold gesture. |
1988 | 1988 | ||
1989 | \sa setStylusOperation() stylusOperation() | 1989 | \sa setStylusOperation() stylusOperation() |
1990 | */ | 1990 | */ |
1991 | 1991 | ||
1992 | /*! | 1992 | /*! |
1993 | Causes widget \a w to receive mouse events according to the stylus | 1993 | Causes widget \a w to receive mouse events according to the stylus |
1994 | \a mode. | 1994 | \a mode. |
1995 | 1995 | ||
1996 | \sa stylusOperation() StylusMode | 1996 | \sa stylusOperation() StylusMode |
1997 | */ | 1997 | */ |
1998 | void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) | 1998 | void QPEApplication::setStylusOperation( QWidget * w, StylusMode mode ) |
1999 | { | 1999 | { |
2000 | createDict(); | 2000 | createDict(); |
2001 | if ( mode == LeftOnly ) { | 2001 | if ( mode == LeftOnly ) { |
2002 | stylusDict->remove | 2002 | stylusDict->remove |
2003 | ( w ); | 2003 | ( w ); |
2004 | w->removeEventFilter( qApp ); | 2004 | w->removeEventFilter( qApp ); |
2005 | } | 2005 | } |
2006 | else { | 2006 | else { |
2007 | stylusDict->insert( w, ( void* ) mode ); | 2007 | stylusDict->insert( w, ( void* ) mode ); |
2008 | connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); | 2008 | connect( w, SIGNAL( destroyed() ), qApp, SLOT( removeSenderFromStylusDict() ) ); |
2009 | w->installEventFilter( qApp ); | 2009 | w->installEventFilter( qApp ); |
2010 | } | 2010 | } |
2011 | } | 2011 | } |
2012 | 2012 | ||
2013 | 2013 | ||
2014 | /*! | 2014 | /*! |
2015 | \reimp | 2015 | \reimp |
2016 | */ | 2016 | */ |
2017 | bool QPEApplication::eventFilter( QObject *o, QEvent *e ) | 2017 | bool QPEApplication::eventFilter( QObject *o, QEvent *e ) |
2018 | { | 2018 | { |
2019 | if ( !o->isWidgetType() ) | 2019 | if ( !o->isWidgetType() ) |
2020 | return FALSE; | 2020 | return FALSE; |
2021 | 2021 | ||
2022 | if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { | 2022 | if ( stylusDict && e->type() >= QEvent::MouseButtonPress && e->type() <= QEvent::MouseMove ) { |
2023 | QMouseEvent * me = ( QMouseEvent* ) e; | 2023 | QMouseEvent * me = ( QMouseEvent* ) e; |
2024 | StylusMode mode = (StylusMode)(int)stylusDict->find(o); | 2024 | StylusMode mode = (StylusMode)(int)stylusDict->find(o); |
2025 | switch (mode) { | 2025 | switch (mode) { |
2026 | case RightOnHold: | 2026 | case RightOnHold: |
2027 | switch ( me->type() ) { | 2027 | switch ( me->type() ) { |
2028 | case QEvent::MouseButtonPress: | 2028 | case QEvent::MouseButtonPress: |
2029 | if ( me->button() == LeftButton ) { | 2029 | if ( me->button() == LeftButton ) { |
2030 | static long Pref = 500; // #### pref. | 2030 | static long Pref = 500; // #### pref. |
2031 | d->presswidget = (QWidget*)o; | 2031 | d->presswidget = (QWidget*)o; |
2032 | d->presspos = me->pos(); | 2032 | d->presspos = me->pos(); |
2033 | d->rightpressed = FALSE; | 2033 | d->rightpressed = FALSE; |
2034 | #ifdef OPIE_WITHROHFEEDBACK | 2034 | #ifdef OPIE_WITHROHFEEDBACK |
2035 | if( ! d->RoH ) | 2035 | if( ! d->RoH ) |
2036 | d->RoH = new Opie::Internal::RoHFeedback; | 2036 | d->RoH = new Opie::Internal::RoHFeedback; |
2037 | 2037 | ||
2038 | d->RoH->init( me->globalPos(), d->presswidget ); | 2038 | d->RoH->init( me->globalPos(), d->presswidget ); |
2039 | Pref = d->RoH->delay(); | 2039 | Pref = d->RoH->delay(); |
2040 | 2040 | ||
2041 | #endif | 2041 | #endif |
2042 | if (!d->presstimer ) | 2042 | if (!d->presstimer ) |
2043 | d->presstimer = startTimer( Pref ); // #### pref. | 2043 | d->presstimer = startTimer( Pref ); // #### pref. |
2044 | 2044 | ||
2045 | } | 2045 | } |
2046 | break; | 2046 | break; |
2047 | case QEvent::MouseMove: | 2047 | case QEvent::MouseMove: |
2048 | if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { | 2048 | if (d->presstimer && (me->pos() - d->presspos).manhattanLength() > 8) { |
2049 | killTimer(d->presstimer); | 2049 | killTimer(d->presstimer); |
2050 | #ifdef OPIE_WITHROHFEEDBACK | 2050 | #ifdef OPIE_WITHROHFEEDBACK |
2051 | d->RoH->stop(); | 2051 | d->RoH->stop(); |
2052 | #endif | 2052 | #endif |
2053 | d->presstimer = 0; | 2053 | d->presstimer = 0; |
2054 | } | 2054 | } |
2055 | break; | 2055 | break; |
2056 | case QEvent::MouseButtonRelease: | 2056 | case QEvent::MouseButtonRelease: |
2057 | if ( me->button() == LeftButton ) { | 2057 | if ( me->button() == LeftButton ) { |
2058 | if ( d->presstimer ) { | 2058 | if ( d->presstimer ) { |
2059 | killTimer(d->presstimer); | 2059 | killTimer(d->presstimer); |
2060 | #ifdef OPIE_WITHROHFEEDBACK | 2060 | #ifdef OPIE_WITHROHFEEDBACK |
2061 | d->RoH->stop( ); | 2061 | d->RoH->stop( ); |
2062 | #endif | 2062 | #endif |
2063 | d->presstimer = 0; | 2063 | d->presstimer = 0; |
2064 | } | 2064 | } |
2065 | if ( d->rightpressed && d->presswidget ) { | 2065 | if ( d->rightpressed && d->presswidget ) { |
2066 | printf( "Send ButtonRelease\n" ); | 2066 | printf( "Send ButtonRelease\n" ); |
2067 | // Right released | 2067 | // Right released |
2068 | postEvent( d->presswidget, | 2068 | postEvent( d->presswidget, |
2069 | new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), | 2069 | new QMouseEvent( QEvent::MouseButtonRelease, me->pos(), |
2070 | RightButton, LeftButton + RightButton ) ); | 2070 | RightButton, LeftButton + RightButton ) ); |
2071 | // Left released, off-widget | 2071 | // Left released, off-widget |
2072 | postEvent( d->presswidget, | 2072 | postEvent( d->presswidget, |
2073 | new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), | 2073 | new QMouseEvent( QEvent::MouseMove, QPoint( -1, -1), |
2074 | LeftButton, LeftButton ) ); | 2074 | LeftButton, LeftButton ) ); |
2075 | postEvent( d->presswidget, | 2075 | postEvent( d->presswidget, |
2076 | new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), | 2076 | new QMouseEvent( QEvent::MouseButtonRelease, QPoint( -1, -1), |
2077 | LeftButton, LeftButton ) ); | 2077 | LeftButton, LeftButton ) ); |
2078 | d->rightpressed = FALSE; | 2078 | d->rightpressed = FALSE; |
2079 | return TRUE; // don't send the real Left release | 2079 | return TRUE; // don't send the real Left release |
2080 | } | 2080 | } |
2081 | } | 2081 | } |
2082 | break; | 2082 | break; |
2083 | default: | 2083 | default: |
2084 | break; | 2084 | break; |
2085 | } | 2085 | } |
2086 | break; | 2086 | break; |
2087 | default: | 2087 | default: |
2088 | ; | 2088 | ; |
2089 | } | 2089 | } |
2090 | } | 2090 | } |
2091 | else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { | 2091 | else if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { |
2092 | QKeyEvent *ke = (QKeyEvent *)e; | 2092 | QKeyEvent *ke = (QKeyEvent *)e; |
2093 | if ( ke->key() == Key_Enter ) { | 2093 | if ( ke->key() == Key_Enter ) { |
2094 | if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { | 2094 | if ( o->isA( "QRadioButton" ) || o->isA( "QCheckBox" ) ) { |
2095 | postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', | 2095 | postEvent( o, new QKeyEvent( e->type(), Key_Space, ' ', |
2096 | ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); | 2096 | ke->state(), " ", ke->isAutoRepeat(), ke->count() ) ); |
2097 | return TRUE; | 2097 | return TRUE; |
2098 | } | 2098 | } |
2099 | } | 2099 | } |
2100 | } | 2100 | } |
2101 | return FALSE; | 2101 | return FALSE; |
2102 | } | 2102 | } |
2103 | 2103 | ||
2104 | /*! | 2104 | /*! |
2105 | \reimp | 2105 | \reimp |
2106 | */ | 2106 | */ |
2107 | void QPEApplication::timerEvent( QTimerEvent *e ) | 2107 | void QPEApplication::timerEvent( QTimerEvent *e ) |
2108 | { | 2108 | { |
2109 | if ( e->timerId() == d->presstimer && d->presswidget ) { | 2109 | if ( e->timerId() == d->presstimer && d->presswidget ) { |
2110 | 2110 | ||
2111 | // Right pressed | 2111 | // Right pressed |
2112 | postEvent( d->presswidget, | 2112 | postEvent( d->presswidget, |
2113 | new QMouseEvent( QEvent::MouseButtonPress, d->presspos, | 2113 | new QMouseEvent( QEvent::MouseButtonPress, d->presspos, |
2114 | RightButton, LeftButton ) ); | 2114 | RightButton, LeftButton ) ); |
2115 | killTimer( d->presstimer ); | 2115 | killTimer( d->presstimer ); |
2116 | d->presstimer = 0; | 2116 | d->presstimer = 0; |
2117 | d->rightpressed = TRUE; | 2117 | d->rightpressed = TRUE; |
2118 | #ifdef OPIE_WITHROHFEEDBACK | 2118 | #ifdef OPIE_WITHROHFEEDBACK |
2119 | d->RoH->stop(); | 2119 | d->RoH->stop(); |
2120 | #endif | 2120 | #endif |
2121 | } | 2121 | } |
2122 | } | 2122 | } |
2123 | 2123 | ||
2124 | void QPEApplication::removeSenderFromStylusDict() | 2124 | void QPEApplication::removeSenderFromStylusDict() |
2125 | { | 2125 | { |
2126 | stylusDict->remove | 2126 | stylusDict->remove |
2127 | ( ( void* ) sender() ); | 2127 | ( ( void* ) sender() ); |
2128 | if ( d->presswidget == sender() ) | 2128 | if ( d->presswidget == sender() ) |
2129 | d->presswidget = 0; | 2129 | d->presswidget = 0; |
2130 | } | 2130 | } |
2131 | 2131 | ||
2132 | /*! | 2132 | /*! |
2133 | \internal | 2133 | \internal |
2134 | */ | 2134 | */ |
2135 | bool QPEApplication::keyboardGrabbed() const | 2135 | bool QPEApplication::keyboardGrabbed() const |
2136 | { | 2136 | { |
2137 | return d->kbgrabbed; | 2137 | return d->kbgrabbed; |
2138 | } | 2138 | } |
2139 | 2139 | ||
2140 | 2140 | ||
2141 | /*! | 2141 | /*! |
2142 | Reverses the effect of grabKeyboard(). This is called automatically | 2142 | Reverses the effect of grabKeyboard(). This is called automatically |
2143 | on program exit. | 2143 | on program exit. |
2144 | */ | 2144 | */ |
2145 | void QPEApplication::ungrabKeyboard() | 2145 | void QPEApplication::ungrabKeyboard() |
2146 | { | 2146 | { |
2147 | ((QPEApplication *) qApp )-> d-> kbgrabbed = false; | 2147 | ((QPEApplication *) qApp )-> d-> kbgrabbed = false; |
2148 | } | 2148 | } |
2149 | 2149 | ||
2150 | /*! | 2150 | /*! |
2151 | Grabs the physical keyboard keys, e.g. the application's launching | 2151 | Grabs the physical keyboard keys, e.g. the application's launching |
2152 | keys. Instead of launching applications when these keys are pressed | 2152 | keys. Instead of launching applications when these keys are pressed |
2153 | the signals emitted are sent to this application instead. Some games | 2153 | the signals emitted are sent to this application instead. Some games |
2154 | programs take over the launch keys in this way to make interaction | 2154 | programs take over the launch keys in this way to make interaction |
2155 | easier. | 2155 | easier. |
2156 | 2156 | ||
2157 | \sa ungrabKeyboard() | 2157 | \sa ungrabKeyboard() |
2158 | */ | 2158 | */ |
2159 | void QPEApplication::grabKeyboard() | 2159 | void QPEApplication::grabKeyboard() |
2160 | { | 2160 | { |
2161 | ((QPEApplication *) qApp )-> d-> kbgrabbed = true; | 2161 | ((QPEApplication *) qApp )-> d-> kbgrabbed = true; |
2162 | } | 2162 | } |
2163 | 2163 | ||
2164 | /*! | 2164 | /*! |
2165 | \reimp | 2165 | \reimp |
2166 | */ | 2166 | */ |
2167 | int QPEApplication::exec() | 2167 | int QPEApplication::exec() |
2168 | { | 2168 | { |
2169 | d->qcopQok = true; | 2169 | d->qcopQok = true; |
2170 | #ifndef QT_NO_COP | 2170 | #ifndef QT_NO_COP |
2171 | d->sendQCopQ(); | 2171 | d->sendQCopQ(); |
2172 | if ( !d->keep_running ) | 2172 | if ( !d->keep_running ) |
2173 | processEvents(); // we may have received QCop messages in the meantime. | 2173 | processEvents(); // we may have received QCop messages in the meantime. |
2174 | #endif | 2174 | #endif |
2175 | 2175 | ||
2176 | if ( d->keep_running ) | 2176 | if ( d->keep_running ) |
2177 | //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) | 2177 | //|| d->qpe_main_widget && d->qpe_main_widget->isVisible() ) |
2178 | return QApplication::exec(); | 2178 | return QApplication::exec(); |
2179 | 2179 | ||
2180 | #ifndef QT_NO_COP | 2180 | #ifndef QT_NO_COP |
2181 | 2181 | ||
2182 | { | 2182 | { |
2183 | QCopEnvelope e( "QPE/System", "closing(QString)" ); | 2183 | QCopEnvelope e( "QPE/System", "closing(QString)" ); |
2184 | e << d->appName; | 2184 | e << d->appName; |
2185 | } | 2185 | } |
2186 | #endif | 2186 | #endif |
2187 | processEvents(); | 2187 | processEvents(); |
2188 | return 0; | 2188 | return 0; |
2189 | } | 2189 | } |
2190 | 2190 | ||
2191 | /*! | 2191 | /*! |
2192 | \internal | 2192 | \internal |
2193 | External request for application to quit. Quits if possible without | 2193 | External request for application to quit. Quits if possible without |
2194 | loosing state. | 2194 | loosing state. |
2195 | */ | 2195 | */ |
2196 | void QPEApplication::tryQuit() | 2196 | void QPEApplication::tryQuit() |
2197 | { | 2197 | { |
2198 | if ( activeModalWidget() ) | 2198 | if ( activeModalWidget() ) |
2199 | return ; // Inside modal loop or konsole. Too hard to save state. | 2199 | return ; // Inside modal loop or konsole. Too hard to save state. |
2200 | #ifndef QT_NO_COP | 2200 | #ifndef QT_NO_COP |
2201 | 2201 | ||
2202 | { | 2202 | { |
2203 | QCopEnvelope e( "QPE/System", "closing(QString)" ); | 2203 | QCopEnvelope e( "QPE/System", "closing(QString)" ); |
2204 | e << d->appName; | 2204 | e << d->appName; |
2205 | } | 2205 | } |
2206 | #endif | 2206 | #endif |
2207 | if ( d->keep_running ) | 2207 | if ( d->keep_running ) |
2208 | d->store_widget_rect(d->qpe_main_widget, d->appName); | 2208 | d->store_widget_rect(d->qpe_main_widget, d->appName); |
2209 | processEvents(); | 2209 | processEvents(); |
2210 | 2210 | ||
2211 | quit(); | 2211 | quit(); |
2212 | } | 2212 | } |
2213 | 2213 | ||
2214 | 2214 | ||
2215 | /*! | 2215 | /*! |
2216 | \internal | 2216 | \internal |
2217 | User initiated quit. Makes the window 'Go Away'. If preloaded this means | 2217 | User initiated quit. Makes the window 'Go Away'. If preloaded this means |
2218 | hiding the window. If not it means quitting the application. | 2218 | hiding the window. If not it means quitting the application. |
2219 | As this is user initiated we don't need to check state. | 2219 | As this is user initiated we don't need to check state. |
2220 | */ | 2220 | */ |
2221 | void QPEApplication::hideOrQuit() | 2221 | void QPEApplication::hideOrQuit() |
2222 | { | 2222 | { |
2223 | if ( d->keep_running ) | 2223 | if ( d->keep_running ) |
2224 | d->store_widget_rect(d->qpe_main_widget, d->appName); | 2224 | d->store_widget_rect(d->qpe_main_widget, d->appName); |
2225 | processEvents(); | 2225 | processEvents(); |
2226 | 2226 | ||
2227 | // If we are a preloaded application we don't actually quit, so emit | 2227 | // If we are a preloaded application we don't actually quit, so emit |
2228 | // a System message indicating we're quasi-closing. | 2228 | // a System message indicating we're quasi-closing. |
2229 | if ( d->preloaded && d->qpe_main_widget ) | 2229 | if ( d->preloaded && d->qpe_main_widget ) |
2230 | #ifndef QT_NO_COP | 2230 | #ifndef QT_NO_COP |
diff --git a/library/qpestyle.cpp b/library/qpestyle.cpp index b61ada4..0566f6b 100644 --- a/library/qpestyle.cpp +++ b/library/qpestyle.cpp | |||
@@ -1,816 +1,816 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #include "qpestyle.h" | 21 | #include "qpestyle.h" |
22 | 22 | ||
23 | 23 | ||
24 | #define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) | 24 | #define QCOORDARRLEN(x) sizeof(x)/(sizeof(QCOORD)*2) |
25 | 25 | ||
26 | #if QT_VERSION >= 300 | 26 | #if QT_VERSION >= 0x030000 |
27 | 27 | ||
28 | #include <qdrawutil.h> | 28 | #include <qdrawutil.h> |
29 | #include <qcombobox.h> | 29 | #include <qcombobox.h> |
30 | #include <qtabbar.h> | 30 | #include <qtabbar.h> |
31 | 31 | ||
32 | QPEStyle::QPEStyle() | 32 | QPEStyle::QPEStyle() |
33 | { | 33 | { |
34 | } | 34 | } |
35 | 35 | ||
36 | QPEStyle::~QPEStyle() | 36 | QPEStyle::~QPEStyle() |
37 | { | 37 | { |
38 | } | 38 | } |
39 | 39 | ||
40 | void QPEStyle::drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, | 40 | void QPEStyle::drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, |
41 | const QColorGroup &cg, SFlags flags, const QStyleOption &data) const | 41 | const QColorGroup &cg, SFlags flags, const QStyleOption &data) const |
42 | { | 42 | { |
43 | switch ( pe ) { | 43 | switch ( pe ) { |
44 | case PE_ButtonTool: | 44 | case PE_ButtonTool: |
45 | { | 45 | { |
46 | QColorGroup mycg = cg; | 46 | QColorGroup mycg = cg; |
47 | if ( flags & Style_On ) { | 47 | if ( flags & Style_On ) { |
48 | QBrush fill( cg.mid(), Dense4Pattern ); | 48 | QBrush fill( cg.mid(), Dense4Pattern ); |
49 | mycg.setBrush( QColorGroup::Button, fill ); | 49 | mycg.setBrush( QColorGroup::Button, fill ); |
50 | } | 50 | } |
51 | drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data ); | 51 | drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data ); |
52 | break; | 52 | break; |
53 | } | 53 | } |
54 | case PE_ButtonCommand: | 54 | case PE_ButtonCommand: |
55 | case PE_ButtonDefault: | 55 | case PE_ButtonDefault: |
56 | case PE_ButtonBevel: | 56 | case PE_ButtonBevel: |
57 | case PE_HeaderSection: | 57 | case PE_HeaderSection: |
58 | { | 58 | { |
59 | QPen oldPen = p->pen(); | 59 | QPen oldPen = p->pen(); |
60 | p->fillRect( r.x()+1, r.y()+1, r.width()-2, r.height()-2, cg.brush(QColorGroup::Button) ); | 60 | p->fillRect( r.x()+1, r.y()+1, r.width()-2, r.height()-2, cg.brush(QColorGroup::Button) ); |
61 | 61 | ||
62 | int x2 = r.right(); | 62 | int x2 = r.right(); |
63 | int y2 = r.bottom(); | 63 | int y2 = r.bottom(); |
64 | 64 | ||
65 | if ( flags & (Style_Sunken | Style_Down | Style_On) ) | 65 | if ( flags & (Style_Sunken | Style_Down | Style_On) ) |
66 | p->setPen( cg.dark() ); | 66 | p->setPen( cg.dark() ); |
67 | else | 67 | else |
68 | p->setPen( cg.light() ); | 68 | p->setPen( cg.light() ); |
69 | p->drawLine( r.x(), r.y()+1, r.x(), y2-1 ); | 69 | p->drawLine( r.x(), r.y()+1, r.x(), y2-1 ); |
70 | p->drawLine( r.x()+1, r.y(), x2-1, r.y() ); | 70 | p->drawLine( r.x()+1, r.y(), x2-1, r.y() ); |
71 | 71 | ||
72 | if ( flags & (Style_Sunken | Style_Down | Style_On) ) | 72 | if ( flags & (Style_Sunken | Style_Down | Style_On) ) |
73 | p->setPen( cg.light() ); | 73 | p->setPen( cg.light() ); |
74 | else | 74 | else |
75 | p->setPen( cg.dark() ); | 75 | p->setPen( cg.dark() ); |
76 | p->drawLine( x2, r.y()+1, x2, y2-1 ); | 76 | p->drawLine( x2, r.y()+1, x2, y2-1 ); |
77 | p->drawLine( r.x()+1, y2, x2-1, y2 ); | 77 | p->drawLine( r.x()+1, y2, x2-1, y2 ); |
78 | p->setPen( oldPen ); | 78 | p->setPen( oldPen ); |
79 | break; | 79 | break; |
80 | } | 80 | } |
81 | case PE_FocusRect: | 81 | case PE_FocusRect: |
82 | break; | 82 | break; |
83 | case PE_Indicator: | 83 | case PE_Indicator: |
84 | { | 84 | { |
85 | QColorGroup mycg( cg ); | 85 | QColorGroup mycg( cg ); |
86 | QBrush fill; | 86 | QBrush fill; |
87 | if ( flags & Style_Down ) | 87 | if ( flags & Style_Down ) |
88 | fill = cg.brush( QColorGroup::Button ); | 88 | fill = cg.brush( QColorGroup::Button ); |
89 | else | 89 | else |
90 | fill = cg.brush( (flags&Style_Enabled) ? QColorGroup::Base : QColorGroup::Background ); | 90 | fill = cg.brush( (flags&Style_Enabled) ? QColorGroup::Base : QColorGroup::Background ); |
91 | mycg.setBrush( QColorGroup::Button, fill ); | 91 | mycg.setBrush( QColorGroup::Button, fill ); |
92 | if ( flags&Style_Enabled ) | 92 | if ( flags&Style_Enabled ) |
93 | flags |= Style_Sunken; | 93 | flags |= Style_Sunken; |
94 | drawPrimitive( PE_ButtonBevel, p, r, mycg, flags ); | 94 | drawPrimitive( PE_ButtonBevel, p, r, mycg, flags ); |
95 | if ( flags & Style_On ) { | 95 | if ( flags & Style_On ) { |
96 | QPointArray a( 7*2 ); | 96 | QPointArray a( 7*2 ); |
97 | int i, xx, yy; | 97 | int i, xx, yy; |
98 | xx = r.x()+3; | 98 | xx = r.x()+3; |
99 | yy = r.y()+5; | 99 | yy = r.y()+5; |
100 | for ( i=0; i<3; i++ ) { | 100 | for ( i=0; i<3; i++ ) { |
101 | a.setPoint( 2*i, xx, yy ); | 101 | a.setPoint( 2*i, xx, yy ); |
102 | a.setPoint( 2*i+1, xx, yy+2 ); | 102 | a.setPoint( 2*i+1, xx, yy+2 ); |
103 | xx++; yy++; | 103 | xx++; yy++; |
104 | } | 104 | } |
105 | yy -= 2; | 105 | yy -= 2; |
106 | for ( i=3; i<7; i++ ) { | 106 | for ( i=3; i<7; i++ ) { |
107 | a.setPoint( 2*i, xx, yy ); | 107 | a.setPoint( 2*i, xx, yy ); |
108 | a.setPoint( 2*i+1, xx, yy+2 ); | 108 | a.setPoint( 2*i+1, xx, yy+2 ); |
109 | xx++; yy--; | 109 | xx++; yy--; |
110 | } | 110 | } |
111 | if ( flags & Style_NoChange ) { | 111 | if ( flags & Style_NoChange ) { |
112 | p->setPen( mycg.dark() ); | 112 | p->setPen( mycg.dark() ); |
113 | } else { | 113 | } else { |
114 | p->setPen( mycg.text() ); | 114 | p->setPen( mycg.text() ); |
115 | } | 115 | } |
116 | p->drawLineSegments( a ); | 116 | p->drawLineSegments( a ); |
117 | } | 117 | } |
118 | break; | 118 | break; |
119 | } | 119 | } |
120 | case PE_ExclusiveIndicator: | 120 | case PE_ExclusiveIndicator: |
121 | { | 121 | { |
122 | static const QCOORD pts1[] = { // dark lines | 122 | static const QCOORD pts1[] = { // dark lines |
123 | 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; | 123 | 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; |
124 | static const QCOORD pts4[] = { // white lines | 124 | static const QCOORD pts4[] = { // white lines |
125 | 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, | 125 | 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, |
126 | 11,4, 10,3, 10,2 }; | 126 | 11,4, 10,3, 10,2 }; |
127 | static const QCOORD pts5[] = { // inner fill | 127 | static const QCOORD pts5[] = { // inner fill |
128 | 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; | 128 | 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; |
129 | 129 | ||
130 | int x, y, w, h; | 130 | int x, y, w, h; |
131 | r.rect( &x, &y, &w, &h ); | 131 | r.rect( &x, &y, &w, &h ); |
132 | p->eraseRect( x, y, w, h ); | 132 | p->eraseRect( x, y, w, h ); |
133 | QPointArray a( QCOORDARRLEN(pts1), pts1 ); | 133 | QPointArray a( QCOORDARRLEN(pts1), pts1 ); |
134 | a.translate( x, y ); | 134 | a.translate( x, y ); |
135 | p->setPen( cg.dark() ); | 135 | p->setPen( cg.dark() ); |
136 | p->drawPolyline( a ); | 136 | p->drawPolyline( a ); |
137 | a.setPoints( QCOORDARRLEN(pts4), pts4 ); | 137 | a.setPoints( QCOORDARRLEN(pts4), pts4 ); |
138 | a.translate( x, y ); | 138 | a.translate( x, y ); |
139 | p->setPen( cg.light() ); | 139 | p->setPen( cg.light() ); |
140 | p->drawPolyline( a ); | 140 | p->drawPolyline( a ); |
141 | a.setPoints( QCOORDARRLEN(pts5), pts5 ); | 141 | a.setPoints( QCOORDARRLEN(pts5), pts5 ); |
142 | a.translate( x, y ); | 142 | a.translate( x, y ); |
143 | QColor fillColor = ( flags&Style_Down || !(flags&Style_Enabled) ) ? cg.button() : cg.base(); | 143 | QColor fillColor = ( flags&Style_Down || !(flags&Style_Enabled) ) ? cg.button() : cg.base(); |
144 | p->setPen( fillColor ); | 144 | p->setPen( fillColor ); |
145 | p->setBrush( fillColor ) ; | 145 | p->setBrush( fillColor ) ; |
146 | p->drawPolygon( a ); | 146 | p->drawPolygon( a ); |
147 | if ( flags&Style_On ) { | 147 | if ( flags&Style_On ) { |
148 | p->setPen( NoPen ); | 148 | p->setPen( NoPen ); |
149 | p->setBrush( cg.text() ); | 149 | p->setBrush( cg.text() ); |
150 | p->drawRect( x+5, y+4, 2, 4 ); | 150 | p->drawRect( x+5, y+4, 2, 4 ); |
151 | p->drawRect( x+4, y+5, 4, 2 ); | 151 | p->drawRect( x+4, y+5, 4, 2 ); |
152 | } | 152 | } |
153 | break; | 153 | break; |
154 | } | 154 | } |
155 | default: | 155 | default: |
156 | QWindowsStyle::drawPrimitive( pe, p, r, cg, flags, data ); | 156 | QWindowsStyle::drawPrimitive( pe, p, r, cg, flags, data ); |
157 | break; | 157 | break; |
158 | } | 158 | } |
159 | } | 159 | } |
160 | 160 | ||
161 | void QPEStyle::drawControl( ControlElement ce, QPainter *p, | 161 | void QPEStyle::drawControl( ControlElement ce, QPainter *p, |
162 | const QWidget *widget, const QRect &r, | 162 | const QWidget *widget, const QRect &r, |
163 | const QColorGroup &cg, SFlags how, const QStyleOption &data) const | 163 | const QColorGroup &cg, SFlags how, const QStyleOption &data) const |
164 | { | 164 | { |
165 | switch ( ce ) { | 165 | switch ( ce ) { |
166 | case CE_PushButton: | 166 | case CE_PushButton: |
167 | { | 167 | { |
168 | const QPushButton *btn = (QPushButton*)widget; | 168 | const QPushButton *btn = (QPushButton*)widget; |
169 | SFlags flags; | 169 | SFlags flags; |
170 | flags = Style_Default; | 170 | flags = Style_Default; |
171 | if ( btn->isDown() ) | 171 | if ( btn->isDown() ) |
172 | flags |= Style_Down; | 172 | flags |= Style_Down; |
173 | if ( btn->isOn() ) | 173 | if ( btn->isOn() ) |
174 | flags |= Style_On; | 174 | flags |= Style_On; |
175 | if ( btn->isEnabled() ) | 175 | if ( btn->isEnabled() ) |
176 | flags |= Style_Enabled; | 176 | flags |= Style_Enabled; |
177 | if ( btn->isDefault() ) | 177 | if ( btn->isDefault() ) |
178 | flags |= Style_Default; | 178 | flags |= Style_Default; |
179 | if (! btn->isFlat() && !(flags & Style_Down)) | 179 | if (! btn->isFlat() && !(flags & Style_Down)) |
180 | flags |= Style_Raised; | 180 | flags |= Style_Raised; |
181 | p->setPen( cg.foreground() ); | 181 | p->setPen( cg.foreground() ); |
182 | p->setBrush( QBrush(cg.button(), NoBrush) ); | 182 | p->setBrush( QBrush(cg.button(), NoBrush) ); |
183 | QColorGroup mycg( cg ); | 183 | QColorGroup mycg( cg ); |
184 | if ( flags & Style_On ) { | 184 | if ( flags & Style_On ) { |
185 | QBrush fill = QBrush( cg.mid(), Dense4Pattern ); | 185 | QBrush fill = QBrush( cg.mid(), Dense4Pattern ); |
186 | mycg.setBrush( QColorGroup::Button, fill ); | 186 | mycg.setBrush( QColorGroup::Button, fill ); |
187 | } | 187 | } |
188 | drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data ); | 188 | drawPrimitive( PE_ButtonBevel, p, r, mycg, flags, data ); |
189 | break; | 189 | break; |
190 | } | 190 | } |
191 | case CE_TabBarTab: | 191 | case CE_TabBarTab: |
192 | { | 192 | { |
193 | if ( !widget || !widget->parentWidget() ) | 193 | if ( !widget || !widget->parentWidget() ) |
194 | break; | 194 | break; |
195 | 195 | ||
196 | const QTabBar *tb = (const QTabBar *) widget; | 196 | const QTabBar *tb = (const QTabBar *) widget; |
197 | bool selected = how & Style_Selected; | 197 | bool selected = how & Style_Selected; |
198 | 198 | ||
199 | QRect r2(r); | 199 | QRect r2(r); |
200 | if ( tb->shape() == QTabBar::RoundedAbove ) { | 200 | if ( tb->shape() == QTabBar::RoundedAbove ) { |
201 | p->setPen( cg.light() ); | 201 | p->setPen( cg.light() ); |
202 | p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); | 202 | p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); |
203 | if ( r2.left() == 0 ) | 203 | if ( r2.left() == 0 ) |
204 | p->drawPoint( tb->rect().bottomLeft() ); | 204 | p->drawPoint( tb->rect().bottomLeft() ); |
205 | else { | 205 | else { |
206 | p->setPen( cg.light() ); | 206 | p->setPen( cg.light() ); |
207 | p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); | 207 | p->drawLine( r2.left(), r2.bottom(), r2.right(), r2.bottom() ); |
208 | } | 208 | } |
209 | 209 | ||
210 | if ( selected ) { | 210 | if ( selected ) { |
211 | p->setPen( cg.background() ); | 211 | p->setPen( cg.background() ); |
212 | p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 ); | 212 | p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 ); |
213 | p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-2), | 213 | p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-2), |
214 | cg.brush( QColorGroup::Background )); | 214 | cg.brush( QColorGroup::Background )); |
215 | } else { | 215 | } else { |
216 | r2.setRect( r2.left() + 2, r2.top() + 2, | 216 | r2.setRect( r2.left() + 2, r2.top() + 2, |
217 | r2.width() - 4, r2.height() - 2 ); | 217 | r2.width() - 4, r2.height() - 2 ); |
218 | p->setPen( cg.button() ); | 218 | p->setPen( cg.button() ); |
219 | p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 ); | 219 | p->drawLine( r2.left()+2, r2.top()+1, r2.right()-2, r2.top()+1 ); |
220 | p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-3), | 220 | p->fillRect( QRect( r2.left()+1, r2.top()+2, r2.width()-2, r2.height()-3), |
221 | cg.brush( QColorGroup::Button )); | 221 | cg.brush( QColorGroup::Button )); |
222 | 222 | ||
223 | //do shading; will not work for pixmap brushes | 223 | //do shading; will not work for pixmap brushes |
224 | QColor bg = cg.button(); | 224 | QColor bg = cg.button(); |
225 | // int h,s,v; | 225 | // int h,s,v; |
226 | // bg.hsv( &h, &s, &v ); | 226 | // bg.hsv( &h, &s, &v ); |
227 | int n = r2.height()/2; | 227 | int n = r2.height()/2; |
228 | int dark = 100; | 228 | int dark = 100; |
229 | for ( int i = 1; i < n; i++ ) { | 229 | for ( int i = 1; i < n; i++ ) { |
230 | dark = (dark * (100+(i*15)/n) )/100; | 230 | dark = (dark * (100+(i*15)/n) )/100; |
231 | p->setPen( bg.dark( dark ) ); | 231 | p->setPen( bg.dark( dark ) ); |
232 | int y = r2.bottom()-n+i; | 232 | int y = r2.bottom()-n+i; |
233 | int x1 = r2.left()+1; | 233 | int x1 = r2.left()+1; |
234 | int x2 = r2.right()-1; | 234 | int x2 = r2.right()-1; |
235 | p->drawLine( x1, y, x2, y ); | 235 | p->drawLine( x1, y, x2, y ); |
236 | } | 236 | } |
237 | } | 237 | } |
238 | 238 | ||
239 | p->setPen( cg.light() ); | 239 | p->setPen( cg.light() ); |
240 | p->drawLine( r2.left(), r2.bottom()-1, r2.left(), r2.top() + 2 ); | 240 | p->drawLine( r2.left(), r2.bottom()-1, r2.left(), r2.top() + 2 ); |
241 | p->drawPoint( r2.left()+1, r2.top() + 1 ); | 241 | p->drawPoint( r2.left()+1, r2.top() + 1 ); |
242 | p->drawLine( r2.left()+2, r2.top(), | 242 | p->drawLine( r2.left()+2, r2.top(), |
243 | r2.right() - 2, r2.top() ); | 243 | r2.right() - 2, r2.top() ); |
244 | 244 | ||
245 | p->setPen( cg.dark() ); | 245 | p->setPen( cg.dark() ); |
246 | p->drawPoint( r2.right() - 1, r2.top() + 1 ); | 246 | p->drawPoint( r2.right() - 1, r2.top() + 1 ); |
247 | p->drawLine( r2.right(), r2.top() + 2, r2.right(), r2.bottom() - 1); | 247 | p->drawLine( r2.right(), r2.top() + 2, r2.right(), r2.bottom() - 1); |
248 | } else if ( tb->shape() == QTabBar::RoundedBelow ) { | 248 | } else if ( tb->shape() == QTabBar::RoundedBelow ) { |
249 | if ( selected ) { | 249 | if ( selected ) { |
250 | p->setPen( cg.background() ); | 250 | p->setPen( cg.background() ); |
251 | p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 ); | 251 | p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 ); |
252 | p->fillRect( QRect( r2.left()+1, r2.top(), r2.width()-2, r2.height()-2), | 252 | p->fillRect( QRect( r2.left()+1, r2.top(), r2.width()-2, r2.height()-2), |
253 | tb->palette().normal().brush( QColorGroup::Background )); | 253 | tb->palette().normal().brush( QColorGroup::Background )); |
254 | } else { | 254 | } else { |
255 | p->setPen( cg.dark() ); | 255 | p->setPen( cg.dark() ); |
256 | p->drawLine( r2.left(), r2.top(), | 256 | p->drawLine( r2.left(), r2.top(), |
257 | r2.right(), r2.top() ); | 257 | r2.right(), r2.top() ); |
258 | r2.setRect( r2.left() + 2, r2.top(), | 258 | r2.setRect( r2.left() + 2, r2.top(), |
259 | r2.width() - 4, r2.height() - 2 ); | 259 | r2.width() - 4, r2.height() - 2 ); |
260 | p->setPen( cg.button() ); | 260 | p->setPen( cg.button() ); |
261 | p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 ); | 261 | p->drawLine( r2.left()+2, r2.bottom()-1, r2.right()-2, r2.bottom()-1 ); |
262 | p->fillRect( QRect( r2.left()+1, r2.top()+1, r2.width()-2, r2.height()-3), | 262 | p->fillRect( QRect( r2.left()+1, r2.top()+1, r2.width()-2, r2.height()-3), |
263 | tb->palette().normal().brush( QColorGroup::Button )); | 263 | tb->palette().normal().brush( QColorGroup::Button )); |
264 | } | 264 | } |
265 | 265 | ||
266 | p->setPen( cg.dark() ); | 266 | p->setPen( cg.dark() ); |
267 | p->drawLine( r2.right(), r2.top(), | 267 | p->drawLine( r2.right(), r2.top(), |
268 | r2.right(), r2.bottom() - 2 ); | 268 | r2.right(), r2.bottom() - 2 ); |
269 | p->drawPoint( r2.right() - 1, r2.bottom() - 1 ); | 269 | p->drawPoint( r2.right() - 1, r2.bottom() - 1 ); |
270 | p->drawLine( r2.right() - 2, r2.bottom(), | 270 | p->drawLine( r2.right() - 2, r2.bottom(), |
271 | r2.left() + 2, r2.bottom() ); | 271 | r2.left() + 2, r2.bottom() ); |
272 | 272 | ||
273 | p->setPen( cg.light() ); | 273 | p->setPen( cg.light() ); |
274 | p->drawLine( r2.left(), r2.top()+1, | 274 | p->drawLine( r2.left(), r2.top()+1, |
275 | r2.left(), r2.bottom() - 2 ); | 275 | r2.left(), r2.bottom() - 2 ); |
276 | p->drawPoint( r2.left() + 1, r2.bottom() - 1 ); | 276 | p->drawPoint( r2.left() + 1, r2.bottom() - 1 ); |
277 | if ( r2.left() == 0 ) | 277 | if ( r2.left() == 0 ) |
278 | p->drawPoint( tb->rect().topLeft() ); | 278 | p->drawPoint( tb->rect().topLeft() ); |
279 | 279 | ||
280 | } else { | 280 | } else { |
281 | QCommonStyle::drawControl( ce, p, widget, r, cg, how, data ); | 281 | QCommonStyle::drawControl( ce, p, widget, r, cg, how, data ); |
282 | } | 282 | } |
283 | break; | 283 | break; |
284 | } | 284 | } |
285 | default: | 285 | default: |
286 | QWindowsStyle::drawControl( ce, p, widget, r, cg, how, data ); | 286 | QWindowsStyle::drawControl( ce, p, widget, r, cg, how, data ); |
287 | break; | 287 | break; |
288 | } | 288 | } |
289 | } | 289 | } |
290 | 290 | ||
291 | void QPEStyle::drawComplexControl( ComplexControl control, QPainter *p, | 291 | void QPEStyle::drawComplexControl( ComplexControl control, QPainter *p, |
292 | const QWidget *widget, const QRect &r, | 292 | const QWidget *widget, const QRect &r, |
293 | const QColorGroup &cg, SFlags how, | 293 | const QColorGroup &cg, SFlags how, |
294 | SCFlags sub, SCFlags subActive, const QStyleOption &data) const | 294 | SCFlags sub, SCFlags subActive, const QStyleOption &data) const |
295 | { | 295 | { |
296 | switch ( control ) { | 296 | switch ( control ) { |
297 | case CC_ComboBox: | 297 | case CC_ComboBox: |
298 | if ( sub & SC_ComboBoxArrow ) { | 298 | if ( sub & SC_ComboBoxArrow ) { |
299 | SFlags flags = Style_Default; | 299 | SFlags flags = Style_Default; |
300 | 300 | ||
301 | drawPrimitive( PE_ButtonBevel, p, r, cg, flags, data ); | 301 | drawPrimitive( PE_ButtonBevel, p, r, cg, flags, data ); |
302 | 302 | ||
303 | QRect ar = | 303 | QRect ar = |
304 | QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, | 304 | QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, |
305 | SC_ComboBoxArrow ), widget ); | 305 | SC_ComboBoxArrow ), widget ); |
306 | 306 | ||
307 | if ( subActive == SC_ComboBoxArrow ) { | 307 | if ( subActive == SC_ComboBoxArrow ) { |
308 | p->setPen( cg.dark() ); | 308 | p->setPen( cg.dark() ); |
309 | p->setBrush( cg.brush( QColorGroup::Button ) ); | 309 | p->setBrush( cg.brush( QColorGroup::Button ) ); |
310 | p->drawRect( ar ); | 310 | p->drawRect( ar ); |
311 | } | 311 | } |
312 | 312 | ||
313 | ar.addCoords( 2, 2, -2, -2 ); | 313 | ar.addCoords( 2, 2, -2, -2 ); |
314 | if ( widget->isEnabled() ) | 314 | if ( widget->isEnabled() ) |
315 | flags |= Style_Enabled; | 315 | flags |= Style_Enabled; |
316 | 316 | ||
317 | if ( subActive & Style_Sunken ) { | 317 | if ( subActive & Style_Sunken ) { |
318 | flags |= Style_Sunken; | 318 | flags |= Style_Sunken; |
319 | } | 319 | } |
320 | drawPrimitive( PE_ArrowDown, p, ar, cg, flags ); | 320 | drawPrimitive( PE_ArrowDown, p, ar, cg, flags ); |
321 | } | 321 | } |
322 | 322 | ||
323 | if ( sub & SC_ComboBoxEditField ) { | 323 | if ( sub & SC_ComboBoxEditField ) { |
324 | const QComboBox * cb = (const QComboBox *) widget; | 324 | const QComboBox * cb = (const QComboBox *) widget; |
325 | QRect re = | 325 | QRect re = |
326 | QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, | 326 | QStyle::visualRect( querySubControlMetrics( CC_ComboBox, widget, |
327 | SC_ComboBoxEditField ), widget ); | 327 | SC_ComboBoxEditField ), widget ); |
328 | if ( cb->hasFocus() && !cb->editable() ) | 328 | if ( cb->hasFocus() && !cb->editable() ) |
329 | p->fillRect( re.x(), re.y(), re.width(), re.height(), | 329 | p->fillRect( re.x(), re.y(), re.width(), re.height(), |
330 | cg.brush( QColorGroup::Highlight ) ); | 330 | cg.brush( QColorGroup::Highlight ) ); |
331 | 331 | ||
332 | if ( cb->hasFocus() ) { | 332 | if ( cb->hasFocus() ) { |
333 | p->setPen( cg.highlightedText() ); | 333 | p->setPen( cg.highlightedText() ); |
334 | p->setBackgroundColor( cg.highlight() ); | 334 | p->setBackgroundColor( cg.highlight() ); |
335 | 335 | ||
336 | } else { | 336 | } else { |
337 | p->setPen( cg.text() ); | 337 | p->setPen( cg.text() ); |
338 | p->setBackgroundColor( cg.background() ); | 338 | p->setBackgroundColor( cg.background() ); |
339 | } | 339 | } |
340 | 340 | ||
341 | if ( cb->hasFocus() && !cb->editable() ) { | 341 | if ( cb->hasFocus() && !cb->editable() ) { |
342 | QRect re = | 342 | QRect re = |
343 | QStyle::visualRect( subRect( SR_ComboBoxFocusRect, cb ), widget ); | 343 | QStyle::visualRect( subRect( SR_ComboBoxFocusRect, cb ), widget ); |
344 | drawPrimitive( PE_FocusRect, p, re, cg, Style_FocusAtBorder, QStyleOption(cg.highlight())); | 344 | drawPrimitive( PE_FocusRect, p, re, cg, Style_FocusAtBorder, QStyleOption(cg.highlight())); |
345 | } | 345 | } |
346 | } | 346 | } |
347 | break; | 347 | break; |
348 | default: | 348 | default: |
349 | QWindowsStyle::drawComplexControl( control, p, widget, r, cg, how, | 349 | QWindowsStyle::drawComplexControl( control, p, widget, r, cg, how, |
350 | sub, subActive, data ); | 350 | sub, subActive, data ); |
351 | break; | 351 | break; |
352 | } | 352 | } |
353 | } | 353 | } |
354 | 354 | ||
355 | int QPEStyle::pixelMetric( PixelMetric metric, const QWidget *widget ) const | 355 | int QPEStyle::pixelMetric( PixelMetric metric, const QWidget *widget ) const |
356 | { | 356 | { |
357 | int ret; | 357 | int ret; |
358 | switch( metric ) { | 358 | switch( metric ) { |
359 | case PM_ButtonMargin: | 359 | case PM_ButtonMargin: |
360 | ret = 2; | 360 | ret = 2; |
361 | break; | 361 | break; |
362 | case PM_DefaultFrameWidth: | 362 | case PM_DefaultFrameWidth: |
363 | ret = 1; | 363 | ret = 1; |
364 | break; | 364 | break; |
365 | case PM_ButtonDefaultIndicator: | 365 | case PM_ButtonDefaultIndicator: |
366 | ret = 2; | 366 | ret = 2; |
367 | break; | 367 | break; |
368 | case PM_ButtonShiftHorizontal: | 368 | case PM_ButtonShiftHorizontal: |
369 | case PM_ButtonShiftVertical: | 369 | case PM_ButtonShiftVertical: |
370 | ret = -1; | 370 | ret = -1; |
371 | break; | 371 | break; |
372 | case PM_IndicatorWidth: | 372 | case PM_IndicatorWidth: |
373 | ret = 15; | 373 | ret = 15; |
374 | break; | 374 | break; |
375 | case PM_IndicatorHeight: | 375 | case PM_IndicatorHeight: |
376 | ret = 13; | 376 | ret = 13; |
377 | break; | 377 | break; |
378 | case PM_ExclusiveIndicatorHeight: | 378 | case PM_ExclusiveIndicatorHeight: |
379 | case PM_ExclusiveIndicatorWidth: | 379 | case PM_ExclusiveIndicatorWidth: |
380 | ret = 15; | 380 | ret = 15; |
381 | break; | 381 | break; |
382 | case PM_ScrollBarExtent: | 382 | case PM_ScrollBarExtent: |
383 | ret = 13; | 383 | ret = 13; |
384 | break; | 384 | break; |
385 | case PM_SliderLength: | 385 | case PM_SliderLength: |
386 | ret = 12; | 386 | ret = 12; |
387 | break; | 387 | break; |
388 | default: | 388 | default: |
389 | ret = QWindowsStyle::pixelMetric( metric, widget ); | 389 | ret = QWindowsStyle::pixelMetric( metric, widget ); |
390 | break; | 390 | break; |
391 | } | 391 | } |
392 | return ret; | 392 | return ret; |
393 | } | 393 | } |
394 | 394 | ||
395 | QSize QPEStyle::sizeFromContents( ContentsType contents, const QWidget *widget, | 395 | QSize QPEStyle::sizeFromContents( ContentsType contents, const QWidget *widget, |
396 | const QSize &contentsSize, const QStyleOption &data) const | 396 | const QSize &contentsSize, const QStyleOption &data) const |
397 | { | 397 | { |
398 | QSize sz(contentsSize); | 398 | QSize sz(contentsSize); |
399 | 399 | ||
400 | switch ( contents ) { | 400 | switch ( contents ) { |
401 | case CT_PopupMenuItem: | 401 | case CT_PopupMenuItem: |
402 | { | 402 | { |
403 | if ( !widget || data.isDefault() ) | 403 | if ( !widget || data.isDefault() ) |
404 | break; | 404 | break; |
405 | sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data ); | 405 | sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data ); |
406 | sz = QSize( sz.width(), sz.height()-2 ); | 406 | sz = QSize( sz.width(), sz.height()-2 ); |
407 | break; | 407 | break; |
408 | } | 408 | } |
409 | default: | 409 | default: |
410 | sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data ); | 410 | sz = QWindowsStyle::sizeFromContents( contents, widget, contentsSize, data ); |
411 | break; | 411 | break; |
412 | } | 412 | } |
413 | 413 | ||
414 | return sz; | 414 | return sz; |
415 | } | 415 | } |
416 | 416 | ||
417 | #else | 417 | #else |
418 | 418 | ||
419 | #include <qfontmetrics.h> | 419 | #include <qfontmetrics.h> |
420 | #include <qpalette.h> | 420 | #include <qpalette.h> |
421 | #include <qdrawutil.h> | 421 | #include <qdrawutil.h> |
422 | #include <qscrollbar.h> | 422 | #include <qscrollbar.h> |
423 | #include <qbutton.h> | 423 | #include <qbutton.h> |
424 | #include <qframe.h> | 424 | #include <qframe.h> |
425 | #include <qtabbar.h> | 425 | #include <qtabbar.h> |
426 | 426 | ||
427 | #define INCLUDE_MENUITEM_DEF | 427 | #define INCLUDE_MENUITEM_DEF |
428 | #include <qmenudata.h> | 428 | #include <qmenudata.h> |
429 | 429 | ||
430 | QPEStyle::QPEStyle() | 430 | QPEStyle::QPEStyle() |
431 | { | 431 | { |
432 | #if QT_VERSION < 300 | 432 | #if QT_VERSION < 0x030000 |
433 | setButtonMargin(buttonMargin()); | 433 | setButtonMargin(buttonMargin()); |
434 | setScrollBarExtent(scrollBarExtent().width(),scrollBarExtent().height()); | 434 | setScrollBarExtent(scrollBarExtent().width(),scrollBarExtent().height()); |
435 | #endif | 435 | #endif |
436 | } | 436 | } |
437 | 437 | ||
438 | QPEStyle::~QPEStyle() | 438 | QPEStyle::~QPEStyle() |
439 | { | 439 | { |
440 | } | 440 | } |
441 | 441 | ||
442 | int QPEStyle::buttonMargin() const | 442 | int QPEStyle::buttonMargin() const |
443 | { | 443 | { |
444 | return 2; | 444 | return 2; |
445 | } | 445 | } |
446 | 446 | ||
447 | QSize QPEStyle::scrollBarExtent() const | 447 | QSize QPEStyle::scrollBarExtent() const |
448 | { | 448 | { |
449 | return QSize(13,13); | 449 | return QSize(13,13); |
450 | } | 450 | } |
451 | 451 | ||
452 | void QPEStyle::polish ( QPalette & ) | 452 | void QPEStyle::polish ( QPalette & ) |
453 | { | 453 | { |
454 | } | 454 | } |
455 | 455 | ||
456 | void QPEStyle::polish( QWidget *w ) | 456 | void QPEStyle::polish( QWidget *w ) |
457 | { | 457 | { |
458 | if ( w->inherits( "QListBox" ) || | 458 | if ( w->inherits( "QListBox" ) || |
459 | w->inherits( "QListView" ) || | 459 | w->inherits( "QListView" ) || |
460 | w->inherits( "QPopupMenu" ) || | 460 | w->inherits( "QPopupMenu" ) || |
461 | w->inherits( "QSpinBox" ) ) { | 461 | w->inherits( "QSpinBox" ) ) { |
462 | QFrame *f = (QFrame *)w; | 462 | QFrame *f = (QFrame *)w; |
463 | f->setFrameShape( QFrame::StyledPanel ); | 463 | f->setFrameShape( QFrame::StyledPanel ); |
464 | f->setLineWidth( 1 ); | 464 | f->setLineWidth( 1 ); |
465 | } | 465 | } |
466 | } | 466 | } |
467 | 467 | ||
468 | void QPEStyle::unPolish( QWidget *w ) | 468 | void QPEStyle::unPolish( QWidget *w ) |
469 | { | 469 | { |
470 | if ( w->inherits( "QListBox" ) || | 470 | if ( w->inherits( "QListBox" ) || |
471 | w->inherits( "QListView" ) || | 471 | w->inherits( "QListView" ) || |
472 | w->inherits( "QPopupMenu" ) || | 472 | w->inherits( "QPopupMenu" ) || |
473 | w->inherits( "QSpinBox" ) ) { | 473 | w->inherits( "QSpinBox" ) ) { |
474 | QFrame *f = (QFrame *)w; | 474 | QFrame *f = (QFrame *)w; |
475 | f->setFrameShape( QFrame::StyledPanel ); | 475 | f->setFrameShape( QFrame::StyledPanel ); |
476 | f->setLineWidth( 2 ); | 476 | f->setLineWidth( 2 ); |
477 | } | 477 | } |
478 | } | 478 | } |
479 | 479 | ||
480 | int QPEStyle::defaultFrameWidth() const | 480 | int QPEStyle::defaultFrameWidth() const |
481 | { | 481 | { |
482 | return 1; | 482 | return 1; |
483 | } | 483 | } |
484 | 484 | ||
485 | void QPEStyle::drawPanel ( QPainter * p, int x, int y, int w, int h, | 485 | void QPEStyle::drawPanel ( QPainter * p, int x, int y, int w, int h, |
486 | const QColorGroup &g, bool sunken, int lineWidth, const QBrush * fill ) | 486 | const QColorGroup &g, bool sunken, int lineWidth, const QBrush * fill ) |
487 | { | 487 | { |
488 | qDrawShadePanel( p, QRect(x, y, w, h), g, sunken, lineWidth, fill ); | 488 | qDrawShadePanel( p, QRect(x, y, w, h), g, sunken, lineWidth, fill ); |
489 | } | 489 | } |
490 | 490 | ||
491 | void QPEStyle::drawButton( QPainter *p, int x, int y, int w, int h, | 491 | void QPEStyle::drawButton( QPainter *p, int x, int y, int w, int h, |
492 | const QColorGroup &g, bool sunken, const QBrush* fill ) | 492 | const QColorGroup &g, bool sunken, const QBrush* fill ) |
493 | { | 493 | { |
494 | QPen oldPen = p->pen(); | 494 | QPen oldPen = p->pen(); |
495 | if ( sunken ) | 495 | if ( sunken ) |
496 | p->setPen( g.dark() ); | 496 | p->setPen( g.dark() ); |
497 | else | 497 | else |
498 | p->setPen( g.light() ); | 498 | p->setPen( g.light() ); |
499 | 499 | ||
500 | int x2 = x+w-1; | 500 | int x2 = x+w-1; |
501 | int y2 = y+h-1; | 501 | int y2 = y+h-1; |
502 | 502 | ||
503 | p->drawLine( x, y, x, y2 ); | 503 | p->drawLine( x, y, x, y2 ); |
504 | p->drawLine( x, y, x2, y ); | 504 | p->drawLine( x, y, x2, y ); |
505 | 505 | ||
506 | if ( sunken ) | 506 | if ( sunken ) |
507 | p->setPen( g.light() ); | 507 | p->setPen( g.light() ); |
508 | else | 508 | else |
509 | p->setPen( g.dark() ); | 509 | p->setPen( g.dark() ); |
510 | 510 | ||
511 | p->drawLine( x2, y, x2, y2 ); | 511 | p->drawLine( x2, y, x2, y2 ); |
512 | p->drawLine( x, y2, x2, y2 ); | 512 | p->drawLine( x, y2, x2, y2 ); |
513 | p->setPen( oldPen ); | 513 | p->setPen( oldPen ); |
514 | 514 | ||
515 | p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) ); | 515 | p->fillRect( x+1, y+1, w-2, h-2, fill?(*fill):g.brush(QColorGroup::Button) ); |
516 | } | 516 | } |
517 | 517 | ||
518 | void QPEStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h ) | 518 | void QPEStyle::drawButtonMask ( QPainter * p, int x, int y, int w, int h ) |
519 | { | 519 | { |
520 | p->fillRect( x, y, w, h, color1 ); | 520 | p->fillRect( x, y, w, h, color1 ); |
521 | } | 521 | } |
522 | 522 | ||
523 | void QPEStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h, | 523 | void QPEStyle::drawBevelButton( QPainter *p, int x, int y, int w, int h, |
524 | const QColorGroup &g, bool sunken, const QBrush* fill ) | 524 | const QColorGroup &g, bool sunken, const QBrush* fill ) |
525 | { | 525 | { |
526 | drawButton( p, x, y, w, h, g, sunken, fill ); | 526 | drawButton( p, x, y, w, h, g, sunken, fill ); |
527 | } | 527 | } |
528 | 528 | ||
529 | QRect QPEStyle::comboButtonRect( int x, int y, int w, int h) | 529 | QRect QPEStyle::comboButtonRect( int x, int y, int w, int h) |
530 | { | 530 | { |
531 | return QRect(x+1, y+1, w-2-14, h-2); | 531 | return QRect(x+1, y+1, w-2-14, h-2); |
532 | } | 532 | } |
533 | 533 | ||
534 | 534 | ||
535 | QRect QPEStyle::comboButtonFocusRect( int x, int y, int w, int h) | 535 | QRect QPEStyle::comboButtonFocusRect( int x, int y, int w, int h) |
536 | { | 536 | { |
537 | return QRect(x+2, y+2, w-4-14, h-4); | 537 | return QRect(x+2, y+2, w-4-14, h-4); |
538 | } | 538 | } |
539 | 539 | ||
540 | void QPEStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, | 540 | void QPEStyle::drawComboButton( QPainter *p, int x, int y, int w, int h, |
541 | const QColorGroup &g, bool sunken, | 541 | const QColorGroup &g, bool sunken, |
542 | bool /*editable*/, | 542 | bool /*editable*/, |
543 | bool enabled, | 543 | bool enabled, |
544 | const QBrush *fill ) | 544 | const QBrush *fill ) |
545 | { | 545 | { |
546 | drawBevelButton( p, x, y, w, h, g, FALSE, fill ); | 546 | drawBevelButton( p, x, y, w, h, g, FALSE, fill ); |
547 | drawBevelButton( p, x+w-14, y, 14, h, g, sunken, fill ); | 547 | drawBevelButton( p, x+w-14, y, 14, h, g, sunken, fill ); |
548 | drawArrow( p, QStyle::DownArrow, sunken, | 548 | drawArrow( p, QStyle::DownArrow, sunken, |
549 | x+w-14+ 2, y+ 2, 14- 4, h- 4, g, enabled, | 549 | x+w-14+ 2, y+ 2, 14- 4, h- 4, g, enabled, |
550 | &g.brush( QColorGroup::Button ) ); | 550 | &g.brush( QColorGroup::Button ) ); |
551 | 551 | ||
552 | } | 552 | } |
553 | 553 | ||
554 | 554 | ||
555 | void QPEStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w, | 555 | void QPEStyle::drawExclusiveIndicator ( QPainter * p, int x, int y, int w, |
556 | int h, const QColorGroup & g, bool on, bool down, bool enabled ) | 556 | int h, const QColorGroup & g, bool on, bool down, bool enabled ) |
557 | { | 557 | { |
558 | static const QCOORD pts1[] = { // dark lines | 558 | static const QCOORD pts1[] = { // dark lines |
559 | 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; | 559 | 1,9, 1,8, 0,7, 0,4, 1,3, 1,2, 2,1, 3,1, 4,0, 7,0, 8,1, 9,1 }; |
560 | static const QCOORD pts4[] = { // white lines | 560 | static const QCOORD pts4[] = { // white lines |
561 | 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, | 561 | 2,10, 3,10, 4,11, 7,11, 8,10, 9,10, 10,9, 10,8, 11,7, |
562 | 11,4, 10,3, 10,2 }; | 562 | 11,4, 10,3, 10,2 }; |
563 | static const QCOORD pts5[] = { // inner fill | 563 | static const QCOORD pts5[] = { // inner fill |
564 | 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; | 564 | 4,2, 7,2, 9,4, 9,7, 7,9, 4,9, 2,7, 2,4 }; |
565 | 565 | ||
566 | p->eraseRect( x, y, w, h ); | 566 | p->eraseRect( x, y, w, h ); |
567 | QPointArray a( QCOORDARRLEN(pts1), pts1 ); | 567 | QPointArray a( QCOORDARRLEN(pts1), pts1 ); |
568 | a.translate( x, y ); | 568 | a.translate( x, y ); |
569 | p->setPen( g.dark() ); | 569 | p->setPen( g.dark() ); |
570 | p->drawPolyline( a ); | 570 | p->drawPolyline( a ); |
571 | a.setPoints( QCOORDARRLEN(pts4), pts4 ); | 571 | a.setPoints( QCOORDARRLEN(pts4), pts4 ); |
572 | a.translate( x, y ); | 572 | a.translate( x, y ); |
573 | p->setPen( g.light() ); | 573 | p->setPen( g.light() ); |
574 | p->drawPolyline( a ); | 574 | p->drawPolyline( a ); |
575 | a.setPoints( QCOORDARRLEN(pts5), pts5 ); | 575 | a.setPoints( QCOORDARRLEN(pts5), pts5 ); |
576 | a.translate( x, y ); | 576 | a.translate( x, y ); |
577 | QColor fillColor = ( down || !enabled ) ? g.button() : g.base(); | 577 | QColor fillColor = ( down || !enabled ) ? g.button() : g.base(); |
578 | p->setPen( fillColor ); | 578 | p->setPen( fillColor ); |
579 | p->setBrush( fillColor ) ; | 579 | p->setBrush( fillColor ) ; |
580 | p->drawPolygon( a ); | 580 | p->drawPolygon( a ); |
581 | if ( on ) { | 581 | if ( on ) { |
582 | p->setPen( NoPen ); | 582 | p->setPen( NoPen ); |
583 | p->setBrush( g.text() ); | 583 | p->setBrush( g.text() ); |
584 | p->drawRect( x+5, y+4, 2, 4 ); | 584 | p->drawRect( x+5, y+4, 2, 4 ); |
585 | p->drawRect( x+4, y+5, 4, 2 ); | 585 | p->drawRect( x+4, y+5, 4, 2 ); |
586 | } | 586 | } |
587 | } | 587 | } |
588 | 588 | ||
589 | void QPEStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h, | 589 | void QPEStyle::drawIndicator ( QPainter * p, int x, int y, int w, int h, |
590 | const QColorGroup & g, int state, bool down, bool enabled ) | 590 | const QColorGroup & g, int state, bool down, bool enabled ) |
591 | { | 591 | { |
592 | 592 | ||
593 | QBrush fill; | 593 | QBrush fill; |
594 | if ( state == QButton::NoChange ) { | 594 | if ( state == QButton::NoChange ) { |
595 | QBrush b = p->brush(); | 595 | QBrush b = p->brush(); |
596 | QColor c = p->backgroundColor(); | 596 | QColor c = p->backgroundColor(); |
597 | p->setBackgroundMode( TransparentMode ); | 597 | p->setBackgroundMode( TransparentMode ); |
598 | p->setBackgroundColor( green ); | 598 | p->setBackgroundColor( green ); |
599 | fill = QBrush(g.base(), Dense4Pattern); | 599 | fill = QBrush(g.base(), Dense4Pattern); |
600 | p->setBackgroundColor( c ); | 600 | p->setBackgroundColor( c ); |
601 | p->setBrush( b ); | 601 | p->setBrush( b ); |
602 | } else if ( down ) | 602 | } else if ( down ) |
603 | fill = g.brush( QColorGroup::Button ); | 603 | fill = g.brush( QColorGroup::Button ); |
604 | else | 604 | else |
605 | fill = g.brush( enabled ? QColorGroup::Base : QColorGroup::Background ); | 605 | fill = g.brush( enabled ? QColorGroup::Base : QColorGroup::Background ); |
606 | drawPanel( p, x, y, w, h, g, TRUE, 1, &fill ); | 606 | drawPanel( p, x, y, w, h, g, TRUE, 1, &fill ); |
607 | if ( state != QButton::Off ) { | 607 | if ( state != QButton::Off ) { |
608 | QPointArray a( 7*2 ); | 608 | QPointArray a( 7*2 ); |
609 | int i, xx, yy; | 609 | int i, xx, yy; |
610 | xx = x+3; | 610 | xx = x+3; |
611 | yy = y+5; | 611 | yy = y+5; |
612 | for ( i=0; i<3; i++ ) { | 612 | for ( i=0; i<3; i++ ) { |
613 | a.setPoint( 2*i, xx, yy ); | 613 | a.setPoint( 2*i, xx, yy ); |
614 | a.setPoint( 2*i+1, xx, yy+2 ); | 614 | a.setPoint( 2*i+1, xx, yy+2 ); |
615 | xx++; yy++; | 615 | xx++; yy++; |
616 | } | 616 | } |
617 | yy -= 2; | 617 | yy -= 2; |
618 | for ( i=3; i<7; i++ ) { | 618 | for ( i=3; i<7; i++ ) { |
619 | a.setPoint( 2*i, xx, yy ); | 619 | a.setPoint( 2*i, xx, yy ); |
620 | a.setPoint( 2*i+1, xx, yy+2 ); | 620 | a.setPoint( 2*i+1, xx, yy+2 ); |
621 | xx++; yy--; | 621 | xx++; yy--; |
622 | } | 622 | } |
623 | if ( state == QButton::NoChange ) { | 623 | if ( state == QButton::NoChange ) { |
624 | p->setPen( g.dark() ); | 624 | p->setPen( g.dark() ); |
625 | } else { | 625 | } else { |
626 | p->setPen( g.text() ); | 626 | p->setPen( g.text() ); |
627 | } | 627 | } |
628 | p->drawLineSegments( a ); | 628 | p->drawLineSegments( a ); |
629 | } | 629 | } |
630 | } | 630 | } |
631 | 631 | ||
632 | #define HORIZONTAL(sb->orientation() == QScrollBar::Horizontal) | 632 | #define HORIZONTAL(sb->orientation() == QScrollBar::Horizontal) |
633 | #define VERTICAL!HORIZONTAL | 633 | #define VERTICAL!HORIZONTAL |
634 | #define MOTIF_BORDER2 | 634 | #define MOTIF_BORDER2 |
635 | #define SLIDER_MIN9 // ### motif says 6 but that's too small | 635 | #define SLIDER_MIN9 // ### motif says 6 but that's too small |
636 | 636 | ||
637 | /*! \reimp */ | 637 | /*! \reimp */ |
638 | 638 | ||
639 | void QPEStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim ) | 639 | void QPEStyle::scrollBarMetrics( const QScrollBar* sb, int &sliderMin, int &sliderMax, int &sliderLength, int& buttonDim ) |
640 | { | 640 | { |
641 | int maxLength; | 641 | int maxLength; |
642 | int length = HORIZONTAL ? sb->width() : sb->height(); | 642 | int length = HORIZONTAL ? sb->width() : sb->height(); |
643 | int extent = HORIZONTAL ? sb->height() : sb->width(); | 643 | int extent = HORIZONTAL ? sb->height() : sb->width(); |
644 | 644 | ||
645 | if ( length > (extent - 1)*2 ) | 645 | if ( length > (extent - 1)*2 ) |
646 | buttonDim = extent; | 646 | buttonDim = extent; |
647 | else | 647 | else |
648 | buttonDim = length/2 - 1; | 648 | buttonDim = length/2 - 1; |
649 | 649 | ||
650 | sliderMin = 0; | 650 | sliderMin = 0; |
651 | maxLength = length - buttonDim*2; | 651 | maxLength = length - buttonDim*2; |
652 | 652 | ||
653 | if ( sb->maxValue() == sb->minValue() ) { | 653 | if ( sb->maxValue() == sb->minValue() ) { |
654 | sliderLength = maxLength; | 654 | sliderLength = maxLength; |
655 | } else { | 655 | } else { |
656 | sliderLength = (sb->pageStep()*maxLength)/ | 656 | sliderLength = (sb->pageStep()*maxLength)/ |
657 | (sb->maxValue()-sb->minValue()+sb->pageStep()); | 657 | (sb->maxValue()-sb->minValue()+sb->pageStep()); |
658 | uint range = sb->maxValue()-sb->minValue(); | 658 | uint range = sb->maxValue()-sb->minValue(); |
659 | if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 ) | 659 | if ( sliderLength < SLIDER_MIN || range > INT_MAX/2 ) |
660 | sliderLength = SLIDER_MIN; | 660 | sliderLength = SLIDER_MIN; |
661 | if ( sliderLength > maxLength ) | 661 | if ( sliderLength > maxLength ) |
662 | sliderLength = maxLength; | 662 | sliderLength = maxLength; |
663 | } | 663 | } |
664 | 664 | ||
665 | sliderMax = sliderMin + maxLength - sliderLength; | 665 | sliderMax = sliderMin + maxLength - sliderLength; |
666 | } | 666 | } |
667 | 667 | ||
668 | /*!\reimp | 668 | /*!\reimp |
669 | */ | 669 | */ |
670 | QStyle::ScrollControl QPEStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ) | 670 | QStyle::ScrollControl QPEStyle::scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ) |
671 | { | 671 | { |
672 | if ( !sb->rect().contains( p ) ) | 672 | if ( !sb->rect().contains( p ) ) |
673 | return NoScroll; | 673 | return NoScroll; |
674 | int sliderMin, sliderMax, sliderLength, buttonDim, pos; | 674 | int sliderMin, sliderMax, sliderLength, buttonDim, pos; |
675 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); | 675 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); |
676 | 676 | ||
677 | if (sb->orientation() == QScrollBar::Horizontal) | 677 | if (sb->orientation() == QScrollBar::Horizontal) |
678 | pos = p.x(); | 678 | pos = p.x(); |
679 | else | 679 | else |
680 | pos = p.y(); | 680 | pos = p.y(); |
681 | 681 | ||
682 | if (pos < sliderStart) | 682 | if (pos < sliderStart) |
683 | return SubPage; | 683 | return SubPage; |
684 | if (pos < sliderStart + sliderLength) | 684 | if (pos < sliderStart + sliderLength) |
685 | return Slider; | 685 | return Slider; |
686 | if (pos < sliderMax + sliderLength) | 686 | if (pos < sliderMax + sliderLength) |
687 | return AddPage; | 687 | return AddPage; |
688 | if (pos < sliderMax + sliderLength + buttonDim) | 688 | if (pos < sliderMax + sliderLength + buttonDim) |
689 | return SubLine; | 689 | return SubLine; |
690 | return AddLine; | 690 | return AddLine; |
691 | } | 691 | } |
692 | 692 | ||
693 | /*! \reimp */ | 693 | /*! \reimp */ |
694 | 694 | ||
695 | void QPEStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl ) | 695 | void QPEStyle::drawScrollBarControls( QPainter* p, const QScrollBar* sb, int sliderStart, uint controls, uint activeControl ) |
696 | { | 696 | { |
697 | #define ADD_LINE_ACTIVE ( activeControl == AddLine ) | 697 | #define ADD_LINE_ACTIVE ( activeControl == AddLine ) |
698 | #define SUB_LINE_ACTIVE ( activeControl == SubLine ) | 698 | #define SUB_LINE_ACTIVE ( activeControl == SubLine ) |
699 | QColorGroup g = sb->colorGroup(); | 699 | QColorGroup g = sb->colorGroup(); |
700 | 700 | ||
701 | int sliderMin, sliderMax, sliderLength, buttonDim; | 701 | int sliderMin, sliderMax, sliderLength, buttonDim; |
702 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); | 702 | scrollBarMetrics( sb, sliderMin, sliderMax, sliderLength, buttonDim ); |
703 | 703 | ||
704 | if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) ) | 704 | if ( controls == (AddLine | SubLine | AddPage | SubPage | Slider | First | Last ) ) |
705 | p->fillRect( 0, 0, sb->width(), sb->height(), g.brush( QColorGroup::Mid )); | 705 | p->fillRect( 0, 0, sb->width(), sb->height(), g.brush( QColorGroup::Mid )); |
706 | 706 | ||
707 | if (sliderStart > sliderMax) { // sanity check | 707 | if (sliderStart > sliderMax) { // sanity check |
708 | sliderStart = sliderMax; | 708 | sliderStart = sliderMax; |
709 | } | 709 | } |
710 | 710 | ||
711 | int dimB = buttonDim; | 711 | int dimB = buttonDim; |
712 | QRect addB; | 712 | QRect addB; |
713 | QRect subB; | 713 | QRect subB; |
714 | QRect addPageR; | 714 | QRect addPageR; |
715 | QRect subPageR; | 715 | QRect subPageR; |
716 | QRect sliderR; | 716 | QRect sliderR; |
717 | int addX, addY, subX, subY; | 717 | int addX, addY, subX, subY; |
718 | int length = HORIZONTAL ? sb->width() : sb->height(); | 718 | int length = HORIZONTAL ? sb->width() : sb->height(); |
719 | int extent = HORIZONTAL ? sb->height() : sb->width(); | 719 | int extent = HORIZONTAL ? sb->height() : sb->width(); |
720 | 720 | ||
721 | if ( HORIZONTAL ) { | 721 | if ( HORIZONTAL ) { |
722 | subY = addY = ( extent - dimB ) / 2; | 722 | subY = addY = ( extent - dimB ) / 2; |
723 | subX = length - dimB - dimB; | 723 | subX = length - dimB - dimB; |
724 | addX = length - dimB; | 724 | addX = length - dimB; |
725 | } else { | 725 | } else { |
726 | subX = addX = ( extent - dimB ) / 2; | 726 | subX = addX = ( extent - dimB ) / 2; |
727 | subY = length - dimB - dimB; | 727 | subY = length - dimB - dimB; |
728 | addY = length - dimB; | 728 | addY = length - dimB; |
729 | } | 729 | } |
730 | 730 | ||
731 | int sliderEnd = sliderStart + sliderLength; | 731 | int sliderEnd = sliderStart + sliderLength; |
732 | int sliderW = extent; | 732 | int sliderW = extent; |
733 | if ( HORIZONTAL ) { | 733 | if ( HORIZONTAL ) { |
734 | subB.setRect( subX,subY+1,dimB,dimB-1 ); | 734 | subB.setRect( subX,subY+1,dimB,dimB-1 ); |
735 | addB.setRect( addX,addY+1,dimB,dimB-1 ); | 735 | addB.setRect( addX,addY+1,dimB,dimB-1 ); |
736 | 736 | ||
737 | subPageR.setRect( 0, 0, | 737 | subPageR.setRect( 0, 0, |
738 | sliderStart+1, sliderW ); | 738 | sliderStart+1, sliderW ); |
739 | addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+1, sliderW ); | 739 | addPageR.setRect( sliderEnd-1, 0, subX - sliderEnd+1, sliderW ); |
740 | sliderR .setRect( sliderStart, 1, sliderLength, sliderW-1 ); | 740 | sliderR .setRect( sliderStart, 1, sliderLength, sliderW-1 ); |
741 | 741 | ||
742 | } else { | 742 | } else { |
743 | subB.setRect( subX+1,subY,dimB-1,dimB ); | 743 | subB.setRect( subX+1,subY,dimB-1,dimB ); |
744 | addB.setRect( addX+1,addY,dimB-1,dimB ); | 744 | addB.setRect( addX+1,addY,dimB-1,dimB ); |
745 | 745 | ||
746 | subPageR.setRect( 0, 0, sliderW, | 746 | subPageR.setRect( 0, 0, sliderW, |
747 | sliderStart+1 ); | 747 | sliderStart+1 ); |
748 | addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+1 ); | 748 | addPageR.setRect( 0, sliderEnd-1, sliderW, subY - sliderEnd+1 ); |
749 | sliderR .setRect( 1, sliderStart, sliderW-1, sliderLength ); | 749 | sliderR .setRect( 1, sliderStart, sliderW-1, sliderLength ); |
750 | } | 750 | } |
751 | 751 | ||
752 | bool maxedOut = (sb->maxValue() == sb->minValue()); | 752 | bool maxedOut = (sb->maxValue() == sb->minValue()); |
753 | if ( controls & AddLine ) { | 753 | if ( controls & AddLine ) { |
754 | drawBevelButton( p, addB.x(), addB.y(), | 754 | drawBevelButton( p, addB.x(), addB.y(), |
755 | addB.width(), addB.height(), g, | 755 | addB.width(), addB.height(), g, |
756 | ADD_LINE_ACTIVE); | 756 | ADD_LINE_ACTIVE); |
757 | p->setPen(g.shadow()); | 757 | p->setPen(g.shadow()); |
758 | drawArrow( p, VERTICAL ? DownArrow : RightArrow, | 758 | drawArrow( p, VERTICAL ? DownArrow : RightArrow, |
759 | FALSE, addB.x()+2, addB.y()+2, | 759 | FALSE, addB.x()+2, addB.y()+2, |
760 | addB.width()-4, addB.height()-4, g, !maxedOut, | 760 | addB.width()-4, addB.height()-4, g, !maxedOut, |
761 | &g.brush( QColorGroup::Button )); | 761 | &g.brush( QColorGroup::Button )); |
762 | } | 762 | } |
763 | if ( controls & SubLine ) { | 763 | if ( controls & SubLine ) { |
764 | drawBevelButton( p, subB.x(), subB.y(), | 764 | drawBevelButton( p, subB.x(), subB.y(), |
765 | subB.width(), subB.height(), g, | 765 | subB.width(), subB.height(), g, |
766 | SUB_LINE_ACTIVE ); | 766 | SUB_LINE_ACTIVE ); |
767 | p->setPen(g.shadow()); | 767 | p->setPen(g.shadow()); |
768 | drawArrow( p, VERTICAL ? UpArrow : LeftArrow, | 768 | drawArrow( p, VERTICAL ? UpArrow : LeftArrow, |
769 | FALSE, subB.x()+2, subB.y()+2, | 769 | FALSE, subB.x()+2, subB.y()+2, |
770 | subB.width()-4, subB.height()-4, g, !maxedOut, | 770 | subB.width()-4, subB.height()-4, g, !maxedOut, |
771 | &g.brush( QColorGroup::Button )); | 771 | &g.brush( QColorGroup::Button )); |
772 | } | 772 | } |
773 | 773 | ||
774 | 774 | ||
775 | if ( controls & SubPage ) | 775 | if ( controls & SubPage ) |
776 | p->fillRect( subPageR.x(), subPageR.y(), subPageR.width(), | 776 | p->fillRect( subPageR.x(), subPageR.y(), subPageR.width(), |
777 | subPageR.height(), g.brush( QColorGroup::Mid )); | 777 | subPageR.height(), g.brush( QColorGroup::Mid )); |
778 | if ( controls & AddPage ) | 778 | if ( controls & AddPage ) |
779 | p->fillRect( addPageR.x(), addPageR.y(), addPageR.width(), | 779 | p->fillRect( addPageR.x(), addPageR.y(), addPageR.width(), |
780 | addPageR.height(), g.brush( QColorGroup::Mid )); | 780 | addPageR.height(), g.brush( QColorGroup::Mid )); |
781 | if ( controls & Slider ) { | 781 | if ( controls & Slider ) { |
782 | QPoint bo = p->brushOrigin(); | 782 | QPoint bo = p->brushOrigin(); |
783 | p->setBrushOrigin(sliderR.topLeft()); | 783 | p->setBrushOrigin(sliderR.topLeft()); |
784 | drawBevelButton( p, sliderR.x(), sliderR.y(), | 784 | drawBevelButton( p, sliderR.x(), sliderR.y(), |
785 | sliderR.width(), sliderR.height(), g, | 785 | sliderR.width(), sliderR.height(), g, |
786 | FALSE, &g.brush( QColorGroup::Button ) ); | 786 | FALSE, &g.brush( QColorGroup::Button ) ); |
787 | p->setBrushOrigin(bo); | 787 | p->setBrushOrigin(bo); |
788 | drawRiffles( p, sliderR.x(), sliderR.y(), | 788 | drawRiffles( p, sliderR.x(), sliderR.y(), |
789 | sliderR.width(), sliderR.height(), g, HORIZONTAL ); | 789 | sliderR.width(), sliderR.height(), g, HORIZONTAL ); |
790 | } | 790 | } |
791 | 791 | ||
792 | // ### perhaps this should not be able to accept focus if maxedOut? | 792 | // ### perhaps this should not be able to accept focus if maxedOut? |
793 | if ( sb->hasFocus() && (controls & Slider) ) | 793 | if ( sb->hasFocus() && (controls & Slider) ) |
794 | p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2, | 794 | p->drawWinFocusRect( sliderR.x()+2, sliderR.y()+2, |
795 | sliderR.width()-5, sliderR.height()-5, | 795 | sliderR.width()-5, sliderR.height()-5, |
796 | sb->backgroundColor() ); | 796 | sb->backgroundColor() ); |
797 | 797 | ||
798 | } | 798 | } |
799 | 799 | ||
800 | void QPEStyle::drawRiffles( QPainter* p, int x, int y, int w, int h, | 800 | void QPEStyle::drawRiffles( QPainter* p, int x, int y, int w, int h, |
801 | const QColorGroup &g, bool horizontal ) | 801 | const QColorGroup &g, bool horizontal ) |
802 | { | 802 | { |
803 | if (!horizontal) { | 803 | if (!horizontal) { |
804 | if (h > 20) { | 804 | if (h > 20) { |
805 | y += (h-20)/2 ; | 805 | y += (h-20)/2 ; |
806 | h = 20; | 806 | h = 20; |
807 | } | 807 | } |
808 | if (h > 12) { | 808 | if (h > 12) { |
809 | int n = 3; | 809 | int n = 3; |
810 | int my = y+h/2-4; | 810 | int my = y+h/2-4; |
811 | int i ; | 811 | int i ; |
812 | p->setPen(g.light()); | 812 | p->setPen(g.light()); |
813 | for (i=0; i<n; i++) { | 813 | for (i=0; i<n; i++) { |
814 | p->drawLine(x+2, my+3*i, x+w-4, my+3*i); | 814 | p->drawLine(x+2, my+3*i, x+w-4, my+3*i); |
815 | } | 815 | } |
816 | p->setPen(g.dark()); | 816 | p->setPen(g.dark()); |
diff --git a/library/qpestyle.h b/library/qpestyle.h index 19ef346..1bde0ff 100644 --- a/library/qpestyle.h +++ b/library/qpestyle.h | |||
@@ -1,102 +1,102 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #ifndef QPESTYLE_H | 21 | #ifndef QPESTYLE_H |
22 | #define QPESTYLE_H | 22 | #define QPESTYLE_H |
23 | 23 | ||
24 | #ifndef QT_H | 24 | #ifndef QT_H |
25 | #include "qwindowsstyle.h" | 25 | #include "qwindowsstyle.h" |
26 | #endif // QT_H | 26 | #endif // QT_H |
27 | 27 | ||
28 | #if QT_VERSION >= 300 | 28 | #if QT_VERSION >= 0x030000 |
29 | 29 | ||
30 | class Q_EXPORT QPEStyle : public QWindowsStyle | 30 | class Q_EXPORT QPEStyle : public QWindowsStyle |
31 | { | 31 | { |
32 | public: | 32 | public: |
33 | QPEStyle(); | 33 | QPEStyle(); |
34 | virtual ~QPEStyle(); | 34 | virtual ~QPEStyle(); |
35 | 35 | ||
36 | virtual void drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags=Style_Default, const QStyleOption & = QStyleOption::Default) const; | 36 | virtual void drawPrimitive( PrimitiveElement pe, QPainter *p, const QRect &r, const QColorGroup &cg, SFlags flags=Style_Default, const QStyleOption & = QStyleOption::Default) const; |
37 | virtual void drawControl( ControlElement ce, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how=Style_Default, const QStyleOption & = QStyleOption::Default) const; | 37 | virtual void drawControl( ControlElement ce, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how=Style_Default, const QStyleOption & = QStyleOption::Default) const; |
38 | virtual void drawComplexControl( ComplexControl control, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how=Style_Default, SCFlags sub=SC_All, SCFlags subActive=SC_None, const QStyleOption & = QStyleOption::Default) const; | 38 | virtual void drawComplexControl( ComplexControl control, QPainter *p, const QWidget *widget, const QRect &r, const QColorGroup &cg, SFlags how=Style_Default, SCFlags sub=SC_All, SCFlags subActive=SC_None, const QStyleOption & = QStyleOption::Default) const; |
39 | virtual int pixelMetric( PixelMetric metric, const QWidget *widget=0 ) const; | 39 | virtual int pixelMetric( PixelMetric metric, const QWidget *widget=0 ) const; |
40 | virtual QSize sizeFromContents( ContentsType contents, const QWidget *widget, const QSize &contentsSize, const QStyleOption & = QStyleOption::Default) const; | 40 | virtual QSize sizeFromContents( ContentsType contents, const QWidget *widget, const QSize &contentsSize, const QStyleOption & = QStyleOption::Default) const; |
41 | }; | 41 | }; |
42 | 42 | ||
43 | #else | 43 | #else |
44 | 44 | ||
45 | class Q_EXPORT QPEStyle : public QWindowsStyle | 45 | class Q_EXPORT QPEStyle : public QWindowsStyle |
46 | { | 46 | { |
47 | public: | 47 | public: |
48 | QPEStyle(); | 48 | QPEStyle(); |
49 | virtual ~QPEStyle(); | 49 | virtual ~QPEStyle(); |
50 | virtual void polish( QPalette &p ); | 50 | virtual void polish( QPalette &p ); |
51 | virtual void polish( QWidget *w ); | 51 | virtual void polish( QWidget *w ); |
52 | virtual void unPolish( QWidget *w ); | 52 | virtual void unPolish( QWidget *w ); |
53 | 53 | ||
54 | int defaultFrameWidth () const; | 54 | int defaultFrameWidth () const; |
55 | void drawPanel ( QPainter * p, int x, int y, int w, int h, | 55 | void drawPanel ( QPainter * p, int x, int y, int w, int h, |
56 | const QColorGroup &, bool sunken=FALSE, int lineWidth = 1, const QBrush * fill = 0 ); | 56 | const QColorGroup &, bool sunken=FALSE, int lineWidth = 1, const QBrush * fill = 0 ); |
57 | void drawButton( QPainter *p, int x, int y, int w, int h, | 57 | void drawButton( QPainter *p, int x, int y, int w, int h, |
58 | const QColorGroup &g, bool sunken, const QBrush* fill ); | 58 | const QColorGroup &g, bool sunken, const QBrush* fill ); |
59 | void drawButtonMask ( QPainter * p, int x, int y, int w, int h ); | 59 | void drawButtonMask ( QPainter * p, int x, int y, int w, int h ); |
60 | void drawBevelButton( QPainter *p, int x, int y, int w, int h, | 60 | void drawBevelButton( QPainter *p, int x, int y, int w, int h, |
61 | const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 ); | 61 | const QColorGroup &g, bool sunken=FALSE, const QBrush* fill=0 ); |
62 | QRect comboButtonRect( int x, int y, int w, int h); | 62 | QRect comboButtonRect( int x, int y, int w, int h); |
63 | QRect comboButtonFocusRect( int x, int y, int w, int h); | 63 | QRect comboButtonFocusRect( int x, int y, int w, int h); |
64 | void drawComboButton( QPainter *p, int x, int y, int w, int h, | 64 | void drawComboButton( QPainter *p, int x, int y, int w, int h, |
65 | const QColorGroup &g, bool sunken, bool, bool enabled, | 65 | const QColorGroup &g, bool sunken, bool, bool enabled, |
66 | const QBrush *fill ); | 66 | const QBrush *fill ); |
67 | void drawExclusiveIndicator ( QPainter * p, int x, int y, int w, int h, | 67 | void drawExclusiveIndicator ( QPainter * p, int x, int y, int w, int h, |
68 | const QColorGroup & g, bool on, bool down = FALSE, bool enabled = TRUE ); | 68 | const QColorGroup & g, bool on, bool down = FALSE, bool enabled = TRUE ); |
69 | void drawIndicator ( QPainter * p, int x, int y, int w, int h, | 69 | void drawIndicator ( QPainter * p, int x, int y, int w, int h, |
70 | const QColorGroup & g, int state, bool down = FALSE, bool enabled = TRUE ); | 70 | const QColorGroup & g, int state, bool down = FALSE, bool enabled = TRUE ); |
71 | void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int&); | 71 | void scrollBarMetrics( const QScrollBar*, int&, int&, int&, int&); |
72 | void drawScrollBarControls( QPainter*, const QScrollBar*, int sliderStart, uint controls, uint activeControl ); | 72 | void drawScrollBarControls( QPainter*, const QScrollBar*, int sliderStart, uint controls, uint activeControl ); |
73 | ScrollControl scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ); | 73 | ScrollControl scrollBarPointOver( const QScrollBar* sb, int sliderStart, const QPoint& p ); |
74 | void drawRiffles( QPainter* p, int x, int y, int w, int h, | 74 | void drawRiffles( QPainter* p, int x, int y, int w, int h, |
75 | const QColorGroup &g, bool horizontal ); | 75 | const QColorGroup &g, bool horizontal ); |
76 | int sliderLength() const; | 76 | int sliderLength() const; |
77 | void drawSlider( QPainter *p, int x, int y, int w, int h, | 77 | void drawSlider( QPainter *p, int x, int y, int w, int h, |
78 | const QColorGroup &g, Orientation, bool tickAbove, bool tickBelow ); | 78 | const QColorGroup &g, Orientation, bool tickAbove, bool tickBelow ); |
79 | void drawSliderMask( QPainter *p, int x, int y, int w, int h, | 79 | void drawSliderMask( QPainter *p, int x, int y, int w, int h, |
80 | Orientation, bool tickAbove, bool tickBelow ); | 80 | Orientation, bool tickAbove, bool tickBelow ); |
81 | void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h, | 81 | void drawSliderGrooveMask( QPainter *p, int x, int y, int w, int h, |
82 | const QColorGroup& , QCOORD c, Orientation orient ); | 82 | const QColorGroup& , QCOORD c, Orientation orient ); |
83 | void drawTab( QPainter *, const QTabBar *, QTab *, bool selected ); | 83 | void drawTab( QPainter *, const QTabBar *, QTab *, bool selected ); |
84 | int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& ); | 84 | int extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem*, const QFontMetrics& ); |
85 | int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& ); | 85 | int popupMenuItemHeight( bool checkable, QMenuItem*, const QFontMetrics& ); |
86 | void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, | 86 | void drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, |
87 | const QPalette& pal, | 87 | const QPalette& pal, |
88 | bool act, bool enabled, int x, int y, int w, int h); | 88 | bool act, bool enabled, int x, int y, int w, int h); |
89 | 89 | ||
90 | int buttonMargin() const; | 90 | int buttonMargin() const; |
91 | QSize scrollBarExtent() const; | 91 | QSize scrollBarExtent() const; |
92 | 92 | ||
93 | private:// Disabled copy constructor and operator= | 93 | private:// Disabled copy constructor and operator= |
94 | #if defined(Q_DISABLE_COPY) | 94 | #if defined(Q_DISABLE_COPY) |
95 | QPEStyle( const QPEStyle & ); | 95 | QPEStyle( const QPEStyle & ); |
96 | QPEStyle& operator=( const QPEStyle & ); | 96 | QPEStyle& operator=( const QPEStyle & ); |
97 | #endif | 97 | #endif |
98 | }; | 98 | }; |
99 | 99 | ||
100 | #endif | 100 | #endif |
101 | 101 | ||
102 | #endif // QPESTYLE_H | 102 | #endif // QPESTYLE_H |
diff --git a/noncore/apps/opie-console/TEWidget.cpp b/noncore/apps/opie-console/TEWidget.cpp index 98c1793..1199e4f 100644 --- a/noncore/apps/opie-console/TEWidget.cpp +++ b/noncore/apps/opie-console/TEWidget.cpp | |||
@@ -1,651 +1,651 @@ | |||
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 <qpe/config.h> | 52 | #include <qpe/config.h> |
53 | 53 | ||
54 | #include <qapplication.h> | 54 | #include <qapplication.h> |
55 | #include <qclipboard.h> | 55 | #include <qclipboard.h> |
56 | 56 | ||
57 | #include <stdio.h> | 57 | #include <stdio.h> |
58 | #include <stdlib.h> | 58 | #include <stdlib.h> |
59 | #include <unistd.h> | 59 | #include <unistd.h> |
60 | #include <ctype.h> | 60 | #include <ctype.h> |
61 | #include <sys/stat.h> | 61 | #include <sys/stat.h> |
62 | #include <sys/types.h> | 62 | #include <sys/types.h> |
63 | #include <signal.h> | 63 | #include <signal.h> |
64 | 64 | ||
65 | #include <assert.h> | 65 | #include <assert.h> |
66 | 66 | ||
67 | 67 | ||
68 | 68 | ||
69 | // #include "TEWidget.moc" | 69 | // #include "TEWidget.moc" |
70 | //#include <kapp.h> | 70 | //#include <kapp.h> |
71 | //#include <kcursor.h> | 71 | //#include <kcursor.h> |
72 | //#include <kurl.h> | 72 | //#include <kurl.h> |
73 | //#include <kdebug.h> | 73 | //#include <kdebug.h> |
74 | //#include <klocale.h> | 74 | //#include <klocale.h> |
75 | 75 | ||
76 | #define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) | 76 | #define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) |
77 | #define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } | 77 | #define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } |
78 | 78 | ||
79 | #define loc(X,Y) ((Y)*columns+(X)) | 79 | #define loc(X,Y) ((Y)*columns+(X)) |
80 | 80 | ||
81 | //FIXME: the rim should normally be 1, 0 only when running in full screen mode. | 81 | //FIXME: the rim should normally be 1, 0 only when running in full screen mode. |
82 | #define rimX 0 // left/right rim width | 82 | #define rimX 0 // left/right rim width |
83 | #define rimY 0 // top/bottom rim high | 83 | #define rimY 0 // top/bottom rim high |
84 | 84 | ||
85 | #define yMouseScroll 1 | 85 | #define yMouseScroll 1 |
86 | // scroll increment used when dragging selection at top/bottom of window. | 86 | // scroll increment used when dragging selection at top/bottom of window. |
87 | 87 | ||
88 | /* Button XPM */ | 88 | /* Button XPM */ |
89 | namespace { | 89 | namespace { |
90 | static char * menu_xpm[] = { | 90 | static char * menu_xpm[] = { |
91 | "12 12 5 1", | 91 | "12 12 5 1", |
92 | " c None", | 92 | " c None", |
93 | ".c #000000", | 93 | ".c #000000", |
94 | "+c #FFFDAD", | 94 | "+c #FFFDAD", |
95 | "@c #FFFF00", | 95 | "@c #FFFF00", |
96 | "#c #E5E100", | 96 | "#c #E5E100", |
97 | " ", | 97 | " ", |
98 | " ", | 98 | " ", |
99 | " ......... ", | 99 | " ......... ", |
100 | " .+++++++. ", | 100 | " .+++++++. ", |
101 | " .+@@@@#. ", | 101 | " .+@@@@#. ", |
102 | " .+@@@#. ", | 102 | " .+@@@#. ", |
103 | " .+@@#. ", | 103 | " .+@@#. ", |
104 | " .+@#. ", | 104 | " .+@#. ", |
105 | " .+#. ", | 105 | " .+#. ", |
106 | " .+. ", | 106 | " .+. ", |
107 | " .. ", | 107 | " .. ", |
108 | " "}; | 108 | " "}; |
109 | 109 | ||
110 | } | 110 | } |
111 | 111 | ||
112 | 112 | ||
113 | /* ------------------------------------------------------------------------- */ | 113 | /* ------------------------------------------------------------------------- */ |
114 | /* */ | 114 | /* */ |
115 | /* Colors */ | 115 | /* Colors */ |
116 | /* */ | 116 | /* */ |
117 | /* ------------------------------------------------------------------------- */ | 117 | /* ------------------------------------------------------------------------- */ |
118 | 118 | ||
119 | //FIXME: the default color table is in session.C now. | 119 | //FIXME: the default color table is in session.C now. |
120 | // We need a way to get rid of this one, here. | 120 | // We need a way to get rid of this one, here. |
121 | static const ColorEntry base_color_table[TABLE_COLORS] = | 121 | static const ColorEntry base_color_table[TABLE_COLORS] = |
122 | // The following are almost IBM standard color codes, with some slight | 122 | // The following are almost IBM standard color codes, with some slight |
123 | // gamma correction for the dim colors to compensate for bright X screens. | 123 | // gamma correction for the dim colors to compensate for bright X screens. |
124 | // It contains the 8 ansiterm/xterm colors in 2 intensities. | 124 | // It contains the 8 ansiterm/xterm colors in 2 intensities. |
125 | { | 125 | { |
126 | // Fixme: could add faint colors here, also. | 126 | // Fixme: could add faint colors here, also. |
127 | // normal | 127 | // normal |
128 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback | 128 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback |
129 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red | 129 | ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red |
130 | ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow | 130 | ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow |
131 | ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta | 131 | ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta |
132 | ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White | 132 | ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White |
133 | // intensiv | 133 | // intensiv |
134 | ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), | 134 | ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), |
135 | ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), | 135 | ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), |
136 | ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), | 136 | ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), |
137 | ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), | 137 | ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), |
138 | ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) | 138 | ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) |
139 | }; | 139 | }; |
140 | 140 | ||
141 | /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) | 141 | /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) |
142 | 142 | ||
143 | Code 0 1 2 3 4 5 6 7 | 143 | Code 0 1 2 3 4 5 6 7 |
144 | ----------- ------- ------- ------- ------- ------- ------- ------- ------- | 144 | ----------- ------- ------- ------- ------- ------- ------- ------- ------- |
145 | ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White | 145 | ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White |
146 | IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White | 146 | IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White |
147 | */ | 147 | */ |
148 | 148 | ||
149 | QColor TEWidget::getDefaultBackColor() | 149 | QColor TEWidget::getDefaultBackColor() |
150 | { | 150 | { |
151 | return color_table[DEFAULT_BACK_COLOR].color; | 151 | return color_table[DEFAULT_BACK_COLOR].color; |
152 | } | 152 | } |
153 | 153 | ||
154 | const ColorEntry* TEWidget::getColorTable() const | 154 | const ColorEntry* TEWidget::getColorTable() const |
155 | { | 155 | { |
156 | return color_table; | 156 | return color_table; |
157 | } | 157 | } |
158 | 158 | ||
159 | const ColorEntry* TEWidget::getdefaultColorTable() const | 159 | const ColorEntry* TEWidget::getdefaultColorTable() const |
160 | { | 160 | { |
161 | return base_color_table; | 161 | return base_color_table; |
162 | } | 162 | } |
163 | 163 | ||
164 | 164 | ||
165 | const QPixmap *TEWidget::backgroundPixmap() | 165 | const QPixmap *TEWidget::backgroundPixmap() |
166 | { | 166 | { |
167 | static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); | 167 | static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); |
168 | const QPixmap *pm = bg; | 168 | const QPixmap *pm = bg; |
169 | return pm; | 169 | return pm; |
170 | } | 170 | } |
171 | 171 | ||
172 | void TEWidget::setColorTable(const ColorEntry table[]) | 172 | void TEWidget::setColorTable(const ColorEntry table[]) |
173 | { | 173 | { |
174 | for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; | 174 | for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; |
175 | 175 | ||
176 | const QPixmap* pm = backgroundPixmap(); | 176 | const QPixmap* pm = backgroundPixmap(); |
177 | if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); | 177 | if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); |
178 | update(); | 178 | update(); |
179 | } | 179 | } |
180 | 180 | ||
181 | //FIXME: add backgroundPixmapChanged. | 181 | //FIXME: add backgroundPixmapChanged. |
182 | 182 | ||
183 | /* ------------------------------------------------------------------------- */ | 183 | /* ------------------------------------------------------------------------- */ |
184 | /* */ | 184 | /* */ |
185 | /* Font */ | 185 | /* Font */ |
186 | /* */ | 186 | /* */ |
187 | /* ------------------------------------------------------------------------- */ | 187 | /* ------------------------------------------------------------------------- */ |
188 | 188 | ||
189 | /* | 189 | /* |
190 | The VT100 has 32 special graphical characters. The usual vt100 extended | 190 | The VT100 has 32 special graphical characters. The usual vt100 extended |
191 | xterm fonts have these at 0x00..0x1f. | 191 | xterm fonts have these at 0x00..0x1f. |
192 | 192 | ||
193 | QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals | 193 | QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals |
194 | come in here as proper unicode characters. | 194 | come in here as proper unicode characters. |
195 | 195 | ||
196 | We treat non-iso10646 fonts as VT100 extended and do the requiered mapping | 196 | We treat non-iso10646 fonts as VT100 extended and do the requiered mapping |
197 | from unicode to 0x00..0x1f. The remaining translation is then left to the | 197 | from unicode to 0x00..0x1f. The remaining translation is then left to the |
198 | QCodec. | 198 | QCodec. |
199 | */ | 199 | */ |
200 | 200 | ||
201 | // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. | 201 | // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. |
202 | 202 | ||
203 | unsigned short vt100_graphics[32] = | 203 | unsigned short vt100_graphics[32] = |
204 | { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 | 204 | { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 |
205 | 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, | 205 | 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, |
206 | 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, | 206 | 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, |
207 | 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, | 207 | 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, |
208 | 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 | 208 | 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 |
209 | }; | 209 | }; |
210 | 210 | ||
211 | static QChar vt100extended(QChar c) | 211 | static QChar vt100extended(QChar c) |
212 | { | 212 | { |
213 | switch (c.unicode()) | 213 | switch (c.unicode()) |
214 | { | 214 | { |
215 | case 0x25c6 : return 1; | 215 | case 0x25c6 : return 1; |
216 | case 0x2592 : return 2; | 216 | case 0x2592 : return 2; |
217 | case 0x2409 : return 3; | 217 | case 0x2409 : return 3; |
218 | case 0x240c : return 4; | 218 | case 0x240c : return 4; |
219 | case 0x240d : return 5; | 219 | case 0x240d : return 5; |
220 | case 0x240a : return 6; | 220 | case 0x240a : return 6; |
221 | case 0x00b0 : return 7; | 221 | case 0x00b0 : return 7; |
222 | case 0x00b1 : return 8; | 222 | case 0x00b1 : return 8; |
223 | case 0x2424 : return 9; | 223 | case 0x2424 : return 9; |
224 | case 0x240b : return 10; | 224 | case 0x240b : return 10; |
225 | case 0x2518 : return 11; | 225 | case 0x2518 : return 11; |
226 | case 0x2510 : return 12; | 226 | case 0x2510 : return 12; |
227 | case 0x250c : return 13; | 227 | case 0x250c : return 13; |
228 | case 0x2514 : return 14; | 228 | case 0x2514 : return 14; |
229 | case 0x253c : return 15; | 229 | case 0x253c : return 15; |
230 | case 0xf800 : return 16; | 230 | case 0xf800 : return 16; |
231 | case 0xf801 : return 17; | 231 | case 0xf801 : return 17; |
232 | case 0x2500 : return 18; | 232 | case 0x2500 : return 18; |
233 | case 0xf803 : return 19; | 233 | case 0xf803 : return 19; |
234 | case 0xf804 : return 20; | 234 | case 0xf804 : return 20; |
235 | case 0x251c : return 21; | 235 | case 0x251c : return 21; |
236 | case 0x2524 : return 22; | 236 | case 0x2524 : return 22; |
237 | case 0x2534 : return 23; | 237 | case 0x2534 : return 23; |
238 | case 0x252c : return 24; | 238 | case 0x252c : return 24; |
239 | case 0x2502 : return 25; | 239 | case 0x2502 : return 25; |
240 | case 0x2264 : return 26; | 240 | case 0x2264 : return 26; |
241 | case 0x2265 : return 27; | 241 | case 0x2265 : return 27; |
242 | case 0x03c0 : return 28; | 242 | case 0x03c0 : return 28; |
243 | case 0x2260 : return 29; | 243 | case 0x2260 : return 29; |
244 | case 0x00a3 : return 30; | 244 | case 0x00a3 : return 30; |
245 | case 0x00b7 : return 31; | 245 | case 0x00b7 : return 31; |
246 | } | 246 | } |
247 | return c; | 247 | return c; |
248 | } | 248 | } |
249 | 249 | ||
250 | static QChar identicalMap(QChar c) | 250 | static QChar identicalMap(QChar c) |
251 | { | 251 | { |
252 | return c; | 252 | return c; |
253 | } | 253 | } |
254 | 254 | ||
255 | void TEWidget::fontChange(const QFont &) | 255 | void TEWidget::fontChange(const QFont &) |
256 | { | 256 | { |
257 | QFontMetrics fm(font()); | 257 | QFontMetrics fm(font()); |
258 | font_h = fm.height(); | 258 | font_h = fm.height(); |
259 | font_w = fm.maxWidth(); | 259 | font_w = fm.maxWidth(); |
260 | font_a = fm.ascent(); | 260 | font_a = fm.ascent(); |
261 | //printf("font_h: %d\n",font_h); | 261 | //printf("font_h: %d\n",font_h); |
262 | //printf("font_w: %d\n",font_w); | 262 | //printf("font_w: %d\n",font_w); |
263 | //printf("font_a: %d\n",font_a); | 263 | //printf("font_a: %d\n",font_a); |
264 | //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); | 264 | //printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); |
265 | //printf("rawname: %s\n",font().rawName().ascii()); | 265 | //printf("rawname: %s\n",font().rawName().ascii()); |
266 | fontMap = | 266 | fontMap = |
267 | #if QT_VERSION < 300 | 267 | #if QT_VERSION < 0x030000 |
268 | strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") | 268 | strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") |
269 | ? vt100extended | 269 | ? vt100extended |
270 | : | 270 | : |
271 | #endif | 271 | #endif |
272 | identicalMap; | 272 | identicalMap; |
273 | propagateSize(); | 273 | propagateSize(); |
274 | update(); | 274 | update(); |
275 | } | 275 | } |
276 | 276 | ||
277 | void TEWidget::setVTFont(const QFont& f) | 277 | void TEWidget::setVTFont(const QFont& f) |
278 | { | 278 | { |
279 | QFrame::setFont(f); | 279 | QFrame::setFont(f); |
280 | } | 280 | } |
281 | 281 | ||
282 | QFont TEWidget::getVTFont() { | 282 | QFont TEWidget::getVTFont() { |
283 | return font(); | 283 | return font(); |
284 | } | 284 | } |
285 | 285 | ||
286 | void TEWidget::setFont(const QFont &) | 286 | void TEWidget::setFont(const QFont &) |
287 | { | 287 | { |
288 | // ignore font change request if not coming from konsole itself | 288 | // ignore font change request if not coming from konsole itself |
289 | } | 289 | } |
290 | 290 | ||
291 | /* ------------------------------------------------------------------------- */ | 291 | /* ------------------------------------------------------------------------- */ |
292 | /* */ | 292 | /* */ |
293 | /* Constructor / Destructor */ | 293 | /* Constructor / Destructor */ |
294 | /* */ | 294 | /* */ |
295 | /* ----------------------------------------------------------------------- */ | 295 | /* ----------------------------------------------------------------------- */ |
296 | 296 | ||
297 | 297 | ||
298 | 298 | ||
299 | TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name) | 299 | TEWidget::TEWidget(QWidget *parent, const char *name) : QFrame(parent,name) |
300 | { | 300 | { |
301 | #ifndef QT_NO_CLIPBOARD | 301 | #ifndef QT_NO_CLIPBOARD |
302 | cb = QApplication::clipboard(); | 302 | cb = QApplication::clipboard(); |
303 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), | 303 | QObject::connect( (QObject*)cb, SIGNAL(dataChanged()), |
304 | this, SLOT(onClearSelection()) ); | 304 | this, SLOT(onClearSelection()) ); |
305 | #endif | 305 | #endif |
306 | 306 | ||
307 | 307 | ||
308 | scrollbar = new QScrollBar( this ); | 308 | scrollbar = new QScrollBar( this ); |
309 | scrollbar->setCursor( arrowCursor ); | 309 | scrollbar->setCursor( arrowCursor ); |
310 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); | 310 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); |
311 | 311 | ||
312 | hscrollbar = new QScrollBar( Qt::Horizontal, this ); | 312 | hscrollbar = new QScrollBar( Qt::Horizontal, this ); |
313 | hscrollbar->setCursor( arrowCursor ); | 313 | hscrollbar->setCursor( arrowCursor ); |
314 | connect(hscrollbar, SIGNAL(valueChanged(int)), this, SLOT(hscrollChanged(int))); | 314 | connect(hscrollbar, SIGNAL(valueChanged(int)), this, SLOT(hscrollChanged(int))); |
315 | 315 | ||
316 | m_cornerButton = new QPushButton( this ); | 316 | m_cornerButton = new QPushButton( this ); |
317 | m_cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) ); | 317 | m_cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) ); |
318 | m_cornerButton->setMaximumSize( 14, 14 ); | 318 | m_cornerButton->setMaximumSize( 14, 14 ); |
319 | m_cornerButton->hide(); | 319 | m_cornerButton->hide(); |
320 | 320 | ||
321 | Config cfg("Konsole"); | 321 | Config cfg("Konsole"); |
322 | cfg.setGroup("ScrollBar"); | 322 | cfg.setGroup("ScrollBar"); |
323 | switch( cfg.readNumEntry("Position",2)){ | 323 | switch( cfg.readNumEntry("Position",2)){ |
324 | case 0: | 324 | case 0: |
325 | scrollLoc = SCRNONE; | 325 | scrollLoc = SCRNONE; |
326 | break; | 326 | break; |
327 | case 1: | 327 | case 1: |
328 | scrollLoc = SCRLEFT; | 328 | scrollLoc = SCRLEFT; |
329 | break; | 329 | break; |
330 | case 2: | 330 | case 2: |
331 | scrollLoc = SCRRIGHT; | 331 | scrollLoc = SCRRIGHT; |
332 | break; | 332 | break; |
333 | }; | 333 | }; |
334 | 334 | ||
335 | blinkT = new QTimer(this); | 335 | blinkT = new QTimer(this); |
336 | connect(blinkT, SIGNAL(timeout()), this, SLOT(blinkEvent())); | 336 | connect(blinkT, SIGNAL(timeout()), this, SLOT(blinkEvent())); |
337 | // blinking = FALSE; | 337 | // blinking = FALSE; |
338 | blinking = TRUE; | 338 | blinking = TRUE; |
339 | 339 | ||
340 | resizing = FALSE; | 340 | resizing = FALSE; |
341 | actSel = 0; | 341 | actSel = 0; |
342 | image = 0; | 342 | image = 0; |
343 | lines = 1; | 343 | lines = 1; |
344 | columns = 1; | 344 | columns = 1; |
345 | font_w = 1; | 345 | font_w = 1; |
346 | font_h = 1; | 346 | font_h = 1; |
347 | font_a = 1; | 347 | font_a = 1; |
348 | word_selection_mode = FALSE; | 348 | word_selection_mode = FALSE; |
349 | vcolumns = 0; | 349 | vcolumns = 0; |
350 | hposition = 0; | 350 | hposition = 0; |
351 | 351 | ||
352 | setMouseMarks(TRUE); | 352 | setMouseMarks(TRUE); |
353 | setVTFont( QFont("fixed") ); | 353 | setVTFont( QFont("fixed") ); |
354 | setColorTable(base_color_table); // init color table | 354 | setColorTable(base_color_table); // init color table |
355 | 355 | ||
356 | qApp->installEventFilter( this ); //FIXME: see below | 356 | qApp->installEventFilter( this ); //FIXME: see below |
357 | // KCursor::setAutoHideCursor( this, true ); | 357 | // KCursor::setAutoHideCursor( this, true ); |
358 | 358 | ||
359 | // Init DnD //////////////////////////////////////////////////////////////// | 359 | // Init DnD //////////////////////////////////////////////////////////////// |
360 | currentSession = NULL; | 360 | currentSession = NULL; |
361 | // setAcceptDrops(true); // attempt | 361 | // setAcceptDrops(true); // attempt |
362 | // m_drop = new QPopupMenu(this); | 362 | // m_drop = new QPopupMenu(this); |
363 | // m_drop->insertItem( QString("Paste"), 0); | 363 | // m_drop->insertItem( QString("Paste"), 0); |
364 | // m_drop->insertItem( QString("cd"), 1); | 364 | // m_drop->insertItem( QString("cd"), 1); |
365 | // connect(m_drop, SIGNAL(activated(int)), SLOT(drop_menu_activated(int))); | 365 | // connect(m_drop, SIGNAL(activated(int)), SLOT(drop_menu_activated(int))); |
366 | 366 | ||
367 | // we need focus so that the auto-hide cursor feature works | 367 | // we need focus so that the auto-hide cursor feature works |
368 | setFocus(); | 368 | setFocus(); |
369 | setFocusPolicy( WheelFocus ); | 369 | setFocusPolicy( WheelFocus ); |
370 | } | 370 | } |
371 | 371 | ||
372 | //FIXME: make proper destructor | 372 | //FIXME: make proper destructor |
373 | // Here's a start (David) | 373 | // Here's a start (David) |
374 | TEWidget::~TEWidget() | 374 | TEWidget::~TEWidget() |
375 | { | 375 | { |
376 | qApp->removeEventFilter( this ); | 376 | qApp->removeEventFilter( this ); |
377 | if (image) free(image); | 377 | if (image) free(image); |
378 | } | 378 | } |
379 | 379 | ||
380 | /* ------------------------------------------------------------------------- */ | 380 | /* ------------------------------------------------------------------------- */ |
381 | /* */ | 381 | /* */ |
382 | /* Display Operations */ | 382 | /* Display Operations */ |
383 | /* */ | 383 | /* */ |
384 | /* ------------------------------------------------------------------------- */ | 384 | /* ------------------------------------------------------------------------- */ |
385 | 385 | ||
386 | /*! | 386 | /*! |
387 | attributed string draw primitive | 387 | attributed string draw primitive |
388 | */ | 388 | */ |
389 | 389 | ||
390 | void TEWidget::drawAttrStr(QPainter &paint, QRect rect, | 390 | void TEWidget::drawAttrStr(QPainter &paint, QRect rect, |
391 | QString& str, ca attr, BOOL pm, BOOL clear) | 391 | QString& str, ca attr, BOOL pm, BOOL clear) |
392 | { | 392 | { |
393 | if (pm && color_table[attr.b].transparent) | 393 | if (pm && color_table[attr.b].transparent) |
394 | { | 394 | { |
395 | paint.setBackgroundMode( TransparentMode ); | 395 | paint.setBackgroundMode( TransparentMode ); |
396 | if (clear) erase(rect); | 396 | if (clear) erase(rect); |
397 | } | 397 | } |
398 | else | 398 | else |
399 | { | 399 | { |
400 | if (blinking) | 400 | if (blinking) |
401 | paint.fillRect(rect, color_table[attr.b].color); | 401 | paint.fillRect(rect, color_table[attr.b].color); |
402 | else | 402 | else |
403 | { | 403 | { |
404 | paint.setBackgroundMode( OpaqueMode ); | 404 | paint.setBackgroundMode( OpaqueMode ); |
405 | paint.setBackgroundColor( color_table[attr.b].color ); | 405 | paint.setBackgroundColor( color_table[attr.b].color ); |
406 | } | 406 | } |
407 | } | 407 | } |
408 | 408 | ||
409 | if (color_table[attr.f].bold) | 409 | if (color_table[attr.f].bold) |
410 | paint.setPen(QColor( 0x8F, 0x00, 0x00 )); | 410 | paint.setPen(QColor( 0x8F, 0x00, 0x00 )); |
411 | else | 411 | else |
412 | paint.setPen(color_table[attr.f].color); | 412 | paint.setPen(color_table[attr.f].color); |
413 | 413 | ||
414 | paint.drawText(rect.x(),rect.y()+font_a, str); | 414 | paint.drawText(rect.x(),rect.y()+font_a, str); |
415 | 415 | ||
416 | if (attr.r & RE_UNDERLINE) | 416 | if (attr.r & RE_UNDERLINE) |
417 | paint.drawLine(rect.left(), rect.y()+font_a+1, rect.right(),rect.y()+font_a+1 ); | 417 | paint.drawLine(rect.left(), rect.y()+font_a+1, rect.right(),rect.y()+font_a+1 ); |
418 | } | 418 | } |
419 | 419 | ||
420 | /*! | 420 | /*! |
421 | The image can only be set completely. | 421 | The image can only be set completely. |
422 | 422 | ||
423 | The size of the new image may or may not match the size of the widget. | 423 | The size of the new image may or may not match the size of the widget. |
424 | */ | 424 | */ |
425 | 425 | ||
426 | void TEWidget::setImage(const ca* const newimg, int lines, int columns) | 426 | void TEWidget::setImage(const ca* const newimg, int lines, int columns) |
427 | { int y,x,len; | 427 | { int y,x,len; |
428 | const QPixmap* pm = backgroundPixmap(); | 428 | const QPixmap* pm = backgroundPixmap(); |
429 | QPainter paint; | 429 | QPainter paint; |
430 | setUpdatesEnabled(FALSE); | 430 | setUpdatesEnabled(FALSE); |
431 | paint.begin( this ); | 431 | paint.begin( this ); |
432 | HCNT("setImage"); | 432 | HCNT("setImage"); |
433 | 433 | ||
434 | QPoint tL = contentsRect().topLeft(); | 434 | QPoint tL = contentsRect().topLeft(); |
435 | int tLx = tL.x(); | 435 | int tLx = tL.x(); |
436 | int tLy = tL.y(); | 436 | int tLy = tL.y(); |
437 | hasBlinker = FALSE; | 437 | hasBlinker = FALSE; |
438 | 438 | ||
439 | int cf = -1; // undefined | 439 | int cf = -1; // undefined |
440 | int cb = -1; // undefined | 440 | int cb = -1; // undefined |
441 | int cr = -1; // undefined | 441 | int cr = -1; // undefined |
442 | 442 | ||
443 | int lins = QMIN(this->lines, QMAX(0,lines )); | 443 | int lins = QMIN(this->lines, QMAX(0,lines )); |
444 | int cols = QMIN(this->columns,QMAX(0,columns)); | 444 | int cols = QMIN(this->columns,QMAX(0,columns)); |
445 | QChar *disstrU = new QChar[cols]; | 445 | QChar *disstrU = new QChar[cols]; |
446 | 446 | ||
447 | //{ static int cnt = 0; printf("setImage %d\n",cnt++); } | 447 | //{ static int cnt = 0; printf("setImage %d\n",cnt++); } |
448 | for (y = 0; y < lins; y++) | 448 | for (y = 0; y < lins; y++) |
449 | { | 449 | { |
450 | const ca* lcl = &image[y*this->columns]; | 450 | const ca* lcl = &image[y*this->columns]; |
451 | const ca* const ext = &newimg[y*columns]; | 451 | const ca* const ext = &newimg[y*columns]; |
452 | if (!resizing) // not while resizing, we're expecting a paintEvent | 452 | if (!resizing) // not while resizing, we're expecting a paintEvent |
453 | for (x = 0; x < cols; x++) | 453 | for (x = 0; x < cols; x++) |
454 | { | 454 | { |
455 | hasBlinker |= (ext[x].r & RE_BLINK); | 455 | hasBlinker |= (ext[x].r & RE_BLINK); |
456 | if (ext[x] != lcl[x]) | 456 | if (ext[x] != lcl[x]) |
457 | { | 457 | { |
458 | cr = ext[x].r; | 458 | cr = ext[x].r; |
459 | cb = ext[x].b; | 459 | cb = ext[x].b; |
460 | if (ext[x].f != cf) cf = ext[x].f; | 460 | if (ext[x].f != cf) cf = ext[x].f; |
461 | int lln = cols - x; | 461 | int lln = cols - x; |
462 | disstrU[0] = fontMap(ext[x+0].c); | 462 | disstrU[0] = fontMap(ext[x+0].c); |
463 | for (len = 1; len < lln; len++) | 463 | for (len = 1; len < lln; len++) |
464 | { | 464 | { |
465 | if (ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr || | 465 | if (ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr || |
466 | ext[x+len] == lcl[x+len] ) | 466 | ext[x+len] == lcl[x+len] ) |
467 | break; | 467 | break; |
468 | disstrU[len] = fontMap(ext[x+len].c); | 468 | disstrU[len] = fontMap(ext[x+len].c); |
469 | } | 469 | } |
470 | QString unistr(disstrU,len); | 470 | QString unistr(disstrU,len); |
471 | drawAttrStr(paint, | 471 | drawAttrStr(paint, |
472 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), | 472 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), |
473 | unistr, ext[x], pm != NULL, true); | 473 | unistr, ext[x], pm != NULL, true); |
474 | x += len - 1; | 474 | x += len - 1; |
475 | } | 475 | } |
476 | } | 476 | } |
477 | // finally, make `image' become `newimg'. | 477 | // finally, make `image' become `newimg'. |
478 | memcpy((void*)lcl,(const void*)ext,cols*sizeof(ca)); | 478 | memcpy((void*)lcl,(const void*)ext,cols*sizeof(ca)); |
479 | } | 479 | } |
480 | drawFrame( &paint ); | 480 | drawFrame( &paint ); |
481 | paint.end(); | 481 | paint.end(); |
482 | setUpdatesEnabled(TRUE); | 482 | setUpdatesEnabled(TRUE); |
483 | if ( hasBlinker && !blinkT->isActive()) blinkT->start(1000); // 1000 ms | 483 | if ( hasBlinker && !blinkT->isActive()) blinkT->start(1000); // 1000 ms |
484 | if (!hasBlinker && blinkT->isActive()) { blinkT->stop(); blinking = FALSE; } | 484 | if (!hasBlinker && blinkT->isActive()) { blinkT->stop(); blinking = FALSE; } |
485 | delete [] disstrU; | 485 | delete [] disstrU; |
486 | } | 486 | } |
487 | 487 | ||
488 | // paint Event //////////////////////////////////////////////////// | 488 | // paint Event //////////////////////////////////////////////////// |
489 | 489 | ||
490 | /*! | 490 | /*! |
491 | The difference of this routine vs. the `setImage' is, | 491 | The difference of this routine vs. the `setImage' is, |
492 | that the drawing does not include a difference analysis | 492 | that the drawing does not include a difference analysis |
493 | between the old and the new image. Instead, the internal | 493 | between the old and the new image. Instead, the internal |
494 | image is used and the painting bound by the PaintEvent box. | 494 | image is used and the painting bound by the PaintEvent box. |
495 | */ | 495 | */ |
496 | 496 | ||
497 | void TEWidget::paintEvent( QPaintEvent* pe ) | 497 | void TEWidget::paintEvent( QPaintEvent* pe ) |
498 | { | 498 | { |
499 | 499 | ||
500 | //{ static int cnt = 0; printf("paint %d\n",cnt++); } | 500 | //{ static int cnt = 0; printf("paint %d\n",cnt++); } |
501 | const QPixmap* pm = backgroundPixmap(); | 501 | const QPixmap* pm = backgroundPixmap(); |
502 | QPainter paint; | 502 | QPainter paint; |
503 | setUpdatesEnabled(FALSE); | 503 | setUpdatesEnabled(FALSE); |
504 | paint.begin( this ); | 504 | paint.begin( this ); |
505 | paint.setBackgroundMode( TransparentMode ); | 505 | paint.setBackgroundMode( TransparentMode ); |
506 | HCNT("paintEvent"); | 506 | HCNT("paintEvent"); |
507 | 507 | ||
508 | // Note that the actual widget size can be slightly larger | 508 | // Note that the actual widget size can be slightly larger |
509 | // that the image (the size is truncated towards the smaller | 509 | // that the image (the size is truncated towards the smaller |
510 | // number of characters in `resizeEvent'. The paint rectangle | 510 | // number of characters in `resizeEvent'. The paint rectangle |
511 | // can thus be larger than the image, but less then the size | 511 | // can thus be larger than the image, but less then the size |
512 | // of one character. | 512 | // of one character. |
513 | 513 | ||
514 | QRect rect = pe->rect().intersect(contentsRect()); | 514 | QRect rect = pe->rect().intersect(contentsRect()); |
515 | 515 | ||
516 | QPoint tL = contentsRect().topLeft(); | 516 | QPoint tL = contentsRect().topLeft(); |
517 | int tLx = tL.x(); | 517 | int tLx = tL.x(); |
518 | int tLy = tL.y(); | 518 | int tLy = tL.y(); |
519 | 519 | ||
520 | int lux = QMIN(columns-1, QMAX(0,(rect.left() - tLx - blX ) / font_w)); | 520 | int lux = QMIN(columns-1, QMAX(0,(rect.left() - tLx - blX ) / font_w)); |
521 | int luy = QMIN(lines-1, QMAX(0,(rect.top() - tLy - bY ) / font_h)); | 521 | int luy = QMIN(lines-1, QMAX(0,(rect.top() - tLy - bY ) / font_h)); |
522 | int rlx = QMIN(columns-1, QMAX(0,(rect.right() - tLx - blX ) / font_w)); | 522 | int rlx = QMIN(columns-1, QMAX(0,(rect.right() - tLx - blX ) / font_w)); |
523 | int rly = QMIN(lines-1, QMAX(0,(rect.bottom() - tLy - bY ) / font_h)); | 523 | int rly = QMIN(lines-1, QMAX(0,(rect.bottom() - tLy - bY ) / font_h)); |
524 | 524 | ||
525 | /* | 525 | /* |
526 | printf("paintEvent: %d..%d, %d..%d (%d..%d, %d..%d)\n",lux,rlx,luy,rly, | 526 | printf("paintEvent: %d..%d, %d..%d (%d..%d, %d..%d)\n",lux,rlx,luy,rly, |
527 | rect.left(), rect.right(), rect.top(), rect.bottom()); | 527 | rect.left(), rect.right(), rect.top(), rect.bottom()); |
528 | */ | 528 | */ |
529 | 529 | ||
530 | // if (pm != NULL && color_table[image->b].transparent) | 530 | // if (pm != NULL && color_table[image->b].transparent) |
531 | // erase(rect); | 531 | // erase(rect); |
532 | // BL: I have no idea why we need this, and it breaks the refresh. | 532 | // BL: I have no idea why we need this, and it breaks the refresh. |
533 | 533 | ||
534 | QChar *disstrU = new QChar[columns]; | 534 | QChar *disstrU = new QChar[columns]; |
535 | for (int y = luy; y <= rly; y++) | 535 | for (int y = luy; y <= rly; y++) |
536 | for (int x = lux; x <= rlx; x++) | 536 | for (int x = lux; x <= rlx; x++) |
537 | { | 537 | { |
538 | int len = 1; | 538 | int len = 1; |
539 | disstrU[0] = fontMap(image[loc(x,y)].c); | 539 | disstrU[0] = fontMap(image[loc(x,y)].c); |
540 | int cf = image[loc(x,y)].f; | 540 | int cf = image[loc(x,y)].f; |
541 | int cb = image[loc(x,y)].b; | 541 | int cb = image[loc(x,y)].b; |
542 | int cr = image[loc(x,y)].r; | 542 | int cr = image[loc(x,y)].r; |
543 | while (x+len <= rlx && | 543 | while (x+len <= rlx && |
544 | image[loc(x+len,y)].f == cf && | 544 | image[loc(x+len,y)].f == cf && |
545 | image[loc(x+len,y)].b == cb && | 545 | image[loc(x+len,y)].b == cb && |
546 | image[loc(x+len,y)].r == cr ) | 546 | image[loc(x+len,y)].r == cr ) |
547 | { | 547 | { |
548 | disstrU[len] = fontMap(image[loc(x+len,y)].c); | 548 | disstrU[len] = fontMap(image[loc(x+len,y)].c); |
549 | len += 1; | 549 | len += 1; |
550 | } | 550 | } |
551 | QString unistr(disstrU,len); | 551 | QString unistr(disstrU,len); |
552 | drawAttrStr(paint, | 552 | drawAttrStr(paint, |
553 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), | 553 | QRect(blX+tLx+font_w*x,bY+tLy+font_h*y,font_w*len,font_h), |
554 | unistr, image[loc(x,y)], pm != NULL, false); | 554 | unistr, image[loc(x,y)], pm != NULL, false); |
555 | x += len - 1; | 555 | x += len - 1; |
556 | } | 556 | } |
557 | delete [] disstrU; | 557 | delete [] disstrU; |
558 | drawFrame( &paint ); | 558 | drawFrame( &paint ); |
559 | paint.end(); | 559 | paint.end(); |
560 | setUpdatesEnabled(TRUE); | 560 | setUpdatesEnabled(TRUE); |
561 | } | 561 | } |
562 | 562 | ||
563 | void TEWidget::blinkEvent() | 563 | void TEWidget::blinkEvent() |
564 | { | 564 | { |
565 | blinking = !blinking; | 565 | blinking = !blinking; |
566 | repaint(FALSE); | 566 | repaint(FALSE); |
567 | } | 567 | } |
568 | 568 | ||
569 | /* ------------------------------------------------------------------------- */ | 569 | /* ------------------------------------------------------------------------- */ |
570 | /* */ | 570 | /* */ |
571 | /* Resizing */ | 571 | /* Resizing */ |
572 | /* */ | 572 | /* */ |
573 | /* ------------------------------------------------------------------------- */ | 573 | /* ------------------------------------------------------------------------- */ |
574 | 574 | ||
575 | void TEWidget::resizeEvent(QResizeEvent* ev) | 575 | void TEWidget::resizeEvent(QResizeEvent* ev) |
576 | { | 576 | { |
577 | // printf("resize: %d,%d\n",ev->size().width(),ev->size().height()); | 577 | // printf("resize: %d,%d\n",ev->size().width(),ev->size().height()); |
578 | //printf("approx: %d,%d\n",ev->size().width()/font_w,ev->size().height()/font_h); | 578 | //printf("approx: %d,%d\n",ev->size().width()/font_w,ev->size().height()/font_h); |
579 | //printf("leaves: %d,%d\n",ev->size().width()%font_w,ev->size().height()%font_h); | 579 | //printf("leaves: %d,%d\n",ev->size().width()%font_w,ev->size().height()%font_h); |
580 | //printf("curren: %d,%d\n",width(),height()); | 580 | //printf("curren: %d,%d\n",width(),height()); |
581 | HCNT("resizeEvent"); | 581 | HCNT("resizeEvent"); |
582 | 582 | ||
583 | // see comment in `paintEvent' concerning the rounding. | 583 | // see comment in `paintEvent' concerning the rounding. |
584 | //FIXME: could make a routine here; check width(),height() | 584 | //FIXME: could make a routine here; check width(),height() |
585 | assert(ev->size().width() == width()); | 585 | assert(ev->size().width() == width()); |
586 | assert(ev->size().height() == height()); | 586 | assert(ev->size().height() == height()); |
587 | 587 | ||
588 | propagateSize(); | 588 | propagateSize(); |
589 | } | 589 | } |
590 | 590 | ||
591 | void TEWidget::propagateSize() | 591 | void TEWidget::propagateSize() |
592 | { | 592 | { |
593 | ca* oldimg = image; | 593 | ca* oldimg = image; |
594 | int oldlin = lines; | 594 | int oldlin = lines; |
595 | int oldcol = columns; | 595 | int oldcol = columns; |
596 | makeImage(); | 596 | makeImage(); |
597 | // we copy the old image to reduce flicker | 597 | // we copy the old image to reduce flicker |
598 | int lins = QMIN(oldlin,lines); | 598 | int lins = QMIN(oldlin,lines); |
599 | int cols = QMIN(oldcol,columns); | 599 | int cols = QMIN(oldcol,columns); |
600 | if (oldimg) | 600 | if (oldimg) |
601 | { | 601 | { |
602 | for (int lin = 0; lin < lins; lin++) | 602 | for (int lin = 0; lin < lins; lin++) |
603 | memcpy((void*)&image[columns*lin], | 603 | memcpy((void*)&image[columns*lin], |
604 | (void*)&oldimg[oldcol*lin],cols*sizeof(ca)); | 604 | (void*)&oldimg[oldcol*lin],cols*sizeof(ca)); |
605 | free(oldimg); //FIXME: try new,delete | 605 | free(oldimg); //FIXME: try new,delete |
606 | } | 606 | } |
607 | else | 607 | else |
608 | clearImage(); | 608 | clearImage(); |
609 | 609 | ||
610 | //NOTE: control flows from the back through the chest right into the eye. | 610 | //NOTE: control flows from the back through the chest right into the eye. |
611 | // `emu' will call back via `setImage'. | 611 | // `emu' will call back via `setImage'. |
612 | 612 | ||
613 | resizing = TRUE; | 613 | resizing = TRUE; |
614 | emit changedImageSizeSignal(lines, columns); // expose resizeEvent | 614 | emit changedImageSizeSignal(lines, columns); // expose resizeEvent |
615 | resizing = FALSE; | 615 | resizing = FALSE; |
616 | } | 616 | } |
617 | 617 | ||
618 | /* ------------------------------------------------------------------------- */ | 618 | /* ------------------------------------------------------------------------- */ |
619 | /* */ | 619 | /* */ |
620 | /* Scrollbar */ | 620 | /* Scrollbar */ |
621 | /* */ | 621 | /* */ |
622 | /* ------------------------------------------------------------------------- */ | 622 | /* ------------------------------------------------------------------------- */ |
623 | 623 | ||
624 | void TEWidget::scrollChanged(int) | 624 | void TEWidget::scrollChanged(int) |
625 | { | 625 | { |
626 | emit changedHistoryCursor(scrollbar->value()); //expose | 626 | emit changedHistoryCursor(scrollbar->value()); //expose |
627 | } | 627 | } |
628 | 628 | ||
629 | void TEWidget::hscrollChanged(int loc) | 629 | void TEWidget::hscrollChanged(int loc) |
630 | { | 630 | { |
631 | hposition = loc; | 631 | hposition = loc; |
632 | propagateSize(); | 632 | propagateSize(); |
633 | update(); | 633 | update(); |
634 | } | 634 | } |
635 | 635 | ||
636 | void TEWidget::setScroll(int cursor, int slines) | 636 | void TEWidget::setScroll(int cursor, int slines) |
637 | { | 637 | { |
638 | disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); | 638 | disconnect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); |
639 | scrollbar->setRange(0,slines); | 639 | scrollbar->setRange(0,slines); |
640 | scrollbar->setSteps(1,lines); | 640 | scrollbar->setSteps(1,lines); |
641 | scrollbar->setValue(cursor); | 641 | scrollbar->setValue(cursor); |
642 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); | 642 | connect(scrollbar, SIGNAL(valueChanged(int)), this, SLOT(scrollChanged(int))); |
643 | } | 643 | } |
644 | 644 | ||
645 | void TEWidget::setScrollbarLocation(int loc) | 645 | void TEWidget::setScrollbarLocation(int loc) |
646 | { | 646 | { |
647 | if (scrollLoc == loc) return; // quickly | 647 | if (scrollLoc == loc) return; // quickly |
648 | scrollLoc = loc; | 648 | scrollLoc = loc; |
649 | propagateSize(); | 649 | propagateSize(); |
650 | update(); | 650 | update(); |
651 | } | 651 | } |
diff --git a/noncore/apps/tinykate/libkate/qt3back/qregexp3.cpp b/noncore/apps/tinykate/libkate/qt3back/qregexp3.cpp index 78635b2..7b30b1a 100644 --- a/noncore/apps/tinykate/libkate/qt3back/qregexp3.cpp +++ b/noncore/apps/tinykate/libkate/qt3back/qregexp3.cpp | |||
@@ -1,425 +1,425 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | ** $Id$ | 2 | ** $Id$ |
3 | ** | 3 | ** |
4 | ** Implementation of QRegExp class | 4 | ** Implementation of QRegExp class |
5 | ** | 5 | ** |
6 | ** Created : 950126 | 6 | ** Created : 950126 |
7 | ** | 7 | ** |
8 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. | 8 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. |
9 | ** | 9 | ** |
10 | ** This file is part of the tools module of the Qt GUI Toolkit. | 10 | ** This file is part of the tools module of the Qt GUI Toolkit. |
11 | ** | 11 | ** |
12 | ** This file may be distributed under the terms of the Q Public License | 12 | ** This file may be distributed under the terms of the Q Public License |
13 | ** as defined by Trolltech AS of Norway and appearing in the file | 13 | ** as defined by Trolltech AS of Norway and appearing in the file |
14 | ** LICENSE.QPL included in the packaging of this file. | 14 | ** LICENSE.QPL included in the packaging of this file. |
15 | ** | 15 | ** |
16 | ** This file may be distributed and/or modified under the terms of the | 16 | ** This file may be distributed and/or modified under the terms of the |
17 | ** GNU General Public License version 2 as published by the Free Software | 17 | ** GNU General Public License version 2 as published by the Free Software |
18 | ** Foundation and appearing in the file LICENSE.GPL included in the | 18 | ** Foundation and appearing in the file LICENSE.GPL included in the |
19 | ** packaging of this file. | 19 | ** packaging of this file. |
20 | ** | 20 | ** |
21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition | 21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition |
22 | ** licenses may use this file in accordance with the Qt Commercial License | 22 | ** licenses may use this file in accordance with the Qt Commercial License |
23 | ** Agreement provided with the Software. | 23 | ** Agreement provided with the Software. |
24 | ** | 24 | ** |
25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
27 | ** | 27 | ** |
28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for | 28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for |
29 | ** information about Qt Commercial License Agreements. | 29 | ** information about Qt Commercial License Agreements. |
30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. | 30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. |
31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
32 | ** | 32 | ** |
33 | ** Contact info@trolltech.com if any conditions of this licensing are | 33 | ** Contact info@trolltech.com if any conditions of this licensing are |
34 | ** not clear to you. | 34 | ** not clear to you. |
35 | ** | 35 | ** |
36 | **********************************************************************/ | 36 | **********************************************************************/ |
37 | #if QT_VERSION >=300 | 37 | #if QT_VERSION >= 0x030000 |
38 | #error QRegExp3 is now in QT 3 use QRegExp instead | 38 | #error QRegExp3 is now in QT 3 use QRegExp instead |
39 | #endif | 39 | #endif |
40 | 40 | ||
41 | #if QT_VERSION < 300 | 41 | #if QT_VERSION < 0x030000 |
42 | #include "./qregexp3.h" | 42 | #include "./qregexp3.h" |
43 | #else | 43 | #else |
44 | #include "qregexp.h" | 44 | #include "qregexp.h" |
45 | #endif | 45 | #endif |
46 | 46 | ||
47 | /* OPIE */ | 47 | /* OPIE */ |
48 | #include <opie2/odebug.h> | 48 | #include <opie2/odebug.h> |
49 | 49 | ||
50 | /* QT */ | 50 | /* QT */ |
51 | #include <qarray.h> | 51 | #include <qarray.h> |
52 | #include <qbitarray.h> | 52 | #include <qbitarray.h> |
53 | #include <qcache.h> | 53 | #include <qcache.h> |
54 | #include <qintdict.h> | 54 | #include <qintdict.h> |
55 | #include <qmap.h> | 55 | #include <qmap.h> |
56 | #include <qstring.h> | 56 | #include <qstring.h> |
57 | #include <qtl.h> | 57 | #include <qtl.h> |
58 | #include <qvector.h> | 58 | #include <qvector.h> |
59 | 59 | ||
60 | /* STD */ | 60 | /* STD */ |
61 | #include <limits.h> | 61 | #include <limits.h> |
62 | 62 | ||
63 | /* | 63 | /* |
64 | WARNING! Be sure to read qregexp.tex before modifying this file. | 64 | WARNING! Be sure to read qregexp.tex before modifying this file. |
65 | */ | 65 | */ |
66 | 66 | ||
67 | /*! | 67 | /*! |
68 | \class QRegExp3 qregexp.h | 68 | \class QRegExp3 qregexp.h |
69 | 69 | ||
70 | \brief The QRegExp class provides pattern matching using regular expressions. | 70 | \brief The QRegExp class provides pattern matching using regular expressions. |
71 | 71 | ||
72 | \ingroup tools | 72 | \ingroup tools |
73 | \ingroup misc | 73 | \ingroup misc |
74 | \ingroup shared | 74 | \ingroup shared |
75 | 75 | ||
76 | 76 | ||
77 | Regular expressions, "regexps", provide a way to find patterns | 77 | Regular expressions, "regexps", provide a way to find patterns |
78 | within text. This is useful in many contexts, for example: | 78 | within text. This is useful in many contexts, for example: |
79 | 79 | ||
80 | <ol> | 80 | <ol> |
81 | <li>\e Validation. A regexp can be used to check whether a piece of | 81 | <li>\e Validation. A regexp can be used to check whether a piece of |
82 | text meets some criteria, e.g. is an integer or contains no | 82 | text meets some criteria, e.g. is an integer or contains no |
83 | whitespace. | 83 | whitespace. |
84 | <li>\e Searching. Regexps provide a much more powerful means of | 84 | <li>\e Searching. Regexps provide a much more powerful means of |
85 | searching text than simple string matching does. For example we can | 85 | searching text than simple string matching does. For example we can |
86 | create a regexp which says "find one of the words 'mail', 'letter' | 86 | create a regexp which says "find one of the words 'mail', 'letter' |
87 | or 'correspondence' but not any of the words 'email', 'mailman' | 87 | or 'correspondence' but not any of the words 'email', 'mailman' |
88 | 'mailer', 'letterbox' etc." | 88 | 'mailer', 'letterbox' etc." |
89 | <li><em>Search and Replace.</em> A regexp can be used to replace a | 89 | <li><em>Search and Replace.</em> A regexp can be used to replace a |
90 | pattern with a piece of text, for example replace all occurrences of | 90 | pattern with a piece of text, for example replace all occurrences of |
91 | '&' with '\&' except where the '&' is already followed by | 91 | '&' with '\&' except where the '&' is already followed by |
92 | 'amp;'. | 92 | 'amp;'. |
93 | <li><em>String Splitting.</em> A regexp can be used to identify | 93 | <li><em>String Splitting.</em> A regexp can be used to identify |
94 | where a string should be split into its component fields, e.g. | 94 | where a string should be split into its component fields, e.g. |
95 | splitting tab delimited strings. | 95 | splitting tab delimited strings. |
96 | </ol> | 96 | </ol> |
97 | 97 | ||
98 | We present a very brief introduction to regexps, a description of | 98 | We present a very brief introduction to regexps, a description of |
99 | Qt's regexp language, some code examples, and finally the function | 99 | Qt's regexp language, some code examples, and finally the function |
100 | documentation. QRegExp is modelled on Perl's regexp engine and fully | 100 | documentation. QRegExp is modelled on Perl's regexp engine and fully |
101 | supports Unicode. QRegExp may also be used in the weaker 'wildcard' | 101 | supports Unicode. QRegExp may also be used in the weaker 'wildcard' |
102 | (globbing) mode which works in a similar way to command shells. A | 102 | (globbing) mode which works in a similar way to command shells. A |
103 | good text on regexps is <i>Mastering Regular Expressions: Powerful | 103 | good text on regexps is <i>Mastering Regular Expressions: Powerful |
104 | Techniques for Perl and Other Tools</i> by Jeffrey E. Friedl, ISBN | 104 | Techniques for Perl and Other Tools</i> by Jeffrey E. Friedl, ISBN |
105 | 1565922573. | 105 | 1565922573. |
106 | 106 | ||
107 | Experienced regexp users may prefer to skip the introduction and | 107 | Experienced regexp users may prefer to skip the introduction and |
108 | go directly to the relevant information: | 108 | go directly to the relevant information: |
109 | 109 | ||
110 | <ul> | 110 | <ul> |
111 | <li><a href="#characters-and-abbreviations-for-sets-of-characters"> | 111 | <li><a href="#characters-and-abbreviations-for-sets-of-characters"> |
112 | Characters and Abbreviations for Sets of Characters</a> | 112 | Characters and Abbreviations for Sets of Characters</a> |
113 | <li><a href="#sets-of-characters">Sets of Characters</a> | 113 | <li><a href="#sets-of-characters">Sets of Characters</a> |
114 | <li><a href="#quantifiers">Quantifiers</a> | 114 | <li><a href="#quantifiers">Quantifiers</a> |
115 | <li><a href="#capturing-text">Capturing Text</a> | 115 | <li><a href="#capturing-text">Capturing Text</a> |
116 | <li><a href="#assertions">Assertions</a> | 116 | <li><a href="#assertions">Assertions</a> |
117 | <li><a href="#wildcard-matching">Wildcard Matching (globbing)</a> | 117 | <li><a href="#wildcard-matching">Wildcard Matching (globbing)</a> |
118 | <li><a href="#perl-users">Notes for Perl Users</a> | 118 | <li><a href="#perl-users">Notes for Perl Users</a> |
119 | <li><a href="#code-examples">Code Examples</a> | 119 | <li><a href="#code-examples">Code Examples</a> |
120 | <li><a href="#member-function-documentation">Member Function Documentation</a> | 120 | <li><a href="#member-function-documentation">Member Function Documentation</a> |
121 | </ul> | 121 | </ul> |
122 | 122 | ||
123 | <b>Introduction</b> | 123 | <b>Introduction</b> |
124 | 124 | ||
125 | Regexps are built up from expressions, quantifiers and assertions. | 125 | Regexps are built up from expressions, quantifiers and assertions. |
126 | The simplest form of expression is simply a character, e.g. <b>x</b> | 126 | The simplest form of expression is simply a character, e.g. <b>x</b> |
127 | or <b>5</b>. An expression can also be a set of characters. For | 127 | or <b>5</b>. An expression can also be a set of characters. For |
128 | example, <b>[ABCD]</b>, will match an <b>A</b> or a <b>B</b> or a | 128 | example, <b>[ABCD]</b>, will match an <b>A</b> or a <b>B</b> or a |
129 | <b>C</b> or a <b>D</b>. As a shorthand we could write this as | 129 | <b>C</b> or a <b>D</b>. As a shorthand we could write this as |
130 | <b>[A-D]</b>. If we want to match any of the captital letters in the | 130 | <b>[A-D]</b>. If we want to match any of the captital letters in the |
131 | English alphabet we can write <b>[A-Z]</b>. A quantifier tells the | 131 | English alphabet we can write <b>[A-Z]</b>. A quantifier tells the |
132 | regexp engine how many occurrences of the expression we want, e.g. | 132 | regexp engine how many occurrences of the expression we want, e.g. |
133 | <b>x{1,1}</b> means match an <b>x</b> which occurs at least once and | 133 | <b>x{1,1}</b> means match an <b>x</b> which occurs at least once and |
134 | at most once. We'll look at assertions and more complex expressions | 134 | at most once. We'll look at assertions and more complex expressions |
135 | later. Note that regexps cannot be used to check for balanced | 135 | later. Note that regexps cannot be used to check for balanced |
136 | brackets or tags (unless you know the maximum level of nesting). | 136 | brackets or tags (unless you know the maximum level of nesting). |
137 | 137 | ||
138 | 138 | ||
139 | We'll start by writing a regexp to match integers in the range 0 to | 139 | We'll start by writing a regexp to match integers in the range 0 to |
140 | 99. We will require at least one digit so we will start with | 140 | 99. We will require at least one digit so we will start with |
141 | <b>[0-9]{1,1}</b> which means match a digit exactly once. This | 141 | <b>[0-9]{1,1}</b> which means match a digit exactly once. This |
142 | regexp alone will match integers in the range 0 to 9. To match one | 142 | regexp alone will match integers in the range 0 to 9. To match one |
143 | or two digits we can increase the maximum number of occurrences so | 143 | or two digits we can increase the maximum number of occurrences so |
144 | the regexp becomes <b>[0-9]{1,2}</b> meaning match a digit at least | 144 | the regexp becomes <b>[0-9]{1,2}</b> meaning match a digit at least |
145 | once and at most twice. However, this regexp as it stands will not | 145 | once and at most twice. However, this regexp as it stands will not |
146 | match correctly. This regexp will match one or two digits \e within | 146 | match correctly. This regexp will match one or two digits \e within |
147 | a string. To ensure that we match against the whole string we must | 147 | a string. To ensure that we match against the whole string we must |
148 | use the anchor assertions. We need <b>^</b> (caret) which when it is | 148 | use the anchor assertions. We need <b>^</b> (caret) which when it is |
149 | the first character in the regexp means that the regexp must match | 149 | the first character in the regexp means that the regexp must match |
150 | from the beginning of the string. And we also need <b>$</b> (dollar) | 150 | from the beginning of the string. And we also need <b>$</b> (dollar) |
151 | which when it is the last character in the regexp means that the | 151 | which when it is the last character in the regexp means that the |
152 | regexp must match until the end of the string. So now our regexp is | 152 | regexp must match until the end of the string. So now our regexp is |
153 | <b>^[0-9]{1,2}$</b>. Note that assertions do not match any | 153 | <b>^[0-9]{1,2}$</b>. Note that assertions do not match any |
154 | characters. | 154 | characters. |
155 | 155 | ||
156 | If you've seen regexps elsewhere they may have looked different from | 156 | If you've seen regexps elsewhere they may have looked different from |
157 | the one above. This is because some sets of characters and some | 157 | the one above. This is because some sets of characters and some |
158 | quantifiers are so common that they have special symbols to | 158 | quantifiers are so common that they have special symbols to |
159 | represent them. <b>[0-9]</b> can be replaced with the symbol | 159 | represent them. <b>[0-9]</b> can be replaced with the symbol |
160 | <b>\d</b>. The quantifier to match exactly one occurrence, | 160 | <b>\d</b>. The quantifier to match exactly one occurrence, |
161 | <b>{1,1}</b>, can be replaced with the expression itself. This means | 161 | <b>{1,1}</b>, can be replaced with the expression itself. This means |
162 | that <b>x{1,1}</b> is exactly the same as <b>x</b> alone. So our 0 | 162 | that <b>x{1,1}</b> is exactly the same as <b>x</b> alone. So our 0 |
163 | to 99 matcher could be written: <b>^\d{1,2}$</b>, although most | 163 | to 99 matcher could be written: <b>^\d{1,2}$</b>, although most |
164 | people would write it <b>^\d\d?$</b>. The <b>?</b> is the same as | 164 | people would write it <b>^\d\d?$</b>. The <b>?</b> is the same as |
165 | the quantifier <b>{0,1}</b>, i.e. a minimum of no occurrences a | 165 | the quantifier <b>{0,1}</b>, i.e. a minimum of no occurrences a |
166 | maximum of one occurrence. This is used to make an expression | 166 | maximum of one occurrence. This is used to make an expression |
167 | optional. The regexp <b>^\d\d?$</b> means "from the beginning of the | 167 | optional. The regexp <b>^\d\d?$</b> means "from the beginning of the |
168 | string match one digit followed by zero or one digits and then the | 168 | string match one digit followed by zero or one digits and then the |
169 | end of the string". | 169 | end of the string". |
170 | 170 | ||
171 | Our second example is matching the words 'mail', 'letter' or | 171 | Our second example is matching the words 'mail', 'letter' or |
172 | 'correspondence' but without matching 'email', 'mailman', 'mailer', | 172 | 'correspondence' but without matching 'email', 'mailman', 'mailer', |
173 | 'letterbox' etc. We'll start by just matching 'mail'. In full the | 173 | 'letterbox' etc. We'll start by just matching 'mail'. In full the |
174 | regexp is, <b>m{1,1}a{1,1}i{1,1}l{1,1}</b>, but since an expression | 174 | regexp is, <b>m{1,1}a{1,1}i{1,1}l{1,1}</b>, but since an expression |
175 | itself is automatically quantified by <b>{1,1}</b> we can simply | 175 | itself is automatically quantified by <b>{1,1}</b> we can simply |
176 | write this as <b>mail</b>; an 'm' followed by an 'a' followed by an | 176 | write this as <b>mail</b>; an 'm' followed by an 'a' followed by an |
177 | 'i' followed by an 'l'. The symbol '|' (bar) is used for \e | 177 | 'i' followed by an 'l'. The symbol '|' (bar) is used for \e |
178 | alternation, so our regexp now becomes | 178 | alternation, so our regexp now becomes |
179 | <b>mail|letter|correspondence</b> which means match 'mail' \e or | 179 | <b>mail|letter|correspondence</b> which means match 'mail' \e or |
180 | 'letter' \e or 'correspondence'. Whilst this regexp will find the | 180 | 'letter' \e or 'correspondence'. Whilst this regexp will find the |
181 | words we want it will also find words we don't want such as 'email'. | 181 | words we want it will also find words we don't want such as 'email'. |
182 | We will start by putting our regexp in parenthesis | 182 | We will start by putting our regexp in parenthesis |
183 | <b>(mail|letter|correspondence)</b>. Parenthesis have two effects, | 183 | <b>(mail|letter|correspondence)</b>. Parenthesis have two effects, |
184 | firstly they group expressions together and secondly they identify | 184 | firstly they group expressions together and secondly they identify |
185 | parts of the regexp that we wish to <a href="#capturing-text">capture</a>. | 185 | parts of the regexp that we wish to <a href="#capturing-text">capture</a>. |
186 | Our regexp still matches any of the three words but now they are | 186 | Our regexp still matches any of the three words but now they are |
187 | grouped together as a unit. This is useful for building up more | 187 | grouped together as a unit. This is useful for building up more |
188 | complex regexps. It is also useful because it allows us to examine | 188 | complex regexps. It is also useful because it allows us to examine |
189 | which of the words actually matched. We need to use another | 189 | which of the words actually matched. We need to use another |
190 | assertion, this time <b>\b</b> "word boundary": | 190 | assertion, this time <b>\b</b> "word boundary": |
191 | <b>\b(mail|letter|correspondence)\b</b>. This regexp means "match a | 191 | <b>\b(mail|letter|correspondence)\b</b>. This regexp means "match a |
192 | word boundary followed by the expression in parenthesis followed by | 192 | word boundary followed by the expression in parenthesis followed by |
193 | another word boundary". The <b>\b</b> assertion matches at a \e | 193 | another word boundary". The <b>\b</b> assertion matches at a \e |
194 | position in the regexp not a \e character in the regexp. A word | 194 | position in the regexp not a \e character in the regexp. A word |
195 | boundary is any non-word character such as a space a newline or the | 195 | boundary is any non-word character such as a space a newline or the |
196 | beginning or end of the string. | 196 | beginning or end of the string. |
197 | 197 | ||
198 | For our third example we want to replace ampersands with the HTML | 198 | For our third example we want to replace ampersands with the HTML |
199 | entity '\&'. The regexp to match is simple: <b>\&</b>, i.e. | 199 | entity '\&'. The regexp to match is simple: <b>\&</b>, i.e. |
200 | match one ampersand. Unfortunately this will mess up our text if | 200 | match one ampersand. Unfortunately this will mess up our text if |
201 | some of the ampersands have already been turned into HTML entities. | 201 | some of the ampersands have already been turned into HTML entities. |
202 | So what we really want to say is replace an ampersand providing it | 202 | So what we really want to say is replace an ampersand providing it |
203 | is not followed by 'amp;'. For this we need the negative lookahead | 203 | is not followed by 'amp;'. For this we need the negative lookahead |
204 | assertion and our regexp becomes: <b>\&(?!amp;)</b>. The negative | 204 | assertion and our regexp becomes: <b>\&(?!amp;)</b>. The negative |
205 | lookahead assertion is introduced with '(?!' and finishes at the | 205 | lookahead assertion is introduced with '(?!' and finishes at the |
206 | ')'. It means that the text it contains, 'amp;' in our example, must | 206 | ')'. It means that the text it contains, 'amp;' in our example, must |
207 | \e not follow the expression that preceeds it. | 207 | \e not follow the expression that preceeds it. |
208 | 208 | ||
209 | Regexps provide a rich language that can be used in a variety of | 209 | Regexps provide a rich language that can be used in a variety of |
210 | ways. For example suppose we want to count all the occurrences of | 210 | ways. For example suppose we want to count all the occurrences of |
211 | 'Eric' and 'Eirik' in a string. Two valid regexps to match these are | 211 | 'Eric' and 'Eirik' in a string. Two valid regexps to match these are |
212 | <b>\\</b><b>b(Eric|Eirik)</b><b>\\</b><b>b</b> and | 212 | <b>\\</b><b>b(Eric|Eirik)</b><b>\\</b><b>b</b> and |
213 | <b>\\</b><b>bEi?ri[ck]</b><b>\\</b><b>b</b>. We need the word boundary | 213 | <b>\\</b><b>bEi?ri[ck]</b><b>\\</b><b>b</b>. We need the word boundary |
214 | '\b' so we don't get 'Ericsson' etc. The second regexp actually | 214 | '\b' so we don't get 'Ericsson' etc. The second regexp actually |
215 | matches more than we want, 'Eric', 'Erik', 'Eiric' and 'Eirik'. | 215 | matches more than we want, 'Eric', 'Erik', 'Eiric' and 'Eirik'. |
216 | 216 | ||
217 | We will implement some the examples above in the | 217 | We will implement some the examples above in the |
218 | <a href="#code-examples">code examples</a> section. | 218 | <a href="#code-examples">code examples</a> section. |
219 | 219 | ||
220 | <a name="characters-and-abbreviations-for-sets-of-characters"> | 220 | <a name="characters-and-abbreviations-for-sets-of-characters"> |
221 | <b>Characters and Abbreviations for Sets of Characters</b></a> | 221 | <b>Characters and Abbreviations for Sets of Characters</b></a> |
222 | 222 | ||
223 | <ul> | 223 | <ul> |
224 | 224 | ||
225 | <li><b>c</b> Any character represents itself unless it has a special regexp | 225 | <li><b>c</b> Any character represents itself unless it has a special regexp |
226 | meaning. Thus <b>c</b> matches the character \e c. | 226 | meaning. Thus <b>c</b> matches the character \e c. |
227 | 227 | ||
228 | <li><b>\\</b><b>c</b> A character that follows a backslash matches the | 228 | <li><b>\\</b><b>c</b> A character that follows a backslash matches the |
229 | character itself except where mentioned below. For example if you | 229 | character itself except where mentioned below. For example if you |
230 | wished to match a literal caret at the beginning of a string you | 230 | wished to match a literal caret at the beginning of a string you |
231 | would write <b>\^</b>. | 231 | would write <b>\^</b>. |
232 | 232 | ||
233 | <li><b>\\</b><b>a</b> This matches the ASCII bell character (BEL, 0x07). | 233 | <li><b>\\</b><b>a</b> This matches the ASCII bell character (BEL, 0x07). |
234 | <li><b>\\</b><b>f</b> This matches the ASCII form feed character (FF, 0x0C). | 234 | <li><b>\\</b><b>f</b> This matches the ASCII form feed character (FF, 0x0C). |
235 | <li><b>\\</b><b>n</b> This matches the ASCII line feed character (LF, 0x0A), (Unix newline). | 235 | <li><b>\\</b><b>n</b> This matches the ASCII line feed character (LF, 0x0A), (Unix newline). |
236 | <li><b>\\</b><b>r</b> This matches the ASCII carriage return character (CR, 0x0D). | 236 | <li><b>\\</b><b>r</b> This matches the ASCII carriage return character (CR, 0x0D). |
237 | <li><b>\\</b><b>t</b> This matches the ASCII horizontal tab character (HT, 0x09). | 237 | <li><b>\\</b><b>t</b> This matches the ASCII horizontal tab character (HT, 0x09). |
238 | <li><b>\\</b><b>v</b> This matches the ASCII vertical tab character (VT, 0x0B). | 238 | <li><b>\\</b><b>v</b> This matches the ASCII vertical tab character (VT, 0x0B). |
239 | <li><b>\\</b><b>xhhhh</b> This matches the Unicode character corresponding | 239 | <li><b>\\</b><b>xhhhh</b> This matches the Unicode character corresponding |
240 | to the hexadecimal number hhhh (between 0x0000 and 0xFFFF). \0ooo | 240 | to the hexadecimal number hhhh (between 0x0000 and 0xFFFF). \0ooo |
241 | (i.e., \zero ooo) matches the ASCII/Latin-1 character corresponding | 241 | (i.e., \zero ooo) matches the ASCII/Latin-1 character corresponding |
242 | to the octal number ooo (between 0 and 0377). | 242 | to the octal number ooo (between 0 and 0377). |
243 | <li><b>. (dot)</b> This matches any character (including newline). | 243 | <li><b>. (dot)</b> This matches any character (including newline). |
244 | <li><b>\\</b><b>d</b> This matches a digit (see QChar::isDigit()). | 244 | <li><b>\\</b><b>d</b> This matches a digit (see QChar::isDigit()). |
245 | <li><b>\\</b><b>D</b> This matches a non-digit. | 245 | <li><b>\\</b><b>D</b> This matches a non-digit. |
246 | <li><b>\\</b><b>s</b> This matches a whitespace (see QChar::isSpace()). | 246 | <li><b>\\</b><b>s</b> This matches a whitespace (see QChar::isSpace()). |
247 | <li><b>\\</b><b>S</b> This matches a non-whitespace. | 247 | <li><b>\\</b><b>S</b> This matches a non-whitespace. |
248 | <li><b>\\</b><b>w</b> This matches a word character (see QChar::isLetterOrNumber()). | 248 | <li><b>\\</b><b>w</b> This matches a word character (see QChar::isLetterOrNumber()). |
249 | <li><b>\\</b><b>W</b> This matches a non-word character. | 249 | <li><b>\\</b><b>W</b> This matches a non-word character. |
250 | <li><b>\\</b><b>n</b> The n<sup>th</sup> | 250 | <li><b>\\</b><b>n</b> The n<sup>th</sup> |
251 | <a href="#capturing-text">backreference</a>, e.g. \1, \2, etc. | 251 | <a href="#capturing-text">backreference</a>, e.g. \1, \2, etc. |
252 | </ul> | 252 | </ul> |
253 | 253 | ||
254 | <em>Note that the C++ compiler transforms backslashes in strings so | 254 | <em>Note that the C++ compiler transforms backslashes in strings so |
255 | to include a <b>\\</b> in a regexp you will need to enter it twice, | 255 | to include a <b>\\</b> in a regexp you will need to enter it twice, |
256 | i.e. <b>\\</b><b>\\</b>.</em> | 256 | i.e. <b>\\</b><b>\\</b>.</em> |
257 | 257 | ||
258 | <a name="sets-of-characters"><b>Sets of Characters</b></a> | 258 | <a name="sets-of-characters"><b>Sets of Characters</b></a> |
259 | 259 | ||
260 | Square brackets are used to match any character in the set of | 260 | Square brackets are used to match any character in the set of |
261 | characters contained within the square brackets. All the character | 261 | characters contained within the square brackets. All the character |
262 | set abbreviations described above can be used within square | 262 | set abbreviations described above can be used within square |
263 | brackets. Apart from the character set abbreviations and the | 263 | brackets. Apart from the character set abbreviations and the |
264 | following two exceptions no characters have special meanings in | 264 | following two exceptions no characters have special meanings in |
265 | square brackets. | 265 | square brackets. |
266 | 266 | ||
267 | <ul> | 267 | <ul> |
268 | 268 | ||
269 | <li><b>^</b> The caret negates the character set if it occurs as the | 269 | <li><b>^</b> The caret negates the character set if it occurs as the |
270 | first character, i.e. immediately after the opening square bracket. | 270 | first character, i.e. immediately after the opening square bracket. |
271 | For example, <b>[abc]</b> matches 'a' or 'b' or 'c', but | 271 | For example, <b>[abc]</b> matches 'a' or 'b' or 'c', but |
272 | <b>[^abc]</b> matches anything \e except 'a' or 'b' or 'c'. | 272 | <b>[^abc]</b> matches anything \e except 'a' or 'b' or 'c'. |
273 | 273 | ||
274 | <li><b>-</b> The dash is used to indicate a range of characters, for | 274 | <li><b>-</b> The dash is used to indicate a range of characters, for |
275 | example <b>[W-Z]</b> matches 'W' or 'X' or 'Y' or 'Z'. | 275 | example <b>[W-Z]</b> matches 'W' or 'X' or 'Y' or 'Z'. |
276 | 276 | ||
277 | </ul> | 277 | </ul> |
278 | 278 | ||
279 | Using the predefined character set abbreviations is more portable | 279 | Using the predefined character set abbreviations is more portable |
280 | than using character ranges across platforms and languages. For | 280 | than using character ranges across platforms and languages. For |
281 | example, <b>[0-9]</b> matches a digit in Western alphabets but | 281 | example, <b>[0-9]</b> matches a digit in Western alphabets but |
282 | <b>\d</b> matches a digit in \e any alphabet. | 282 | <b>\d</b> matches a digit in \e any alphabet. |
283 | 283 | ||
284 | Note that in most regexp literature sets of characters are called | 284 | Note that in most regexp literature sets of characters are called |
285 | "character classes". | 285 | "character classes". |
286 | 286 | ||
287 | <a name="quantifiers"><b>Quantifiers</b></a> | 287 | <a name="quantifiers"><b>Quantifiers</b></a> |
288 | 288 | ||
289 | By default an expression is automatically quantified by | 289 | By default an expression is automatically quantified by |
290 | <b>{1,1}</b>, i.e. it should occur exactly once. In the following | 290 | <b>{1,1}</b>, i.e. it should occur exactly once. In the following |
291 | list <b><i>E</i></b> stands for any expression. An expression is a | 291 | list <b><i>E</i></b> stands for any expression. An expression is a |
292 | character or an abbreviation for a set of characters or a set of | 292 | character or an abbreviation for a set of characters or a set of |
293 | characters in square brackets or any parenthesised expression. | 293 | characters in square brackets or any parenthesised expression. |
294 | 294 | ||
295 | <ul> | 295 | <ul> |
296 | 296 | ||
297 | <li><b><i>E</i>?</b> Matches zero or one occurrence of <i>E</i>. | 297 | <li><b><i>E</i>?</b> Matches zero or one occurrence of <i>E</i>. |
298 | This quantifier means "the previous expression is optional" since it | 298 | This quantifier means "the previous expression is optional" since it |
299 | will match whether or not the expression occurs in the string. | 299 | will match whether or not the expression occurs in the string. |
300 | It is the same as <b><i>E</i>{0,1}</b>. For example <b>dents?</b> | 300 | It is the same as <b><i>E</i>{0,1}</b>. For example <b>dents?</b> |
301 | will match 'dent' and 'dents'. | 301 | will match 'dent' and 'dents'. |
302 | 302 | ||
303 | <li><b><i>E</i>+</b> Matches one or more occurrences of <i>E</i>. | 303 | <li><b><i>E</i>+</b> Matches one or more occurrences of <i>E</i>. |
304 | This is the same as <b><i>E</i>{1,MAXINT}</b>. For example, | 304 | This is the same as <b><i>E</i>{1,MAXINT}</b>. For example, |
305 | <b>0+</b> will match '0', '00', '000', etc. | 305 | <b>0+</b> will match '0', '00', '000', etc. |
306 | 306 | ||
307 | <li><b><i>E</i>*</b> Matches zero or more occurrences of <i>E</i>. | 307 | <li><b><i>E</i>*</b> Matches zero or more occurrences of <i>E</i>. |
308 | This is the same as <b><i>E</i>{0,MAXINT}</b>. The <b>*</b> | 308 | This is the same as <b><i>E</i>{0,MAXINT}</b>. The <b>*</b> |
309 | quantifier is often used by a mistake. Since it matches \e zero or | 309 | quantifier is often used by a mistake. Since it matches \e zero or |
310 | more occurrences it will match no occurrences at all. For example if | 310 | more occurrences it will match no occurrences at all. For example if |
311 | we want to match strings that end in whitespace and use the regexp | 311 | we want to match strings that end in whitespace and use the regexp |
312 | <b>\s*$</b> we would get a match on every string. This is because we | 312 | <b>\s*$</b> we would get a match on every string. This is because we |
313 | have said find zero or more whitespace followed by the end of string, | 313 | have said find zero or more whitespace followed by the end of string, |
314 | so even strings that don't end in whitespace will match. The regexp | 314 | so even strings that don't end in whitespace will match. The regexp |
315 | we want in this case is <b>\s+$</b> to match strings that have at | 315 | we want in this case is <b>\s+$</b> to match strings that have at |
316 | least one whitespace at the end. | 316 | least one whitespace at the end. |
317 | 317 | ||
318 | <li><b><i>E</i>{n}</b> Matches exactly \e n occurrences of the | 318 | <li><b><i>E</i>{n}</b> Matches exactly \e n occurrences of the |
319 | expression. This is the same as repeating the expression \e n times. | 319 | expression. This is the same as repeating the expression \e n times. |
320 | For example, <b>x{5}</b> is the same as <b>xxxxx</b>. It is also the | 320 | For example, <b>x{5}</b> is the same as <b>xxxxx</b>. It is also the |
321 | same as <b><i>E</i>{n,n}</b>, e.g. <b>x{5,5}</b>. | 321 | same as <b><i>E</i>{n,n}</b>, e.g. <b>x{5,5}</b>. |
322 | 322 | ||
323 | <li><b><i>E</i>{n,}</b> Matches at least \e n occurrences of the | 323 | <li><b><i>E</i>{n,}</b> Matches at least \e n occurrences of the |
324 | expression. This is the same as <b><i>E</i>{n,MAXINT}</b>. | 324 | expression. This is the same as <b><i>E</i>{n,MAXINT}</b>. |
325 | 325 | ||
326 | <li><b><i>E</i>{,m}</b> Matches at most \e m occurrences of the | 326 | <li><b><i>E</i>{,m}</b> Matches at most \e m occurrences of the |
327 | expression. This is the same as <b><i>E</i>{0,m}</b>. | 327 | expression. This is the same as <b><i>E</i>{0,m}</b>. |
328 | 328 | ||
329 | <li><b><i>E</i>{n,m}</b> Matches at least \e n occurrences of the | 329 | <li><b><i>E</i>{n,m}</b> Matches at least \e n occurrences of the |
330 | expression and at most \e m occurrences of the expression. | 330 | expression and at most \e m occurrences of the expression. |
331 | 331 | ||
332 | </ul> | 332 | </ul> |
333 | 333 | ||
334 | (MAXINT is implementation dependent but will not be smaller than | 334 | (MAXINT is implementation dependent but will not be smaller than |
335 | 16384.) | 335 | 16384.) |
336 | 336 | ||
337 | If we wish to apply a quantifier to more than just the preceeding | 337 | If we wish to apply a quantifier to more than just the preceeding |
338 | character we can use parenthesis to group characters together in an | 338 | character we can use parenthesis to group characters together in an |
339 | expression. For example, <b>tag+</b> matches a 't' followed by an | 339 | expression. For example, <b>tag+</b> matches a 't' followed by an |
340 | 'a' followed by at least one 'g', whereas <b>(tag)+</b> matches at | 340 | 'a' followed by at least one 'g', whereas <b>(tag)+</b> matches at |
341 | least one occurrence of 'tag'. | 341 | least one occurrence of 'tag'. |
342 | 342 | ||
343 | Note that quantifiers are "greedy", they will match as much text as | 343 | Note that quantifiers are "greedy", they will match as much text as |
344 | they can. For example, <b>0+</b> will match as many zeros as it can | 344 | they can. For example, <b>0+</b> will match as many zeros as it can |
345 | from the first zero it finds, e.g. '2.<u>000</u>5'. Quantifiers can | 345 | from the first zero it finds, e.g. '2.<u>000</u>5'. Quantifiers can |
346 | be made non-greedy, see setMinimal(). | 346 | be made non-greedy, see setMinimal(). |
347 | 347 | ||
348 | <a name="capturing-text"><b>Capturing Text</b></a> | 348 | <a name="capturing-text"><b>Capturing Text</b></a> |
349 | 349 | ||
350 | Parenthesis allow us to group elements together so that we can | 350 | Parenthesis allow us to group elements together so that we can |
351 | quantify and capture them. For example if we have the expression | 351 | quantify and capture them. For example if we have the expression |
352 | <b>mail|letter|correspondence</b> that matches a string we know that | 352 | <b>mail|letter|correspondence</b> that matches a string we know that |
353 | \e one of the words matched but not which one. Using parenthesis | 353 | \e one of the words matched but not which one. Using parenthesis |
354 | allows us to "capture" whatever is matched within their bounds, so | 354 | allows us to "capture" whatever is matched within their bounds, so |
355 | if we used <b>(mail|letter|correspondence)</b> and matched this | 355 | if we used <b>(mail|letter|correspondence)</b> and matched this |
356 | regexp against the string "I sent you some email" we can use the | 356 | regexp against the string "I sent you some email" we can use the |
357 | cap() or capturedTexts() functions to extract the matched | 357 | cap() or capturedTexts() functions to extract the matched |
358 | characters, in this case 'mail'. | 358 | characters, in this case 'mail'. |
359 | 359 | ||
360 | We can use captured text within the regexp itself. To refer to the | 360 | We can use captured text within the regexp itself. To refer to the |
361 | captured text we use \e backreferences which are indexed from 1 the | 361 | captured text we use \e backreferences which are indexed from 1 the |
362 | same as for cap(). For example we could search for duplicate words | 362 | same as for cap(). For example we could search for duplicate words |
363 | in a string using <b>\b(\w+)\W+\1\b</b> which means match a word | 363 | in a string using <b>\b(\w+)\W+\1\b</b> which means match a word |
364 | boundary followed by one or more word characters followed by one or | 364 | boundary followed by one or more word characters followed by one or |
365 | more non-word characters followed by the same text as the first | 365 | more non-word characters followed by the same text as the first |
366 | parenthesised expression followed by a word boundary. | 366 | parenthesised expression followed by a word boundary. |
367 | 367 | ||
368 | If we want to use parenthesis purely for grouping and not for | 368 | If we want to use parenthesis purely for grouping and not for |
369 | capturing we use the non-capturing syntax, e.g. | 369 | capturing we use the non-capturing syntax, e.g. |
370 | <b>(?:green|blue)</b>. Non-capturing parenthesis begin '(?:' and end | 370 | <b>(?:green|blue)</b>. Non-capturing parenthesis begin '(?:' and end |
371 | ')'. In this example we match either 'green' or 'blue' but we do not | 371 | ')'. In this example we match either 'green' or 'blue' but we do not |
372 | capture the match so we can only know whether or not we matched but | 372 | capture the match so we can only know whether or not we matched but |
373 | not which color we actually found. Using non-capturing parenthesis | 373 | not which color we actually found. Using non-capturing parenthesis |
374 | is more efficient than using capturing parenthesis since the regexp | 374 | is more efficient than using capturing parenthesis since the regexp |
375 | engine has to do less book-keeping. | 375 | engine has to do less book-keeping. |
376 | 376 | ||
377 | Both capturing and non-capturing parenthesis may be nested. | 377 | Both capturing and non-capturing parenthesis may be nested. |
378 | 378 | ||
379 | <a name="assertions"><b>Assertions</b></a> | 379 | <a name="assertions"><b>Assertions</b></a> |
380 | 380 | ||
381 | Assertions make some statement about the text at the point where | 381 | Assertions make some statement about the text at the point where |
382 | they occur in the regexp but they do not match any characters. | 382 | they occur in the regexp but they do not match any characters. |
383 | In the following list <b><i>E</i></b> stands for any expression. | 383 | In the following list <b><i>E</i></b> stands for any expression. |
384 | 384 | ||
385 | <ul> | 385 | <ul> |
386 | <li><b>^</b> If the caret is the first character in the regexp | 386 | <li><b>^</b> If the caret is the first character in the regexp |
387 | (apart from opening parenthesis) it signifies the beginning of the | 387 | (apart from opening parenthesis) it signifies the beginning of the |
388 | string. It has no special meaning elsewhere (except as the first | 388 | string. It has no special meaning elsewhere (except as the first |
389 | character of a set of characters in square brackets). For example, | 389 | character of a set of characters in square brackets). For example, |
390 | <b>^#include</b> will only match strings which \e begin with the | 390 | <b>^#include</b> will only match strings which \e begin with the |
391 | characters '#include'. | 391 | characters '#include'. |
392 | 392 | ||
393 | <li><b>$</b> If the dollar is the last character in the regexp | 393 | <li><b>$</b> If the dollar is the last character in the regexp |
394 | (apart from closing parenthesis) it signifies the end of the string. | 394 | (apart from closing parenthesis) it signifies the end of the string. |
395 | It has no special meaning elsewhere. For example, <b>\d\s*$</b> | 395 | It has no special meaning elsewhere. For example, <b>\d\s*$</b> |
396 | will match strings which end with a digit optionally followed by | 396 | will match strings which end with a digit optionally followed by |
397 | whitespace. | 397 | whitespace. |
398 | 398 | ||
399 | <li><b>\\</b><b>b</b> A word boundary. For example the regexp | 399 | <li><b>\\</b><b>b</b> A word boundary. For example the regexp |
400 | <b>\\</b><b>bOK</b>\\</b><b>b</b> means match immediately after a | 400 | <b>\\</b><b>bOK</b>\\</b><b>b</b> means match immediately after a |
401 | word boundary (e.g. start of string or whitespace) the letter 'O' | 401 | word boundary (e.g. start of string or whitespace) the letter 'O' |
402 | then the letter 'K' immediately before another word boundary (e.g. | 402 | then the letter 'K' immediately before another word boundary (e.g. |
403 | end of string or whitespace). But note that the assertion does not | 403 | end of string or whitespace). But note that the assertion does not |
404 | actually match any whitespace so if we write | 404 | actually match any whitespace so if we write |
405 | <b>(</b><b>\\</b><b>bOK</b>\\</b><b>b)</b> and we have a match it | 405 | <b>(</b><b>\\</b><b>bOK</b>\\</b><b>b)</b> and we have a match it |
406 | will only contain 'OK' even if the string is "Its <u>OK</u> now". | 406 | will only contain 'OK' even if the string is "Its <u>OK</u> now". |
407 | 407 | ||
408 | <li><b>\\</b><b>B</b> A non-word boundary. This assertion is true | 408 | <li><b>\\</b><b>B</b> A non-word boundary. This assertion is true |
409 | wherever <b>\\</b><b>b</b> is false. For example if we searched for | 409 | wherever <b>\\</b><b>b</b> is false. For example if we searched for |
410 | <b>\\</b><b>Bon</b>\\</b><b>B</b> in "Left on" the match would fail | 410 | <b>\\</b><b>Bon</b>\\</b><b>B</b> in "Left on" the match would fail |
411 | (space and end of string aren't non-word boundaries), but it would | 411 | (space and end of string aren't non-word boundaries), but it would |
412 | match in "t<u>on</u>ne". | 412 | match in "t<u>on</u>ne". |
413 | 413 | ||
414 | <li><b>(?=<i>E</i>)</b> Positive lookahead. This assertion is true | 414 | <li><b>(?=<i>E</i>)</b> Positive lookahead. This assertion is true |
415 | if the expression matches at this point in the regex. This assertion | 415 | if the expression matches at this point in the regex. This assertion |
416 | does not match any characters. For example, | 416 | does not match any characters. For example, |
417 | <b>^#define\s+(\w+)(?=MAX)</b> will match strings which begin with | 417 | <b>^#define\s+(\w+)(?=MAX)</b> will match strings which begin with |
418 | '#define' followed by at least one whitespace followed by at least | 418 | '#define' followed by at least one whitespace followed by at least |
419 | one word character followed by 'MAX'. The first set of parenthesis | 419 | one word character followed by 'MAX'. The first set of parenthesis |
420 | will capture the word character(s) matched. This regexp will not | 420 | will capture the word character(s) matched. This regexp will not |
421 | match '#define DEBUG' but will match '#define <u>INT</u>MAX | 421 | match '#define DEBUG' but will match '#define <u>INT</u>MAX |
422 | 32767'. | 422 | 32767'. |
423 | 423 | ||
424 | <li><b>(?!<i>E</i>)</b> Negative lookahead. This assertion is true | 424 | <li><b>(?!<i>E</i>)</b> Negative lookahead. This assertion is true |
425 | if the expression does not match at this point in the regex. This | 425 | if the expression does not match at this point in the regex. This |
diff --git a/noncore/apps/tinykate/libkate/qt3back/qregexp3.h b/noncore/apps/tinykate/libkate/qt3back/qregexp3.h index 5b75131..fd6bc78 100644 --- a/noncore/apps/tinykate/libkate/qt3back/qregexp3.h +++ b/noncore/apps/tinykate/libkate/qt3back/qregexp3.h | |||
@@ -1,111 +1,111 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | ** $Id$ | 2 | ** $Id$ |
3 | ** | 3 | ** |
4 | ** Definition of QRegExp class | 4 | ** Definition of QRegExp class |
5 | ** | 5 | ** |
6 | ** Created : 950126 | 6 | ** Created : 950126 |
7 | ** | 7 | ** |
8 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. | 8 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. |
9 | ** | 9 | ** |
10 | ** This file is part of the tools module of the Qt GUI Toolkit. | 10 | ** This file is part of the tools module of the Qt GUI Toolkit. |
11 | ** | 11 | ** |
12 | ** This file may be distributed under the terms of the Q Public License | 12 | ** This file may be distributed under the terms of the Q Public License |
13 | ** as defined by Trolltech AS of Norway and appearing in the file | 13 | ** as defined by Trolltech AS of Norway and appearing in the file |
14 | ** LICENSE.QPL included in the packaging of this file. | 14 | ** LICENSE.QPL included in the packaging of this file. |
15 | ** | 15 | ** |
16 | ** This file may be distributed and/or modified under the terms of the | 16 | ** This file may be distributed and/or modified under the terms of the |
17 | ** GNU General Public License version 2 as published by the Free Software | 17 | ** GNU General Public License version 2 as published by the Free Software |
18 | ** Foundation and appearing in the file LICENSE.GPL included in the | 18 | ** Foundation and appearing in the file LICENSE.GPL included in the |
19 | ** packaging of this file. | 19 | ** packaging of this file. |
20 | ** | 20 | ** |
21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition | 21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition |
22 | ** licenses may use this file in accordance with the Qt Commercial License | 22 | ** licenses may use this file in accordance with the Qt Commercial License |
23 | ** Agreement provided with the Software. | 23 | ** Agreement provided with the Software. |
24 | ** | 24 | ** |
25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
27 | ** | 27 | ** |
28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for | 28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for |
29 | ** information about Qt Commercial License Agreements. | 29 | ** information about Qt Commercial License Agreements. |
30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. | 30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. |
31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
32 | ** | 32 | ** |
33 | ** Contact info@trolltech.com if any conditions of this licensing are | 33 | ** Contact info@trolltech.com if any conditions of this licensing are |
34 | ** not clear to you. | 34 | ** not clear to you. |
35 | ** | 35 | ** |
36 | **********************************************************************/ | 36 | **********************************************************************/ |
37 | 37 | ||
38 | #ifndef QREGEXP3_H | 38 | #ifndef QREGEXP3_H |
39 | #define QREGEXP3_H | 39 | #define QREGEXP3_H |
40 | #ifndef QT_H | 40 | #ifndef QT_H |
41 | #include "qstringlist.h" | 41 | #include "qstringlist.h" |
42 | #endif // QT_H | 42 | #endif // QT_H |
43 | 43 | ||
44 | 44 | ||
45 | #if QT_VERSION >=300 | 45 | #if QT_VERSION >= 0x030000 |
46 | #include <qregexp.h> | 46 | #include <qregexp.h> |
47 | #else | 47 | #else |
48 | class QRegExpEngine; | 48 | class QRegExpEngine; |
49 | struct QRegExpPrivate; | 49 | struct QRegExpPrivate; |
50 | 50 | ||
51 | class Q_EXPORT QRegExp3 | 51 | class Q_EXPORT QRegExp3 |
52 | { | 52 | { |
53 | public: | 53 | public: |
54 | QRegExp3(); | 54 | QRegExp3(); |
55 | QRegExp3( const QString& pattern, bool caseSensitive = TRUE, | 55 | QRegExp3( const QString& pattern, bool caseSensitive = TRUE, |
56 | bool wildcard = FALSE ); | 56 | bool wildcard = FALSE ); |
57 | QRegExp3( const QRegExp3& rx ); | 57 | QRegExp3( const QRegExp3& rx ); |
58 | ~QRegExp3(); | 58 | ~QRegExp3(); |
59 | QRegExp3& operator=( const QRegExp3& rx ); | 59 | QRegExp3& operator=( const QRegExp3& rx ); |
60 | 60 | ||
61 | bool operator==( const QRegExp3& rx ) const; | 61 | bool operator==( const QRegExp3& rx ) const; |
62 | bool operator!=( const QRegExp3& rx ) const { return !operator==( rx ); } | 62 | bool operator!=( const QRegExp3& rx ) const { return !operator==( rx ); } |
63 | 63 | ||
64 | bool isEmpty() const; | 64 | bool isEmpty() const; |
65 | bool isValid() const; | 65 | bool isValid() const; |
66 | QString pattern() const; | 66 | QString pattern() const; |
67 | void setPattern( const QString& pattern ); | 67 | void setPattern( const QString& pattern ); |
68 | bool caseSensitive() const; | 68 | bool caseSensitive() const; |
69 | void setCaseSensitive( bool sensitive ); | 69 | void setCaseSensitive( bool sensitive ); |
70 | #ifndef QT_NO_REGEXP_WILDCARD | 70 | #ifndef QT_NO_REGEXP_WILDCARD |
71 | bool wildcard() const; | 71 | bool wildcard() const; |
72 | void setWildcard( bool wildcard ); | 72 | void setWildcard( bool wildcard ); |
73 | #endif | 73 | #endif |
74 | bool minimal() const; | 74 | bool minimal() const; |
75 | void setMinimal( bool minimal ); | 75 | void setMinimal( bool minimal ); |
76 | 76 | ||
77 | bool exactMatch( const QString& str ); | 77 | bool exactMatch( const QString& str ); |
78 | bool exactMatch( const QString& str ) const; | 78 | bool exactMatch( const QString& str ) const; |
79 | #ifndef QT_NO_COMPAT | 79 | #ifndef QT_NO_COMPAT |
80 | int match( const QString& str, int index, int *len = 0, | 80 | int match( const QString& str, int index, int *len = 0, |
81 | bool indexIsStart = TRUE ); | 81 | bool indexIsStart = TRUE ); |
82 | #endif | 82 | #endif |
83 | int search( const QString& str, int start = 0 ); | 83 | int search( const QString& str, int start = 0 ); |
84 | int search( const QString& str, int start = 0 ) const; | 84 | int search( const QString& str, int start = 0 ) const; |
85 | // QChar versions | 85 | // QChar versions |
86 | #ifdef QCHAR_SUPPORT | 86 | #ifdef QCHAR_SUPPORT |
87 | int search(const QChar *str,int start=0); | 87 | int search(const QChar *str,int start=0); |
88 | int search(const QChar *str,int start=0) const; | 88 | int search(const QChar *str,int start=0) const; |
89 | int searchRev(const QChar *str,int start=-1); | 89 | int searchRev(const QChar *str,int start=-1); |
90 | int searchRev(const QChar *str,int start=-1) const ; | 90 | int searchRev(const QChar *str,int start=-1) const ; |
91 | bool exactMatch(const QChar *str); | 91 | bool exactMatch(const QChar *str); |
92 | bool exactMatch(const QChar *str) const; | 92 | bool exactMatch(const QChar *str) const; |
93 | // end QChar versions | 93 | // end QChar versions |
94 | #endif | 94 | #endif |
95 | int searchRev( const QString& str, int start = -1 ); | 95 | int searchRev( const QString& str, int start = -1 ); |
96 | int searchRev( const QString& str, int start = -1 ) const; | 96 | int searchRev( const QString& str, int start = -1 ) const; |
97 | int matchedLength(); | 97 | int matchedLength(); |
98 | #ifndef QT_NO_REGEXP_CAPTURE | 98 | #ifndef QT_NO_REGEXP_CAPTURE |
99 | QStringList capturedTexts(); | 99 | QStringList capturedTexts(); |
100 | QString cap( int nth = 0 ); | 100 | QString cap( int nth = 0 ); |
101 | int pos( int nth = 0 ); | 101 | int pos( int nth = 0 ); |
102 | #endif | 102 | #endif |
103 | 103 | ||
104 | private: | 104 | private: |
105 | void compile( bool caseSensitive ); | 105 | void compile( bool caseSensitive ); |
106 | 106 | ||
107 | QRegExpEngine *eng; | 107 | QRegExpEngine *eng; |
108 | QRegExpPrivate *priv; | 108 | QRegExpPrivate *priv; |
109 | }; | 109 | }; |
110 | #endif // QT_VERSION >= 300 | 110 | #endif // QT_VERSION >= 0x030000 |
111 | #endif // QREGEXP_H | 111 | #endif // QREGEXP_H |
diff --git a/noncore/apps/zsafe/shadedlistitem.cpp b/noncore/apps/zsafe/shadedlistitem.cpp index 72c6261..7f340f9 100644 --- a/noncore/apps/zsafe/shadedlistitem.cpp +++ b/noncore/apps/zsafe/shadedlistitem.cpp | |||
@@ -1,69 +1,69 @@ | |||
1 | /* | 1 | /* |
2 | * shadedlistitem.cpp | 2 | * shadedlistitem.cpp |
3 | * | 3 | * |
4 | * (c) 2003 by Jeremy Bowman <jmbowman@alum.mit.edu> | 4 | * (c) 2003 by Jeremy Bowman <jmbowman@alum.mit.edu> |
5 | * | 5 | * |
6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify |
7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by |
8 | * the Free Software Foundation; either version 2 of the License, or | 8 | * the Free Software Foundation; either version 2 of the License, or |
9 | * (at your option) any later version. | 9 | * (at your option) any later version. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include "zsafe.h" | 12 | #include "zsafe.h" |
13 | #include "shadedlistitem.h" | 13 | #include "shadedlistitem.h" |
14 | 14 | ||
15 | 15 | ||
16 | ShadedListItem::ShadedListItem(int index, QListViewItem *parent) | 16 | ShadedListItem::ShadedListItem(int index, QListViewItem *parent) |
17 | : QListViewItem(parent) | 17 | : QListViewItem(parent) |
18 | { | 18 | { |
19 | oddRow = (index % 2 != 0); | 19 | oddRow = (index % 2 != 0); |
20 | } | 20 | } |
21 | 21 | ||
22 | ShadedListItem::ShadedListItem(int index, QListView *parent) | 22 | ShadedListItem::ShadedListItem(int index, QListView *parent) |
23 | : QListViewItem(parent), lv(parent) | 23 | : QListViewItem(parent), lv(parent) |
24 | { | 24 | { |
25 | oddRow = (index % 2 != 0); | 25 | oddRow = (index % 2 != 0); |
26 | } | 26 | } |
27 | 27 | ||
28 | ShadedListItem::ShadedListItem(int index, QListView *parent, QListViewItem *after) | 28 | ShadedListItem::ShadedListItem(int index, QListView *parent, QListViewItem *after) |
29 | : QListViewItem(parent, after), lv(parent) | 29 | : QListViewItem(parent, after), lv(parent) |
30 | { | 30 | { |
31 | oddRow = (index % 2 != 0); | 31 | oddRow = (index % 2 != 0); |
32 | } | 32 | } |
33 | 33 | ||
34 | ShadedListItem::ShadedListItem(int index, QListView *parent, QString label1, QString label2, QString label3) | 34 | ShadedListItem::ShadedListItem(int index, QListView *parent, QString label1, QString label2, QString label3) |
35 | : QListViewItem(parent, label1, label2, label3), lv(parent) | 35 | : QListViewItem(parent, label1, label2, label3), lv(parent) |
36 | { | 36 | { |
37 | oddRow = (index % 2 != 0); | 37 | oddRow = (index % 2 != 0); |
38 | } | 38 | } |
39 | 39 | ||
40 | ShadedListItem::ShadedListItem(int index, QListView *parent, QListViewItem *after, QString label1, QString label2, QString label3) | 40 | ShadedListItem::ShadedListItem(int index, QListView *parent, QListViewItem *after, QString label1, QString label2, QString label3) |
41 | : QListViewItem(parent, after, label1, label2, label3), lv(parent) | 41 | : QListViewItem(parent, after, label1, label2, label3), lv(parent) |
42 | { | 42 | { |
43 | oddRow = (index % 2 != 0); | 43 | oddRow = (index % 2 != 0); |
44 | } | 44 | } |
45 | 45 | ||
46 | ShadedListItem::~ShadedListItem() | 46 | ShadedListItem::~ShadedListItem() |
47 | { | 47 | { |
48 | 48 | ||
49 | } | 49 | } |
50 | 50 | ||
51 | 51 | ||
52 | void ShadedListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) | 52 | void ShadedListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) |
53 | { | 53 | { |
54 | QColorGroup colors(cg); | 54 | QColorGroup colors(cg); |
55 | #if QT_VERSION >=300 | 55 | #if QT_VERSION >= 0x030000 |
56 | const QColorGroup::ColorRole crole = QColorGroup::Base; | 56 | const QColorGroup::ColorRole crole = QColorGroup::Base; |
57 | // const QWidget::BackgroundMode bgmode = lv->viewport()->backgroundMode(); | 57 | // const QWidget::BackgroundMode bgmode = lv->viewport()->backgroundMode(); |
58 | // const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode(bgmode); | 58 | // const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode(bgmode); |
59 | #else | 59 | #else |
60 | const QColorGroup::ColorRole crole = QColorGroup::Base; | 60 | const QColorGroup::ColorRole crole = QColorGroup::Base; |
61 | #endif | 61 | #endif |
62 | if (oddRow) { | 62 | if (oddRow) { |
63 | colors.setColor(crole, *ZSafe::oddRowColor); | 63 | colors.setColor(crole, *ZSafe::oddRowColor); |
64 | } | 64 | } |
65 | else { | 65 | else { |
66 | colors.setColor(crole, *ZSafe::evenRowColor); | 66 | colors.setColor(crole, *ZSafe::evenRowColor); |
67 | } | 67 | } |
68 | QListViewItem::paintCell(p, colors, column, width, alignment); | 68 | QListViewItem::paintCell(p, colors, column, width, alignment); |
69 | } | 69 | } |
diff --git a/noncore/net/wellenreiter/gui/configwindow.cpp b/noncore/net/wellenreiter/gui/configwindow.cpp index 1670f93..9ec5af9 100644 --- a/noncore/net/wellenreiter/gui/configwindow.cpp +++ b/noncore/net/wellenreiter/gui/configwindow.cpp | |||
@@ -1,496 +1,496 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2002-2004 Michael 'Mickey' Lauer. All rights reserved. | 2 | ** Copyright (C) 2002-2004 Michael 'Mickey' Lauer. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Wellenreiter II. | 4 | ** This file is part of Wellenreiter II. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | **********************************************************************/ | 14 | **********************************************************************/ |
15 | 15 | ||
16 | /* LOCAL */ | 16 | /* LOCAL */ |
17 | #include "configwindow.h" | 17 | #include "configwindow.h" |
18 | #include "mainwindow.h" | 18 | #include "mainwindow.h" |
19 | #include "protolistview.h" | 19 | #include "protolistview.h" |
20 | 20 | ||
21 | /* OPIE */ | 21 | /* OPIE */ |
22 | #include <opie2/onetwork.h> | 22 | #include <opie2/onetwork.h> |
23 | #ifdef QWS | 23 | #ifdef QWS |
24 | #include <opie2/oapplication.h> | 24 | #include <opie2/oapplication.h> |
25 | #include <opie2/oconfig.h> | 25 | #include <opie2/oconfig.h> |
26 | #include <opie2/odevice.h> | 26 | #include <opie2/odevice.h> |
27 | #include <opie2/odebug.h> | 27 | #include <opie2/odebug.h> |
28 | using namespace Opie::Core; | 28 | using namespace Opie::Core; |
29 | using namespace Opie::Net; | 29 | using namespace Opie::Net; |
30 | #endif | 30 | #endif |
31 | 31 | ||
32 | /* QT */ | 32 | /* QT */ |
33 | #include <qapplication.h> | 33 | #include <qapplication.h> |
34 | #include <qcheckbox.h> | 34 | #include <qcheckbox.h> |
35 | #include <qcombobox.h> | 35 | #include <qcombobox.h> |
36 | #include <qfile.h> | 36 | #include <qfile.h> |
37 | #include <qlineedit.h> | 37 | #include <qlineedit.h> |
38 | #include <qlayout.h> | 38 | #include <qlayout.h> |
39 | #include <qmap.h> | 39 | #include <qmap.h> |
40 | #include <qpushbutton.h> | 40 | #include <qpushbutton.h> |
41 | #include <qradiobutton.h> | 41 | #include <qradiobutton.h> |
42 | #include <qspinbox.h> | 42 | #include <qspinbox.h> |
43 | #include <qtabwidget.h> | 43 | #include <qtabwidget.h> |
44 | #include <qtoolbutton.h> | 44 | #include <qtoolbutton.h> |
45 | #include <qtextstream.h> | 45 | #include <qtextstream.h> |
46 | 46 | ||
47 | /* STD */ | 47 | /* STD */ |
48 | #include <assert.h> | 48 | #include <assert.h> |
49 | 49 | ||
50 | WellenreiterConfigWindow* WellenreiterConfigWindow::_instance = 0; | 50 | WellenreiterConfigWindow* WellenreiterConfigWindow::_instance = 0; |
51 | 51 | ||
52 | WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f ) | 52 | WellenreiterConfigWindow::WellenreiterConfigWindow( QWidget * parent, const char * name, WFlags f ) |
53 | :WellenreiterConfigBase( parent, name, true, f ) | 53 | :WellenreiterConfigBase( parent, name, true, f ) |
54 | { | 54 | { |
55 | _devicetype[ "cisco" ] = DEVTYPE_CISCO; | 55 | _devicetype[ "cisco" ] = DEVTYPE_CISCO; |
56 | _devicetype[ "wlan-ng" ] = DEVTYPE_WLAN_NG; | 56 | _devicetype[ "wlan-ng" ] = DEVTYPE_WLAN_NG; |
57 | _devicetype[ "hostap" ] = DEVTYPE_HOSTAP; | 57 | _devicetype[ "hostap" ] = DEVTYPE_HOSTAP; |
58 | _devicetype[ "orinoco" ] = DEVTYPE_ORINOCO; | 58 | _devicetype[ "orinoco" ] = DEVTYPE_ORINOCO; |
59 | _devicetype[ "<manual>" ] = DEVTYPE_MANUAL; | 59 | _devicetype[ "<manual>" ] = DEVTYPE_MANUAL; |
60 | _devicetype[ "<file>" ] = DEVTYPE_FILE; | 60 | _devicetype[ "<file>" ] = DEVTYPE_FILE; |
61 | 61 | ||
62 | // gather possible interface names from ONetwork | 62 | // gather possible interface names from ONetwork |
63 | ONetwork* net = ONetwork::instance(); | 63 | ONetwork* net = ONetwork::instance(); |
64 | ONetwork::InterfaceIterator it = net->iterator(); | 64 | ONetwork::InterfaceIterator it = net->iterator(); |
65 | while ( it.current() ) | 65 | while ( it.current() ) |
66 | { | 66 | { |
67 | if ( it.current()->isWireless() ) | 67 | if ( it.current()->isWireless() ) |
68 | interfaceName->insertItem( it.current()->name() ); | 68 | interfaceName->insertItem( it.current()->name() ); |
69 | ++it; | 69 | ++it; |
70 | } | 70 | } |
71 | 71 | ||
72 | load(); | 72 | load(); |
73 | 73 | ||
74 | #ifdef Q_WS_X11 // We're on X11: adding an Ok-Button for the Dialog here | 74 | #ifdef Q_WS_X11 // We're on X11: adding an Ok-Button for the Dialog here |
75 | QPushButton* okButton = new QPushButton( "ok", this ); | 75 | QPushButton* okButton = new QPushButton( "ok", this ); |
76 | okButton->show(); | 76 | okButton->show(); |
77 | WellenreiterConfigBaseLayout->addWidget( okButton, 0, 3 ); //FIXME: rename this in configbase.ui | 77 | WellenreiterConfigBaseLayout->addWidget( okButton, 0, 3 ); //FIXME: rename this in configbase.ui |
78 | connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); | 78 | connect( okButton, SIGNAL( clicked() ), this, SLOT( accept() ) ); |
79 | #endif | 79 | #endif |
80 | 80 | ||
81 | WellenreiterConfigWindow::_instance = this; | 81 | WellenreiterConfigWindow::_instance = this; |
82 | 82 | ||
83 | connect( deviceType, SIGNAL( activated(int) ), this, SLOT( changedDeviceType(int) ) ); | 83 | connect( deviceType, SIGNAL( activated(int) ), this, SLOT( changedDeviceType(int) ) ); |
84 | connect( newNetworkAction, SIGNAL( activated(int) ), this, SLOT( changedNetworkAction(int) ) ); | 84 | connect( newNetworkAction, SIGNAL( activated(int) ), this, SLOT( changedNetworkAction(int) ) ); |
85 | connect( newClientAction, SIGNAL( activated(int) ), this, SLOT( changedClientAction(int) ) ); | 85 | connect( newClientAction, SIGNAL( activated(int) ), this, SLOT( changedClientAction(int) ) ); |
86 | connect( newStationAction, SIGNAL( activated(int) ), this, SLOT( changedStationAction(int) ) ); | 86 | connect( newStationAction, SIGNAL( activated(int) ), this, SLOT( changedStationAction(int) ) ); |
87 | connect( getCaptureFileName, SIGNAL( clicked() ), this, SLOT( getCaptureFileNameClicked() ) ); | 87 | connect( getCaptureFileName, SIGNAL( clicked() ), this, SLOT( getCaptureFileNameClicked() ) ); |
88 | 88 | ||
89 | // make the checkbox 'channelAll' control all other channels | 89 | // make the checkbox 'channelAll' control all other channels |
90 | connect( channelAll, SIGNAL( stateChanged(int) ), this, SLOT( channelAllClicked(int) ) ); | 90 | connect( channelAll, SIGNAL( stateChanged(int) ), this, SLOT( channelAllClicked(int) ) ); |
91 | 91 | ||
92 | connect( autodetect, SIGNAL( clicked() ), this, SLOT( performAutodetection() ) ); | 92 | connect( autodetect, SIGNAL( clicked() ), this, SLOT( performAutodetection() ) ); |
93 | 93 | ||
94 | // hide tab4 (parse) until Wellenreiter 1.2 | 94 | // hide tab4 (parse) until Wellenreiter 1.2 |
95 | tab->removePage( tab_4 ); | 95 | tab->removePage( tab_4 ); |
96 | }; | 96 | }; |
97 | 97 | ||
98 | 98 | ||
99 | void WellenreiterConfigWindow::accept() | 99 | void WellenreiterConfigWindow::accept() |
100 | { | 100 | { |
101 | save(); | 101 | save(); |
102 | QDialog::accept(); | 102 | QDialog::accept(); |
103 | } | 103 | } |
104 | 104 | ||
105 | 105 | ||
106 | WellenreiterConfigWindow::~WellenreiterConfigWindow() | 106 | WellenreiterConfigWindow::~WellenreiterConfigWindow() |
107 | { | 107 | { |
108 | } | 108 | } |
109 | 109 | ||
110 | 110 | ||
111 | void WellenreiterConfigWindow::performAutodetection() | 111 | void WellenreiterConfigWindow::performAutodetection() |
112 | { | 112 | { |
113 | //TODO: insert modal splash screen here | 113 | //TODO: insert modal splash screen here |
114 | // and sleep a second, so that it looks | 114 | // and sleep a second, so that it looks |
115 | // like we're actually doing something fancy... ;-) | 115 | // like we're actually doing something fancy... ;-) |
116 | 116 | ||
117 | odebug << "WellenreiterConfigWindow::performAutodetection()" << oendl; | 117 | odebug << "WellenreiterConfigWindow::performAutodetection()" << oendl; |
118 | 118 | ||
119 | // try to guess device type | 119 | // try to guess device type |
120 | QFile m( "/proc/modules" ); | 120 | QFile m( "/proc/modules" ); |
121 | if ( m.open( IO_ReadOnly ) ) | 121 | if ( m.open( IO_ReadOnly ) ) |
122 | { | 122 | { |
123 | int devicetype(0); | 123 | int devicetype(0); |
124 | QString line; | 124 | QString line; |
125 | QTextStream modules( &m ); | 125 | QTextStream modules( &m ); |
126 | while( !modules.atEnd() && !devicetype ) | 126 | while( !modules.atEnd() && !devicetype ) |
127 | { | 127 | { |
128 | modules >> line; | 128 | modules >> line; |
129 | if ( line.contains( "cisco" ) ) devicetype = DEVTYPE_CISCO; | 129 | if ( line.contains( "cisco" ) ) devicetype = DEVTYPE_CISCO; |
130 | else if ( line.contains( "hostap" ) ) devicetype = DEVTYPE_HOSTAP; | 130 | else if ( line.contains( "hostap" ) ) devicetype = DEVTYPE_HOSTAP; |
131 | else if ( line.contains( "prism" ) ) devicetype = DEVTYPE_WLAN_NG; | 131 | else if ( line.contains( "prism" ) ) devicetype = DEVTYPE_WLAN_NG; |
132 | else if ( line.contains( "orinoco" ) ) devicetype = DEVTYPE_ORINOCO; | 132 | else if ( line.contains( "orinoco" ) ) devicetype = DEVTYPE_ORINOCO; |
133 | } | 133 | } |
134 | if ( devicetype ) | 134 | if ( devicetype ) |
135 | { | 135 | { |
136 | deviceType->setCurrentItem( devicetype ); | 136 | deviceType->setCurrentItem( devicetype ); |
137 | _guess = devicetype; | 137 | _guess = devicetype; |
138 | odebug << "Wellenreiter: guessed device type to be #" << devicetype << "" << oendl; | 138 | odebug << "Wellenreiter: guessed device type to be #" << devicetype << "" << oendl; |
139 | } | 139 | } |
140 | } | 140 | } |
141 | } | 141 | } |
142 | 142 | ||
143 | 143 | ||
144 | int WellenreiterConfigWindow::driverType() const | 144 | int WellenreiterConfigWindow::driverType() const |
145 | { | 145 | { |
146 | QString name = deviceType->currentText(); | 146 | QString name = deviceType->currentText(); |
147 | if ( _devicetype.contains( name ) ) | 147 | if ( _devicetype.contains( name ) ) |
148 | { | 148 | { |
149 | return _devicetype[name]; | 149 | return _devicetype[name]; |
150 | } | 150 | } |
151 | else | 151 | else |
152 | { | 152 | { |
153 | return 0; | 153 | return 0; |
154 | } | 154 | } |
155 | }; | 155 | }; |
156 | 156 | ||
157 | 157 | ||
158 | int WellenreiterConfigWindow::hoppingInterval() const | 158 | int WellenreiterConfigWindow::hoppingInterval() const |
159 | { | 159 | { |
160 | return hopInterval->cleanText().toInt(); | 160 | return hopInterval->cleanText().toInt(); |
161 | } | 161 | } |
162 | 162 | ||
163 | 163 | ||
164 | bool WellenreiterConfigWindow::usePrismHeader() const | 164 | bool WellenreiterConfigWindow::usePrismHeader() const |
165 | { | 165 | { |
166 | return prismHeader->isChecked(); | 166 | return prismHeader->isChecked(); |
167 | } | 167 | } |
168 | 168 | ||
169 | 169 | ||
170 | bool WellenreiterConfigWindow::isChannelChecked( int channel ) const | 170 | bool WellenreiterConfigWindow::isChannelChecked( int channel ) const |
171 | { | 171 | { |
172 | switch ( channel ) | 172 | switch ( channel ) |
173 | { | 173 | { |
174 | case 1: return channel1->isOn(); | 174 | case 1: return channel1->isOn(); |
175 | case 2: return channel2->isOn(); | 175 | case 2: return channel2->isOn(); |
176 | case 3: return channel3->isOn(); | 176 | case 3: return channel3->isOn(); |
177 | case 4: return channel4->isOn(); | 177 | case 4: return channel4->isOn(); |
178 | case 5: return channel5->isOn(); | 178 | case 5: return channel5->isOn(); |
179 | case 6: return channel6->isOn(); | 179 | case 6: return channel6->isOn(); |
180 | case 7: return channel7->isOn(); | 180 | case 7: return channel7->isOn(); |
181 | case 8: return channel8->isOn(); | 181 | case 8: return channel8->isOn(); |
182 | case 9: return channel9->isOn(); | 182 | case 9: return channel9->isOn(); |
183 | case 10: return channel10->isOn(); | 183 | case 10: return channel10->isOn(); |
184 | case 11: return channel11->isOn(); | 184 | case 11: return channel11->isOn(); |
185 | case 12: return channel12->isOn(); | 185 | case 12: return channel12->isOn(); |
186 | case 13: return channel13->isOn(); | 186 | case 13: return channel13->isOn(); |
187 | case 14: return channel14->isOn(); | 187 | case 14: return channel14->isOn(); |
188 | default: return false; | 188 | default: return false; |
189 | } | 189 | } |
190 | 190 | ||
191 | 191 | ||
192 | } | 192 | } |
193 | 193 | ||
194 | 194 | ||
195 | void WellenreiterConfigWindow::changedDeviceType(int t) | 195 | void WellenreiterConfigWindow::changedDeviceType(int t) |
196 | { | 196 | { |
197 | if ( t != DEVTYPE_FILE ) return; | 197 | if ( t != DEVTYPE_FILE ) return; |
198 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(false); | 198 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(false); |
199 | if ( !name.isEmpty() && QFile::exists( name ) ) | 199 | if ( !name.isEmpty() && QFile::exists( name ) ) |
200 | { | 200 | { |
201 | interfaceName->insertItem( name ); | 201 | interfaceName->insertItem( name ); |
202 | interfaceName->setCurrentItem( interfaceName->count()-1 ); | 202 | interfaceName->setCurrentItem( interfaceName->count()-1 ); |
203 | } | 203 | } |
204 | else | 204 | else |
205 | { | 205 | { |
206 | deviceType->setCurrentItem( _guess ); | 206 | deviceType->setCurrentItem( _guess ); |
207 | } | 207 | } |
208 | 208 | ||
209 | } | 209 | } |
210 | 210 | ||
211 | 211 | ||
212 | void WellenreiterConfigWindow::synchronizeActionsAndScripts() | 212 | void WellenreiterConfigWindow::synchronizeActionsAndScripts() |
213 | { | 213 | { |
214 | if ( newNetworkAction->currentItem() == 4 ) newNetworkScript->show(); else newNetworkScript->hide(); | 214 | if ( newNetworkAction->currentItem() == 4 ) newNetworkScript->show(); else newNetworkScript->hide(); |
215 | if ( newClientAction->currentItem() == 4 ) newClientScript->show(); else newClientScript->hide(); | 215 | if ( newClientAction->currentItem() == 4 ) newClientScript->show(); else newClientScript->hide(); |
216 | if ( newStationAction->currentItem() == 4 ) newStationScript->show(); else newStationScript->hide(); | 216 | if ( newStationAction->currentItem() == 4 ) newStationScript->show(); else newStationScript->hide(); |
217 | 217 | ||
218 | //newNetworkScript->setEnabled( newNetworkAction->currentItem() == 4 ); | 218 | //newNetworkScript->setEnabled( newNetworkAction->currentItem() == 4 ); |
219 | //newClientScript->setEnabled( newClientAction->currentItem() == 4 ); | 219 | //newClientScript->setEnabled( newClientAction->currentItem() == 4 ); |
220 | //newStationScript->setEnabled( newStationAction->currentItem() == 4 ); | 220 | //newStationScript->setEnabled( newStationAction->currentItem() == 4 ); |
221 | } | 221 | } |
222 | 222 | ||
223 | 223 | ||
224 | void WellenreiterConfigWindow::changedNetworkAction(int ) | 224 | void WellenreiterConfigWindow::changedNetworkAction(int ) |
225 | { | 225 | { |
226 | synchronizeActionsAndScripts(); | 226 | synchronizeActionsAndScripts(); |
227 | } | 227 | } |
228 | 228 | ||
229 | 229 | ||
230 | void WellenreiterConfigWindow::changedClientAction(int ) | 230 | void WellenreiterConfigWindow::changedClientAction(int ) |
231 | { | 231 | { |
232 | synchronizeActionsAndScripts(); | 232 | synchronizeActionsAndScripts(); |
233 | } | 233 | } |
234 | 234 | ||
235 | 235 | ||
236 | void WellenreiterConfigWindow::changedStationAction(int ) | 236 | void WellenreiterConfigWindow::changedStationAction(int ) |
237 | { | 237 | { |
238 | synchronizeActionsAndScripts(); | 238 | synchronizeActionsAndScripts(); |
239 | } | 239 | } |
240 | 240 | ||
241 | 241 | ||
242 | void WellenreiterConfigWindow::getCaptureFileNameClicked() | 242 | void WellenreiterConfigWindow::getCaptureFileNameClicked() |
243 | { | 243 | { |
244 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); | 244 | QString name = ( (WellenreiterMainWindow*) qApp->mainWidget() )->getFileName(true); |
245 | odebug << "name = " << name << "" << oendl; | 245 | odebug << "name = " << name << "" << oendl; |
246 | if ( !name.isEmpty() ) | 246 | if ( !name.isEmpty() ) |
247 | { | 247 | { |
248 | captureFileName->setText( name ); | 248 | captureFileName->setText( name ); |
249 | } | 249 | } |
250 | } | 250 | } |
251 | 251 | ||
252 | 252 | ||
253 | void WellenreiterConfigWindow::channelAllClicked(int state) | 253 | void WellenreiterConfigWindow::channelAllClicked(int state) |
254 | { | 254 | { |
255 | bool b = state; | 255 | bool b = state; |
256 | channel1->setChecked( b ); | 256 | channel1->setChecked( b ); |
257 | channel2->setChecked( b ); | 257 | channel2->setChecked( b ); |
258 | channel3->setChecked( b ); | 258 | channel3->setChecked( b ); |
259 | channel4->setChecked( b ); | 259 | channel4->setChecked( b ); |
260 | channel5->setChecked( b ); | 260 | channel5->setChecked( b ); |
261 | channel6->setChecked( b ); | 261 | channel6->setChecked( b ); |
262 | channel7->setChecked( b ); | 262 | channel7->setChecked( b ); |
263 | channel8->setChecked( b ); | 263 | channel8->setChecked( b ); |
264 | channel9->setChecked( b ); | 264 | channel9->setChecked( b ); |
265 | channel10->setChecked( b ); | 265 | channel10->setChecked( b ); |
266 | channel11->setChecked( b ); | 266 | channel11->setChecked( b ); |
267 | channel12->setChecked( b ); | 267 | channel12->setChecked( b ); |
268 | channel13->setChecked( b ); | 268 | channel13->setChecked( b ); |
269 | channel14->setChecked( b ); | 269 | channel14->setChecked( b ); |
270 | } | 270 | } |
271 | 271 | ||
272 | 272 | ||
273 | bool WellenreiterConfigWindow::useGPS() const | 273 | bool WellenreiterConfigWindow::useGPS() const |
274 | { | 274 | { |
275 | return enableGPS->isChecked(); | 275 | return enableGPS->isChecked(); |
276 | } | 276 | } |
277 | 277 | ||
278 | 278 | ||
279 | const QString WellenreiterConfigWindow::gpsHost() const | 279 | const QString WellenreiterConfigWindow::gpsHost() const |
280 | { | 280 | { |
281 | return useGPS() ? gpsdHost->currentText() : QString::null; | 281 | return useGPS() ? gpsdHost->currentText() : QString::null; |
282 | } | 282 | } |
283 | 283 | ||
284 | 284 | ||
285 | int WellenreiterConfigWindow::gpsPort() const | 285 | int WellenreiterConfigWindow::gpsPort() const |
286 | { | 286 | { |
287 | return useGPS() ? gpsdPort->value() : -1; | 287 | return useGPS() ? gpsdPort->value() : -1; |
288 | } | 288 | } |
289 | 289 | ||
290 | 290 | ||
291 | void WellenreiterConfigWindow::performAction( const QString& type, | 291 | void WellenreiterConfigWindow::performAction( const QString& type, |
292 | const QString& essid, | 292 | const QString& essid, |
293 | const QString& mac, | 293 | const QString& mac, |
294 | bool wep, | 294 | bool wep, |
295 | int channel, | 295 | int channel, |
296 | int /* signal */ | 296 | int /* signal */ |
297 | /* , const GpsLocation& loc */ ) | 297 | /* , const GpsLocation& loc */ ) |
298 | { | 298 | { |
299 | int action; | 299 | int action; |
300 | QString script; | 300 | QString script; |
301 | 301 | ||
302 | if ( type == "network" ) | 302 | if ( type == "network" ) |
303 | { | 303 | { |
304 | action = newNetworkAction->currentItem(); | 304 | action = newNetworkAction->currentItem(); |
305 | script = newNetworkScript->text(); | 305 | script = newNetworkScript->text(); |
306 | } | 306 | } |
307 | else if ( type == "managed" || type == "adhoc" ) | 307 | else if ( type == "managed" || type == "adhoc" ) |
308 | { | 308 | { |
309 | action = newClientAction->currentItem(); | 309 | action = newClientAction->currentItem(); |
310 | script = newClientScript->text(); | 310 | script = newClientScript->text(); |
311 | } | 311 | } |
312 | else if ( type == "station" ) | 312 | else if ( type == "station" ) |
313 | { | 313 | { |
314 | action = newStationAction->currentItem(); | 314 | action = newStationAction->currentItem(); |
315 | script = newStationScript->text(); | 315 | script = newStationScript->text(); |
316 | } | 316 | } |
317 | else | 317 | else |
318 | { | 318 | { |
319 | owarn << "WellenreiterConfigWindow::performAction(): unknown type '" << type << "'" << oendl; | 319 | owarn << "WellenreiterConfigWindow::performAction(): unknown type '" << type << "'" << oendl; |
320 | return; | 320 | return; |
321 | } | 321 | } |
322 | 322 | ||
323 | odebug << "for event '" << type << "' I'm going to perform action " << action << " (script='" << script << "')" << oendl; | 323 | odebug << "for event '" << type << "' I'm going to perform action " << action << " (script='" << script << "')" << oendl; |
324 | 324 | ||
325 | switch( action ) | 325 | switch( action ) |
326 | { | 326 | { |
327 | case 0: /* Ignore */ return; | 327 | case 0: /* Ignore */ return; |
328 | case 1: /* Play Alarm */ ODevice::inst()->playAlarmSound(); return; | 328 | case 1: /* Play Alarm */ ODevice::inst()->playAlarmSound(); return; |
329 | case 2: /* Play Click */ ODevice::inst()->playTouchSound(); return; | 329 | case 2: /* Play Click */ ODevice::inst()->playTouchSound(); return; |
330 | case 3: /* Blink LED */ break; //FIXME: Implement this | 330 | case 3: /* Blink LED */ break; //FIXME: Implement this |
331 | case 4: /* Run Script */ | 331 | case 4: /* Run Script */ |
332 | { | 332 | { |
333 | /** | 333 | /** |
334 | * | 334 | * |
335 | * Script Substitution Information: | 335 | * Script Substitution Information: |
336 | * | 336 | * |
337 | * $SSID = SSID | 337 | * $SSID = SSID |
338 | * $MAC = MAC | 338 | * $MAC = MAC |
339 | * $WEP = Wep | 339 | * $WEP = Wep |
340 | * $CHAN = Channel | 340 | * $CHAN = Channel |
341 | * | 341 | * |
342 | **/ | 342 | **/ |
343 | script = script.replace( QRegExp( "$SSID" ), essid ); | 343 | script = script.replace( QRegExp( "$SSID" ), essid ); |
344 | script = script.replace( QRegExp( "$MAC" ), mac ); | 344 | script = script.replace( QRegExp( "$MAC" ), mac ); |
345 | script = script.replace( QRegExp( "$WEP" ), wep ? QString( "true" ) : QString( "false" ) ); | 345 | script = script.replace( QRegExp( "$WEP" ), wep ? QString( "true" ) : QString( "false" ) ); |
346 | script = script.replace( QRegExp( "$CHAN" ), QString::number( channel ) ); | 346 | script = script.replace( QRegExp( "$CHAN" ), QString::number( channel ) ); |
347 | 347 | ||
348 | odebug << "going to call script '" << script << "'" << oendl; | 348 | odebug << "going to call script '" << script << "'" << oendl; |
349 | ::system( script ); | 349 | ::system( script ); |
350 | odebug << "script returned." << oendl; | 350 | odebug << "script returned." << oendl; |
351 | return; | 351 | return; |
352 | } | 352 | } |
353 | default: assert( false ); | 353 | default: assert( false ); |
354 | } | 354 | } |
355 | } | 355 | } |
356 | 356 | ||
357 | 357 | ||
358 | void WellenreiterConfigWindow::load() | 358 | void WellenreiterConfigWindow::load() |
359 | { | 359 | { |
360 | #ifdef Q_WS_X11 | 360 | #ifdef Q_WS_X11 |
361 | #warning Persistent Configuration not yet implemented for standalone X11 build | 361 | #warning Persistent Configuration not yet implemented for standalone X11 build |
362 | performAutodetection(); | 362 | performAutodetection(); |
363 | #else | 363 | #else |
364 | odebug << "loading configuration settings..." << oendl; | 364 | odebug << "loading configuration settings..." << oendl; |
365 | 365 | ||
366 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ | 366 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ |
367 | 367 | ||
368 | OConfig* c = oApp->config(); | 368 | OConfig* c = oApp->config(); |
369 | 369 | ||
370 | c->setGroup( "Interface" ); | 370 | c->setGroup( "Interface" ); |
371 | 371 | ||
372 | QString interface = c->readEntry( "name", "<none>" ); | 372 | QString interface = c->readEntry( "name", "<none>" ); |
373 | if ( interface != "<none>" ) | 373 | if ( interface != "<none>" ) |
374 | { | 374 | { |
375 | #if QT_VERSION < 300 | 375 | #if QT_VERSION < 0x030000 |
376 | interfaceName->insertItem( interface, 0 ); | 376 | interfaceName->insertItem( interface, 0 ); |
377 | interfaceName->setCurrentItem( 0 ); | 377 | interfaceName->setCurrentItem( 0 ); |
378 | #else | 378 | #else |
379 | interfaceName->setCurrentText( interface ); | 379 | interfaceName->setCurrentText( interface ); |
380 | #endif | 380 | #endif |
381 | 381 | ||
382 | QString device = c->readEntry( "type", "<select>" ); | 382 | QString device = c->readEntry( "type", "<select>" ); |
383 | #if QT_VERSION < 300 | 383 | #if QT_VERSION < 0x030000 |
384 | for ( int i = 0; i < deviceType->count(); ++i ) | 384 | for ( int i = 0; i < deviceType->count(); ++i ) |
385 | { | 385 | { |
386 | if ( deviceType->text( i ) == device ) | 386 | if ( deviceType->text( i ) == device ) |
387 | { | 387 | { |
388 | deviceType->setCurrentItem( i ); | 388 | deviceType->setCurrentItem( i ); |
389 | break; | 389 | break; |
390 | } | 390 | } |
391 | } | 391 | } |
392 | #else | 392 | #else |
393 | deviceType->setCurrentText( device ); | 393 | deviceType->setCurrentText( device ); |
394 | #endif | 394 | #endif |
395 | } | 395 | } |
396 | else | 396 | else |
397 | { | 397 | { |
398 | performAutodetection(); | 398 | performAutodetection(); |
399 | } | 399 | } |
400 | 400 | ||
401 | prismHeader->setChecked( c->readBoolEntry( "prism", false ) ); | 401 | prismHeader->setChecked( c->readBoolEntry( "prism", false ) ); |
402 | hopChannels->setChecked( c->readBoolEntry( "hop", true ) ); | 402 | hopChannels->setChecked( c->readBoolEntry( "hop", true ) ); |
403 | hopInterval->setValue( c->readNumEntry( "interval", 250 ) ); | 403 | hopInterval->setValue( c->readNumEntry( "interval", 250 ) ); |
404 | adaptiveHopping->setChecked( c->readBoolEntry( "adaptive", true ) ); | 404 | adaptiveHopping->setChecked( c->readBoolEntry( "adaptive", true ) ); |
405 | 405 | ||
406 | c->setGroup( "Capture" ); | 406 | c->setGroup( "Capture" ); |
407 | writeCaptureFile->setChecked( c->readBoolEntry( "writeCaptureFile", true ) ); | 407 | writeCaptureFile->setChecked( c->readBoolEntry( "writeCaptureFile", true ) ); |
408 | captureFileName->setEnabled( writeCaptureFile->isChecked() ); | 408 | captureFileName->setEnabled( writeCaptureFile->isChecked() ); |
409 | getCaptureFileName->setEnabled( writeCaptureFile->isChecked() ); | 409 | getCaptureFileName->setEnabled( writeCaptureFile->isChecked() ); |
410 | parsePackets->setEnabled( writeCaptureFile->isChecked() ); | 410 | parsePackets->setEnabled( writeCaptureFile->isChecked() ); |
411 | captureFileName->setText( c->readEntry( "filename", "/tmp/capture" ) ); | 411 | captureFileName->setText( c->readEntry( "filename", "/tmp/capture" ) ); |
412 | hexViewBufferUnlimited->setChecked( c->readBoolEntry( "hexViewBufferUnlimited", true ) ); | 412 | hexViewBufferUnlimited->setChecked( c->readBoolEntry( "hexViewBufferUnlimited", true ) ); |
413 | hexViewBufferLimited->setChecked( !c->readBoolEntry( "hexViewBufferUnlimited", true ) ); | 413 | hexViewBufferLimited->setChecked( !c->readBoolEntry( "hexViewBufferUnlimited", true ) ); |
414 | hexViewBufferSize->setValue( c->readNumEntry( "hexViewBufferSize", 2000 ) ); | 414 | hexViewBufferSize->setValue( c->readNumEntry( "hexViewBufferSize", 2000 ) ); |
415 | 415 | ||
416 | c->setGroup( "UI" ); | 416 | c->setGroup( "UI" ); |
417 | lookupVendor->setChecked( c->readBoolEntry( "lookupVendor", true ) ); | 417 | lookupVendor->setChecked( c->readBoolEntry( "lookupVendor", true ) ); |
418 | openTree->setChecked( c->readBoolEntry( "openTree", true ) ); | 418 | openTree->setChecked( c->readBoolEntry( "openTree", true ) ); |
419 | disablePM->setChecked( c->readBoolEntry( "disablePM", true ) ); | 419 | disablePM->setChecked( c->readBoolEntry( "disablePM", true ) ); |
420 | newNetworkAction->setCurrentItem( c->readNumEntry( "newNetworkAction", 1 ) ); // Default: Play Alarm | 420 | newNetworkAction->setCurrentItem( c->readNumEntry( "newNetworkAction", 1 ) ); // Default: Play Alarm |
421 | newNetworkScript->setText( c->readEntry( "newNetworkScript", "" ) ); | 421 | newNetworkScript->setText( c->readEntry( "newNetworkScript", "" ) ); |
422 | newClientAction->setCurrentItem( c->readNumEntry( "newClientAction", 2 ) ); // Default: Play Click | 422 | newClientAction->setCurrentItem( c->readNumEntry( "newClientAction", 2 ) ); // Default: Play Click |
423 | newClientScript->setText( c->readEntry( "newClientScript", "" ) ); | 423 | newClientScript->setText( c->readEntry( "newClientScript", "" ) ); |
424 | newStationAction->setCurrentItem( c->readNumEntry( "newStationAction", 2 ) ); // Default: Play Click | 424 | newStationAction->setCurrentItem( c->readNumEntry( "newStationAction", 2 ) ); // Default: Play Click |
425 | newStationScript->setText( c->readEntry( "newStationScript", "" ) ); | 425 | newStationScript->setText( c->readEntry( "newStationScript", "" ) ); |
426 | synchronizeActionsAndScripts(); // needed for showing/hiding the script QLineEdit on demand | 426 | synchronizeActionsAndScripts(); // needed for showing/hiding the script QLineEdit on demand |
427 | 427 | ||
428 | c->setGroup( "GPS" ); | 428 | c->setGroup( "GPS" ); |
429 | enableGPS->setChecked( c->readBoolEntry( "use", false ) ); | 429 | enableGPS->setChecked( c->readBoolEntry( "use", false ) ); |
430 | #if QT_VERSION < 300 | 430 | #if QT_VERSION < 0x030000 |
431 | gpsdHost->insertItem( c->readEntry( "host", "localhost" ), 0 ); | 431 | gpsdHost->insertItem( c->readEntry( "host", "localhost" ), 0 ); |
432 | gpsdHost->setCurrentItem( 0 ); | 432 | gpsdHost->setCurrentItem( 0 ); |
433 | #else | 433 | #else |
434 | gpsdHost->setCurrentText( c->readEntry( "host", "localhost" ) ); | 434 | gpsdHost->setCurrentText( c->readEntry( "host", "localhost" ) ); |
435 | #endif | 435 | #endif |
436 | gpsdPort->setValue( c->readNumEntry( "port", 2947 ) ); | 436 | gpsdPort->setValue( c->readNumEntry( "port", 2947 ) ); |
437 | startGPS->setChecked( c->readBoolEntry( "start", false ) ); | 437 | startGPS->setChecked( c->readBoolEntry( "start", false ) ); |
438 | commandGPS->setText( c->readEntry( "command", "gpsd -p /dev/ttyS3 -s 57600" ) ); | 438 | commandGPS->setText( c->readEntry( "command", "gpsd -p /dev/ttyS3 -s 57600" ) ); |
439 | 439 | ||
440 | #endif | 440 | #endif |
441 | } | 441 | } |
442 | 442 | ||
443 | 443 | ||
444 | void WellenreiterConfigWindow::save() | 444 | void WellenreiterConfigWindow::save() |
445 | { | 445 | { |
446 | #ifdef Q_WS_X11 | 446 | #ifdef Q_WS_X11 |
447 | #warning Persistent Configuration not yet implemented for standalone X11 build | 447 | #warning Persistent Configuration not yet implemented for standalone X11 build |
448 | #else | 448 | #else |
449 | odebug << "saving configuration settings..." << oendl; | 449 | odebug << "saving configuration settings..." << oendl; |
450 | 450 | ||
451 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ | 451 | /* This is dumb monkey typing stuff... We _need_ to do this automatically! */ |
452 | 452 | ||
453 | OConfig* c = oApp->config(); | 453 | OConfig* c = oApp->config(); |
454 | 454 | ||
455 | c->setGroup( "Interface" ); | 455 | c->setGroup( "Interface" ); |
456 | c->writeEntry( "name", interfaceName->currentText() ); | 456 | c->writeEntry( "name", interfaceName->currentText() ); |
457 | c->writeEntry( "type", deviceType->currentText() ); | 457 | c->writeEntry( "type", deviceType->currentText() ); |
458 | c->writeEntry( "prism", prismHeader->isChecked() ); | 458 | c->writeEntry( "prism", prismHeader->isChecked() ); |
459 | c->writeEntry( "hop", hopChannels->isChecked() ); | 459 | c->writeEntry( "hop", hopChannels->isChecked() ); |
460 | c->writeEntry( "interval", hopInterval->value() ); | 460 | c->writeEntry( "interval", hopInterval->value() ); |
461 | c->writeEntry( "adaptive", adaptiveHopping->isChecked() ); | 461 | c->writeEntry( "adaptive", adaptiveHopping->isChecked() ); |
462 | 462 | ||
463 | c->setGroup( "Capture" ); | 463 | c->setGroup( "Capture" ); |
464 | c->writeEntry( "writeCaptureFile", writeCaptureFile->isChecked() ); | 464 | c->writeEntry( "writeCaptureFile", writeCaptureFile->isChecked() ); |
465 | c->writeEntry( "filename", captureFileName->text() ); | 465 | c->writeEntry( "filename", captureFileName->text() ); |
466 | c->writeEntry( "hexViewBufferUnlimited", hexViewBufferUnlimited->isChecked() ); | 466 | c->writeEntry( "hexViewBufferUnlimited", hexViewBufferUnlimited->isChecked() ); |
467 | c->writeEntry( "hexViewBufferSize", hexViewBufferSize->value() ); | 467 | c->writeEntry( "hexViewBufferSize", hexViewBufferSize->value() ); |
468 | 468 | ||
469 | c->setGroup( "UI" ); | 469 | c->setGroup( "UI" ); |
470 | c->writeEntry( "lookupVendor", lookupVendor->isChecked() ); | 470 | c->writeEntry( "lookupVendor", lookupVendor->isChecked() ); |
471 | c->writeEntry( "openTree", openTree->isChecked() ); | 471 | c->writeEntry( "openTree", openTree->isChecked() ); |
472 | c->writeEntry( "disablePM", disablePM->isChecked() ); | 472 | c->writeEntry( "disablePM", disablePM->isChecked() ); |
473 | c->writeEntry( "newNetworkAction", newNetworkAction->currentItem() ); | 473 | c->writeEntry( "newNetworkAction", newNetworkAction->currentItem() ); |
474 | c->writeEntry( "newNetworkScript", newNetworkScript->text() ); | 474 | c->writeEntry( "newNetworkScript", newNetworkScript->text() ); |
475 | c->writeEntry( "newClientAction", newClientAction->currentItem() ); | 475 | c->writeEntry( "newClientAction", newClientAction->currentItem() ); |
476 | c->writeEntry( "newClientScript", newClientScript->text() ); | 476 | c->writeEntry( "newClientScript", newClientScript->text() ); |
477 | c->writeEntry( "newStationAction", newStationAction->currentItem() ); | 477 | c->writeEntry( "newStationAction", newStationAction->currentItem() ); |
478 | c->writeEntry( "newStationScript", newStationScript->text() ); | 478 | c->writeEntry( "newStationScript", newStationScript->text() ); |
479 | 479 | ||
480 | c->setGroup( "GPS" ); | 480 | c->setGroup( "GPS" ); |
481 | c->writeEntry( "use", enableGPS->isChecked() ); | 481 | c->writeEntry( "use", enableGPS->isChecked() ); |
482 | c->writeEntry( "host", gpsdHost->currentText() ); | 482 | c->writeEntry( "host", gpsdHost->currentText() ); |
483 | c->writeEntry( "port", gpsdPort->value() ); | 483 | c->writeEntry( "port", gpsdPort->value() ); |
484 | c->writeEntry( "start", startGPS->isChecked() ); | 484 | c->writeEntry( "start", startGPS->isChecked() ); |
485 | c->writeEntry( "command", commandGPS->text() ); | 485 | c->writeEntry( "command", commandGPS->text() ); |
486 | 486 | ||
487 | c->write(); | 487 | c->write(); |
488 | 488 | ||
489 | #endif | 489 | #endif |
490 | } | 490 | } |
491 | 491 | ||
492 | 492 | ||
493 | int WellenreiterConfigWindow::hexViewBuffer() const | 493 | int WellenreiterConfigWindow::hexViewBuffer() const |
494 | { | 494 | { |
495 | return hexViewBufferUnlimited->isChecked() ? -1 : hexViewBufferSize->value(); | 495 | return hexViewBufferUnlimited->isChecked() ? -1 : hexViewBufferSize->value(); |
496 | } | 496 | } |
diff --git a/noncore/settings/appearance2/appearance.cpp b/noncore/settings/appearance2/appearance.cpp index 9638686..088171c 100644 --- a/noncore/settings/appearance2/appearance.cpp +++ b/noncore/settings/appearance2/appearance.cpp | |||
@@ -1,517 +1,517 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the OPIE Project | 2 | This file is part of the OPIE Project |
3 | Copyright (c) 2002 Trolltech AS <info@trolltech.com> | 3 | Copyright (c) 2002 Trolltech AS <info@trolltech.com> |
4 | =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> | 4 | =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> |
5 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | 5 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This file is free software; you can | 7 | _;:, .> :=|. This file is free software; you can |
8 | .> <`_, > . <= redistribute it and/or modify it under | 8 | .> <`_, > . <= redistribute it and/or modify it under |
9 | :`=1 )Y*s>-.-- : the terms of the GNU General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU General Public |
10 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
11 | - . .-<_> .<> Foundation; either version 2 of the License, | 11 | - . .-<_> .<> Foundation; either version 2 of the License, |
12 | ._= =} : or (at your option) any later version. | 12 | ._= =} : or (at your option) any later version. |
13 | .%`+i> _;_. | 13 | .%`+i> _;_. |
14 | .i_,=:_. -<s. This file is distributed in the hope that | 14 | .i_,=:_. -<s. This file is distributed in the hope that |
15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 15 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
16 | : .. .:, . . . without even the implied warranty of | 16 | : .. .:, . . . without even the implied warranty of |
17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 17 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU General |
19 | ..}^=.= = ; Public License for more details. | 19 | ..}^=.= = ; Public License for more details. |
20 | ++= -. .` .: | 20 | ++= -. .` .: |
21 | : = ...= . :.=- You should have received a copy of the GNU | 21 | : = ...= . :.=- You should have received a copy of the GNU |
22 | -. .:....=;==+<; General Public License along with this file; | 22 | -. .:....=;==+<; General Public License along with this file; |
23 | -_. . . )=. = see the file COPYING. If not, write to the | 23 | -_. . . )=. = see the file COPYING. If not, write to the |
24 | -- :-=` Free Software Foundation, Inc., | 24 | -- :-=` Free Software Foundation, Inc., |
25 | 59 Temple Place - Suite 330, | 25 | 59 Temple Place - Suite 330, |
26 | Boston, MA 02111-1307, USA. | 26 | Boston, MA 02111-1307, USA. |
27 | 27 | ||
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include "appearance.h" | 30 | #include "appearance.h" |
31 | #include "editScheme.h" | 31 | #include "editScheme.h" |
32 | #include "stylelistitem.h" | 32 | #include "stylelistitem.h" |
33 | #include "decolistitem.h" | 33 | #include "decolistitem.h" |
34 | #include "colorlistitem.h" | 34 | #include "colorlistitem.h" |
35 | #include "exceptlistitem.h" | 35 | #include "exceptlistitem.h" |
36 | #include "sample.h" | 36 | #include "sample.h" |
37 | 37 | ||
38 | /* OPIE */ | 38 | /* OPIE */ |
39 | #include <opie2/odevice.h> | 39 | #include <opie2/odevice.h> |
40 | #include <opie2/ofiledialog.h> | 40 | #include <opie2/ofiledialog.h> |
41 | #include <opie2/otabwidget.h> | 41 | #include <opie2/otabwidget.h> |
42 | #include <opie2/odebug.h> | 42 | #include <opie2/odebug.h> |
43 | 43 | ||
44 | #include <qpe/config.h> | 44 | #include <qpe/config.h> |
45 | #include <qpe/global.h> | 45 | #include <qpe/global.h> |
46 | #include <qpe/qpeapplication.h> | 46 | #include <qpe/qpeapplication.h> |
47 | #include <qpe/qpemessagebox.h> | 47 | #include <qpe/qpemessagebox.h> |
48 | #include <qpe/qcopenvelope_qws.h> | 48 | #include <qpe/qcopenvelope_qws.h> |
49 | #include <qpe/qpestyle.h> | 49 | #include <qpe/qpestyle.h> |
50 | #include <qpe/lightstyle.h> | 50 | #include <qpe/lightstyle.h> |
51 | #include <qpe/styleinterface.h> | 51 | #include <qpe/styleinterface.h> |
52 | 52 | ||
53 | /* QT */ | 53 | /* QT */ |
54 | #include <qbuttongroup.h> | 54 | #include <qbuttongroup.h> |
55 | #include <qcheckbox.h> | 55 | #include <qcheckbox.h> |
56 | #include <qcombobox.h> | 56 | #include <qcombobox.h> |
57 | #include <qdialog.h> | 57 | #include <qdialog.h> |
58 | #include <qdir.h> | 58 | #include <qdir.h> |
59 | #include <qlabel.h> | 59 | #include <qlabel.h> |
60 | #include <qlayout.h> | 60 | #include <qlayout.h> |
61 | #include <qlineedit.h> | 61 | #include <qlineedit.h> |
62 | #include <qlistbox.h> | 62 | #include <qlistbox.h> |
63 | #include <qmessagebox.h> | 63 | #include <qmessagebox.h> |
64 | #include <qpushbutton.h> | 64 | #include <qpushbutton.h> |
65 | #include <qradiobutton.h> | 65 | #include <qradiobutton.h> |
66 | #if QT_VERSION >= 300 | 66 | #if QT_VERSION >= 0x030000 |
67 | #include <qstylefactory.h> | 67 | #include <qstylefactory.h> |
68 | #endif | 68 | #endif |
69 | #include <qtoolbutton.h> | 69 | #include <qtoolbutton.h> |
70 | #include <qwindowsstyle.h> | 70 | #include <qwindowsstyle.h> |
71 | #include <qlistview.h> | 71 | #include <qlistview.h> |
72 | #include <qheader.h> | 72 | #include <qheader.h> |
73 | #include <qvbox.h> | 73 | #include <qvbox.h> |
74 | #include <qwhatsthis.h> | 74 | #include <qwhatsthis.h> |
75 | 75 | ||
76 | using namespace Opie; | 76 | using namespace Opie; |
77 | using namespace Opie::Ui; | 77 | using namespace Opie::Ui; |
78 | using namespace Opie::Core; | 78 | using namespace Opie::Core; |
79 | 79 | ||
80 | class DefaultWindowDecoration : public WindowDecorationInterface | 80 | class DefaultWindowDecoration : public WindowDecorationInterface |
81 | { | 81 | { |
82 | public: | 82 | public: |
83 | DefaultWindowDecoration() : ref(0) {} | 83 | DefaultWindowDecoration() : ref(0) {} |
84 | QString name() const | 84 | QString name() const |
85 | { | 85 | { |
86 | return "Default"; | 86 | return "Default"; |
87 | } | 87 | } |
88 | QPixmap icon() const | 88 | QPixmap icon() const |
89 | { | 89 | { |
90 | return QPixmap(); | 90 | return QPixmap(); |
91 | } | 91 | } |
92 | QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) | 92 | QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) |
93 | { | 93 | { |
94 | *iface = 0; | 94 | *iface = 0; |
95 | if ( uuid == IID_QUnknown ) | 95 | if ( uuid == IID_QUnknown ) |
96 | *iface = this; | 96 | *iface = this; |
97 | else if ( uuid == IID_WindowDecoration ) | 97 | else if ( uuid == IID_WindowDecoration ) |
98 | *iface = this; | 98 | *iface = this; |
99 | 99 | ||
100 | if ( *iface ) | 100 | if ( *iface ) |
101 | (*iface)->addRef(); | 101 | (*iface)->addRef(); |
102 | return QS_OK; | 102 | return QS_OK; |
103 | } | 103 | } |
104 | Q_REFCOUNT | 104 | Q_REFCOUNT |
105 | 105 | ||
106 | private: | 106 | private: |
107 | ulong ref; | 107 | ulong ref; |
108 | }; | 108 | }; |
109 | 109 | ||
110 | 110 | ||
111 | 111 | ||
112 | 112 | ||
113 | 113 | ||
114 | 114 | ||
115 | 115 | ||
116 | QWidget *Appearance::createStyleTab ( QWidget *parent, Config &cfg ) | 116 | QWidget *Appearance::createStyleTab ( QWidget *parent, Config &cfg ) |
117 | { | 117 | { |
118 | QWidget* tab = new QWidget( parent, "StyleTab" ); | 118 | QWidget* tab = new QWidget( parent, "StyleTab" ); |
119 | QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); | 119 | QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); |
120 | 120 | ||
121 | m_style_list = new QListBox( tab, "m_style_list" ); | 121 | m_style_list = new QListBox( tab, "m_style_list" ); |
122 | vertLayout->addWidget( m_style_list ); | 122 | vertLayout->addWidget( m_style_list ); |
123 | QWhatsThis::add( m_style_list, tr( "Styles control the way items such as buttons and scroll bars appear in all applications.\n\nClick here to select an available style." ) ); | 123 | QWhatsThis::add( m_style_list, tr( "Styles control the way items such as buttons and scroll bars appear in all applications.\n\nClick here to select an available style." ) ); |
124 | 124 | ||
125 | m_style_settings = new QPushButton ( tr( "Settings..." ), tab ); | 125 | m_style_settings = new QPushButton ( tr( "Settings..." ), tab ); |
126 | connect ( m_style_settings, SIGNAL( clicked()), this, SLOT( styleSettingsClicked())); | 126 | connect ( m_style_settings, SIGNAL( clicked()), this, SLOT( styleSettingsClicked())); |
127 | vertLayout-> addWidget ( m_style_settings ); | 127 | vertLayout-> addWidget ( m_style_settings ); |
128 | QWhatsThis::add( m_style_settings, tr( "Click here to configure the currently selected style.\n\nNote: This option is not available for all styles." ) ); | 128 | QWhatsThis::add( m_style_settings, tr( "Click here to configure the currently selected style.\n\nNote: This option is not available for all styles." ) ); |
129 | 129 | ||
130 | QString s = cfg. readEntry ( "Style", "Light" ); | 130 | QString s = cfg. readEntry ( "Style", "Light" ); |
131 | 131 | ||
132 | 132 | ||
133 | #if QT_VERSION >= 300 | 133 | #if QT_VERSION >= 0x030000 |
134 | m_style_list->insertStringList(QStyleFactory::styles()); | 134 | m_style_list->insertStringList(QStyleFactory::styles()); |
135 | #else | 135 | #else |
136 | m_style_list-> insertItem ( new StyleListItem ( "Windows", new QWindowsStyle ( ))); | 136 | m_style_list-> insertItem ( new StyleListItem ( "Windows", new QWindowsStyle ( ))); |
137 | m_style_list-> insertItem ( new StyleListItem ( "Light", new LightStyle ( ))); | 137 | m_style_list-> insertItem ( new StyleListItem ( "Light", new LightStyle ( ))); |
138 | m_style_list-> insertItem ( new StyleListItem ( "QPE", new QPEStyle ( ))); | 138 | m_style_list-> insertItem ( new StyleListItem ( "QPE", new QPEStyle ( ))); |
139 | #endif | 139 | #endif |
140 | 140 | ||
141 | { | 141 | { |
142 | QString path = QPEApplication::qpeDir ( ); | 142 | QString path = QPEApplication::qpeDir ( ); |
143 | path.append( "/plugins/styles/" ); | 143 | path.append( "/plugins/styles/" ); |
144 | QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); | 144 | QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); |
145 | 145 | ||
146 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) | 146 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) |
147 | { | 147 | { |
148 | QString libstr = path; | 148 | QString libstr = path; |
149 | libstr.append( "/" ); | 149 | libstr.append( "/" ); |
150 | libstr.append( *it ); | 150 | libstr.append( *it ); |
151 | QLibrary *lib = new QLibrary ( libstr ); | 151 | QLibrary *lib = new QLibrary ( libstr ); |
152 | StyleInterface *iface; | 152 | StyleInterface *iface; |
153 | 153 | ||
154 | if (( lib-> queryInterface ( IID_Style, (QUnknownInterface **) &iface ) == QS_OK ) && iface ) | 154 | if (( lib-> queryInterface ( IID_Style, (QUnknownInterface **) &iface ) == QS_OK ) && iface ) |
155 | { | 155 | { |
156 | StyleListItem *slit = new StyleListItem ( lib, iface ); | 156 | StyleListItem *slit = new StyleListItem ( lib, iface ); |
157 | m_style_list-> insertItem ( slit ); | 157 | m_style_list-> insertItem ( slit ); |
158 | 158 | ||
159 | if ( slit-> key ( ) == s ) | 159 | if ( slit-> key ( ) == s ) |
160 | m_style_list-> setCurrentItem ( slit ); | 160 | m_style_list-> setCurrentItem ( slit ); |
161 | } | 161 | } |
162 | else | 162 | else |
163 | delete lib; | 163 | delete lib; |
164 | } | 164 | } |
165 | } | 165 | } |
166 | 166 | ||
167 | m_original_style = m_style_list-> currentItem ( ); | 167 | m_original_style = m_style_list-> currentItem ( ); |
168 | styleClicked ( m_original_style ); | 168 | styleClicked ( m_original_style ); |
169 | 169 | ||
170 | connect( m_style_list, SIGNAL( highlighted(int) ), this, SLOT( styleClicked(int) ) ); | 170 | connect( m_style_list, SIGNAL( highlighted(int) ), this, SLOT( styleClicked(int) ) ); |
171 | 171 | ||
172 | return tab; | 172 | return tab; |
173 | } | 173 | } |
174 | 174 | ||
175 | QWidget *Appearance::createDecoTab ( QWidget *parent, Config &cfg ) | 175 | QWidget *Appearance::createDecoTab ( QWidget *parent, Config &cfg ) |
176 | { | 176 | { |
177 | QWidget* tab = new QWidget( parent, "DecoTab" ); | 177 | QWidget* tab = new QWidget( parent, "DecoTab" ); |
178 | QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); | 178 | QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); |
179 | 179 | ||
180 | m_deco_list = new QListBox( tab, "m_deco_list" ); | 180 | m_deco_list = new QListBox( tab, "m_deco_list" ); |
181 | vertLayout->addWidget( m_deco_list ); | 181 | vertLayout->addWidget( m_deco_list ); |
182 | QWhatsThis::add( m_deco_list, tr( "Window decorations control the way the application title bar and its buttons appear.\n\nClick here to select an available decoration." ) ); | 182 | QWhatsThis::add( m_deco_list, tr( "Window decorations control the way the application title bar and its buttons appear.\n\nClick here to select an available decoration." ) ); |
183 | 183 | ||
184 | QString s = cfg. readEntry ( "Decoration", "libflat.so" ); | 184 | QString s = cfg. readEntry ( "Decoration", "libflat.so" ); |
185 | 185 | ||
186 | m_deco_list-> insertItem ( new DecoListItem ( "QPE" )); | 186 | m_deco_list-> insertItem ( new DecoListItem ( "QPE" )); |
187 | 187 | ||
188 | { | 188 | { |
189 | QString path = QPEApplication::qpeDir(); | 189 | QString path = QPEApplication::qpeDir(); |
190 | path.append( "/plugins/decorations/" ); | 190 | path.append( "/plugins/decorations/" ); |
191 | QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); | 191 | QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); |
192 | 192 | ||
193 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) | 193 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) |
194 | { | 194 | { |
195 | QString libstr = path; | 195 | QString libstr = path; |
196 | libstr.append( "/" ); | 196 | libstr.append( "/" ); |
197 | libstr.append( *it ); | 197 | libstr.append( *it ); |
198 | QLibrary *lib = new QLibrary ( libstr ); | 198 | QLibrary *lib = new QLibrary ( libstr ); |
199 | WindowDecorationInterface *iface; | 199 | WindowDecorationInterface *iface; |
200 | 200 | ||
201 | if ( lib-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &iface ) == QS_OK ) | 201 | if ( lib-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &iface ) == QS_OK ) |
202 | { | 202 | { |
203 | DecoListItem *dlit = new DecoListItem ( lib, iface ); | 203 | DecoListItem *dlit = new DecoListItem ( lib, iface ); |
204 | m_deco_list-> insertItem ( dlit ); | 204 | m_deco_list-> insertItem ( dlit ); |
205 | 205 | ||
206 | if ( dlit-> key ( ) == s ) | 206 | if ( dlit-> key ( ) == s ) |
207 | m_deco_list-> setCurrentItem ( dlit ); | 207 | m_deco_list-> setCurrentItem ( dlit ); |
208 | } | 208 | } |
209 | else | 209 | else |
210 | delete lib; | 210 | delete lib; |
211 | } | 211 | } |
212 | } | 212 | } |
213 | 213 | ||
214 | m_original_deco = m_deco_list-> currentItem ( ); | 214 | m_original_deco = m_deco_list-> currentItem ( ); |
215 | if ( m_deco_list-> currentItem ( ) < 0 ) | 215 | if ( m_deco_list-> currentItem ( ) < 0 ) |
216 | m_deco_list-> setCurrentItem ( 0 ); | 216 | m_deco_list-> setCurrentItem ( 0 ); |
217 | decoClicked ( m_original_deco ); | 217 | decoClicked ( m_original_deco ); |
218 | 218 | ||
219 | connect( m_deco_list, SIGNAL( highlighted(int) ), this, SLOT( decoClicked(int) ) ); | 219 | connect( m_deco_list, SIGNAL( highlighted(int) ), this, SLOT( decoClicked(int) ) ); |
220 | 220 | ||
221 | return tab; | 221 | return tab; |
222 | } | 222 | } |
223 | 223 | ||
224 | QWidget *Appearance::createFontTab ( QWidget *parent, Config &cfg ) | 224 | QWidget *Appearance::createFontTab ( QWidget *parent, Config &cfg ) |
225 | { | 225 | { |
226 | QString familyStr = cfg. readEntry ( "FontFamily", "Helvetica" ); | 226 | QString familyStr = cfg. readEntry ( "FontFamily", "Helvetica" ); |
227 | QString styleStr = cfg. readEntry ( "FontStyle", "Regular" ); | 227 | QString styleStr = cfg. readEntry ( "FontStyle", "Regular" ); |
228 | int size = cfg. readNumEntry ( "FontSize", 10 ); | 228 | int size = cfg. readNumEntry ( "FontSize", 10 ); |
229 | 229 | ||
230 | m_fontselect = new OFontSelector ( false, parent, "FontTab" ); | 230 | m_fontselect = new OFontSelector ( false, parent, "FontTab" ); |
231 | m_fontselect-> setSelectedFont ( familyStr, styleStr, size ); | 231 | m_fontselect-> setSelectedFont ( familyStr, styleStr, size ); |
232 | QWhatsThis::add( m_fontselect, tr( "Select the desired name, style and size of the default font applications will use." ) ); | 232 | QWhatsThis::add( m_fontselect, tr( "Select the desired name, style and size of the default font applications will use." ) ); |
233 | 233 | ||
234 | connect( m_fontselect, SIGNAL( fontSelected(const QFont&)), | 234 | connect( m_fontselect, SIGNAL( fontSelected(const QFont&)), |
235 | this, SLOT( fontClicked(const QFont&))); | 235 | this, SLOT( fontClicked(const QFont&))); |
236 | 236 | ||
237 | return m_fontselect; | 237 | return m_fontselect; |
238 | } | 238 | } |
239 | 239 | ||
240 | QWidget *Appearance::createColorTab ( QWidget *parent, Config &cfg ) | 240 | QWidget *Appearance::createColorTab ( QWidget *parent, Config &cfg ) |
241 | { | 241 | { |
242 | QWidget *tab = new QWidget( parent, "ColorTab" ); | 242 | QWidget *tab = new QWidget( parent, "ColorTab" ); |
243 | QGridLayout *gridLayout = new QGridLayout( tab, 0, 0, 3, 3 ); | 243 | QGridLayout *gridLayout = new QGridLayout( tab, 0, 0, 3, 3 ); |
244 | gridLayout->setRowStretch ( 3, 10 ); | 244 | gridLayout->setRowStretch ( 3, 10 ); |
245 | 245 | ||
246 | m_color_list = new QListBox ( tab ); | 246 | m_color_list = new QListBox ( tab ); |
247 | gridLayout->addMultiCellWidget ( m_color_list, 0, 3, 0, 0 ); | 247 | gridLayout->addMultiCellWidget ( m_color_list, 0, 3, 0, 0 ); |
248 | connect( m_color_list, SIGNAL( highlighted(int) ), this, SLOT( colorClicked(int) ) ); | 248 | connect( m_color_list, SIGNAL( highlighted(int) ), this, SLOT( colorClicked(int) ) ); |
249 | QWhatsThis::add( m_color_list, tr( "Color schemes are a collection of colors which are used for various parts of the display.\n\nClick here to select an available scheme." ) ); | 249 | QWhatsThis::add( m_color_list, tr( "Color schemes are a collection of colors which are used for various parts of the display.\n\nClick here to select an available scheme." ) ); |
250 | 250 | ||
251 | m_color_list-> insertItem ( new ColorListItem ( tr( "Current scheme" ), cfg )); | 251 | m_color_list-> insertItem ( new ColorListItem ( tr( "Current scheme" ), cfg )); |
252 | 252 | ||
253 | QString path = QPEApplication::qpeDir ( ); | 253 | QString path = QPEApplication::qpeDir ( ); |
254 | path.append( "/etc/colors/" ); | 254 | path.append( "/etc/colors/" ); |
255 | QStringList sl = QDir ( path ). entryList ( "*.scheme" ); | 255 | QStringList sl = QDir ( path ). entryList ( "*.scheme" ); |
256 | 256 | ||
257 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) | 257 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) |
258 | { | 258 | { |
259 | QString name = (*it). left ((*it). find ( ".scheme" )); | 259 | QString name = (*it). left ((*it). find ( ".scheme" )); |
260 | QString pathstr = path; | 260 | QString pathstr = path; |
261 | pathstr.append( *it ); | 261 | pathstr.append( *it ); |
262 | Config config ( pathstr, Config::File ); | 262 | Config config ( pathstr, Config::File ); |
263 | config. setGroup ( "Colors" ); | 263 | config. setGroup ( "Colors" ); |
264 | 264 | ||
265 | m_color_list-> insertItem ( new ColorListItem ( name, config )); | 265 | m_color_list-> insertItem ( new ColorListItem ( name, config )); |
266 | } | 266 | } |
267 | 267 | ||
268 | m_color_list-> setCurrentItem ( 0 ); | 268 | m_color_list-> setCurrentItem ( 0 ); |
269 | 269 | ||
270 | QPushButton* tempButton = new QPushButton( tab, "editSchemeButton" ); | 270 | QPushButton* tempButton = new QPushButton( tab, "editSchemeButton" ); |
271 | tempButton->setText( tr( "Edit..." ) ); | 271 | tempButton->setText( tr( "Edit..." ) ); |
272 | connect( tempButton, SIGNAL( clicked() ), this, SLOT( editSchemeClicked() ) ); | 272 | connect( tempButton, SIGNAL( clicked() ), this, SLOT( editSchemeClicked() ) ); |
273 | gridLayout->addWidget( tempButton, 0, 1 ); | 273 | gridLayout->addWidget( tempButton, 0, 1 ); |
274 | QWhatsThis::add( tempButton, tr( "Click here to change the colors in the current color scheme." ) ); | 274 | QWhatsThis::add( tempButton, tr( "Click here to change the colors in the current color scheme." ) ); |
275 | 275 | ||
276 | tempButton = new QPushButton( tab, "deleteSchemeButton" ); | 276 | tempButton = new QPushButton( tab, "deleteSchemeButton" ); |
277 | tempButton->setText( tr( "Delete" ) ); | 277 | tempButton->setText( tr( "Delete" ) ); |
278 | connect( tempButton, SIGNAL( clicked() ), this, SLOT( deleteSchemeClicked() ) ); | 278 | connect( tempButton, SIGNAL( clicked() ), this, SLOT( deleteSchemeClicked() ) ); |
279 | gridLayout->addWidget( tempButton, 1, 1 ); | 279 | gridLayout->addWidget( tempButton, 1, 1 ); |
280 | QWhatsThis::add( tempButton, tr( "Click here to delete the color scheme selected in the list to the left." ) ); | 280 | QWhatsThis::add( tempButton, tr( "Click here to delete the color scheme selected in the list to the left." ) ); |
281 | 281 | ||
282 | tempButton = new QPushButton( tab, "saveSchemeButton" ); | 282 | tempButton = new QPushButton( tab, "saveSchemeButton" ); |
283 | tempButton->setText( tr( "Save" ) ); | 283 | tempButton->setText( tr( "Save" ) ); |
284 | connect( tempButton, SIGNAL( clicked() ), this, SLOT( saveSchemeClicked() ) ); | 284 | connect( tempButton, SIGNAL( clicked() ), this, SLOT( saveSchemeClicked() ) ); |
285 | gridLayout->addWidget( tempButton, 2, 1 ); | 285 | gridLayout->addWidget( tempButton, 2, 1 ); |
286 | QWhatsThis::add( tempButton, tr( "Click here to name and save the current color scheme." ) ); | 286 | QWhatsThis::add( tempButton, tr( "Click here to name and save the current color scheme." ) ); |
287 | 287 | ||
288 | return tab; | 288 | return tab; |
289 | } | 289 | } |
290 | 290 | ||
291 | QWidget *Appearance::createAdvancedTab ( QWidget *parent, Config &cfg ) | 291 | QWidget *Appearance::createAdvancedTab ( QWidget *parent, Config &cfg ) |
292 | { | 292 | { |
293 | QWidget *tab = new QWidget ( parent ); | 293 | QWidget *tab = new QWidget ( parent ); |
294 | QVBoxLayout *vertLayout = new QVBoxLayout( tab, 3, 3 ); | 294 | QVBoxLayout *vertLayout = new QVBoxLayout( tab, 3, 3 ); |
295 | 295 | ||
296 | QGridLayout *lay = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); | 296 | QGridLayout *lay = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); |
297 | 297 | ||
298 | m_force = new QCheckBox ( tr( "Force styling for all applications." ), tab ); | 298 | m_force = new QCheckBox ( tr( "Force styling for all applications." ), tab ); |
299 | m_force-> setChecked ( cfg. readBoolEntry ( "ForceStyle" )); | 299 | m_force-> setChecked ( cfg. readBoolEntry ( "ForceStyle" )); |
300 | lay-> addMultiCellWidget ( m_force, 0, 0, 0, 1 ); | 300 | lay-> addMultiCellWidget ( m_force, 0, 0, 0, 1 ); |
301 | QWhatsThis::add( m_force, tr( "Click here to allow all applications to use global appearance settings." ) ); | 301 | QWhatsThis::add( m_force, tr( "Click here to allow all applications to use global appearance settings." ) ); |
302 | 302 | ||
303 | QLabel *l = new QLabel ( tab ); | 303 | QLabel *l = new QLabel ( tab ); |
304 | l-> setText ( QString ( "<p>%1</p>" ). arg ( tr( "Disable styling for these applications ( <b>*</b> can be used as a wildcard):" ))); | 304 | l-> setText ( QString ( "<p>%1</p>" ). arg ( tr( "Disable styling for these applications ( <b>*</b> can be used as a wildcard):" ))); |
305 | lay-> addMultiCellWidget ( l, 1, 1, 0, 1 ); | 305 | lay-> addMultiCellWidget ( l, 1, 1, 0, 1 ); |
306 | QWhatsThis::add( l, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); | 306 | QWhatsThis::add( l, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); |
307 | 307 | ||
308 | m_except = new QListView ( tab ); | 308 | m_except = new QListView ( tab ); |
309 | m_except-> addColumn ( Resource::loadIconSet ( "appearance" ), "", 24 ); | 309 | m_except-> addColumn ( Resource::loadIconSet ( "appearance" ), "", 24 ); |
310 | m_except-> addColumn ( Resource::loadIconSet ( "font" ), "", 24 ); | 310 | m_except-> addColumn ( Resource::loadIconSet ( "font" ), "", 24 ); |
311 | m_except-> addColumn ( Resource::loadIconSet ( "appearance/deco" ), "", 24 ); | 311 | m_except-> addColumn ( Resource::loadIconSet ( "appearance/deco" ), "", 24 ); |
312 | m_except-> addColumn ( tr( "Binary file(s)" )); | 312 | m_except-> addColumn ( tr( "Binary file(s)" )); |
313 | m_except-> setColumnAlignment ( 0, AlignCenter ); | 313 | m_except-> setColumnAlignment ( 0, AlignCenter ); |
314 | m_except-> setColumnAlignment ( 1, AlignCenter ); | 314 | m_except-> setColumnAlignment ( 1, AlignCenter ); |
315 | m_except-> setColumnAlignment ( 2, AlignCenter ); | 315 | m_except-> setColumnAlignment ( 2, AlignCenter ); |
316 | m_except-> setAllColumnsShowFocus ( true ); | 316 | m_except-> setAllColumnsShowFocus ( true ); |
317 | m_except-> setMinimumHeight ( 30 ); | 317 | m_except-> setMinimumHeight ( 30 ); |
318 | m_except-> header ( )-> setClickEnabled ( false ); | 318 | m_except-> header ( )-> setClickEnabled ( false ); |
319 | m_except-> header ( )-> setResizeEnabled ( false ); | 319 | m_except-> header ( )-> setResizeEnabled ( false ); |
320 | m_except-> header ( )-> setMovingEnabled ( false ); | 320 | m_except-> header ( )-> setMovingEnabled ( false ); |
321 | m_except-> setSorting ( -1 ); | 321 | m_except-> setSorting ( -1 ); |
322 | lay-> addMultiCellWidget ( m_except, 2, 6, 0, 0 ); | 322 | lay-> addMultiCellWidget ( m_except, 2, 6, 0, 0 ); |
323 | QWhatsThis::add( m_except, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); | 323 | QWhatsThis::add( m_except, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); |
324 | 324 | ||
325 | connect ( m_except, SIGNAL( clicked(QListViewItem*,const QPoint&,int)), this, SLOT( clickedExcept(QListViewItem*,const QPoint&,int))); | 325 | connect ( m_except, SIGNAL( clicked(QListViewItem*,const QPoint&,int)), this, SLOT( clickedExcept(QListViewItem*,const QPoint&,int))); |
326 | 326 | ||
327 | QToolButton *tb = new QToolButton ( tab ); | 327 | QToolButton *tb = new QToolButton ( tab ); |
328 | tb-> setIconSet ( Resource::loadIconSet ( "appearance/add" )); | 328 | tb-> setIconSet ( Resource::loadIconSet ( "appearance/add" )); |
329 | tb-> setFocusPolicy ( QWidget::StrongFocus ); | 329 | tb-> setFocusPolicy ( QWidget::StrongFocus ); |
330 | lay-> addWidget ( tb, 2, 1 ); | 330 | lay-> addWidget ( tb, 2, 1 ); |
331 | connect ( tb, SIGNAL( clicked()), this, SLOT( addExcept())); | 331 | connect ( tb, SIGNAL( clicked()), this, SLOT( addExcept())); |
332 | QWhatsThis::add( tb, tr( "Click here to add an application to the list above." ) ); | 332 | QWhatsThis::add( tb, tr( "Click here to add an application to the list above." ) ); |
333 | 333 | ||
334 | tb = new QToolButton ( tab ); | 334 | tb = new QToolButton ( tab ); |
335 | tb-> setIconSet ( Resource::loadIconSet ( "editdelete" )); | 335 | tb-> setIconSet ( Resource::loadIconSet ( "editdelete" )); |
336 | tb-> setFocusPolicy ( QWidget::StrongFocus ); | 336 | tb-> setFocusPolicy ( QWidget::StrongFocus ); |
337 | lay-> addWidget ( tb, 3, 1 ); | 337 | lay-> addWidget ( tb, 3, 1 ); |
338 | connect ( tb, SIGNAL( clicked()), this, SLOT( delExcept())); | 338 | connect ( tb, SIGNAL( clicked()), this, SLOT( delExcept())); |
339 | QWhatsThis::add( tb, tr( "Click here to delete the currently selected application." ) ); | 339 | QWhatsThis::add( tb, tr( "Click here to delete the currently selected application." ) ); |
340 | 340 | ||
341 | tb = new QToolButton ( tab ); | 341 | tb = new QToolButton ( tab ); |
342 | tb-> setIconSet ( Resource::loadIconSet ( "up" )); | 342 | tb-> setIconSet ( Resource::loadIconSet ( "up" )); |
343 | tb-> setFocusPolicy ( QWidget::StrongFocus ); | 343 | tb-> setFocusPolicy ( QWidget::StrongFocus ); |
344 | lay-> addWidget ( tb, 4, 1 ); | 344 | lay-> addWidget ( tb, 4, 1 ); |
345 | connect ( tb, SIGNAL( clicked()), this, SLOT( upExcept())); | 345 | connect ( tb, SIGNAL( clicked()), this, SLOT( upExcept())); |
346 | QWhatsThis::add( tb, tr( "Click here to move the currently selected application up in the list." ) ); | 346 | QWhatsThis::add( tb, tr( "Click here to move the currently selected application up in the list." ) ); |
347 | 347 | ||
348 | tb = new QToolButton ( tab ); | 348 | tb = new QToolButton ( tab ); |
349 | tb-> setIconSet ( Resource::loadIconSet ( "down" )); | 349 | tb-> setIconSet ( Resource::loadIconSet ( "down" )); |
350 | tb-> setFocusPolicy ( QWidget::StrongFocus ); | 350 | tb-> setFocusPolicy ( QWidget::StrongFocus ); |
351 | lay-> addWidget ( tb, 5, 1 ); | 351 | lay-> addWidget ( tb, 5, 1 ); |
352 | connect ( tb, SIGNAL( clicked()), this, SLOT( downExcept())); | 352 | connect ( tb, SIGNAL( clicked()), this, SLOT( downExcept())); |
353 | QWhatsThis::add( tb, tr( "Click here to move the currently selected application down in the list." ) ); | 353 | QWhatsThis::add( tb, tr( "Click here to move the currently selected application down in the list." ) ); |
354 | 354 | ||
355 | lay-> setRowStretch ( 6, 10 ); | 355 | lay-> setRowStretch ( 6, 10 ); |
356 | lay-> setColStretch ( 0, 10 ); | 356 | lay-> setColStretch ( 0, 10 ); |
357 | 357 | ||
358 | QStringList sl = cfg. readListEntry ( "NoStyle", ';' ); | 358 | QStringList sl = cfg. readListEntry ( "NoStyle", ';' ); |
359 | QListViewItem *lvit = 0; | 359 | QListViewItem *lvit = 0; |
360 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) | 360 | for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) |
361 | { | 361 | { |
362 | int fl = ( *it ). left ( 1 ). toInt ( 0, 32 ); | 362 | int fl = ( *it ). left ( 1 ). toInt ( 0, 32 ); |
363 | 363 | ||
364 | lvit = new ExceptListItem ( m_except, lvit, ( *it ). mid ( 1 ), fl & 0x01, fl & 0x02, fl & 0x04 ); | 364 | lvit = new ExceptListItem ( m_except, lvit, ( *it ). mid ( 1 ), fl & 0x01, fl & 0x02, fl & 0x04 ); |
365 | } | 365 | } |
366 | 366 | ||
367 | 367 | ||
368 | vertLayout-> addSpacing ( 3 ); | 368 | vertLayout-> addSpacing ( 3 ); |
369 | QFrame *f = new QFrame ( tab ); | 369 | QFrame *f = new QFrame ( tab ); |
370 | f-> setFrameStyle ( QFrame::HLine | QFrame::Sunken ); | 370 | f-> setFrameStyle ( QFrame::HLine | QFrame::Sunken ); |
371 | vertLayout-> addWidget ( f ); | 371 | vertLayout-> addWidget ( f ); |
372 | vertLayout-> addSpacing ( 3 ); | 372 | vertLayout-> addSpacing ( 3 ); |
373 | 373 | ||
374 | 374 | ||
375 | QGridLayout* gridLayout = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); | 375 | QGridLayout* gridLayout = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); |
376 | 376 | ||
377 | int style = cfg. readNumEntry ( "TabStyle", 2 ) - 1; | 377 | int style = cfg. readNumEntry ( "TabStyle", 2 ) - 1; |
378 | bool tabtop = ( cfg. readEntry ( "TabPosition", "Top" ) == "Top" ); | 378 | bool tabtop = ( cfg. readEntry ( "TabPosition", "Top" ) == "Top" ); |
379 | 379 | ||
380 | QLabel* label = new QLabel( tr( "Tab style:" ), tab ); | 380 | QLabel* label = new QLabel( tr( "Tab style:" ), tab ); |
381 | gridLayout-> addWidget ( label, 0, 0 ); | 381 | gridLayout-> addWidget ( label, 0, 0 ); |
382 | QWhatsThis::add( label, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); | 382 | QWhatsThis::add( label, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); |
383 | 383 | ||
384 | QButtonGroup* btngrp = new QButtonGroup( tab, "buttongroup" ); | 384 | QButtonGroup* btngrp = new QButtonGroup( tab, "buttongroup" ); |
385 | btngrp-> hide ( ); | 385 | btngrp-> hide ( ); |
386 | btngrp-> setExclusive ( true ); | 386 | btngrp-> setExclusive ( true ); |
387 | 387 | ||
388 | m_tabstyle_list = new QComboBox ( false, tab, "tabstyle" ); | 388 | m_tabstyle_list = new QComboBox ( false, tab, "tabstyle" ); |
389 | m_tabstyle_list-> insertItem ( tr( "Tabs" )); | 389 | m_tabstyle_list-> insertItem ( tr( "Tabs" )); |
390 | m_tabstyle_list-> insertItem ( tr( "Tabs w/icons" )); | 390 | m_tabstyle_list-> insertItem ( tr( "Tabs w/icons" )); |
391 | m_tabstyle_list-> insertItem ( tr( "Drop down list" )); | 391 | m_tabstyle_list-> insertItem ( tr( "Drop down list" )); |
392 | m_tabstyle_list-> insertItem ( tr( "Drop down list w/icons" )); | 392 | m_tabstyle_list-> insertItem ( tr( "Drop down list w/icons" )); |
393 | m_tabstyle_list-> setCurrentItem ( style ); | 393 | m_tabstyle_list-> setCurrentItem ( style ); |
394 | gridLayout-> addMultiCellWidget ( m_tabstyle_list, 0, 0, 1, 2 ); | 394 | gridLayout-> addMultiCellWidget ( m_tabstyle_list, 0, 0, 1, 2 ); |
395 | QWhatsThis::add( m_tabstyle_list, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); | 395 | QWhatsThis::add( m_tabstyle_list, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); |
396 | 396 | ||
397 | m_tabstyle_top = new QRadioButton( tr( "Top" ), tab, "tabpostop" ); | 397 | m_tabstyle_top = new QRadioButton( tr( "Top" ), tab, "tabpostop" ); |
398 | btngrp-> insert ( m_tabstyle_top ); | 398 | btngrp-> insert ( m_tabstyle_top ); |
399 | gridLayout-> addWidget( m_tabstyle_top, 1, 1 ); | 399 | gridLayout-> addWidget( m_tabstyle_top, 1, 1 ); |
400 | QWhatsThis::add( m_tabstyle_top, tr( "Click here so that tabs appear at the top of the window." ) ); | 400 | QWhatsThis::add( m_tabstyle_top, tr( "Click here so that tabs appear at the top of the window." ) ); |
401 | 401 | ||
402 | m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); | 402 | m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); |
403 | btngrp-> insert ( m_tabstyle_bottom ); | 403 | btngrp-> insert ( m_tabstyle_bottom ); |
404 | gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); | 404 | gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); |
405 | QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) ); | 405 | QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) ); |
406 | 406 | ||
407 | m_tabstyle_top-> setChecked ( tabtop ); | 407 | m_tabstyle_top-> setChecked ( tabtop ); |
408 | m_tabstyle_bottom-> setChecked ( !tabtop ); | 408 | m_tabstyle_bottom-> setChecked ( !tabtop ); |
409 | 409 | ||
410 | m_original_tabstyle = style; | 410 | m_original_tabstyle = style; |
411 | m_original_tabpos = tabtop; | 411 | m_original_tabpos = tabtop; |
412 | 412 | ||
413 | vertLayout-> addSpacing ( 3 ); | 413 | vertLayout-> addSpacing ( 3 ); |
414 | QHBoxLayout *rotLay = new QHBoxLayout ( vertLayout, 3 ); | 414 | QHBoxLayout *rotLay = new QHBoxLayout ( vertLayout, 3 ); |
415 | 415 | ||
416 | QLabel* rotlabel = new QLabel( tr( "Rotation direction:" ), tab ); | 416 | QLabel* rotlabel = new QLabel( tr( "Rotation direction:" ), tab ); |
417 | m_rotdir_cw = new QRadioButton( tab, "rotdir_cw" ); | 417 | m_rotdir_cw = new QRadioButton( tab, "rotdir_cw" ); |
418 | QPixmap cw1 = Resource::loadIconSet("redo"). pixmap( ); | 418 | QPixmap cw1 = Resource::loadIconSet("redo"). pixmap( ); |
419 | m_rotdir_ccw = new QRadioButton( tab, "rotdir_ccw" ); | 419 | m_rotdir_ccw = new QRadioButton( tab, "rotdir_ccw" ); |
420 | QImage ccwImage = cw1. convertToImage( ). mirror( 1, 0 ); | 420 | QImage ccwImage = cw1. convertToImage( ). mirror( 1, 0 ); |
421 | QPixmap ccw1; | 421 | QPixmap ccw1; |
422 | m_rotdir_flip = new QRadioButton( tab, "rotdir_flip" ); | 422 | m_rotdir_flip = new QRadioButton( tab, "rotdir_flip" ); |
423 | QPixmap flip1 = Resource::loadIconSet("pass"). pixmap( ); | 423 | QPixmap flip1 = Resource::loadIconSet("pass"). pixmap( ); |
424 | QButtonGroup* rotbtngrp = new QButtonGroup( tab, "rotbuttongroup" ); | 424 | QButtonGroup* rotbtngrp = new QButtonGroup( tab, "rotbuttongroup" ); |
425 | 425 | ||
426 | rotbtngrp-> hide ( ); | 426 | rotbtngrp-> hide ( ); |
427 | rotbtngrp-> setExclusive ( true ); | 427 | rotbtngrp-> setExclusive ( true ); |
428 | rotbtngrp-> insert ( m_rotdir_cw ); | 428 | rotbtngrp-> insert ( m_rotdir_cw ); |
429 | rotbtngrp-> insert ( m_rotdir_ccw ); | 429 | rotbtngrp-> insert ( m_rotdir_ccw ); |
430 | rotbtngrp-> insert ( m_rotdir_flip ); | 430 | rotbtngrp-> insert ( m_rotdir_flip ); |
431 | 431 | ||
432 | ccw1. convertFromImage( ccwImage ); | 432 | ccw1. convertFromImage( ccwImage ); |
433 | m_rotdir_cw-> setPixmap( cw1 ); | 433 | m_rotdir_cw-> setPixmap( cw1 ); |
434 | m_rotdir_ccw-> setPixmap( ccw1 ); | 434 | m_rotdir_ccw-> setPixmap( ccw1 ); |
435 | m_rotdir_flip-> setPixmap( flip1 ); | 435 | m_rotdir_flip-> setPixmap( flip1 ); |
436 | 436 | ||
437 | rotLay-> addWidget ( rotlabel, 0 ); | 437 | rotLay-> addWidget ( rotlabel, 0 ); |
438 | rotLay-> addWidget ( m_rotdir_cw, 0 ); | 438 | rotLay-> addWidget ( m_rotdir_cw, 0 ); |
439 | rotLay-> addWidget ( m_rotdir_ccw, 0 ); | 439 | rotLay-> addWidget ( m_rotdir_ccw, 0 ); |
440 | rotLay-> addWidget ( m_rotdir_flip, 0 ); | 440 | rotLay-> addWidget ( m_rotdir_flip, 0 ); |
441 | 441 | ||
442 | int rotDirection = cfg.readNumEntry( "rotatedir" ); | 442 | int rotDirection = cfg.readNumEntry( "rotatedir" ); |
443 | ODirection rot = CW; | 443 | ODirection rot = CW; |
444 | 444 | ||
445 | if (rotDirection == -1) | 445 | if (rotDirection == -1) |
446 | { | 446 | { |
447 | rot = ODevice::inst ( )-> direction ( ); | 447 | rot = ODevice::inst ( )-> direction ( ); |
448 | } | 448 | } |
449 | else | 449 | else |
450 | { | 450 | { |
451 | rot = (ODirection)rotDirection; | 451 | rot = (ODirection)rotDirection; |
452 | } | 452 | } |
453 | 453 | ||
454 | m_rotdir_cw-> setChecked ( rot == CW ); | 454 | m_rotdir_cw-> setChecked ( rot == CW ); |
455 | m_rotdir_ccw-> setChecked ( rot == CCW ); | 455 | m_rotdir_ccw-> setChecked ( rot == CCW ); |
456 | m_rotdir_flip-> setChecked ( rot == Flip ); | 456 | m_rotdir_flip-> setChecked ( rot == Flip ); |
457 | 457 | ||
458 | return tab; | 458 | return tab; |
459 | } | 459 | } |
460 | 460 | ||
461 | 461 | ||
462 | Appearance::Appearance( QWidget* parent, const char* name, WFlags ) | 462 | Appearance::Appearance( QWidget* parent, const char* name, WFlags ) |
463 | : QDialog ( parent, name, true, WStyle_ContextHelp ) | 463 | : QDialog ( parent, name, true, WStyle_ContextHelp ) |
464 | { | 464 | { |
465 | setCaption( tr( "Appearance Settings" ) ); | 465 | setCaption( tr( "Appearance Settings" ) ); |
466 | 466 | ||
467 | Config config( "qpe" ); | 467 | Config config( "qpe" ); |
468 | config.setGroup( "Appearance" ); | 468 | config.setGroup( "Appearance" ); |
469 | 469 | ||
470 | QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 ); | 470 | QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 ); |
471 | 471 | ||
472 | m_sample = new SampleWindow ( this ); | 472 | m_sample = new SampleWindow ( this ); |
473 | 473 | ||
474 | m_sample-> setDecoration ( new DefaultWindowDecoration ( ) ); | 474 | m_sample-> setDecoration ( new DefaultWindowDecoration ( ) ); |
475 | QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) ); | 475 | QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) ); |
476 | 476 | ||
477 | OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); | 477 | OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); |
478 | QWidget *styletab; | 478 | QWidget *styletab; |
479 | 479 | ||
480 | m_color_list = 0; | 480 | m_color_list = 0; |
481 | 481 | ||
482 | tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance", tr( "Style" )); | 482 | tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance", tr( "Style" )); |
483 | tw-> addTab ( createFontTab ( tw, config ), "font", tr( "Font" )); | 483 | tw-> addTab ( createFontTab ( tw, config ), "font", tr( "Font" )); |
484 | tw-> addTab ( createColorTab ( tw, config ), "appearance/color", tr( "Colors" ) ); | 484 | tw-> addTab ( createColorTab ( tw, config ), "appearance/color", tr( "Colors" ) ); |
485 | tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco", tr( "Windows" ) ); | 485 | tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco", tr( "Windows" ) ); |
486 | tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "SettingsIcon", tr( "Advanced" ) ); | 486 | tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "SettingsIcon", tr( "Advanced" ) ); |
487 | 487 | ||
488 | top-> addWidget ( tw, 10 ); | 488 | top-> addWidget ( tw, 10 ); |
489 | top-> addWidget ( m_sample, 1 ); | 489 | top-> addWidget ( m_sample, 1 ); |
490 | 490 | ||
491 | tw-> setCurrentTab ( styletab ); | 491 | tw-> setCurrentTab ( styletab ); |
492 | connect ( tw, SIGNAL( currentChanged(QWidget*)), this, SLOT( tabChanged(QWidget*))); | 492 | connect ( tw, SIGNAL( currentChanged(QWidget*)), this, SLOT( tabChanged(QWidget*))); |
493 | 493 | ||
494 | m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false; | 494 | m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false; |
495 | } | 495 | } |
496 | 496 | ||
497 | Appearance::~Appearance() | 497 | Appearance::~Appearance() |
498 | {} | 498 | {} |
499 | 499 | ||
500 | void Appearance::tabChanged ( QWidget *w ) | 500 | void Appearance::tabChanged ( QWidget *w ) |
501 | { | 501 | { |
502 | if ( w == m_advtab ) | 502 | if ( w == m_advtab ) |
503 | { | 503 | { |
504 | m_sample-> hide ( ); | 504 | m_sample-> hide ( ); |
505 | updateGeometry ( ); // shouldn't be necessary ... | 505 | updateGeometry ( ); // shouldn't be necessary ... |
506 | } | 506 | } |
507 | else | 507 | else |
508 | m_sample-> show ( ); | 508 | m_sample-> show ( ); |
509 | } | 509 | } |
510 | 510 | ||
511 | void Appearance::accept ( ) | 511 | void Appearance::accept ( ) |
512 | { | 512 | { |
513 | bool newtabpos = m_tabstyle_top-> isChecked ( ); | 513 | bool newtabpos = m_tabstyle_top-> isChecked ( ); |
514 | int newtabstyle = m_tabstyle_list-> currentItem ( ); | 514 | int newtabstyle = m_tabstyle_list-> currentItem ( ); |
515 | 515 | ||
516 | Config config ( "qpe" ); | 516 | Config config ( "qpe" ); |
517 | config. setGroup ( "Appearance" ); | 517 | config. setGroup ( "Appearance" ); |
diff --git a/noncore/settings/doctab/doctab.cpp b/noncore/settings/doctab/doctab.cpp index feaf538..72eda6b 100644 --- a/noncore/settings/doctab/doctab.cpp +++ b/noncore/settings/doctab/doctab.cpp | |||
@@ -1,94 +1,94 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #include "doctab.h" | 21 | #include "doctab.h" |
22 | 22 | ||
23 | #include <qpe/global.h> | 23 | #include <qpe/global.h> |
24 | #include <qpe/fontmanager.h> | 24 | #include <qpe/fontmanager.h> |
25 | #include <qpe/config.h> | 25 | #include <qpe/config.h> |
26 | #include <qpe/applnk.h> | 26 | #include <qpe/applnk.h> |
27 | #include <qpe/qpedialog.h> | 27 | #include <qpe/qpedialog.h> |
28 | #include <qpe/qpeapplication.h> | 28 | #include <qpe/qpeapplication.h> |
29 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 29 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
30 | #include <qpe/qcopenvelope_qws.h> | 30 | #include <qpe/qcopenvelope_qws.h> |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #include <qlabel.h> | 33 | #include <qlabel.h> |
34 | #include <qcheckbox.h> | 34 | #include <qcheckbox.h> |
35 | #include <qradiobutton.h> | 35 | #include <qradiobutton.h> |
36 | #include <qtabwidget.h> | 36 | #include <qtabwidget.h> |
37 | #include <qslider.h> | 37 | #include <qslider.h> |
38 | #include <qfile.h> | 38 | #include <qfile.h> |
39 | #include <qtextstream.h> | 39 | #include <qtextstream.h> |
40 | #include <qdatastream.h> | 40 | #include <qdatastream.h> |
41 | #include <qmessagebox.h> | 41 | #include <qmessagebox.h> |
42 | #include <qcombobox.h> | 42 | #include <qcombobox.h> |
43 | #include <qspinbox.h> | 43 | #include <qspinbox.h> |
44 | #include <qlistbox.h> | 44 | #include <qlistbox.h> |
45 | #include <qdir.h> | 45 | #include <qdir.h> |
46 | #if QT_VERSION >= 300 | 46 | #if QT_VERSION >= 0x030000 |
47 | #include <qstylefactory.h> | 47 | #include <qstylefactory.h> |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #include <stdlib.h> | 50 | #include <stdlib.h> |
51 | 51 | ||
52 | 52 | ||
53 | DocTabSettings::DocTabSettings( QWidget* parent, const char* name, WFlags fl ) | 53 | DocTabSettings::DocTabSettings( QWidget* parent, const char* name, WFlags fl ) |
54 | : DocTabSettingsBase( parent, name, TRUE, fl ) | 54 | : DocTabSettingsBase( parent, name, TRUE, fl ) |
55 | { | 55 | { |
56 | dl = new QPEDialogListener(this); | 56 | dl = new QPEDialogListener(this); |
57 | reset(); | 57 | reset(); |
58 | } | 58 | } |
59 | 59 | ||
60 | DocTabSettings::~DocTabSettings() | 60 | DocTabSettings::~DocTabSettings() |
61 | {} | 61 | {} |
62 | 62 | ||
63 | void DocTabSettings::accept() | 63 | void DocTabSettings::accept() |
64 | { | 64 | { |
65 | applyDocTab(); | 65 | applyDocTab(); |
66 | QDialog::accept(); | 66 | QDialog::accept(); |
67 | } | 67 | } |
68 | 68 | ||
69 | void DocTabSettings::applyDocTab() | 69 | void DocTabSettings::applyDocTab() |
70 | { | 70 | { |
71 | Config cfg( "Launcher" ); | 71 | Config cfg( "Launcher" ); |
72 | cfg.setGroup( "DocTab" ); | 72 | cfg.setGroup( "DocTab" ); |
73 | cfg.writeEntry( "Enable", yes->isChecked() ); | 73 | cfg.writeEntry( "Enable", yes->isChecked() ); |
74 | cfg.write(); | 74 | cfg.write(); |
75 | } | 75 | } |
76 | 76 | ||
77 | 77 | ||
78 | void DocTabSettings::reject() | 78 | void DocTabSettings::reject() |
79 | { | 79 | { |
80 | reset(); | 80 | reset(); |
81 | QDialog::reject(); | 81 | QDialog::reject(); |
82 | } | 82 | } |
83 | 83 | ||
84 | void DocTabSettings::reset() | 84 | void DocTabSettings::reset() |
85 | { | 85 | { |
86 | } | 86 | } |
87 | 87 | ||
88 | QString DocTabSettings::actualDocTab; | 88 | QString DocTabSettings::actualDocTab; |
89 | 89 | ||
90 | void DocTabSettings::done(int r) | 90 | void DocTabSettings::done(int r) |
91 | { | 91 | { |
92 | QDialog::done(r); | 92 | QDialog::done(r); |
93 | close(); | 93 | close(); |
94 | } | 94 | } |
diff --git a/noncore/settings/language/language.cpp b/noncore/settings/language/language.cpp index 14750ac..bf90576 100644 --- a/noncore/settings/language/language.cpp +++ b/noncore/settings/language/language.cpp | |||
@@ -1,159 +1,159 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qtopia Environment. | 4 | ** This file is part of Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #include "settings.h" | 21 | #include "settings.h" |
22 | 22 | ||
23 | #include <qpe/global.h> | 23 | #include <qpe/global.h> |
24 | #include <qpe/fontmanager.h> | 24 | #include <qpe/fontmanager.h> |
25 | #include <qpe/config.h> | 25 | #include <qpe/config.h> |
26 | #include <qpe/applnk.h> | 26 | #include <qpe/applnk.h> |
27 | #include <qpe/qpedialog.h> | 27 | #include <qpe/qpedialog.h> |
28 | #include <qpe/qpeapplication.h> | 28 | #include <qpe/qpeapplication.h> |
29 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 29 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
30 | #include <qpe/qcopenvelope_qws.h> | 30 | #include <qpe/qcopenvelope_qws.h> |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #include <qlabel.h> | 33 | #include <qlabel.h> |
34 | #include <qcheckbox.h> | 34 | #include <qcheckbox.h> |
35 | #include <qradiobutton.h> | 35 | #include <qradiobutton.h> |
36 | #include <qtabwidget.h> | 36 | #include <qtabwidget.h> |
37 | #include <qslider.h> | 37 | #include <qslider.h> |
38 | #include <qfile.h> | 38 | #include <qfile.h> |
39 | #include <qtextstream.h> | 39 | #include <qtextstream.h> |
40 | #include <qdatastream.h> | 40 | #include <qdatastream.h> |
41 | #include <qmessagebox.h> | 41 | #include <qmessagebox.h> |
42 | #include <qcombobox.h> | 42 | #include <qcombobox.h> |
43 | #include <qspinbox.h> | 43 | #include <qspinbox.h> |
44 | #include <qlistbox.h> | 44 | #include <qlistbox.h> |
45 | #include <qdir.h> | 45 | #include <qdir.h> |
46 | #if QT_VERSION >= 300 | 46 | #if QT_VERSION >= 0x030000 |
47 | #include <qstylefactory.h> | 47 | #include <qstylefactory.h> |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #include <stdlib.h> | 50 | #include <stdlib.h> |
51 | 51 | ||
52 | 52 | ||
53 | LanguageSettings::LanguageSettings( QWidget* parent, const char* name, WFlags fl ) | 53 | LanguageSettings::LanguageSettings( QWidget* parent, const char* name, WFlags fl ) |
54 | : LanguageSettingsBase( parent, name, TRUE, fl ) | 54 | : LanguageSettingsBase( parent, name, TRUE, fl ) |
55 | { | 55 | { |
56 | if ( FontManager::hasUnicodeFont() ) | 56 | if ( FontManager::hasUnicodeFont() ) |
57 | languages->setFont(FontManager::unicodeFont(FontManager::Proportional)); | 57 | languages->setFont(FontManager::unicodeFont(FontManager::Proportional)); |
58 | 58 | ||
59 | 59 | ||
60 | QString tfn = QPEApplication::qpeDir() + "i18n/"; | 60 | QString tfn = QPEApplication::qpeDir() + "i18n/"; |
61 | QDir langDir = tfn; | 61 | QDir langDir = tfn; |
62 | QStringList list = langDir.entryList("*", QDir::Dirs ); | 62 | QStringList list = langDir.entryList("*", QDir::Dirs ); |
63 | 63 | ||
64 | QStringList::Iterator it; | 64 | QStringList::Iterator it; |
65 | 65 | ||
66 | for ( it = list.begin(); it != list.end(); ++it ) { | 66 | for ( it = list.begin(); it != list.end(); ++it ) { |
67 | QString name = (*it); | 67 | QString name = (*it); |
68 | QFileInfo desktopFile( tfn + "/" + name + "/.directory" ); | 68 | QFileInfo desktopFile( tfn + "/" + name + "/.directory" ); |
69 | if ( desktopFile.exists() ) { | 69 | if ( desktopFile.exists() ) { |
70 | langAvail.append(name); | 70 | langAvail.append(name); |
71 | Config conf( desktopFile.filePath(), Config::File ); | 71 | Config conf( desktopFile.filePath(), Config::File ); |
72 | QString langName = conf.readEntry( "Name" ); | 72 | QString langName = conf.readEntry( "Name" ); |
73 | QString ownName = conf.readEntryDirect( "Name[" + name + "]" ); | 73 | QString ownName = conf.readEntryDirect( "Name[" + name + "]" ); |
74 | if ( ownName.isEmpty() ) | 74 | if ( ownName.isEmpty() ) |
75 | ownName = conf.readEntryDirect( "Name" ); | 75 | ownName = conf.readEntryDirect( "Name" ); |
76 | if ( !ownName.isEmpty() && ownName != langName ) | 76 | if ( !ownName.isEmpty() && ownName != langName ) |
77 | langName = langName + " [" + ownName + "]"; | 77 | langName = langName + " [" + ownName + "]"; |
78 | languages->insertItem( langName ); | 78 | languages->insertItem( langName ); |
79 | 79 | ||
80 | } | 80 | } |
81 | } | 81 | } |
82 | if ( langAvail. find ( "en" ) == -1 ) { | 82 | if ( langAvail. find ( "en" ) == -1 ) { |
83 | langAvail. prepend ( "" ); // no tr | 83 | langAvail. prepend ( "" ); // no tr |
84 | languages-> insertItem ( QString ( "English [%1] (%2)" /* no tr (!) */ ). arg ( tr ( "English" )). arg ( tr( "default" )), 0 ); | 84 | languages-> insertItem ( QString ( "English [%1] (%2)" /* no tr (!) */ ). arg ( tr ( "English" )). arg ( tr( "default" )), 0 ); |
85 | } | 85 | } |
86 | 86 | ||
87 | dl = new QPEDialogListener(this); | 87 | dl = new QPEDialogListener(this); |
88 | reset(); | 88 | reset(); |
89 | } | 89 | } |
90 | 90 | ||
91 | LanguageSettings::~LanguageSettings() | 91 | LanguageSettings::~LanguageSettings() |
92 | {} | 92 | {} |
93 | 93 | ||
94 | void LanguageSettings::accept() | 94 | void LanguageSettings::accept() |
95 | { | 95 | { |
96 | Config c( "qpe" ); | 96 | Config c( "qpe" ); |
97 | c.setGroup( "Startup" ); | 97 | c.setGroup( "Startup" ); |
98 | if ( ( c.readNumEntry( "FirstUse", 42 ) == 0 ) && | 98 | if ( ( c.readNumEntry( "FirstUse", 42 ) == 0 ) && |
99 | ( QMessageBox::warning( this, tr("Language"), tr("<qt>Attention, all windows will be closed by changing the language\n" | 99 | ( QMessageBox::warning( this, tr("Language"), tr("<qt>Attention, all windows will be closed by changing the language\n" |
100 | "without saving the Data.<br><br>Go on?</qt>"), 1, 2) ) | 100 | "without saving the Data.<br><br>Go on?</qt>"), 1, 2) ) |
101 | == QMessageBox::Cancel ) | 101 | == QMessageBox::Cancel ) |
102 | return; | 102 | return; |
103 | applyLanguage(); | 103 | applyLanguage(); |
104 | QDialog::accept(); | 104 | QDialog::accept(); |
105 | } | 105 | } |
106 | 106 | ||
107 | void LanguageSettings::applyLanguage() | 107 | void LanguageSettings::applyLanguage() |
108 | { | 108 | { |
109 | setLanguage ( langAvail. at ( languages-> currentItem ( ))); | 109 | setLanguage ( langAvail. at ( languages-> currentItem ( ))); |
110 | } | 110 | } |
111 | 111 | ||
112 | 112 | ||
113 | void LanguageSettings::reject() | 113 | void LanguageSettings::reject() |
114 | { | 114 | { |
115 | reset(); | 115 | reset(); |
116 | QDialog::reject(); | 116 | QDialog::reject(); |
117 | } | 117 | } |
118 | 118 | ||
119 | void LanguageSettings::reset() | 119 | void LanguageSettings::reset() |
120 | { | 120 | { |
121 | QString l = getenv("LANG"); | 121 | QString l = getenv("LANG"); |
122 | Config config("locale"); | 122 | Config config("locale"); |
123 | config.setGroup("Language"); | 123 | config.setGroup("Language"); |
124 | l = config.readEntry( "Language", l ); | 124 | l = config.readEntry( "Language", l ); |
125 | actualLanguage = l; | 125 | actualLanguage = l; |
126 | if (l.isEmpty()) | 126 | if (l.isEmpty()) |
127 | l = "en"; | 127 | l = "en"; |
128 | 128 | ||
129 | int n = langAvail.find( l ); | 129 | int n = langAvail.find( l ); |
130 | languages->setCurrentItem( n ); | 130 | languages->setCurrentItem( n ); |
131 | } | 131 | } |
132 | 132 | ||
133 | QString LanguageSettings::actualLanguage; | 133 | QString LanguageSettings::actualLanguage; |
134 | 134 | ||
135 | void LanguageSettings::setLanguage(const QString& lang) | 135 | void LanguageSettings::setLanguage(const QString& lang) |
136 | { | 136 | { |
137 | if ( lang != actualLanguage ) { | 137 | if ( lang != actualLanguage ) { |
138 | Config config("locale"); | 138 | Config config("locale"); |
139 | config.setGroup( "Language" ); | 139 | config.setGroup( "Language" ); |
140 | if ( lang. isEmpty ( )) | 140 | if ( lang. isEmpty ( )) |
141 | config. removeEntry ( "Language" ); | 141 | config. removeEntry ( "Language" ); |
142 | else | 142 | else |
143 | config.writeEntry( "Language", lang ); | 143 | config.writeEntry( "Language", lang ); |
144 | config.write(); | 144 | config.write(); |
145 | 145 | ||
146 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) | 146 | #if defined(Q_WS_QWS) && !defined(QT_NO_COP) |
147 | 147 | ||
148 | QCopEnvelope e("QPE/System", "language(QString)"); | 148 | QCopEnvelope e("QPE/System", "language(QString)"); |
149 | e << lang; | 149 | e << lang; |
150 | #endif | 150 | #endif |
151 | 151 | ||
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | void LanguageSettings::done(int r) | 155 | void LanguageSettings::done(int r) |
156 | { | 156 | { |
157 | QDialog::done(r); | 157 | QDialog::done(r); |
158 | close(); | 158 | close(); |
159 | } | 159 | } |
diff --git a/noncore/settings/networksettings/interfaces/module.h b/noncore/settings/networksettings/interfaces/module.h index 9dc913e..13189c3 100644 --- a/noncore/settings/networksettings/interfaces/module.h +++ b/noncore/settings/networksettings/interfaces/module.h | |||
@@ -1,188 +1,188 @@ | |||
1 | #ifndef NETCONF_MODULE_H | 1 | #ifndef NETCONF_MODULE_H |
2 | #define NETCONF_MODULE_H | 2 | #define NETCONF_MODULE_H |
3 | 3 | ||
4 | #include <qobject.h> | 4 | #include <qobject.h> |
5 | #if QT_VERSION < 300 | 5 | #if QT_VERSION < 0x030000 |
6 | #include <qlist.h> | 6 | #include <qlist.h> |
7 | #else | 7 | #else |
8 | #include <qptrlist.h> | 8 | #include <qptrlist.h> |
9 | #endif | 9 | #endif |
10 | #include <qmap.h> | 10 | #include <qmap.h> |
11 | #include "interface.h" | 11 | #include "interface.h" |
12 | 12 | ||
13 | class QWidget; | 13 | class QWidget; |
14 | class QTabWidget; | 14 | class QTabWidget; |
15 | 15 | ||
16 | 16 | ||
17 | /** | 17 | /** |
18 | * \brief The basis of all plugins | 18 | * \brief The basis of all plugins |
19 | * | 19 | * |
20 | * This is the way to extend networksettings with | 20 | * This is the way to extend networksettings with |
21 | * extra functionality. | 21 | * extra functionality. |
22 | * | 22 | * |
23 | * | 23 | * |
24 | * Networksettings in the 1.0 release does not use QCOM | 24 | * Networksettings in the 1.0 release does not use QCOM |
25 | * for activation. You need to provide the following function yourself. | 25 | * for activation. You need to provide the following function yourself. |
26 | * | 26 | * |
27 | * A module needs to provide Name, Images, and methods for | 27 | * A module needs to provide Name, Images, and methods for |
28 | * claiming interfaces. For example you can claim physicla | 28 | * claiming interfaces. For example you can claim physicla |
29 | * interfaces like wlan0, ppp0 or virtual like a VPN | 29 | * interfaces like wlan0, ppp0 or virtual like a VPN |
30 | * connection and hide the real ppp device or ethernet device | 30 | * connection and hide the real ppp device or ethernet device |
31 | * behind your VPN plugin. | 31 | * behind your VPN plugin. |
32 | * | 32 | * |
33 | * During start up. The main application searches for network devices | 33 | * During start up. The main application searches for network devices |
34 | * and then looks for an owner under the plugins for them. | 34 | * and then looks for an owner under the plugins for them. |
35 | * For example the WLAN Plugin looks if there is a WLAN Extension | 35 | * For example the WLAN Plugin looks if there is a WLAN Extension |
36 | * on that interface and then claims it by returning true from isOwner() | 36 | * on that interface and then claims it by returning true from isOwner() |
37 | * | 37 | * |
38 | * \code | 38 | * \code |
39 | * extern "C" | 39 | * extern "C" |
40 | * { | 40 | * { |
41 | * void* create_plugin() { | 41 | * void* create_plugin() { |
42 | * return new WLANModule(); | 42 | * return new WLANModule(); |
43 | * } | 43 | * } |
44 | * }; | 44 | * }; |
45 | * \endcode | 45 | * \endcode |
46 | * @see isOwner(Interface*) | 46 | * @see isOwner(Interface*) |
47 | */ | 47 | */ |
48 | class Module : private QObject{ | 48 | class Module : private QObject{ |
49 | 49 | ||
50 | signals: | 50 | signals: |
51 | /** | 51 | /** |
52 | * Emit this Signal once you change the Interface | 52 | * Emit this Signal once you change the Interface |
53 | * you're operating on | 53 | * you're operating on |
54 | * | 54 | * |
55 | * @param i The Interface | 55 | * @param i The Interface |
56 | */ | 56 | */ |
57 | void updateInterface(Interface *i); | 57 | void updateInterface(Interface *i); |
58 | 58 | ||
59 | 59 | ||
60 | public: | 60 | public: |
61 | Module(){}; | 61 | Module(){}; |
62 | 62 | ||
63 | /** | 63 | /** |
64 | * The type of the plugin | 64 | * The type of the plugin |
65 | * and the name of the qcop call | 65 | * and the name of the qcop call |
66 | */ | 66 | */ |
67 | virtual const QString type() = 0; | 67 | virtual const QString type() = 0; |
68 | 68 | ||
69 | /** | 69 | /** |
70 | * The current profile has been changed and the module should do any | 70 | * The current profile has been changed and the module should do any |
71 | * neccesary changes also. | 71 | * neccesary changes also. |
72 | * As of Opie1.0 profiles are disabled. | 72 | * As of Opie1.0 profiles are disabled. |
73 | * | 73 | * |
74 | * @param newProfile what the profile should be changed to. | 74 | * @param newProfile what the profile should be changed to. |
75 | */ | 75 | */ |
76 | virtual void setProfile(const QString &newProfile) = 0; | 76 | virtual void setProfile(const QString &newProfile) = 0; |
77 | 77 | ||
78 | /** | 78 | /** |
79 | * get the icon name for this device. | 79 | * get the icon name for this device. |
80 | * @param Interface* can be used in determining the icon. | 80 | * @param Interface* can be used in determining the icon. |
81 | * @return QString the icon name (minus .png, .gif etc) | 81 | * @return QString the icon name (minus .png, .gif etc) |
82 | */ | 82 | */ |
83 | virtual QString getPixmapName(Interface *) = 0; | 83 | virtual QString getPixmapName(Interface *) = 0; |
84 | 84 | ||
85 | /** | 85 | /** |
86 | * Check to see if the interface i is owned by this module. | 86 | * Check to see if the interface i is owned by this module. |
87 | * See if you can handle it. And if you can claim ownership | 87 | * See if you can handle it. And if you can claim ownership |
88 | * by returning true. | 88 | * by returning true. |
89 | * For physical devices you will be asked if you want to own the | 89 | * For physical devices you will be asked if you want to own the |
90 | * device. But you can also create new \sa Interface Implementations. | 90 | * device. But you can also create new \sa Interface Implementations. |
91 | * | 91 | * |
92 | * If you want to own the Interface add it to your internal interface | 92 | * If you want to own the Interface add it to your internal interface |
93 | * list | 93 | * list |
94 | * | 94 | * |
95 | * @param Interface* interface to check against | 95 | * @param Interface* interface to check against |
96 | * @return bool true if i is owned by this module, false otherwise. | 96 | * @return bool true if i is owned by this module, false otherwise. |
97 | * | 97 | * |
98 | * @see getInterfaces | 98 | * @see getInterfaces |
99 | */ | 99 | */ |
100 | virtual bool isOwner(Interface *){ return false; }; | 100 | virtual bool isOwner(Interface *){ return false; }; |
101 | 101 | ||
102 | /** | 102 | /** |
103 | * Create and return the Configure Module | 103 | * Create and return the Configure Module |
104 | * @param Interface *i the interface to configure. | 104 | * @param Interface *i the interface to configure. |
105 | * @return QWidget* pointer to this modules configure. | 105 | * @return QWidget* pointer to this modules configure. |
106 | * | 106 | * |
107 | * @see InterfaceSetupImp | 107 | * @see InterfaceSetupImp |
108 | */ | 108 | */ |
109 | virtual QWidget *configure(Interface *){ return NULL; } ; | 109 | virtual QWidget *configure(Interface *){ return NULL; } ; |
110 | 110 | ||
111 | /** | 111 | /** |
112 | * Create, and return the Information Module. | 112 | * Create, and return the Information Module. |
113 | * | 113 | * |
114 | * An default Implementation is InterfaceInformationImp | 114 | * An default Implementation is InterfaceInformationImp |
115 | * | 115 | * |
116 | * @param Interface *i the interface to get info on. | 116 | * @param Interface *i the interface to get info on. |
117 | * @return QWidget* pointer to this modules info. | 117 | * @return QWidget* pointer to this modules info. |
118 | * | 118 | * |
119 | * @see InterfaceInformationImp | 119 | * @see InterfaceInformationImp |
120 | * | 120 | * |
121 | */ | 121 | */ |
122 | virtual QWidget *information(Interface *){ return NULL; }; | 122 | virtual QWidget *information(Interface *){ return NULL; }; |
123 | 123 | ||
124 | /** | 124 | /** |
125 | * Get all active (up or down) interfaces managed by this | 125 | * Get all active (up or down) interfaces managed by this |
126 | * module. | 126 | * module. |
127 | * At the end of initialisation you will be asked to return your interfaces | 127 | * At the end of initialisation you will be asked to return your interfaces |
128 | * Return all of your interfaces even the ones you claimed by isOnwer. | 128 | * Return all of your interfaces even the ones you claimed by isOnwer. |
129 | * Here you can also return your 'virtual' Interface Objects | 129 | * Here you can also return your 'virtual' Interface Objects |
130 | * | 130 | * |
131 | * @return QList<Interface> A list of interfaces that exsist that havn't | 131 | * @return QList<Interface> A list of interfaces that exsist that havn't |
132 | * been called by isOwner() | 132 | * been called by isOwner() |
133 | */ | 133 | */ |
134 | virtual QList<Interface> getInterfaces() = 0; | 134 | virtual QList<Interface> getInterfaces() = 0; |
135 | 135 | ||
136 | /** | 136 | /** |
137 | * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp), | 137 | * Adds possible new interfaces to the list (Example: usb(ppp), ir(ppp), |
138 | * modem ppp) | 138 | * modem ppp) |
139 | * Both strings need to be translated. The first string is a Shortcut | 139 | * Both strings need to be translated. The first string is a Shortcut |
140 | * like PPP and the second argument is a description. | 140 | * like PPP and the second argument is a description. |
141 | * | 141 | * |
142 | * <code> | 142 | * <code> |
143 | * list.insert( | 143 | * list.insert( |
144 | * | 144 | * |
145 | * </code> | 145 | * </code> |
146 | * | 146 | * |
147 | * @param list A reference to the list of supported additionns. | 147 | * @param list A reference to the list of supported additionns. |
148 | */ | 148 | */ |
149 | virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0; | 149 | virtual void possibleNewInterfaces(QMap<QString, QString> &list) = 0; |
150 | 150 | ||
151 | /** | 151 | /** |
152 | * Attempts to create a new interface from name you gave | 152 | * Attempts to create a new interface from name you gave |
153 | * possibleNewInterfaces() | 153 | * possibleNewInterfaces() |
154 | * @return Interface* NULL if it was unable to be created. | 154 | * @return Interface* NULL if it was unable to be created. |
155 | * @param name the type of interface to create | 155 | * @param name the type of interface to create |
156 | * | 156 | * |
157 | * @see possibleNewInterfaces | 157 | * @see possibleNewInterfaces |
158 | */ | 158 | */ |
159 | virtual Interface *addNewInterface(const QString &name) = 0; | 159 | virtual Interface *addNewInterface(const QString &name) = 0; |
160 | 160 | ||
161 | /** | 161 | /** |
162 | * Attempts to remove the interface, doesn't delete i | 162 | * Attempts to remove the interface, doesn't delete i |
163 | * @return bool true if successful, false otherwise. | 163 | * @return bool true if successful, false otherwise. |
164 | */ | 164 | */ |
165 | virtual bool remove(Interface* i) = 0; | 165 | virtual bool remove(Interface* i) = 0; |
166 | 166 | ||
167 | /** | 167 | /** |
168 | * get dcop calls | 168 | * get dcop calls |
169 | */ | 169 | */ |
170 | virtual void receive(const QCString &msg, const QByteArray &arg) = 0; | 170 | virtual void receive(const QCString &msg, const QByteArray &arg) = 0; |
171 | 171 | ||
172 | QStringList handledInterfaceNames()const { return m_inter; } | 172 | QStringList handledInterfaceNames()const { return m_inter; } |
173 | protected: | 173 | protected: |
174 | /** | 174 | /** |
175 | * set which interfaceNames should not be shown cause they're handled | 175 | * set which interfaceNames should not be shown cause they're handled |
176 | * internally of this module.. An already running ppp link or | 176 | * internally of this module.. An already running ppp link or |
177 | * a tunnel... VPN an such | 177 | * a tunnel... VPN an such |
178 | */ | 178 | */ |
179 | void setHandledInterfaceNames( const QStringList& in) { m_inter = in; } | 179 | void setHandledInterfaceNames( const QStringList& in) { m_inter = in; } |
180 | 180 | ||
181 | private: | 181 | private: |
182 | QStringList m_inter; | 182 | QStringList m_inter; |
183 | }; | 183 | }; |
184 | 184 | ||
185 | #endif | 185 | #endif |
186 | 186 | ||
187 | // module.h | 187 | // module.h |
188 | 188 | ||
diff --git a/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp b/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp index 84f1cf6..9049af4 100644 --- a/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp +++ b/noncore/settings/networksettings/mainwindow/addconnectionimp.cpp | |||
@@ -1,41 +1,41 @@ | |||
1 | #include "addconnectionimp.h" | 1 | #include "addconnectionimp.h" |
2 | #include <qlistview.h> | 2 | #include <qlistview.h> |
3 | #if QT_VERSION < 300 | 3 | #if QT_VERSION < 0x030000 |
4 | #include <qlist.h> | 4 | #include <qlist.h> |
5 | #else | 5 | #else |
6 | #include <qptrlist.h> | 6 | #include <qptrlist.h> |
7 | #endif | 7 | #endif |
8 | #include <qlabel.h> | 8 | #include <qlabel.h> |
9 | #include <qheader.h> | 9 | #include <qheader.h> |
10 | 10 | ||
11 | /** | 11 | /** |
12 | * Constructor | 12 | * Constructor |
13 | */ | 13 | */ |
14 | AddConnectionImp::AddConnectionImp(QWidget *parent, const char *name, WFlags f):AddConnection(parent, name, f){ | 14 | AddConnectionImp::AddConnectionImp(QWidget *parent, const char *name, WFlags f):AddConnection(parent, name, f){ |
15 | connect(registeredServicesList, SIGNAL(selectionChanged()), this, SLOT(changed())); | 15 | connect(registeredServicesList, SIGNAL(selectionChanged()), this, SLOT(changed())); |
16 | registeredServicesList->header()->hide(); | 16 | registeredServicesList->header()->hide(); |
17 | }; | 17 | }; |
18 | 18 | ||
19 | /** | 19 | /** |
20 | * The current item changed, update the discription. | 20 | * The current item changed, update the discription. |
21 | */ | 21 | */ |
22 | void AddConnectionImp::changed(){ | 22 | void AddConnectionImp::changed(){ |
23 | QListViewItem *item = registeredServicesList->currentItem(); | 23 | QListViewItem *item = registeredServicesList->currentItem(); |
24 | if(item) | 24 | if(item) |
25 | help->setText(list[item->text(0)]); | 25 | help->setText(list[item->text(0)]); |
26 | } | 26 | } |
27 | 27 | ||
28 | /** | 28 | /** |
29 | * Save a copy of newList for the discriptions and append them all to the view | 29 | * Save a copy of newList for the discriptions and append them all to the view |
30 | * @param newList the new list of possible interfaces | 30 | * @param newList the new list of possible interfaces |
31 | */ | 31 | */ |
32 | void AddConnectionImp::addConnections(const QMap<QString, QString> &newList){ | 32 | void AddConnectionImp::addConnections(const QMap<QString, QString> &newList){ |
33 | list = newList; | 33 | list = newList; |
34 | QMap<QString, QString>::Iterator it; | 34 | QMap<QString, QString>::Iterator it; |
35 | for( it = list.begin(); it != list.end(); ++it ) | 35 | for( it = list.begin(); it != list.end(); ++it ) |
36 | (void)new QListViewItem(registeredServicesList, it.key()); | 36 | (void)new QListViewItem(registeredServicesList, it.key()); |
37 | registeredServicesList->setCurrentItem(registeredServicesList->firstChild()); | 37 | registeredServicesList->setCurrentItem(registeredServicesList->firstChild()); |
38 | } | 38 | } |
39 | 39 | ||
40 | // addserviceimp.cpp | 40 | // addserviceimp.cpp |
41 | 41 | ||
diff --git a/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp index 5f23aea..8feb7a5 100644 --- a/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp +++ b/noncore/settings/networksettings/mainwindow/mainwindowimp.cpp | |||
@@ -1,412 +1,412 @@ | |||
1 | 1 | ||
2 | #include "mainwindowimp.h" | 2 | #include "mainwindowimp.h" |
3 | #include "addconnectionimp.h" | 3 | #include "addconnectionimp.h" |
4 | #include "interfaceinformationimp.h" | 4 | #include "interfaceinformationimp.h" |
5 | #include "interfacesetupimp.h" | 5 | #include "interfacesetupimp.h" |
6 | #include "interfaces.h" | 6 | #include "interfaces.h" |
7 | #include "module.h" | 7 | #include "module.h" |
8 | 8 | ||
9 | /* OPIE */ | 9 | /* OPIE */ |
10 | #include <opie2/odebug.h> | 10 | #include <opie2/odebug.h> |
11 | #include <qpe/qcopenvelope_qws.h> | 11 | #include <qpe/qcopenvelope_qws.h> |
12 | #include <qpe/qpeapplication.h> | 12 | #include <qpe/qpeapplication.h> |
13 | #include <qpe/config.h> | 13 | #include <qpe/config.h> |
14 | #include <qpe/qlibrary.h> | 14 | #include <qpe/qlibrary.h> |
15 | #include <qpe/resource.h> | 15 | #include <qpe/resource.h> |
16 | 16 | ||
17 | /* QT */ | 17 | /* QT */ |
18 | #include <qpushbutton.h> | 18 | #include <qpushbutton.h> |
19 | #include <qlistbox.h> | 19 | #include <qlistbox.h> |
20 | #include <qlineedit.h> | 20 | #include <qlineedit.h> |
21 | #include <qlistview.h> | 21 | #include <qlistview.h> |
22 | #include <qheader.h> | 22 | #include <qheader.h> |
23 | #include <qlabel.h> | 23 | #include <qlabel.h> |
24 | #include <qtabwidget.h> // in order to disable the profiles tab | 24 | #include <qtabwidget.h> // in order to disable the profiles tab |
25 | #include <qmessagebox.h> | 25 | #include <qmessagebox.h> |
26 | 26 | ||
27 | 27 | ||
28 | #if QT_VERSION < 300 | 28 | #if QT_VERSION < 0x030000 |
29 | #include <qlist.h> | 29 | #include <qlist.h> |
30 | #else | 30 | #else |
31 | #include <qptrlist.h> | 31 | #include <qptrlist.h> |
32 | #endif | 32 | #endif |
33 | #include <qdir.h> | 33 | #include <qdir.h> |
34 | #include <qfile.h> | 34 | #include <qfile.h> |
35 | #include <qtextstream.h> | 35 | #include <qtextstream.h> |
36 | #include <qregexp.h> | 36 | #include <qregexp.h> |
37 | 37 | ||
38 | /* STD */ | 38 | /* STD */ |
39 | #include <net/if.h> | 39 | #include <net/if.h> |
40 | #include <sys/ioctl.h> | 40 | #include <sys/ioctl.h> |
41 | #include <sys/socket.h> | 41 | #include <sys/socket.h> |
42 | 42 | ||
43 | #define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" | 43 | #define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" |
44 | #define _PROCNETDEV "/proc/net/dev" | 44 | #define _PROCNETDEV "/proc/net/dev" |
45 | 45 | ||
46 | MainWindowImp::MainWindowImp(QWidget *parent, const char *name, WFlags) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME) | 46 | MainWindowImp::MainWindowImp(QWidget *parent, const char *name, WFlags) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME) |
47 | { | 47 | { |
48 | connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); | 48 | connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); |
49 | connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); | 49 | connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); |
50 | connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); | 50 | connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); |
51 | connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); | 51 | connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); |
52 | 52 | ||
53 | //remove tab with no function | 53 | //remove tab with no function |
54 | tabWidget->removePage( tab ); | 54 | tabWidget->removePage( tab ); |
55 | 55 | ||
56 | // Load connections. | 56 | // Load connections. |
57 | // /usr/local/kde/lib/libinterfaces.la | 57 | // /usr/local/kde/lib/libinterfaces.la |
58 | loadModules(QPEApplication::qpeDir() + "plugins/networksettings"); | 58 | loadModules(QPEApplication::qpeDir() + "plugins/networksettings"); |
59 | getAllInterfaces(); | 59 | getAllInterfaces(); |
60 | 60 | ||
61 | Interfaces i; | 61 | Interfaces i; |
62 | QStringList list = i.getInterfaceList(); | 62 | QStringList list = i.getInterfaceList(); |
63 | QMap<QString, Interface*>::Iterator it; | 63 | QMap<QString, Interface*>::Iterator it; |
64 | for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) | 64 | for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) |
65 | { | 65 | { |
66 | /* | 66 | /* |
67 | * we skipped it in getAllInterfaces now | 67 | * we skipped it in getAllInterfaces now |
68 | * we need to ignore it as well | 68 | * we need to ignore it as well |
69 | */ | 69 | */ |
70 | if (m_handledIfaces.contains( *ni) ) | 70 | if (m_handledIfaces.contains( *ni) ) |
71 | { | 71 | { |
72 | odebug << "Not up iface handled by module" << oendl; | 72 | odebug << "Not up iface handled by module" << oendl; |
73 | continue; | 73 | continue; |
74 | } | 74 | } |
75 | bool found = false; | 75 | bool found = false; |
76 | for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ) | 76 | for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ) |
77 | { | 77 | { |
78 | if(it.key() == (*ni)) | 78 | if(it.key() == (*ni)) |
79 | found = true; | 79 | found = true; |
80 | } | 80 | } |
81 | if(!found) | 81 | if(!found) |
82 | { | 82 | { |
83 | if(!(*ni).contains("_")) | 83 | if(!(*ni).contains("_")) |
84 | { | 84 | { |
85 | Interface *i = new Interface(this, *ni, false); | 85 | Interface *i = new Interface(this, *ni, false); |
86 | i->setAttached(false); | 86 | i->setAttached(false); |
87 | i->setHardwareName(tr("Disconnected")); | 87 | i->setHardwareName(tr("Disconnected")); |
88 | interfaceNames.insert(i->getInterfaceName(), i); | 88 | interfaceNames.insert(i->getInterfaceName(), i); |
89 | updateInterface(i); | 89 | updateInterface(i); |
90 | connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*))); | 90 | connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*))); |
91 | } | 91 | } |
92 | } | 92 | } |
93 | } | 93 | } |
94 | 94 | ||
95 | //getInterfaceList(); | 95 | //getInterfaceList(); |
96 | connectionList->header()->hide(); | 96 | connectionList->header()->hide(); |
97 | 97 | ||
98 | Config cfg("NetworkSetup"); | 98 | Config cfg("NetworkSetup"); |
99 | profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); | 99 | profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); |
100 | for ( QStringList::Iterator it = profiles.begin(); | 100 | for ( QStringList::Iterator it = profiles.begin(); |
101 | it != profiles.end(); ++it) | 101 | it != profiles.end(); ++it) |
102 | profilesList->insertItem((*it)); | 102 | profilesList->insertItem((*it)); |
103 | currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); | 103 | currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); |
104 | advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); | 104 | advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); |
105 | scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME); | 105 | scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME); |
106 | 106 | ||
107 | QFile file(scheme); | 107 | QFile file(scheme); |
108 | if ( file.open(IO_ReadOnly) ) | 108 | if ( file.open(IO_ReadOnly) ) |
109 | { // file opened successfully | 109 | { // file opened successfully |
110 | QTextStream stream( &file ); // use a text stream | 110 | QTextStream stream( &file ); // use a text stream |
111 | while ( !stream.eof() ) | 111 | while ( !stream.eof() ) |
112 | { // until end of file... | 112 | { // until end of file... |
113 | QString line = stream.readLine(); // line of text excluding '\n' | 113 | QString line = stream.readLine(); // line of text excluding '\n' |
114 | if(line.contains("SCHEME")) | 114 | if(line.contains("SCHEME")) |
115 | { | 115 | { |
116 | line = line.mid(7, line.length()); | 116 | line = line.mid(7, line.length()); |
117 | currentProfileLabel->setText(line); | 117 | currentProfileLabel->setText(line); |
118 | break; | 118 | break; |
119 | } | 119 | } |
120 | } | 120 | } |
121 | file.close(); | 121 | file.close(); |
122 | } | 122 | } |
123 | makeChannel(); | 123 | makeChannel(); |
124 | } | 124 | } |
125 | 125 | ||
126 | /** | 126 | /** |
127 | * Deconstructor. Save profiles. Delete loaded libraries. | 127 | * Deconstructor. Save profiles. Delete loaded libraries. |
128 | */ | 128 | */ |
129 | MainWindowImp::~MainWindowImp() | 129 | MainWindowImp::~MainWindowImp() |
130 | { | 130 | { |
131 | // Save profiles. | 131 | // Save profiles. |
132 | Config cfg("NetworkSetup"); | 132 | Config cfg("NetworkSetup"); |
133 | cfg.setGroup("General"); | 133 | cfg.setGroup("General"); |
134 | cfg.writeEntry("Profiles", profiles.join(" ")); | 134 | cfg.writeEntry("Profiles", profiles.join(" ")); |
135 | 135 | ||
136 | // Delete all interfaces that don't have owners. | 136 | // Delete all interfaces that don't have owners. |
137 | QMap<Interface*, QListViewItem*>::Iterator iIt; | 137 | QMap<Interface*, QListViewItem*>::Iterator iIt; |
138 | for( iIt = items.begin(); iIt != items.end(); ++iIt ) | 138 | for( iIt = items.begin(); iIt != items.end(); ++iIt ) |
139 | { | 139 | { |
140 | if(iIt.key()->getModuleOwner() == NULL) | 140 | if(iIt.key()->getModuleOwner() == NULL) |
141 | delete iIt.key(); | 141 | delete iIt.key(); |
142 | } | 142 | } |
143 | 143 | ||
144 | // Delete Modules and Libraries | 144 | // Delete Modules and Libraries |
145 | QMap<Module*, QLibrary*>::Iterator it; | 145 | QMap<Module*, QLibrary*>::Iterator it; |
146 | for( it = libraries.begin(); it != libraries.end(); ++it ) | 146 | for( it = libraries.begin(); it != libraries.end(); ++it ) |
147 | { | 147 | { |
148 | delete it.key(); | 148 | delete it.key(); |
149 | // I wonder why I can't delete the libraries | 149 | // I wonder why I can't delete the libraries |
150 | // What fucking shit this is. | 150 | // What fucking shit this is. |
151 | //delete it.data(); | 151 | //delete it.data(); |
152 | } | 152 | } |
153 | } | 153 | } |
154 | 154 | ||
155 | /** | 155 | /** |
156 | * Query the kernel for all of the interfaces. | 156 | * Query the kernel for all of the interfaces. |
157 | */ | 157 | */ |
158 | void MainWindowImp::getAllInterfaces() | 158 | void MainWindowImp::getAllInterfaces() |
159 | { | 159 | { |
160 | int sockfd = socket(PF_INET, SOCK_DGRAM, 0); | 160 | int sockfd = socket(PF_INET, SOCK_DGRAM, 0); |
161 | if(sockfd == -1) | 161 | if(sockfd == -1) |
162 | return; | 162 | return; |
163 | 163 | ||
164 | struct ifreq ifr; | 164 | struct ifreq ifr; |
165 | QStringList ifaces; | 165 | QStringList ifaces; |
166 | QFile procFile(QString(_PROCNETDEV)); | 166 | QFile procFile(QString(_PROCNETDEV)); |
167 | int result; | 167 | int result; |
168 | Interface *i; | 168 | Interface *i; |
169 | 169 | ||
170 | if (! procFile.exists()) | 170 | if (! procFile.exists()) |
171 | { | 171 | { |
172 | struct ifreq ifrs[100]; | 172 | struct ifreq ifrs[100]; |
173 | struct ifconf ifc; | 173 | struct ifconf ifc; |
174 | ifc.ifc_len = sizeof(ifrs); | 174 | ifc.ifc_len = sizeof(ifrs); |
175 | ifc.ifc_req = ifrs; | 175 | ifc.ifc_req = ifrs; |
176 | result = ioctl(sockfd, SIOCGIFCONF, &ifc); | 176 | result = ioctl(sockfd, SIOCGIFCONF, &ifc); |
177 | 177 | ||
178 | for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++) | 178 | for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++) |
179 | { | 179 | { |
180 | struct ifreq *pifr = &ifrs[i]; | 180 | struct ifreq *pifr = &ifrs[i]; |
181 | 181 | ||
182 | ifaces += pifr->ifr_name; | 182 | ifaces += pifr->ifr_name; |
183 | } | 183 | } |
184 | } | 184 | } |
185 | else | 185 | else |
186 | { | 186 | { |
187 | procFile.open(IO_ReadOnly); | 187 | procFile.open(IO_ReadOnly); |
188 | QString line; | 188 | QString line; |
189 | QTextStream procTs(&procFile); | 189 | QTextStream procTs(&procFile); |
190 | int loc = -1; | 190 | int loc = -1; |
191 | 191 | ||
192 | procTs.readLine(); // eat a line | 192 | procTs.readLine(); // eat a line |
193 | procTs.readLine(); // eat a line | 193 | procTs.readLine(); // eat a line |
194 | while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) | 194 | while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) |
195 | { | 195 | { |
196 | if((loc = line.find(":")) != -1) | 196 | if((loc = line.find(":")) != -1) |
197 | { | 197 | { |
198 | ifaces += line.left(loc); | 198 | ifaces += line.left(loc); |
199 | } | 199 | } |
200 | } | 200 | } |
201 | } | 201 | } |
202 | 202 | ||
203 | for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it) | 203 | for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it) |
204 | { | 204 | { |
205 | int flags = 0; | 205 | int flags = 0; |
206 | if ( m_handledIfaces.contains( (*it) ) ) | 206 | if ( m_handledIfaces.contains( (*it) ) ) |
207 | { | 207 | { |
208 | odebug << " " << (*it).latin1() << " is handled by a module" << oendl; | 208 | odebug << " " << (*it).latin1() << " is handled by a module" << oendl; |
209 | continue; | 209 | continue; |
210 | } | 210 | } |
211 | // int family; | 211 | // int family; |
212 | i = NULL; | 212 | i = NULL; |
213 | 213 | ||
214 | strcpy(ifr.ifr_name, (*it).latin1()); | 214 | strcpy(ifr.ifr_name, (*it).latin1()); |
215 | 215 | ||
216 | struct ifreq ifcopy; | 216 | struct ifreq ifcopy; |
217 | ifcopy = ifr; | 217 | ifcopy = ifr; |
218 | result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy); | 218 | result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy); |
219 | flags = ifcopy.ifr_flags; | 219 | flags = ifcopy.ifr_flags; |
220 | i = new Interface(this, ifr.ifr_name, false); | 220 | i = new Interface(this, ifr.ifr_name, false); |
221 | i->setAttached(true); | 221 | i->setAttached(true); |
222 | if ((flags & IFF_UP) == IFF_UP) | 222 | if ((flags & IFF_UP) == IFF_UP) |
223 | i->setStatus(true); | 223 | i->setStatus(true); |
224 | else | 224 | else |
225 | i->setStatus(false); | 225 | i->setStatus(false); |
226 | 226 | ||
227 | if ((flags & IFF_BROADCAST) == IFF_BROADCAST) | 227 | if ((flags & IFF_BROADCAST) == IFF_BROADCAST) |
228 | i->setHardwareName("Ethernet"); | 228 | i->setHardwareName("Ethernet"); |
229 | else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) | 229 | else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) |
230 | i->setHardwareName("Point to Point"); | 230 | i->setHardwareName("Point to Point"); |
231 | else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) | 231 | else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) |
232 | i->setHardwareName("Multicast"); | 232 | i->setHardwareName("Multicast"); |
233 | else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) | 233 | else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) |
234 | i->setHardwareName("Loopback"); | 234 | i->setHardwareName("Loopback"); |
235 | else | 235 | else |
236 | i->setHardwareName("Unknown"); | 236 | i->setHardwareName("Unknown"); |
237 | 237 | ||
238 | owarn << "Adding interface " << ifr.ifr_name << " to interfaceNames\n" << oendl; | 238 | owarn << "Adding interface " << ifr.ifr_name << " to interfaceNames\n" << oendl; |
239 | interfaceNames.insert(i->getInterfaceName(), i); | 239 | interfaceNames.insert(i->getInterfaceName(), i); |
240 | updateInterface(i); | 240 | updateInterface(i); |
241 | connect(i, SIGNAL(updateInterface(Interface*)), | 241 | connect(i, SIGNAL(updateInterface(Interface*)), |
242 | this, SLOT(updateInterface(Interface*))); | 242 | this, SLOT(updateInterface(Interface*))); |
243 | } | 243 | } |
244 | // now lets ask the plugins too ;) | 244 | // now lets ask the plugins too ;) |
245 | QMap<Module*, QLibrary*>::Iterator it; | 245 | QMap<Module*, QLibrary*>::Iterator it; |
246 | QList<Interface> ilist; | 246 | QList<Interface> ilist; |
247 | for( it = libraries.begin(); it != libraries.end(); ++it ) | 247 | for( it = libraries.begin(); it != libraries.end(); ++it ) |
248 | { | 248 | { |
249 | if(it.key()) | 249 | if(it.key()) |
250 | { | 250 | { |
251 | ilist = it.key()->getInterfaces(); | 251 | ilist = it.key()->getInterfaces(); |
252 | for( i = ilist.first(); i != 0; i = ilist.next() ) | 252 | for( i = ilist.first(); i != 0; i = ilist.next() ) |
253 | { | 253 | { |
254 | owarn << "Adding interface " << i->getInterfaceName().latin1() << " to interfaceNames\n" << oendl; | 254 | owarn << "Adding interface " << i->getInterfaceName().latin1() << " to interfaceNames\n" << oendl; |
255 | interfaceNames.insert(i->getInterfaceName(), i); | 255 | interfaceNames.insert(i->getInterfaceName(), i); |
256 | updateInterface(i); | 256 | updateInterface(i); |
257 | connect(i, SIGNAL(updateInterface(Interface*)), | 257 | connect(i, SIGNAL(updateInterface(Interface*)), |
258 | this, SLOT(updateInterface(Interface*))); | 258 | this, SLOT(updateInterface(Interface*))); |
259 | } | 259 | } |
260 | } | 260 | } |
261 | } | 261 | } |
262 | } | 262 | } |
263 | 263 | ||
264 | /** | 264 | /** |
265 | * Load all modules that are found in the path | 265 | * Load all modules that are found in the path |
266 | * @param path a directory that is scaned for any plugins that can be loaded | 266 | * @param path a directory that is scaned for any plugins that can be loaded |
267 | * and attempts to load them | 267 | * and attempts to load them |
268 | */ | 268 | */ |
269 | void MainWindowImp::loadModules(const QString &path) | 269 | void MainWindowImp::loadModules(const QString &path) |
270 | { | 270 | { |
271 | #ifdef DEBUG | 271 | #ifdef DEBUG |
272 | odebug << "MainWindowImp::loadModules: " << path.latin1() << "" << oendl; | 272 | odebug << "MainWindowImp::loadModules: " << path.latin1() << "" << oendl; |
273 | #endif | 273 | #endif |
274 | QDir d(path); | 274 | QDir d(path); |
275 | if(!d.exists()) | 275 | if(!d.exists()) |
276 | return; | 276 | return; |
277 | 277 | ||
278 | QString lang = ::getenv("LANG"); | 278 | QString lang = ::getenv("LANG"); |
279 | // Don't want sym links | 279 | // Don't want sym links |
280 | d.setFilter( QDir::Files | QDir::NoSymLinks ); | 280 | d.setFilter( QDir::Files | QDir::NoSymLinks ); |
281 | const QFileInfoList *list = d.entryInfoList(); | 281 | const QFileInfoList *list = d.entryInfoList(); |
282 | QFileInfoListIterator it( *list ); | 282 | QFileInfoListIterator it( *list ); |
283 | QFileInfo *fi; | 283 | QFileInfo *fi; |
284 | while ( (fi=it.current()) ) | 284 | while ( (fi=it.current()) ) |
285 | { | 285 | { |
286 | if(fi->fileName().contains(".so")) | 286 | if(fi->fileName().contains(".so")) |
287 | { | 287 | { |
288 | /* if loaded install translation */ | 288 | /* if loaded install translation */ |
289 | if( loadPlugin(path + "/" + fi->fileName()) != 0l ){ | 289 | if( loadPlugin(path + "/" + fi->fileName()) != 0l ){ |
290 | QTranslator *trans = new QTranslator(qApp); | 290 | QTranslator *trans = new QTranslator(qApp); |
291 | QString fn = QPEApplication::qpeDir()+"i18n/"+lang+"/"+ fi->fileName().left( fi->fileName().find(".") )+".qm"; | 291 | QString fn = QPEApplication::qpeDir()+"i18n/"+lang+"/"+ fi->fileName().left( fi->fileName().find(".") )+".qm"; |
292 | if( trans->load( fn ) ) | 292 | if( trans->load( fn ) ) |
293 | qApp->installTranslator( trans ); | 293 | qApp->installTranslator( trans ); |
294 | else | 294 | else |
295 | delete trans; | 295 | delete trans; |
296 | } | 296 | } |
297 | odebug << "loaded plugin: >" << QString(path + "/" + fi->fileName()).latin1() << "< " << oendl; | 297 | odebug << "loaded plugin: >" << QString(path + "/" + fi->fileName()).latin1() << "< " << oendl; |
298 | } | 298 | } |
299 | ++it; | 299 | ++it; |
300 | } | 300 | } |
301 | } | 301 | } |
302 | 302 | ||
303 | /** | 303 | /** |
304 | * Attempt to load a function and resolve a function. | 304 | * Attempt to load a function and resolve a function. |
305 | * @param pluginFileName - the name of the file in which to attempt to load | 305 | * @param pluginFileName - the name of the file in which to attempt to load |
306 | * @param resolveString - function pointer to resolve | 306 | * @param resolveString - function pointer to resolve |
307 | * @return pointer to the function with name resolveString or NULL | 307 | * @return pointer to the function with name resolveString or NULL |
308 | */ | 308 | */ |
309 | Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString) | 309 | Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString) |
310 | { | 310 | { |
311 | #ifdef DEBUG | 311 | #ifdef DEBUG |
312 | odebug << "MainWindowImp::loadPlugin: " << pluginFileName.latin1() << ": resolving " << resolveString.latin1() << "" << oendl; | 312 | odebug << "MainWindowImp::loadPlugin: " << pluginFileName.latin1() << ": resolving " << resolveString.latin1() << "" << oendl; |
313 | #endif | 313 | #endif |
314 | QLibrary *lib = new QLibrary(pluginFileName); | 314 | QLibrary *lib = new QLibrary(pluginFileName); |
315 | void *functionPointer = lib->resolve(resolveString); | 315 | void *functionPointer = lib->resolve(resolveString); |
316 | if( !functionPointer ) | 316 | if( !functionPointer ) |
317 | { | 317 | { |
318 | #ifdef DEBUG | 318 | #ifdef DEBUG |
319 | odebug << "MainWindowImp::loadPlugin: Warning: " << pluginFileName.latin1() << " is not a plugin" << oendl; | 319 | odebug << "MainWindowImp::loadPlugin: Warning: " << pluginFileName.latin1() << " is not a plugin" << oendl; |
320 | #endif | 320 | #endif |
321 | delete lib; | 321 | delete lib; |
322 | return 0; | 322 | return 0; |
323 | } | 323 | } |
324 | // Try to get an object. | 324 | // Try to get an object. |
325 | Module *object = ((Module* (*)()) functionPointer)(); | 325 | Module *object = ((Module* (*)()) functionPointer)(); |
326 | if(object == 0) | 326 | if(object == 0) |
327 | { | 327 | { |
328 | #ifdef DEBUG | 328 | #ifdef DEBUG |
329 | odebug << "MainWindowImp: Couldn't create object, but did load library!" << oendl; | 329 | odebug << "MainWindowImp: Couldn't create object, but did load library!" << oendl; |
330 | #endif | 330 | #endif |
331 | delete lib; | 331 | delete lib; |
332 | return 0; | 332 | return 0; |
333 | } | 333 | } |
334 | 334 | ||
335 | m_handledIfaces += object->handledInterfaceNames(); | 335 | m_handledIfaces += object->handledInterfaceNames(); |
336 | // Store for deletion later | 336 | // Store for deletion later |
337 | libraries.insert(object, lib); | 337 | libraries.insert(object, lib); |
338 | return object; | 338 | return object; |
339 | } | 339 | } |
340 | 340 | ||
341 | /** | 341 | /** |
342 | * The Add button was clicked. Bring up the add dialog and if OK is hit | 342 | * The Add button was clicked. Bring up the add dialog and if OK is hit |
343 | * load the plugin and append it to the list | 343 | * load the plugin and append it to the list |
344 | */ | 344 | */ |
345 | void MainWindowImp::addClicked() | 345 | void MainWindowImp::addClicked() |
346 | { | 346 | { |
347 | QMap<Module*, QLibrary*>::Iterator it; | 347 | QMap<Module*, QLibrary*>::Iterator it; |
348 | QMap<QString, QString> list; | 348 | QMap<QString, QString> list; |
349 | QMap<QString, Module*> newInterfaceOwners; | 349 | QMap<QString, Module*> newInterfaceOwners; |
350 | 350 | ||
351 | for( it = libraries.begin(); it != libraries.end(); ++it ) | 351 | for( it = libraries.begin(); it != libraries.end(); ++it ) |
352 | { | 352 | { |
353 | if(it.key()) | 353 | if(it.key()) |
354 | { | 354 | { |
355 | (it.key())->possibleNewInterfaces(list); | 355 | (it.key())->possibleNewInterfaces(list); |
356 | } | 356 | } |
357 | } | 357 | } |
358 | // See if the list has anything that we can add. | 358 | // See if the list has anything that we can add. |
359 | if(list.count() == 0) | 359 | if(list.count() == 0) |
360 | { | 360 | { |
361 | QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok); | 361 | QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok); |
362 | return; | 362 | return; |
363 | } | 363 | } |
364 | AddConnectionImp addNewConnection(this, "AddConnectionImp", true); | 364 | AddConnectionImp addNewConnection(this, "AddConnectionImp", true); |
365 | addNewConnection.addConnections(list); | 365 | addNewConnection.addConnections(list); |
366 | if( QDialog::Accepted == QPEApplication::execDialog( &addNewConnection ) ) | 366 | if( QDialog::Accepted == QPEApplication::execDialog( &addNewConnection ) ) |
367 | { | 367 | { |
368 | QListViewItem *item = addNewConnection.registeredServicesList->currentItem(); | 368 | QListViewItem *item = addNewConnection.registeredServicesList->currentItem(); |
369 | if(!item) | 369 | if(!item) |
370 | return; | 370 | return; |
371 | 371 | ||
372 | for( it = libraries.begin(); it != libraries.end(); ++it ) | 372 | for( it = libraries.begin(); it != libraries.end(); ++it ) |
373 | { | 373 | { |
374 | if(it.key()) | 374 | if(it.key()) |
375 | { | 375 | { |
376 | Interface *i = (it.key())->addNewInterface(item->text(0)); | 376 | Interface *i = (it.key())->addNewInterface(item->text(0)); |
377 | if(i) | 377 | if(i) |
378 | { | 378 | { |
379 | odebug << "iface name " << i->getInterfaceName().latin1() << "" << oendl; | 379 | odebug << "iface name " << i->getInterfaceName().latin1() << "" << oendl; |
380 | interfaceNames.insert(i->getInterfaceName(), i); | 380 | interfaceNames.insert(i->getInterfaceName(), i); |
381 | updateInterface(i); | 381 | updateInterface(i); |
382 | } | 382 | } |
383 | } | 383 | } |
384 | } | 384 | } |
385 | } | 385 | } |
386 | } | 386 | } |
387 | 387 | ||
388 | /** | 388 | /** |
389 | * Prompt the user to see if they really want to do this. | 389 | * Prompt the user to see if they really want to do this. |
390 | * If they do then remove from the list and unload. | 390 | * If they do then remove from the list and unload. |
391 | */ | 391 | */ |
392 | void MainWindowImp::removeClicked() | 392 | void MainWindowImp::removeClicked() |
393 | { | 393 | { |
394 | QListViewItem *item = connectionList->currentItem(); | 394 | QListViewItem *item = connectionList->currentItem(); |
395 | if(!item) | 395 | if(!item) |
396 | { | 396 | { |
397 | QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); | 397 | QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); |
398 | return; | 398 | return; |
399 | } | 399 | } |
400 | 400 | ||
401 | Interface *i = interfaceItems[item]; | 401 | Interface *i = interfaceItems[item]; |
402 | if(i->getModuleOwner() == NULL) | 402 | if(i->getModuleOwner() == NULL) |
403 | { | 403 | { |
404 | QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok); | 404 | QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok); |
405 | } | 405 | } |
406 | else | 406 | else |
407 | { | 407 | { |
408 | if(!i->getModuleOwner()->remove(i)) | 408 | if(!i->getModuleOwner()->remove(i)) |
409 | QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok); | 409 | QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok); |
410 | else | 410 | else |
411 | { | 411 | { |
412 | delete item; | 412 | delete item; |
diff --git a/noncore/unsupported/qpdf/QOutputDev.cpp b/noncore/unsupported/qpdf/QOutputDev.cpp index 022d938..487177c 100644 --- a/noncore/unsupported/qpdf/QOutputDev.cpp +++ b/noncore/unsupported/qpdf/QOutputDev.cpp | |||
@@ -213,769 +213,769 @@ void QOutputDev::startPage ( int /*pageNum*/, GfxState *state ) | |||
213 | viewport ( )-> repaint ( ); | 213 | viewport ( )-> repaint ( ); |
214 | } | 214 | } |
215 | 215 | ||
216 | void QOutputDev::endPage ( ) | 216 | void QOutputDev::endPage ( ) |
217 | { | 217 | { |
218 | QPDFDBG( printf("End page\n") ); | 218 | QPDFDBG( printf("End page\n") ); |
219 | m_text-> coalesce ( ); | 219 | m_text-> coalesce ( ); |
220 | 220 | ||
221 | /* | 221 | /* |
222 | * I get stupid crashes after endPage is called and then we do clipping | 222 | * I get stupid crashes after endPage is called and then we do clipping |
223 | * and other stuff..... | 223 | * and other stuff..... |
224 | */ | 224 | */ |
225 | #if 0 | 225 | #if 0 |
226 | delete m_painter; | 226 | delete m_painter; |
227 | m_painter = 0; | 227 | m_painter = 0; |
228 | #endif | 228 | #endif |
229 | 229 | ||
230 | updateContents ( 0, 0, contentsWidth ( ), contentsHeight ( )); | 230 | updateContents ( 0, 0, contentsWidth ( ), contentsHeight ( )); |
231 | } | 231 | } |
232 | 232 | ||
233 | void QOutputDev::drawLink ( Link *link, Catalog */*catalog*/ ) | 233 | void QOutputDev::drawLink ( Link *link, Catalog */*catalog*/ ) |
234 | { | 234 | { |
235 | fp_t x1, y1, x2, y2, w; | 235 | fp_t x1, y1, x2, y2, w; |
236 | 236 | ||
237 | link-> getBorder ( &x1, &y1, &x2, &y2, &w ); | 237 | link-> getBorder ( &x1, &y1, &x2, &y2, &w ); |
238 | 238 | ||
239 | if ( w > 0 ) { | 239 | if ( w > 0 ) { |
240 | int x, y, dx, dy; | 240 | int x, y, dx, dy; |
241 | 241 | ||
242 | cvtUserToDev ( x1, y1, &x, &y ); | 242 | cvtUserToDev ( x1, y1, &x, &y ); |
243 | cvtUserToDev ( x2, y2, &dx, &dy ); | 243 | cvtUserToDev ( x2, y2, &dx, &dy ); |
244 | 244 | ||
245 | QPen oldpen = m_painter-> pen ( ); | 245 | QPen oldpen = m_painter-> pen ( ); |
246 | m_painter-> setPen ( blue ); | 246 | m_painter-> setPen ( blue ); |
247 | m_painter-> drawRect ( x, y, dx, dy ); | 247 | m_painter-> drawRect ( x, y, dx, dy ); |
248 | m_painter-> setPen ( oldpen ); | 248 | m_painter-> setPen ( oldpen ); |
249 | } | 249 | } |
250 | } | 250 | } |
251 | 251 | ||
252 | void QOutputDev::saveState ( GfxState */*state*/ ) | 252 | void QOutputDev::saveState ( GfxState */*state*/ ) |
253 | { | 253 | { |
254 | if ( ! m_painter ) | 254 | if ( ! m_painter ) |
255 | return; | 255 | return; |
256 | 256 | ||
257 | QPDFDBG( printf ( "SAVE (CLIP=%d/%d)\n", m_painter-> hasClipping ( ), !m_painter-> clipRegion ( ). isEmpty ( ))); | 257 | QPDFDBG( printf ( "SAVE (CLIP=%d/%d)\n", m_painter-> hasClipping ( ), !m_painter-> clipRegion ( ). isEmpty ( ))); |
258 | 258 | ||
259 | m_painter-> save ( ); | 259 | m_painter-> save ( ); |
260 | } | 260 | } |
261 | 261 | ||
262 | void QOutputDev::restoreState ( GfxState */*state*/ ) | 262 | void QOutputDev::restoreState ( GfxState */*state*/ ) |
263 | { | 263 | { |
264 | if( ! m_painter ) | 264 | if( ! m_painter ) |
265 | return; | 265 | return; |
266 | 266 | ||
267 | m_painter-> restore ( ); | 267 | m_painter-> restore ( ); |
268 | 268 | ||
269 | //m_painter-> setClipRegion ( QRect ( 0, 0, m_pixmap-> width ( ), m_pixmap-> height ( ))); | 269 | //m_painter-> setClipRegion ( QRect ( 0, 0, m_pixmap-> width ( ), m_pixmap-> height ( ))); |
270 | //m_painter-> setClipping ( false ); | 270 | //m_painter-> setClipping ( false ); |
271 | QPDFDBG ( printf ( "RESTORE (CLIP=%d/%d)\n", m_painter-> hasClipping ( ), !m_painter-> clipRegion ( ). isEmpty ( ))); | 271 | QPDFDBG ( printf ( "RESTORE (CLIP=%d/%d)\n", m_painter-> hasClipping ( ), !m_painter-> clipRegion ( ). isEmpty ( ))); |
272 | } | 272 | } |
273 | 273 | ||
274 | void QOutputDev::updateAll ( GfxState *state ) | 274 | void QOutputDev::updateAll ( GfxState *state ) |
275 | { | 275 | { |
276 | updateLineAttrs ( state, gTrue ); | 276 | updateLineAttrs ( state, gTrue ); |
277 | //updateFlatness ( state ); | 277 | //updateFlatness ( state ); |
278 | //updateMiterLimit ( state ); | 278 | //updateMiterLimit ( state ); |
279 | updateFillColor ( state ); | 279 | updateFillColor ( state ); |
280 | updateStrokeColor ( state ); | 280 | updateStrokeColor ( state ); |
281 | updateFont ( state ); | 281 | updateFont ( state ); |
282 | } | 282 | } |
283 | 283 | ||
284 | void QOutputDev::updateCTM ( GfxState *state, fp_t /*m11*/, fp_t /*m12*/, fp_t /*m21*/, fp_t /*m22*/, fp_t /*m31*/, fp_t /*m32*/ ) | 284 | void QOutputDev::updateCTM ( GfxState *state, fp_t /*m11*/, fp_t /*m12*/, fp_t /*m21*/, fp_t /*m22*/, fp_t /*m31*/, fp_t /*m32*/ ) |
285 | { | 285 | { |
286 | updateLineAttrs ( state, gTrue ); | 286 | updateLineAttrs ( state, gTrue ); |
287 | } | 287 | } |
288 | 288 | ||
289 | void QOutputDev::updateLineDash ( GfxState *state ) | 289 | void QOutputDev::updateLineDash ( GfxState *state ) |
290 | { | 290 | { |
291 | updateLineAttrs ( state, gTrue ); | 291 | updateLineAttrs ( state, gTrue ); |
292 | } | 292 | } |
293 | 293 | ||
294 | void QOutputDev::updateFlatness ( GfxState */*state*/ ) | 294 | void QOutputDev::updateFlatness ( GfxState */*state*/ ) |
295 | { | 295 | { |
296 | // not supported | 296 | // not supported |
297 | QPDFDBG( printf ( "updateFlatness not supported !\n" )); | 297 | QPDFDBG( printf ( "updateFlatness not supported !\n" )); |
298 | } | 298 | } |
299 | 299 | ||
300 | void QOutputDev::updateLineJoin ( GfxState *state ) | 300 | void QOutputDev::updateLineJoin ( GfxState *state ) |
301 | { | 301 | { |
302 | updateLineAttrs ( state, gFalse ); | 302 | updateLineAttrs ( state, gFalse ); |
303 | } | 303 | } |
304 | 304 | ||
305 | void QOutputDev::updateLineCap ( GfxState *state ) | 305 | void QOutputDev::updateLineCap ( GfxState *state ) |
306 | { | 306 | { |
307 | updateLineAttrs ( state, gFalse ); | 307 | updateLineAttrs ( state, gFalse ); |
308 | } | 308 | } |
309 | 309 | ||
310 | // unimplemented | 310 | // unimplemented |
311 | void QOutputDev::updateMiterLimit ( GfxState */*state*/ ) | 311 | void QOutputDev::updateMiterLimit ( GfxState */*state*/ ) |
312 | { | 312 | { |
313 | QPDFDBG( printf ( "updateMiterLimit not supported !\n" )); | 313 | QPDFDBG( printf ( "updateMiterLimit not supported !\n" )); |
314 | } | 314 | } |
315 | 315 | ||
316 | void QOutputDev::updateLineWidth ( GfxState *state ) | 316 | void QOutputDev::updateLineWidth ( GfxState *state ) |
317 | { | 317 | { |
318 | updateLineAttrs ( state, gFalse ); | 318 | updateLineAttrs ( state, gFalse ); |
319 | } | 319 | } |
320 | 320 | ||
321 | void QOutputDev::updateLineAttrs ( GfxState *state, GBool updateDash ) | 321 | void QOutputDev::updateLineAttrs ( GfxState *state, GBool updateDash ) |
322 | { | 322 | { |
323 | fp_t *dashPattern; | 323 | fp_t *dashPattern; |
324 | int dashLength; | 324 | int dashLength; |
325 | fp_t dashStart; | 325 | fp_t dashStart; |
326 | 326 | ||
327 | Qt::PenCapStyle cap; | 327 | Qt::PenCapStyle cap; |
328 | Qt::PenJoinStyle join; | 328 | Qt::PenJoinStyle join; |
329 | int width; | 329 | int width; |
330 | 330 | ||
331 | width = lrint ( state-> getTransformedLineWidth ( )); | 331 | width = lrint ( state-> getTransformedLineWidth ( )); |
332 | 332 | ||
333 | switch ( state-> getLineCap ( )) { | 333 | switch ( state-> getLineCap ( )) { |
334 | case 0: cap = FlatCap; break; | 334 | case 0: cap = FlatCap; break; |
335 | case 1: cap = RoundCap; break; | 335 | case 1: cap = RoundCap; break; |
336 | case 2: cap = SquareCap; break; | 336 | case 2: cap = SquareCap; break; |
337 | default: | 337 | default: |
338 | qWarning ( "Bad line cap style (%d)\n", state-> getLineCap ( )); | 338 | qWarning ( "Bad line cap style (%d)\n", state-> getLineCap ( )); |
339 | cap = FlatCap; | 339 | cap = FlatCap; |
340 | break; | 340 | break; |
341 | } | 341 | } |
342 | 342 | ||
343 | switch (state->getLineJoin()) { | 343 | switch (state->getLineJoin()) { |
344 | case 0: join = MiterJoin; break; | 344 | case 0: join = MiterJoin; break; |
345 | case 1: join = RoundJoin; break; | 345 | case 1: join = RoundJoin; break; |
346 | case 2: join = BevelJoin; break; | 346 | case 2: join = BevelJoin; break; |
347 | default: | 347 | default: |
348 | qWarning ( "Bad line join style (%d)\n", state->getLineJoin ( )); | 348 | qWarning ( "Bad line join style (%d)\n", state->getLineJoin ( )); |
349 | join = MiterJoin; | 349 | join = MiterJoin; |
350 | break; | 350 | break; |
351 | } | 351 | } |
352 | 352 | ||
353 | state-> getLineDash ( &dashPattern, &dashLength, &dashStart ); | 353 | state-> getLineDash ( &dashPattern, &dashLength, &dashStart ); |
354 | 354 | ||
355 | QColor oldcol = m_painter-> pen ( ). color ( ); | 355 | QColor oldcol = m_painter-> pen ( ). color ( ); |
356 | GfxRGB rgb; | 356 | GfxRGB rgb; |
357 | 357 | ||
358 | state-> getStrokeRGB ( &rgb ); | 358 | state-> getStrokeRGB ( &rgb ); |
359 | oldcol = q_col ( rgb ); | 359 | oldcol = q_col ( rgb ); |
360 | 360 | ||
361 | m_painter-> setPen ( QPen ( oldcol, width, dashLength > 0 ? DashLine : SolidLine, cap, join )); | 361 | m_painter-> setPen ( QPen ( oldcol, width, dashLength > 0 ? DashLine : SolidLine, cap, join )); |
362 | 362 | ||
363 | if ( updateDash && ( dashLength > 0 )) { | 363 | if ( updateDash && ( dashLength > 0 )) { |
364 | // Not supported by QT | 364 | // Not supported by QT |
365 | /* | 365 | /* |
366 | char dashList[20]; | 366 | char dashList[20]; |
367 | if (dashLength > 20) | 367 | if (dashLength > 20) |
368 | dashLength = 20; | 368 | dashLength = 20; |
369 | for ( int i = 0; i < dashLength; ++i ) { | 369 | for ( int i = 0; i < dashLength; ++i ) { |
370 | dashList[i] = xoutRound(state->transformWidth(dashPattern[i])); | 370 | dashList[i] = xoutRound(state->transformWidth(dashPattern[i])); |
371 | if (dashList[i] == 0) | 371 | if (dashList[i] == 0) |
372 | dashList[i] = 1; | 372 | dashList[i] = 1; |
373 | } | 373 | } |
374 | XSetDashes(display, strokeGC, xoutRound(dashStart), dashList, dashLength); | 374 | XSetDashes(display, strokeGC, xoutRound(dashStart), dashList, dashLength); |
375 | */ | 375 | */ |
376 | } | 376 | } |
377 | } | 377 | } |
378 | 378 | ||
379 | void QOutputDev::updateFillColor ( GfxState *state ) | 379 | void QOutputDev::updateFillColor ( GfxState *state ) |
380 | { | 380 | { |
381 | GfxRGB rgb; | 381 | GfxRGB rgb; |
382 | state-> getFillRGB ( &rgb ); | 382 | state-> getFillRGB ( &rgb ); |
383 | 383 | ||
384 | m_painter-> setBrush ( q_col ( rgb )); | 384 | m_painter-> setBrush ( q_col ( rgb )); |
385 | } | 385 | } |
386 | 386 | ||
387 | void QOutputDev::updateStrokeColor ( GfxState *state ) | 387 | void QOutputDev::updateStrokeColor ( GfxState *state ) |
388 | { | 388 | { |
389 | GfxRGB rgb; | 389 | GfxRGB rgb; |
390 | state-> getStrokeRGB ( &rgb ); | 390 | state-> getStrokeRGB ( &rgb ); |
391 | 391 | ||
392 | QPen pen = m_painter-> pen ( ); | 392 | QPen pen = m_painter-> pen ( ); |
393 | pen. setColor ( q_col ( rgb )); | 393 | pen. setColor ( q_col ( rgb )); |
394 | m_painter-> setPen ( pen ); | 394 | m_painter-> setPen ( pen ); |
395 | } | 395 | } |
396 | 396 | ||
397 | void QOutputDev::updateFont ( GfxState *state ) | 397 | void QOutputDev::updateFont ( GfxState *state ) |
398 | { | 398 | { |
399 | fp_t m11, m12, m21, m22; | 399 | fp_t m11, m12, m21, m22; |
400 | GfxFont *gfxFont = state-> getFont ( ); | 400 | GfxFont *gfxFont = state-> getFont ( ); |
401 | 401 | ||
402 | if ( !gfxFont ) | 402 | if ( !gfxFont ) |
403 | return; | 403 | return; |
404 | 404 | ||
405 | state-> getFontTransMat ( &m11, &m12, &m21, &m22 ); | 405 | state-> getFontTransMat ( &m11, &m12, &m21, &m22 ); |
406 | m11 *= state-> getHorizScaling ( ); | 406 | m11 *= state-> getHorizScaling ( ); |
407 | m12 *= state-> getHorizScaling ( ); | 407 | m12 *= state-> getHorizScaling ( ); |
408 | 408 | ||
409 | QFont font = matchFont ( gfxFont, m11, m12, m21, m22 ); | 409 | QFont font = matchFont ( gfxFont, m11, m12, m21, m22 ); |
410 | 410 | ||
411 | m_painter-> setFont ( font ); | 411 | m_painter-> setFont ( font ); |
412 | m_text-> updateFont ( state ); | 412 | m_text-> updateFont ( state ); |
413 | } | 413 | } |
414 | 414 | ||
415 | void QOutputDev::stroke ( GfxState *state ) | 415 | void QOutputDev::stroke ( GfxState *state ) |
416 | { | 416 | { |
417 | QPointArray points; | 417 | QPointArray points; |
418 | QArray<int> lengths; | 418 | QArray<int> lengths; |
419 | 419 | ||
420 | // transform points | 420 | // transform points |
421 | int n = convertPath ( state, points, lengths ); | 421 | int n = convertPath ( state, points, lengths ); |
422 | 422 | ||
423 | QPDFDBG( printf ( "DRAWING: %d POLYS\n", n )); | 423 | QPDFDBG( printf ( "DRAWING: %d POLYS\n", n )); |
424 | 424 | ||
425 | // draw each subpath | 425 | // draw each subpath |
426 | int j = 0; | 426 | int j = 0; |
427 | for ( int i = 0; i < n; i++ ) { | 427 | for ( int i = 0; i < n; i++ ) { |
428 | int len = lengths [i]; | 428 | int len = lengths [i]; |
429 | 429 | ||
430 | if ( len >= 2 ) { | 430 | if ( len >= 2 ) { |
431 | QPDFDBG( printf ( " - POLY %d: ", i )); | 431 | QPDFDBG( printf ( " - POLY %d: ", i )); |
432 | QPDFDBG( for ( int ii = 0; ii < len; ii++ )) | 432 | QPDFDBG( for ( int ii = 0; ii < len; ii++ )) |
433 | QPDFDBG( printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); | 433 | QPDFDBG( printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); |
434 | QPDFDBG( printf ( "\n" )); | 434 | QPDFDBG( printf ( "\n" )); |
435 | 435 | ||
436 | m_painter-> drawPolyline ( points, j, len ); | 436 | m_painter-> drawPolyline ( points, j, len ); |
437 | } | 437 | } |
438 | j += len; | 438 | j += len; |
439 | } | 439 | } |
440 | qApp-> processEvents ( ); | 440 | qApp-> processEvents ( ); |
441 | } | 441 | } |
442 | 442 | ||
443 | void QOutputDev::fill ( GfxState *state ) | 443 | void QOutputDev::fill ( GfxState *state ) |
444 | { | 444 | { |
445 | doFill ( state, true ); | 445 | doFill ( state, true ); |
446 | } | 446 | } |
447 | 447 | ||
448 | void QOutputDev::eoFill ( GfxState *state ) | 448 | void QOutputDev::eoFill ( GfxState *state ) |
449 | { | 449 | { |
450 | doFill ( state, false ); | 450 | doFill ( state, false ); |
451 | } | 451 | } |
452 | 452 | ||
453 | // | 453 | // |
454 | // X doesn't color the pixels on the right-most and bottom-most | 454 | // X doesn't color the pixels on the right-most and bottom-most |
455 | // borders of a polygon. This means that one-pixel-thick polygons | 455 | // borders of a polygon. This means that one-pixel-thick polygons |
456 | // are not colored at all. I think this is supposed to be a | 456 | // are not colored at all. I think this is supposed to be a |
457 | // feature, but I can't figure out why. So after it fills a | 457 | // feature, but I can't figure out why. So after it fills a |
458 | // polygon, it also draws lines around the border. This is done | 458 | // polygon, it also draws lines around the border. This is done |
459 | // only for single-component polygons, since it's not very | 459 | // only for single-component polygons, since it's not very |
460 | // compatible with the compound polygon kludge (see convertPath()). | 460 | // compatible with the compound polygon kludge (see convertPath()). |
461 | // | 461 | // |
462 | void QOutputDev::doFill ( GfxState *state, bool winding ) | 462 | void QOutputDev::doFill ( GfxState *state, bool winding ) |
463 | { | 463 | { |
464 | QPointArray points; | 464 | QPointArray points; |
465 | QArray<int> lengths; | 465 | QArray<int> lengths; |
466 | 466 | ||
467 | // transform points | 467 | // transform points |
468 | int n = convertPath ( state, points, lengths ); | 468 | int n = convertPath ( state, points, lengths ); |
469 | 469 | ||
470 | QPDFDBG( printf ( "FILLING: %d POLYS\n", n )); | 470 | QPDFDBG( printf ( "FILLING: %d POLYS\n", n )); |
471 | 471 | ||
472 | QPen oldpen = m_painter-> pen ( ); | 472 | QPen oldpen = m_painter-> pen ( ); |
473 | m_painter-> setPen ( QPen ( NoPen )); | 473 | m_painter-> setPen ( QPen ( NoPen )); |
474 | 474 | ||
475 | // draw each subpath | 475 | // draw each subpath |
476 | int j = 0; | 476 | int j = 0; |
477 | for ( int i = 0; i < n; i++ ) { | 477 | for ( int i = 0; i < n; i++ ) { |
478 | int len = lengths [i]; | 478 | int len = lengths [i]; |
479 | 479 | ||
480 | if ( len >= 3 ) { | 480 | if ( len >= 3 ) { |
481 | QPDFDBG( printf ( " - POLY %d: ", i )); | 481 | QPDFDBG( printf ( " - POLY %d: ", i )); |
482 | QPDFDBG( for ( int ii = 0; ii < len; ii++ )) | 482 | QPDFDBG( for ( int ii = 0; ii < len; ii++ )) |
483 | QPDFDBG( printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); | 483 | QPDFDBG( printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); |
484 | QPDFDBG( printf ( "\n" )); | 484 | QPDFDBG( printf ( "\n" )); |
485 | 485 | ||
486 | m_painter-> drawPolygon ( points, winding, j, len ); | 486 | m_painter-> drawPolygon ( points, winding, j, len ); |
487 | } | 487 | } |
488 | j += len; | 488 | j += len; |
489 | } | 489 | } |
490 | m_painter-> setPen ( oldpen ); | 490 | m_painter-> setPen ( oldpen ); |
491 | 491 | ||
492 | qApp-> processEvents ( ); | 492 | qApp-> processEvents ( ); |
493 | } | 493 | } |
494 | 494 | ||
495 | void QOutputDev::clip ( GfxState *state ) | 495 | void QOutputDev::clip ( GfxState *state ) |
496 | { | 496 | { |
497 | doClip ( state, true ); | 497 | doClip ( state, true ); |
498 | } | 498 | } |
499 | 499 | ||
500 | void QOutputDev::eoClip ( GfxState *state ) | 500 | void QOutputDev::eoClip ( GfxState *state ) |
501 | { | 501 | { |
502 | doClip ( state, false ); | 502 | doClip ( state, false ); |
503 | } | 503 | } |
504 | 504 | ||
505 | void QOutputDev::doClip ( GfxState *state, bool winding ) | 505 | void QOutputDev::doClip ( GfxState *state, bool winding ) |
506 | { | 506 | { |
507 | QPointArray points; | 507 | QPointArray points; |
508 | QArray<int> lengths; | 508 | QArray<int> lengths; |
509 | 509 | ||
510 | // transform points | 510 | // transform points |
511 | int n = convertPath ( state, points, lengths ); | 511 | int n = convertPath ( state, points, lengths ); |
512 | 512 | ||
513 | QRegion region; | 513 | QRegion region; |
514 | 514 | ||
515 | QPDFDBG( printf ( "CLIPPING: %d POLYS\n", n )); | 515 | QPDFDBG( printf ( "CLIPPING: %d POLYS\n", n )); |
516 | 516 | ||
517 | // draw each subpath | 517 | // draw each subpath |
518 | int j = 0; | 518 | int j = 0; |
519 | for ( int i = 0; i < n; i++ ) { | 519 | for ( int i = 0; i < n; i++ ) { |
520 | int len = lengths [i]; | 520 | int len = lengths [i]; |
521 | 521 | ||
522 | if ( len >= 3 ) { | 522 | if ( len >= 3 ) { |
523 | QPointArray dummy; | 523 | QPointArray dummy; |
524 | dummy. setRawData ( points. data ( ) + j, len ); | 524 | dummy. setRawData ( points. data ( ) + j, len ); |
525 | 525 | ||
526 | QPDFDBG( printf ( " - POLY %d: ", i )); | 526 | QPDFDBG( printf ( " - POLY %d: ", i )); |
527 | QPDFDBG( for ( int ii = 0; ii < len; ii++ ) printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); | 527 | QPDFDBG( for ( int ii = 0; ii < len; ii++ ) printf ( "(%d/%d) ", points [j+ii]. x ( ), points [j+ii]. y ( ))); |
528 | QPDFDBG( printf ( "\n" )); | 528 | QPDFDBG( printf ( "\n" )); |
529 | 529 | ||
530 | region |= QRegion ( dummy, winding ); | 530 | region |= QRegion ( dummy, winding ); |
531 | 531 | ||
532 | dummy. resetRawData ( points. data ( ) + j, len ); | 532 | dummy. resetRawData ( points. data ( ) + j, len ); |
533 | } | 533 | } |
534 | j += len; | 534 | j += len; |
535 | } | 535 | } |
536 | 536 | ||
537 | if ( m_painter && m_painter-> hasClipping ( )) | 537 | if ( m_painter && m_painter-> hasClipping ( )) |
538 | region &= m_painter-> clipRegion ( ); | 538 | region &= m_painter-> clipRegion ( ); |
539 | 539 | ||
540 | //m_painter-> setClipRegion ( region ); | 540 | //m_painter-> setClipRegion ( region ); |
541 | //m_painter-> setClipping ( true ); | 541 | //m_painter-> setClipping ( true ); |
542 | 542 | ||
543 | //m_painter-> fillRect ( 0, 0, m_pixmap-> width ( ), m_pixmap-> height ( ), red ); | 543 | //m_painter-> fillRect ( 0, 0, m_pixmap-> width ( ), m_pixmap-> height ( ), red ); |
544 | //m_painter-> drawText ( points [0]. x ( ) + 10, points [0]. y ( ) + 10, "Bla bla" ); | 544 | //m_painter-> drawText ( points [0]. x ( ) + 10, points [0]. y ( ) + 10, "Bla bla" ); |
545 | qApp-> processEvents ( ); | 545 | qApp-> processEvents ( ); |
546 | } | 546 | } |
547 | 547 | ||
548 | // | 548 | // |
549 | // Transform points in the path and convert curves to line segments. | 549 | // Transform points in the path and convert curves to line segments. |
550 | // Builds a set of subpaths and returns the number of subpaths. | 550 | // Builds a set of subpaths and returns the number of subpaths. |
551 | // If <fillHack> is set, close any unclosed subpaths and activate a | 551 | // If <fillHack> is set, close any unclosed subpaths and activate a |
552 | // kludge for polygon fills: First, it divides up the subpaths into | 552 | // kludge for polygon fills: First, it divides up the subpaths into |
553 | // non-overlapping polygons by simply comparing bounding rectangles. | 553 | // non-overlapping polygons by simply comparing bounding rectangles. |
554 | // Then it connects subaths within a single compound polygon to a single | 554 | // Then it connects subaths within a single compound polygon to a single |
555 | // point so that X can fill the polygon (sort of). | 555 | // point so that X can fill the polygon (sort of). |
556 | // | 556 | // |
557 | int QOutputDev::convertPath ( GfxState *state, QPointArray &points, QArray<int> &lengths ) | 557 | int QOutputDev::convertPath ( GfxState *state, QPointArray &points, QArray<int> &lengths ) |
558 | { | 558 | { |
559 | GfxPath *path = state-> getPath ( ); | 559 | GfxPath *path = state-> getPath ( ); |
560 | int n = path-> getNumSubpaths ( ); | 560 | int n = path-> getNumSubpaths ( ); |
561 | 561 | ||
562 | lengths. resize ( n ); | 562 | lengths. resize ( n ); |
563 | 563 | ||
564 | // do each subpath | 564 | // do each subpath |
565 | for ( int i = 0; i < n; i++ ) { | 565 | for ( int i = 0; i < n; i++ ) { |
566 | // transform the points | 566 | // transform the points |
567 | lengths [i] = convertSubpath ( state, path-> getSubpath ( i ), points ); | 567 | lengths [i] = convertSubpath ( state, path-> getSubpath ( i ), points ); |
568 | } | 568 | } |
569 | 569 | ||
570 | return n; | 570 | return n; |
571 | } | 571 | } |
572 | 572 | ||
573 | // | 573 | // |
574 | // Transform points in a single subpath and convert curves to line | 574 | // Transform points in a single subpath and convert curves to line |
575 | // segments. | 575 | // segments. |
576 | // | 576 | // |
577 | int QOutputDev::convertSubpath ( GfxState *state, GfxSubpath *subpath, QPointArray &points ) | 577 | int QOutputDev::convertSubpath ( GfxState *state, GfxSubpath *subpath, QPointArray &points ) |
578 | { | 578 | { |
579 | int oldcnt = points. count ( ); | 579 | int oldcnt = points. count ( ); |
580 | 580 | ||
581 | fp_t x0, y0, x1, y1, x2, y2, x3, y3; | 581 | fp_t x0, y0, x1, y1, x2, y2, x3, y3; |
582 | 582 | ||
583 | int m = subpath-> getNumPoints ( ); | 583 | int m = subpath-> getNumPoints ( ); |
584 | int i = 0; | 584 | int i = 0; |
585 | 585 | ||
586 | while ( i < m ) { | 586 | while ( i < m ) { |
587 | if ( i >= 1 && subpath-> getCurve ( i )) { | 587 | if ( i >= 1 && subpath-> getCurve ( i )) { |
588 | state-> transform ( subpath-> getX ( i - 1 ), subpath-> getY ( i - 1 ), &x0, &y0 ); | 588 | state-> transform ( subpath-> getX ( i - 1 ), subpath-> getY ( i - 1 ), &x0, &y0 ); |
589 | state-> transform ( subpath-> getX ( i ), subpath-> getY ( i ), &x1, &y1 ); | 589 | state-> transform ( subpath-> getX ( i ), subpath-> getY ( i ), &x1, &y1 ); |
590 | state-> transform ( subpath-> getX ( i + 1 ), subpath-> getY ( i + 1 ), &x2, &y2 ); | 590 | state-> transform ( subpath-> getX ( i + 1 ), subpath-> getY ( i + 1 ), &x2, &y2 ); |
591 | state-> transform ( subpath-> getX ( i + 2 ), subpath-> getY ( i + 2 ), &x3, &y3 ); | 591 | state-> transform ( subpath-> getX ( i + 2 ), subpath-> getY ( i + 2 ), &x3, &y3 ); |
592 | 592 | ||
593 | QPointArray tmp; | 593 | QPointArray tmp; |
594 | tmp. setPoints ( 4, lrint ( x0 ), lrint ( y0 ), lrint ( x1 ), lrint ( y1 ), | 594 | tmp. setPoints ( 4, lrint ( x0 ), lrint ( y0 ), lrint ( x1 ), lrint ( y1 ), |
595 | lrint ( x2 ), lrint ( y2 ), lrint ( x3 ), lrint ( y3 )); | 595 | lrint ( x2 ), lrint ( y2 ), lrint ( x3 ), lrint ( y3 )); |
596 | 596 | ||
597 | #if QT_VERSION < 300 | 597 | #if QT_VERSION < 0x030000 |
598 | tmp = tmp. quadBezier ( ); | 598 | tmp = tmp. quadBezier ( ); |
599 | 599 | ||
600 | for ( uint loop = 0; loop < tmp. count ( ); loop++ ) { | 600 | for ( uint loop = 0; loop < tmp. count ( ); loop++ ) { |
601 | QPoint p = tmp. point ( loop ); | 601 | QPoint p = tmp. point ( loop ); |
602 | points. putPoints ( points. count ( ), 1, p. x ( ), p. y ( )); | 602 | points. putPoints ( points. count ( ), 1, p. x ( ), p. y ( )); |
603 | } | 603 | } |
604 | #else | 604 | #else |
605 | tmp = tmp. cubicBezier ( ); | 605 | tmp = tmp. cubicBezier ( ); |
606 | points. putPoints ( points. count ( ), tmp. count ( ), tmp ); | 606 | points. putPoints ( points. count ( ), tmp. count ( ), tmp ); |
607 | #endif | 607 | #endif |
608 | 608 | ||
609 | i += 3; | 609 | i += 3; |
610 | } | 610 | } |
611 | else { | 611 | else { |
612 | state-> transform ( subpath-> getX ( i ), subpath-> getY ( i ), &x1, &y1 ); | 612 | state-> transform ( subpath-> getX ( i ), subpath-> getY ( i ), &x1, &y1 ); |
613 | 613 | ||
614 | points. putPoints ( points. count ( ), 1, lrint ( x1 ), lrint ( y1 )); | 614 | points. putPoints ( points. count ( ), 1, lrint ( x1 ), lrint ( y1 )); |
615 | ++i; | 615 | ++i; |
616 | } | 616 | } |
617 | } | 617 | } |
618 | return points. count ( ) - oldcnt; | 618 | return points. count ( ) - oldcnt; |
619 | } | 619 | } |
620 | 620 | ||
621 | 621 | ||
622 | void QOutputDev::beginString ( GfxState *state, GString */*s*/ ) | 622 | void QOutputDev::beginString ( GfxState *state, GString */*s*/ ) |
623 | { | 623 | { |
624 | m_text-> beginString ( state ); | 624 | m_text-> beginString ( state ); |
625 | } | 625 | } |
626 | 626 | ||
627 | void QOutputDev::endString ( GfxState */*state*/ ) | 627 | void QOutputDev::endString ( GfxState */*state*/ ) |
628 | { | 628 | { |
629 | m_text-> endString ( ); | 629 | m_text-> endString ( ); |
630 | } | 630 | } |
631 | 631 | ||
632 | void QOutputDev::drawChar ( GfxState *state, fp_t x, fp_t y, | 632 | void QOutputDev::drawChar ( GfxState *state, fp_t x, fp_t y, |
633 | fp_t dx, fp_t dy, fp_t originX, fp_t originY, | 633 | fp_t dx, fp_t dy, fp_t originX, fp_t originY, |
634 | CharCode code, Unicode *u, int uLen ) | 634 | CharCode code, Unicode *u, int uLen ) |
635 | { | 635 | { |
636 | fp_t x1, y1, dx1, dy1; | 636 | fp_t x1, y1, dx1, dy1; |
637 | 637 | ||
638 | if ( uLen > 0 ) | 638 | if ( uLen > 0 ) |
639 | m_text-> addChar ( state, x, y, dx, dy, u, uLen ); | 639 | m_text-> addChar ( state, x, y, dx, dy, u, uLen ); |
640 | 640 | ||
641 | // check for invisible text -- this is used by Acrobat Capture | 641 | // check for invisible text -- this is used by Acrobat Capture |
642 | if (( state-> getRender ( ) & 3 ) == 3 ) { | 642 | if (( state-> getRender ( ) & 3 ) == 3 ) { |
643 | return; | 643 | return; |
644 | } | 644 | } |
645 | 645 | ||
646 | x -= originX; | 646 | x -= originX; |
647 | y -= originY; | 647 | y -= originY; |
648 | state-> transform ( x, y, &x1, &y1 ); | 648 | state-> transform ( x, y, &x1, &y1 ); |
649 | state-> transformDelta ( dx, dy, &dx1, &dy1 ); | 649 | state-> transformDelta ( dx, dy, &dx1, &dy1 ); |
650 | 650 | ||
651 | 651 | ||
652 | if ( uLen > 0 ) { | 652 | if ( uLen > 0 ) { |
653 | QString str; | 653 | QString str; |
654 | QFontMetrics fm = m_painter-> fontMetrics ( ); | 654 | QFontMetrics fm = m_painter-> fontMetrics ( ); |
655 | 655 | ||
656 | for ( int i = 0; i < uLen; i++ ) { | 656 | for ( int i = 0; i < uLen; i++ ) { |
657 | QChar c = QChar ( u [i] ); | 657 | QChar c = QChar ( u [i] ); |
658 | 658 | ||
659 | if ( fm. inFont ( c )) { | 659 | if ( fm. inFont ( c )) { |
660 | str [i] = QChar ( u [i] ); | 660 | str [i] = QChar ( u [i] ); |
661 | } | 661 | } |
662 | else { | 662 | else { |
663 | str [i] = ' '; | 663 | str [i] = ' '; |
664 | QPDFDBG( printf ( "CHARACTER NOT IN FONT: %hx\n", c. unicode ( ))); | 664 | QPDFDBG( printf ( "CHARACTER NOT IN FONT: %hx\n", c. unicode ( ))); |
665 | } | 665 | } |
666 | } | 666 | } |
667 | 667 | ||
668 | if (( uLen == 1 ) && ( str [0] == ' ' )) | 668 | if (( uLen == 1 ) && ( str [0] == ' ' )) |
669 | return; | 669 | return; |
670 | 670 | ||
671 | 671 | ||
672 | fp_t m11, m12, m21, m22; | 672 | fp_t m11, m12, m21, m22; |
673 | 673 | ||
674 | state-> getFontTransMat ( &m11, &m12, &m21, &m22 ); | 674 | state-> getFontTransMat ( &m11, &m12, &m21, &m22 ); |
675 | m11 *= state-> getHorizScaling ( ); | 675 | m11 *= state-> getHorizScaling ( ); |
676 | m12 *= state-> getHorizScaling ( ); | 676 | m12 *= state-> getHorizScaling ( ); |
677 | 677 | ||
678 | fp_t fsize = m_painter-> font ( ). pixelSize ( ); | 678 | fp_t fsize = m_painter-> font ( ). pixelSize ( ); |
679 | 679 | ||
680 | #ifndef QT_NO_TRANSFORMATIONS | 680 | #ifndef QT_NO_TRANSFORMATIONS |
681 | QWMatrix oldmat; | 681 | QWMatrix oldmat; |
682 | 682 | ||
683 | bool dorot = (( m12 < -0.1 ) || ( m12 > 0.1 )) && (( m21 < -0.1 ) || ( m21 > 0.1 )); | 683 | bool dorot = (( m12 < -0.1 ) || ( m12 > 0.1 )) && (( m21 < -0.1 ) || ( m21 > 0.1 )); |
684 | 684 | ||
685 | if ( dorot ) { | 685 | if ( dorot ) { |
686 | oldmat = m_painter-> worldMatrix ( ); | 686 | oldmat = m_painter-> worldMatrix ( ); |
687 | 687 | ||
688 | std::cerr << std::endl << "ROTATED: " << m11 << ", " << m12 << ", " << m21 << ", " << m22 << " / SIZE: " << fsize << " / TEXT: " << str. local8Bit ( ) << endl << endl; | 688 | std::cerr << std::endl << "ROTATED: " << m11 << ", " << m12 << ", " << m21 << ", " << m22 << " / SIZE: " << fsize << " / TEXT: " << str. local8Bit ( ) << endl << endl; |
689 | 689 | ||
690 | QWMatrix mat ( lrint ( m11 / fsize ), lrint ( m12 / fsize ), -lrint ( m21 / fsize ), -lrint ( m22 / fsize ), lrint ( x1 ), lrint ( y1 )); | 690 | QWMatrix mat ( lrint ( m11 / fsize ), lrint ( m12 / fsize ), -lrint ( m21 / fsize ), -lrint ( m22 / fsize ), lrint ( x1 ), lrint ( y1 )); |
691 | 691 | ||
692 | m_painter-> setWorldMatrix ( mat ); | 692 | m_painter-> setWorldMatrix ( mat ); |
693 | 693 | ||
694 | x1 = 0; | 694 | x1 = 0; |
695 | y1 = 0; | 695 | y1 = 0; |
696 | } | 696 | } |
697 | #endif | 697 | #endif |
698 | 698 | ||
699 | QPen oldpen = m_painter-> pen ( ); | 699 | QPen oldpen = m_painter-> pen ( ); |
700 | 700 | ||
701 | if (!( state-> getRender ( ) & 1 )) { | 701 | if (!( state-> getRender ( ) & 1 )) { |
702 | QPen fillpen = oldpen; | 702 | QPen fillpen = oldpen; |
703 | 703 | ||
704 | fillpen. setColor ( m_painter-> brush ( ). color ( )); | 704 | fillpen. setColor ( m_painter-> brush ( ). color ( )); |
705 | m_painter-> setPen ( fillpen ); | 705 | m_painter-> setPen ( fillpen ); |
706 | } | 706 | } |
707 | 707 | ||
708 | if ( fsize > 5 ) | 708 | if ( fsize > 5 ) |
709 | m_painter-> drawText ( lrint ( x1 ), lrint ( y1 ), str ); | 709 | m_painter-> drawText ( lrint ( x1 ), lrint ( y1 ), str ); |
710 | else | 710 | else |
711 | m_painter-> fillRect ( lrint ( x1 ), lrint ( y1 ), lrint ( QMAX( fp_t(1), dx1 )), lrint ( QMAX( fsize, dy1 )), m_painter-> pen ( ). color ( )); | 711 | m_painter-> fillRect ( lrint ( x1 ), lrint ( y1 ), lrint ( QMAX( fp_t(1), dx1 )), lrint ( QMAX( fsize, dy1 )), m_painter-> pen ( ). color ( )); |
712 | 712 | ||
713 | m_painter-> setPen ( oldpen ); | 713 | m_painter-> setPen ( oldpen ); |
714 | 714 | ||
715 | #ifndef QT_NO_TRANSFORMATIONS | 715 | #ifndef QT_NO_TRANSFORMATIONS |
716 | if ( dorot ) | 716 | if ( dorot ) |
717 | m_painter-> setWorldMatrix ( oldmat ); | 717 | m_painter-> setWorldMatrix ( oldmat ); |
718 | #endif | 718 | #endif |
719 | 719 | ||
720 | QPDFDBG( printf ( "DRAW TEXT: \"%s\" at (%ld/%ld)\n", str. local8Bit ( ). data ( ), lrint ( x1 ), lrint ( y1 ))); | 720 | QPDFDBG( printf ( "DRAW TEXT: \"%s\" at (%ld/%ld)\n", str. local8Bit ( ). data ( ), lrint ( x1 ), lrint ( y1 ))); |
721 | } | 721 | } |
722 | else if ( code != 0 ) { | 722 | else if ( code != 0 ) { |
723 | // some PDF files use CID 0, which is .notdef, so just ignore it | 723 | // some PDF files use CID 0, which is .notdef, so just ignore it |
724 | qWarning ( "Unknown character (CID=%d Unicode=%hx)\n", code, (unsigned short) ( uLen > 0 ? u [0] : (Unicode) 0 )); | 724 | qWarning ( "Unknown character (CID=%d Unicode=%hx)\n", code, (unsigned short) ( uLen > 0 ? u [0] : (Unicode) 0 )); |
725 | } | 725 | } |
726 | qApp-> processEvents ( ); | 726 | qApp-> processEvents ( ); |
727 | } | 727 | } |
728 | 728 | ||
729 | 729 | ||
730 | 730 | ||
731 | void QOutputDev::drawImageMask ( GfxState *state, Object */*ref*/, Stream *str, int width, int height, GBool invert, GBool inlineImg ) | 731 | void QOutputDev::drawImageMask ( GfxState *state, Object */*ref*/, Stream *str, int width, int height, GBool invert, GBool inlineImg ) |
732 | { | 732 | { |
733 | // get CTM, check for singular matrix | 733 | // get CTM, check for singular matrix |
734 | fp_t *ctm = state-> getCTM ( ); | 734 | fp_t *ctm = state-> getCTM ( ); |
735 | 735 | ||
736 | if ( fabs ( ctm [0] * ctm [3] - ctm [1] * ctm [2] ) < 0.000001 ) { | 736 | if ( fabs ( ctm [0] * ctm [3] - ctm [1] * ctm [2] ) < 0.000001 ) { |
737 | qWarning ( "Singular CTM in drawImage\n" ); | 737 | qWarning ( "Singular CTM in drawImage\n" ); |
738 | 738 | ||
739 | if ( inlineImg ) { | 739 | if ( inlineImg ) { |
740 | str-> reset ( ); | 740 | str-> reset ( ); |
741 | int j = height * (( width + 7 ) / 8 ); | 741 | int j = height * (( width + 7 ) / 8 ); |
742 | for ( int i = 0; i < j; i++ ) | 742 | for ( int i = 0; i < j; i++ ) |
743 | str->getChar(); | 743 | str->getChar(); |
744 | 744 | ||
745 | str->close(); | 745 | str->close(); |
746 | } | 746 | } |
747 | return; | 747 | return; |
748 | } | 748 | } |
749 | 749 | ||
750 | GfxRGB rgb; | 750 | GfxRGB rgb; |
751 | state-> getFillRGB ( &rgb ); | 751 | state-> getFillRGB ( &rgb ); |
752 | uint val = ( lrint ( rgb. r * 255 ) & 0xff ) << 16 | ( lrint ( rgb. g * 255 ) & 0xff ) << 8 | ( lrint ( rgb. b * 255 ) & 0xff ); | 752 | uint val = ( lrint ( rgb. r * 255 ) & 0xff ) << 16 | ( lrint ( rgb. g * 255 ) & 0xff ) << 8 | ( lrint ( rgb. b * 255 ) & 0xff ); |
753 | 753 | ||
754 | 754 | ||
755 | QImage img ( width, height, 32 ); | 755 | QImage img ( width, height, 32 ); |
756 | img. setAlphaBuffer ( true ); | 756 | img. setAlphaBuffer ( true ); |
757 | 757 | ||
758 | QPDFDBG( printf ( "IMAGE MASK (%dx%d)\n", width, height )); | 758 | QPDFDBG( printf ( "IMAGE MASK (%dx%d)\n", width, height )); |
759 | 759 | ||
760 | // initialize the image stream | 760 | // initialize the image stream |
761 | ImageStream *imgStr = new ImageStream ( str, width, 1, 1 ); | 761 | ImageStream *imgStr = new ImageStream ( str, width, 1, 1 ); |
762 | imgStr-> reset ( ); | 762 | imgStr-> reset ( ); |
763 | 763 | ||
764 | uchar **scanlines = img. jumpTable ( ); | 764 | uchar **scanlines = img. jumpTable ( ); |
765 | 765 | ||
766 | if ( ctm [3] > 0 ) | 766 | if ( ctm [3] > 0 ) |
767 | scanlines += ( height - 1 ); | 767 | scanlines += ( height - 1 ); |
768 | 768 | ||
769 | for ( int y = 0; y < height; y++ ) { | 769 | for ( int y = 0; y < height; y++ ) { |
770 | QRgb *scanline = (QRgb *) *scanlines; | 770 | QRgb *scanline = (QRgb *) *scanlines; |
771 | 771 | ||
772 | if ( ctm [0] < 0 ) | 772 | if ( ctm [0] < 0 ) |
773 | scanline += ( width - 1 ); | 773 | scanline += ( width - 1 ); |
774 | 774 | ||
775 | for ( int x = 0; x < width; x++ ) { | 775 | for ( int x = 0; x < width; x++ ) { |
776 | Guchar alpha; | 776 | Guchar alpha; |
777 | 777 | ||
778 | imgStr-> getPixel ( &alpha ); | 778 | imgStr-> getPixel ( &alpha ); |
779 | 779 | ||
780 | if ( invert ) | 780 | if ( invert ) |
781 | alpha ^= 1; | 781 | alpha ^= 1; |
782 | 782 | ||
783 | *scanline = ( alpha == 0 ) ? 0xff000000 | val : val; | 783 | *scanline = ( alpha == 0 ) ? 0xff000000 | val : val; |
784 | 784 | ||
785 | ctm [0] < 0 ? scanline-- : scanline++; | 785 | ctm [0] < 0 ? scanline-- : scanline++; |
786 | } | 786 | } |
787 | ctm [3] > 0 ? scanlines-- : scanlines++; | 787 | ctm [3] > 0 ? scanlines-- : scanlines++; |
788 | 788 | ||
789 | qApp-> processEvents ( ); | 789 | qApp-> processEvents ( ); |
790 | } | 790 | } |
791 | 791 | ||
792 | #ifndef QT_NO_TRANSFORMATIONS | 792 | #ifndef QT_NO_TRANSFORMATIONS |
793 | QWMatrix mat ( ctm [0] / width, ctm [1], ctm [2], ctm [3] / height, ctm [4], ctm [5] ); | 793 | QWMatrix mat ( ctm [0] / width, ctm [1], ctm [2], ctm [3] / height, ctm [4], ctm [5] ); |
794 | 794 | ||
795 | std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl | 795 | std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl |
796 | << " - M=" << mat. m11 ( ) << "/" << mat. m12 ( ) << "/" << mat. m21 ( ) << "/" << mat. m22 ( ) << std::endl; | 796 | << " - M=" << mat. m11 ( ) << "/" << mat. m12 ( ) << "/" << mat. m21 ( ) << "/" << mat. m22 ( ) << std::endl; |
797 | 797 | ||
798 | QWMatrix oldmat = m_painter-> worldMatrix ( ); | 798 | QWMatrix oldmat = m_painter-> worldMatrix ( ); |
799 | m_painter-> setWorldMatrix ( mat, true ); | 799 | m_painter-> setWorldMatrix ( mat, true ); |
800 | 800 | ||
801 | #ifdef QWS | 801 | #ifdef QWS |
802 | QPixmap pm; | 802 | QPixmap pm; |
803 | pm. convertFromImage ( img ); | 803 | pm. convertFromImage ( img ); |
804 | m_painter-> drawPixmap ( 0, 0, pm ); | 804 | m_painter-> drawPixmap ( 0, 0, pm ); |
805 | #else | 805 | #else |
806 | m_painter-> drawImage ( QPoint ( 0, 0 ), img ); | 806 | m_painter-> drawImage ( QPoint ( 0, 0 ), img ); |
807 | #endif | 807 | #endif |
808 | 808 | ||
809 | m_painter-> setWorldMatrix ( oldmat ); | 809 | m_painter-> setWorldMatrix ( oldmat ); |
810 | 810 | ||
811 | #else | 811 | #else |
812 | if (( ctm [1] < -0.1 ) || ( ctm [1] > 0.1 ) || ( ctm [2] < -0.1 ) || ( ctm [2] > 0.1 )) { | 812 | if (( ctm [1] < -0.1 ) || ( ctm [1] > 0.1 ) || ( ctm [2] < -0.1 ) || ( ctm [2] > 0.1 )) { |
813 | QPDFDBG( printf ( "### ROTATED / SHEARED / ETC -- CANNOT DISPLAY THIS IMAGE\n" )); | 813 | QPDFDBG( printf ( "### ROTATED / SHEARED / ETC -- CANNOT DISPLAY THIS IMAGE\n" )); |
814 | } | 814 | } |
815 | else { | 815 | else { |
816 | int x = lrint ( ctm [4] ); | 816 | int x = lrint ( ctm [4] ); |
817 | int y = lrint ( ctm [5] ); | 817 | int y = lrint ( ctm [5] ); |
818 | 818 | ||
819 | int w = lrint ( ctm [0] ); | 819 | int w = lrint ( ctm [0] ); |
820 | int h = lrint ( ctm [3] ); | 820 | int h = lrint ( ctm [3] ); |
821 | 821 | ||
822 | if ( w < 0 ) { | 822 | if ( w < 0 ) { |
823 | x += w; | 823 | x += w; |
824 | w = -w; | 824 | w = -w; |
825 | } | 825 | } |
826 | if ( h < 0 ) { | 826 | if ( h < 0 ) { |
827 | y += h; | 827 | y += h; |
828 | h = -h; | 828 | h = -h; |
829 | } | 829 | } |
830 | 830 | ||
831 | QPDFDBG( printf ( "DRAWING IMAGE MASKED: %d/%d - %dx%d\n", x, y, w, h )); | 831 | QPDFDBG( printf ( "DRAWING IMAGE MASKED: %d/%d - %dx%d\n", x, y, w, h )); |
832 | 832 | ||
833 | img = img. smoothScale ( w, h ); | 833 | img = img. smoothScale ( w, h ); |
834 | qApp-> processEvents ( ); | 834 | qApp-> processEvents ( ); |
835 | m_painter-> drawImage ( x, y, img ); | 835 | m_painter-> drawImage ( x, y, img ); |
836 | } | 836 | } |
837 | 837 | ||
838 | #endif | 838 | #endif |
839 | 839 | ||
840 | delete imgStr; | 840 | delete imgStr; |
841 | qApp-> processEvents ( ); | 841 | qApp-> processEvents ( ); |
842 | } | 842 | } |
843 | 843 | ||
844 | 844 | ||
845 | void QOutputDev::drawImage(GfxState *state, Object */*ref*/, Stream *str, int width, int height, GfxImageColorMap *colorMap, int *maskColors, GBool inlineImg ) | 845 | void QOutputDev::drawImage(GfxState *state, Object */*ref*/, Stream *str, int width, int height, GfxImageColorMap *colorMap, int *maskColors, GBool inlineImg ) |
846 | { | 846 | { |
847 | int nComps, nVals, nBits; | 847 | int nComps, nVals, nBits; |
848 | 848 | ||
849 | // image parameters | 849 | // image parameters |
850 | nComps = colorMap->getNumPixelComps ( ); | 850 | nComps = colorMap->getNumPixelComps ( ); |
851 | nVals = width * nComps; | 851 | nVals = width * nComps; |
852 | nBits = colorMap-> getBits ( ); | 852 | nBits = colorMap-> getBits ( ); |
853 | 853 | ||
854 | // get CTM, check for singular matrix | 854 | // get CTM, check for singular matrix |
855 | fp_t *ctm = state-> getCTM ( ); | 855 | fp_t *ctm = state-> getCTM ( ); |
856 | 856 | ||
857 | if ( fabs ( ctm [0] * ctm [3] - ctm [1] * ctm [2] ) < 0.000001 ) { | 857 | if ( fabs ( ctm [0] * ctm [3] - ctm [1] * ctm [2] ) < 0.000001 ) { |
858 | qWarning ( "Singular CTM in drawImage\n" ); | 858 | qWarning ( "Singular CTM in drawImage\n" ); |
859 | 859 | ||
860 | if ( inlineImg ) { | 860 | if ( inlineImg ) { |
861 | str-> reset ( ); | 861 | str-> reset ( ); |
862 | int j = height * (( nVals * nBits + 7 ) / 8 ); | 862 | int j = height * (( nVals * nBits + 7 ) / 8 ); |
863 | for ( int i = 0; i < j; i++ ) | 863 | for ( int i = 0; i < j; i++ ) |
864 | str->getChar(); | 864 | str->getChar(); |
865 | 865 | ||
866 | str->close(); | 866 | str->close(); |
867 | } | 867 | } |
868 | return; | 868 | return; |
869 | } | 869 | } |
870 | 870 | ||
871 | QImage img ( width, height, 32 ); | 871 | QImage img ( width, height, 32 ); |
872 | 872 | ||
873 | if ( maskColors ) | 873 | if ( maskColors ) |
874 | img. setAlphaBuffer ( true ); | 874 | img. setAlphaBuffer ( true ); |
875 | 875 | ||
876 | QPDFDBG( printf ( "IMAGE (%dx%d)\n", width, height )); | 876 | QPDFDBG( printf ( "IMAGE (%dx%d)\n", width, height )); |
877 | 877 | ||
878 | // initialize the image stream | 878 | // initialize the image stream |
879 | ImageStream *imgStr = new ImageStream ( str, width, nComps, nBits ); | 879 | ImageStream *imgStr = new ImageStream ( str, width, nComps, nBits ); |
880 | imgStr-> reset ( ); | 880 | imgStr-> reset ( ); |
881 | 881 | ||
882 | Guchar pixBuf [gfxColorMaxComps]; | 882 | Guchar pixBuf [gfxColorMaxComps]; |
883 | GfxRGB rgb; | 883 | GfxRGB rgb; |
884 | 884 | ||
885 | 885 | ||
886 | uchar **scanlines = img. jumpTable ( ); | 886 | uchar **scanlines = img. jumpTable ( ); |
887 | 887 | ||
888 | if ( ctm [3] > 0 ) | 888 | if ( ctm [3] > 0 ) |
889 | scanlines += ( height - 1 ); | 889 | scanlines += ( height - 1 ); |
890 | 890 | ||
891 | for ( int y = 0; y < height; y++ ) { | 891 | for ( int y = 0; y < height; y++ ) { |
892 | QRgb *scanline = (QRgb *) *scanlines; | 892 | QRgb *scanline = (QRgb *) *scanlines; |
893 | 893 | ||
894 | if ( ctm [0] < 0 ) | 894 | if ( ctm [0] < 0 ) |
895 | scanline += ( width - 1 ); | 895 | scanline += ( width - 1 ); |
896 | 896 | ||
897 | for ( int x = 0; x < width; x++ ) { | 897 | for ( int x = 0; x < width; x++ ) { |
898 | imgStr-> getPixel ( pixBuf ); | 898 | imgStr-> getPixel ( pixBuf ); |
899 | colorMap-> getRGB ( pixBuf, &rgb ); | 899 | colorMap-> getRGB ( pixBuf, &rgb ); |
900 | 900 | ||
901 | uint val = ( lrint ( rgb. r * 255 ) & 0xff ) << 16 | ( lrint ( rgb. g * 255 ) & 0xff ) << 8 | ( lrint ( rgb. b * 255 ) & 0xff ); | 901 | uint val = ( lrint ( rgb. r * 255 ) & 0xff ) << 16 | ( lrint ( rgb. g * 255 ) & 0xff ) << 8 | ( lrint ( rgb. b * 255 ) & 0xff ); |
902 | 902 | ||
903 | if ( maskColors ) { | 903 | if ( maskColors ) { |
904 | for ( int k = 0; k < nComps; ++k ) { | 904 | for ( int k = 0; k < nComps; ++k ) { |
905 | if (( pixBuf [k] < maskColors [2 * k] ) || ( pixBuf [k] > maskColors [2 * k] )) { | 905 | if (( pixBuf [k] < maskColors [2 * k] ) || ( pixBuf [k] > maskColors [2 * k] )) { |
906 | val |= 0xff000000; | 906 | val |= 0xff000000; |
907 | break; | 907 | break; |
908 | } | 908 | } |
909 | } | 909 | } |
910 | } | 910 | } |
911 | *scanline = val; | 911 | *scanline = val; |
912 | 912 | ||
913 | ctm [0] < 0 ? scanline-- : scanline++; | 913 | ctm [0] < 0 ? scanline-- : scanline++; |
914 | } | 914 | } |
915 | ctm [3] > 0 ? scanlines-- : scanlines++; | 915 | ctm [3] > 0 ? scanlines-- : scanlines++; |
916 | 916 | ||
917 | qApp-> processEvents ( ); | 917 | qApp-> processEvents ( ); |
918 | } | 918 | } |
919 | 919 | ||
920 | 920 | ||
921 | #ifndef QT_NO_TRANSFORMATIONS | 921 | #ifndef QT_NO_TRANSFORMATIONS |
922 | QWMatrix mat ( ctm [0] / width, ctm [1], ctm [2], ctm [3] / height, ctm [4], ctm [5] ); | 922 | QWMatrix mat ( ctm [0] / width, ctm [1], ctm [2], ctm [3] / height, ctm [4], ctm [5] ); |
923 | 923 | ||
924 | std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl | 924 | std::cerr << "MATRIX T=" << mat. dx ( ) << "/" << mat. dy ( ) << std::endl |
925 | << " - M=" << mat. m11 ( ) << "/" << mat. m12 ( ) << "/" << mat. m21 ( ) << "/" << mat. m22 ( ) << std::endl; | 925 | << " - M=" << mat. m11 ( ) << "/" << mat. m12 ( ) << "/" << mat. m21 ( ) << "/" << mat. m22 ( ) << std::endl; |
926 | 926 | ||
927 | QWMatrix oldmat = m_painter-> worldMatrix ( ); | 927 | QWMatrix oldmat = m_painter-> worldMatrix ( ); |
928 | m_painter-> setWorldMatrix ( mat, true ); | 928 | m_painter-> setWorldMatrix ( mat, true ); |
929 | 929 | ||
930 | #ifdef QWS | 930 | #ifdef QWS |
931 | QPixmap pm; | 931 | QPixmap pm; |
932 | pm. convertFromImage ( img ); | 932 | pm. convertFromImage ( img ); |
933 | m_painter-> drawPixmap ( 0, 0, pm ); | 933 | m_painter-> drawPixmap ( 0, 0, pm ); |
934 | #else | 934 | #else |
935 | m_painter-> drawImage ( QPoint ( 0, 0 ), img ); | 935 | m_painter-> drawImage ( QPoint ( 0, 0 ), img ); |
936 | #endif | 936 | #endif |
937 | 937 | ||
938 | m_painter-> setWorldMatrix ( oldmat ); | 938 | m_painter-> setWorldMatrix ( oldmat ); |
939 | 939 | ||
940 | #else // QT_NO_TRANSFORMATIONS | 940 | #else // QT_NO_TRANSFORMATIONS |
941 | 941 | ||
942 | if (( ctm [1] < -0.1 ) || ( ctm [1] > 0.1 ) || ( ctm [2] < -0.1 ) || ( ctm [2] > 0.1 )) { | 942 | if (( ctm [1] < -0.1 ) || ( ctm [1] > 0.1 ) || ( ctm [2] < -0.1 ) || ( ctm [2] > 0.1 )) { |
943 | QPDFDBG( printf ( "### ROTATED / SHEARED / ETC -- CANNOT DISPLAY THIS IMAGE\n" )); | 943 | QPDFDBG( printf ( "### ROTATED / SHEARED / ETC -- CANNOT DISPLAY THIS IMAGE\n" )); |
944 | } | 944 | } |
945 | else { | 945 | else { |
946 | int x = lrint ( ctm [4] ); | 946 | int x = lrint ( ctm [4] ); |
947 | int y = lrint ( ctm [5] ); | 947 | int y = lrint ( ctm [5] ); |
948 | 948 | ||
949 | int w = lrint ( ctm [0] ); | 949 | int w = lrint ( ctm [0] ); |
950 | int h = lrint ( ctm [3] ); | 950 | int h = lrint ( ctm [3] ); |
951 | 951 | ||
952 | if ( w < 0 ) { | 952 | if ( w < 0 ) { |
953 | x += w; | 953 | x += w; |
954 | w = -w; | 954 | w = -w; |
955 | } | 955 | } |
956 | if ( h < 0 ) { | 956 | if ( h < 0 ) { |
957 | y += h; | 957 | y += h; |
958 | h = -h; | 958 | h = -h; |
959 | } | 959 | } |
960 | 960 | ||
961 | QPDFDBG( printf ( "DRAWING IMAGE: %d/%d - %dx%d\n", x, y, w, h )); | 961 | QPDFDBG( printf ( "DRAWING IMAGE: %d/%d - %dx%d\n", x, y, w, h )); |
962 | 962 | ||
963 | img = img. smoothScale ( w, h ); | 963 | img = img. smoothScale ( w, h ); |
964 | qApp-> processEvents ( ); | 964 | qApp-> processEvents ( ); |
965 | m_painter-> drawImage ( x, y, img ); | 965 | m_painter-> drawImage ( x, y, img ); |
966 | } | 966 | } |
967 | 967 | ||
968 | #endif | 968 | #endif |
969 | 969 | ||
970 | 970 | ||
971 | delete imgStr; | 971 | delete imgStr; |
972 | qApp-> processEvents ( ); | 972 | qApp-> processEvents ( ); |
973 | } | 973 | } |
974 | 974 | ||
975 | 975 | ||
976 | 976 | ||
977 | bool QOutputDev::findText ( const QString &str, QRect &r, bool top, bool bottom ) | 977 | bool QOutputDev::findText ( const QString &str, QRect &r, bool top, bool bottom ) |
978 | { | 978 | { |
979 | int l, t, w, h; | 979 | int l, t, w, h; |
980 | r. rect ( &l, &t, &w, &h ); | 980 | r. rect ( &l, &t, &w, &h ); |
981 | 981 | ||
diff --git a/scripts/kconfig/qconf.cc b/scripts/kconfig/qconf.cc index 52419ad..0459caf 100644 --- a/scripts/kconfig/qconf.cc +++ b/scripts/kconfig/qconf.cc | |||
@@ -1,1304 +1,1304 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> | 2 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> |
3 | * Released under the terms of the GNU GPL v2.0. | 3 | * Released under the terms of the GNU GPL v2.0. |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <qapplication.h> | 6 | #include <qapplication.h> |
7 | #include <qmainwindow.h> | 7 | #include <qmainwindow.h> |
8 | #include <qtoolbar.h> | 8 | #include <qtoolbar.h> |
9 | #include <qvbox.h> | 9 | #include <qvbox.h> |
10 | #include <qsplitter.h> | 10 | #include <qsplitter.h> |
11 | #include <qlistview.h> | 11 | #include <qlistview.h> |
12 | #include <qtextview.h> | 12 | #include <qtextview.h> |
13 | #include <qlineedit.h> | 13 | #include <qlineedit.h> |
14 | #include <qmenubar.h> | 14 | #include <qmenubar.h> |
15 | #include <qmessagebox.h> | 15 | #include <qmessagebox.h> |
16 | #include <qaction.h> | 16 | #include <qaction.h> |
17 | #include <qheader.h> | 17 | #include <qheader.h> |
18 | #include <qfiledialog.h> | 18 | #include <qfiledialog.h> |
19 | #include <qregexp.h> | 19 | #include <qregexp.h> |
20 | #if QT_VERSION >= 300 | 20 | #if QT_VERSION >= 0x030000 |
21 | #include <qsettings.h> | 21 | #include <qsettings.h> |
22 | #endif | 22 | #endif |
23 | 23 | ||
24 | #include <stdlib.h> | 24 | #include <stdlib.h> |
25 | 25 | ||
26 | #include "lkc.h" | 26 | #include "lkc.h" |
27 | #include "qconf.h" | 27 | #include "qconf.h" |
28 | 28 | ||
29 | #include "qconf.moc" | 29 | #include "qconf.moc" |
30 | #include "images.c" | 30 | #include "images.c" |
31 | 31 | ||
32 | static QApplication *configApp; | 32 | static QApplication *configApp; |
33 | #if QT_VERSION >= 300 | 33 | #if QT_VERSION >= 0x030000 |
34 | static QSettings *configSettings; | 34 | static QSettings *configSettings; |
35 | #endif | 35 | #endif |
36 | 36 | ||
37 | /* | 37 | /* |
38 | * update all the children of a menu entry | 38 | * update all the children of a menu entry |
39 | * removes/adds the entries from the parent widget as necessary | 39 | * removes/adds the entries from the parent widget as necessary |
40 | * | 40 | * |
41 | * parent: either the menu list widget or a menu entry widget | 41 | * parent: either the menu list widget or a menu entry widget |
42 | * menu: entry to be updated | 42 | * menu: entry to be updated |
43 | */ | 43 | */ |
44 | template <class P> | 44 | template <class P> |
45 | void ConfigList::updateMenuList(P* parent, struct menu* menu) | 45 | void ConfigList::updateMenuList(P* parent, struct menu* menu) |
46 | { | 46 | { |
47 | struct menu* child; | 47 | struct menu* child; |
48 | ConfigItem* item; | 48 | ConfigItem* item; |
49 | ConfigItem* last; | 49 | ConfigItem* last; |
50 | bool visible; | 50 | bool visible; |
51 | enum prop_type type; | 51 | enum prop_type type; |
52 | 52 | ||
53 | if (!menu) { | 53 | if (!menu) { |
54 | while ((item = parent->firstChild())) | 54 | while ((item = parent->firstChild())) |
55 | delete item; | 55 | delete item; |
56 | return; | 56 | return; |
57 | } | 57 | } |
58 | 58 | ||
59 | last = parent->firstChild(); | 59 | last = parent->firstChild(); |
60 | if (last && !last->goParent) | 60 | if (last && !last->goParent) |
61 | last = 0; | 61 | last = 0; |
62 | for (child = menu->list; child; child = child->next) { | 62 | for (child = menu->list; child; child = child->next) { |
63 | item = last ? last->nextSibling() : parent->firstChild(); | 63 | item = last ? last->nextSibling() : parent->firstChild(); |
64 | type = child->prompt ? child->prompt->type : P_UNKNOWN; | 64 | type = child->prompt ? child->prompt->type : P_UNKNOWN; |
65 | 65 | ||
66 | switch (mode) { | 66 | switch (mode) { |
67 | case menuMode: | 67 | case menuMode: |
68 | if (!(child->flags & MENU_ROOT)) | 68 | if (!(child->flags & MENU_ROOT)) |
69 | goto hide; | 69 | goto hide; |
70 | break; | 70 | break; |
71 | case symbolMode: | 71 | case symbolMode: |
72 | if (child->flags & MENU_ROOT) | 72 | if (child->flags & MENU_ROOT) |
73 | goto hide; | 73 | goto hide; |
74 | break; | 74 | break; |
75 | default: | 75 | default: |
76 | break; | 76 | break; |
77 | } | 77 | } |
78 | 78 | ||
79 | visible = menu_is_visible(child); | 79 | visible = menu_is_visible(child); |
80 | if (showAll || visible) { | 80 | if (showAll || visible) { |
81 | if (!item || item->menu != child) | 81 | if (!item || item->menu != child) |
82 | item = new ConfigItem(parent, last, child, visible); | 82 | item = new ConfigItem(parent, last, child, visible); |
83 | else | 83 | else |
84 | item->testUpdateMenu(visible); | 84 | item->testUpdateMenu(visible); |
85 | 85 | ||
86 | if (mode == fullMode || mode == menuMode || type != P_MENU) | 86 | if (mode == fullMode || mode == menuMode || type != P_MENU) |
87 | updateMenuList(item, child); | 87 | updateMenuList(item, child); |
88 | else | 88 | else |
89 | updateMenuList(item, 0); | 89 | updateMenuList(item, 0); |
90 | last = item; | 90 | last = item; |
91 | continue; | 91 | continue; |
92 | } | 92 | } |
93 | hide: | 93 | hide: |
94 | if (item && item->menu == child) { | 94 | if (item && item->menu == child) { |
95 | last = parent->firstChild(); | 95 | last = parent->firstChild(); |
96 | if (last == item) | 96 | if (last == item) |
97 | last = 0; | 97 | last = 0; |
98 | else while (last->nextSibling() != item) | 98 | else while (last->nextSibling() != item) |
99 | last = last->nextSibling(); | 99 | last = last->nextSibling(); |
100 | delete item; | 100 | delete item; |
101 | } | 101 | } |
102 | } | 102 | } |
103 | } | 103 | } |
104 | 104 | ||
105 | #if QT_VERSION >= 300 | 105 | #if QT_VERSION >= 0x030000 |
106 | /* | 106 | /* |
107 | * set the new data | 107 | * set the new data |
108 | * TODO check the value | 108 | * TODO check the value |
109 | */ | 109 | */ |
110 | void ConfigItem::okRename(int col) | 110 | void ConfigItem::okRename(int col) |
111 | { | 111 | { |
112 | Parent::okRename(col); | 112 | Parent::okRename(col); |
113 | sym_set_string_value(menu->sym, text(dataColIdx).latin1()); | 113 | sym_set_string_value(menu->sym, text(dataColIdx).latin1()); |
114 | } | 114 | } |
115 | #endif | 115 | #endif |
116 | 116 | ||
117 | /* | 117 | /* |
118 | * update the displayed of a menu entry | 118 | * update the displayed of a menu entry |
119 | */ | 119 | */ |
120 | void ConfigItem::updateMenu(void) | 120 | void ConfigItem::updateMenu(void) |
121 | { | 121 | { |
122 | ConfigList* list; | 122 | ConfigList* list; |
123 | struct symbol* sym; | 123 | struct symbol* sym; |
124 | struct property *prop; | 124 | struct property *prop; |
125 | QString prompt; | 125 | QString prompt; |
126 | int type; | 126 | int type; |
127 | tristate expr; | 127 | tristate expr; |
128 | 128 | ||
129 | list = listView(); | 129 | list = listView(); |
130 | if (goParent) { | 130 | if (goParent) { |
131 | setPixmap(promptColIdx, list->menuBackPix); | 131 | setPixmap(promptColIdx, list->menuBackPix); |
132 | prompt = ".."; | 132 | prompt = ".."; |
133 | goto set_prompt; | 133 | goto set_prompt; |
134 | } | 134 | } |
135 | 135 | ||
136 | sym = menu->sym; | 136 | sym = menu->sym; |
137 | prop = menu->prompt; | 137 | prop = menu->prompt; |
138 | prompt = menu_get_prompt(menu); | 138 | prompt = menu_get_prompt(menu); |
139 | 139 | ||
140 | if (prop) switch (prop->type) { | 140 | if (prop) switch (prop->type) { |
141 | case P_MENU: | 141 | case P_MENU: |
142 | if (list->mode == singleMode || list->mode == symbolMode) { | 142 | if (list->mode == singleMode || list->mode == symbolMode) { |
143 | /* a menuconfig entry is displayed differently | 143 | /* a menuconfig entry is displayed differently |
144 | * depending whether it's at the view root or a child. | 144 | * depending whether it's at the view root or a child. |
145 | */ | 145 | */ |
146 | if (sym && list->rootEntry == menu) | 146 | if (sym && list->rootEntry == menu) |
147 | break; | 147 | break; |
148 | setPixmap(promptColIdx, list->menuPix); | 148 | setPixmap(promptColIdx, list->menuPix); |
149 | } else { | 149 | } else { |
150 | if (sym) | 150 | if (sym) |
151 | break; | 151 | break; |
152 | setPixmap(promptColIdx, 0); | 152 | setPixmap(promptColIdx, 0); |
153 | } | 153 | } |
154 | goto set_prompt; | 154 | goto set_prompt; |
155 | case P_COMMENT: | 155 | case P_COMMENT: |
156 | setPixmap(promptColIdx, 0); | 156 | setPixmap(promptColIdx, 0); |
157 | goto set_prompt; | 157 | goto set_prompt; |
158 | default: | 158 | default: |
159 | ; | 159 | ; |
160 | } | 160 | } |
161 | if (!sym) | 161 | if (!sym) |
162 | goto set_prompt; | 162 | goto set_prompt; |
163 | 163 | ||
164 | setText(nameColIdx, sym->name); | 164 | setText(nameColIdx, sym->name); |
165 | 165 | ||
166 | type = sym_get_type(sym); | 166 | type = sym_get_type(sym); |
167 | switch (type) { | 167 | switch (type) { |
168 | case S_BOOLEAN: | 168 | case S_BOOLEAN: |
169 | case S_TRISTATE: | 169 | case S_TRISTATE: |
170 | char ch; | 170 | char ch; |
171 | 171 | ||
172 | if (!sym_is_changable(sym) && !list->showAll) { | 172 | if (!sym_is_changable(sym) && !list->showAll) { |
173 | setPixmap(promptColIdx, 0); | 173 | setPixmap(promptColIdx, 0); |
174 | setText(noColIdx, 0); | 174 | setText(noColIdx, 0); |
175 | setText(modColIdx, 0); | 175 | setText(modColIdx, 0); |
176 | setText(yesColIdx, 0); | 176 | setText(yesColIdx, 0); |
177 | break; | 177 | break; |
178 | } | 178 | } |
179 | expr = sym_get_tristate_value(sym); | 179 | expr = sym_get_tristate_value(sym); |
180 | switch (expr) { | 180 | switch (expr) { |
181 | case yes: | 181 | case yes: |
182 | if (sym_is_choice_value(sym) && type == S_BOOLEAN) | 182 | if (sym_is_choice_value(sym) && type == S_BOOLEAN) |
183 | setPixmap(promptColIdx, list->choiceYesPix); | 183 | setPixmap(promptColIdx, list->choiceYesPix); |
184 | else | 184 | else |
185 | setPixmap(promptColIdx, list->symbolYesPix); | 185 | setPixmap(promptColIdx, list->symbolYesPix); |
186 | setText(yesColIdx, "Y"); | 186 | setText(yesColIdx, "Y"); |
187 | ch = 'Y'; | 187 | ch = 'Y'; |
188 | break; | 188 | break; |
189 | case mod: | 189 | case mod: |
190 | setPixmap(promptColIdx, list->symbolModPix); | 190 | setPixmap(promptColIdx, list->symbolModPix); |
191 | setText(modColIdx, "M"); | 191 | setText(modColIdx, "M"); |
192 | ch = 'M'; | 192 | ch = 'M'; |
193 | break; | 193 | break; |
194 | default: | 194 | default: |
195 | if (sym_is_choice_value(sym) && type == S_BOOLEAN) | 195 | if (sym_is_choice_value(sym) && type == S_BOOLEAN) |
196 | setPixmap(promptColIdx, list->choiceNoPix); | 196 | setPixmap(promptColIdx, list->choiceNoPix); |
197 | else | 197 | else |
198 | setPixmap(promptColIdx, list->symbolNoPix); | 198 | setPixmap(promptColIdx, list->symbolNoPix); |
199 | setText(noColIdx, "N"); | 199 | setText(noColIdx, "N"); |
200 | ch = 'N'; | 200 | ch = 'N'; |
201 | break; | 201 | break; |
202 | } | 202 | } |
203 | if (expr != no) | 203 | if (expr != no) |
204 | setText(noColIdx, sym_tristate_within_range(sym, no) ? "_" : 0); | 204 | setText(noColIdx, sym_tristate_within_range(sym, no) ? "_" : 0); |
205 | if (expr != mod) | 205 | if (expr != mod) |
206 | setText(modColIdx, sym_tristate_within_range(sym, mod) ? "_" : 0); | 206 | setText(modColIdx, sym_tristate_within_range(sym, mod) ? "_" : 0); |
207 | if (expr != yes) | 207 | if (expr != yes) |
208 | setText(yesColIdx, sym_tristate_within_range(sym, yes) ? "_" : 0); | 208 | setText(yesColIdx, sym_tristate_within_range(sym, yes) ? "_" : 0); |
209 | 209 | ||
210 | setText(dataColIdx, QChar(ch)); | 210 | setText(dataColIdx, QChar(ch)); |
211 | break; | 211 | break; |
212 | case S_INT: | 212 | case S_INT: |
213 | case S_HEX: | 213 | case S_HEX: |
214 | case S_STRING: | 214 | case S_STRING: |
215 | const char* data; | 215 | const char* data; |
216 | 216 | ||
217 | data = sym_get_string_value(sym); | 217 | data = sym_get_string_value(sym); |
218 | #if QT_VERSION >= 300 | 218 | #if QT_VERSION >= 0x030000 |
219 | int i = list->mapIdx(dataColIdx); | 219 | int i = list->mapIdx(dataColIdx); |
220 | if (i >= 0) | 220 | if (i >= 0) |
221 | setRenameEnabled(i, TRUE); | 221 | setRenameEnabled(i, TRUE); |
222 | #endif | 222 | #endif |
223 | setText(dataColIdx, data); | 223 | setText(dataColIdx, data); |
224 | if (type == S_STRING) | 224 | if (type == S_STRING) |
225 | prompt.sprintf("%s: %s", prompt.latin1(), data); | 225 | prompt.sprintf("%s: %s", prompt.latin1(), data); |
226 | else | 226 | else |
227 | prompt.sprintf("(%s) %s", data, prompt.latin1()); | 227 | prompt.sprintf("(%s) %s", data, prompt.latin1()); |
228 | break; | 228 | break; |
229 | } | 229 | } |
230 | if (!sym_has_value(sym) && visible) | 230 | if (!sym_has_value(sym) && visible) |
231 | prompt += " (NEW)"; | 231 | prompt += " (NEW)"; |
232 | set_prompt: | 232 | set_prompt: |
233 | setText(promptColIdx, prompt); | 233 | setText(promptColIdx, prompt); |
234 | } | 234 | } |
235 | 235 | ||
236 | void ConfigItem::testUpdateMenu(bool v) | 236 | void ConfigItem::testUpdateMenu(bool v) |
237 | { | 237 | { |
238 | ConfigItem* i; | 238 | ConfigItem* i; |
239 | 239 | ||
240 | visible = v; | 240 | visible = v; |
241 | if (!menu) | 241 | if (!menu) |
242 | return; | 242 | return; |
243 | 243 | ||
244 | sym_calc_value(menu->sym); | 244 | sym_calc_value(menu->sym); |
245 | if (menu->flags & MENU_CHANGED) { | 245 | if (menu->flags & MENU_CHANGED) { |
246 | /* the menu entry changed, so update all list items */ | 246 | /* the menu entry changed, so update all list items */ |
247 | menu->flags &= ~MENU_CHANGED; | 247 | menu->flags &= ~MENU_CHANGED; |
248 | for (i = (ConfigItem*)menu->data; i; i = i->nextItem) | 248 | for (i = (ConfigItem*)menu->data; i; i = i->nextItem) |
249 | i->updateMenu(); | 249 | i->updateMenu(); |
250 | } else if (listView()->updateAll) | 250 | } else if (listView()->updateAll) |
251 | updateMenu(); | 251 | updateMenu(); |
252 | } | 252 | } |
253 | 253 | ||
254 | void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align) | 254 | void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align) |
255 | { | 255 | { |
256 | ConfigList* list = listView(); | 256 | ConfigList* list = listView(); |
257 | 257 | ||
258 | if (visible) { | 258 | if (visible) { |
259 | if (isSelected() && !list->hasFocus() && list->mode == menuMode) | 259 | if (isSelected() && !list->hasFocus() && list->mode == menuMode) |
260 | Parent::paintCell(p, list->inactivedColorGroup, column, width, align); | 260 | Parent::paintCell(p, list->inactivedColorGroup, column, width, align); |
261 | else | 261 | else |
262 | Parent::paintCell(p, cg, column, width, align); | 262 | Parent::paintCell(p, cg, column, width, align); |
263 | } else | 263 | } else |
264 | Parent::paintCell(p, list->disabledColorGroup, column, width, align); | 264 | Parent::paintCell(p, list->disabledColorGroup, column, width, align); |
265 | } | 265 | } |
266 | 266 | ||
267 | /* | 267 | /* |
268 | * construct a menu entry | 268 | * construct a menu entry |
269 | */ | 269 | */ |
270 | void ConfigItem::init(void) | 270 | void ConfigItem::init(void) |
271 | { | 271 | { |
272 | if (menu) { | 272 | if (menu) { |
273 | ConfigList* list = listView(); | 273 | ConfigList* list = listView(); |
274 | nextItem = (ConfigItem*)menu->data; | 274 | nextItem = (ConfigItem*)menu->data; |
275 | menu->data = this; | 275 | menu->data = this; |
276 | 276 | ||
277 | if (list->mode != fullMode) | 277 | if (list->mode != fullMode) |
278 | setOpen(TRUE); | 278 | setOpen(TRUE); |
279 | sym_calc_value(menu->sym); | 279 | sym_calc_value(menu->sym); |
280 | } | 280 | } |
281 | updateMenu(); | 281 | updateMenu(); |
282 | } | 282 | } |
283 | 283 | ||
284 | /* | 284 | /* |
285 | * destruct a menu entry | 285 | * destruct a menu entry |
286 | */ | 286 | */ |
287 | ConfigItem::~ConfigItem(void) | 287 | ConfigItem::~ConfigItem(void) |
288 | { | 288 | { |
289 | if (menu) { | 289 | if (menu) { |
290 | ConfigItem** ip = (ConfigItem**)&menu->data; | 290 | ConfigItem** ip = (ConfigItem**)&menu->data; |
291 | for (; *ip; ip = &(*ip)->nextItem) { | 291 | for (; *ip; ip = &(*ip)->nextItem) { |
292 | if (*ip == this) { | 292 | if (*ip == this) { |
293 | *ip = nextItem; | 293 | *ip = nextItem; |
294 | break; | 294 | break; |
295 | } | 295 | } |
296 | } | 296 | } |
297 | } | 297 | } |
298 | } | 298 | } |
299 | 299 | ||
300 | void ConfigLineEdit::show(ConfigItem* i) | 300 | void ConfigLineEdit::show(ConfigItem* i) |
301 | { | 301 | { |
302 | item = i; | 302 | item = i; |
303 | if (sym_get_string_value(item->menu->sym)) | 303 | if (sym_get_string_value(item->menu->sym)) |
304 | setText(sym_get_string_value(item->menu->sym)); | 304 | setText(sym_get_string_value(item->menu->sym)); |
305 | else | 305 | else |
306 | setText(0); | 306 | setText(0); |
307 | Parent::show(); | 307 | Parent::show(); |
308 | setFocus(); | 308 | setFocus(); |
309 | } | 309 | } |
310 | 310 | ||
311 | void ConfigLineEdit::keyPressEvent(QKeyEvent* e) | 311 | void ConfigLineEdit::keyPressEvent(QKeyEvent* e) |
312 | { | 312 | { |
313 | switch (e->key()) { | 313 | switch (e->key()) { |
314 | case Key_Escape: | 314 | case Key_Escape: |
315 | break; | 315 | break; |
316 | case Key_Return: | 316 | case Key_Return: |
317 | case Key_Enter: | 317 | case Key_Enter: |
318 | sym_set_string_value(item->menu->sym, text().latin1()); | 318 | sym_set_string_value(item->menu->sym, text().latin1()); |
319 | parent()->updateList(item); | 319 | parent()->updateList(item); |
320 | break; | 320 | break; |
321 | default: | 321 | default: |
322 | Parent::keyPressEvent(e); | 322 | Parent::keyPressEvent(e); |
323 | return; | 323 | return; |
324 | } | 324 | } |
325 | e->accept(); | 325 | e->accept(); |
326 | parent()->list->setFocus(); | 326 | parent()->list->setFocus(); |
327 | hide(); | 327 | hide(); |
328 | } | 328 | } |
329 | 329 | ||
330 | ConfigList::ConfigList(ConfigView* p, ConfigMainWindow* cv) | 330 | ConfigList::ConfigList(ConfigView* p, ConfigMainWindow* cv) |
331 | : Parent(p), cview(cv), | 331 | : Parent(p), cview(cv), |
332 | updateAll(false), | 332 | updateAll(false), |
333 | symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no), | 333 | symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no), |
334 | choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no), | 334 | choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no), |
335 | menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), voidPix(xpm_void), | 335 | menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), voidPix(xpm_void), |
336 | showAll(false), showName(false), showRange(false), showData(false), | 336 | showAll(false), showName(false), showRange(false), showData(false), |
337 | rootEntry(0) | 337 | rootEntry(0) |
338 | { | 338 | { |
339 | int i; | 339 | int i; |
340 | 340 | ||
341 | setSorting(-1); | 341 | setSorting(-1); |
342 | setRootIsDecorated(TRUE); | 342 | setRootIsDecorated(TRUE); |
343 | disabledColorGroup = palette().active(); | 343 | disabledColorGroup = palette().active(); |
344 | disabledColorGroup.setColor(QColorGroup::Text, palette().disabled().text()); | 344 | disabledColorGroup.setColor(QColorGroup::Text, palette().disabled().text()); |
345 | inactivedColorGroup = palette().active(); | 345 | inactivedColorGroup = palette().active(); |
346 | inactivedColorGroup.setColor(QColorGroup::Highlight, palette().disabled().highlight()); | 346 | inactivedColorGroup.setColor(QColorGroup::Highlight, palette().disabled().highlight()); |
347 | 347 | ||
348 | connect(this, SIGNAL(selectionChanged(void)), | 348 | connect(this, SIGNAL(selectionChanged(void)), |
349 | SLOT(updateSelection(void))); | 349 | SLOT(updateSelection(void))); |
350 | 350 | ||
351 | for (i = 0; i < colNr; i++) | 351 | for (i = 0; i < colNr; i++) |
352 | colMap[i] = colRevMap[i] = -1; | 352 | colMap[i] = colRevMap[i] = -1; |
353 | addColumn(promptColIdx, "Option"); | 353 | addColumn(promptColIdx, "Option"); |
354 | 354 | ||
355 | reinit(); | 355 | reinit(); |
356 | } | 356 | } |
357 | 357 | ||
358 | void ConfigList::reinit(void) | 358 | void ConfigList::reinit(void) |
359 | { | 359 | { |
360 | removeColumn(dataColIdx); | 360 | removeColumn(dataColIdx); |
361 | removeColumn(yesColIdx); | 361 | removeColumn(yesColIdx); |
362 | removeColumn(modColIdx); | 362 | removeColumn(modColIdx); |
363 | removeColumn(noColIdx); | 363 | removeColumn(noColIdx); |
364 | removeColumn(nameColIdx); | 364 | removeColumn(nameColIdx); |
365 | 365 | ||
366 | if (showName) | 366 | if (showName) |
367 | addColumn(nameColIdx, "Name"); | 367 | addColumn(nameColIdx, "Name"); |
368 | if (showRange) { | 368 | if (showRange) { |
369 | addColumn(noColIdx, "N"); | 369 | addColumn(noColIdx, "N"); |
370 | addColumn(modColIdx, "M"); | 370 | addColumn(modColIdx, "M"); |
371 | addColumn(yesColIdx, "Y"); | 371 | addColumn(yesColIdx, "Y"); |
372 | } | 372 | } |
373 | if (showData) | 373 | if (showData) |
374 | addColumn(dataColIdx, "Value"); | 374 | addColumn(dataColIdx, "Value"); |
375 | 375 | ||
376 | updateListAll(); | 376 | updateListAll(); |
377 | } | 377 | } |
378 | 378 | ||
379 | void ConfigList::updateSelection(void) | 379 | void ConfigList::updateSelection(void) |
380 | { | 380 | { |
381 | struct menu *menu; | 381 | struct menu *menu; |
382 | enum prop_type type; | 382 | enum prop_type type; |
383 | 383 | ||
384 | ConfigItem* item = (ConfigItem*)selectedItem(); | 384 | ConfigItem* item = (ConfigItem*)selectedItem(); |
385 | if (!item) | 385 | if (!item) |
386 | return; | 386 | return; |
387 | 387 | ||
388 | cview->setHelp(item); | 388 | cview->setHelp(item); |
389 | 389 | ||
390 | menu = item->menu; | 390 | menu = item->menu; |
391 | if (!menu) | 391 | if (!menu) |
392 | return; | 392 | return; |
393 | type = menu->prompt ? menu->prompt->type : P_UNKNOWN; | 393 | type = menu->prompt ? menu->prompt->type : P_UNKNOWN; |
394 | if (mode == menuMode && type == P_MENU) | 394 | if (mode == menuMode && type == P_MENU) |
395 | emit menuSelected(menu); | 395 | emit menuSelected(menu); |
396 | } | 396 | } |
397 | 397 | ||
398 | void ConfigList::updateList(ConfigItem* item) | 398 | void ConfigList::updateList(ConfigItem* item) |
399 | { | 399 | { |
400 | ConfigItem* last = 0; | 400 | ConfigItem* last = 0; |
401 | 401 | ||
402 | if (!rootEntry) | 402 | if (!rootEntry) |
403 | goto update; | 403 | goto update; |
404 | 404 | ||
405 | if (rootEntry != &rootmenu && (mode == singleMode || | 405 | if (rootEntry != &rootmenu && (mode == singleMode || |
406 | (mode == symbolMode && rootEntry->parent != &rootmenu))) { | 406 | (mode == symbolMode && rootEntry->parent != &rootmenu))) { |
407 | item = firstChild(); | 407 | item = firstChild(); |
408 | if (!item) | 408 | if (!item) |
409 | item = new ConfigItem(this, 0, true); | 409 | item = new ConfigItem(this, 0, true); |
410 | last = item; | 410 | last = item; |
411 | } | 411 | } |
412 | if (mode == singleMode && rootEntry->sym && rootEntry->prompt) { | 412 | if (mode == singleMode && rootEntry->sym && rootEntry->prompt) { |
413 | item = last ? last->nextSibling() : firstChild(); | 413 | item = last ? last->nextSibling() : firstChild(); |
414 | if (!item) | 414 | if (!item) |
415 | item = new ConfigItem(this, last, rootEntry, true); | 415 | item = new ConfigItem(this, last, rootEntry, true); |
416 | 416 | ||
417 | updateMenuList(item, rootEntry); | 417 | updateMenuList(item, rootEntry); |
418 | triggerUpdate(); | 418 | triggerUpdate(); |
419 | return; | 419 | return; |
420 | } | 420 | } |
421 | update: | 421 | update: |
422 | updateMenuList(this, rootEntry); | 422 | updateMenuList(this, rootEntry); |
423 | triggerUpdate(); | 423 | triggerUpdate(); |
424 | } | 424 | } |
425 | 425 | ||
426 | void ConfigList::setAllOpen(bool open) | 426 | void ConfigList::setAllOpen(bool open) |
427 | { | 427 | { |
428 | QListViewItemIterator it(this); | 428 | QListViewItemIterator it(this); |
429 | 429 | ||
430 | for (; it.current(); it++) | 430 | for (; it.current(); it++) |
431 | it.current()->setOpen(open); | 431 | it.current()->setOpen(open); |
432 | } | 432 | } |
433 | 433 | ||
434 | void ConfigList::setValue(ConfigItem* item, tristate val) | 434 | void ConfigList::setValue(ConfigItem* item, tristate val) |
435 | { | 435 | { |
436 | struct symbol* sym; | 436 | struct symbol* sym; |
437 | int type; | 437 | int type; |
438 | tristate oldval; | 438 | tristate oldval; |
439 | 439 | ||
440 | sym = item->menu ? item->menu->sym : 0; | 440 | sym = item->menu ? item->menu->sym : 0; |
441 | if (!sym) | 441 | if (!sym) |
442 | return; | 442 | return; |
443 | 443 | ||
444 | type = sym_get_type(sym); | 444 | type = sym_get_type(sym); |
445 | switch (type) { | 445 | switch (type) { |
446 | case S_BOOLEAN: | 446 | case S_BOOLEAN: |
447 | case S_TRISTATE: | 447 | case S_TRISTATE: |
448 | oldval = sym_get_tristate_value(sym); | 448 | oldval = sym_get_tristate_value(sym); |
449 | 449 | ||
450 | if (!sym_set_tristate_value(sym, val)) | 450 | if (!sym_set_tristate_value(sym, val)) |
451 | return; | 451 | return; |
452 | if (oldval == no && item->menu->list) | 452 | if (oldval == no && item->menu->list) |
453 | item->setOpen(TRUE); | 453 | item->setOpen(TRUE); |
454 | parent()->updateList(item); | 454 | parent()->updateList(item); |
455 | break; | 455 | break; |
456 | } | 456 | } |
457 | } | 457 | } |
458 | 458 | ||
459 | void ConfigList::changeValue(ConfigItem* item) | 459 | void ConfigList::changeValue(ConfigItem* item) |
460 | { | 460 | { |
461 | struct symbol* sym; | 461 | struct symbol* sym; |
462 | struct menu* menu; | 462 | struct menu* menu; |
463 | int type, oldexpr, newexpr; | 463 | int type, oldexpr, newexpr; |
464 | 464 | ||
465 | menu = item->menu; | 465 | menu = item->menu; |
466 | if (!menu) | 466 | if (!menu) |
467 | return; | 467 | return; |
468 | sym = menu->sym; | 468 | sym = menu->sym; |
469 | if (!sym) { | 469 | if (!sym) { |
470 | if (item->menu->list) | 470 | if (item->menu->list) |
471 | item->setOpen(!item->isOpen()); | 471 | item->setOpen(!item->isOpen()); |
472 | return; | 472 | return; |
473 | } | 473 | } |
474 | 474 | ||
475 | type = sym_get_type(sym); | 475 | type = sym_get_type(sym); |
476 | switch (type) { | 476 | switch (type) { |
477 | case S_BOOLEAN: | 477 | case S_BOOLEAN: |
478 | case S_TRISTATE: | 478 | case S_TRISTATE: |
479 | oldexpr = sym_get_tristate_value(sym); | 479 | oldexpr = sym_get_tristate_value(sym); |
480 | newexpr = sym_toggle_tristate_value(sym); | 480 | newexpr = sym_toggle_tristate_value(sym); |
481 | if (item->menu->list) { | 481 | if (item->menu->list) { |
482 | if (oldexpr == newexpr) | 482 | if (oldexpr == newexpr) |
483 | item->setOpen(!item->isOpen()); | 483 | item->setOpen(!item->isOpen()); |
484 | else if (oldexpr == no) | 484 | else if (oldexpr == no) |
485 | item->setOpen(TRUE); | 485 | item->setOpen(TRUE); |
486 | } | 486 | } |
487 | if (oldexpr != newexpr) | 487 | if (oldexpr != newexpr) |
488 | parent()->updateList(item); | 488 | parent()->updateList(item); |
489 | break; | 489 | break; |
490 | case S_INT: | 490 | case S_INT: |
491 | case S_HEX: | 491 | case S_HEX: |
492 | case S_STRING: | 492 | case S_STRING: |
493 | #if QT_VERSION >= 300 | 493 | #if QT_VERSION >= 0x030000 |
494 | if (colMap[dataColIdx] >= 0) | 494 | if (colMap[dataColIdx] >= 0) |
495 | item->startRename(colMap[dataColIdx]); | 495 | item->startRename(colMap[dataColIdx]); |
496 | else | 496 | else |
497 | #endif | 497 | #endif |
498 | parent()->lineEdit->show(item); | 498 | parent()->lineEdit->show(item); |
499 | break; | 499 | break; |
500 | } | 500 | } |
501 | } | 501 | } |
502 | 502 | ||
503 | void ConfigList::setRootMenu(struct menu *menu) | 503 | void ConfigList::setRootMenu(struct menu *menu) |
504 | { | 504 | { |
505 | enum prop_type type; | 505 | enum prop_type type; |
506 | 506 | ||
507 | if (rootEntry == menu) | 507 | if (rootEntry == menu) |
508 | return; | 508 | return; |
509 | type = menu && menu->prompt ? menu->prompt->type : P_UNKNOWN; | 509 | type = menu && menu->prompt ? menu->prompt->type : P_UNKNOWN; |
510 | if (type != P_MENU) | 510 | if (type != P_MENU) |
511 | return; | 511 | return; |
512 | updateMenuList(this, 0); | 512 | updateMenuList(this, 0); |
513 | rootEntry = menu; | 513 | rootEntry = menu; |
514 | updateListAll(); | 514 | updateListAll(); |
515 | setSelected(currentItem(), hasFocus()); | 515 | setSelected(currentItem(), hasFocus()); |
516 | } | 516 | } |
517 | 517 | ||
518 | void ConfigList::setParentMenu(void) | 518 | void ConfigList::setParentMenu(void) |
519 | { | 519 | { |
520 | ConfigItem* item; | 520 | ConfigItem* item; |
521 | struct menu *oldroot; | 521 | struct menu *oldroot; |
522 | 522 | ||
523 | oldroot = rootEntry; | 523 | oldroot = rootEntry; |
524 | if (rootEntry == &rootmenu) | 524 | if (rootEntry == &rootmenu) |
525 | return; | 525 | return; |
526 | setRootMenu(menu_get_parent_menu(rootEntry->parent)); | 526 | setRootMenu(menu_get_parent_menu(rootEntry->parent)); |
527 | 527 | ||
528 | QListViewItemIterator it(this); | 528 | QListViewItemIterator it(this); |
529 | for (; (item = (ConfigItem*)it.current()); it++) { | 529 | for (; (item = (ConfigItem*)it.current()); it++) { |
530 | if (item->menu == oldroot) { | 530 | if (item->menu == oldroot) { |
531 | setCurrentItem(item); | 531 | setCurrentItem(item); |
532 | ensureItemVisible(item); | 532 | ensureItemVisible(item); |
533 | break; | 533 | break; |
534 | } | 534 | } |
535 | } | 535 | } |
536 | } | 536 | } |
537 | 537 | ||
538 | void ConfigList::keyPressEvent(QKeyEvent* ev) | 538 | void ConfigList::keyPressEvent(QKeyEvent* ev) |
539 | { | 539 | { |
540 | QListViewItem* i = currentItem(); | 540 | QListViewItem* i = currentItem(); |
541 | ConfigItem* item; | 541 | ConfigItem* item; |
542 | struct menu *menu; | 542 | struct menu *menu; |
543 | enum prop_type type; | 543 | enum prop_type type; |
544 | 544 | ||
545 | if (ev->key() == Key_Escape && mode != fullMode) { | 545 | if (ev->key() == Key_Escape && mode != fullMode) { |
546 | emit parentSelected(); | 546 | emit parentSelected(); |
547 | ev->accept(); | 547 | ev->accept(); |
548 | return; | 548 | return; |
549 | } | 549 | } |
550 | 550 | ||
551 | if (!i) { | 551 | if (!i) { |
552 | Parent::keyPressEvent(ev); | 552 | Parent::keyPressEvent(ev); |
553 | return; | 553 | return; |
554 | } | 554 | } |
555 | item = (ConfigItem*)i; | 555 | item = (ConfigItem*)i; |
556 | 556 | ||
557 | switch (ev->key()) { | 557 | switch (ev->key()) { |
558 | case Key_Return: | 558 | case Key_Return: |
559 | case Key_Enter: | 559 | case Key_Enter: |
560 | if (item->goParent) { | 560 | if (item->goParent) { |
561 | emit parentSelected(); | 561 | emit parentSelected(); |
562 | break; | 562 | break; |
563 | } | 563 | } |
564 | menu = item->menu; | 564 | menu = item->menu; |
565 | if (!menu) | 565 | if (!menu) |
566 | break; | 566 | break; |
567 | type = menu->prompt ? menu->prompt->type : P_UNKNOWN; | 567 | type = menu->prompt ? menu->prompt->type : P_UNKNOWN; |
568 | if (type == P_MENU && rootEntry != menu && | 568 | if (type == P_MENU && rootEntry != menu && |
569 | mode != fullMode && mode != menuMode) { | 569 | mode != fullMode && mode != menuMode) { |
570 | emit menuSelected(menu); | 570 | emit menuSelected(menu); |
571 | break; | 571 | break; |
572 | } | 572 | } |
573 | case Key_Space: | 573 | case Key_Space: |
574 | changeValue(item); | 574 | changeValue(item); |
575 | break; | 575 | break; |
576 | case Key_N: | 576 | case Key_N: |
577 | setValue(item, no); | 577 | setValue(item, no); |
578 | break; | 578 | break; |
579 | case Key_M: | 579 | case Key_M: |
580 | setValue(item, mod); | 580 | setValue(item, mod); |
581 | break; | 581 | break; |
582 | case Key_Y: | 582 | case Key_Y: |
583 | setValue(item, yes); | 583 | setValue(item, yes); |
584 | break; | 584 | break; |
585 | default: | 585 | default: |
586 | Parent::keyPressEvent(ev); | 586 | Parent::keyPressEvent(ev); |
587 | return; | 587 | return; |
588 | } | 588 | } |
589 | ev->accept(); | 589 | ev->accept(); |
590 | } | 590 | } |
591 | 591 | ||
592 | void ConfigList::contentsMousePressEvent(QMouseEvent* e) | 592 | void ConfigList::contentsMousePressEvent(QMouseEvent* e) |
593 | { | 593 | { |
594 | //QPoint p(contentsToViewport(e->pos())); | 594 | //QPoint p(contentsToViewport(e->pos())); |
595 | //printf("contentsMousePressEvent: %d,%d\n", p.x(), p.y()); | 595 | //printf("contentsMousePressEvent: %d,%d\n", p.x(), p.y()); |
596 | Parent::contentsMousePressEvent(e); | 596 | Parent::contentsMousePressEvent(e); |
597 | } | 597 | } |
598 | 598 | ||
599 | void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e) | 599 | void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e) |
600 | { | 600 | { |
601 | QPoint p(contentsToViewport(e->pos())); | 601 | QPoint p(contentsToViewport(e->pos())); |
602 | ConfigItem* item = (ConfigItem*)itemAt(p); | 602 | ConfigItem* item = (ConfigItem*)itemAt(p); |
603 | struct menu *menu; | 603 | struct menu *menu; |
604 | enum prop_type ptype; | 604 | enum prop_type ptype; |
605 | const QPixmap* pm; | 605 | const QPixmap* pm; |
606 | int idx, x; | 606 | int idx, x; |
607 | 607 | ||
608 | if (!item) | 608 | if (!item) |
609 | goto skip; | 609 | goto skip; |
610 | 610 | ||
611 | menu = item->menu; | 611 | menu = item->menu; |
612 | x = header()->offset() + p.x(); | 612 | x = header()->offset() + p.x(); |
613 | idx = colRevMap[header()->sectionAt(x)]; | 613 | idx = colRevMap[header()->sectionAt(x)]; |
614 | switch (idx) { | 614 | switch (idx) { |
615 | case promptColIdx: | 615 | case promptColIdx: |
616 | pm = item->pixmap(promptColIdx); | 616 | pm = item->pixmap(promptColIdx); |
617 | if (pm) { | 617 | if (pm) { |
618 | int off = header()->sectionPos(0) + itemMargin() + | 618 | int off = header()->sectionPos(0) + itemMargin() + |
619 | treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0)); | 619 | treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0)); |
620 | if (x >= off && x < off + pm->width()) { | 620 | if (x >= off && x < off + pm->width()) { |
621 | if (item->goParent) { | 621 | if (item->goParent) { |
622 | emit parentSelected(); | 622 | emit parentSelected(); |
623 | break; | 623 | break; |
624 | } else if (!menu) | 624 | } else if (!menu) |
625 | break; | 625 | break; |
626 | ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; | 626 | ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; |
627 | if (ptype == P_MENU && rootEntry != menu && | 627 | if (ptype == P_MENU && rootEntry != menu && |
628 | mode != fullMode && mode != menuMode) | 628 | mode != fullMode && mode != menuMode) |
629 | emit menuSelected(menu); | 629 | emit menuSelected(menu); |
630 | else | 630 | else |
631 | changeValue(item); | 631 | changeValue(item); |
632 | } | 632 | } |
633 | } | 633 | } |
634 | break; | 634 | break; |
635 | case noColIdx: | 635 | case noColIdx: |
636 | setValue(item, no); | 636 | setValue(item, no); |
637 | break; | 637 | break; |
638 | case modColIdx: | 638 | case modColIdx: |
639 | setValue(item, mod); | 639 | setValue(item, mod); |
640 | break; | 640 | break; |
641 | case yesColIdx: | 641 | case yesColIdx: |
642 | setValue(item, yes); | 642 | setValue(item, yes); |
643 | break; | 643 | break; |
644 | case dataColIdx: | 644 | case dataColIdx: |
645 | changeValue(item); | 645 | changeValue(item); |
646 | break; | 646 | break; |
647 | } | 647 | } |
648 | 648 | ||
649 | skip: | 649 | skip: |
650 | //printf("contentsMouseReleaseEvent: %d,%d\n", p.x(), p.y()); | 650 | //printf("contentsMouseReleaseEvent: %d,%d\n", p.x(), p.y()); |
651 | Parent::contentsMouseReleaseEvent(e); | 651 | Parent::contentsMouseReleaseEvent(e); |
652 | } | 652 | } |
653 | 653 | ||
654 | void ConfigList::contentsMouseMoveEvent(QMouseEvent* e) | 654 | void ConfigList::contentsMouseMoveEvent(QMouseEvent* e) |
655 | { | 655 | { |
656 | //QPoint p(contentsToViewport(e->pos())); | 656 | //QPoint p(contentsToViewport(e->pos())); |
657 | //printf("contentsMouseMoveEvent: %d,%d\n", p.x(), p.y()); | 657 | //printf("contentsMouseMoveEvent: %d,%d\n", p.x(), p.y()); |
658 | Parent::contentsMouseMoveEvent(e); | 658 | Parent::contentsMouseMoveEvent(e); |
659 | } | 659 | } |
660 | 660 | ||
661 | void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e) | 661 | void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e) |
662 | { | 662 | { |
663 | QPoint p(contentsToViewport(e->pos())); | 663 | QPoint p(contentsToViewport(e->pos())); |
664 | ConfigItem* item = (ConfigItem*)itemAt(p); | 664 | ConfigItem* item = (ConfigItem*)itemAt(p); |
665 | struct menu *menu; | 665 | struct menu *menu; |
666 | enum prop_type ptype; | 666 | enum prop_type ptype; |
667 | 667 | ||
668 | if (!item) | 668 | if (!item) |
669 | goto skip; | 669 | goto skip; |
670 | if (item->goParent) { | 670 | if (item->goParent) { |
671 | emit parentSelected(); | 671 | emit parentSelected(); |
672 | goto skip; | 672 | goto skip; |
673 | } | 673 | } |
674 | menu = item->menu; | 674 | menu = item->menu; |
675 | if (!menu) | 675 | if (!menu) |
676 | goto skip; | 676 | goto skip; |
677 | ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; | 677 | ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN; |
678 | if (ptype == P_MENU && (mode == singleMode || mode == symbolMode)) | 678 | if (ptype == P_MENU && (mode == singleMode || mode == symbolMode)) |
679 | emit menuSelected(menu); | 679 | emit menuSelected(menu); |
680 | else if (menu->sym) | 680 | else if (menu->sym) |
681 | changeValue(item); | 681 | changeValue(item); |
682 | 682 | ||
683 | skip: | 683 | skip: |
684 | //printf("contentsMouseDoubleClickEvent: %d,%d\n", p.x(), p.y()); | 684 | //printf("contentsMouseDoubleClickEvent: %d,%d\n", p.x(), p.y()); |
685 | Parent::contentsMouseDoubleClickEvent(e); | 685 | Parent::contentsMouseDoubleClickEvent(e); |
686 | } | 686 | } |
687 | 687 | ||
688 | void ConfigList::focusInEvent(QFocusEvent *e) | 688 | void ConfigList::focusInEvent(QFocusEvent *e) |
689 | { | 689 | { |
690 | Parent::focusInEvent(e); | 690 | Parent::focusInEvent(e); |
691 | 691 | ||
692 | QListViewItem* item = currentItem(); | 692 | QListViewItem* item = currentItem(); |
693 | if (!item) | 693 | if (!item) |
694 | return; | 694 | return; |
695 | 695 | ||
696 | setSelected(item, TRUE); | 696 | setSelected(item, TRUE); |
697 | emit gotFocus(); | 697 | emit gotFocus(); |
698 | } | 698 | } |
699 | 699 | ||
700 | ConfigView* ConfigView::viewList; | 700 | ConfigView* ConfigView::viewList; |
701 | 701 | ||
702 | ConfigView::ConfigView(QWidget* parent, ConfigMainWindow* cview) | 702 | ConfigView::ConfigView(QWidget* parent, ConfigMainWindow* cview) |
703 | : Parent(parent) | 703 | : Parent(parent) |
704 | { | 704 | { |
705 | list = new ConfigList(this, cview); | 705 | list = new ConfigList(this, cview); |
706 | lineEdit = new ConfigLineEdit(this); | 706 | lineEdit = new ConfigLineEdit(this); |
707 | lineEdit->hide(); | 707 | lineEdit->hide(); |
708 | 708 | ||
709 | this->nextView = viewList; | 709 | this->nextView = viewList; |
710 | viewList = this; | 710 | viewList = this; |
711 | } | 711 | } |
712 | 712 | ||
713 | ConfigView::~ConfigView(void) | 713 | ConfigView::~ConfigView(void) |
714 | { | 714 | { |
715 | ConfigView** vp; | 715 | ConfigView** vp; |
716 | 716 | ||
717 | for (vp = &viewList; *vp; vp = &(*vp)->nextView) { | 717 | for (vp = &viewList; *vp; vp = &(*vp)->nextView) { |
718 | if (*vp == this) { | 718 | if (*vp == this) { |
719 | *vp = nextView; | 719 | *vp = nextView; |
720 | break; | 720 | break; |
721 | } | 721 | } |
722 | } | 722 | } |
723 | } | 723 | } |
724 | 724 | ||
725 | void ConfigView::updateList(ConfigItem* item) | 725 | void ConfigView::updateList(ConfigItem* item) |
726 | { | 726 | { |
727 | ConfigView* v; | 727 | ConfigView* v; |
728 | 728 | ||
729 | for (v = viewList; v; v = v->nextView) | 729 | for (v = viewList; v; v = v->nextView) |
730 | v->list->updateList(item); | 730 | v->list->updateList(item); |
731 | } | 731 | } |
732 | 732 | ||
733 | void ConfigView::updateListAll(void) | 733 | void ConfigView::updateListAll(void) |
734 | { | 734 | { |
735 | ConfigView* v; | 735 | ConfigView* v; |
736 | 736 | ||
737 | for (v = viewList; v; v = v->nextView) | 737 | for (v = viewList; v; v = v->nextView) |
738 | v->list->updateListAll(); | 738 | v->list->updateListAll(); |
739 | } | 739 | } |
740 | 740 | ||
741 | /* | 741 | /* |
742 | * Construct the complete config widget | 742 | * Construct the complete config widget |
743 | */ | 743 | */ |
744 | ConfigMainWindow::ConfigMainWindow(void) | 744 | ConfigMainWindow::ConfigMainWindow(void) |
745 | { | 745 | { |
746 | QMenuBar* menu; | 746 | QMenuBar* menu; |
747 | QSplitter* split1; | 747 | QSplitter* split1; |
748 | QSplitter* split2; | 748 | QSplitter* split2; |
749 | bool ok; | 749 | bool ok; |
750 | int x, y, width, height; | 750 | int x, y, width, height; |
751 | 751 | ||
752 | QWidget *d = configApp->desktop(); | 752 | QWidget *d = configApp->desktop(); |
753 | 753 | ||
754 | #if QT_VERSION >= 300 | 754 | #if QT_VERSION >= 0x030000 |
755 | width = configSettings->readNumEntry("/kconfig/qconf/window width", d->width() - 64); | 755 | width = configSettings->readNumEntry("/kconfig/qconf/window width", d->width() - 64); |
756 | height = configSettings->readNumEntry("/kconfig/qconf/window height", d->height() - 64); | 756 | height = configSettings->readNumEntry("/kconfig/qconf/window height", d->height() - 64); |
757 | resize(width, height); | 757 | resize(width, height); |
758 | x = configSettings->readNumEntry("/kconfig/qconf/window x", 0, &ok); | 758 | x = configSettings->readNumEntry("/kconfig/qconf/window x", 0, &ok); |
759 | if (ok) | 759 | if (ok) |
760 | y = configSettings->readNumEntry("/kconfig/qconf/window y", 0, &ok); | 760 | y = configSettings->readNumEntry("/kconfig/qconf/window y", 0, &ok); |
761 | if (ok) | 761 | if (ok) |
762 | move(x, y); | 762 | move(x, y); |
763 | #else | 763 | #else |
764 | width = d->width() - 64; | 764 | width = d->width() - 64; |
765 | height = d->height() - 64; | 765 | height = d->height() - 64; |
766 | resize(width, height); | 766 | resize(width, height); |
767 | #endif | 767 | #endif |
768 | 768 | ||
769 | showDebug = false; | 769 | showDebug = false; |
770 | 770 | ||
771 | split1 = new QSplitter(this); | 771 | split1 = new QSplitter(this); |
772 | split1->setOrientation(QSplitter::Horizontal); | 772 | split1->setOrientation(QSplitter::Horizontal); |
773 | setCentralWidget(split1); | 773 | setCentralWidget(split1); |
774 | 774 | ||
775 | menuView = new ConfigView(split1, this); | 775 | menuView = new ConfigView(split1, this); |
776 | menuList = menuView->list; | 776 | menuList = menuView->list; |
777 | 777 | ||
778 | split2 = new QSplitter(split1); | 778 | split2 = new QSplitter(split1); |
779 | split2->setOrientation(QSplitter::Vertical); | 779 | split2->setOrientation(QSplitter::Vertical); |
780 | 780 | ||
781 | // create config tree | 781 | // create config tree |
782 | configView = new ConfigView(split2, this); | 782 | configView = new ConfigView(split2, this); |
783 | configList = configView->list; | 783 | configList = configView->list; |
784 | 784 | ||
785 | helpText = new QTextView(split2); | 785 | helpText = new QTextView(split2); |
786 | helpText->setTextFormat(Qt::RichText); | 786 | helpText->setTextFormat(Qt::RichText); |
787 | 787 | ||
788 | setTabOrder(configList, helpText); | 788 | setTabOrder(configList, helpText); |
789 | configList->setFocus(); | 789 | configList->setFocus(); |
790 | 790 | ||
791 | menu = menuBar(); | 791 | menu = menuBar(); |
792 | toolBar = new QToolBar("Tools", this); | 792 | toolBar = new QToolBar("Tools", this); |
793 | 793 | ||
794 | backAction = new QAction("Back", QPixmap(xpm_back), "Back", 0, this); | 794 | backAction = new QAction("Back", QPixmap(xpm_back), "Back", 0, this); |
795 | connect(backAction, SIGNAL(activated()), SLOT(goBack())); | 795 | connect(backAction, SIGNAL(activated()), SLOT(goBack())); |
796 | backAction->setEnabled(FALSE); | 796 | backAction->setEnabled(FALSE); |
797 | QAction *quitAction = new QAction("Quit", "&Quit", CTRL+Key_Q, this); | 797 | QAction *quitAction = new QAction("Quit", "&Quit", CTRL+Key_Q, this); |
798 | connect(quitAction, SIGNAL(activated()), SLOT(close())); | 798 | connect(quitAction, SIGNAL(activated()), SLOT(close())); |
799 | QAction *loadAction = new QAction("Load", QPixmap(xpm_load), "&Load", CTRL+Key_L, this); | 799 | QAction *loadAction = new QAction("Load", QPixmap(xpm_load), "&Load", CTRL+Key_L, this); |
800 | connect(loadAction, SIGNAL(activated()), SLOT(loadConfig())); | 800 | connect(loadAction, SIGNAL(activated()), SLOT(loadConfig())); |
801 | QAction *saveAction = new QAction("Save", QPixmap(xpm_save), "&Save", CTRL+Key_S, this); | 801 | QAction *saveAction = new QAction("Save", QPixmap(xpm_save), "&Save", CTRL+Key_S, this); |
802 | connect(saveAction, SIGNAL(activated()), SLOT(saveConfig())); | 802 | connect(saveAction, SIGNAL(activated()), SLOT(saveConfig())); |
803 | QAction *saveAsAction = new QAction("Save As...", "Save &As...", 0, this); | 803 | QAction *saveAsAction = new QAction("Save As...", "Save &As...", 0, this); |
804 | connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs())); | 804 | connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs())); |
805 | QAction *singleViewAction = new QAction("Single View", QPixmap(xpm_single_view), "Split View", 0, this); | 805 | QAction *singleViewAction = new QAction("Single View", QPixmap(xpm_single_view), "Split View", 0, this); |
806 | connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView())); | 806 | connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView())); |
807 | QAction *splitViewAction = new QAction("Split View", QPixmap(xpm_split_view), "Split View", 0, this); | 807 | QAction *splitViewAction = new QAction("Split View", QPixmap(xpm_split_view), "Split View", 0, this); |
808 | connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView())); | 808 | connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView())); |
809 | QAction *fullViewAction = new QAction("Full View", QPixmap(xpm_tree_view), "Full View", 0, this); | 809 | QAction *fullViewAction = new QAction("Full View", QPixmap(xpm_tree_view), "Full View", 0, this); |
810 | connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView())); | 810 | connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView())); |
811 | 811 | ||
812 | QAction *showNameAction = new QAction(NULL, "Show Name", 0, this); | 812 | QAction *showNameAction = new QAction(NULL, "Show Name", 0, this); |
813 | showNameAction->setToggleAction(TRUE); | 813 | showNameAction->setToggleAction(TRUE); |
814 | showNameAction->setOn(configList->showName); | 814 | showNameAction->setOn(configList->showName); |
815 | connect(showNameAction, SIGNAL(toggled(bool)), SLOT(setShowName(bool))); | 815 | connect(showNameAction, SIGNAL(toggled(bool)), SLOT(setShowName(bool))); |
816 | QAction *showRangeAction = new QAction(NULL, "Show Range", 0, this); | 816 | QAction *showRangeAction = new QAction(NULL, "Show Range", 0, this); |
817 | showRangeAction->setToggleAction(TRUE); | 817 | showRangeAction->setToggleAction(TRUE); |
818 | showRangeAction->setOn(configList->showRange); | 818 | showRangeAction->setOn(configList->showRange); |
819 | connect(showRangeAction, SIGNAL(toggled(bool)), SLOT(setShowRange(bool))); | 819 | connect(showRangeAction, SIGNAL(toggled(bool)), SLOT(setShowRange(bool))); |
820 | QAction *showDataAction = new QAction(NULL, "Show Data", 0, this); | 820 | QAction *showDataAction = new QAction(NULL, "Show Data", 0, this); |
821 | showDataAction->setToggleAction(TRUE); | 821 | showDataAction->setToggleAction(TRUE); |
822 | showDataAction->setOn(configList->showData); | 822 | showDataAction->setOn(configList->showData); |
823 | connect(showDataAction, SIGNAL(toggled(bool)), SLOT(setShowData(bool))); | 823 | connect(showDataAction, SIGNAL(toggled(bool)), SLOT(setShowData(bool))); |
824 | QAction *showAllAction = new QAction(NULL, "Show All Options", 0, this); | 824 | QAction *showAllAction = new QAction(NULL, "Show All Options", 0, this); |
825 | showAllAction->setToggleAction(TRUE); | 825 | showAllAction->setToggleAction(TRUE); |
826 | showAllAction->setOn(configList->showAll); | 826 | showAllAction->setOn(configList->showAll); |
827 | connect(showAllAction, SIGNAL(toggled(bool)), SLOT(setShowAll(bool))); | 827 | connect(showAllAction, SIGNAL(toggled(bool)), SLOT(setShowAll(bool))); |
828 | QAction *showDebugAction = new QAction(NULL, "Show Debug Info", 0, this); | 828 | QAction *showDebugAction = new QAction(NULL, "Show Debug Info", 0, this); |
829 | showDebugAction->setToggleAction(TRUE); | 829 | showDebugAction->setToggleAction(TRUE); |
830 | showDebugAction->setOn(showDebug); | 830 | showDebugAction->setOn(showDebug); |
831 | connect(showDebugAction, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool))); | 831 | connect(showDebugAction, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool))); |
832 | 832 | ||
833 | QAction *showIntroAction = new QAction(NULL, "Introduction", 0, this); | 833 | QAction *showIntroAction = new QAction(NULL, "Introduction", 0, this); |
834 | connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro())); | 834 | connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro())); |
835 | QAction *showAboutAction = new QAction(NULL, "About", 0, this); | 835 | QAction *showAboutAction = new QAction(NULL, "About", 0, this); |
836 | connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout())); | 836 | connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout())); |
837 | 837 | ||
838 | // init tool bar | 838 | // init tool bar |
839 | backAction->addTo(toolBar); | 839 | backAction->addTo(toolBar); |
840 | toolBar->addSeparator(); | 840 | toolBar->addSeparator(); |
841 | loadAction->addTo(toolBar); | 841 | loadAction->addTo(toolBar); |
842 | saveAction->addTo(toolBar); | 842 | saveAction->addTo(toolBar); |
843 | toolBar->addSeparator(); | 843 | toolBar->addSeparator(); |
844 | singleViewAction->addTo(toolBar); | 844 | singleViewAction->addTo(toolBar); |
845 | splitViewAction->addTo(toolBar); | 845 | splitViewAction->addTo(toolBar); |
846 | fullViewAction->addTo(toolBar); | 846 | fullViewAction->addTo(toolBar); |
847 | 847 | ||
848 | // create config menu | 848 | // create config menu |
849 | QPopupMenu* config = new QPopupMenu(this); | 849 | QPopupMenu* config = new QPopupMenu(this); |
850 | menu->insertItem("&File", config); | 850 | menu->insertItem("&File", config); |
851 | loadAction->addTo(config); | 851 | loadAction->addTo(config); |
852 | saveAction->addTo(config); | 852 | saveAction->addTo(config); |
853 | saveAsAction->addTo(config); | 853 | saveAsAction->addTo(config); |
854 | config->insertSeparator(); | 854 | config->insertSeparator(); |
855 | quitAction->addTo(config); | 855 | quitAction->addTo(config); |
856 | 856 | ||
857 | // create options menu | 857 | // create options menu |
858 | QPopupMenu* optionMenu = new QPopupMenu(this); | 858 | QPopupMenu* optionMenu = new QPopupMenu(this); |
859 | menu->insertItem("&Option", optionMenu); | 859 | menu->insertItem("&Option", optionMenu); |
860 | showNameAction->addTo(optionMenu); | 860 | showNameAction->addTo(optionMenu); |
861 | showRangeAction->addTo(optionMenu); | 861 | showRangeAction->addTo(optionMenu); |
862 | showDataAction->addTo(optionMenu); | 862 | showDataAction->addTo(optionMenu); |
863 | optionMenu->insertSeparator(); | 863 | optionMenu->insertSeparator(); |
864 | showAllAction->addTo(optionMenu); | 864 | showAllAction->addTo(optionMenu); |
865 | showDebugAction->addTo(optionMenu); | 865 | showDebugAction->addTo(optionMenu); |
866 | 866 | ||
867 | // create help menu | 867 | // create help menu |
868 | QPopupMenu* helpMenu = new QPopupMenu(this); | 868 | QPopupMenu* helpMenu = new QPopupMenu(this); |
869 | menu->insertSeparator(); | 869 | menu->insertSeparator(); |
870 | menu->insertItem("&Help", helpMenu); | 870 | menu->insertItem("&Help", helpMenu); |
871 | showIntroAction->addTo(helpMenu); | 871 | showIntroAction->addTo(helpMenu); |
872 | showAboutAction->addTo(helpMenu); | 872 | showAboutAction->addTo(helpMenu); |
873 | 873 | ||
874 | connect(configList, SIGNAL(menuSelected(struct menu *)), | 874 | connect(configList, SIGNAL(menuSelected(struct menu *)), |
875 | SLOT(changeMenu(struct menu *))); | 875 | SLOT(changeMenu(struct menu *))); |
876 | connect(configList, SIGNAL(parentSelected()), | 876 | connect(configList, SIGNAL(parentSelected()), |
877 | SLOT(goBack())); | 877 | SLOT(goBack())); |
878 | connect(menuList, SIGNAL(menuSelected(struct menu *)), | 878 | connect(menuList, SIGNAL(menuSelected(struct menu *)), |
879 | SLOT(changeMenu(struct menu *))); | 879 | SLOT(changeMenu(struct menu *))); |
880 | 880 | ||
881 | connect(configList, SIGNAL(gotFocus(void)), | 881 | connect(configList, SIGNAL(gotFocus(void)), |
882 | SLOT(listFocusChanged(void))); | 882 | SLOT(listFocusChanged(void))); |
883 | connect(menuList, SIGNAL(gotFocus(void)), | 883 | connect(menuList, SIGNAL(gotFocus(void)), |
884 | SLOT(listFocusChanged(void))); | 884 | SLOT(listFocusChanged(void))); |
885 | 885 | ||
886 | showSplitView(); | 886 | showSplitView(); |
887 | } | 887 | } |
888 | 888 | ||
889 | static QString print_filter(const char *str) | 889 | static QString print_filter(const char *str) |
890 | { | 890 | { |
891 | QRegExp re("[<>&\"\\n]"); | 891 | QRegExp re("[<>&\"\\n]"); |
892 | QString res = str; | 892 | QString res = str; |
893 | for (int i = 0; (i = res.find(re, i)) >= 0;) { | 893 | for (int i = 0; (i = res.find(re, i)) >= 0;) { |
894 | switch (res[i].latin1()) { | 894 | switch (res[i].latin1()) { |
895 | case '<': | 895 | case '<': |
896 | res.replace(i, 1, "<"); | 896 | res.replace(i, 1, "<"); |
897 | i += 4; | 897 | i += 4; |
898 | break; | 898 | break; |
899 | case '>': | 899 | case '>': |
900 | res.replace(i, 1, ">"); | 900 | res.replace(i, 1, ">"); |
901 | i += 4; | 901 | i += 4; |
902 | break; | 902 | break; |
903 | case '&': | 903 | case '&': |
904 | res.replace(i, 1, "&"); | 904 | res.replace(i, 1, "&"); |
905 | i += 5; | 905 | i += 5; |
906 | break; | 906 | break; |
907 | case '"': | 907 | case '"': |
908 | res.replace(i, 1, """); | 908 | res.replace(i, 1, """); |
909 | i += 6; | 909 | i += 6; |
910 | break; | 910 | break; |
911 | case '\n': | 911 | case '\n': |
912 | res.replace(i, 1, "<br>"); | 912 | res.replace(i, 1, "<br>"); |
913 | i += 4; | 913 | i += 4; |
914 | break; | 914 | break; |
915 | } | 915 | } |
916 | } | 916 | } |
917 | return res; | 917 | return res; |
918 | } | 918 | } |
919 | 919 | ||
920 | static void expr_print_help(void *data, const char *str) | 920 | static void expr_print_help(void *data, const char *str) |
921 | { | 921 | { |
922 | ((QString*)data)->append(print_filter(str)); | 922 | ((QString*)data)->append(print_filter(str)); |
923 | } | 923 | } |
924 | 924 | ||
925 | /* | 925 | /* |
926 | * display a new help entry as soon as a new menu entry is selected | 926 | * display a new help entry as soon as a new menu entry is selected |
927 | */ | 927 | */ |
928 | void ConfigMainWindow::setHelp(QListViewItem* item) | 928 | void ConfigMainWindow::setHelp(QListViewItem* item) |
929 | { | 929 | { |
930 | struct symbol* sym; | 930 | struct symbol* sym; |
931 | struct menu* menu = 0; | 931 | struct menu* menu = 0; |
932 | 932 | ||
933 | configList->parent()->lineEdit->hide(); | 933 | configList->parent()->lineEdit->hide(); |
934 | if (item) | 934 | if (item) |
935 | menu = ((ConfigItem*)item)->menu; | 935 | menu = ((ConfigItem*)item)->menu; |
936 | if (!menu) { | 936 | if (!menu) { |
937 | helpText->setText(NULL); | 937 | helpText->setText(NULL); |
938 | return; | 938 | return; |
939 | } | 939 | } |
940 | 940 | ||
941 | QString head, debug, help; | 941 | QString head, debug, help; |
942 | menu = ((ConfigItem*)item)->menu; | 942 | menu = ((ConfigItem*)item)->menu; |
943 | sym = menu->sym; | 943 | sym = menu->sym; |
944 | if (sym) { | 944 | if (sym) { |
945 | if (menu->prompt) { | 945 | if (menu->prompt) { |
946 | head += "<big><b>"; | 946 | head += "<big><b>"; |
947 | head += print_filter(menu->prompt->text); | 947 | head += print_filter(menu->prompt->text); |
948 | head += "</b></big>"; | 948 | head += "</b></big>"; |
949 | if (sym->name) { | 949 | if (sym->name) { |
950 | head += " ("; | 950 | head += " ("; |
951 | head += print_filter(sym->name); | 951 | head += print_filter(sym->name); |
952 | head += ")"; | 952 | head += ")"; |
953 | } | 953 | } |
954 | } else if (sym->name) { | 954 | } else if (sym->name) { |
955 | head += "<big><b>"; | 955 | head += "<big><b>"; |
956 | head += print_filter(sym->name); | 956 | head += print_filter(sym->name); |
957 | head += "</b></big>"; | 957 | head += "</b></big>"; |
958 | } | 958 | } |
959 | head += "<br><br>"; | 959 | head += "<br><br>"; |
960 | 960 | ||
961 | if (showDebug) { | 961 | if (showDebug) { |
962 | debug += "type: "; | 962 | debug += "type: "; |
963 | debug += print_filter(sym_type_name(sym->type)); | 963 | debug += print_filter(sym_type_name(sym->type)); |
964 | if (sym_is_choice(sym)) | 964 | if (sym_is_choice(sym)) |
965 | debug += " (choice)"; | 965 | debug += " (choice)"; |
966 | debug += "<br>"; | 966 | debug += "<br>"; |
967 | if (sym->rev_dep.expr) { | 967 | if (sym->rev_dep.expr) { |
968 | debug += "reverse dep: "; | 968 | debug += "reverse dep: "; |
969 | expr_print(sym->rev_dep.expr, expr_print_help, &debug, E_NONE); | 969 | expr_print(sym->rev_dep.expr, expr_print_help, &debug, E_NONE); |
970 | debug += "<br>"; | 970 | debug += "<br>"; |
971 | } | 971 | } |
972 | for (struct property *prop = sym->prop; prop; prop = prop->next) { | 972 | for (struct property *prop = sym->prop; prop; prop = prop->next) { |
973 | switch (prop->type) { | 973 | switch (prop->type) { |
974 | case P_PROMPT: | 974 | case P_PROMPT: |
975 | case P_MENU: | 975 | case P_MENU: |
976 | debug += "prompt: "; | 976 | debug += "prompt: "; |
977 | debug += print_filter(prop->text); | 977 | debug += print_filter(prop->text); |
978 | debug += "<br>"; | 978 | debug += "<br>"; |
979 | break; | 979 | break; |
980 | case P_DEFAULT: | 980 | case P_DEFAULT: |
981 | debug += "default: "; | 981 | debug += "default: "; |
982 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); | 982 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); |
983 | debug += "<br>"; | 983 | debug += "<br>"; |
984 | break; | 984 | break; |
985 | case P_CHOICE: | 985 | case P_CHOICE: |
986 | if (sym_is_choice(sym)) { | 986 | if (sym_is_choice(sym)) { |
987 | debug += "choice: "; | 987 | debug += "choice: "; |
988 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); | 988 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); |
989 | debug += "<br>"; | 989 | debug += "<br>"; |
990 | } | 990 | } |
991 | break; | 991 | break; |
992 | case P_SELECT: | 992 | case P_SELECT: |
993 | debug += "select: "; | 993 | debug += "select: "; |
994 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); | 994 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); |
995 | debug += "<br>"; | 995 | debug += "<br>"; |
996 | break; | 996 | break; |
997 | case P_RANGE: | 997 | case P_RANGE: |
998 | debug += "range: "; | 998 | debug += "range: "; |
999 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); | 999 | expr_print(prop->expr, expr_print_help, &debug, E_NONE); |
1000 | debug += "<br>"; | 1000 | debug += "<br>"; |
1001 | break; | 1001 | break; |
1002 | default: | 1002 | default: |
1003 | debug += "unknown property: "; | 1003 | debug += "unknown property: "; |
1004 | debug += prop_get_type_name(prop->type); | 1004 | debug += prop_get_type_name(prop->type); |
1005 | debug += "<br>"; | 1005 | debug += "<br>"; |
1006 | } | 1006 | } |
1007 | if (prop->visible.expr) { | 1007 | if (prop->visible.expr) { |
1008 | debug += " dep: "; | 1008 | debug += " dep: "; |
1009 | expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); | 1009 | expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE); |
1010 | debug += "<br>"; | 1010 | debug += "<br>"; |
1011 | } | 1011 | } |
1012 | } | 1012 | } |
1013 | debug += "<br>"; | 1013 | debug += "<br>"; |
1014 | } | 1014 | } |
1015 | 1015 | ||
1016 | help = print_filter(sym->help); | 1016 | help = print_filter(sym->help); |
1017 | } else if (menu->prompt) { | 1017 | } else if (menu->prompt) { |
1018 | head += "<big><b>"; | 1018 | head += "<big><b>"; |
1019 | head += print_filter(menu->prompt->text); | 1019 | head += print_filter(menu->prompt->text); |
1020 | head += "</b></big><br><br>"; | 1020 | head += "</b></big><br><br>"; |
1021 | if (showDebug) { | 1021 | if (showDebug) { |
1022 | if (menu->prompt->visible.expr) { | 1022 | if (menu->prompt->visible.expr) { |
1023 | debug += " dep: "; | 1023 | debug += " dep: "; |
1024 | expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE); | 1024 | expr_print(menu->prompt->visible.expr, expr_print_help, &debug, E_NONE); |
1025 | debug += "<br><br>"; | 1025 | debug += "<br><br>"; |
1026 | } | 1026 | } |
1027 | } | 1027 | } |
1028 | } | 1028 | } |
1029 | if (showDebug) | 1029 | if (showDebug) |
1030 | debug += QString().sprintf("defined at %s:%d<br><br>", menu->file->name, menu->lineno); | 1030 | debug += QString().sprintf("defined at %s:%d<br><br>", menu->file->name, menu->lineno); |
1031 | helpText->setText(head + debug + help); | 1031 | helpText->setText(head + debug + help); |
1032 | } | 1032 | } |
1033 | 1033 | ||
1034 | void ConfigMainWindow::loadConfig(void) | 1034 | void ConfigMainWindow::loadConfig(void) |
1035 | { | 1035 | { |
1036 | QString s = QFileDialog::getOpenFileName(".config", NULL, this); | 1036 | QString s = QFileDialog::getOpenFileName(".config", NULL, this); |
1037 | if (s.isNull()) | 1037 | if (s.isNull()) |
1038 | return; | 1038 | return; |
1039 | if (conf_read(s.latin1())) | 1039 | if (conf_read(s.latin1())) |
1040 | QMessageBox::information(this, "qconf", "Unable to load configuration!"); | 1040 | QMessageBox::information(this, "qconf", "Unable to load configuration!"); |
1041 | ConfigView::updateListAll(); | 1041 | ConfigView::updateListAll(); |
1042 | } | 1042 | } |
1043 | 1043 | ||
1044 | void ConfigMainWindow::saveConfig(void) | 1044 | void ConfigMainWindow::saveConfig(void) |
1045 | { | 1045 | { |
1046 | if (conf_write(NULL)) | 1046 | if (conf_write(NULL)) |
1047 | QMessageBox::information(this, "qconf", "Unable to save configuration!"); | 1047 | QMessageBox::information(this, "qconf", "Unable to save configuration!"); |
1048 | } | 1048 | } |
1049 | 1049 | ||
1050 | void ConfigMainWindow::saveConfigAs(void) | 1050 | void ConfigMainWindow::saveConfigAs(void) |
1051 | { | 1051 | { |
1052 | QString s = QFileDialog::getSaveFileName(".config", NULL, this); | 1052 | QString s = QFileDialog::getSaveFileName(".config", NULL, this); |
1053 | if (s.isNull()) | 1053 | if (s.isNull()) |
1054 | return; | 1054 | return; |
1055 | if (conf_write(s.latin1())) | 1055 | if (conf_write(s.latin1())) |
1056 | QMessageBox::information(this, "qconf", "Unable to save configuration!"); | 1056 | QMessageBox::information(this, "qconf", "Unable to save configuration!"); |
1057 | } | 1057 | } |
1058 | 1058 | ||
1059 | void ConfigMainWindow::changeMenu(struct menu *menu) | 1059 | void ConfigMainWindow::changeMenu(struct menu *menu) |
1060 | { | 1060 | { |
1061 | configList->setRootMenu(menu); | 1061 | configList->setRootMenu(menu); |
1062 | backAction->setEnabled(TRUE); | 1062 | backAction->setEnabled(TRUE); |
1063 | } | 1063 | } |
1064 | 1064 | ||
1065 | void ConfigMainWindow::listFocusChanged(void) | 1065 | void ConfigMainWindow::listFocusChanged(void) |
1066 | { | 1066 | { |
1067 | if (menuList->hasFocus()) { | 1067 | if (menuList->hasFocus()) { |
1068 | if (menuList->mode == menuMode) | 1068 | if (menuList->mode == menuMode) |
1069 | configList->clearSelection(); | 1069 | configList->clearSelection(); |
1070 | setHelp(menuList->selectedItem()); | 1070 | setHelp(menuList->selectedItem()); |
1071 | } else if (configList->hasFocus()) { | 1071 | } else if (configList->hasFocus()) { |
1072 | setHelp(configList->selectedItem()); | 1072 | setHelp(configList->selectedItem()); |
1073 | } | 1073 | } |
1074 | } | 1074 | } |
1075 | 1075 | ||
1076 | void ConfigMainWindow::goBack(void) | 1076 | void ConfigMainWindow::goBack(void) |
1077 | { | 1077 | { |
1078 | ConfigItem* item; | 1078 | ConfigItem* item; |
1079 | 1079 | ||
1080 | configList->setParentMenu(); | 1080 | configList->setParentMenu(); |
1081 | if (configList->rootEntry == &rootmenu) | 1081 | if (configList->rootEntry == &rootmenu) |
1082 | backAction->setEnabled(FALSE); | 1082 | backAction->setEnabled(FALSE); |
1083 | item = (ConfigItem*)menuList->selectedItem(); | 1083 | item = (ConfigItem*)menuList->selectedItem(); |
1084 | while (item) { | 1084 | while (item) { |
1085 | if (item->menu == configList->rootEntry) { | 1085 | if (item->menu == configList->rootEntry) { |
1086 | menuList->setSelected(item, TRUE); | 1086 | menuList->setSelected(item, TRUE); |
1087 | break; | 1087 | break; |
1088 | } | 1088 | } |
1089 | item = (ConfigItem*)item->parent(); | 1089 | item = (ConfigItem*)item->parent(); |
1090 | } | 1090 | } |
1091 | } | 1091 | } |
1092 | 1092 | ||
1093 | void ConfigMainWindow::showSingleView(void) | 1093 | void ConfigMainWindow::showSingleView(void) |
1094 | { | 1094 | { |
1095 | menuView->hide(); | 1095 | menuView->hide(); |
1096 | menuList->setRootMenu(0); | 1096 | menuList->setRootMenu(0); |
1097 | configList->mode = singleMode; | 1097 | configList->mode = singleMode; |
1098 | if (configList->rootEntry == &rootmenu) | 1098 | if (configList->rootEntry == &rootmenu) |
1099 | configList->updateListAll(); | 1099 | configList->updateListAll(); |
1100 | else | 1100 | else |
1101 | configList->setRootMenu(&rootmenu); | 1101 | configList->setRootMenu(&rootmenu); |
1102 | configList->setAllOpen(TRUE); | 1102 | configList->setAllOpen(TRUE); |
1103 | configList->setFocus(); | 1103 | configList->setFocus(); |
1104 | } | 1104 | } |
1105 | 1105 | ||
1106 | void ConfigMainWindow::showSplitView(void) | 1106 | void ConfigMainWindow::showSplitView(void) |
1107 | { | 1107 | { |
1108 | configList->mode = symbolMode; | 1108 | configList->mode = symbolMode; |
1109 | if (configList->rootEntry == &rootmenu) | 1109 | if (configList->rootEntry == &rootmenu) |
1110 | configList->updateListAll(); | 1110 | configList->updateListAll(); |
1111 | else | 1111 | else |
1112 | configList->setRootMenu(&rootmenu); | 1112 | configList->setRootMenu(&rootmenu); |
1113 | configList->setAllOpen(TRUE); | 1113 | configList->setAllOpen(TRUE); |
1114 | configApp->processEvents(); | 1114 | configApp->processEvents(); |
1115 | menuList->mode = menuMode; | 1115 | menuList->mode = menuMode; |
1116 | menuList->setRootMenu(&rootmenu); | 1116 | menuList->setRootMenu(&rootmenu); |
1117 | menuList->setAllOpen(TRUE); | 1117 | menuList->setAllOpen(TRUE); |
1118 | menuView->show(); | 1118 | menuView->show(); |
1119 | menuList->setFocus(); | 1119 | menuList->setFocus(); |
1120 | } | 1120 | } |
1121 | 1121 | ||
1122 | void ConfigMainWindow::showFullView(void) | 1122 | void ConfigMainWindow::showFullView(void) |
1123 | { | 1123 | { |
1124 | menuView->hide(); | 1124 | menuView->hide(); |
1125 | menuList->setRootMenu(0); | 1125 | menuList->setRootMenu(0); |
1126 | configList->mode = fullMode; | 1126 | configList->mode = fullMode; |
1127 | if (configList->rootEntry == &rootmenu) | 1127 | if (configList->rootEntry == &rootmenu) |
1128 | configList->updateListAll(); | 1128 | configList->updateListAll(); |
1129 | else | 1129 | else |
1130 | configList->setRootMenu(&rootmenu); | 1130 | configList->setRootMenu(&rootmenu); |
1131 | configList->setAllOpen(FALSE); | 1131 | configList->setAllOpen(FALSE); |
1132 | configList->setFocus(); | 1132 | configList->setFocus(); |
1133 | } | 1133 | } |
1134 | 1134 | ||
1135 | void ConfigMainWindow::setShowAll(bool b) | 1135 | void ConfigMainWindow::setShowAll(bool b) |
1136 | { | 1136 | { |
1137 | if (configList->showAll == b) | 1137 | if (configList->showAll == b) |
1138 | return; | 1138 | return; |
1139 | configList->showAll = b; | 1139 | configList->showAll = b; |
1140 | configList->updateListAll(); | 1140 | configList->updateListAll(); |
1141 | menuList->showAll = b; | 1141 | menuList->showAll = b; |
1142 | menuList->updateListAll(); | 1142 | menuList->updateListAll(); |
1143 | } | 1143 | } |
1144 | 1144 | ||
1145 | void ConfigMainWindow::setShowDebug(bool b) | 1145 | void ConfigMainWindow::setShowDebug(bool b) |
1146 | { | 1146 | { |
1147 | if (showDebug == b) | 1147 | if (showDebug == b) |
1148 | return; | 1148 | return; |
1149 | showDebug = b; | 1149 | showDebug = b; |
1150 | } | 1150 | } |
1151 | 1151 | ||
1152 | void ConfigMainWindow::setShowName(bool b) | 1152 | void ConfigMainWindow::setShowName(bool b) |
1153 | { | 1153 | { |
1154 | if (configList->showName == b) | 1154 | if (configList->showName == b) |
1155 | return; | 1155 | return; |
1156 | configList->showName = b; | 1156 | configList->showName = b; |
1157 | configList->reinit(); | 1157 | configList->reinit(); |
1158 | menuList->showName = b; | 1158 | menuList->showName = b; |
1159 | menuList->reinit(); | 1159 | menuList->reinit(); |
1160 | } | 1160 | } |
1161 | 1161 | ||
1162 | void ConfigMainWindow::setShowRange(bool b) | 1162 | void ConfigMainWindow::setShowRange(bool b) |
1163 | { | 1163 | { |
1164 | if (configList->showRange == b) | 1164 | if (configList->showRange == b) |
1165 | return; | 1165 | return; |
1166 | configList->showRange = b; | 1166 | configList->showRange = b; |
1167 | configList->reinit(); | 1167 | configList->reinit(); |
1168 | menuList->showRange = b; | 1168 | menuList->showRange = b; |
1169 | menuList->reinit(); | 1169 | menuList->reinit(); |
1170 | } | 1170 | } |
1171 | 1171 | ||
1172 | void ConfigMainWindow::setShowData(bool b) | 1172 | void ConfigMainWindow::setShowData(bool b) |
1173 | { | 1173 | { |
1174 | if (configList->showData == b) | 1174 | if (configList->showData == b) |
1175 | return; | 1175 | return; |
1176 | configList->showData = b; | 1176 | configList->showData = b; |
1177 | configList->reinit(); | 1177 | configList->reinit(); |
1178 | menuList->showData = b; | 1178 | menuList->showData = b; |
1179 | menuList->reinit(); | 1179 | menuList->reinit(); |
1180 | } | 1180 | } |
1181 | 1181 | ||
1182 | /* | 1182 | /* |
1183 | * ask for saving configuration before quitting | 1183 | * ask for saving configuration before quitting |
1184 | * TODO ask only when something changed | 1184 | * TODO ask only when something changed |
1185 | */ | 1185 | */ |
1186 | void ConfigMainWindow::closeEvent(QCloseEvent* e) | 1186 | void ConfigMainWindow::closeEvent(QCloseEvent* e) |
1187 | { | 1187 | { |
1188 | if (!sym_change_count) { | 1188 | if (!sym_change_count) { |
1189 | e->accept(); | 1189 | e->accept(); |
1190 | return; | 1190 | return; |
1191 | } | 1191 | } |
1192 | QMessageBox mb("qconf", "Save configuration?", QMessageBox::Warning, | 1192 | QMessageBox mb("qconf", "Save configuration?", QMessageBox::Warning, |
1193 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); | 1193 | QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape); |
1194 | mb.setButtonText(QMessageBox::Yes, "&Save Changes"); | 1194 | mb.setButtonText(QMessageBox::Yes, "&Save Changes"); |
1195 | mb.setButtonText(QMessageBox::No, "&Discard Changes"); | 1195 | mb.setButtonText(QMessageBox::No, "&Discard Changes"); |
1196 | mb.setButtonText(QMessageBox::Cancel, "Cancel Exit"); | 1196 | mb.setButtonText(QMessageBox::Cancel, "Cancel Exit"); |
1197 | switch (mb.exec()) { | 1197 | switch (mb.exec()) { |
1198 | case QMessageBox::Yes: | 1198 | case QMessageBox::Yes: |
1199 | conf_write(NULL); | 1199 | conf_write(NULL); |
1200 | case QMessageBox::No: | 1200 | case QMessageBox::No: |
1201 | e->accept(); | 1201 | e->accept(); |
1202 | break; | 1202 | break; |
1203 | case QMessageBox::Cancel: | 1203 | case QMessageBox::Cancel: |
1204 | e->ignore(); | 1204 | e->ignore(); |
1205 | break; | 1205 | break; |
1206 | } | 1206 | } |
1207 | } | 1207 | } |
1208 | 1208 | ||
1209 | void ConfigMainWindow::showIntro(void) | 1209 | void ConfigMainWindow::showIntro(void) |
1210 | { | 1210 | { |
1211 | static char str[] = "Welcome to the qconf graphical kernel configuration tool for Linux.\n\n" | 1211 | static char str[] = "Welcome to the qconf graphical kernel configuration tool for Linux.\n\n" |
1212 | "For each option, a blank box indicates the feature is disabled, a check\n" | 1212 | "For each option, a blank box indicates the feature is disabled, a check\n" |
1213 | "indicates it is enabled, and a dot indicates that it is to be compiled\n" | 1213 | "indicates it is enabled, and a dot indicates that it is to be compiled\n" |
1214 | "as a module. Clicking on the box will cycle through the three states.\n\n" | 1214 | "as a module. Clicking on the box will cycle through the three states.\n\n" |
1215 | "If you do not see an option (e.g., a device driver) that you believe\n" | 1215 | "If you do not see an option (e.g., a device driver) that you believe\n" |
1216 | "should be present, try turning on Show All Options under the Options menu.\n" | 1216 | "should be present, try turning on Show All Options under the Options menu.\n" |
1217 | "Although there is no cross reference yet to help you figure out what other\n" | 1217 | "Although there is no cross reference yet to help you figure out what other\n" |
1218 | "options must be enabled to support the option you are interested in, you can\n" | 1218 | "options must be enabled to support the option you are interested in, you can\n" |
1219 | "still view the help of a grayed-out option.\n\n" | 1219 | "still view the help of a grayed-out option.\n\n" |
1220 | "Toggling Show Debug Info under the Options menu will show the dependencies,\n" | 1220 | "Toggling Show Debug Info under the Options menu will show the dependencies,\n" |
1221 | "which you can then match by examining other options.\n\n"; | 1221 | "which you can then match by examining other options.\n\n"; |
1222 | 1222 | ||
1223 | QMessageBox::information(this, "qconf", str); | 1223 | QMessageBox::information(this, "qconf", str); |
1224 | } | 1224 | } |
1225 | 1225 | ||
1226 | void ConfigMainWindow::showAbout(void) | 1226 | void ConfigMainWindow::showAbout(void) |
1227 | { | 1227 | { |
1228 | static char str[] = "qconf is Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>.\n\n" | 1228 | static char str[] = "qconf is Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>.\n\n" |
1229 | "Bug reports and feature request can also be entered at http://bugzilla.kernel.org/\n"; | 1229 | "Bug reports and feature request can also be entered at http://bugzilla.kernel.org/\n"; |
1230 | 1230 | ||
1231 | QMessageBox::information(this, "qconf", str); | 1231 | QMessageBox::information(this, "qconf", str); |
1232 | } | 1232 | } |
1233 | 1233 | ||
1234 | void fixup_rootmenu(struct menu *menu) | 1234 | void fixup_rootmenu(struct menu *menu) |
1235 | { | 1235 | { |
1236 | struct menu *child; | 1236 | struct menu *child; |
1237 | static int menu_cnt = 0; | 1237 | static int menu_cnt = 0; |
1238 | 1238 | ||
1239 | menu->flags |= MENU_ROOT; | 1239 | menu->flags |= MENU_ROOT; |
1240 | for (child = menu->list; child; child = child->next) { | 1240 | for (child = menu->list; child; child = child->next) { |
1241 | if (child->prompt && child->prompt->type == P_MENU) { | 1241 | if (child->prompt && child->prompt->type == P_MENU) { |
1242 | menu_cnt++; | 1242 | menu_cnt++; |
1243 | fixup_rootmenu(child); | 1243 | fixup_rootmenu(child); |
1244 | menu_cnt--; | 1244 | menu_cnt--; |
1245 | } else if (!menu_cnt) | 1245 | } else if (!menu_cnt) |
1246 | fixup_rootmenu(child); | 1246 | fixup_rootmenu(child); |
1247 | } | 1247 | } |
1248 | } | 1248 | } |
1249 | 1249 | ||
1250 | static const char *progname; | 1250 | static const char *progname; |
1251 | 1251 | ||
1252 | static void usage(void) | 1252 | static void usage(void) |
1253 | { | 1253 | { |
1254 | printf("%s <config>\n", progname); | 1254 | printf("%s <config>\n", progname); |
1255 | exit(0); | 1255 | exit(0); |
1256 | } | 1256 | } |
1257 | 1257 | ||
1258 | int main(int ac, char** av) | 1258 | int main(int ac, char** av) |
1259 | { | 1259 | { |
1260 | ConfigMainWindow* v; | 1260 | ConfigMainWindow* v; |
1261 | const char *name; | 1261 | const char *name; |
1262 | 1262 | ||
1263 | #ifndef LKC_DIRECT_LINK | 1263 | #ifndef LKC_DIRECT_LINK |
1264 | kconfig_load(); | 1264 | kconfig_load(); |
1265 | #endif | 1265 | #endif |
1266 | 1266 | ||
1267 | progname = av[0]; | 1267 | progname = av[0]; |
1268 | configApp = new QApplication(ac, av); | 1268 | configApp = new QApplication(ac, av); |
1269 | #if QT_VERSION >= 300 | 1269 | #if QT_VERSION >= 0x030000 |
1270 | configSettings = new QSettings; | 1270 | configSettings = new QSettings; |
1271 | #endif | 1271 | #endif |
1272 | if (ac > 1 && av[1][0] == '-') { | 1272 | if (ac > 1 && av[1][0] == '-') { |
1273 | switch (av[1][1]) { | 1273 | switch (av[1][1]) { |
1274 | case 'h': | 1274 | case 'h': |
1275 | case '?': | 1275 | case '?': |
1276 | usage(); | 1276 | usage(); |
1277 | } | 1277 | } |
1278 | name = av[2]; | 1278 | name = av[2]; |
1279 | } else | 1279 | } else |
1280 | name = av[1]; | 1280 | name = av[1]; |
1281 | if (!name) | 1281 | if (!name) |
1282 | usage(); | 1282 | usage(); |
1283 | 1283 | ||
1284 | conf_parse(name); | 1284 | conf_parse(name); |
1285 | fixup_rootmenu(&rootmenu); | 1285 | fixup_rootmenu(&rootmenu); |
1286 | conf_read(NULL); | 1286 | conf_read(NULL); |
1287 | //zconfdump(stdout); | 1287 | //zconfdump(stdout); |
1288 | 1288 | ||
1289 | v = new ConfigMainWindow(); | 1289 | v = new ConfigMainWindow(); |
1290 | 1290 | ||
1291 | //zconfdump(stdout); | 1291 | //zconfdump(stdout); |
1292 | v->show(); | 1292 | v->show(); |
1293 | configApp->connect(configApp, SIGNAL(lastWindowClosed()), SLOT(quit())); | 1293 | configApp->connect(configApp, SIGNAL(lastWindowClosed()), SLOT(quit())); |
1294 | configApp->exec(); | 1294 | configApp->exec(); |
1295 | 1295 | ||
1296 | #if QT_VERSION >= 300 | 1296 | #if QT_VERSION >= 0x030000 |
1297 | configSettings->writeEntry("/kconfig/qconf/window x", v->pos().x()); | 1297 | configSettings->writeEntry("/kconfig/qconf/window x", v->pos().x()); |
1298 | configSettings->writeEntry("/kconfig/qconf/window y", v->pos().y()); | 1298 | configSettings->writeEntry("/kconfig/qconf/window y", v->pos().y()); |
1299 | configSettings->writeEntry("/kconfig/qconf/window width", v->size().width()); | 1299 | configSettings->writeEntry("/kconfig/qconf/window width", v->size().width()); |
1300 | configSettings->writeEntry("/kconfig/qconf/window height", v->size().height()); | 1300 | configSettings->writeEntry("/kconfig/qconf/window height", v->size().height()); |
1301 | delete configSettings; | 1301 | delete configSettings; |
1302 | #endif | 1302 | #endif |
1303 | return 0; | 1303 | return 0; |
1304 | } | 1304 | } |
diff --git a/scripts/kconfig/qconf.h b/scripts/kconfig/qconf.h index c548884..dee5254 100644 --- a/scripts/kconfig/qconf.h +++ b/scripts/kconfig/qconf.h | |||
@@ -1,238 +1,238 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> | 2 | * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org> |
3 | * Released under the terms of the GNU GPL v2.0. | 3 | * Released under the terms of the GNU GPL v2.0. |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <qlistview.h> | 6 | #include <qlistview.h> |
7 | 7 | ||
8 | class ConfigList; | 8 | class ConfigList; |
9 | class ConfigItem; | 9 | class ConfigItem; |
10 | class ConfigLineEdit; | 10 | class ConfigLineEdit; |
11 | class ConfigMainWindow; | 11 | class ConfigMainWindow; |
12 | 12 | ||
13 | class ConfigView : public QVBox { | 13 | class ConfigView : public QVBox { |
14 | Q_OBJECT | 14 | Q_OBJECT |
15 | typedef class QVBox Parent; | 15 | typedef class QVBox Parent; |
16 | public: | 16 | public: |
17 | ConfigView(QWidget* parent, ConfigMainWindow* cview); | 17 | ConfigView(QWidget* parent, ConfigMainWindow* cview); |
18 | ~ConfigView(void); | 18 | ~ConfigView(void); |
19 | static void updateList(ConfigItem* item); | 19 | static void updateList(ConfigItem* item); |
20 | static void updateListAll(void); | 20 | static void updateListAll(void); |
21 | 21 | ||
22 | public: | 22 | public: |
23 | ConfigList* list; | 23 | ConfigList* list; |
24 | ConfigLineEdit* lineEdit; | 24 | ConfigLineEdit* lineEdit; |
25 | 25 | ||
26 | static ConfigView* viewList; | 26 | static ConfigView* viewList; |
27 | ConfigView* nextView; | 27 | ConfigView* nextView; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | enum colIdx { | 30 | enum colIdx { |
31 | promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr | 31 | promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr |
32 | }; | 32 | }; |
33 | enum listMode { | 33 | enum listMode { |
34 | singleMode, menuMode, symbolMode, fullMode | 34 | singleMode, menuMode, symbolMode, fullMode |
35 | }; | 35 | }; |
36 | 36 | ||
37 | class ConfigList : public QListView { | 37 | class ConfigList : public QListView { |
38 | Q_OBJECT | 38 | Q_OBJECT |
39 | typedef class QListView Parent; | 39 | typedef class QListView Parent; |
40 | public: | 40 | public: |
41 | ConfigList(ConfigView* p, ConfigMainWindow* cview); | 41 | ConfigList(ConfigView* p, ConfigMainWindow* cview); |
42 | void reinit(void); | 42 | void reinit(void); |
43 | ConfigView* parent(void) const | 43 | ConfigView* parent(void) const |
44 | { | 44 | { |
45 | return (ConfigView*)Parent::parent(); | 45 | return (ConfigView*)Parent::parent(); |
46 | } | 46 | } |
47 | 47 | ||
48 | protected: | 48 | protected: |
49 | ConfigMainWindow* cview; | 49 | ConfigMainWindow* cview; |
50 | 50 | ||
51 | void keyPressEvent(QKeyEvent *e); | 51 | void keyPressEvent(QKeyEvent *e); |
52 | void contentsMousePressEvent(QMouseEvent *e); | 52 | void contentsMousePressEvent(QMouseEvent *e); |
53 | void contentsMouseReleaseEvent(QMouseEvent *e); | 53 | void contentsMouseReleaseEvent(QMouseEvent *e); |
54 | void contentsMouseMoveEvent(QMouseEvent *e); | 54 | void contentsMouseMoveEvent(QMouseEvent *e); |
55 | void contentsMouseDoubleClickEvent(QMouseEvent *e); | 55 | void contentsMouseDoubleClickEvent(QMouseEvent *e); |
56 | void focusInEvent(QFocusEvent *e); | 56 | void focusInEvent(QFocusEvent *e); |
57 | public slots: | 57 | public slots: |
58 | void setRootMenu(struct menu *menu); | 58 | void setRootMenu(struct menu *menu); |
59 | 59 | ||
60 | void updateList(ConfigItem *item); | 60 | void updateList(ConfigItem *item); |
61 | void setValue(ConfigItem* item, tristate val); | 61 | void setValue(ConfigItem* item, tristate val); |
62 | void changeValue(ConfigItem* item); | 62 | void changeValue(ConfigItem* item); |
63 | void updateSelection(void); | 63 | void updateSelection(void); |
64 | signals: | 64 | signals: |
65 | void menuSelected(struct menu *menu); | 65 | void menuSelected(struct menu *menu); |
66 | void parentSelected(void); | 66 | void parentSelected(void); |
67 | void gotFocus(void); | 67 | void gotFocus(void); |
68 | 68 | ||
69 | public: | 69 | public: |
70 | void updateListAll(void) | 70 | void updateListAll(void) |
71 | { | 71 | { |
72 | updateAll = true; | 72 | updateAll = true; |
73 | updateList(NULL); | 73 | updateList(NULL); |
74 | updateAll = false; | 74 | updateAll = false; |
75 | } | 75 | } |
76 | ConfigList* listView() | 76 | ConfigList* listView() |
77 | { | 77 | { |
78 | return this; | 78 | return this; |
79 | } | 79 | } |
80 | ConfigItem* firstChild() const | 80 | ConfigItem* firstChild() const |
81 | { | 81 | { |
82 | return (ConfigItem *)Parent::firstChild(); | 82 | return (ConfigItem *)Parent::firstChild(); |
83 | } | 83 | } |
84 | int mapIdx(colIdx idx) | 84 | int mapIdx(colIdx idx) |
85 | { | 85 | { |
86 | return colMap[idx]; | 86 | return colMap[idx]; |
87 | } | 87 | } |
88 | void addColumn(colIdx idx, const QString& label) | 88 | void addColumn(colIdx idx, const QString& label) |
89 | { | 89 | { |
90 | colMap[idx] = Parent::addColumn(label); | 90 | colMap[idx] = Parent::addColumn(label); |
91 | colRevMap[colMap[idx]] = idx; | 91 | colRevMap[colMap[idx]] = idx; |
92 | } | 92 | } |
93 | void removeColumn(colIdx idx) | 93 | void removeColumn(colIdx idx) |
94 | { | 94 | { |
95 | int col = colMap[idx]; | 95 | int col = colMap[idx]; |
96 | if (col >= 0) { | 96 | if (col >= 0) { |
97 | Parent::removeColumn(col); | 97 | Parent::removeColumn(col); |
98 | colRevMap[col] = colMap[idx] = -1; | 98 | colRevMap[col] = colMap[idx] = -1; |
99 | } | 99 | } |
100 | } | 100 | } |
101 | void setAllOpen(bool open); | 101 | void setAllOpen(bool open); |
102 | void setParentMenu(void); | 102 | void setParentMenu(void); |
103 | 103 | ||
104 | template <class P> | 104 | template <class P> |
105 | void ConfigList::updateMenuList(P*, struct menu*); | 105 | void ConfigList::updateMenuList(P*, struct menu*); |
106 | 106 | ||
107 | bool updateAll; | 107 | bool updateAll; |
108 | 108 | ||
109 | QPixmap symbolYesPix, symbolModPix, symbolNoPix; | 109 | QPixmap symbolYesPix, symbolModPix, symbolNoPix; |
110 | QPixmap choiceYesPix, choiceNoPix; | 110 | QPixmap choiceYesPix, choiceNoPix; |
111 | QPixmap menuPix, menuInvPix, menuBackPix, voidPix; | 111 | QPixmap menuPix, menuInvPix, menuBackPix, voidPix; |
112 | 112 | ||
113 | bool showAll, showName, showRange, showData; | 113 | bool showAll, showName, showRange, showData; |
114 | enum listMode mode; | 114 | enum listMode mode; |
115 | struct menu *rootEntry; | 115 | struct menu *rootEntry; |
116 | QColorGroup disabledColorGroup; | 116 | QColorGroup disabledColorGroup; |
117 | QColorGroup inactivedColorGroup; | 117 | QColorGroup inactivedColorGroup; |
118 | 118 | ||
119 | private: | 119 | private: |
120 | int colMap[colNr]; | 120 | int colMap[colNr]; |
121 | int colRevMap[colNr]; | 121 | int colRevMap[colNr]; |
122 | }; | 122 | }; |
123 | 123 | ||
124 | class ConfigItem : public QListViewItem { | 124 | class ConfigItem : public QListViewItem { |
125 | typedef class QListViewItem Parent; | 125 | typedef class QListViewItem Parent; |
126 | public: | 126 | public: |
127 | ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v) | 127 | ConfigItem(QListView *parent, ConfigItem *after, struct menu *m, bool v) |
128 | : Parent(parent, after), menu(m), visible(v), goParent(false) | 128 | : Parent(parent, after), menu(m), visible(v), goParent(false) |
129 | { | 129 | { |
130 | init(); | 130 | init(); |
131 | } | 131 | } |
132 | ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) | 132 | ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v) |
133 | : Parent(parent, after), menu(m), visible(v), goParent(false) | 133 | : Parent(parent, after), menu(m), visible(v), goParent(false) |
134 | { | 134 | { |
135 | init(); | 135 | init(); |
136 | } | 136 | } |
137 | ConfigItem(QListView *parent, ConfigItem *after, bool v) | 137 | ConfigItem(QListView *parent, ConfigItem *after, bool v) |
138 | : Parent(parent, after), menu(0), visible(v), goParent(true) | 138 | : Parent(parent, after), menu(0), visible(v), goParent(true) |
139 | { | 139 | { |
140 | init(); | 140 | init(); |
141 | } | 141 | } |
142 | ~ConfigItem(void); | 142 | ~ConfigItem(void); |
143 | void init(void); | 143 | void init(void); |
144 | #if QT_VERSION >= 300 | 144 | #if QT_VERSION >= 0x030000 |
145 | void okRename(int col); | 145 | void okRename(int col); |
146 | #endif | 146 | #endif |
147 | void updateMenu(void); | 147 | void updateMenu(void); |
148 | void testUpdateMenu(bool v); | 148 | void testUpdateMenu(bool v); |
149 | ConfigList* listView() const | 149 | ConfigList* listView() const |
150 | { | 150 | { |
151 | return (ConfigList*)Parent::listView(); | 151 | return (ConfigList*)Parent::listView(); |
152 | } | 152 | } |
153 | ConfigItem* firstChild() const | 153 | ConfigItem* firstChild() const |
154 | { | 154 | { |
155 | return (ConfigItem *)Parent::firstChild(); | 155 | return (ConfigItem *)Parent::firstChild(); |
156 | } | 156 | } |
157 | ConfigItem* nextSibling() const | 157 | ConfigItem* nextSibling() const |
158 | { | 158 | { |
159 | return (ConfigItem *)Parent::nextSibling(); | 159 | return (ConfigItem *)Parent::nextSibling(); |
160 | } | 160 | } |
161 | void setText(colIdx idx, const QString& text) | 161 | void setText(colIdx idx, const QString& text) |
162 | { | 162 | { |
163 | Parent::setText(listView()->mapIdx(idx), text); | 163 | Parent::setText(listView()->mapIdx(idx), text); |
164 | } | 164 | } |
165 | QString text(colIdx idx) const | 165 | QString text(colIdx idx) const |
166 | { | 166 | { |
167 | return Parent::text(listView()->mapIdx(idx)); | 167 | return Parent::text(listView()->mapIdx(idx)); |
168 | } | 168 | } |
169 | void setPixmap(colIdx idx, const QPixmap& pm) | 169 | void setPixmap(colIdx idx, const QPixmap& pm) |
170 | { | 170 | { |
171 | Parent::setPixmap(listView()->mapIdx(idx), pm); | 171 | Parent::setPixmap(listView()->mapIdx(idx), pm); |
172 | } | 172 | } |
173 | const QPixmap* pixmap(colIdx idx) const | 173 | const QPixmap* pixmap(colIdx idx) const |
174 | { | 174 | { |
175 | return Parent::pixmap(listView()->mapIdx(idx)); | 175 | return Parent::pixmap(listView()->mapIdx(idx)); |
176 | } | 176 | } |
177 | void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align); | 177 | void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align); |
178 | 178 | ||
179 | ConfigItem* nextItem; | 179 | ConfigItem* nextItem; |
180 | struct menu *menu; | 180 | struct menu *menu; |
181 | bool visible; | 181 | bool visible; |
182 | bool goParent; | 182 | bool goParent; |
183 | }; | 183 | }; |
184 | 184 | ||
185 | class ConfigLineEdit : public QLineEdit { | 185 | class ConfigLineEdit : public QLineEdit { |
186 | Q_OBJECT | 186 | Q_OBJECT |
187 | typedef class QLineEdit Parent; | 187 | typedef class QLineEdit Parent; |
188 | public: | 188 | public: |
189 | ConfigLineEdit(ConfigView* parent) | 189 | ConfigLineEdit(ConfigView* parent) |
190 | : Parent(parent) | 190 | : Parent(parent) |
191 | { } | 191 | { } |
192 | ConfigView* parent(void) const | 192 | ConfigView* parent(void) const |
193 | { | 193 | { |
194 | return (ConfigView*)Parent::parent(); | 194 | return (ConfigView*)Parent::parent(); |
195 | } | 195 | } |
196 | void show(ConfigItem *i); | 196 | void show(ConfigItem *i); |
197 | void keyPressEvent(QKeyEvent *e); | 197 | void keyPressEvent(QKeyEvent *e); |
198 | 198 | ||
199 | public: | 199 | public: |
200 | ConfigItem *item; | 200 | ConfigItem *item; |
201 | }; | 201 | }; |
202 | 202 | ||
203 | class ConfigMainWindow : public QMainWindow { | 203 | class ConfigMainWindow : public QMainWindow { |
204 | Q_OBJECT | 204 | Q_OBJECT |
205 | public: | 205 | public: |
206 | ConfigMainWindow(void); | 206 | ConfigMainWindow(void); |
207 | public slots: | 207 | public slots: |
208 | void setHelp(QListViewItem* item); | 208 | void setHelp(QListViewItem* item); |
209 | void changeMenu(struct menu *); | 209 | void changeMenu(struct menu *); |
210 | void listFocusChanged(void); | 210 | void listFocusChanged(void); |
211 | void goBack(void); | 211 | void goBack(void); |
212 | void loadConfig(void); | 212 | void loadConfig(void); |
213 | void saveConfig(void); | 213 | void saveConfig(void); |
214 | void saveConfigAs(void); | 214 | void saveConfigAs(void); |
215 | void showSingleView(void); | 215 | void showSingleView(void); |
216 | void showSplitView(void); | 216 | void showSplitView(void); |
217 | void showFullView(void); | 217 | void showFullView(void); |
218 | void setShowAll(bool); | 218 | void setShowAll(bool); |
219 | void setShowDebug(bool); | 219 | void setShowDebug(bool); |
220 | void setShowRange(bool); | 220 | void setShowRange(bool); |
221 | void setShowName(bool); | 221 | void setShowName(bool); |
222 | void setShowData(bool); | 222 | void setShowData(bool); |
223 | void showIntro(void); | 223 | void showIntro(void); |
224 | void showAbout(void); | 224 | void showAbout(void); |
225 | 225 | ||
226 | protected: | 226 | protected: |
227 | void closeEvent(QCloseEvent *e); | 227 | void closeEvent(QCloseEvent *e); |
228 | 228 | ||
229 | ConfigView *menuView; | 229 | ConfigView *menuView; |
230 | ConfigList *menuList; | 230 | ConfigList *menuList; |
231 | ConfigView *configView; | 231 | ConfigView *configView; |
232 | ConfigList *configList; | 232 | ConfigList *configList; |
233 | QTextView *helpText; | 233 | QTextView *helpText; |
234 | QToolBar *toolBar; | 234 | QToolBar *toolBar; |
235 | QAction *backAction; | 235 | QAction *backAction; |
236 | 236 | ||
237 | bool showDebug; | 237 | bool showDebug; |
238 | }; | 238 | }; |