author | erik <erik> | 2007-01-10 17:24:23 (UTC) |
---|---|---|
committer | erik <erik> | 2007-01-10 17:24:23 (UTC) |
commit | e7d3e1d0f3c75979c01ea6373ed3c80d0c986000 (patch) (unidiff) | |
tree | 34a6e8aa3de82f07c0531e59f375da216fbfb97a | |
parent | 51bd5e8d542372ad54898ce642fe9b82b8ba83f3 (diff) | |
download | opie-e7d3e1d0f3c75979c01ea6373ed3c80d0c986000.zip opie-e7d3e1d0f3c75979c01ea6373ed3c80d0c986000.tar.gz opie-e7d3e1d0f3c75979c01ea6373ed3c80d0c986000.tar.bz2 |
All of the files in this commit have an inheritance member function
mismatch correction. None are serious, but all would have been improperly
mislinked in the inheritance hierarchy if attempted to be used.
-rw-r--r-- | core/pim/datebook/holiday/national/nationalcfg.cpp | 2 | ||||
-rw-r--r-- | core/pim/datebook/holiday/national/nationalcfg.h | 2 | ||||
-rw-r--r-- | inputmethods/handwriting/qimpenwidget.cpp | 2 | ||||
-rw-r--r-- | inputmethods/handwriting/qimpenwidget.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | 2 | ||||
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_xml.h | 2 | ||||
-rw-r--r-- | library/lightstyle.cpp | 8 | ||||
-rw-r--r-- | library/lightstyle.h | 8 |
8 files changed, 14 insertions, 14 deletions
diff --git a/core/pim/datebook/holiday/national/nationalcfg.cpp b/core/pim/datebook/holiday/national/nationalcfg.cpp index f71c833..33e9db3 100644 --- a/core/pim/datebook/holiday/national/nationalcfg.cpp +++ b/core/pim/datebook/holiday/national/nationalcfg.cpp | |||
@@ -1,371 +1,371 @@ | |||
1 | #include "nationalcfg.h" | 1 | #include "nationalcfg.h" |
2 | 2 | ||
3 | #include <opie2/odebug.h> | 3 | #include <opie2/odebug.h> |
4 | 4 | ||
5 | #include <qfile.h> | 5 | #include <qfile.h> |
6 | 6 | ||
7 | static QString _key_desc="description"; | 7 | static QString _key_desc="description"; |
8 | static QString _key_doc="nationaldays"; | 8 | static QString _key_doc="nationaldays"; |
9 | static QString _key_list="entries"; | 9 | static QString _key_list="entries"; |
10 | static QString _key_entry="entry"; | 10 | static QString _key_entry="entry"; |
11 | static QString _key_calc="calculation"; | 11 | static QString _key_calc="calculation"; |
12 | 12 | ||
13 | static QString _content_type="type"; | 13 | static QString _content_type="type"; |
14 | static QString _content_float="floating"; | 14 | static QString _content_float="floating"; |
15 | static QString _content_fix="fix"; | 15 | static QString _content_fix="fix"; |
16 | 16 | ||
17 | static QString _content_name="name"; | 17 | static QString _content_name="name"; |
18 | static QString _content_value="value"; | 18 | static QString _content_value="value"; |
19 | 19 | ||
20 | static QString _content_date="date"; | 20 | static QString _content_date="date"; |
21 | static QString _content_weekd="weekday"; | 21 | static QString _content_weekd="weekday"; |
22 | static QString _content_offset="offset"; | 22 | static QString _content_offset="offset"; |
23 | static QString _content_dayofmonth="dayofmonth"; | 23 | static QString _content_dayofmonth="dayofmonth"; |
24 | static QString _content_datedep="datedep"; | 24 | static QString _content_datedep="datedep"; |
25 | static QString _content_month="month"; | 25 | static QString _content_month="month"; |
26 | 26 | ||
27 | NHcfg::NHcfg() | 27 | NHcfg::NHcfg() |
28 | :QXmlDefaultHandler(),err(""),_path("") | 28 | :QXmlDefaultHandler(),err(""),_path("") |
29 | { | 29 | { |
30 | } | 30 | } |
31 | 31 | ||
32 | NHcfg::~NHcfg() | 32 | NHcfg::~NHcfg() |
33 | { | 33 | { |
34 | } | 34 | } |
35 | 35 | ||
36 | bool NHcfg::load(const QString&aPath) | 36 | bool NHcfg::load(const QString&aPath) |
37 | { | 37 | { |
38 | _path=aPath; | 38 | _path=aPath; |
39 | stage = 0; | 39 | stage = 0; |
40 | QFile *f=new QFile(_path); | 40 | QFile *f=new QFile(_path); |
41 | if (!f) { | 41 | if (!f) { |
42 | oerr << "Could not open file" << oendl; | 42 | oerr << "Could not open file" << oendl; |
43 | return false; | 43 | return false; |
44 | } | 44 | } |
45 | QXmlInputSource is(*f); | 45 | QXmlInputSource is(*f); |
46 | QXmlSimpleReader reader; | 46 | QXmlSimpleReader reader; |
47 | reader.setContentHandler(this); | 47 | reader.setContentHandler(this); |
48 | reader.setErrorHandler(this); | 48 | reader.setErrorHandler(this); |
49 | 49 | ||
50 | currentFixList.clear(); | 50 | currentFixList.clear(); |
51 | currentFloatList.clear(); | 51 | currentFloatList.clear(); |
52 | counter = 0; | 52 | counter = 0; |
53 | level = 0; | 53 | level = 0; |
54 | 54 | ||
55 | err = ""; | 55 | err = ""; |
56 | bool ret = reader.parse(is); | 56 | bool ret = reader.parse(is); |
57 | if (err.length()>0) | 57 | if (err.length()>0) |
58 | odebug << "Errors: " << err << oendl; | 58 | odebug << "Errors: " << err << oendl; |
59 | return ret; | 59 | return ret; |
60 | } | 60 | } |
61 | 61 | ||
62 | const tentrylist&NHcfg::fixDates()const | 62 | const tentrylist&NHcfg::fixDates()const |
63 | { | 63 | { |
64 | return currentFixList; | 64 | return currentFixList; |
65 | } | 65 | } |
66 | 66 | ||
67 | const tentrylist&NHcfg::floatingDates()const | 67 | const tentrylist&NHcfg::floatingDates()const |
68 | { | 68 | { |
69 | return currentFloatList; | 69 | return currentFloatList; |
70 | } | 70 | } |
71 | 71 | ||
72 | bool NHcfg::warning(const QXmlParseException& e) | 72 | bool NHcfg::warning(const QXmlParseException& e) |
73 | { | 73 | { |
74 | QString tmp; | 74 | QString tmp; |
75 | 75 | ||
76 | tmp.sprintf("%d: warning: %s\n", e.lineNumber(), | 76 | tmp.sprintf("%d: warning: %s\n", e.lineNumber(), |
77 | (const char*) e.message().utf8()); | 77 | (const char*) e.message().utf8()); |
78 | 78 | ||
79 | err += tmp; | 79 | err += tmp; |
80 | 80 | ||
81 | return true; | 81 | return true; |
82 | } | 82 | } |
83 | 83 | ||
84 | bool NHcfg::error(const QXmlParseException& e) | 84 | bool NHcfg::error(const QXmlParseException& e) |
85 | { | 85 | { |
86 | QString tmp; | 86 | QString tmp; |
87 | 87 | ||
88 | tmp.sprintf("%d: error: %s\n", e.lineNumber(), | 88 | tmp.sprintf("%d: error: %s\n", e.lineNumber(), |
89 | (const char*) e.message().utf8()); | 89 | (const char*) e.message().utf8()); |
90 | 90 | ||
91 | err += tmp; | 91 | err += tmp; |
92 | 92 | ||
93 | return true; | 93 | return true; |
94 | } | 94 | } |
95 | 95 | ||
96 | bool NHcfg::fatalError(const QXmlParseException& e) | 96 | bool NHcfg::fatalError(const QXmlParseException& e) |
97 | { | 97 | { |
98 | QString tmp; | 98 | QString tmp; |
99 | 99 | ||
100 | tmp.sprintf("%d: fatal error: %s\n", e.lineNumber(), | 100 | tmp.sprintf("%d: fatal error: %s\n", e.lineNumber(), |
101 | (const char*) e.message().utf8()); | 101 | (const char*) e.message().utf8()); |
102 | 102 | ||
103 | err += tmp; | 103 | err += tmp; |
104 | 104 | ||
105 | return false; | 105 | return false; |
106 | } | 106 | } |
107 | 107 | ||
108 | bool NHcfg::startElement(const QString&, const QString&,const QString& name, const QXmlAttributes& attr) | 108 | bool NHcfg::startElement(const QString&, const QString&,const QString& name, const QXmlAttributes& attr) |
109 | { | 109 | { |
110 | bool ret = false; | 110 | bool ret = false; |
111 | if (name==_key_doc) { | 111 | if (name==_key_doc) { |
112 | stage = 1; | 112 | stage = 1; |
113 | return true; | 113 | return true; |
114 | } | 114 | } |
115 | if (stage == 0) { | 115 | if (stage == 0) { |
116 | err = "This is not a national holiday config file"; | 116 | err = "This is not a national holiday config file"; |
117 | return false; | 117 | return false; |
118 | } | 118 | } |
119 | if (name==_key_desc) { | 119 | if (name==_key_desc) { |
120 | stage = 2; | 120 | stage = 2; |
121 | ret = setName(attr); | 121 | ret = setName(attr); |
122 | return ret; | 122 | return ret; |
123 | } | 123 | } |
124 | if (stage<2) {return false;} | 124 | if (stage<2) {return false;} |
125 | if (name==_key_list) {stage=3;return true;} | 125 | if (name==_key_list) {stage=3;return true;} |
126 | 126 | ||
127 | if (stage<3) {return false;} | 127 | if (stage<3) {return false;} |
128 | 128 | ||
129 | if (name==_key_entry) { | 129 | if (name==_key_entry) { |
130 | ++level; | 130 | ++level; |
131 | ++counter; | 131 | ++counter; |
132 | m_currentEntry = NHentry(); | 132 | m_currentEntry = NHentry(); |
133 | // odebug << "Level == " << level << oendl; | 133 | // odebug << "Level == " << level << oendl; |
134 | } | 134 | } |
135 | if (name==_key_calc) { | 135 | if (name==_key_calc) { |
136 | ++level; | 136 | ++level; |
137 | // odebug << "Level == " << level << oendl; | 137 | // odebug << "Level == " << level << oendl; |
138 | return true; | 138 | return true; |
139 | } | 139 | } |
140 | if (level == 1) { | 140 | if (level == 1) { |
141 | return parsevalue(name,attr); | 141 | return parsevalue(name,attr); |
142 | } else if (level >= 2) { | 142 | } else if (level >= 2) { |
143 | return parseCalc(name,attr); | 143 | return parseCalc(name,attr); |
144 | } | 144 | } |
145 | } | 145 | } |
146 | 146 | ||
147 | bool NHcfg::setName(const QXmlAttributes&attr) | 147 | bool NHcfg::setName(const QXmlAttributes&attr) |
148 | { | 148 | { |
149 | int nindx = attr.index("value"); | 149 | int nindx = attr.index("value"); |
150 | if (nindx==-1) { | 150 | if (nindx==-1) { |
151 | return false; | 151 | return false; |
152 | } | 152 | } |
153 | _contentname = attr.value(nindx); | 153 | _contentname = attr.value(nindx); |
154 | return true; | 154 | return true; |
155 | } | 155 | } |
156 | 156 | ||
157 | bool NHcfg::parsevalue(const QString&name,const QXmlAttributes&attr) | 157 | bool NHcfg::parsevalue(const QString&name,const QXmlAttributes&attr) |
158 | { | 158 | { |
159 | if (name != _key_entry && name != _key_calc) {err = QString("Not a valid entry (%1)").arg(name); return false;} | 159 | if (name != _key_entry && name != _key_calc) {err = QString("Not a valid entry (%1)").arg(name); return false;} |
160 | 160 | ||
161 | int nindex = attr.index(_content_name); | 161 | int nindex = attr.index(_content_name); |
162 | int dindex = attr.index(_content_date); | 162 | int dindex = attr.index(_content_date); |
163 | int tindex = attr.index(_content_type); | 163 | int tindex = attr.index(_content_type); |
164 | 164 | ||
165 | if (nindex == -1) { | 165 | if (nindex == -1) { |
166 | err = QString("Listentry %1 is invalid (name missing)").arg(counter); | 166 | err = QString("Listentry %1 is invalid (name missing)").arg(counter); |
167 | return false; | 167 | return false; |
168 | } | 168 | } |
169 | m_currentEntry.setName(attr.value(nindex)); | 169 | m_currentEntry.setName(attr.value(nindex)); |
170 | 170 | ||
171 | if (tindex != -1 && attr.value(tindex)==_content_float) { | 171 | if (tindex != -1 && attr.value(tindex)==_content_float) { |
172 | m_currentEntry.setType(NHentry::floating); | 172 | m_currentEntry.setType(NHentry::floating); |
173 | return true; | 173 | return true; |
174 | } | 174 | } |
175 | 175 | ||
176 | if (dindex == -1) { | 176 | if (dindex == -1) { |
177 | err = QString("Listentry %1 is invalid ").arg(counter);return false; | 177 | err = QString("Listentry %1 is invalid ").arg(counter);return false; |
178 | } | 178 | } |
179 | 179 | ||
180 | QString txt = attr.value(nindex); | 180 | QString txt = attr.value(nindex); |
181 | QString dstring = attr.value(dindex); | 181 | QString dstring = attr.value(dindex); |
182 | QStringList e = QStringList::split("-",dstring); | 182 | QStringList e = QStringList::split("-",dstring); |
183 | if (e.count()!=2){err=QString("Datestring %1 is invalid (entry %2)").arg(dstring).arg(counter);return false;} | 183 | if (e.count()!=2){err=QString("Datestring %1 is invalid (entry %2)").arg(dstring).arg(counter);return false;} |
184 | QDate d(0,e[0].toInt(),e[1].toInt()); | 184 | QDate d(0,e[0].toInt(),e[1].toInt()); |
185 | m_currentEntry.setDate(d); | 185 | m_currentEntry.setDate(d); |
186 | return true; | 186 | return true; |
187 | } | 187 | } |
188 | 188 | ||
189 | bool NHcfg::parseCalc(const QString&name,const QXmlAttributes&attr) | 189 | bool NHcfg::parseCalc(const QString&name,const QXmlAttributes&attr) |
190 | { | 190 | { |
191 | ++level; | 191 | ++level; |
192 | int vindex = attr.index(_content_value); | 192 | int vindex = attr.index(_content_value); |
193 | if (vindex == -1) { | 193 | if (vindex == -1) { |
194 | err = QString("Value for element %1 on entry %2 is missing").arg(name).arg(counter); | 194 | err = QString("Value for element %1 on entry %2 is missing").arg(name).arg(counter); |
195 | return false; | 195 | return false; |
196 | } | 196 | } |
197 | int what_c =0; | 197 | int what_c =0; |
198 | QString what = name.lower(); | 198 | QString what = name.lower(); |
199 | QString value; | 199 | QString value; |
200 | if (what == _content_date) { | 200 | if (what == _content_date) { |
201 | what_c = 1; | 201 | what_c = 1; |
202 | } else if (what == _content_weekd) { | 202 | } else if (what == _content_weekd) { |
203 | what_c = 2; | 203 | what_c = 2; |
204 | } else if (what == _content_offset) { | 204 | } else if (what == _content_offset) { |
205 | what_c = 3; | 205 | what_c = 3; |
206 | } else if (what == _content_dayofmonth) { | 206 | } else if (what == _content_dayofmonth) { |
207 | what_c = 4; | 207 | what_c = 4; |
208 | } else if (what == _content_datedep) { | 208 | } else if (what == _content_datedep) { |
209 | what_c = 5; | 209 | what_c = 5; |
210 | } else if (what == _content_month) { | 210 | } else if (what == _content_month) { |
211 | what_c = 6; | 211 | what_c = 6; |
212 | } | 212 | } |
213 | if (what_c == 0) { | 213 | if (what_c == 0) { |
214 | err = QString("Unknown element %1 on entry %2").arg(name).arg(counter); | 214 | err = QString("Unknown element %1 on entry %2").arg(name).arg(counter); |
215 | return false; | 215 | return false; |
216 | } | 216 | } |
217 | value = attr.value(vindex).lower(); | 217 | value = attr.value(vindex).lower(); |
218 | QStringList e; | 218 | QStringList e; |
219 | QDate d; | 219 | QDate d; |
220 | bool dotformat = false; | 220 | bool dotformat = false; |
221 | switch (what_c) { | 221 | switch (what_c) { |
222 | case 1: | 222 | case 1: |
223 | if (value != "easter") { | 223 | if (value != "easter") { |
224 | e = QStringList::split("-",value); | 224 | e = QStringList::split("-",value); |
225 | if (e.count()!=2) { | 225 | if (e.count()!=2) { |
226 | e = QStringList::split(".",value); | 226 | e = QStringList::split(".",value); |
227 | dotformat = true; | 227 | dotformat = true; |
228 | } | 228 | } |
229 | if (e.count()!=2){err=QString("Datestring %1 is invalid (entry %2)").arg(value).arg(counter);return false;} | 229 | if (e.count()!=2){err=QString("Datestring %1 is invalid (entry %2)").arg(value).arg(counter);return false;} |
230 | if (!dotformat) { | 230 | if (!dotformat) { |
231 | d=QDate(0,e[0].toInt(),e[1].toInt()); | 231 | d=QDate(0,e[0].toInt(),e[1].toInt()); |
232 | } else { | 232 | } else { |
233 | d=QDate(0,e[1].toInt(),e[0].toInt()); | 233 | d=QDate(0,e[1].toInt(),e[0].toInt()); |
234 | } | 234 | } |
235 | } else { | 235 | } else { |
236 | d=QDate(9999,1,1); | 236 | d=QDate(9999,1,1); |
237 | } | 237 | } |
238 | m_currentEntry.setDate(d); | 238 | m_currentEntry.setDate(d); |
239 | break; | 239 | break; |
240 | case 2: | 240 | case 2: |
241 | m_currentEntry.setWeekday(value); | 241 | m_currentEntry.setWeekday(value); |
242 | break; | 242 | break; |
243 | case 3: | 243 | case 3: |
244 | m_currentEntry.setOffet(value.toInt()); | 244 | m_currentEntry.setOffet(value.toInt()); |
245 | break; | 245 | break; |
246 | case 4: | 246 | case 4: |
247 | m_currentEntry.setDayofmonth(value); | 247 | m_currentEntry.setDayofmonth(value); |
248 | break; | 248 | break; |
249 | case 5: | 249 | case 5: |
250 | m_currentEntry.setDaydep(value); | 250 | m_currentEntry.setDaydep(value); |
251 | break; | 251 | break; |
252 | case 6: | 252 | case 6: |
253 | m_currentEntry.setMonth(value); | 253 | m_currentEntry.setMonth(value); |
254 | break; | 254 | break; |
255 | } | 255 | } |
256 | return true; | 256 | return true; |
257 | } | 257 | } |
258 | 258 | ||
259 | bool NHcfg::endElement(const QString&, const QString&,const QString& name) | 259 | bool NHcfg::endElement(const QString&, const QString&,const QString& name) |
260 | { | 260 | { |
261 | // odebug << "End element: " << name << oendl; | 261 | // odebug << "End element: " << name << oendl; |
262 | if (name==_key_entry) { | 262 | if (name==_key_entry) { |
263 | if (m_currentEntry.type()==NHentry::fix) { | 263 | if (m_currentEntry.type()==NHentry::fix) { |
264 | currentFixList.append(m_currentEntry); | 264 | currentFixList.append(m_currentEntry); |
265 | } else { | 265 | } else { |
266 | currentFloatList.append(m_currentEntry); | 266 | currentFloatList.append(m_currentEntry); |
267 | // odebug << "Floatlist count " << currentFloatList.count() << oendl; | 267 | // odebug << "Floatlist count " << currentFloatList.count() << oendl; |
268 | } | 268 | } |
269 | } else if (name==_key_calc) { | 269 | } else if (name==_key_calc) { |
270 | 270 | ||
271 | } | 271 | } |
272 | if (stage>=3) { | 272 | if (stage>=3) { |
273 | --level; | 273 | --level; |
274 | } | 274 | } |
275 | // odebug << "Level == " << level << oendl; | 275 | // odebug << "Level == " << level << oendl; |
276 | return true; | 276 | return true; |
277 | } | 277 | } |
278 | 278 | ||
279 | const QString&NHcfg::errorString()const | 279 | QString NHcfg::errorString() const |
280 | { | 280 | { |
281 | return err; | 281 | return err; |
282 | } | 282 | } |
283 | 283 | ||
284 | NHentry::NHentry() | 284 | NHentry::NHentry() |
285 | :m_Type(fix) | 285 | :m_Type(fix) |
286 | { | 286 | { |
287 | m_Offset=0; | 287 | m_Offset=0; |
288 | } | 288 | } |
289 | 289 | ||
290 | NHentry::~NHentry() | 290 | NHentry::~NHentry() |
291 | {} | 291 | {} |
292 | 292 | ||
293 | void NHentry::setName(const QString&aName) | 293 | void NHentry::setName(const QString&aName) |
294 | { | 294 | { |
295 | m_Name = aName; | 295 | m_Name = aName; |
296 | } | 296 | } |
297 | 297 | ||
298 | const QString&NHentry::name()const | 298 | const QString&NHentry::name()const |
299 | { | 299 | { |
300 | return m_Name; | 300 | return m_Name; |
301 | } | 301 | } |
302 | 302 | ||
303 | void NHentry::setType(NHentry::entry_type aType) | 303 | void NHentry::setType(NHentry::entry_type aType) |
304 | { | 304 | { |
305 | m_Type = aType; | 305 | m_Type = aType; |
306 | } | 306 | } |
307 | 307 | ||
308 | NHentry::entry_type NHentry::type()const | 308 | NHentry::entry_type NHentry::type()const |
309 | { | 309 | { |
310 | return m_Type; | 310 | return m_Type; |
311 | } | 311 | } |
312 | 312 | ||
313 | void NHentry::setDate(const QDate&aDate) | 313 | void NHentry::setDate(const QDate&aDate) |
314 | { | 314 | { |
315 | m_Date = aDate; | 315 | m_Date = aDate; |
316 | } | 316 | } |
317 | 317 | ||
318 | const QDate&NHentry::date()const | 318 | const QDate&NHentry::date()const |
319 | { | 319 | { |
320 | return m_Date; | 320 | return m_Date; |
321 | } | 321 | } |
322 | 322 | ||
323 | void NHentry::setWeekday(const QString&aDay) | 323 | void NHentry::setWeekday(const QString&aDay) |
324 | { | 324 | { |
325 | m_Weekday = aDay; | 325 | m_Weekday = aDay; |
326 | } | 326 | } |
327 | 327 | ||
328 | const QString&NHentry::weekday()const | 328 | const QString&NHentry::weekday()const |
329 | { | 329 | { |
330 | return m_Weekday; | 330 | return m_Weekday; |
331 | } | 331 | } |
332 | 332 | ||
333 | void NHentry::setDayofmonth(const QString&aDay) | 333 | void NHentry::setDayofmonth(const QString&aDay) |
334 | { | 334 | { |
335 | m_Dayofmonth = aDay; | 335 | m_Dayofmonth = aDay; |
336 | } | 336 | } |
337 | 337 | ||
338 | const QString&NHentry::dayofmonth()const | 338 | const QString&NHentry::dayofmonth()const |
339 | { | 339 | { |
340 | return m_Dayofmonth; | 340 | return m_Dayofmonth; |
341 | } | 341 | } |
342 | 342 | ||
343 | void NHentry::setDaydep(const QString&dep) | 343 | void NHentry::setDaydep(const QString&dep) |
344 | { | 344 | { |
345 | m_Depth = dep; | 345 | m_Depth = dep; |
346 | } | 346 | } |
347 | 347 | ||
348 | const QString&NHentry::daydep()const | 348 | const QString&NHentry::daydep()const |
349 | { | 349 | { |
350 | return m_Depth; | 350 | return m_Depth; |
351 | } | 351 | } |
352 | 352 | ||
353 | void NHentry::setMonth(const QString&month) | 353 | void NHentry::setMonth(const QString&month) |
354 | { | 354 | { |
355 | m_Month = month; | 355 | m_Month = month; |
356 | } | 356 | } |
357 | 357 | ||
358 | const QString&NHentry::month()const | 358 | const QString&NHentry::month()const |
359 | { | 359 | { |
360 | return m_Month; | 360 | return m_Month; |
361 | } | 361 | } |
362 | 362 | ||
363 | void NHentry::setOffet(int aOffset) | 363 | void NHentry::setOffet(int aOffset) |
364 | { | 364 | { |
365 | m_Offset = aOffset; | 365 | m_Offset = aOffset; |
366 | } | 366 | } |
367 | 367 | ||
368 | const int NHentry::offset()const | 368 | const int NHentry::offset()const |
369 | { | 369 | { |
370 | return m_Offset; | 370 | return m_Offset; |
371 | } | 371 | } |
diff --git a/core/pim/datebook/holiday/national/nationalcfg.h b/core/pim/datebook/holiday/national/nationalcfg.h index 872df65..2aedd95 100644 --- a/core/pim/datebook/holiday/national/nationalcfg.h +++ b/core/pim/datebook/holiday/national/nationalcfg.h | |||
@@ -1,75 +1,75 @@ | |||
1 | #ifndef _NATIONAL_CFG_H | 1 | #ifndef _NATIONAL_CFG_H |
2 | #define _NATIONAL_CFG_H | 2 | #define _NATIONAL_CFG_H |
3 | 3 | ||
4 | #include <qxml.h> | 4 | #include <qxml.h> |
5 | #include <qstringlist.h> | 5 | #include <qstringlist.h> |
6 | #include <qvaluelist.h> | 6 | #include <qvaluelist.h> |
7 | #include <qmap.h> | 7 | #include <qmap.h> |
8 | #include <qdatetime.h> | 8 | #include <qdatetime.h> |
9 | 9 | ||
10 | typedef QMap<QDate,QStringList> tholidaylist; | 10 | typedef QMap<QDate,QStringList> tholidaylist; |
11 | 11 | ||
12 | class NHentry | 12 | class NHentry |
13 | { | 13 | { |
14 | public: | 14 | public: |
15 | enum entry_type{fix,floating}; | 15 | enum entry_type{fix,floating}; |
16 | NHentry(); | 16 | NHentry(); |
17 | virtual ~NHentry(); | 17 | virtual ~NHentry(); |
18 | 18 | ||
19 | void setName(const QString&); | 19 | void setName(const QString&); |
20 | const QString&name()const; | 20 | const QString&name()const; |
21 | void setType(entry_type); | 21 | void setType(entry_type); |
22 | entry_type type()const; | 22 | entry_type type()const; |
23 | void setDate(const QDate&); | 23 | void setDate(const QDate&); |
24 | const QDate&date()const; | 24 | const QDate&date()const; |
25 | void setWeekday(const QString&); | 25 | void setWeekday(const QString&); |
26 | const QString&weekday()const; | 26 | const QString&weekday()const; |
27 | void setDayofmonth(const QString&); | 27 | void setDayofmonth(const QString&); |
28 | const QString&dayofmonth()const; | 28 | const QString&dayofmonth()const; |
29 | void setDaydep(const QString&); | 29 | void setDaydep(const QString&); |
30 | const QString&daydep()const; | 30 | const QString&daydep()const; |
31 | void setMonth(const QString&); | 31 | void setMonth(const QString&); |
32 | const QString&month()const; | 32 | const QString&month()const; |
33 | void setOffet(int); | 33 | void setOffet(int); |
34 | const int offset()const; | 34 | const int offset()const; |
35 | 35 | ||
36 | protected: | 36 | protected: |
37 | entry_type m_Type; | 37 | entry_type m_Type; |
38 | QString m_Name,m_Weekday,m_Dayofmonth,m_Depth,m_Month; | 38 | QString m_Name,m_Weekday,m_Dayofmonth,m_Depth,m_Month; |
39 | QDate m_Date; | 39 | QDate m_Date; |
40 | int m_Offset; | 40 | int m_Offset; |
41 | }; | 41 | }; |
42 | 42 | ||
43 | typedef QValueList<NHentry> tentrylist; | 43 | typedef QValueList<NHentry> tentrylist; |
44 | 44 | ||
45 | class NHcfg:public QXmlDefaultHandler | 45 | class NHcfg:public QXmlDefaultHandler |
46 | { | 46 | { |
47 | public: | 47 | public: |
48 | NHcfg(); | 48 | NHcfg(); |
49 | virtual ~NHcfg(); | 49 | virtual ~NHcfg(); |
50 | 50 | ||
51 | bool load(const QString&); | 51 | bool load(const QString&); |
52 | const tentrylist&fixDates()const; | 52 | const tentrylist&fixDates()const; |
53 | const tentrylist&floatingDates()const; | 53 | const tentrylist&floatingDates()const; |
54 | 54 | ||
55 | virtual bool warning(const QXmlParseException& e); | 55 | virtual bool warning(const QXmlParseException& e); |
56 | virtual bool error(const QXmlParseException& e); | 56 | virtual bool error(const QXmlParseException& e); |
57 | virtual bool fatalError(const QXmlParseException& e); | 57 | virtual bool fatalError(const QXmlParseException& e); |
58 | virtual bool startElement(const QString&, const QString&,const QString& name, const QXmlAttributes& attr); | 58 | virtual bool startElement(const QString&, const QString&,const QString& name, const QXmlAttributes& attr); |
59 | virtual bool endElement(const QString&, const QString&,const QString& name); | 59 | virtual bool endElement(const QString&, const QString&,const QString& name); |
60 | virtual const QString&errorString()const; | 60 | virtual QString errorString()const; |
61 | 61 | ||
62 | protected: | 62 | protected: |
63 | QString err,_contentname; | 63 | QString err,_contentname; |
64 | QString _path; | 64 | QString _path; |
65 | 65 | ||
66 | NHentry m_currentEntry; | 66 | NHentry m_currentEntry; |
67 | 67 | ||
68 | bool setName(const QXmlAttributes&); | 68 | bool setName(const QXmlAttributes&); |
69 | bool parsevalue(const QString&,const QXmlAttributes&); | 69 | bool parsevalue(const QString&,const QXmlAttributes&); |
70 | bool parseCalc(const QString&,const QXmlAttributes&); | 70 | bool parseCalc(const QString&,const QXmlAttributes&); |
71 | int stage,counter,level; | 71 | int stage,counter,level; |
72 | tentrylist currentFloatList,currentFixList; | 72 | tentrylist currentFloatList,currentFixList; |
73 | }; | 73 | }; |
74 | 74 | ||
75 | #endif | 75 | #endif |
diff --git a/inputmethods/handwriting/qimpenwidget.cpp b/inputmethods/handwriting/qimpenwidget.cpp index 8f8f582..7223e1a 100644 --- a/inputmethods/handwriting/qimpenwidget.cpp +++ b/inputmethods/handwriting/qimpenwidget.cpp | |||
@@ -1,446 +1,446 @@ | |||
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 <qapplication.h> | 21 | #include <qapplication.h> |
22 | #include <qinputdialog.h> | 22 | #include <qinputdialog.h> |
23 | #include <qpainter.h> | 23 | #include <qpainter.h> |
24 | #include <qfile.h> | 24 | #include <qfile.h> |
25 | #include <qdatastream.h> | 25 | #include <qdatastream.h> |
26 | #include <qtimer.h> | 26 | #include <qtimer.h> |
27 | #include "qimpenchar.h" | 27 | #include "qimpenchar.h" |
28 | #include "qimpenwidget.h" | 28 | #include "qimpenwidget.h" |
29 | 29 | ||
30 | #define TITLE_WIDTH30 // ### magic | 30 | #define TITLE_WIDTH30 // ### magic |
31 | 31 | ||
32 | /*! | 32 | /*! |
33 | \class QIMPenWidget qimpenwidget.h | 33 | \class QIMPenWidget qimpenwidget.h |
34 | 34 | ||
35 | Draws characters and allows input of characters. | 35 | Draws characters and allows input of characters. |
36 | */ | 36 | */ |
37 | 37 | ||
38 | QIMPenWidget::QIMPenWidget( QWidget *parent ) | 38 | QIMPenWidget::QIMPenWidget( QWidget *parent ) |
39 | : QWidget( parent ) | 39 | : QWidget( parent ) |
40 | { | 40 | { |
41 | charSets.setAutoDelete( TRUE ); | 41 | charSets.setAutoDelete( TRUE ); |
42 | inputStroke = 0; | 42 | inputStroke = 0; |
43 | outputChar = 0; | 43 | outputChar = 0; |
44 | outputStroke = 0; | 44 | outputStroke = 0; |
45 | mode = Waiting; | 45 | mode = Waiting; |
46 | currCharSet = 0; | 46 | currCharSet = 0; |
47 | readOnly = FALSE; | 47 | readOnly = FALSE; |
48 | strokes.setAutoDelete( TRUE ); | 48 | strokes.setAutoDelete( TRUE ); |
49 | 49 | ||
50 | timer = new QTimer(this); | 50 | timer = new QTimer(this); |
51 | connect( timer, SIGNAL(timeout()), SLOT(timeout())); | 51 | connect( timer, SIGNAL(timeout()), SLOT(timeout())); |
52 | 52 | ||
53 | setBackgroundColor( qApp->palette().color( QPalette::Active, | 53 | setBackgroundColor( qApp->palette().color( QPalette::Active, |
54 | QColorGroup::Base ) ); | 54 | QColorGroup::Base ) ); |
55 | strokeColor = black; | 55 | strokeColor = black; |
56 | setFixedHeight( 75 ); | 56 | setFixedHeight( 75 ); |
57 | } | 57 | } |
58 | 58 | ||
59 | void QIMPenWidget::clear() | 59 | void QIMPenWidget::clear() |
60 | { | 60 | { |
61 | timer->stop(); | 61 | timer->stop(); |
62 | mode = Waiting; | 62 | mode = Waiting; |
63 | QRect r( dirtyRect ); | 63 | QRect r( dirtyRect ); |
64 | QIMPenStrokeIterator it( strokes ); | 64 | QIMPenStrokeIterator it( strokes ); |
65 | while ( it.current() ) { | 65 | while ( it.current() ) { |
66 | r |= it.current()->boundingRect(); | 66 | r |= it.current()->boundingRect(); |
67 | ++it; | 67 | ++it; |
68 | } | 68 | } |
69 | outputChar = 0; | 69 | outputChar = 0; |
70 | outputStroke = 0; | 70 | outputStroke = 0; |
71 | strokes.clear(); | 71 | strokes.clear(); |
72 | if ( !r.isNull() ) { | 72 | if ( !r.isNull() ) { |
73 | r.moveBy( -2, -2 ); | 73 | r.moveBy( -2, -2 ); |
74 | r.setSize( r.size() + QSize( 4, 4 ) ); | 74 | r.setSize( r.size() + QSize( 4, 4 ) ); |
75 | repaint( r ); | 75 | repaint( r ); |
76 | } else { | 76 | } else { |
77 | repaint(); | 77 | repaint(); |
78 | } | 78 | } |
79 | } | 79 | } |
80 | 80 | ||
81 | void QIMPenWidget::removeStroke() | 81 | void QIMPenWidget::removeStroke() |
82 | { | 82 | { |
83 | QRect r( dirtyRect ); | 83 | QRect r( dirtyRect ); |
84 | QIMPenStroke *st = strokes.getFirst(); | 84 | QIMPenStroke *st = strokes.getFirst(); |
85 | QRect strokeRect; | 85 | QRect strokeRect; |
86 | if ( st ) | 86 | if ( st ) |
87 | strokeRect = st->boundingRect(); | 87 | strokeRect = st->boundingRect(); |
88 | r |= strokeRect; | 88 | r |= strokeRect; |
89 | strokes.removeFirst(); | 89 | strokes.removeFirst(); |
90 | if ( !r.isNull() ) { | 90 | if ( !r.isNull() ) { |
91 | r.moveBy( -2, -2 ); | 91 | r.moveBy( -2, -2 ); |
92 | r.setSize( r.size() + QSize( 4, 4 ) ); | 92 | r.setSize( r.size() + QSize( 4, 4 ) ); |
93 | repaint( r ); | 93 | repaint( r ); |
94 | } | 94 | } |
95 | } | 95 | } |
96 | 96 | ||
97 | void QIMPenWidget::greyStroke() | 97 | void QIMPenWidget::greyStroke() |
98 | { | 98 | { |
99 | QRect r( dirtyRect ); | 99 | QRect r( dirtyRect ); |
100 | QIMPenStroke *st = strokes.getLast(); | 100 | QIMPenStroke *st = strokes.getLast(); |
101 | QRect strokeRect; | 101 | QRect strokeRect; |
102 | if ( st ) | 102 | if ( st ) |
103 | strokeRect = st->boundingRect(); | 103 | strokeRect = st->boundingRect(); |
104 | r |= strokeRect; | 104 | r |= strokeRect; |
105 | QColor oldCol = strokeColor; | 105 | QColor oldCol = strokeColor; |
106 | strokeColor = gray; | 106 | strokeColor = gray; |
107 | if ( !r.isNull() ) { | 107 | if ( !r.isNull() ) { |
108 | r.moveBy( -2, -2 ); | 108 | r.moveBy( -2, -2 ); |
109 | r.setSize( r.size() + QSize( 4, 4 ) ); | 109 | r.setSize( r.size() + QSize( 4, 4 ) ); |
110 | repaint( r ); | 110 | repaint( r ); |
111 | } | 111 | } |
112 | strokeColor = oldCol; | 112 | strokeColor = oldCol; |
113 | } | 113 | } |
114 | 114 | ||
115 | /*! | 115 | /*! |
116 | Insert a character set into the list. | 116 | Insert a character set into the list. |
117 | */ | 117 | */ |
118 | void QIMPenWidget::insertCharSet( QIMPenCharSet *cs, int stretch, int pos ) | 118 | void QIMPenWidget::insertCharSet( QIMPenCharSet *cs, int stretch, int pos ) |
119 | { | 119 | { |
120 | CharSetEntry *e = new CharSetEntry; | 120 | CharSetEntry *e = new CharSetEntry; |
121 | e->cs = cs; | 121 | e->cs = cs; |
122 | e->stretch = stretch; | 122 | e->stretch = stretch; |
123 | if ( pos < 0 ) | 123 | if ( pos < 0 ) |
124 | pos = charSets.count(); | 124 | pos = charSets.count(); |
125 | charSets.insert( pos, e ); | 125 | charSets.insert( pos, e ); |
126 | currCharSet = 0; | 126 | currCharSet = 0; |
127 | emit changeCharSet( currCharSet ); | 127 | emit changeCharSet( currCharSet ); |
128 | emit changeCharSet( charSets.at(currCharSet)->cs ); | 128 | emit changeCharSet( charSets.at(currCharSet)->cs ); |
129 | totalStretch = 0; | 129 | totalStretch = 0; |
130 | CharSetEntryIterator it( charSets ); | 130 | CharSetEntryIterator it( charSets ); |
131 | for ( ; it.current(); ++it ) | 131 | for ( ; it.current(); ++it ) |
132 | totalStretch += it.current()->stretch; | 132 | totalStretch += it.current()->stretch; |
133 | update(); | 133 | update(); |
134 | } | 134 | } |
135 | 135 | ||
136 | /*! | 136 | /*! |
137 | Remove a character set from the list. | 137 | Remove a character set from the list. |
138 | */ | 138 | */ |
139 | void QIMPenWidget::removeCharSet( int pos ) | 139 | void QIMPenWidget::removeCharSet( int pos ) |
140 | { | 140 | { |
141 | if ( pos >= 0 && pos < (int)charSets.count() ) { | 141 | if ( pos >= 0 && pos < (int)charSets.count() ) { |
142 | charSets.remove( pos ); | 142 | charSets.remove( pos ); |
143 | currCharSet = 0; | 143 | currCharSet = 0; |
144 | if ( charSets.count() ) { | 144 | if ( charSets.count() ) { |
145 | emit changeCharSet( currCharSet ); | 145 | emit changeCharSet( currCharSet ); |
146 | emit changeCharSet( charSets.at(currCharSet)->cs ); | 146 | emit changeCharSet( charSets.at(currCharSet)->cs ); |
147 | } | 147 | } |
148 | totalStretch = 0; | 148 | totalStretch = 0; |
149 | CharSetEntryIterator it( charSets ); | 149 | CharSetEntryIterator it( charSets ); |
150 | for ( ; it.current(); ++it ) | 150 | for ( ; it.current(); ++it ) |
151 | totalStretch += it.current()->stretch; | 151 | totalStretch += it.current()->stretch; |
152 | update(); | 152 | update(); |
153 | } | 153 | } |
154 | } | 154 | } |
155 | 155 | ||
156 | void QIMPenWidget::changeCharSet( QIMPenCharSet *cs, int pos ) | 156 | void QIMPenWidget::changeCharSet( QIMPenCharSet *cs, int pos ) |
157 | { | 157 | { |
158 | if ( pos >= 0 && pos < (int)charSets.count() ) { | 158 | if ( pos >= 0 && pos < (int)charSets.count() ) { |
159 | CharSetEntry *e = new CharSetEntry; | 159 | CharSetEntry *e = new CharSetEntry; |
160 | e->cs = cs; | 160 | e->cs = cs; |
161 | e->stretch = charSets.at(pos)->stretch; | 161 | e->stretch = charSets.at(pos)->stretch; |
162 | charSets.remove( pos ); | 162 | charSets.remove( pos ); |
163 | charSets.insert( pos, e ); | 163 | charSets.insert( pos, e ); |
164 | if ( pos == currCharSet ) { | 164 | if ( pos == currCharSet ) { |
165 | emit changeCharSet( charSets.at(currCharSet)->cs ); | 165 | emit changeCharSet( charSets.at(currCharSet)->cs ); |
166 | } | 166 | } |
167 | update(); | 167 | update(); |
168 | } | 168 | } |
169 | } | 169 | } |
170 | 170 | ||
171 | void QIMPenWidget::clearCharSets() | 171 | void QIMPenWidget::clearCharSets() |
172 | { | 172 | { |
173 | charSets.clear(); | 173 | charSets.clear(); |
174 | currCharSet = 0; | 174 | currCharSet = 0; |
175 | update(); | 175 | update(); |
176 | } | 176 | } |
177 | 177 | ||
178 | /*! | 178 | /*! |
179 | Display a character. \a speed determines how quickly the character is | 179 | Display a character. \a speed determines how quickly the character is |
180 | drawn. | 180 | drawn. |
181 | */ | 181 | */ |
182 | void QIMPenWidget::showCharacter( QIMPenChar *ch, int speed ) | 182 | void QIMPenWidget::showCharacter( QIMPenChar *ch, int speed ) |
183 | { | 183 | { |
184 | outputChar = 0; | 184 | outputChar = 0; |
185 | outputStroke = 0; | 185 | outputStroke = 0; |
186 | strokes.clear(); | 186 | strokes.clear(); |
187 | mode = Output; | 187 | mode = Output; |
188 | repaint(); | 188 | repaint(); |
189 | if ( !ch || ch->isEmpty() ) { | 189 | if ( !ch || ch->isEmpty() ) { |
190 | mode = Waiting; | 190 | mode = Waiting; |
191 | return; | 191 | return; |
192 | } | 192 | } |
193 | 193 | ||
194 | outputChar = ch; | 194 | outputChar = ch; |
195 | outputStroke = outputChar->penStrokes().getFirst(); | 195 | outputStroke = outputChar->penStrokes().getFirst(); |
196 | if ( speed < 0 ) speed = 0; | 196 | if ( speed < 0 ) speed = 0; |
197 | if ( speed > 20 ) speed = 20; | 197 | if ( speed > 20 ) speed = 20; |
198 | speed = 50 - speed; | 198 | speed = 50 - speed; |
199 | pointIndex = 0; | 199 | pointIndex = 0; |
200 | strokeIndex = 0; | 200 | strokeIndex = 0; |
201 | lastPoint = outputStroke->startingPoint(); | 201 | lastPoint = outputStroke->startingPoint(); |
202 | QRect br( outputChar->boundingRect() ); | 202 | QRect br( outputChar->boundingRect() ); |
203 | lastPoint.setX( (width() - br.width()) / 2 + (lastPoint.x () - br.left()) ); | 203 | lastPoint.setX( (width() - br.width()) / 2 + (lastPoint.x () - br.left()) ); |
204 | QPoint offset = lastPoint - outputStroke->startingPoint(); | 204 | QPoint offset = lastPoint - outputStroke->startingPoint(); |
205 | br.moveBy( offset.x(), offset.y() ); | 205 | br.moveBy( offset.x(), offset.y() ); |
206 | dirtyRect |= br; | 206 | dirtyRect |= br; |
207 | timer->start( speed ); | 207 | timer->start( speed ); |
208 | } | 208 | } |
209 | 209 | ||
210 | /*! | 210 | /*! |
211 | Handle drawing/clearing of characters. | 211 | Handle drawing/clearing of characters. |
212 | */ | 212 | */ |
213 | void QIMPenWidget::timeout() | 213 | void QIMPenWidget::timeout() |
214 | { | 214 | { |
215 | if ( mode == Output ) { | 215 | if ( mode == Output ) { |
216 | const QArray<QIMPenGlyphLink> &chain = outputStroke->chain(); | 216 | const QArray<QIMPenGlyphLink> &chain = outputStroke->chain(); |
217 | if ( pointIndex < chain.count() ) { | 217 | if ( pointIndex < chain.count() ) { |
218 | QPainter paint( this ); | 218 | QPainter paint( this ); |
219 | paint.setBrush( Qt::black ); | 219 | paint.setBrush( Qt::black ); |
220 | for ( unsigned i = 0; i < 3 && pointIndex < chain.count(); i++ ) { | 220 | for ( unsigned i = 0; i < 3 && pointIndex < chain.count(); i++ ) { |
221 | lastPoint.rx() += chain[pointIndex].dx; | 221 | lastPoint.rx() += chain[pointIndex].dx; |
222 | lastPoint.ry() += chain[pointIndex].dy; | 222 | lastPoint.ry() += chain[pointIndex].dy; |
223 | pointIndex++; | 223 | pointIndex++; |
224 | paint.drawRect( lastPoint.x()-1, lastPoint.y()-1, 2, 2 ); | 224 | paint.drawRect( lastPoint.x()-1, lastPoint.y()-1, 2, 2 ); |
225 | } | 225 | } |
226 | } | 226 | } |
227 | if ( pointIndex >= chain.count() ) { | 227 | if ( pointIndex >= chain.count() ) { |
228 | QIMPenStrokeList strokes = outputChar->penStrokes(); | 228 | QIMPenStrokeList strokes = outputChar->penStrokes(); |
229 | if ( strokeIndex < (int)strokes.count() - 1 ) { | 229 | if ( strokeIndex < (int)strokes.count() - 1 ) { |
230 | pointIndex = 0; | 230 | pointIndex = 0; |
231 | strokeIndex++; | 231 | strokeIndex++; |
232 | outputStroke = strokes.at( strokeIndex ); | 232 | outputStroke = strokes.at( strokeIndex ); |
233 | lastPoint = outputChar->startingPoint(); | 233 | lastPoint = outputChar->startingPoint(); |
234 | QRect br( outputChar->boundingRect() ); | 234 | QRect br( outputChar->boundingRect() ); |
235 | lastPoint.setX( (width() - br.width()) / 2 | 235 | lastPoint.setX( (width() - br.width()) / 2 |
236 | + (lastPoint.x () - br.left()) ); | 236 | + (lastPoint.x () - br.left()) ); |
237 | QPoint off = lastPoint - outputChar->startingPoint(); | 237 | QPoint off = lastPoint - outputChar->startingPoint(); |
238 | lastPoint = outputStroke->startingPoint() + off; | 238 | lastPoint = outputStroke->startingPoint() + off; |
239 | } else { | 239 | } else { |
240 | timer->stop(); | 240 | timer->stop(); |
241 | mode = Waiting; | 241 | mode = Waiting; |
242 | } | 242 | } |
243 | } | 243 | } |
244 | } else if ( mode == Waiting ) { | 244 | } else if ( mode == Waiting ) { |
245 | QRect r( dirtyRect ); | 245 | QRect r( dirtyRect ); |
246 | if ( !r.isNull() ) { | 246 | if ( !r.isNull() ) { |
247 | r.moveBy( -2, -2 ); | 247 | r.moveBy( -2, -2 ); |
248 | r.setSize( r.size() + QSize( 4, 4 ) ); | 248 | r.setSize( r.size() + QSize( 4, 4 ) ); |
249 | repaint( r ); | 249 | repaint( r ); |
250 | } | 250 | } |
251 | } | 251 | } |
252 | } | 252 | } |
253 | 253 | ||
254 | /*! | 254 | /*! |
255 | If the point \a p is over one of the character set titles, switch | 255 | If the point \a p is over one of the character set titles, switch |
256 | to the set and return TRUE. | 256 | to the set and return TRUE. |
257 | */ | 257 | */ |
258 | bool QIMPenWidget::selectSet( QPoint p ) | 258 | bool QIMPenWidget::selectSet( QPoint p ) |
259 | { | 259 | { |
260 | if ( charSets.count() ) { | 260 | if ( charSets.count() ) { |
261 | CharSetEntryIterator it( charSets ); | 261 | CharSetEntryIterator it( charSets ); |
262 | int spos = 0; | 262 | int spos = 0; |
263 | int idx = 0; | 263 | int idx = 0; |
264 | for ( ; it.current(); ++it, idx++ ) { | 264 | for ( ; it.current(); ++it, idx++ ) { |
265 | int setWidth = width() * it.current()->stretch / totalStretch; | 265 | int setWidth = width() * it.current()->stretch / totalStretch; |
266 | spos += setWidth; | 266 | spos += setWidth; |
267 | if ( p.x() < spos ) { | 267 | if ( p.x() < spos ) { |
268 | if ( idx != currCharSet ) { | 268 | if ( idx != currCharSet ) { |
269 | currCharSet = idx; | 269 | currCharSet = idx; |
270 | update( 0, 0, width(), 12 ); | 270 | update( 0, 0, width(), 12 ); |
271 | emit changeCharSet( currCharSet ); | 271 | emit changeCharSet( currCharSet ); |
272 | emit changeCharSet( charSets.at(currCharSet)->cs ); | 272 | emit changeCharSet( charSets.at(currCharSet)->cs ); |
273 | } | 273 | } |
274 | break; | 274 | break; |
275 | } | 275 | } |
276 | } | 276 | } |
277 | } | 277 | } |
278 | 278 | ||
279 | return FALSE; | 279 | return FALSE; |
280 | } | 280 | } |
281 | 281 | ||
282 | /*! | 282 | /*! |
283 | Hopefully returns a sensible size. | 283 | Hopefully returns a sensible size. |
284 | */ | 284 | */ |
285 | QSize QIMPenWidget::sizeHint() | 285 | QSize QIMPenWidget::sizeHint() const |
286 | { | 286 | { |
287 | return QSize( TITLE_WIDTH * charSets.count(), 75 ); | 287 | return QSize( TITLE_WIDTH * charSets.count(), 75 ); |
288 | } | 288 | } |
289 | 289 | ||
290 | void QIMPenWidget::mousePressEvent( QMouseEvent *e ) | 290 | void QIMPenWidget::mousePressEvent( QMouseEvent *e ) |
291 | { | 291 | { |
292 | if ( !readOnly && e->button() == LeftButton && mode == Waiting ) { | 292 | if ( !readOnly && e->button() == LeftButton && mode == Waiting ) { |
293 | // if selectSet returns false the click was not over the | 293 | // if selectSet returns false the click was not over the |
294 | // char set selectors. | 294 | // char set selectors. |
295 | if ( !selectSet( e->pos() ) ) { | 295 | if ( !selectSet( e->pos() ) ) { |
296 | // start of character input | 296 | // start of character input |
297 | timer->stop(); | 297 | timer->stop(); |
298 | if ( outputChar ) { | 298 | if ( outputChar ) { |
299 | outputChar = 0; | 299 | outputChar = 0; |
300 | outputStroke = 0; | 300 | outputStroke = 0; |
301 | repaint(); | 301 | repaint(); |
302 | } | 302 | } |
303 | mode = Input; | 303 | mode = Input; |
304 | lastPoint = e->pos(); | 304 | lastPoint = e->pos(); |
305 | emit beginStroke(); | 305 | emit beginStroke(); |
306 | inputStroke = new QIMPenStroke; | 306 | inputStroke = new QIMPenStroke; |
307 | strokes.append( inputStroke ); | 307 | strokes.append( inputStroke ); |
308 | inputStroke->beginInput( e->pos() ); | 308 | inputStroke->beginInput( e->pos() ); |
309 | QPainter paint( this ); | 309 | QPainter paint( this ); |
310 | paint.setBrush( Qt::black ); | 310 | paint.setBrush( Qt::black ); |
311 | paint.drawRect( lastPoint.x()-1, lastPoint.y()-1, 2, 2 ); | 311 | paint.drawRect( lastPoint.x()-1, lastPoint.y()-1, 2, 2 ); |
312 | } | 312 | } |
313 | } | 313 | } |
314 | } | 314 | } |
315 | 315 | ||
316 | void QIMPenWidget::mouseReleaseEvent( QMouseEvent *e ) | 316 | void QIMPenWidget::mouseReleaseEvent( QMouseEvent *e ) |
317 | { | 317 | { |
318 | if ( !readOnly && e->button() == LeftButton && mode == Input ) { | 318 | if ( !readOnly && e->button() == LeftButton && mode == Input ) { |
319 | mode = Waiting; | 319 | mode = Waiting; |
320 | inputStroke->endInput(); | 320 | inputStroke->endInput(); |
321 | if ( charSets.count() ) | 321 | if ( charSets.count() ) |
322 | emit stroke( inputStroke ); | 322 | emit stroke( inputStroke ); |
323 | inputStroke = 0; | 323 | inputStroke = 0; |
324 | } | 324 | } |
325 | } | 325 | } |
326 | 326 | ||
327 | void QIMPenWidget::mouseMoveEvent( QMouseEvent *e ) | 327 | void QIMPenWidget::mouseMoveEvent( QMouseEvent *e ) |
328 | { | 328 | { |
329 | if ( !readOnly && mode == Input ) { | 329 | if ( !readOnly && mode == Input ) { |
330 | int dx = QABS( e->pos().x() - lastPoint.x() ); | 330 | int dx = QABS( e->pos().x() - lastPoint.x() ); |
331 | int dy = QABS( e->pos().y() - lastPoint.y() ); | 331 | int dy = QABS( e->pos().y() - lastPoint.y() ); |
332 | if ( dx + dy > 1 ) { | 332 | if ( dx + dy > 1 ) { |
333 | if ( inputStroke->addPoint( e->pos() ) ) { | 333 | if ( inputStroke->addPoint( e->pos() ) ) { |
334 | QPainter paint( this ); | 334 | QPainter paint( this ); |
335 | paint.setPen( Qt::black ); | 335 | paint.setPen( Qt::black ); |
336 | paint.setBrush( Qt::black ); | 336 | paint.setBrush( Qt::black ); |
337 | const QArray<QIMPenGlyphLink> &chain = inputStroke->chain(); | 337 | const QArray<QIMPenGlyphLink> &chain = inputStroke->chain(); |
338 | QPoint p( e->pos() ); | 338 | QPoint p( e->pos() ); |
339 | for ( int i = (int)chain.count()-1; i >= 0; i-- ) { | 339 | for ( int i = (int)chain.count()-1; i >= 0; i-- ) { |
340 | paint.drawRect( p.x()-1, p.y()-1, 2, 2 ); | 340 | paint.drawRect( p.x()-1, p.y()-1, 2, 2 ); |
341 | p.rx() -= chain[i].dx; | 341 | p.rx() -= chain[i].dx; |
342 | p.ry() -= chain[i].dy; | 342 | p.ry() -= chain[i].dy; |
343 | if ( p == lastPoint ) | 343 | if ( p == lastPoint ) |
344 | break; | 344 | break; |
345 | } | 345 | } |
346 | 346 | ||
347 | /* ### use this when thick lines work properly on all devices | 347 | /* ### use this when thick lines work properly on all devices |
348 | paint.setPen( QPen( Qt::black, 2 ) ); | 348 | paint.setPen( QPen( Qt::black, 2 ) ); |
349 | paint.drawLine( lastPoint, e->pos() ); | 349 | paint.drawLine( lastPoint, e->pos() ); |
350 | */ | 350 | */ |
351 | } | 351 | } |
352 | lastPoint = e->pos(); | 352 | lastPoint = e->pos(); |
353 | } | 353 | } |
354 | } | 354 | } |
355 | } | 355 | } |
356 | 356 | ||
357 | void QIMPenWidget::paintEvent( QPaintEvent * ) | 357 | void QIMPenWidget::paintEvent( QPaintEvent * ) |
358 | { | 358 | { |
359 | QPainter paint( this ); | 359 | QPainter paint( this ); |
360 | 360 | ||
361 | // draw guidelines | 361 | // draw guidelines |
362 | paint.setPen( Qt::gray ); | 362 | paint.setPen( Qt::gray ); |
363 | paint.drawLine( 0, 0, width(), 0 ); | 363 | paint.drawLine( 0, 0, width(), 0 ); |
364 | int y = height() / 3; | 364 | int y = height() / 3; |
365 | paint.drawLine( 0, y, width(), y ); | 365 | paint.drawLine( 0, y, width(), y ); |
366 | y *= 2; | 366 | y *= 2; |
367 | paint.setPen( blue ); | 367 | paint.setPen( blue ); |
368 | paint.drawLine( 0, y, width(), y ); | 368 | paint.drawLine( 0, y, width(), y ); |
369 | paint.setPen( Qt::gray ); | 369 | paint.setPen( Qt::gray ); |
370 | 370 | ||
371 | if ( !charSets.count() ) | 371 | if ( !charSets.count() ) |
372 | return; | 372 | return; |
373 | 373 | ||
374 | // draw the character set titles | 374 | // draw the character set titles |
375 | QFont selFont( "helvetica", 8, QFont::Bold ); | 375 | QFont selFont( "helvetica", 8, QFont::Bold ); |
376 | QFont font( "helvetica", 8 ); | 376 | QFont font( "helvetica", 8 ); |
377 | CharSetEntryIterator it( charSets ); | 377 | CharSetEntryIterator it( charSets ); |
378 | int spos = 0; | 378 | int spos = 0; |
379 | for ( ; it.current(); ++it ) { | 379 | for ( ; it.current(); ++it ) { |
380 | int setWidth = width() * it.current()->stretch / totalStretch; | 380 | int setWidth = width() * it.current()->stretch / totalStretch; |
381 | spos += setWidth; | 381 | spos += setWidth; |
382 | if ( it.current() != charSets.getLast() ) { | 382 | if ( it.current() != charSets.getLast() ) { |
383 | paint.drawLine( spos, 0, spos, 5 ); | 383 | paint.drawLine( spos, 0, spos, 5 ); |
384 | paint.drawLine( spos, height()-1, spos, height()-6 ); | 384 | paint.drawLine( spos, height()-1, spos, height()-6 ); |
385 | } | 385 | } |
386 | paint.setFont( font ); | 386 | paint.setFont( font ); |
387 | int w = paint.fontMetrics().width( it.current()->cs->title() ); | 387 | int w = paint.fontMetrics().width( it.current()->cs->title() ); |
388 | int tpos = spos - setWidth / 2; | 388 | int tpos = spos - setWidth / 2; |
389 | paint.drawText( tpos - w/2, 0, w, 12, QPainter::AlignCenter, | 389 | paint.drawText( tpos - w/2, 0, w, 12, QPainter::AlignCenter, |
390 | it.current()->cs->title() ); | 390 | it.current()->cs->title() ); |
391 | } | 391 | } |
392 | 392 | ||
393 | // draw any character that should be displayed when repainted. | 393 | // draw any character that should be displayed when repainted. |
394 | QPoint off; | 394 | QPoint off; |
395 | const QIMPenStrokeList *stk = 0; | 395 | const QIMPenStrokeList *stk = 0; |
396 | if ( outputChar && mode == Waiting ) { | 396 | if ( outputChar && mode == Waiting ) { |
397 | stk = &outputChar->penStrokes(); | 397 | stk = &outputChar->penStrokes(); |
398 | QPoint p( outputChar->startingPoint() ); | 398 | QPoint p( outputChar->startingPoint() ); |
399 | QRect br( outputChar->boundingRect() ); | 399 | QRect br( outputChar->boundingRect() ); |
400 | p.setX( (width() - br.width()) / 2 + (p.x () - br.left()) ); | 400 | p.setX( (width() - br.width()) / 2 + (p.x () - br.left()) ); |
401 | off = p - outputChar->startingPoint(); | 401 | off = p - outputChar->startingPoint(); |
402 | } else if ( mode == Waiting ) { | 402 | } else if ( mode == Waiting ) { |
403 | stk = &strokes; | 403 | stk = &strokes; |
404 | strokeColor = gray; | 404 | strokeColor = gray; |
405 | } | 405 | } |
406 | 406 | ||
407 | if ( stk && !stk->isEmpty() ) { | 407 | if ( stk && !stk->isEmpty() ) { |
408 | paint.setPen( strokeColor ); | 408 | paint.setPen( strokeColor ); |
409 | paint.setBrush( strokeColor ); | 409 | paint.setBrush( strokeColor ); |
410 | QIMPenStrokeIterator it( *stk ); | 410 | QIMPenStrokeIterator it( *stk ); |
411 | while ( it.current() ) { | 411 | while ( it.current() ) { |
412 | QPoint p = it.current()->startingPoint() + off; | 412 | QPoint p = it.current()->startingPoint() + off; |
413 | paint.drawRect( p.x()-1, p.y()-1, 2, 2 ); | 413 | paint.drawRect( p.x()-1, p.y()-1, 2, 2 ); |
414 | const QArray<QIMPenGlyphLink> &chain = it.current()->chain(); | 414 | const QArray<QIMPenGlyphLink> &chain = it.current()->chain(); |
415 | for ( unsigned i = 0; i < chain.count(); i++ ) { | 415 | for ( unsigned i = 0; i < chain.count(); i++ ) { |
416 | p.rx() += chain[i].dx; | 416 | p.rx() += chain[i].dx; |
417 | p.ry() += chain[i].dy; | 417 | p.ry() += chain[i].dy; |
418 | paint.drawRect( p.x()-1, p.y()-1, 2, 2 ); | 418 | paint.drawRect( p.x()-1, p.y()-1, 2, 2 ); |
419 | } | 419 | } |
420 | ++it; | 420 | ++it; |
421 | if ( it.atLast() && mode == Waiting ) | 421 | if ( it.atLast() && mode == Waiting ) |
422 | strokeColor = black; | 422 | strokeColor = black; |
423 | } | 423 | } |
424 | } | 424 | } |
425 | 425 | ||
426 | dirtyRect = QRect(); | 426 | dirtyRect = QRect(); |
427 | 427 | ||
428 | // debug | 428 | // debug |
429 | /* | 429 | /* |
430 | if ( input ) { | 430 | if ( input ) { |
431 | QArray<int> sig = input->sig(); | 431 | QArray<int> sig = input->sig(); |
432 | for ( unsigned i = 0; i < sig.count(); i++ ) { | 432 | for ( unsigned i = 0; i < sig.count(); i++ ) { |
433 | paint.drawPoint( 200 + i, height()/2 - sig[i] / 8 ); | 433 | paint.drawPoint( 200 + i, height()/2 - sig[i] / 8 ); |
434 | } | 434 | } |
435 | } | 435 | } |
436 | */ | 436 | */ |
437 | } | 437 | } |
438 | 438 | ||
439 | void QIMPenWidget::resizeEvent( QResizeEvent *e ) | 439 | void QIMPenWidget::resizeEvent( QResizeEvent *e ) |
440 | { | 440 | { |
441 | if ( mode == Output ) | 441 | if ( mode == Output ) |
442 | showCharacter( outputChar, 0 ); | 442 | showCharacter( outputChar, 0 ); |
443 | 443 | ||
444 | QWidget::resizeEvent( e ); | 444 | QWidget::resizeEvent( e ); |
445 | } | 445 | } |
446 | 446 | ||
diff --git a/inputmethods/handwriting/qimpenwidget.h b/inputmethods/handwriting/qimpenwidget.h index 98d7f5c..d156554 100644 --- a/inputmethods/handwriting/qimpenwidget.h +++ b/inputmethods/handwriting/qimpenwidget.h | |||
@@ -1,88 +1,88 @@ | |||
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 <qwidget.h> | 21 | #include <qwidget.h> |
22 | #include <qlist.h> | 22 | #include <qlist.h> |
23 | #include "qimpenchar.h" | 23 | #include "qimpenchar.h" |
24 | 24 | ||
25 | class QIMPenWidget : public QWidget | 25 | class QIMPenWidget : public QWidget |
26 | { | 26 | { |
27 | Q_OBJECT | 27 | Q_OBJECT |
28 | public: | 28 | public: |
29 | QIMPenWidget( QWidget *parent ); | 29 | QIMPenWidget( QWidget *parent ); |
30 | 30 | ||
31 | void clear(); | 31 | void clear(); |
32 | void greyStroke(); | 32 | void greyStroke(); |
33 | void setReadOnly( bool r ) { readOnly = r; } | 33 | void setReadOnly( bool r ) { readOnly = r; } |
34 | 34 | ||
35 | void insertCharSet( QIMPenCharSet *cs, int stretch=1, int pos=-1 ); | 35 | void insertCharSet( QIMPenCharSet *cs, int stretch=1, int pos=-1 ); |
36 | void removeCharSet( int ); | 36 | void removeCharSet( int ); |
37 | void changeCharSet( QIMPenCharSet *cs, int pos ); | 37 | void changeCharSet( QIMPenCharSet *cs, int pos ); |
38 | void clearCharSets(); | 38 | void clearCharSets(); |
39 | void showCharacter( QIMPenChar *, int speed = 10 ); | 39 | void showCharacter( QIMPenChar *, int speed = 10 ); |
40 | virtual QSize sizeHint(); | 40 | virtual QSize sizeHint() const; |
41 | 41 | ||
42 | public slots: | 42 | public slots: |
43 | void removeStroke(); | 43 | void removeStroke(); |
44 | 44 | ||
45 | signals: | 45 | signals: |
46 | void changeCharSet( QIMPenCharSet *cs ); | 46 | void changeCharSet( QIMPenCharSet *cs ); |
47 | void changeCharSet( int ); | 47 | void changeCharSet( int ); |
48 | void beginStroke(); | 48 | void beginStroke(); |
49 | void stroke( QIMPenStroke *ch ); | 49 | void stroke( QIMPenStroke *ch ); |
50 | 50 | ||
51 | protected slots: | 51 | protected slots: |
52 | void timeout(); | 52 | void timeout(); |
53 | 53 | ||
54 | protected: | 54 | protected: |
55 | enum Mode { Waiting, Input, Output }; | 55 | enum Mode { Waiting, Input, Output }; |
56 | bool selectSet( QPoint ); | 56 | bool selectSet( QPoint ); |
57 | virtual void mousePressEvent( QMouseEvent *e ); | 57 | virtual void mousePressEvent( QMouseEvent *e ); |
58 | virtual void mouseReleaseEvent( QMouseEvent *e ); | 58 | virtual void mouseReleaseEvent( QMouseEvent *e ); |
59 | virtual void mouseMoveEvent( QMouseEvent *e ); | 59 | virtual void mouseMoveEvent( QMouseEvent *e ); |
60 | virtual void paintEvent( QPaintEvent *e ); | 60 | virtual void paintEvent( QPaintEvent *e ); |
61 | virtual void resizeEvent( QResizeEvent *e ); | 61 | virtual void resizeEvent( QResizeEvent *e ); |
62 | 62 | ||
63 | struct CharSetEntry { | 63 | struct CharSetEntry { |
64 | QIMPenCharSet *cs; | 64 | QIMPenCharSet *cs; |
65 | int stretch; | 65 | int stretch; |
66 | }; | 66 | }; |
67 | typedef QList<CharSetEntry> CharSetEntryList; | 67 | typedef QList<CharSetEntry> CharSetEntryList; |
68 | typedef QListIterator<CharSetEntry> CharSetEntryIterator; | 68 | typedef QListIterator<CharSetEntry> CharSetEntryIterator; |
69 | 69 | ||
70 | protected: | 70 | protected: |
71 | Mode mode; | 71 | Mode mode; |
72 | bool autoHide; | 72 | bool autoHide; |
73 | bool readOnly; | 73 | bool readOnly; |
74 | QPoint lastPoint; | 74 | QPoint lastPoint; |
75 | unsigned pointIndex; | 75 | unsigned pointIndex; |
76 | int strokeIndex; | 76 | int strokeIndex; |
77 | int currCharSet; | 77 | int currCharSet; |
78 | QTimer *timer; | 78 | QTimer *timer; |
79 | QColor strokeColor; | 79 | QColor strokeColor; |
80 | QRect dirtyRect; | 80 | QRect dirtyRect; |
81 | QIMPenChar *outputChar; | 81 | QIMPenChar *outputChar; |
82 | QIMPenStroke *outputStroke; | 82 | QIMPenStroke *outputStroke; |
83 | QIMPenStroke *inputStroke; | 83 | QIMPenStroke *inputStroke; |
84 | QIMPenStrokeList strokes; | 84 | QIMPenStrokeList strokes; |
85 | CharSetEntryList charSets; | 85 | CharSetEntryList charSets; |
86 | int totalStretch; | 86 | int totalStretch; |
87 | }; | 87 | }; |
88 | 88 | ||
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp index 55e47e2..2ebccd2 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp +++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | |||
@@ -1,664 +1,664 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) | 3 | Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) |
4 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> | 4 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> |
5 | .=l. | 5 | .=l. |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program 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 Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library 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 program is distributed in the hope that | 14 | .i_,=:_. -<s. This program 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 | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
19 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
20 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
21 | : = ...= . :.=- | 21 | : = ...= . :.=- |
22 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
23 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
24 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
25 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
26 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
27 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | /* OPIE */ | 30 | /* OPIE */ |
31 | #include <opie2/opimnotifymanager.h> | 31 | #include <opie2/opimnotifymanager.h> |
32 | #include <opie2/opimrecurrence.h> | 32 | #include <opie2/opimrecurrence.h> |
33 | #include <opie2/opimtimezone.h> | 33 | #include <opie2/opimtimezone.h> |
34 | #include <opie2/odatebookaccessbackend_xml.h> | 34 | #include <opie2/odatebookaccessbackend_xml.h> |
35 | #include <opie2/odebug.h> | 35 | #include <opie2/odebug.h> |
36 | 36 | ||
37 | #include <qtopia/global.h> | 37 | #include <qtopia/global.h> |
38 | #include <qtopia/stringutil.h> | 38 | #include <qtopia/stringutil.h> |
39 | #include <qtopia/timeconversion.h> | 39 | #include <qtopia/timeconversion.h> |
40 | 40 | ||
41 | /* QT */ | 41 | /* QT */ |
42 | #include <qasciidict.h> | 42 | #include <qasciidict.h> |
43 | #include <qfile.h> | 43 | #include <qfile.h> |
44 | 44 | ||
45 | /* STD */ | 45 | /* STD */ |
46 | #include <errno.h> | 46 | #include <errno.h> |
47 | #include <fcntl.h> | 47 | #include <fcntl.h> |
48 | 48 | ||
49 | #include <stdio.h> | 49 | #include <stdio.h> |
50 | #include <stdlib.h> | 50 | #include <stdlib.h> |
51 | 51 | ||
52 | #include <sys/types.h> | 52 | #include <sys/types.h> |
53 | #include <sys/mman.h> | 53 | #include <sys/mman.h> |
54 | #include <sys/stat.h> | 54 | #include <sys/stat.h> |
55 | 55 | ||
56 | #include <unistd.h> | 56 | #include <unistd.h> |
57 | 57 | ||
58 | 58 | ||
59 | using namespace Opie; | 59 | using namespace Opie; |
60 | 60 | ||
61 | namespace { | 61 | namespace { |
62 | // FROM TT again | 62 | // FROM TT again |
63 | char *strstrlen(const char *haystack, int hLen, const char* needle, int nLen) | 63 | char *strstrlen(const char *haystack, int hLen, const char* needle, int nLen) |
64 | { | 64 | { |
65 | char needleChar; | 65 | char needleChar; |
66 | char haystackChar; | 66 | char haystackChar; |
67 | if (!needle || !haystack || !hLen || !nLen) | 67 | if (!needle || !haystack || !hLen || !nLen) |
68 | return 0; | 68 | return 0; |
69 | 69 | ||
70 | const char* hsearch = haystack; | 70 | const char* hsearch = haystack; |
71 | 71 | ||
72 | if ((needleChar = *needle++) != 0) { | 72 | if ((needleChar = *needle++) != 0) { |
73 | nLen--; //(to make up for needle++) | 73 | nLen--; //(to make up for needle++) |
74 | do { | 74 | do { |
75 | do { | 75 | do { |
76 | if ((haystackChar = *hsearch++) == 0) | 76 | if ((haystackChar = *hsearch++) == 0) |
77 | return (0); | 77 | return (0); |
78 | if (hsearch >= haystack + hLen) | 78 | if (hsearch >= haystack + hLen) |
79 | return (0); | 79 | return (0); |
80 | } while (haystackChar != needleChar); | 80 | } while (haystackChar != needleChar); |
81 | } while (strncmp(hsearch, needle, QMIN(hLen - (hsearch - haystack), nLen)) != 0); | 81 | } while (strncmp(hsearch, needle, QMIN(hLen - (hsearch - haystack), nLen)) != 0); |
82 | hsearch--; | 82 | hsearch--; |
83 | } | 83 | } |
84 | return ((char *)hsearch); | 84 | return ((char *)hsearch); |
85 | } | 85 | } |
86 | } | 86 | } |
87 | 87 | ||
88 | namespace { | 88 | namespace { |
89 | time_t start, end, created, rp_end; | 89 | time_t start, end, created, rp_end; |
90 | OPimRecurrence* rec; | 90 | OPimRecurrence* rec; |
91 | static OPimRecurrence* recur() { | 91 | static OPimRecurrence* recur() { |
92 | if (!rec) | 92 | if (!rec) |
93 | rec = new OPimRecurrence; | 93 | rec = new OPimRecurrence; |
94 | 94 | ||
95 | return rec; | 95 | return rec; |
96 | } | 96 | } |
97 | int alarmTime; | 97 | int alarmTime; |
98 | int snd; | 98 | int snd; |
99 | enum Attribute{ | 99 | enum Attribute{ |
100 | FDescription = 0, | 100 | FDescription = 0, |
101 | FLocation, | 101 | FLocation, |
102 | FCategories, | 102 | FCategories, |
103 | FUid, | 103 | FUid, |
104 | FType, | 104 | FType, |
105 | FAlarm, | 105 | FAlarm, |
106 | FSound, | 106 | FSound, |
107 | FRType, | 107 | FRType, |
108 | FRWeekdays, | 108 | FRWeekdays, |
109 | FRPosition, | 109 | FRPosition, |
110 | FRFreq, | 110 | FRFreq, |
111 | FRHasEndDate, | 111 | FRHasEndDate, |
112 | FREndDate, | 112 | FREndDate, |
113 | FRStart, | 113 | FRStart, |
114 | FREnd, | 114 | FREnd, |
115 | FNote, | 115 | FNote, |
116 | FCreated, // Should't this be called FRCreated ? | 116 | FCreated, // Should't this be called FRCreated ? |
117 | FTimeZone, | 117 | FTimeZone, |
118 | FRecParent, | 118 | FRecParent, |
119 | FRecChildren, | 119 | FRecChildren, |
120 | FExceptions | 120 | FExceptions |
121 | }; | 121 | }; |
122 | 122 | ||
123 | // FIXME: Use OPimEvent::toMap() here !! (eilers) | 123 | // FIXME: Use OPimEvent::toMap() here !! (eilers) |
124 | static void save( const OPimEvent& ev, QString& buf ) { | 124 | static void save( const OPimEvent& ev, QString& buf ) { |
125 | buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; | 125 | buf += " description=\"" + Qtopia::escapeString(ev.description() ) + "\""; |
126 | if (!ev.location().isEmpty() ) | 126 | if (!ev.location().isEmpty() ) |
127 | buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; | 127 | buf += " location=\"" + Qtopia::escapeString(ev.location() ) + "\""; |
128 | 128 | ||
129 | if (!ev.categories().isEmpty() ) | 129 | if (!ev.categories().isEmpty() ) |
130 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; | 130 | buf += " categories=\""+ Qtopia::escapeString( Qtopia::Record::idsToString( ev.categories() ) ) + "\""; |
131 | 131 | ||
132 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; | 132 | buf += " uid=\"" + QString::number( ev.uid() ) + "\""; |
133 | 133 | ||
134 | if (ev.isAllDay() ) | 134 | if (ev.isAllDay() ) |
135 | buf += " type=\"AllDay\""; // is that all ?? (eilers) | 135 | buf += " type=\"AllDay\""; // is that all ?? (eilers) |
136 | 136 | ||
137 | if (ev.hasNotifiers() ) { | 137 | if (ev.hasNotifiers() ) { |
138 | OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first | 138 | OPimAlarm alarm = ev.notifiers().alarms()[0]; // take only the first |
139 | int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; | 139 | int minutes = alarm.dateTime().secsTo( ev.startDateTime() ) / 60; |
140 | buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; | 140 | buf += " alarm=\"" + QString::number(minutes) + "\" sound=\""; |
141 | if ( alarm.sound() == OPimAlarm::Loud ) | 141 | if ( alarm.sound() == OPimAlarm::Loud ) |
142 | buf += "loud"; | 142 | buf += "loud"; |
143 | else | 143 | else |
144 | buf += "silent"; | 144 | buf += "silent"; |
145 | buf += "\""; | 145 | buf += "\""; |
146 | } | 146 | } |
147 | if ( ev.hasRecurrence() ) { | 147 | if ( ev.hasRecurrence() ) { |
148 | buf += ev.recurrence().toString(); | 148 | buf += ev.recurrence().toString(); |
149 | } | 149 | } |
150 | 150 | ||
151 | /* | 151 | /* |
152 | * fscking timezones :) well, we'll first convert | 152 | * fscking timezones :) well, we'll first convert |
153 | * the QDateTime to a QDateTime in UTC time | 153 | * the QDateTime to a QDateTime in UTC time |
154 | * and then we'll create a nice time_t | 154 | * and then we'll create a nice time_t |
155 | */ | 155 | */ |
156 | OPimTimeZone zone( (ev.timeZone().isEmpty()||ev.isAllDay()) ? OPimTimeZone::utc() : OPimTimeZone::current() ); | 156 | OPimTimeZone zone( (ev.timeZone().isEmpty()||ev.isAllDay()) ? OPimTimeZone::utc() : OPimTimeZone::current() ); |
157 | buf += " start=\"" + QString::number( zone.fromDateTime( ev.startDateTime())) + "\""; | 157 | buf += " start=\"" + QString::number( zone.fromDateTime( ev.startDateTime())) + "\""; |
158 | buf += " end=\"" + QString::number( zone.fromDateTime( ev.endDateTime() )) + "\""; | 158 | buf += " end=\"" + QString::number( zone.fromDateTime( ev.endDateTime() )) + "\""; |
159 | if (!ev.note().isEmpty() ) { | 159 | if (!ev.note().isEmpty() ) { |
160 | buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; | 160 | buf += " note=\"" + Qtopia::escapeString( ev.note() ) + "\""; |
161 | } | 161 | } |
162 | 162 | ||
163 | /* | 163 | /* |
164 | * Don't save a timezone if AllDay Events | 164 | * Don't save a timezone if AllDay Events |
165 | * as they're UTC only anyway | 165 | * as they're UTC only anyway |
166 | */ | 166 | */ |
167 | if (!ev.isAllDay() ) { | 167 | if (!ev.isAllDay() ) { |
168 | 168 | ||
169 | buf += " timezone=\""; | 169 | buf += " timezone=\""; |
170 | if ( ev.timeZone().isEmpty() ) | 170 | if ( ev.timeZone().isEmpty() ) |
171 | buf += "None"; | 171 | buf += "None"; |
172 | else | 172 | else |
173 | buf += ev.timeZone(); | 173 | buf += ev.timeZone(); |
174 | buf += "\""; | 174 | buf += "\""; |
175 | } | 175 | } |
176 | 176 | ||
177 | if (ev.parent() != 0 ) { | 177 | if (ev.parent() != 0 ) { |
178 | buf += " recparent=\""+QString::number(ev.parent() )+"\""; | 178 | buf += " recparent=\""+QString::number(ev.parent() )+"\""; |
179 | } | 179 | } |
180 | 180 | ||
181 | if (ev.children().count() != 0 ) { | 181 | if (ev.children().count() != 0 ) { |
182 | QArray<int> children = ev.children(); | 182 | QArray<int> children = ev.children(); |
183 | buf += " recchildren=\""; | 183 | buf += " recchildren=\""; |
184 | for ( uint i = 0; i < children.count(); i++ ) { | 184 | for ( uint i = 0; i < children.count(); i++ ) { |
185 | if ( i != 0 ) buf += " "; | 185 | if ( i != 0 ) buf += " "; |
186 | buf += QString::number( children[i] ); | 186 | buf += QString::number( children[i] ); |
187 | } | 187 | } |
188 | buf+= "\""; | 188 | buf+= "\""; |
189 | } | 189 | } |
190 | 190 | ||
191 | // skip custom writing | 191 | // skip custom writing |
192 | } | 192 | } |
193 | 193 | ||
194 | static bool saveEachEvent( const QMap<int, OPimEvent>& list, QFile& file ) { | 194 | static bool saveEachEvent( const QMap<int, OPimEvent>& list, QFile& file ) { |
195 | QMap<int, OPimEvent>::ConstIterator it; | 195 | QMap<int, OPimEvent>::ConstIterator it; |
196 | QString buf; | 196 | QString buf; |
197 | QCString str; | 197 | QCString str; |
198 | int total_written; | 198 | int total_written; |
199 | for ( it = list.begin(); it != list.end(); ++it ) { | 199 | for ( it = list.begin(); it != list.end(); ++it ) { |
200 | buf = "<event"; | 200 | buf = "<event"; |
201 | save( it.data(), buf ); | 201 | save( it.data(), buf ); |
202 | buf += " />\n"; | 202 | buf += " />\n"; |
203 | str = buf.utf8(); | 203 | str = buf.utf8(); |
204 | 204 | ||
205 | total_written = file.writeBlock(str.data(), str.length() ); | 205 | total_written = file.writeBlock(str.data(), str.length() ); |
206 | if ( total_written != int(str.length() ) ) | 206 | if ( total_written != int(str.length() ) ) |
207 | return false; | 207 | return false; |
208 | } | 208 | } |
209 | return true; | 209 | return true; |
210 | } | 210 | } |
211 | } | 211 | } |
212 | 212 | ||
213 | namespace Opie { | 213 | namespace Opie { |
214 | ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , | 214 | ODateBookAccessBackend_XML::ODateBookAccessBackend_XML( const QString& , |
215 | const QString& fileName ) | 215 | const QString& fileName ) |
216 | : ODateBookAccessBackend() { | 216 | : ODateBookAccessBackend() { |
217 | m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; | 217 | m_name = fileName.isEmpty() ? Global::applicationFileName( "datebook", "datebook.xml" ) : fileName; |
218 | m_changed = false; | 218 | m_changed = false; |
219 | } | 219 | } |
220 | ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { | 220 | ODateBookAccessBackend_XML::~ODateBookAccessBackend_XML() { |
221 | } | 221 | } |
222 | bool ODateBookAccessBackend_XML::load() { | 222 | bool ODateBookAccessBackend_XML::load() { |
223 | return loadFile(); | 223 | return loadFile(); |
224 | } | 224 | } |
225 | bool ODateBookAccessBackend_XML::reload() { | 225 | bool ODateBookAccessBackend_XML::reload() { |
226 | clear(); | 226 | clear(); |
227 | return load(); | 227 | return load(); |
228 | } | 228 | } |
229 | bool ODateBookAccessBackend_XML::save() { | 229 | bool ODateBookAccessBackend_XML::save() { |
230 | if (!m_changed) return true; | 230 | if (!m_changed) return true; |
231 | 231 | ||
232 | int total_written; | 232 | int total_written; |
233 | QString strFileNew = m_name + ".new"; | 233 | QString strFileNew = m_name + ".new"; |
234 | 234 | ||
235 | QFile f( strFileNew ); | 235 | QFile f( strFileNew ); |
236 | if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; | 236 | if (!f.open( IO_WriteOnly | IO_Raw ) ) return false; |
237 | 237 | ||
238 | QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); | 238 | QString buf( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ); |
239 | buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; | 239 | buf += "<!DOCTYPE DATEBOOK><DATEBOOK>\n"; |
240 | buf += "<events>\n"; | 240 | buf += "<events>\n"; |
241 | QCString str = buf.utf8(); | 241 | QCString str = buf.utf8(); |
242 | total_written = f.writeBlock( str.data(), str.length() ); | 242 | total_written = f.writeBlock( str.data(), str.length() ); |
243 | if ( total_written != int(str.length() ) ) { | 243 | if ( total_written != int(str.length() ) ) { |
244 | f.close(); | 244 | f.close(); |
245 | QFile::remove( strFileNew ); | 245 | QFile::remove( strFileNew ); |
246 | return false; | 246 | return false; |
247 | } | 247 | } |
248 | 248 | ||
249 | if (!saveEachEvent( m_raw, f ) ) { | 249 | if (!saveEachEvent( m_raw, f ) ) { |
250 | f.close(); | 250 | f.close(); |
251 | QFile::remove( strFileNew ); | 251 | QFile::remove( strFileNew ); |
252 | return false; | 252 | return false; |
253 | } | 253 | } |
254 | if (!saveEachEvent( m_rep, f ) ) { | 254 | if (!saveEachEvent( m_rep, f ) ) { |
255 | f.close(); | 255 | f.close(); |
256 | QFile::remove( strFileNew ); | 256 | QFile::remove( strFileNew ); |
257 | return false; | 257 | return false; |
258 | } | 258 | } |
259 | 259 | ||
260 | buf = "</events>\n</DATEBOOK>\n"; | 260 | buf = "</events>\n</DATEBOOK>\n"; |
261 | str = buf.utf8(); | 261 | str = buf.utf8(); |
262 | total_written = f.writeBlock( str.data(), str.length() ); | 262 | total_written = f.writeBlock( str.data(), str.length() ); |
263 | if ( total_written != int(str.length() ) ) { | 263 | if ( total_written != int(str.length() ) ) { |
264 | f.close(); | 264 | f.close(); |
265 | QFile::remove( strFileNew ); | 265 | QFile::remove( strFileNew ); |
266 | return false; | 266 | return false; |
267 | } | 267 | } |
268 | f.close(); | 268 | f.close(); |
269 | 269 | ||
270 | if ( ::rename( strFileNew, m_name ) < 0 ) { | 270 | if ( ::rename( strFileNew, m_name ) < 0 ) { |
271 | QFile::remove( strFileNew ); | 271 | QFile::remove( strFileNew ); |
272 | return false; | 272 | return false; |
273 | } | 273 | } |
274 | 274 | ||
275 | m_changed = false; | 275 | m_changed = false; |
276 | return true; | 276 | return true; |
277 | } | 277 | } |
278 | QArray<int> ODateBookAccessBackend_XML::allRecords()const { | 278 | QArray<int> ODateBookAccessBackend_XML::allRecords()const { |
279 | QArray<int> ints( m_raw.count()+ m_rep.count() ); | 279 | QArray<int> ints( m_raw.count()+ m_rep.count() ); |
280 | uint i = 0; | 280 | uint i = 0; |
281 | QMap<int, OPimEvent>::ConstIterator it; | 281 | QMap<int, OPimEvent>::ConstIterator it; |
282 | 282 | ||
283 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { | 283 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { |
284 | ints[i] = it.key(); | 284 | ints[i] = it.key(); |
285 | i++; | 285 | i++; |
286 | } | 286 | } |
287 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { | 287 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { |
288 | ints[i] = it.key(); | 288 | ints[i] = it.key(); |
289 | i++; | 289 | i++; |
290 | } | 290 | } |
291 | 291 | ||
292 | return ints; | 292 | return ints; |
293 | } | 293 | } |
294 | QArray<int> ODateBookAccessBackend_XML::queryByExample(const OPimEvent&, int, const QDateTime& ) { | 294 | QArray<int> ODateBookAccessBackend_XML::queryByExample(const OPimEvent&, int, const QDateTime& ) const { |
295 | return QArray<int>(); | 295 | return QArray<int>(); |
296 | } | 296 | } |
297 | void ODateBookAccessBackend_XML::clear() { | 297 | void ODateBookAccessBackend_XML::clear() { |
298 | m_changed = true; | 298 | m_changed = true; |
299 | m_raw.clear(); | 299 | m_raw.clear(); |
300 | m_rep.clear(); | 300 | m_rep.clear(); |
301 | } | 301 | } |
302 | OPimEvent ODateBookAccessBackend_XML::find( int uid ) const{ | 302 | OPimEvent ODateBookAccessBackend_XML::find( int uid ) const{ |
303 | if ( m_raw.contains( uid ) ) | 303 | if ( m_raw.contains( uid ) ) |
304 | return m_raw[uid]; | 304 | return m_raw[uid]; |
305 | else | 305 | else |
306 | return m_rep[uid]; | 306 | return m_rep[uid]; |
307 | } | 307 | } |
308 | bool ODateBookAccessBackend_XML::add( const OPimEvent& ev ) { | 308 | bool ODateBookAccessBackend_XML::add( const OPimEvent& ev ) { |
309 | m_changed = true; | 309 | m_changed = true; |
310 | if (ev.hasRecurrence() ) | 310 | if (ev.hasRecurrence() ) |
311 | m_rep.insert( ev.uid(), ev ); | 311 | m_rep.insert( ev.uid(), ev ); |
312 | else | 312 | else |
313 | m_raw.insert( ev.uid(), ev ); | 313 | m_raw.insert( ev.uid(), ev ); |
314 | 314 | ||
315 | return true; | 315 | return true; |
316 | } | 316 | } |
317 | bool ODateBookAccessBackend_XML::remove( int uid ) { | 317 | bool ODateBookAccessBackend_XML::remove( int uid ) { |
318 | m_changed = true; | 318 | m_changed = true; |
319 | m_raw.remove( uid ); | 319 | m_raw.remove( uid ); |
320 | m_rep.remove( uid ); | 320 | m_rep.remove( uid ); |
321 | 321 | ||
322 | return true; | 322 | return true; |
323 | } | 323 | } |
324 | bool ODateBookAccessBackend_XML::replace( const OPimEvent& ev ) { | 324 | bool ODateBookAccessBackend_XML::replace( const OPimEvent& ev ) { |
325 | replace( ev.uid() ); // ??? Shouldn't this be "remove( ev.uid() ) ??? (eilers) | 325 | replace( ev.uid() ); // ??? Shouldn't this be "remove( ev.uid() ) ??? (eilers) |
326 | return add( ev ); | 326 | return add( ev ); |
327 | } | 327 | } |
328 | 328 | ||
329 | QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { | 329 | QArray<int> ODateBookAccessBackend_XML::rawRepeats()const { |
330 | QArray<int> ints( m_rep.count() ); | 330 | QArray<int> ints( m_rep.count() ); |
331 | uint i = 0; | 331 | uint i = 0; |
332 | QMap<int, OPimEvent>::ConstIterator it; | 332 | QMap<int, OPimEvent>::ConstIterator it; |
333 | 333 | ||
334 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { | 334 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) { |
335 | ints[i] = it.key(); | 335 | ints[i] = it.key(); |
336 | i++; | 336 | i++; |
337 | } | 337 | } |
338 | 338 | ||
339 | return ints; | 339 | return ints; |
340 | } | 340 | } |
341 | QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { | 341 | QArray<int> ODateBookAccessBackend_XML::nonRepeats()const { |
342 | QArray<int> ints( m_raw.count() ); | 342 | QArray<int> ints( m_raw.count() ); |
343 | uint i = 0; | 343 | uint i = 0; |
344 | QMap<int, OPimEvent>::ConstIterator it; | 344 | QMap<int, OPimEvent>::ConstIterator it; |
345 | 345 | ||
346 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { | 346 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) { |
347 | ints[i] = it.key(); | 347 | ints[i] = it.key(); |
348 | i++; | 348 | i++; |
349 | } | 349 | } |
350 | 350 | ||
351 | return ints; | 351 | return ints; |
352 | } | 352 | } |
353 | OPimEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats()const { | 353 | OPimEvent::ValueList ODateBookAccessBackend_XML::directNonRepeats()const { |
354 | OPimEvent::ValueList list; | 354 | OPimEvent::ValueList list; |
355 | QMap<int, OPimEvent>::ConstIterator it; | 355 | QMap<int, OPimEvent>::ConstIterator it; |
356 | for (it = m_raw.begin(); it != m_raw.end(); ++it ) | 356 | for (it = m_raw.begin(); it != m_raw.end(); ++it ) |
357 | list.append( it.data() ); | 357 | list.append( it.data() ); |
358 | 358 | ||
359 | return list; | 359 | return list; |
360 | } | 360 | } |
361 | OPimEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats()const { | 361 | OPimEvent::ValueList ODateBookAccessBackend_XML::directRawRepeats()const { |
362 | OPimEvent::ValueList list; | 362 | OPimEvent::ValueList list; |
363 | QMap<int, OPimEvent>::ConstIterator it; | 363 | QMap<int, OPimEvent>::ConstIterator it; |
364 | for (it = m_rep.begin(); it != m_rep.end(); ++it ) | 364 | for (it = m_rep.begin(); it != m_rep.end(); ++it ) |
365 | list.append( it.data() ); | 365 | list.append( it.data() ); |
366 | 366 | ||
367 | return list; | 367 | return list; |
368 | } | 368 | } |
369 | 369 | ||
370 | // FIXME: Use OPimEvent::fromMap() (eilers) | 370 | // FIXME: Use OPimEvent::fromMap() (eilers) |
371 | bool ODateBookAccessBackend_XML::loadFile() { | 371 | bool ODateBookAccessBackend_XML::loadFile() { |
372 | m_changed = false; | 372 | m_changed = false; |
373 | 373 | ||
374 | int fd = ::open( QFile::encodeName(m_name).data(), O_RDONLY ); | 374 | int fd = ::open( QFile::encodeName(m_name).data(), O_RDONLY ); |
375 | if ( fd < 0 ) return false; | 375 | if ( fd < 0 ) return false; |
376 | 376 | ||
377 | struct stat attribute; | 377 | struct stat attribute; |
378 | if ( ::fstat(fd, &attribute ) == -1 ) { | 378 | if ( ::fstat(fd, &attribute ) == -1 ) { |
379 | ::close( fd ); | 379 | ::close( fd ); |
380 | return false; | 380 | return false; |
381 | } | 381 | } |
382 | void* map_addr = ::mmap(NULL, attribute.st_size, PROT_READ, MAP_SHARED, fd, 0 ); | 382 | void* map_addr = ::mmap(NULL, attribute.st_size, PROT_READ, MAP_SHARED, fd, 0 ); |
383 | if ( map_addr == ( (caddr_t)-1) ) { | 383 | if ( map_addr == ( (caddr_t)-1) ) { |
384 | ::close( fd ); | 384 | ::close( fd ); |
385 | return false; | 385 | return false; |
386 | } | 386 | } |
387 | 387 | ||
388 | ::madvise( map_addr, attribute.st_size, MADV_SEQUENTIAL ); | 388 | ::madvise( map_addr, attribute.st_size, MADV_SEQUENTIAL ); |
389 | ::close( fd ); | 389 | ::close( fd ); |
390 | 390 | ||
391 | QAsciiDict<int> dict(FExceptions+1); | 391 | QAsciiDict<int> dict(FExceptions+1); |
392 | dict.setAutoDelete( true ); | 392 | dict.setAutoDelete( true ); |
393 | dict.insert( "description", new int(FDescription) ); | 393 | dict.insert( "description", new int(FDescription) ); |
394 | dict.insert( "location", new int(FLocation) ); | 394 | dict.insert( "location", new int(FLocation) ); |
395 | dict.insert( "categories", new int(FCategories) ); | 395 | dict.insert( "categories", new int(FCategories) ); |
396 | dict.insert( "uid", new int(FUid) ); | 396 | dict.insert( "uid", new int(FUid) ); |
397 | dict.insert( "type", new int(FType) ); | 397 | dict.insert( "type", new int(FType) ); |
398 | dict.insert( "alarm", new int(FAlarm) ); | 398 | dict.insert( "alarm", new int(FAlarm) ); |
399 | dict.insert( "sound", new int(FSound) ); | 399 | dict.insert( "sound", new int(FSound) ); |
400 | dict.insert( "rtype", new int(FRType) ); | 400 | dict.insert( "rtype", new int(FRType) ); |
401 | dict.insert( "rweekdays", new int(FRWeekdays) ); | 401 | dict.insert( "rweekdays", new int(FRWeekdays) ); |
402 | dict.insert( "rposition", new int(FRPosition) ); | 402 | dict.insert( "rposition", new int(FRPosition) ); |
403 | dict.insert( "rfreq", new int(FRFreq) ); | 403 | dict.insert( "rfreq", new int(FRFreq) ); |
404 | dict.insert( "rhasenddate", new int(FRHasEndDate) ); | 404 | dict.insert( "rhasenddate", new int(FRHasEndDate) ); |
405 | dict.insert( "enddt", new int(FREndDate) ); | 405 | dict.insert( "enddt", new int(FREndDate) ); |
406 | dict.insert( "start", new int(FRStart) ); | 406 | dict.insert( "start", new int(FRStart) ); |
407 | dict.insert( "end", new int(FREnd) ); | 407 | dict.insert( "end", new int(FREnd) ); |
408 | dict.insert( "note", new int(FNote) ); | 408 | dict.insert( "note", new int(FNote) ); |
409 | dict.insert( "created", new int(FCreated) ); // Shouldn't this be FRCreated ?? | 409 | dict.insert( "created", new int(FCreated) ); // Shouldn't this be FRCreated ?? |
410 | dict.insert( "recparent", new int(FRecParent) ); | 410 | dict.insert( "recparent", new int(FRecParent) ); |
411 | dict.insert( "recchildren", new int(FRecChildren) ); | 411 | dict.insert( "recchildren", new int(FRecChildren) ); |
412 | dict.insert( "exceptions", new int(FExceptions) ); | 412 | dict.insert( "exceptions", new int(FExceptions) ); |
413 | dict.insert( "timezone", new int(FTimeZone) ); | 413 | dict.insert( "timezone", new int(FTimeZone) ); |
414 | 414 | ||
415 | 415 | ||
416 | // initialiaze db hack | 416 | // initialiaze db hack |
417 | m_noTimeZone = true; | 417 | m_noTimeZone = true; |
418 | 418 | ||
419 | char* dt = (char*)map_addr; | 419 | char* dt = (char*)map_addr; |
420 | int len = attribute.st_size; | 420 | int len = attribute.st_size; |
421 | int i = 0; | 421 | int i = 0; |
422 | char* point; | 422 | char* point; |
423 | const char* collectionString = "<event "; | 423 | const char* collectionString = "<event "; |
424 | int strLen = ::strlen(collectionString); | 424 | int strLen = ::strlen(collectionString); |
425 | int *find; | 425 | int *find; |
426 | while ( ( point = ::strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0 ) { | 426 | while ( ( point = ::strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0 ) { |
427 | i = point -dt; | 427 | i = point -dt; |
428 | i+= strLen; | 428 | i+= strLen; |
429 | 429 | ||
430 | alarmTime = -1; | 430 | alarmTime = -1; |
431 | snd = 0; // silent | 431 | snd = 0; // silent |
432 | 432 | ||
433 | OPimEvent ev; | 433 | OPimEvent ev; |
434 | rec = 0; | 434 | rec = 0; |
435 | 435 | ||
436 | while ( TRUE ) { | 436 | while ( TRUE ) { |
437 | while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') ) | 437 | while ( i < len && (dt[i] == ' ' || dt[i] == '\n' || dt[i] == '\r') ) |
438 | ++i; | 438 | ++i; |
439 | if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') ) | 439 | if ( i >= len-2 || (dt[i] == '/' && dt[i+1] == '>') ) |
440 | break; | 440 | break; |
441 | 441 | ||
442 | 442 | ||
443 | // we have another attribute, read it. | 443 | // we have another attribute, read it. |
444 | int j = i; | 444 | int j = i; |
445 | while ( j < len && dt[j] != '=' ) | 445 | while ( j < len && dt[j] != '=' ) |
446 | ++j; | 446 | ++j; |
447 | QCString attr( dt+i, j-i+1); | 447 | QCString attr( dt+i, j-i+1); |
448 | 448 | ||
449 | i = ++j; // skip = | 449 | i = ++j; // skip = |
450 | 450 | ||
451 | // find the start of quotes | 451 | // find the start of quotes |
452 | while ( i < len && dt[i] != '"' ) | 452 | while ( i < len && dt[i] != '"' ) |
453 | ++i; | 453 | ++i; |
454 | j = ++i; | 454 | j = ++i; |
455 | 455 | ||
456 | bool haveUtf = FALSE; | 456 | bool haveUtf = FALSE; |
457 | bool haveEnt = FALSE; | 457 | bool haveEnt = FALSE; |
458 | while ( j < len && dt[j] != '"' ) { | 458 | while ( j < len && dt[j] != '"' ) { |
459 | if ( ((unsigned char)dt[j]) > 0x7f ) | 459 | if ( ((unsigned char)dt[j]) > 0x7f ) |
460 | haveUtf = TRUE; | 460 | haveUtf = TRUE; |
461 | if ( dt[j] == '&' ) | 461 | if ( dt[j] == '&' ) |
462 | haveEnt = TRUE; | 462 | haveEnt = TRUE; |
463 | ++j; | 463 | ++j; |
464 | } | 464 | } |
465 | if ( i == j ) { | 465 | if ( i == j ) { |
466 | // empty value | 466 | // empty value |
467 | i = j + 1; | 467 | i = j + 1; |
468 | continue; | 468 | continue; |
469 | } | 469 | } |
470 | 470 | ||
471 | QCString value( dt+i, j-i+1 ); | 471 | QCString value( dt+i, j-i+1 ); |
472 | i = j + 1; | 472 | i = j + 1; |
473 | 473 | ||
474 | QString str = (haveUtf ? QString::fromUtf8( value ) | 474 | QString str = (haveUtf ? QString::fromUtf8( value ) |
475 | : QString::fromLatin1( value ) ); | 475 | : QString::fromLatin1( value ) ); |
476 | if ( haveEnt ) | 476 | if ( haveEnt ) |
477 | str = Qtopia::plainString( str ); | 477 | str = Qtopia::plainString( str ); |
478 | 478 | ||
479 | /* | 479 | /* |
480 | * add key + value | 480 | * add key + value |
481 | */ | 481 | */ |
482 | find = dict[attr.data()]; | 482 | find = dict[attr.data()]; |
483 | if (!find) | 483 | if (!find) |
484 | ev.setCustomField( attr, str ); | 484 | ev.setCustomField( attr, str ); |
485 | else { | 485 | else { |
486 | setField( ev, *find, str ); | 486 | setField( ev, *find, str ); |
487 | } | 487 | } |
488 | } | 488 | } |
489 | /* time to finalize */ | 489 | /* time to finalize */ |
490 | finalizeRecord( ev ); | 490 | finalizeRecord( ev ); |
491 | delete rec; | 491 | delete rec; |
492 | m_noTimeZone = true; | 492 | m_noTimeZone = true; |
493 | } | 493 | } |
494 | ::munmap(map_addr, attribute.st_size ); | 494 | ::munmap(map_addr, attribute.st_size ); |
495 | m_changed = false; // changed during add | 495 | m_changed = false; // changed during add |
496 | 496 | ||
497 | return true; | 497 | return true; |
498 | } | 498 | } |
499 | 499 | ||
500 | // FIXME: Use OPimEvent::fromMap() which makes this obsolete.. (eilers) | 500 | // FIXME: Use OPimEvent::fromMap() which makes this obsolete.. (eilers) |
501 | void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { | 501 | void ODateBookAccessBackend_XML::finalizeRecord( OPimEvent& ev ) { |
502 | 502 | ||
503 | /* | 503 | /* |
504 | * quirk to import datebook files. They normally don't have a | 504 | * quirk to import datebook files. They normally don't have a |
505 | * timeZone attribute and we treat this as to use OPimTimeZone::current() | 505 | * timeZone attribute and we treat this as to use OPimTimeZone::current() |
506 | */ | 506 | */ |
507 | if (m_noTimeZone ) | 507 | if (m_noTimeZone ) |
508 | ev.setTimeZone( OPimTimeZone::current().timeZone() ); | 508 | ev.setTimeZone( OPimTimeZone::current().timeZone() ); |
509 | 509 | ||
510 | 510 | ||
511 | 511 | ||
512 | /* AllDay is alway in UTC */ | 512 | /* AllDay is alway in UTC */ |
513 | if ( ev.isAllDay() ) { | 513 | if ( ev.isAllDay() ) { |
514 | OPimTimeZone utc = OPimTimeZone::utc(); | 514 | OPimTimeZone utc = OPimTimeZone::utc(); |
515 | ev.setStartDateTime( utc.toDateTime( start ) ); | 515 | ev.setStartDateTime( utc.toDateTime( start ) ); |
516 | ev.setEndDateTime ( utc.toDateTime( end ) ); | 516 | ev.setEndDateTime ( utc.toDateTime( end ) ); |
517 | }else { | 517 | }else { |
518 | /* to current date time */ | 518 | /* to current date time */ |
519 | OPimTimeZone to_zone( ev.timeZone().isEmpty() ? OPimTimeZone::utc() : OPimTimeZone::current() ); | 519 | OPimTimeZone to_zone( ev.timeZone().isEmpty() ? OPimTimeZone::utc() : OPimTimeZone::current() ); |
520 | 520 | ||
521 | ev.setStartDateTime(to_zone.toDateTime( start)); | 521 | ev.setStartDateTime(to_zone.toDateTime( start)); |
522 | ev.setEndDateTime (to_zone.toDateTime( end)); | 522 | ev.setEndDateTime (to_zone.toDateTime( end)); |
523 | } | 523 | } |
524 | if ( rec && rec->doesRecur() ) { | 524 | if ( rec && rec->doesRecur() ) { |
525 | OPimTimeZone utc = OPimTimeZone::utc(); | 525 | OPimTimeZone utc = OPimTimeZone::utc(); |
526 | OPimRecurrence recu( *rec ); // call copy c'tor; | 526 | OPimRecurrence recu( *rec ); // call copy c'tor; |
527 | recu.setEndDate ( utc.toDateTime( rp_end ).date() ); | 527 | recu.setEndDate ( utc.toDateTime( rp_end ).date() ); |
528 | recu.setCreatedDateTime( utc.toDateTime( created ) ); | 528 | recu.setCreatedDateTime( utc.toDateTime( created ) ); |
529 | recu.setStart( ev.startDateTime().date() ); | 529 | recu.setStart( ev.startDateTime().date() ); |
530 | ev.setRecurrence( recu ); | 530 | ev.setRecurrence( recu ); |
531 | } | 531 | } |
532 | 532 | ||
533 | if (alarmTime != -1 ) { | 533 | if (alarmTime != -1 ) { |
534 | QDateTime dt = ev.startDateTime().addSecs( -1*alarmTime*60 ); | 534 | QDateTime dt = ev.startDateTime().addSecs( -1*alarmTime*60 ); |
535 | OPimAlarm al( snd , dt ); | 535 | OPimAlarm al( snd , dt ); |
536 | ev.notifiers().add( al ); | 536 | ev.notifiers().add( al ); |
537 | } | 537 | } |
538 | if ( m_raw.contains( ev.uid() ) || m_rep.contains( ev.uid() ) ) { | 538 | if ( m_raw.contains( ev.uid() ) || m_rep.contains( ev.uid() ) ) { |
539 | ev.setUid( 1 ); | 539 | ev.setUid( 1 ); |
540 | } | 540 | } |
541 | 541 | ||
542 | if ( ev.hasRecurrence() ) | 542 | if ( ev.hasRecurrence() ) |
543 | m_rep.insert( ev.uid(), ev ); | 543 | m_rep.insert( ev.uid(), ev ); |
544 | else | 544 | else |
545 | m_raw.insert( ev.uid(), ev ); | 545 | m_raw.insert( ev.uid(), ev ); |
546 | 546 | ||
547 | } | 547 | } |
548 | void ODateBookAccessBackend_XML::setField( OPimEvent& e, int id, const QString& value) { | 548 | void ODateBookAccessBackend_XML::setField( OPimEvent& e, int id, const QString& value) { |
549 | switch( id ) { | 549 | switch( id ) { |
550 | case FDescription: | 550 | case FDescription: |
551 | e.setDescription( value ); | 551 | e.setDescription( value ); |
552 | break; | 552 | break; |
553 | case FLocation: | 553 | case FLocation: |
554 | e.setLocation( value ); | 554 | e.setLocation( value ); |
555 | break; | 555 | break; |
556 | case FCategories: | 556 | case FCategories: |
557 | e.setCategories( e.idsFromString( value ) ); | 557 | e.setCategories( e.idsFromString( value ) ); |
558 | break; | 558 | break; |
559 | case FUid: | 559 | case FUid: |
560 | e.setUid( value.toInt() ); | 560 | e.setUid( value.toInt() ); |
561 | break; | 561 | break; |
562 | case FType: | 562 | case FType: |
563 | if ( value == "AllDay" ) { | 563 | if ( value == "AllDay" ) { |
564 | e.setAllDay( true ); | 564 | e.setAllDay( true ); |
565 | } | 565 | } |
566 | break; | 566 | break; |
567 | case FAlarm: | 567 | case FAlarm: |
568 | alarmTime = value.toInt(); | 568 | alarmTime = value.toInt(); |
569 | break; | 569 | break; |
570 | case FSound: | 570 | case FSound: |
571 | snd = value == "loud" ? OPimAlarm::Loud : OPimAlarm::Silent; | 571 | snd = value == "loud" ? OPimAlarm::Loud : OPimAlarm::Silent; |
572 | break; | 572 | break; |
573 | // recurrence stuff | 573 | // recurrence stuff |
574 | case FRType: | 574 | case FRType: |
575 | if ( value == "Daily" ) | 575 | if ( value == "Daily" ) |
576 | recur()->setType( OPimRecurrence::Daily ); | 576 | recur()->setType( OPimRecurrence::Daily ); |
577 | else if ( value == "Weekly" ) | 577 | else if ( value == "Weekly" ) |
578 | recur()->setType( OPimRecurrence::Weekly); | 578 | recur()->setType( OPimRecurrence::Weekly); |
579 | else if ( value == "MonthlyDay" ) | 579 | else if ( value == "MonthlyDay" ) |
580 | recur()->setType( OPimRecurrence::MonthlyDay ); | 580 | recur()->setType( OPimRecurrence::MonthlyDay ); |
581 | else if ( value == "MonthlyDate" ) | 581 | else if ( value == "MonthlyDate" ) |
582 | recur()->setType( OPimRecurrence::MonthlyDate ); | 582 | recur()->setType( OPimRecurrence::MonthlyDate ); |
583 | else if ( value == "Yearly" ) | 583 | else if ( value == "Yearly" ) |
584 | recur()->setType( OPimRecurrence::Yearly ); | 584 | recur()->setType( OPimRecurrence::Yearly ); |
585 | else | 585 | else |
586 | recur()->setType( OPimRecurrence::NoRepeat ); | 586 | recur()->setType( OPimRecurrence::NoRepeat ); |
587 | break; | 587 | break; |
588 | case FRWeekdays: | 588 | case FRWeekdays: |
589 | recur()->setDays( value.toInt() ); | 589 | recur()->setDays( value.toInt() ); |
590 | break; | 590 | break; |
591 | case FRPosition: | 591 | case FRPosition: |
592 | recur()->setPosition( value.toInt() ); | 592 | recur()->setPosition( value.toInt() ); |
593 | break; | 593 | break; |
594 | case FRFreq: | 594 | case FRFreq: |
595 | recur()->setFrequency( value.toInt() ); | 595 | recur()->setFrequency( value.toInt() ); |
596 | break; | 596 | break; |
597 | case FRHasEndDate: | 597 | case FRHasEndDate: |
598 | recur()->setHasEndDate( value.toInt() ); | 598 | recur()->setHasEndDate( value.toInt() ); |
599 | break; | 599 | break; |
600 | case FREndDate: { | 600 | case FREndDate: { |
601 | rp_end = (time_t) value.toLong(); | 601 | rp_end = (time_t) value.toLong(); |
602 | break; | 602 | break; |
603 | } | 603 | } |
604 | case FRStart: { | 604 | case FRStart: { |
605 | start = (time_t) value.toLong(); | 605 | start = (time_t) value.toLong(); |
606 | break; | 606 | break; |
607 | } | 607 | } |
608 | case FREnd: { | 608 | case FREnd: { |
609 | end = ( (time_t) value.toLong() ); | 609 | end = ( (time_t) value.toLong() ); |
610 | break; | 610 | break; |
611 | } | 611 | } |
612 | case FNote: | 612 | case FNote: |
613 | e.setNote( value ); | 613 | e.setNote( value ); |
614 | break; | 614 | break; |
615 | case FCreated: | 615 | case FCreated: |
616 | created = value.toInt(); | 616 | created = value.toInt(); |
617 | break; | 617 | break; |
618 | case FRecParent: | 618 | case FRecParent: |
619 | e.setParent( value.toInt() ); | 619 | e.setParent( value.toInt() ); |
620 | break; | 620 | break; |
621 | case FRecChildren:{ | 621 | case FRecChildren:{ |
622 | QStringList list = QStringList::split(' ', value ); | 622 | QStringList list = QStringList::split(' ', value ); |
623 | for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { | 623 | for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { |
624 | e.addChild( (*it).toInt() ); | 624 | e.addChild( (*it).toInt() ); |
625 | } | 625 | } |
626 | } | 626 | } |
627 | break; | 627 | break; |
628 | case FExceptions:{ | 628 | case FExceptions:{ |
629 | QStringList list = QStringList::split(' ', value ); | 629 | QStringList list = QStringList::split(' ', value ); |
630 | for (QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { | 630 | for (QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { |
631 | QDate date( (*it).left(4).toInt(), (*it).mid(4, 2).toInt(), (*it).right(2).toInt() ); | 631 | QDate date( (*it).left(4).toInt(), (*it).mid(4, 2).toInt(), (*it).right(2).toInt() ); |
632 | recur()->exceptions().append( date ); | 632 | recur()->exceptions().append( date ); |
633 | } | 633 | } |
634 | } | 634 | } |
635 | break; | 635 | break; |
636 | case FTimeZone: | 636 | case FTimeZone: |
637 | m_noTimeZone = false; | 637 | m_noTimeZone = false; |
638 | if ( value != "None" ) | 638 | if ( value != "None" ) |
639 | e.setTimeZone( value ); | 639 | e.setTimeZone( value ); |
640 | break; | 640 | break; |
641 | default: | 641 | default: |
642 | break; | 642 | break; |
643 | } | 643 | } |
644 | } | 644 | } |
645 | QArray<int> ODateBookAccessBackend_XML::matchRegexp( const QRegExp &r ) const | 645 | QArray<int> ODateBookAccessBackend_XML::matchRegexp( const QRegExp &r ) const |
646 | { | 646 | { |
647 | QArray<int> m_currentQuery( m_raw.count()+ m_rep.count() ); | 647 | QArray<int> m_currentQuery( m_raw.count()+ m_rep.count() ); |
648 | uint arraycounter = 0; | 648 | uint arraycounter = 0; |
649 | QMap<int, OPimEvent>::ConstIterator it; | 649 | QMap<int, OPimEvent>::ConstIterator it; |
650 | 650 | ||
651 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) | 651 | for ( it = m_raw.begin(); it != m_raw.end(); ++it ) |
652 | if ( it.data().match( r ) ) | 652 | if ( it.data().match( r ) ) |
653 | m_currentQuery[arraycounter++] = it.data().uid(); | 653 | m_currentQuery[arraycounter++] = it.data().uid(); |
654 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) | 654 | for ( it = m_rep.begin(); it != m_rep.end(); ++it ) |
655 | if ( it.data().match( r ) ) | 655 | if ( it.data().match( r ) ) |
656 | m_currentQuery[arraycounter++] = it.data().uid(); | 656 | m_currentQuery[arraycounter++] = it.data().uid(); |
657 | 657 | ||
658 | // Shrink to fit.. | 658 | // Shrink to fit.. |
659 | m_currentQuery.resize(arraycounter); | 659 | m_currentQuery.resize(arraycounter); |
660 | 660 | ||
661 | return m_currentQuery; | 661 | return m_currentQuery; |
662 | } | 662 | } |
663 | 663 | ||
664 | } | 664 | } |
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.h b/libopie2/opiepim/backend/odatebookaccessbackend_xml.h index cb19f76..7369c07 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.h +++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.h | |||
@@ -1,88 +1,88 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) | 3 | Copyright (C) Stefan Eilers (Eilers.Stefan@epost.de) |
4 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> | 4 | =. Copyright (C) The Opie Team <opie-devel@handhelds.org> |
5 | .=l. | 5 | .=l. |
6 | .>+-= | 6 | .>+-= |
7 | _;:, .> :=|. This program is free software; you can | 7 | _;:, .> :=|. This program 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 Library General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU Library 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 program is distributed in the hope that | 14 | .i_,=:_. -<s. This program 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 | 18 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
19 | ..}^=.= = ; Library General Public License for more | 19 | ..}^=.= = ; Library General Public License for more |
20 | ++= -. .` .: details. | 20 | ++= -. .` .: details. |
21 | : = ...= . :.=- | 21 | : = ...= . :.=- |
22 | -. .:....=;==+<; You should have received a copy of the GNU | 22 | -. .:....=;==+<; You should have received a copy of the GNU |
23 | -_. . . )=. = Library General Public License along with | 23 | -_. . . )=. = Library General Public License along with |
24 | -- :-=` this library; see the file COPYING.LIB. | 24 | -- :-=` this library; see the file COPYING.LIB. |
25 | If not, write to the Free Software Foundation, | 25 | If not, write to the Free Software Foundation, |
26 | Inc., 59 Temple Place - Suite 330, | 26 | Inc., 59 Temple Place - Suite 330, |
27 | Boston, MA 02111-1307, USA. | 27 | Boston, MA 02111-1307, USA. |
28 | */ | 28 | */ |
29 | #ifndef OPIE_DATE_BOOK_ACCESS_BACKEND_XML__H | 29 | #ifndef OPIE_DATE_BOOK_ACCESS_BACKEND_XML__H |
30 | #define OPIE_DATE_BOOK_ACCESS_BACKEND_XML__H | 30 | #define OPIE_DATE_BOOK_ACCESS_BACKEND_XML__H |
31 | 31 | ||
32 | #include <qmap.h> | 32 | #include <qmap.h> |
33 | 33 | ||
34 | #include <opie2/odatebookaccessbackend.h> | 34 | #include <opie2/odatebookaccessbackend.h> |
35 | 35 | ||
36 | namespace Opie { | 36 | namespace Opie { |
37 | /** | 37 | /** |
38 | * This is the default XML implementation for DateBoook XML storage | 38 | * This is the default XML implementation for DateBoook XML storage |
39 | * It fully implements the interface | 39 | * It fully implements the interface |
40 | * @see ODateBookAccessBackend | 40 | * @see ODateBookAccessBackend |
41 | * @see OPimAccessBackend | 41 | * @see OPimAccessBackend |
42 | */ | 42 | */ |
43 | class ODateBookAccessBackend_XML : public ODateBookAccessBackend { | 43 | class ODateBookAccessBackend_XML : public ODateBookAccessBackend { |
44 | public: | 44 | public: |
45 | ODateBookAccessBackend_XML( const QString& appName, | 45 | ODateBookAccessBackend_XML( const QString& appName, |
46 | const QString& fileName = QString::null); | 46 | const QString& fileName = QString::null); |
47 | ~ODateBookAccessBackend_XML(); | 47 | ~ODateBookAccessBackend_XML(); |
48 | 48 | ||
49 | bool load(); | 49 | bool load(); |
50 | bool reload(); | 50 | bool reload(); |
51 | bool save(); | 51 | bool save(); |
52 | 52 | ||
53 | QArray<int> allRecords()const; | 53 | QArray<int> allRecords()const; |
54 | QArray<int> matchRegexp(const QRegExp &r) const; | 54 | QArray<int> matchRegexp(const QRegExp &r) const; |
55 | QArray<int> queryByExample( const OPimEvent&, int, const QDateTime& d = QDateTime() ); | 55 | QArray<int> queryByExample( const OPimEvent&, int, const QDateTime& d = QDateTime() )const; |
56 | OPimEvent find( int uid )const; | 56 | OPimEvent find( int uid )const; |
57 | void clear(); | 57 | void clear(); |
58 | bool add( const OPimEvent& ev ); | 58 | bool add( const OPimEvent& ev ); |
59 | bool remove( int uid ); | 59 | bool remove( int uid ); |
60 | bool replace( const OPimEvent& ev ); | 60 | bool replace( const OPimEvent& ev ); |
61 | 61 | ||
62 | QArray<UID> rawEvents()const; | 62 | QArray<UID> rawEvents()const; |
63 | QArray<UID> rawRepeats()const; | 63 | QArray<UID> rawRepeats()const; |
64 | QArray<UID> nonRepeats()const; | 64 | QArray<UID> nonRepeats()const; |
65 | 65 | ||
66 | OPimEvent::ValueList directNonRepeats()const; | 66 | OPimEvent::ValueList directNonRepeats()const; |
67 | OPimEvent::ValueList directRawRepeats()const; | 67 | OPimEvent::ValueList directRawRepeats()const; |
68 | 68 | ||
69 | private: | 69 | private: |
70 | bool m_changed :1 ; | 70 | bool m_changed :1 ; |
71 | bool m_noTimeZone : 1; | 71 | bool m_noTimeZone : 1; |
72 | 72 | ||
73 | bool loadFile(); | 73 | bool loadFile(); |
74 | inline void finalizeRecord( OPimEvent& ev ); | 74 | inline void finalizeRecord( OPimEvent& ev ); |
75 | inline void setField( OPimEvent&, int field, const QString& val ); | 75 | inline void setField( OPimEvent&, int field, const QString& val ); |
76 | QString m_name; | 76 | QString m_name; |
77 | QMap<int, OPimEvent> m_raw; | 77 | QMap<int, OPimEvent> m_raw; |
78 | QMap<int, OPimEvent> m_rep; | 78 | QMap<int, OPimEvent> m_rep; |
79 | 79 | ||
80 | struct Data; | 80 | struct Data; |
81 | Data* data; | 81 | Data* data; |
82 | class Private; | 82 | class Private; |
83 | Private *d; | 83 | Private *d; |
84 | }; | 84 | }; |
85 | 85 | ||
86 | } | 86 | } |
87 | 87 | ||
88 | #endif | 88 | #endif |
diff --git a/library/lightstyle.cpp b/library/lightstyle.cpp index c5073ca..3d5adfb 100644 --- a/library/lightstyle.cpp +++ b/library/lightstyle.cpp | |||
@@ -1,1288 +1,1288 @@ | |||
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 < 0x030000 | 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 >= 0x030000 | 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 >= 0x030000 | 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) |
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 >= 0x030000 | 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 ) |
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 >= 0x030000 | 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 ) |
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) |
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; |
819 | maxLength = length - buttonDim * 3; | 819 | maxLength = length - buttonDim * 3; |
820 | 820 | ||
821 | if (scrollbar->maxValue() != scrollbar->minValue()) { | 821 | if (scrollbar->maxValue() != scrollbar->minValue()) { |
822 | uint range = scrollbar->maxValue() - scrollbar->minValue(); | 822 | uint range = scrollbar->maxValue() - scrollbar->minValue(); |
823 | sliderLength = (scrollbar->pageStep() * maxLength) / | 823 | sliderLength = (scrollbar->pageStep() * maxLength) / |
824 | (range + scrollbar->pageStep()); | 824 | (range + scrollbar->pageStep()); |
825 | 825 | ||
826 | if (sliderLength < buttonDim || range > INT_MAX / 2) | 826 | if (sliderLength < buttonDim || range > INT_MAX / 2) |
827 | sliderLength = buttonDim; | 827 | sliderLength = buttonDim; |
828 | if (sliderLength > maxLength) | 828 | if (sliderLength > maxLength) |
829 | sliderLength = maxLength; | 829 | sliderLength = maxLength; |
830 | } else | 830 | } else |
831 | sliderLength = maxLength; | 831 | sliderLength = maxLength; |
832 | 832 | ||
833 | sliderMax = sliderMin + maxLength - sliderLength; | 833 | sliderMax = sliderMin + maxLength - sliderLength; |
834 | } | 834 | } |
835 | 835 | ||
836 | 836 | ||
837 | QStyle::ScrollControl LightStyle::scrollBarPointOver(const QScrollBar *scrollbar, | 837 | QStyle::ScrollControl LightStyle::scrollBarPointOver(const QScrollBar *scrollbar, |
838 | int sliderStart, const QPoint &p) | 838 | int sliderStart, const QPoint &p) |
839 | { | 839 | { |
840 | if (! scrollbar->rect().contains(p)) | 840 | if (! scrollbar->rect().contains(p)) |
841 | return NoScroll; | 841 | return NoScroll; |
842 | 842 | ||
843 | int sliderMin, sliderMax, sliderLength, buttonDim, pos; | 843 | int sliderMin, sliderMax, sliderLength, buttonDim, pos; |
844 | scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim ); | 844 | scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim ); |
845 | 845 | ||
846 | if (scrollbar->orientation() == Horizontal) | 846 | if (scrollbar->orientation() == Horizontal) |
847 | pos = p.x(); | 847 | pos = p.x(); |
848 | else | 848 | else |
849 | pos = p.y(); | 849 | pos = p.y(); |
850 | 850 | ||
851 | if (pos < buttonDim) | 851 | if (pos < buttonDim) |
852 | return SubLine; | 852 | return SubLine; |
853 | if (pos < sliderStart) | 853 | if (pos < sliderStart) |
854 | return SubPage; | 854 | return SubPage; |
855 | if (pos < sliderStart + sliderLength) | 855 | if (pos < sliderStart + sliderLength) |
856 | return Slider; | 856 | return Slider; |
857 | if (pos < sliderMax + sliderLength) | 857 | if (pos < sliderMax + sliderLength) |
858 | return AddPage; | 858 | return AddPage; |
859 | if (pos < sliderMax + sliderLength + buttonDim) | 859 | if (pos < sliderMax + sliderLength + buttonDim) |
860 | return SubLine; | 860 | return SubLine; |
861 | return AddLine; | 861 | return AddLine; |
862 | } | 862 | } |
863 | 863 | ||
864 | 864 | ||
865 | 865 | ||
866 | void LightStyle::drawScrollBarControls( QPainter* p, const QScrollBar* scrollbar, | 866 | void LightStyle::drawScrollBarControls( QPainter* p, const QScrollBar* scrollbar, |
867 | int sliderStart, uint controls, | 867 | int sliderStart, uint controls, |
868 | uint activeControl ) | 868 | uint activeControl ) |
869 | { | 869 | { |
870 | QColorGroup g = scrollbar->colorGroup(); | 870 | QColorGroup g = scrollbar->colorGroup(); |
871 | 871 | ||
872 | int sliderMin, sliderMax, sliderLength, buttonDim; | 872 | int sliderMin, sliderMax, sliderLength, buttonDim; |
873 | scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim ); | 873 | scrollBarMetrics( scrollbar, sliderMin, sliderMax, sliderLength, buttonDim ); |
874 | 874 | ||
875 | if (sliderStart > sliderMax) { // sanity check | 875 | if (sliderStart > sliderMax) { // sanity check |
876 | sliderStart = sliderMax; | 876 | sliderStart = sliderMax; |
877 | } | 877 | } |
878 | 878 | ||
879 | QRect addR, subR, subR2, addPageR, subPageR, sliderR; | 879 | QRect addR, subR, subR2, addPageR, subPageR, sliderR; |
880 | int length = ((scrollbar->orientation() == Horizontal) ? | 880 | int length = ((scrollbar->orientation() == Horizontal) ? |
881 | scrollbar->width() : scrollbar->height()); | 881 | scrollbar->width() : scrollbar->height()); |
882 | int extent = ((scrollbar->orientation() == Horizontal) ? | 882 | int extent = ((scrollbar->orientation() == Horizontal) ? |
883 | scrollbar->height() : scrollbar->width()); | 883 | scrollbar->height() : scrollbar->width()); |
884 | 884 | ||
885 | 885 | ||
886 | int fudge = 3; //####disgusting hack | 886 | int fudge = 3; //####disgusting hack |
887 | 887 | ||
888 | if (scrollbar->orientation() == Horizontal) { | 888 | if (scrollbar->orientation() == Horizontal) { |
889 | subR.setRect(0, defaultFrameWidth(), | 889 | subR.setRect(0, defaultFrameWidth(), |
890 | buttonDim + fudge, buttonDim); | 890 | buttonDim + fudge, buttonDim); |
891 | subR2.setRect(length - (buttonDim * 2), defaultFrameWidth() , | 891 | subR2.setRect(length - (buttonDim * 2), defaultFrameWidth() , |
892 | buttonDim, buttonDim); | 892 | buttonDim, buttonDim); |
893 | addR.setRect(length - buttonDim, defaultFrameWidth(), | 893 | addR.setRect(length - buttonDim, defaultFrameWidth(), |
894 | buttonDim, buttonDim); | 894 | buttonDim, buttonDim); |
895 | } else { | 895 | } else { |
896 | subR.setRect(defaultFrameWidth() + 1, 0, | 896 | subR.setRect(defaultFrameWidth() + 1, 0, |
897 | buttonDim, buttonDim + fudge); | 897 | buttonDim, buttonDim + fudge); |
898 | subR2.setRect(defaultFrameWidth() + 1, length - (buttonDim * 2), | 898 | subR2.setRect(defaultFrameWidth() + 1, length - (buttonDim * 2), |
899 | buttonDim, buttonDim); | 899 | buttonDim, buttonDim); |
900 | addR.setRect(defaultFrameWidth() + 1, length - buttonDim, | 900 | addR.setRect(defaultFrameWidth() + 1, length - buttonDim, |
901 | buttonDim, buttonDim); | 901 | buttonDim, buttonDim); |
902 | } | 902 | } |
903 | 903 | ||
904 | int sliderEnd = sliderStart + sliderLength; | 904 | int sliderEnd = sliderStart + sliderLength; |
905 | int sliderW = extent - defaultFrameWidth() - 1; | 905 | int sliderW = extent - defaultFrameWidth() - 1; |
906 | if (scrollbar->orientation() == Horizontal) { | 906 | if (scrollbar->orientation() == Horizontal) { |
907 | subPageR.setRect( subR.right() + 1, defaultFrameWidth(), | 907 | subPageR.setRect( subR.right() + 1, defaultFrameWidth(), |
908 | sliderStart - subR.right() - 1 , sliderW ); | 908 | sliderStart - subR.right() - 1 , sliderW ); |
909 | addPageR.setRect( sliderEnd, defaultFrameWidth(), | 909 | addPageR.setRect( sliderEnd, defaultFrameWidth(), |
910 | subR2.left() - sliderEnd, sliderW ); | 910 | subR2.left() - sliderEnd, sliderW ); |
911 | sliderR.setRect( sliderStart, defaultFrameWidth(), sliderLength, sliderW ); | 911 | sliderR.setRect( sliderStart, defaultFrameWidth(), sliderLength, sliderW ); |
912 | } else { | 912 | } else { |
913 | subPageR.setRect( defaultFrameWidth(), subR.bottom() + 1, | 913 | subPageR.setRect( defaultFrameWidth(), subR.bottom() + 1, |
914 | sliderW, sliderStart - subR.bottom() - 1 ); | 914 | sliderW, sliderStart - subR.bottom() - 1 ); |
915 | addPageR.setRect( defaultFrameWidth(), sliderEnd, | 915 | addPageR.setRect( defaultFrameWidth(), sliderEnd, |
916 | sliderW, subR2.top() - sliderEnd ); | 916 | sliderW, subR2.top() - sliderEnd ); |
917 | sliderR .setRect( defaultFrameWidth(), sliderStart, | 917 | sliderR .setRect( defaultFrameWidth(), sliderStart, |
918 | sliderW, sliderLength ); | 918 | sliderW, sliderLength ); |
919 | } | 919 | } |
920 | 920 | ||
921 | if ( controls == ( AddLine | SubLine | AddPage | SubPage | | 921 | if ( controls == ( AddLine | SubLine | AddPage | SubPage | |
922 | Slider | First | Last ) ) { | 922 | Slider | First | Last ) ) { |
923 | if (scrollbar->orientation() == Horizontal) | 923 | if (scrollbar->orientation() == Horizontal) |
924 | qDrawShadePanel(p, 0, 0, length, 2, g, TRUE, 1, | 924 | qDrawShadePanel(p, 0, 0, length, 2, g, TRUE, 1, |
925 | &g.brush(QColorGroup::Background)); | 925 | &g.brush(QColorGroup::Background)); |
926 | else | 926 | else |
927 | qDrawShadePanel(p, 0, 0, 2, length, g, TRUE, 1, | 927 | qDrawShadePanel(p, 0, 0, 2, length, g, TRUE, 1, |
928 | &g.brush(QColorGroup::Background)); | 928 | &g.brush(QColorGroup::Background)); |
929 | } | 929 | } |
930 | 930 | ||
931 | if ( controls & AddLine ) | 931 | if ( controls & AddLine ) |
932 | drawArrow( p, (scrollbar->orientation() == Vertical) ? DownArrow : RightArrow, | 932 | drawArrow( p, (scrollbar->orientation() == Vertical) ? DownArrow : RightArrow, |
933 | FALSE, addR.x(), addR.y(), | 933 | FALSE, addR.x(), addR.y(), |
934 | addR.width(), addR.height(), | 934 | addR.width(), addR.height(), |
935 | (( activeControl == AddLine ) ? | 935 | (( activeControl == AddLine ) ? |
936 | singleton->hoverPalette.active() : g), | 936 | singleton->hoverPalette.active() : g), |
937 | TRUE, &g.brush(QColorGroup::Background)); | 937 | TRUE, &g.brush(QColorGroup::Background)); |
938 | if ( controls & SubLine ) { | 938 | if ( controls & SubLine ) { |
939 | drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow, | 939 | drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow, |
940 | FALSE, subR.x(), subR.y(), | 940 | FALSE, subR.x(), subR.y(), |
941 | subR.width(), subR.height(), | 941 | subR.width(), subR.height(), |
942 | (( activeControl == SubLine ) ? | 942 | (( activeControl == SubLine ) ? |
943 | singleton->hoverPalette.active() : g), | 943 | singleton->hoverPalette.active() : g), |
944 | TRUE, &g.brush(QColorGroup::Background)); | 944 | TRUE, &g.brush(QColorGroup::Background)); |
945 | drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow, | 945 | drawArrow( p, (scrollbar->orientation() == Vertical) ? UpArrow : LeftArrow, |
946 | FALSE, subR2.x(), subR2.y(), | 946 | FALSE, subR2.x(), subR2.y(), |
947 | subR2.width(), subR2.height(), | 947 | subR2.width(), subR2.height(), |
948 | (( activeControl == SubLine ) ? | 948 | (( activeControl == SubLine ) ? |
949 | singleton->hoverPalette.active() : g), | 949 | singleton->hoverPalette.active() : g), |
950 | TRUE, &g.brush(QColorGroup::Background)); | 950 | TRUE, &g.brush(QColorGroup::Background)); |
951 | } | 951 | } |
952 | 952 | ||
953 | if ( controls & SubPage ) | 953 | if ( controls & SubPage ) |
954 | p->fillRect( subPageR, | 954 | p->fillRect( subPageR, |
955 | ((activeControl == SubPage) ? | 955 | ((activeControl == SubPage) ? |
956 | g.brush( QColorGroup::Dark ) : | 956 | g.brush( QColorGroup::Dark ) : |
957 | g.brush( QColorGroup::Mid ))); | 957 | g.brush( QColorGroup::Mid ))); |
958 | if ( controls & AddPage ) | 958 | if ( controls & AddPage ) |
959 | p->fillRect( addPageR, | 959 | p->fillRect( addPageR, |
960 | ((activeControl == AddPage) ? | 960 | ((activeControl == AddPage) ? |
961 | g.brush( QColorGroup::Dark ) : | 961 | g.brush( QColorGroup::Dark ) : |
962 | g.brush( QColorGroup::Mid ))); | 962 | g.brush( QColorGroup::Mid ))); |
963 | 963 | ||
964 | if ( controls & Slider ) { | 964 | if ( controls & Slider ) { |
965 | 965 | ||
966 | QPoint bo = p->brushOrigin(); | 966 | QPoint bo = p->brushOrigin(); |
967 | p->setBrushOrigin(sliderR.topLeft()); | 967 | p->setBrushOrigin(sliderR.topLeft()); |
968 | if ( sliderR.isValid() ) { | 968 | if ( sliderR.isValid() ) { |
969 | p->fillRect( sliderR.x(), sliderR.y(), 2, 2, | 969 | p->fillRect( sliderR.x(), sliderR.y(), 2, 2, |
970 | g.brush( QColorGroup::Mid )); | 970 | g.brush( QColorGroup::Mid )); |
971 | p->fillRect( sliderR.x() + sliderR.width() - 2, | 971 | p->fillRect( sliderR.x() + sliderR.width() - 2, |
972 | sliderR.y(), 2, 2, | 972 | sliderR.y(), 2, 2, |
973 | g.brush( QColorGroup::Mid )); | 973 | g.brush( QColorGroup::Mid )); |
974 | p->fillRect( sliderR.x() + sliderR.width() - 2, | 974 | p->fillRect( sliderR.x() + sliderR.width() - 2, |
975 | sliderR.y() + sliderR.height() - 2, 2, 2, | 975 | sliderR.y() + sliderR.height() - 2, 2, 2, |
976 | g.brush( QColorGroup::Mid )); | 976 | g.brush( QColorGroup::Mid )); |
977 | p->fillRect( sliderR.x(), | 977 | p->fillRect( sliderR.x(), |
978 | sliderR.y() + sliderR.height() - 2, 2, 2, | 978 | sliderR.y() + sliderR.height() - 2, 2, 2, |
979 | g.brush( QColorGroup::Mid )); | 979 | g.brush( QColorGroup::Mid )); |
980 | 980 | ||
981 | QColorGroup cg( g ); | 981 | QColorGroup cg( g ); |
982 | cg.setBrush( QColorGroup::Background, g.brush( QColorGroup::Mid ) ); | 982 | cg.setBrush( QColorGroup::Background, g.brush( QColorGroup::Mid ) ); |
983 | drawBevelButton( p, sliderR.x(), sliderR.y(), | 983 | drawBevelButton( p, sliderR.x(), sliderR.y(), |
984 | sliderR.width(), sliderR.height(), | 984 | sliderR.width(), sliderR.height(), |
985 | cg, FALSE, &g.brush( QColorGroup::Button ) ); | 985 | cg, FALSE, &g.brush( QColorGroup::Button ) ); |
986 | } | 986 | } |
987 | 987 | ||
988 | p->setBrushOrigin(bo); | 988 | p->setBrushOrigin(bo); |
989 | } | 989 | } |
990 | } | 990 | } |
991 | 991 | ||
992 | 992 | ||
993 | void LightStyle::drawToolBarHandle(QPainter *p, const QRect &rect, | 993 | void LightStyle::drawToolBarHandle(QPainter *p, const QRect &rect, |
994 | Qt::Orientation orientation, | 994 | Qt::Orientation orientation, |
995 | bool, const QColorGroup &g, bool) | 995 | bool, const QColorGroup &g, bool) |
996 | { | 996 | { |
997 | p->save(); | 997 | p->save(); |
998 | p->setPen(g.mid()); | 998 | p->setPen(g.mid()); |
999 | p->setBrush(g.brush(QColorGroup::Mid)); | 999 | p->setBrush(g.brush(QColorGroup::Mid)); |
1000 | 1000 | ||
1001 | if (orientation == Qt::Horizontal) { | 1001 | if (orientation == Qt::Horizontal) { |
1002 | QRect l, r; | 1002 | QRect l, r; |
1003 | l.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 5, rect.height() - 2); | 1003 | l.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 5, rect.height() - 2); |
1004 | r.setRect(l.right() + 1, l.y(), 3, l.height()); | 1004 | r.setRect(l.right() + 1, l.y(), 3, l.height()); |
1005 | 1005 | ||
1006 | p->drawRect(l); | 1006 | p->drawRect(l); |
1007 | qDrawShadePanel(p, r, g, FALSE); | 1007 | qDrawShadePanel(p, r, g, FALSE); |
1008 | } else { | 1008 | } else { |
1009 | QRect t, b; | 1009 | QRect t, b; |
1010 | t.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 2, rect.height() - 5); | 1010 | t.setRect(rect.x() + 1, rect.y() + 1, rect.width() - 2, rect.height() - 5); |
1011 | b.setRect(t.x(), t.bottom() + 1, t.width(), 3); | 1011 | b.setRect(t.x(), t.bottom() + 1, t.width(), 3); |
1012 | 1012 | ||
1013 | p->drawRect(t); | 1013 | p->drawRect(t); |
1014 | qDrawShadePanel(p, b, g, FALSE); | 1014 | qDrawShadePanel(p, b, g, FALSE); |
1015 | } | 1015 | } |
1016 | 1016 | ||
1017 | p->restore(); | 1017 | p->restore(); |
1018 | } | 1018 | } |
1019 | 1019 | ||
1020 | 1020 | ||
1021 | bool LightStyle::eventFilter(QObject *object, QEvent *event) | 1021 | bool LightStyle::eventFilter(QObject *object, QEvent *event) |
1022 | { | 1022 | { |
1023 | switch(event->type()) { | 1023 | switch(event->type()) { |
1024 | case QEvent::Enter: | 1024 | case QEvent::Enter: |
1025 | { | 1025 | { |
1026 | if (! object->isWidgetType() || | 1026 | if (! object->isWidgetType() || |
1027 | ! object->inherits("QPushButton")) | 1027 | ! object->inherits("QPushButton")) |
1028 | break; | 1028 | break; |
1029 | 1029 | ||
1030 | singleton->hoverWidget = (QWidget *) object; | 1030 | singleton->hoverWidget = (QWidget *) object; |
1031 | if (! singleton->hoverWidget->isEnabled()) { | 1031 | if (! singleton->hoverWidget->isEnabled()) { |
1032 | singleton->hoverWidget = 0; | 1032 | singleton->hoverWidget = 0; |
1033 | break; | 1033 | break; |
1034 | } | 1034 | } |
1035 | 1035 | ||
1036 | QPalette pal = singleton->hoverWidget->palette(); | 1036 | QPalette pal = singleton->hoverWidget->palette(); |
1037 | if (singleton->hoverWidget->ownPalette()) | 1037 | if (singleton->hoverWidget->ownPalette()) |
1038 | singleton->savePalette = new QPalette(pal); | 1038 | singleton->savePalette = new QPalette(pal); |
1039 | 1039 | ||
1040 | singleton->hoverWidget->setPalette(singleton->hoverPalette); | 1040 | singleton->hoverWidget->setPalette(singleton->hoverPalette); |
1041 | 1041 | ||
1042 | break; | 1042 | break; |
1043 | } | 1043 | } |
1044 | 1044 | ||
1045 | case QEvent::Leave: | 1045 | case QEvent::Leave: |
1046 | { | 1046 | { |
1047 | if (object != singleton->hoverWidget) | 1047 | if (object != singleton->hoverWidget) |
1048 | break; | 1048 | break; |
1049 | 1049 | ||
1050 | if (singleton->savePalette) { | 1050 | if (singleton->savePalette) { |
1051 | singleton->hoverWidget->setPalette(*(singleton->savePalette)); | 1051 | singleton->hoverWidget->setPalette(*(singleton->savePalette)); |
1052 | delete singleton->savePalette; | 1052 | delete singleton->savePalette; |
1053 | singleton->savePalette = 0; | 1053 | singleton->savePalette = 0; |
1054 | } else | 1054 | } else |
1055 | singleton->hoverWidget->unsetPalette(); | 1055 | singleton->hoverWidget->unsetPalette(); |
1056 | 1056 | ||
1057 | singleton->hoverWidget = 0; | 1057 | singleton->hoverWidget = 0; |
1058 | 1058 | ||
1059 | break; | 1059 | break; |
1060 | } | 1060 | } |
1061 | 1061 | ||
1062 | default: | 1062 | default: |
1063 | { | 1063 | { |
1064 | ; | 1064 | ; |
1065 | } | 1065 | } |
1066 | } | 1066 | } |
1067 | 1067 | ||
1068 | return QWindowsStyle::eventFilter(object, event); | 1068 | return QWindowsStyle::eventFilter(object, event); |
1069 | } | 1069 | } |
1070 | 1070 | ||
1071 | 1071 | ||
1072 | static const int motifItemFrame = 1;// menu item frame width | 1072 | static const int motifItemFrame = 1;// menu item frame width |
1073 | static const int motifSepHeight = 2;// separator item height | 1073 | static const int motifSepHeight = 2;// separator item height |
1074 | static const int motifItemHMargin = 1;// menu item hor text margin | 1074 | static const int motifItemHMargin = 1;// menu item hor text margin |
1075 | static const int motifItemVMargin = 2;// menu item ver text margin | 1075 | static const int motifItemVMargin = 2;// menu item ver text margin |
1076 | static const int motifArrowHMargin = 0;// arrow horizontal margin | 1076 | static const int motifArrowHMargin = 0;// arrow horizontal margin |
1077 | static const int motifTabSpacing = 12;// space between text and tab | 1077 | static const int motifTabSpacing = 12;// space between text and tab |
1078 | static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark | 1078 | static const int motifCheckMarkHMargin = 1;// horiz. margins of check mark |
1079 | static const int windowsRightBorder= 8; // right border on windows | 1079 | static const int windowsRightBorder= 8; // right border on windows |
1080 | static const int windowsCheckMarkWidth = 2; // checkmarks width on windows | 1080 | static const int windowsCheckMarkWidth = 2; // checkmarks width on windows |
1081 | 1081 | ||
1082 | /*! \reimp | 1082 | /*! \reimp |
1083 | */ | 1083 | */ |
1084 | int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) | 1084 | int LightStyle::extraPopupMenuItemWidth( bool checkable, int maxpmw, QMenuItem* mi, const QFontMetrics& /*fm*/ ) |
1085 | { | 1085 | { |
1086 | #ifndef QT_NO_MENUDATA | 1086 | #ifndef QT_NO_MENUDATA |
1087 | int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm | 1087 | int w = 2*motifItemHMargin + 2*motifItemFrame; // a little bit of border can never harm |
1088 | 1088 | ||
1089 | if ( mi->isSeparator() ) | 1089 | if ( mi->isSeparator() ) |
1090 | return 10; // arbitrary | 1090 | return 10; // arbitrary |
1091 | else if ( mi->pixmap() ) | 1091 | else if ( mi->pixmap() ) |
1092 | w += mi->pixmap()->width();// pixmap only | 1092 | w += mi->pixmap()->width();// pixmap only |
1093 | 1093 | ||
1094 | if ( !mi->text().isNull() ) { | 1094 | if ( !mi->text().isNull() ) { |
1095 | if ( mi->text().find('\t') >= 0 )// string contains tab | 1095 | if ( mi->text().find('\t') >= 0 )// string contains tab |
1096 | w += motifTabSpacing; | 1096 | w += motifTabSpacing; |
1097 | } | 1097 | } |
1098 | 1098 | ||
1099 | if ( maxpmw ) { // we have iconsets | 1099 | if ( maxpmw ) { // we have iconsets |
1100 | w += maxpmw; | 1100 | w += maxpmw; |
1101 | w += 6; // add a little extra border around the iconset | 1101 | w += 6; // add a little extra border around the iconset |
1102 | } | 1102 | } |
1103 | 1103 | ||
1104 | if ( checkable && maxpmw < windowsCheckMarkWidth ) { | 1104 | if ( checkable && maxpmw < windowsCheckMarkWidth ) { |
1105 | w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks | 1105 | w += windowsCheckMarkWidth - maxpmw; // space for the checkmarks |
1106 | } | 1106 | } |
1107 | 1107 | ||
1108 | if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) | 1108 | if ( maxpmw > 0 || checkable ) // we have a check-column ( iconsets or checkmarks) |
1109 | w += motifCheckMarkHMargin; // add space to separate the columns | 1109 | w += motifCheckMarkHMargin; // add space to separate the columns |
1110 | 1110 | ||
1111 | w += windowsRightBorder; // windows has a strange wide border on the right side | 1111 | w += windowsRightBorder; // windows has a strange wide border on the right side |
1112 | 1112 | ||
1113 | return w; | 1113 | return w; |
1114 | #endif | 1114 | #endif |
1115 | } | 1115 | } |
1116 | 1116 | ||
1117 | /*! \reimp | 1117 | /*! \reimp |
1118 | */ | 1118 | */ |
1119 | int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ) | 1119 | int LightStyle::popupMenuItemHeight( bool /*checkable*/, QMenuItem* mi, const QFontMetrics& fm ) |
1120 | { | 1120 | { |
1121 | #ifndef QT_NO_MENUDATA | 1121 | #ifndef QT_NO_MENUDATA |
1122 | int h = 0; | 1122 | int h = 0; |
1123 | if ( mi->isSeparator() ) // separator height | 1123 | if ( mi->isSeparator() ) // separator height |
1124 | h = motifSepHeight; | 1124 | h = motifSepHeight; |
1125 | else if ( mi->pixmap() ) // pixmap height | 1125 | else if ( mi->pixmap() ) // pixmap height |
1126 | h = mi->pixmap()->height() + 2*motifItemFrame; | 1126 | h = mi->pixmap()->height() + 2*motifItemFrame; |
1127 | else // text height | 1127 | else // text height |
1128 | h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame; | 1128 | h = fm.height() + 2*motifItemVMargin + 2*motifItemFrame; |
1129 | 1129 | ||
1130 | if ( !mi->isSeparator() && mi->iconSet() != 0 ) { | 1130 | if ( !mi->isSeparator() && mi->iconSet() != 0 ) { |
1131 | h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame ); | 1131 | h = QMAX( h, mi->iconSet()->pixmap().height() + 2*motifItemFrame ); |
1132 | } | 1132 | } |
1133 | if ( mi->custom() ) | 1133 | if ( mi->custom() ) |
1134 | h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; | 1134 | h = QMAX( h, mi->custom()->sizeHint().height() + 2*motifItemVMargin + 2*motifItemFrame ) - 1; |
1135 | return h; | 1135 | return h; |
1136 | #endif | 1136 | #endif |
1137 | } | 1137 | } |
1138 | 1138 | ||
1139 | void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, | 1139 | void LightStyle::drawPopupMenuItem( QPainter* p, bool checkable, int maxpmw, int tab, QMenuItem* mi, |
1140 | const QPalette& pal, | 1140 | const QPalette& pal, |
1141 | bool act, bool enabled, int x, int y, int w, int h) | 1141 | bool act, bool enabled, int x, int y, int w, int h) |
1142 | { | 1142 | { |
1143 | #ifndef QT_NO_MENUDATA | 1143 | #ifndef QT_NO_MENUDATA |
1144 | const QColorGroup & g = pal.active(); | 1144 | const QColorGroup & g = pal.active(); |
1145 | bool dis = !enabled; | 1145 | bool dis = !enabled; |
1146 | QColorGroup itemg = dis ? pal.disabled() : pal.active(); | 1146 | QColorGroup itemg = dis ? pal.disabled() : pal.active(); |
1147 | 1147 | ||
1148 | if ( checkable ) | 1148 | if ( checkable ) |
1149 | maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks | 1149 | maxpmw = QMAX( maxpmw, 8 ); // space for the checkmarks |
1150 | 1150 | ||
1151 | int checkcol = maxpmw; | 1151 | int checkcol = maxpmw; |
1152 | 1152 | ||
1153 | if ( mi && mi->isSeparator() ) { // draw separator | 1153 | if ( mi && mi->isSeparator() ) { // draw separator |
1154 | p->setPen( g.dark() ); | 1154 | p->setPen( g.dark() ); |
1155 | p->drawLine( x, y, x+w, y ); | 1155 | p->drawLine( x, y, x+w, y ); |
1156 | p->setPen( g.light() ); | 1156 | p->setPen( g.light() ); |
1157 | p->drawLine( x, y+1, x+w, y+1 ); | 1157 | p->drawLine( x, y+1, x+w, y+1 ); |
1158 | return; | 1158 | return; |
1159 | } | 1159 | } |
1160 | 1160 | ||
1161 | QBrush fill = act? g.brush( QColorGroup::Highlight ) : | 1161 | QBrush fill = act? g.brush( QColorGroup::Highlight ) : |
1162 | g.brush( QColorGroup::Button ); | 1162 | g.brush( QColorGroup::Button ); |
1163 | p->fillRect( x, y, w, h, fill); | 1163 | p->fillRect( x, y, w, h, fill); |
1164 | 1164 | ||
1165 | if ( !mi ) | 1165 | if ( !mi ) |
1166 | return; | 1166 | return; |
1167 | 1167 | ||
1168 | if ( mi->isChecked() ) { | 1168 | if ( mi->isChecked() ) { |
1169 | if ( act && !dis ) { | 1169 | if ( act && !dis ) { |
1170 | qDrawShadePanel( p, x, y, checkcol, h, | 1170 | qDrawShadePanel( p, x, y, checkcol, h, |
1171 | g, TRUE, 1, &g.brush( QColorGroup::Button ) ); | 1171 | g, TRUE, 1, &g.brush( QColorGroup::Button ) ); |
1172 | } else { | 1172 | } else { |
1173 | qDrawShadePanel( p, x, y, checkcol, h, | 1173 | qDrawShadePanel( p, x, y, checkcol, h, |
1174 | g, TRUE, 1, &g.brush( QColorGroup::Midlight ) ); | 1174 | g, TRUE, 1, &g.brush( QColorGroup::Midlight ) ); |
1175 | } | 1175 | } |
1176 | } else if ( !act ) { | 1176 | } else if ( !act ) { |
1177 | p->fillRect(x, y, checkcol , h, | 1177 | p->fillRect(x, y, checkcol , h, |
1178 | g.brush( QColorGroup::Button )); | 1178 | g.brush( QColorGroup::Button )); |
1179 | } | 1179 | } |
1180 | 1180 | ||
1181 | if ( mi->iconSet() ) { // draw iconset | 1181 | if ( mi->iconSet() ) { // draw iconset |
1182 | QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; | 1182 | QIconSet::Mode mode = dis ? QIconSet::Disabled : QIconSet::Normal; |
1183 | if (act && !dis ) | 1183 | if (act && !dis ) |
1184 | mode = QIconSet::Active; | 1184 | mode = QIconSet::Active; |
1185 | QPixmap pixmap; | 1185 | QPixmap pixmap; |
1186 | if ( mode == QIconSet::Disabled ) | 1186 | if ( mode == QIconSet::Disabled ) |
1187 | pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode ); | 1187 | pixmap = mi->iconSet()->pixmap( QIconSet::Automatic, mode ); |
1188 | else | 1188 | else |
1189 | pixmap = mi->iconSet()->pixmap(); | 1189 | pixmap = mi->iconSet()->pixmap(); |
1190 | int pixw = pixmap.width(); | 1190 | int pixw = pixmap.width(); |
1191 | int pixh = pixmap.height(); | 1191 | int pixh = pixmap.height(); |
1192 | if ( act && !dis ) { | 1192 | if ( act && !dis ) { |
1193 | if ( !mi->isChecked() ) | 1193 | if ( !mi->isChecked() ) |
1194 | qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); | 1194 | qDrawShadePanel( p, x, y, checkcol, h, g, FALSE, 1, &g.brush( QColorGroup::Button ) ); |
1195 | } | 1195 | } |
1196 | QRect cr( x, y, checkcol, h ); | 1196 | QRect cr( x, y, checkcol, h ); |
1197 | QRect pmr( 0, 0, pixw, pixh ); | 1197 | QRect pmr( 0, 0, pixw, pixh ); |
1198 | pmr.moveCenter( cr.center() ); | 1198 | pmr.moveCenter( cr.center() ); |
1199 | p->setPen( itemg.text() ); | 1199 | p->setPen( itemg.text() ); |
1200 | p->drawPixmap( pmr.topLeft(), pixmap ); | 1200 | p->drawPixmap( pmr.topLeft(), pixmap ); |
1201 | 1201 | ||
1202 | QBrush fill = act? g.brush( QColorGroup::Highlight ) : | 1202 | QBrush fill = act? g.brush( QColorGroup::Highlight ) : |
1203 | g.brush( QColorGroup::Button ); | 1203 | g.brush( QColorGroup::Button ); |
1204 | p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); | 1204 | p->fillRect( x+checkcol + 1, y, w - checkcol - 1, h, fill); |
1205 | } else if ( checkable ) {// just "checking"... | 1205 | } else if ( checkable ) {// just "checking"... |
1206 | int mw = checkcol + motifItemFrame; | 1206 | int mw = checkcol + motifItemFrame; |
1207 | int mh = h - 2*motifItemFrame; | 1207 | int mh = h - 2*motifItemFrame; |
1208 | if ( mi->isChecked() ) { | 1208 | if ( mi->isChecked() ) { |
1209 | drawCheckMark( p, x + motifItemFrame + 2, | 1209 | drawCheckMark( p, x + motifItemFrame + 2, |
1210 | y+motifItemFrame, mw, mh, itemg, act, dis ); | 1210 | y+motifItemFrame, mw, mh, itemg, act, dis ); |
1211 | } | 1211 | } |
1212 | } | 1212 | } |
1213 | 1213 | ||
1214 | p->setPen( act ? g.highlightedText() : g.buttonText() ); | 1214 | p->setPen( act ? g.highlightedText() : g.buttonText() ); |
1215 | 1215 | ||
1216 | QColor discol; | 1216 | QColor discol; |
1217 | if ( dis ) { | 1217 | if ( dis ) { |
1218 | discol = itemg.text(); | 1218 | discol = itemg.text(); |
1219 | p->setPen( discol ); | 1219 | p->setPen( discol ); |
1220 | } | 1220 | } |
1221 | 1221 | ||
1222 | int xm = motifItemFrame + checkcol + motifItemHMargin; | 1222 | int xm = motifItemFrame + checkcol + motifItemHMargin; |
1223 | 1223 | ||
1224 | if ( mi->custom() ) { | 1224 | if ( mi->custom() ) { |
1225 | int m = motifItemVMargin; | 1225 | int m = motifItemVMargin; |
1226 | p->save(); | 1226 | p->save(); |
1227 | if ( dis && !act ) { | 1227 | if ( dis && !act ) { |
1228 | p->setPen( g.light() ); | 1228 | p->setPen( g.light() ); |
1229 | mi->custom()->paint( p, itemg, act, enabled, | 1229 | mi->custom()->paint( p, itemg, act, enabled, |
1230 | x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); | 1230 | x+xm+1, y+m+1, w-xm-tab+1, h-2*m ); |
1231 | p->setPen( discol ); | 1231 | p->setPen( discol ); |
1232 | } | 1232 | } |
1233 | mi->custom()->paint( p, itemg, act, enabled, | 1233 | mi->custom()->paint( p, itemg, act, enabled, |
1234 | x+xm, y+m, w-xm-tab+1, h-2*m ); | 1234 | x+xm, y+m, w-xm-tab+1, h-2*m ); |
1235 | p->restore(); | 1235 | p->restore(); |
1236 | } | 1236 | } |
1237 | QString s = mi->text(); | 1237 | QString s = mi->text(); |
1238 | if ( !s.isNull() ) { // draw text | 1238 | if ( !s.isNull() ) { // draw text |
1239 | int t = s.find( '\t' ); | 1239 | int t = s.find( '\t' ); |
1240 | int m = motifItemVMargin; | 1240 | int m = motifItemVMargin; |
1241 | const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; | 1241 | const int text_flags = AlignVCenter|ShowPrefix | DontClip | SingleLine; |
1242 | if ( t >= 0 ) { // draw tab text | 1242 | if ( t >= 0 ) { // draw tab text |
1243 | if ( dis && !act ) { | 1243 | if ( dis && !act ) { |
1244 | p->setPen( g.light() ); | 1244 | p->setPen( g.light() ); |
1245 | p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, | 1245 | p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame+1, |
1246 | y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); | 1246 | y+m+1, tab, h-2*m, text_flags, s.mid( t+1 )); |
1247 | p->setPen( discol ); | 1247 | p->setPen( discol ); |
1248 | } | 1248 | } |
1249 | p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, | 1249 | p->drawText( x+w-tab-windowsRightBorder-motifItemHMargin-motifItemFrame, |
1250 | y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); | 1250 | y+m, tab, h-2*m, text_flags, s.mid( t+1 ) ); |
1251 | } | 1251 | } |
1252 | if ( dis && !act ) { | 1252 | if ( dis && !act ) { |
1253 | p->setPen( g.light() ); | 1253 | p->setPen( g.light() ); |
1254 | p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t ); | 1254 | p->drawText( x+xm+1, y+m+1, w-xm+1, h-2*m, text_flags, s, t ); |
1255 | p->setPen( discol ); | 1255 | p->setPen( discol ); |
1256 | } | 1256 | } |
1257 | p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); | 1257 | p->drawText( x+xm, y+m, w-xm-tab+1, h-2*m, text_flags, s, t ); |
1258 | } else if ( mi->pixmap() ) { // draw pixmap | 1258 | } else if ( mi->pixmap() ) { // draw pixmap |
1259 | QPixmap *pixmap = mi->pixmap(); | 1259 | QPixmap *pixmap = mi->pixmap(); |
1260 | if ( pixmap->depth() == 1 ) | 1260 | if ( pixmap->depth() == 1 ) |
1261 | p->setBackgroundMode( OpaqueMode ); | 1261 | p->setBackgroundMode( OpaqueMode ); |
1262 | p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); | 1262 | p->drawPixmap( x+xm, y+motifItemFrame, *pixmap ); |
1263 | if ( pixmap->depth() == 1 ) | 1263 | if ( pixmap->depth() == 1 ) |
1264 | p->setBackgroundMode( TransparentMode ); | 1264 | p->setBackgroundMode( TransparentMode ); |
1265 | } | 1265 | } |
1266 | if ( mi->popup() ) { // draw sub menu arrow | 1266 | if ( mi->popup() ) { // draw sub menu arrow |
1267 | int dim = (h-2*motifItemFrame) / 2; | 1267 | int dim = (h-2*motifItemFrame) / 2; |
1268 | if ( act ) { | 1268 | if ( act ) { |
1269 | if ( !dis ) | 1269 | if ( !dis ) |
1270 | discol = white; | 1270 | discol = white; |
1271 | QColorGroup g2( discol, g.highlight(), | 1271 | QColorGroup g2( discol, g.highlight(), |
1272 | white, white, | 1272 | white, white, |
1273 | dis ? discol : white, | 1273 | dis ? discol : white, |
1274 | discol, white ); | 1274 | discol, white ); |
1275 | drawArrow( p, RightArrow, FALSE, | 1275 | drawArrow( p, RightArrow, FALSE, |
1276 | x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, | 1276 | x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, |
1277 | dim, dim, g2, TRUE ); | 1277 | dim, dim, g2, TRUE ); |
1278 | } else { | 1278 | } else { |
1279 | drawArrow( p, RightArrow, | 1279 | drawArrow( p, RightArrow, |
1280 | FALSE, | 1280 | FALSE, |
1281 | x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, | 1281 | x+w - motifArrowHMargin - motifItemFrame - dim, y+h/2-dim/2, |
1282 | dim, dim, g, mi->isEnabled() ); | 1282 | dim, dim, g, mi->isEnabled() ); |
1283 | } | 1283 | } |
1284 | } | 1284 | } |
1285 | #endif | 1285 | #endif |
1286 | } | 1286 | } |
1287 | 1287 | ||
1288 | #endif | 1288 | #endif |
diff --git a/library/lightstyle.h b/library/lightstyle.h index 0392957..52e19b2 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 < 0x030000 | 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); |
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); |
66 | QRect comboButtonFocusRect(int x, int y, int w, int h) const; | 66 | QRect comboButtonFocusRect(int x, int y, int w, int h); |
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 & ); |
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 |