File: qwt__push__button_8cpp-source.html

package info (click to toggle)
libqwt 4.2.0-4.1
  • links: PTS
  • area: main
  • in suites: lenny
  • size: 9,832 kB
  • ctags: 5,512
  • sloc: cpp: 22,973; ansic: 244; makefile: 66
file content (425 lines) | stat: -rw-r--r-- 25,686 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>Qwt User&apos;s Guide: qwt_push_button.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.8 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="globals.html">File&nbsp;Members</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a></div>
<h1>qwt_push_button.cpp</h1><pre class="fragment"><div>00001 <span class="comment">/* -*- mode: C++ ; c-file-style: "stroustrup" -*- *****************************</span>
00002 <span class="comment"> * Qwt Widget Library</span>
00003 <span class="comment"> * Copyright (C) 1997   Josef Wilgen</span>
00004 <span class="comment"> * Copyright (C) 2002   Uwe Rathmann</span>
00005 <span class="comment"> *</span>
00006 <span class="comment"> * This library is free software; you can redistribute it and/or</span>
00007 <span class="comment"> * modify it under the terms of the Qwt License, Version 1.0</span>
00008 <span class="comment"> *****************************************************************************/</span>
00009 
00010 <span class="comment">// vim: expandtab</span>
00011 
00012 <span class="preprocessor">#include &lt;qpainter.h&gt;</span>
00013 <span class="preprocessor">#include &lt;qpicture.h&gt;</span>
00014 <span class="preprocessor">#include &lt;qsimplerichtext.h&gt;</span>
00015 <span class="preprocessor">#include &lt;qstylesheet.h&gt;</span>
00016 <span class="preprocessor">#include &lt;qstyle.h&gt;</span>
00017 <span class="preprocessor">#include "qwt_text.h"</span>
00018 <span class="preprocessor">#include "qwt_push_button.h"</span>
00019 
00020 <span class="preprocessor">#ifndef QT_NO_PICTURE</span>
00021 <span class="preprocessor"></span>
00022 <span class="keyword">class </span>QwtPBPaintFilter: <span class="keyword">public</span> QPicture
00023 {
00024     <span class="comment">// A helper class that filters the QPushButton paint commands</span>
00025     <span class="comment">// and changes them according the additional features of QwtPushButton </span>
00026 
00027 <span class="keyword">public</span>:
00028     QwtPBPaintFilter(<span class="keyword">const</span> <a class="code" href="class_qwt_push_button.html">QwtPushButton</a> *);
00029 
00030 <span class="keyword">protected</span>:
00031     <span class="keyword">virtual</span> <span class="keywordtype">bool</span> cmd(<span class="keywordtype">int</span>, QPainter *, QPDevCmdParam *);
00032 
00033 <span class="keyword">private</span>:
00034     <span class="keywordtype">bool</span> isLabel(<span class="keyword">const</span> QPixmap *) const;
00035     QRect indentRect(const QRect &amp;) const;
00036 
00037     const <a class="code" href="class_qwt_push_button.html">QwtPushButton</a> *d_button;
00038     QRect d_iconRect;
00039     <span class="keywordtype">bool</span> d_inFilter;
00040 };
00041 
00042 QwtPBPaintFilter::QwtPBPaintFilter(const <a class="code" href="class_qwt_push_button.html">QwtPushButton</a> *button):
00043     d_button(button),
00044     d_inFilter(FALSE)
00045 {
00046 }
00047 
00048 <span class="keywordtype">bool</span> QwtPBPaintFilter::cmd(<span class="keywordtype">int</span> c, QPainter *painter, QPDevCmdParam *param)
00049 {
00050     <span class="keywordflow">switch</span>(c)
00051     {
00052         <span class="keywordflow">case</span> PdcDrawTextFormatted:
00053         <span class="keywordflow">case</span> PdcDrawText2Formatted:
00054         {
00055             Qt::TextFormat textFormat = d_button-&gt;usedTextFormat();
00056             <span class="keywordflow">if</span> ( textFormat == Qt::PlainText )
00057             {
00058                 param[1].ival = d_button-&gt;alignment();
00059 
00060                 QRect &amp;r = *((QRect *)param[0].rect);
00061                 r = indentRect(r);
00062 
00063                 <span class="keywordflow">return</span> QPicture::cmd(c, painter, param);
00064             }
00065             <span class="keywordflow">if</span> ( textFormat == Qt::RichText )
00066             {
00067                 <span class="keywordflow">if</span> ( !d_inFilter ) <span class="comment">// avoid recursive calls</span>
00068                 {
00069                     d_inFilter = TRUE;
00070                     <a class="code" href="class_qwt_rich_text.html">QwtRichText</a> richText(*param[2].str, painter-&gt;font(), 
00071                         d_button-&gt;alignment(), painter-&gt;pen().color());
00072                     richText.draw(painter, indentRect(*param[0].rect));
00073                     d_inFilter = FALSE;
00074                     <span class="keywordflow">return</span> TRUE;
00075                 }
00076             }
00077             <span class="keywordflow">break</span>;
00078         }
00079         <span class="keywordflow">case</span> PdcDrawPixmap:
00080         {
00081             <span class="keywordflow">if</span> ( d_inFilter ) <span class="comment">// avoid recursive calls</span>
00082             {
00083                 <span class="comment">// There might be pixmaps embedded in rich text.</span>
00084                 <span class="comment">// This problem is solved by the d_inFilter guard </span>
00085                 <span class="comment">// above too.</span>
00086                 <span class="keywordflow">break</span>;
00087             }
00088 
00089             <span class="keywordflow">if</span> ( isLabel(param[1].pixmap) &amp;&amp;
00090                 !(d_button-&gt;alignment() &amp; Qt::AlignCenter))
00091             {
00092                 <span class="keyword">const</span> QRect contentsRect =
00093 <span class="preprocessor">#if QT_VERSION &gt;= 300</span>
00094 <span class="preprocessor"></span>                    d_button-&gt;style().subRect( 
00095                         QStyle::SR_PushButtonContents, d_button);
00096 <span class="preprocessor">#else</span>
00097 <span class="preprocessor"></span>                    d_button-&gt;style().pushButtonContentsRect(
00098                         (QPushButton *)d_button);
00099 <span class="preprocessor">#endif</span>
00100 <span class="preprocessor"></span>
00101                 QRect pixRect = contentsRect;
00102                 <span class="keywordflow">if</span> ( !d_iconRect.isEmpty() )
00103                     pixRect.setX(d_iconRect.right());
00104 
00105                 <span class="comment">// Many styles move the label right/down</span>
00106                 <span class="comment">// when the button is down.</span>
00107 
00108 <span class="preprocessor">#if QT_VERSION &gt;= 300</span>
00109 <span class="preprocessor"></span>                <span class="keyword">const</span> QRect &amp;r = *((QRect *)param[0].rect);
00110 <span class="preprocessor">#else</span>
00111 <span class="preprocessor"></span>                <span class="keyword">const</span> QRect r(*param[0].point, param[1].pixmap-&gt;size());
00112 <span class="preprocessor">#endif</span>
00113 <span class="preprocessor"></span>                <span class="keyword">const</span> <span class="keywordtype">int</span> offsetY = r.center().y() - pixRect.center().y();
00114                 <span class="keyword">const</span> <span class="keywordtype">int</span> offsetX = d_iconRect.isEmpty() ? offsetY : 0;
00115                 pixRect.moveBy(offsetX, offsetY);
00116 
00117                 <span class="keywordflow">if</span> ( d_button-&gt;indent() &gt; 0 )
00118                 {
00119                     <span class="keyword">const</span> <span class="keywordtype">int</span> indent = d_button-&gt;indent();
00120                     <span class="keyword">const</span> <span class="keywordtype">int</span> align = d_button-&gt;alignment();
00121 
00122                     <span class="keywordflow">if</span> ( align &amp; Qt::AlignRight )
00123                         pixRect.setRight(pixRect.right() - indent);
00124                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( align &amp; Qt::AlignLeft )
00125                         pixRect.setLeft(pixRect.left() + indent);
00126 
00127                     <span class="keywordflow">if</span> ( align &amp; Qt::AlignTop )
00128                         pixRect.setTop(pixRect.top() + indent);
00129                     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( align &amp; Qt::AlignBottom )
00130                         pixRect.setBottom(pixRect.bottom() - indent);
00131                 }
00132 
00133                 pixRect &amp;= contentsRect; <span class="comment">// clip to contentsRect</span>
00134 
00135                 d_inFilter = TRUE;
00136 
00137                 d_button-&gt;style().drawItem(painter, 
00138 #<span class="keywordflow">if</span> QT_VERSION &gt;= 300
00139                     pixRect,
00140 #<span class="keywordflow">else</span>
00141                     pixRect.x(), pixRect.y(), 
00142                     pixRect.width(), pixRect.height(),
00143 <span class="preprocessor">#endif</span>
00144 <span class="preprocessor"></span>                    d_button-&gt;alignment(), d_button-&gt;colorGroup(), 
00145                     d_button-&gt;isEnabled(), param[1].pixmap, QString::null);
00146 
00147                 d_inFilter = FALSE;
00148                 <span class="keywordflow">return</span> TRUE;
00149             }
00150             <span class="keywordflow">else</span>
00151             {
00152                 <span class="comment">// We save the position of the icon. We need it later</span>
00153                 <span class="comment">// to align the label pixmap. Hope that there are no styles</span>
00154                 <span class="comment">// that paint the pixmap before the icon.</span>
00155 <span class="preprocessor">#if QT_VERSION &lt; 300</span>
00156 <span class="preprocessor"></span>                d_iconRect = QRect(*param[0].point, param[1].pixmap-&gt;size());
00157 <span class="preprocessor">#else</span>
00158 <span class="preprocessor"></span>                d_iconRect = *param[0].rect;
00159 <span class="preprocessor">#endif</span>
00160 <span class="preprocessor"></span>            }
00161             <span class="keywordflow">break</span>;
00162         }
00163     }
00164     <span class="keywordflow">return</span> QPicture::cmd(c, painter, param);
00165 }
00166 
00167 QRect QwtPBPaintFilter::indentRect(<span class="keyword">const</span> QRect &amp;rect)<span class="keyword"> const</span>
00168 <span class="keyword"></span>{
00169     <span class="keyword">const</span> <span class="keywordtype">int</span> indent = d_button-&gt;indent();
00170     <span class="keywordflow">if</span> ( indent &lt;= 0 )
00171         <span class="keywordflow">return</span> rect;
00172 
00173     QRect r = rect;
00174     <span class="keywordflow">if</span> ( d_button-&gt;alignment() &amp; Qt::AlignRight )
00175         r.setRight(r.right() - indent);
00176     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( d_button-&gt;alignment() &amp; Qt::AlignLeft )
00177         r.setLeft(r.left() + indent);
00178 
00179     <span class="keywordflow">if</span> ( d_button-&gt;alignment() &amp; Qt::AlignTop )
00180         r.setTop(r.top() + indent);
00181     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( d_button-&gt;alignment() &amp; Qt::AlignBottom )
00182         r.setBottom(r.bottom() - indent);
00183 
00184     <span class="keywordflow">return</span> r;
00185 }
00186 
00187 <span class="keywordtype">bool</span> QwtPBPaintFilter::isLabel(<span class="keyword">const</span> QPixmap *pixmap)<span class="keyword"> const</span>
00188 <span class="keyword"></span>{
00189     <span class="keywordflow">if</span> ( !d_button-&gt;pixmap() || 
00190         d_button-&gt;pixmap()-&gt;serialNumber() != pixmap-&gt;serialNumber() )
00191     {
00192         <span class="keywordflow">return</span> FALSE;
00193     }
00194 
00195     <span class="keywordflow">if</span> ( d_button-&gt;iconSet() &amp;&amp; !d_button-&gt;iconSet()-&gt;isNull() )
00196     {
00197         <span class="keywordflow">if</span> ( d_button-&gt;iconSet()-&gt;pixmap().serialNumber() == 
00198             pixmap-&gt;serialNumber() )
00199         {
00200             <span class="comment">// Iconset and label are both set, and use the same pixmap.</span>
00201             <span class="comment">// We hope the iconSet is painted first.</span>
00202 
00203             <span class="keyword">static</span> <span class="keywordtype">bool</span> firstPixmap = TRUE;
00204             firstPixmap = !firstPixmap;
00205 
00206             <span class="keywordflow">return</span> !firstPixmap;
00207         }
00208     }
00209     <span class="keywordflow">return</span> TRUE;
00210 }
00211 
00212 <span class="preprocessor">#endif // !QT_NO_PICTURE</span>
00213 <span class="preprocessor"></span>
<a name="l00217"></a><a class="code" href="class_qwt_push_button.html#a0">00217</a> <a class="code" href="class_qwt_push_button.html#a0">QwtPushButton::QwtPushButton</a>(QWidget *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name):
00218     QPushButton(parent, name)
00219 {
00220     init();
00221 }
00222 
<a name="l00227"></a><a class="code" href="class_qwt_push_button.html#a1">00227</a> <a class="code" href="class_qwt_push_button.html#a0">QwtPushButton::QwtPushButton</a>(<span class="keyword">const</span> QString &amp;text, 
00228         QWidget *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name):
00229     QPushButton(text, parent, name)
00230 {
00231     init();
00232 }
00233 
<a name="l00237"></a><a class="code" href="class_qwt_push_button.html#a2">00237</a> <a class="code" href="class_qwt_push_button.html#a0">QwtPushButton::QwtPushButton</a>(<span class="keyword">const</span> QIconSet &amp;iconSet, <span class="keyword">const</span> QString &amp;text, 
00238         QWidget *parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name):
00239     QPushButton(iconSet, text, parent, name)
00240 {
00241     init();
00242 }
00243 
00245 <span class="keywordtype">void</span> QwtPushButton::init()
00246 {
00247     d_textFormat = Qt::AutoText;
00248     d_alignment = Qt::AlignCenter | Qt::ExpandTabs | Qt::WordBreak;
00249     d_indent = 4;
00250 }
00251 
<a name="l00262"></a><a class="code" href="class_qwt_push_button.html#a5">00262</a> Qt::TextFormat <a class="code" href="class_qwt_push_button.html#a5">QwtPushButton::usedTextFormat</a>()<span class="keyword"> const</span>
00263 <span class="keyword"></span>{
00264 <span class="preprocessor">#ifndef QT_NO_PICTURE</span>
00265 <span class="preprocessor"></span>    <span class="keywordflow">if</span> ( d_textFormat == Qt::AutoText &amp;&amp; QStyleSheet::mightBeRichText(text()) )
00266         <span class="keywordflow">return</span> Qt::RichText;
00267 <span class="preprocessor">#endif</span>
00268 <span class="preprocessor"></span>
00269     <span class="keywordflow">return</span> Qt::PlainText;
00270 }
00271 
<a name="l00277"></a><a class="code" href="class_qwt_push_button.html#a3">00277</a> Qt::TextFormat <a class="code" href="class_qwt_push_button.html#a3">QwtPushButton::textFormat</a>()<span class="keyword"> const</span>
00278 <span class="keyword"></span>{
00279     <span class="keywordflow">return</span> d_textFormat;
00280 }
00281 
<a name="l00291"></a><a class="code" href="class_qwt_push_button.html#a4">00291</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_push_button.html#a4">QwtPushButton::setTextFormat</a>(TextFormat textFormat)
00292 {
00293     d_textFormat = textFormat;
00294 }
00295 
<a name="l00301"></a><a class="code" href="class_qwt_push_button.html#a6">00301</a> <span class="keywordtype">int</span> <a class="code" href="class_qwt_push_button.html#a6">QwtPushButton::alignment</a>()<span class="keyword"> const</span>
00302 <span class="keyword"></span>{
00303     <span class="keywordflow">return</span> d_alignment;
00304 }
00305 
<a name="l00315"></a><a class="code" href="class_qwt_push_button.html#a7">00315</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_push_button.html#a7">QwtPushButton::setAlignment</a>(<span class="keywordtype">int</span> alignment)
00316 {
00317     d_alignment = alignment;
00318 }
00319 
<a name="l00325"></a><a class="code" href="class_qwt_push_button.html#a9">00325</a> <span class="keywordtype">int</span> <a class="code" href="class_qwt_push_button.html#a9">QwtPushButton::indent</a>()<span class="keyword"> const</span>
00326 <span class="keyword"></span>{
00327     <span class="keywordflow">return</span> d_indent;
00328 }
00329     
<a name="l00340"></a><a class="code" href="class_qwt_push_button.html#a8">00340</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_push_button.html#a8">QwtPushButton::setIndent</a>(<span class="keywordtype">int</span> indent)
00341 {   
00342     d_indent = indent;
00343 }
00344 
<a name="l00352"></a><a class="code" href="class_qwt_push_button.html#a11">00352</a> <span class="keywordtype">int</span> <a class="code" href="class_qwt_push_button.html#a11">QwtPushButton::heightForWidth</a>(<span class="keywordtype">int</span> width)<span class="keyword"> const</span>
00353 <span class="keyword"></span>{
00354     <span class="keywordflow">if</span> ( pixmap() )
00355         <span class="keywordflow">return</span> QPushButton::heightForWidth(width);
00356 
00357     <a class="code" href="class_qwt_text.html">QwtText</a> *txt = <a class="code" href="class_qwt_text.html#e0">QwtText::makeText</a>(text(), <a class="code" href="class_qwt_push_button.html#a5">usedTextFormat</a>(),
00358         d_alignment, font());
00359 
00360     <span class="keywordtype">int</span> h = <a class="code" href="class_qwt_push_button.html#a10">sizeHint</a>().height();
00361     h -= txt-&gt;<a class="code" href="class_qwt_text.html#a17">boundingRect</a>().height();
00362     h += txt-&gt;<a class="code" href="class_qwt_text.html#a16">heightForWidth</a>(width);
00363 
00364     <span class="keyword">delete</span> txt;
00365 
00366     <span class="keywordflow">return</span> h;
00367 }
00368 
<a name="l00370"></a><a class="code" href="class_qwt_push_button.html#a10">00370</a> QSize <a class="code" href="class_qwt_push_button.html#a10">QwtPushButton::sizeHint</a>()<span class="keyword"> const</span>
00371 <span class="keyword"></span>{
00372     QSize hint = QPushButton::sizeHint();
00373 
00374     <span class="keywordflow">if</span> ( d_indent &gt; 0 )
00375     {
00376         <span class="keywordflow">if</span> ( (d_alignment &amp; Qt::AlignLeft)  
00377             || (d_alignment &amp; Qt::AlignRight) )
00378         {
00379             hint.setWidth(hint.width() + d_indent);
00380         }
00381         <span class="keywordflow">if</span> ( (d_alignment &amp; Qt::AlignTop) 
00382             || (d_alignment &amp; Qt::AlignBottom) )
00383         {
00384             hint.setHeight(hint.height() + d_indent);
00385         }
00386     }
00387 
00388     <span class="keywordflow">if</span> ( pixmap() )
00389         <span class="keywordflow">return</span> hint;
00390 
00391     <span class="keyword">const</span> Qt::TextFormat <a class="code" href="class_qwt_push_button.html#a3">textFormat</a> = <a class="code" href="class_qwt_push_button.html#a5">usedTextFormat</a>();
00392     <span class="keywordflow">if</span> ( textFormat == Qt::RichText )
00393     {
00394         <a class="code" href="class_qwt_rich_text.html">QwtRichText</a> richText(text(), font(), d_alignment);
00395 
00396         <span class="keyword">const</span> QSize sizeText = fontMetrics().size(Qt::ShowPrefix, text());
00397         <span class="keyword">const</span> QSize sizeRichText(richText.<a class="code" href="class_qwt_rich_text.html#a8">boundingRect</a>().size());
00398 
00399         <span class="keywordtype">int</span> iconHeight = 0;
00400         <span class="keywordflow">if</span> ( iconSet() &amp;&amp; !iconSet()-&gt;isNull() )
00401         {
00402             iconHeight = iconSet()-&gt;pixmap(QIconSet::Small,
00403                 QIconSet::Normal).height();
00404         }
00405 
00406         <span class="keyword">const</span> <span class="keywordtype">int</span> heightText = QMAX(iconHeight, sizeText.height());
00407         <span class="keyword">const</span> <span class="keywordtype">int</span> heightRichText = QMAX(iconHeight, sizeRichText.height());
00408 
00409         hint.setWidth(hint.width() - sizeText.width() + sizeRichText.width());
00410         hint.setHeight(hint.height() - heightText + heightRichText);
00411     }
00412 
00413     <span class="keywordflow">return</span> hint;
00414 }
00415 
<a name="l00417"></a><a class="code" href="class_qwt_push_button.html#b0">00417</a> <span class="keywordtype">void</span> <a class="code" href="class_qwt_push_button.html#b0">QwtPushButton::drawButtonLabel</a>(QPainter *painter)
00418 {
00419 <span class="preprocessor">#ifndef QT_NO_PICTURE</span>
00420 <span class="preprocessor"></span>    <span class="comment">// Unfortunately QStyle doesnt offer an API to add</span>
00421     <span class="comment">// the alignment and rich text features. But we dont want</span>
00422     <span class="comment">// to paint the button label on our own, as we would lose</span>
00423     <span class="comment">// the flexibility of the styles. So we let the style</span>
00424     <span class="comment">// paint the button label to a QPicture first, change</span>
00425     <span class="comment">// the paint commands and replay the manipulated commands</span>
00426     <span class="comment">// to the button.</span>
00427 
00428     QwtPBPaintFilter paintFilter(<span class="keyword">this</span>);
00429 
00430     QPainter picPainter(&amp;paintFilter);
00431     picPainter.setFont(painter-&gt;font());
00432 
00433 <span class="preprocessor">#if QT_VERSION &gt;= 300</span>
00434 <span class="preprocessor"></span>    <span class="comment">// When painting to QPicture the dotted line of the focus rect is</span>
00435     <span class="comment">// set to solid. ( 06.08.2003 )</span>
00436     <span class="comment">// So we dont set the Style_HasFocus flag and paint the focus rect</span>
00437     <span class="comment">// later directly to the button.</span>
00438 
00439     QStyle::SFlags flags = QStyle::Style_Default;
00440     <span class="keywordflow">if</span> (isEnabled())
00441         flags |= QStyle::Style_Enabled;
00442     <span class="keywordflow">if</span> (isDown())
00443         flags |= QStyle::Style_Down;
00444     <span class="keywordflow">if</span> (isOn())
00445         flags |= QStyle::Style_On;
00446     <span class="keywordflow">if</span> (! isFlat() &amp;&amp; ! isDown())
00447         flags |= QStyle::Style_Raised;
00448     <span class="keywordflow">if</span> (isDefault())
00449         flags |= QStyle::Style_ButtonDefault;
00450 
00451     style().drawControl(QStyle::CE_PushButtonLabel, &amp;picPainter, <span class="keyword">this</span>,
00452             style().subRect(QStyle::SR_PushButtonContents, <span class="keyword">this</span>),
00453             colorGroup(), flags);
00454 <span class="preprocessor">#else</span>
00455 <span class="preprocessor"></span>    <span class="comment">// For Qt &lt;= 2.x the focus rect is not painted in</span>
00456     <span class="comment">// drawButtonLabel. So we dont need a workaround here.</span>
00457 
00458     QPushButton::drawButtonLabel(&amp;picPainter);
00459 <span class="preprocessor">#endif</span>
00460 <span class="preprocessor"></span>
00461     picPainter.end();
00462 
00463     paintFilter.play(painter); 
00464 
00465 <span class="preprocessor">#if QT_VERSION &gt;= 300</span>
00466 <span class="preprocessor"></span>    <span class="keywordflow">if</span> (hasFocus())
00467     {
00468         <span class="comment">// Paint the focus rect on top of the button label.</span>
00469 
00470         flags |= QStyle::Style_HasFocus;
00471         style().drawPrimitive(QStyle::PE_FocusRect, painter, 
00472             style().subRect(QStyle::SR_PushButtonFocusRect, <span class="keyword">this</span>), 
00473             colorGroup(), flags);
00474     }
00475 <span class="preprocessor">#endif</span>
00476 <span class="preprocessor"></span>
00477 <span class="preprocessor">#else // QT_NO_PICTURE</span>
00478 <span class="preprocessor"></span>    QPushButton::drawButtonLabel(painter);
00479 <span class="preprocessor">#endif</span>
00480 <span class="preprocessor"></span>}
00481 
00482 <span class="comment">// Local Variables:</span>
00483 <span class="comment">// mode: C++</span>
00484 <span class="comment">// c-file-style: "stroustrup"</span>
00485 <span class="comment">// indent-tabs-mode: nil</span>
00486 <span class="comment">// End:</span>
</div></pre><hr size="1"><address style="align: right;"><small>Generated on Tue Nov 16 21:12:21 2004 for Qwt User's Guide by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 ></a> 1.3.8 </small></address>
</body>
</html>