author | chicken <chicken> | 2004-03-01 15:44:36 (UTC) |
---|---|---|
committer | chicken <chicken> | 2004-03-01 15:44:36 (UTC) |
commit | c50e4c32d34a0550f167480b6306aac632fb201c (patch) (unidiff) | |
tree | a0795fa171d7410624717f120d1bd17f6c8f3224 | |
parent | 01abceaeb00bc35fa9bf5792eb51aa70b68f110d (diff) | |
download | opie-c50e4c32d34a0550f167480b6306aac632fb201c.zip opie-c50e4c32d34a0550f167480b6306aac632fb201c.tar.gz opie-c50e4c32d34a0550f167480b6306aac632fb201c.tar.bz2 |
fix includes
-rw-r--r-- | libopie/colordialog.cpp | 2 | ||||
-rw-r--r-- | libopie/colorpopupmenu.cpp | 1 | ||||
-rw-r--r-- | libopie/ocheckitem.cpp | 1 | ||||
-rw-r--r-- | libopie/ocolorbutton.cpp | 3 | ||||
-rw-r--r-- | libopie/odevice.cpp | 1 | ||||
-rw-r--r-- | libopie/odevicebutton.cpp | 2 | ||||
-rw-r--r-- | libopie/ofiledialog.cc | 3 | ||||
-rw-r--r-- | libopie/ofileselector.cpp | 5 | ||||
-rw-r--r-- | libopie/ofontselector.cpp | 1 | ||||
-rw-r--r-- | libopie/oprocctrl.cpp | 1 | ||||
-rw-r--r-- | libopie/oprocess.cpp | 1 | ||||
-rw-r--r-- | libopie/orecurrancewidget.cpp | 2 | ||||
-rw-r--r-- | libopie/oticker.cpp | 9 | ||||
-rw-r--r-- | libopie/otimepicker.cpp | 3 | ||||
-rw-r--r-- | libopie/owait.cpp | 2 | ||||
-rw-r--r-- | libopie/pim/ocontactaccessbackend_xml.cpp | 5 | ||||
-rw-r--r-- | libopie/pim/otodo.cpp | 3 |
17 files changed, 4 insertions, 41 deletions
diff --git a/libopie/colordialog.cpp b/libopie/colordialog.cpp index c7421ec..d46da41 100644 --- a/libopie/colordialog.cpp +++ b/libopie/colordialog.cpp | |||
@@ -1,243 +1,241 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | ** $Id$ | 2 | ** $Id$ |
3 | ** | 3 | ** |
4 | ** Implementation of OColorDialog class | 4 | ** Implementation of OColorDialog class |
5 | ** | 5 | ** |
6 | ** Created : 990222 | 6 | ** Created : 990222 |
7 | ** | 7 | ** |
8 | ** Copyright (C) 1999-2000 Trolltech AS. All rights reserved. | 8 | ** Copyright (C) 1999-2000 Trolltech AS. All rights reserved. |
9 | ** | 9 | ** |
10 | ** This file is part of the dialogs module of the Qt GUI Toolkit. | 10 | ** This file is part of the dialogs module of the Qt GUI Toolkit. |
11 | ** | 11 | ** |
12 | ** This file may be distributed under the terms of the Q Public License | 12 | ** This file may be distributed under the terms of the Q Public License |
13 | ** as defined by Trolltech AS of Norway and appearing in the file | 13 | ** as defined by Trolltech AS of Norway and appearing in the file |
14 | ** LICENSE.QPL included in the packaging of this file. | 14 | ** LICENSE.QPL included in the packaging of this file. |
15 | ** | 15 | ** |
16 | ** This file may be distributed and/or modified under the terms of the | 16 | ** This file may be distributed and/or modified under the terms of the |
17 | ** GNU General Public License version 2 as published by the Free Software | 17 | ** GNU General Public License version 2 as published by the Free Software |
18 | ** Foundation and appearing in the file LICENSE.GPL included in the | 18 | ** Foundation and appearing in the file LICENSE.GPL included in the |
19 | ** packaging of this file. | 19 | ** packaging of this file. |
20 | ** | 20 | ** |
21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition | 21 | ** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition |
22 | ** licenses may use this file in accordance with the Qt Commercial License | 22 | ** licenses may use this file in accordance with the Qt Commercial License |
23 | ** Agreement provided with the Software. | 23 | ** Agreement provided with the Software. |
24 | ** | 24 | ** |
25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 25 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 26 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
27 | ** | 27 | ** |
28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for | 28 | ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for |
29 | ** information about Qt Commercial License Agreements. | 29 | ** information about Qt Commercial License Agreements. |
30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. | 30 | ** See http://www.trolltech.com/qpl/ for QPL licensing information. |
31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 31 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
32 | ** | 32 | ** |
33 | ** Contact info@trolltech.com if any conditions of this licensing are | 33 | ** Contact info@trolltech.com if any conditions of this licensing are |
34 | ** not clear to you. | 34 | ** not clear to you. |
35 | ** | 35 | ** |
36 | **********************************************************************/ | 36 | **********************************************************************/ |
37 | 37 | ||
38 | #include "colordialog.h" | 38 | #include "colordialog.h" |
39 | 39 | ||
40 | #include "qpainter.h" | 40 | #include "qpainter.h" |
41 | #include "qlayout.h" | 41 | #include "qlayout.h" |
42 | #include "qlabel.h" | 42 | #include "qlabel.h" |
43 | #include "qpushbutton.h" | 43 | #include "qpushbutton.h" |
44 | #include "qlineedit.h" | 44 | #include "qlineedit.h" |
45 | #include "qimage.h" | 45 | #include "qimage.h" |
46 | #include "qpixmap.h" | 46 | #include "qpixmap.h" |
47 | #include "qdrawutil.h" | 47 | #include "qdrawutil.h" |
48 | #include "qvalidator.h" | 48 | #include "qvalidator.h" |
49 | #include "qdragobject.h" | ||
50 | #include "qapplication.h" | 49 | #include "qapplication.h" |
51 | #include "qdragobject.h" | ||
52 | 50 | ||
53 | static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v ) | 51 | static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v ) |
54 | { | 52 | { |
55 | QColor c; | 53 | QColor c; |
56 | c.setRgb( rgb ); | 54 | c.setRgb( rgb ); |
57 | c.getHsv(h,s,v); | 55 | c.getHsv(h,s,v); |
58 | } | 56 | } |
59 | 57 | ||
60 | /* | 58 | /* |
61 | * avoid clashes with the original Qt | 59 | * avoid clashes with the original Qt |
62 | */ | 60 | */ |
63 | namespace { | 61 | namespace { |
64 | 62 | ||
65 | class QColorPicker : public QFrame | 63 | class QColorPicker : public QFrame |
66 | { | 64 | { |
67 | Q_OBJECT | 65 | Q_OBJECT |
68 | public: | 66 | public: |
69 | QColorPicker(QWidget* parent=0, const char* name=0); | 67 | QColorPicker(QWidget* parent=0, const char* name=0); |
70 | ~QColorPicker(); | 68 | ~QColorPicker(); |
71 | 69 | ||
72 | public slots: | 70 | public slots: |
73 | void setCol( int h, int s ); | 71 | void setCol( int h, int s ); |
74 | 72 | ||
75 | signals: | 73 | signals: |
76 | void newCol( int h, int s ); | 74 | void newCol( int h, int s ); |
77 | 75 | ||
78 | protected: | 76 | protected: |
79 | QSize sizeHint() const; | 77 | QSize sizeHint() const; |
80 | QSizePolicy sizePolicy() const; | 78 | QSizePolicy sizePolicy() const; |
81 | void drawContents(QPainter* p); | 79 | void drawContents(QPainter* p); |
82 | void mouseMoveEvent( QMouseEvent * ); | 80 | void mouseMoveEvent( QMouseEvent * ); |
83 | void mousePressEvent( QMouseEvent * ); | 81 | void mousePressEvent( QMouseEvent * ); |
84 | 82 | ||
85 | private: | 83 | private: |
86 | int hue; | 84 | int hue; |
87 | int sat; | 85 | int sat; |
88 | 86 | ||
89 | QPoint colPt(); | 87 | QPoint colPt(); |
90 | int huePt( const QPoint &pt ); | 88 | int huePt( const QPoint &pt ); |
91 | int satPt( const QPoint &pt ); | 89 | int satPt( const QPoint &pt ); |
92 | void setCol( const QPoint &pt ); | 90 | void setCol( const QPoint &pt ); |
93 | 91 | ||
94 | QPixmap *pix; | 92 | QPixmap *pix; |
95 | }; | 93 | }; |
96 | 94 | ||
97 | static int pWidth = 200; | 95 | static int pWidth = 200; |
98 | static int pHeight = 200; | 96 | static int pHeight = 200; |
99 | 97 | ||
100 | class QColorLuminancePicker : public QWidget | 98 | class QColorLuminancePicker : public QWidget |
101 | { | 99 | { |
102 | Q_OBJECT | 100 | Q_OBJECT |
103 | public: | 101 | public: |
104 | QColorLuminancePicker(QWidget* parent=0, const char* name=0); | 102 | QColorLuminancePicker(QWidget* parent=0, const char* name=0); |
105 | ~QColorLuminancePicker(); | 103 | ~QColorLuminancePicker(); |
106 | 104 | ||
107 | public slots: | 105 | public slots: |
108 | void setCol( int h, int s, int v ); | 106 | void setCol( int h, int s, int v ); |
109 | void setCol( int h, int s ); | 107 | void setCol( int h, int s ); |
110 | 108 | ||
111 | signals: | 109 | signals: |
112 | void newHsv( int h, int s, int v ); | 110 | void newHsv( int h, int s, int v ); |
113 | 111 | ||
114 | protected: | 112 | protected: |
115 | // QSize sizeHint() const; | 113 | // QSize sizeHint() const; |
116 | // QSizePolicy sizePolicy() const; | 114 | // QSizePolicy sizePolicy() const; |
117 | void paintEvent( QPaintEvent*); | 115 | void paintEvent( QPaintEvent*); |
118 | void mouseMoveEvent( QMouseEvent * ); | 116 | void mouseMoveEvent( QMouseEvent * ); |
119 | void mousePressEvent( QMouseEvent * ); | 117 | void mousePressEvent( QMouseEvent * ); |
120 | 118 | ||
121 | private: | 119 | private: |
122 | enum { foff = 3, coff = 4 }; //frame and contents offset | 120 | enum { foff = 3, coff = 4 }; //frame and contents offset |
123 | int val; | 121 | int val; |
124 | int hue; | 122 | int hue; |
125 | int sat; | 123 | int sat; |
126 | 124 | ||
127 | int y2val( int y ); | 125 | int y2val( int y ); |
128 | int val2y( int val ); | 126 | int val2y( int val ); |
129 | void setVal( int v ); | 127 | void setVal( int v ); |
130 | 128 | ||
131 | QPixmap *pix; | 129 | QPixmap *pix; |
132 | }; | 130 | }; |
133 | 131 | ||
134 | 132 | ||
135 | int QColorLuminancePicker::y2val( int y ) | 133 | int QColorLuminancePicker::y2val( int y ) |
136 | { | 134 | { |
137 | int d = height() - 2*coff - 1; | 135 | int d = height() - 2*coff - 1; |
138 | return 255 - (y - coff)*255/d; | 136 | return 255 - (y - coff)*255/d; |
139 | } | 137 | } |
140 | 138 | ||
141 | int QColorLuminancePicker::val2y( int v ) | 139 | int QColorLuminancePicker::val2y( int v ) |
142 | { | 140 | { |
143 | int d = height() - 2*coff - 1; | 141 | int d = height() - 2*coff - 1; |
144 | return coff + (255-v)*d/255; | 142 | return coff + (255-v)*d/255; |
145 | } | 143 | } |
146 | 144 | ||
147 | QColorLuminancePicker::QColorLuminancePicker(QWidget* parent, | 145 | QColorLuminancePicker::QColorLuminancePicker(QWidget* parent, |
148 | const char* name) | 146 | const char* name) |
149 | :QWidget( parent, name ) | 147 | :QWidget( parent, name ) |
150 | { | 148 | { |
151 | hue = 100; val = 100; sat = 100; | 149 | hue = 100; val = 100; sat = 100; |
152 | pix = 0; | 150 | pix = 0; |
153 | // setBackgroundMode( NoBackground ); | 151 | // setBackgroundMode( NoBackground ); |
154 | } | 152 | } |
155 | 153 | ||
156 | QColorLuminancePicker::~QColorLuminancePicker() | 154 | QColorLuminancePicker::~QColorLuminancePicker() |
157 | { | 155 | { |
158 | delete pix; | 156 | delete pix; |
159 | } | 157 | } |
160 | 158 | ||
161 | void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m ) | 159 | void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m ) |
162 | { | 160 | { |
163 | setVal( y2val(m->y()) ); | 161 | setVal( y2val(m->y()) ); |
164 | } | 162 | } |
165 | void QColorLuminancePicker::mousePressEvent( QMouseEvent *m ) | 163 | void QColorLuminancePicker::mousePressEvent( QMouseEvent *m ) |
166 | { | 164 | { |
167 | setVal( y2val(m->y()) ); | 165 | setVal( y2val(m->y()) ); |
168 | } | 166 | } |
169 | 167 | ||
170 | void QColorLuminancePicker::setVal( int v ) | 168 | void QColorLuminancePicker::setVal( int v ) |
171 | { | 169 | { |
172 | if ( val == v ) | 170 | if ( val == v ) |
173 | return; | 171 | return; |
174 | val = QMAX( 0, QMIN(v,255)); | 172 | val = QMAX( 0, QMIN(v,255)); |
175 | delete pix; pix=0; | 173 | delete pix; pix=0; |
176 | repaint( FALSE ); //### | 174 | repaint( FALSE ); //### |
177 | emit newHsv( hue, sat, val ); | 175 | emit newHsv( hue, sat, val ); |
178 | } | 176 | } |
179 | 177 | ||
180 | //receives from a hue,sat chooser and relays. | 178 | //receives from a hue,sat chooser and relays. |
181 | void QColorLuminancePicker::setCol( int h, int s ) | 179 | void QColorLuminancePicker::setCol( int h, int s ) |
182 | { | 180 | { |
183 | setCol( h, s, val ); | 181 | setCol( h, s, val ); |
184 | emit newHsv( h, s, val ); | 182 | emit newHsv( h, s, val ); |
185 | } | 183 | } |
186 | 184 | ||
187 | void QColorLuminancePicker::paintEvent( QPaintEvent * ) | 185 | void QColorLuminancePicker::paintEvent( QPaintEvent * ) |
188 | { | 186 | { |
189 | int w = width() - 5; | 187 | int w = width() - 5; |
190 | 188 | ||
191 | QRect r( 0, foff, w, height() - 2*foff ); | 189 | QRect r( 0, foff, w, height() - 2*foff ); |
192 | int wi = r.width() - 2; | 190 | int wi = r.width() - 2; |
193 | int hi = r.height() - 2; | 191 | int hi = r.height() - 2; |
194 | if ( !pix || pix->height() != hi || pix->width() != wi ) { | 192 | if ( !pix || pix->height() != hi || pix->width() != wi ) { |
195 | delete pix; | 193 | delete pix; |
196 | QImage img( wi, hi, 32 ); | 194 | QImage img( wi, hi, 32 ); |
197 | int y; | 195 | int y; |
198 | for ( y = 0; y < hi; y++ ) { | 196 | for ( y = 0; y < hi; y++ ) { |
199 | QColor c( hue, sat, y2val(y+coff), QColor::Hsv ); | 197 | QColor c( hue, sat, y2val(y+coff), QColor::Hsv ); |
200 | QRgb r = c.rgb(); | 198 | QRgb r = c.rgb(); |
201 | int x; | 199 | int x; |
202 | for ( x = 0; x < wi; x++ ) | 200 | for ( x = 0; x < wi; x++ ) |
203 | img.setPixel( x, y, r ); | 201 | img.setPixel( x, y, r ); |
204 | } | 202 | } |
205 | pix = new QPixmap; | 203 | pix = new QPixmap; |
206 | pix->convertFromImage(img); | 204 | pix->convertFromImage(img); |
207 | } | 205 | } |
208 | QPainter p(this); | 206 | QPainter p(this); |
209 | p.drawPixmap( 1, coff, *pix ); | 207 | p.drawPixmap( 1, coff, *pix ); |
210 | QColorGroup g = colorGroup(); | 208 | QColorGroup g = colorGroup(); |
211 | qDrawShadePanel( &p, r, g, TRUE ); | 209 | qDrawShadePanel( &p, r, g, TRUE ); |
212 | p.setPen( g.foreground() ); | 210 | p.setPen( g.foreground() ); |
213 | p.setBrush( g.foreground() ); | 211 | p.setBrush( g.foreground() ); |
214 | QPointArray a; | 212 | QPointArray a; |
215 | int y = val2y(val); | 213 | int y = val2y(val); |
216 | a.setPoints( 3, w, y, w+5, y+5, w+5, y-5 ); | 214 | a.setPoints( 3, w, y, w+5, y+5, w+5, y-5 ); |
217 | erase( w, 0, 5, height() ); | 215 | erase( w, 0, 5, height() ); |
218 | p.drawPolygon( a ); | 216 | p.drawPolygon( a ); |
219 | } | 217 | } |
220 | 218 | ||
221 | void QColorLuminancePicker::setCol( int h, int s , int v ) | 219 | void QColorLuminancePicker::setCol( int h, int s , int v ) |
222 | { | 220 | { |
223 | val = v; | 221 | val = v; |
224 | hue = h; | 222 | hue = h; |
225 | sat = s; | 223 | sat = s; |
226 | delete pix; pix=0; | 224 | delete pix; pix=0; |
227 | repaint( FALSE );//#### | 225 | repaint( FALSE );//#### |
228 | } | 226 | } |
229 | 227 | ||
230 | QPoint QColorPicker::colPt() | 228 | QPoint QColorPicker::colPt() |
231 | { return QPoint( (360-hue)*(pWidth-1)/360, (255-sat)*(pHeight-1)/255 ); } | 229 | { return QPoint( (360-hue)*(pWidth-1)/360, (255-sat)*(pHeight-1)/255 ); } |
232 | int QColorPicker::huePt( const QPoint &pt ) | 230 | int QColorPicker::huePt( const QPoint &pt ) |
233 | { return 360 - pt.x()*360/(pWidth-1); } | 231 | { return 360 - pt.x()*360/(pWidth-1); } |
234 | int QColorPicker::satPt( const QPoint &pt ) | 232 | int QColorPicker::satPt( const QPoint &pt ) |
235 | { return 255 - pt.y()*255/(pHeight-1) ; } | 233 | { return 255 - pt.y()*255/(pHeight-1) ; } |
236 | void QColorPicker::setCol( const QPoint &pt ) | 234 | void QColorPicker::setCol( const QPoint &pt ) |
237 | { setCol( huePt(pt), satPt(pt) ); } | 235 | { setCol( huePt(pt), satPt(pt) ); } |
238 | 236 | ||
239 | QColorPicker::QColorPicker(QWidget* parent, const char* name ) | 237 | QColorPicker::QColorPicker(QWidget* parent, const char* name ) |
240 | : QFrame( parent, name ) | 238 | : QFrame( parent, name ) |
241 | { | 239 | { |
242 | hue = 0; sat = 0; | 240 | hue = 0; sat = 0; |
243 | setCol( 150, 255 ); | 241 | setCol( 150, 255 ); |
diff --git a/libopie/colorpopupmenu.cpp b/libopie/colorpopupmenu.cpp index 5a8d77e..0d66fba 100644 --- a/libopie/colorpopupmenu.cpp +++ b/libopie/colorpopupmenu.cpp | |||
@@ -1,173 +1,172 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | 3 | ||
4 | Copyright (c) 2002 S. Prud'homme <prudhomme@laposte.net> | 4 | Copyright (c) 2002 S. Prud'homme <prudhomme@laposte.net> |
5 | Dan Williams <williamsdr@acm.org> | 5 | Dan Williams <williamsdr@acm.org> |
6 | =. | 6 | =. |
7 | .=l. | 7 | .=l. |
8 | .>+-= | 8 | .>+-= |
9 | _;:, .> :=|. This program is free software; you can | 9 | _;:, .> :=|. This program is free software; you can |
10 | .> <`_, > . <= redistribute it and/or modify it under | 10 | .> <`_, > . <= redistribute it and/or modify it under |
11 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 11 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
12 | .="- .-=="i, .._ License as published by the Free Software | 12 | .="- .-=="i, .._ License as published by the Free Software |
13 | - . .-<_> .<> Foundation; either version 2 of the License, | 13 | - . .-<_> .<> Foundation; either version 2 of the License, |
14 | ._= =} : or (at your option) any later version. | 14 | ._= =} : or (at your option) any later version. |
15 | .%`+i> _;_. | 15 | .%`+i> _;_. |
16 | .i_,=:_. -<s. This program is distributed in the hope that | 16 | .i_,=:_. -<s. This program is distributed in the hope that |
17 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 17 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
18 | : .. .:, . . . without even the implied warranty of | 18 | : .. .:, . . . without even the implied warranty of |
19 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 19 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
20 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 20 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
21 | ..}^=.= = ; Library General Public License for more | 21 | ..}^=.= = ; Library General Public License for more |
22 | ++= -. .` .: details. | 22 | ++= -. .` .: details. |
23 | : = ...= . :.=- | 23 | : = ...= . :.=- |
24 | -. .:....=;==+<; You should have received a copy of the GNU | 24 | -. .:....=;==+<; You should have received a copy of the GNU |
25 | -_. . . )=. = Library General Public License along with | 25 | -_. . . )=. = Library General Public License along with |
26 | -- :-=` this library; see the file COPYING.LIB. | 26 | -- :-=` this library; see the file COPYING.LIB. |
27 | If not, write to the Free Software Foundation, | 27 | If not, write to the Free Software Foundation, |
28 | Inc., 59 Temple Place - Suite 330, | 28 | Inc., 59 Temple Place - Suite 330, |
29 | Boston, MA 02111-1307, USA. | 29 | Boston, MA 02111-1307, USA. |
30 | 30 | ||
31 | */ | 31 | */ |
32 | 32 | ||
33 | #include "colorpopupmenu.h" | 33 | #include "colorpopupmenu.h" |
34 | #include "colordialog.h" | 34 | #include "colordialog.h" |
35 | 35 | ||
36 | #include <qaction.h> | ||
37 | #include <qlayout.h> | 36 | #include <qlayout.h> |
38 | #include <qpainter.h> | 37 | #include <qpainter.h> |
39 | 38 | ||
40 | OColorPanelButton::OColorPanelButton( const QColor& color, QWidget* parent, const char* name ) | 39 | OColorPanelButton::OColorPanelButton( const QColor& color, QWidget* parent, const char* name ) |
41 | : QFrame( parent, name ) | 40 | : QFrame( parent, name ) |
42 | { | 41 | { |
43 | m_color = color; | 42 | m_color = color; |
44 | 43 | ||
45 | setFixedSize( 16, 16 ); | 44 | setFixedSize( 16, 16 ); |
46 | setActive( FALSE ); | 45 | setActive( FALSE ); |
47 | } | 46 | } |
48 | 47 | ||
49 | OColorPanelButton::~OColorPanelButton() | 48 | OColorPanelButton::~OColorPanelButton() |
50 | { | 49 | { |
51 | } | 50 | } |
52 | 51 | ||
53 | void OColorPanelButton::setActive( bool active ) | 52 | void OColorPanelButton::setActive( bool active ) |
54 | { | 53 | { |
55 | m_active = active; | 54 | m_active = active; |
56 | 55 | ||
57 | if ( m_active ) { | 56 | if ( m_active ) { |
58 | setFrameStyle( Panel | Sunken ); | 57 | setFrameStyle( Panel | Sunken ); |
59 | } else { | 58 | } else { |
60 | setFrameStyle( NoFrame ); | 59 | setFrameStyle( NoFrame ); |
61 | } | 60 | } |
62 | } | 61 | } |
63 | 62 | ||
64 | void OColorPanelButton::enterEvent( QEvent* ) | 63 | void OColorPanelButton::enterEvent( QEvent* ) |
65 | { | 64 | { |
66 | if ( !m_active ) { | 65 | if ( !m_active ) { |
67 | setFrameStyle( Panel | Sunken ); | 66 | setFrameStyle( Panel | Sunken ); |
68 | } | 67 | } |
69 | } | 68 | } |
70 | 69 | ||
71 | void OColorPanelButton::leaveEvent( QEvent* ) | 70 | void OColorPanelButton::leaveEvent( QEvent* ) |
72 | { | 71 | { |
73 | if ( !m_active ) { | 72 | if ( !m_active ) { |
74 | setFrameStyle( NoFrame ); | 73 | setFrameStyle( NoFrame ); |
75 | } | 74 | } |
76 | } | 75 | } |
77 | 76 | ||
78 | void OColorPanelButton::paintEvent( QPaintEvent* e ) | 77 | void OColorPanelButton::paintEvent( QPaintEvent* e ) |
79 | { | 78 | { |
80 | QFrame::paintEvent( e ); | 79 | QFrame::paintEvent( e ); |
81 | 80 | ||
82 | QPainter painter; | 81 | QPainter painter; |
83 | painter.begin( this ); | 82 | painter.begin( this ); |
84 | painter.fillRect( 2, 2, 12, 12, m_color ); | 83 | painter.fillRect( 2, 2, 12, 12, m_color ); |
85 | painter.setPen( Qt::black ); | 84 | painter.setPen( Qt::black ); |
86 | painter.drawRect( 2, 2, 12, 12 ); | 85 | painter.drawRect( 2, 2, 12, 12 ); |
87 | painter.end(); | 86 | painter.end(); |
88 | } | 87 | } |
89 | 88 | ||
90 | void OColorPanelButton::mouseReleaseEvent( QMouseEvent* ) | 89 | void OColorPanelButton::mouseReleaseEvent( QMouseEvent* ) |
91 | { | 90 | { |
92 | emit selected( m_color ); | 91 | emit selected( m_color ); |
93 | } | 92 | } |
94 | 93 | ||
95 | OColorPopupMenu::OColorPopupMenu( const QColor& color, QWidget* parent, const char* name ) | 94 | OColorPopupMenu::OColorPopupMenu( const QColor& color, QWidget* parent, const char* name ) |
96 | : QPopupMenu( parent, name ) | 95 | : QPopupMenu( parent, name ) |
97 | { | 96 | { |
98 | m_color = color; | 97 | m_color = color; |
99 | 98 | ||
100 | colorPanel = new QWidget( this ); | 99 | colorPanel = new QWidget( this ); |
101 | 100 | ||
102 | colorLayout = new QGridLayout(colorPanel, 5, 6); | 101 | colorLayout = new QGridLayout(colorPanel, 5, 6); |
103 | 102 | ||
104 | addColor(QColor(255, 255, 255), 0, 1); | 103 | addColor(QColor(255, 255, 255), 0, 1); |
105 | addColor(QColor(192, 192, 192), 0, 2); | 104 | addColor(QColor(192, 192, 192), 0, 2); |
106 | addColor(QColor(128, 128, 128), 0, 3); | 105 | addColor(QColor(128, 128, 128), 0, 3); |
107 | addColor(QColor(64, 64, 64), 0, 4); | 106 | addColor(QColor(64, 64, 64), 0, 4); |
108 | addColor(QColor(0, 0, 0), 0, 5); | 107 | addColor(QColor(0, 0, 0), 0, 5); |
109 | 108 | ||
110 | addColor(QColor(255, 0, 0), 1, 0); | 109 | addColor(QColor(255, 0, 0), 1, 0); |
111 | addColor(QColor(255, 128, 0), 1, 1); | 110 | addColor(QColor(255, 128, 0), 1, 1); |
112 | addColor(QColor(255, 255, 0), 1, 2); | 111 | addColor(QColor(255, 255, 0), 1, 2); |
113 | addColor(QColor(128, 255, 0), 1, 3); | 112 | addColor(QColor(128, 255, 0), 1, 3); |
114 | addColor(QColor(0, 255, 0), 1, 4); | 113 | addColor(QColor(0, 255, 0), 1, 4); |
115 | addColor(QColor(0, 255, 128), 1, 5); | 114 | addColor(QColor(0, 255, 128), 1, 5); |
116 | 115 | ||
117 | addColor(QColor(128, 0, 0), 2, 0); | 116 | addColor(QColor(128, 0, 0), 2, 0); |
118 | addColor(QColor(128, 64, 0), 2, 1); | 117 | addColor(QColor(128, 64, 0), 2, 1); |
119 | addColor(QColor(128, 128, 0), 2, 2); | 118 | addColor(QColor(128, 128, 0), 2, 2); |
120 | addColor(QColor(64, 128, 0), 2, 3); | 119 | addColor(QColor(64, 128, 0), 2, 3); |
121 | addColor(QColor(0, 128, 0), 2, 4); | 120 | addColor(QColor(0, 128, 0), 2, 4); |
122 | addColor(QColor(0, 128, 64), 2, 5); | 121 | addColor(QColor(0, 128, 64), 2, 5); |
123 | 122 | ||
124 | addColor(QColor(0, 255, 255), 3, 0); | 123 | addColor(QColor(0, 255, 255), 3, 0); |
125 | addColor(QColor(0, 128, 255), 3, 1); | 124 | addColor(QColor(0, 128, 255), 3, 1); |
126 | addColor(QColor(0, 0, 255), 3, 2); | 125 | addColor(QColor(0, 0, 255), 3, 2); |
127 | addColor(QColor(128, 0, 255), 3, 3); | 126 | addColor(QColor(128, 0, 255), 3, 3); |
128 | addColor(QColor(255, 0, 255), 3, 4); | 127 | addColor(QColor(255, 0, 255), 3, 4); |
129 | addColor(QColor(255, 0, 128), 3, 5); | 128 | addColor(QColor(255, 0, 128), 3, 5); |
130 | 129 | ||
131 | addColor(QColor(0, 128, 128), 4, 0); | 130 | addColor(QColor(0, 128, 128), 4, 0); |
132 | addColor(QColor(0, 64, 128), 4, 1); | 131 | addColor(QColor(0, 64, 128), 4, 1); |
133 | addColor(QColor(0, 0, 128), 4, 2); | 132 | addColor(QColor(0, 0, 128), 4, 2); |
134 | addColor(QColor(64, 0, 128), 4, 3); | 133 | addColor(QColor(64, 0, 128), 4, 3); |
135 | addColor(QColor(128, 0, 128), 4, 4); | 134 | addColor(QColor(128, 0, 128), 4, 4); |
136 | addColor(QColor(128, 0, 64), 4, 5); | 135 | addColor(QColor(128, 0, 64), 4, 5); |
137 | 136 | ||
138 | insertItem( colorPanel ); | 137 | insertItem( colorPanel ); |
139 | insertSeparator(); | 138 | insertSeparator(); |
140 | insertItem(tr("More"),this,SLOT( moreColorClicked())); | 139 | insertItem(tr("More"),this,SLOT( moreColorClicked())); |
141 | /* | 140 | /* |
142 | QAction* chooseColorAction = new QAction( tr( "More" ), tr( "More..." ), 0, colorPanel, "More" ); | 141 | QAction* chooseColorAction = new QAction( tr( "More" ), tr( "More..." ), 0, colorPanel, "More" ); |
143 | connect( chooseColorAction, SIGNAL( activated() ), this, SLOT( moreColorClicked() ) ); | 142 | connect( chooseColorAction, SIGNAL( activated() ), this, SLOT( moreColorClicked() ) ); |
144 | chooseColorAction->addTo( this ); | 143 | chooseColorAction->addTo( this ); |
145 | */ | 144 | */ |
146 | activateItemAt( 0 ); | 145 | activateItemAt( 0 ); |
147 | } | 146 | } |
148 | 147 | ||
149 | OColorPopupMenu::~OColorPopupMenu() | 148 | OColorPopupMenu::~OColorPopupMenu() |
150 | { | 149 | { |
151 | } | 150 | } |
152 | 151 | ||
153 | void OColorPopupMenu::addColor( const QColor& color, int row, int col ) | 152 | void OColorPopupMenu::addColor( const QColor& color, int row, int col ) |
154 | { | 153 | { |
155 | OColorPanelButton* panelButton = new OColorPanelButton( color, colorPanel ); | 154 | OColorPanelButton* panelButton = new OColorPanelButton( color, colorPanel ); |
156 | connect( panelButton, SIGNAL( selected( const QColor& ) ), this, SLOT( buttonSelected( const QColor& ) ) ); | 155 | connect( panelButton, SIGNAL( selected( const QColor& ) ), this, SLOT( buttonSelected( const QColor& ) ) ); |
157 | colorLayout->addWidget( panelButton, row, col ); | 156 | colorLayout->addWidget( panelButton, row, col ); |
158 | } | 157 | } |
159 | 158 | ||
160 | void OColorPopupMenu::buttonSelected( const QColor& color ) | 159 | void OColorPopupMenu::buttonSelected( const QColor& color ) |
161 | { | 160 | { |
162 | m_color = color; | 161 | m_color = color; |
163 | emit colorSelected( color ); | 162 | emit colorSelected( color ); |
164 | hide(); | 163 | hide(); |
165 | } | 164 | } |
166 | 165 | ||
167 | void OColorPopupMenu::moreColorClicked() | 166 | void OColorPopupMenu::moreColorClicked() |
168 | { | 167 | { |
169 | QColor color = OColorDialog::getColor( m_color ); | 168 | QColor color = OColorDialog::getColor( m_color ); |
170 | m_color = color; | 169 | m_color = color; |
171 | emit colorSelected( color ); | 170 | emit colorSelected( color ); |
172 | hide(); | 171 | hide(); |
173 | } | 172 | } |
diff --git a/libopie/ocheckitem.cpp b/libopie/ocheckitem.cpp index 082d7a2..cd763c1 100644 --- a/libopie/ocheckitem.cpp +++ b/libopie/ocheckitem.cpp | |||
@@ -1,106 +1,105 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2002 Stefan Eilers (se, eilers.stefan@epost.de | 2 | ** Copyright (C) 2002 Stefan Eilers (se, eilers.stefan@epost.de |
3 | ** | 3 | ** |
4 | ** This file may be distributed and/or modified under the terms of the | 4 | ** This file may be distributed and/or modified under the terms of the |
5 | ** GNU Library General Public License version 2 as published by the | 5 | ** GNU Library General Public License version 2 as published by the |
6 | ** Free Software Foundation and appearing in the file LICENSE.GPL | 6 | ** Free Software Foundation and appearing in the file LICENSE.GPL |
7 | ** included in the packaging of this file. | 7 | ** included in the packaging of this file. |
8 | ** | 8 | ** |
9 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 9 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
10 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 10 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
11 | **********************************************************************/ | 11 | **********************************************************************/ |
12 | 12 | ||
13 | #include <qpainter.h> | ||
14 | 13 | ||
15 | #include "ocheckitem.h" | 14 | #include "ocheckitem.h" |
16 | 15 | ||
17 | /** | 16 | /** |
18 | * Constructs an CheckItem with a QTable as parent | 17 | * Constructs an CheckItem with a QTable as parent |
19 | * and a sort key for. | 18 | * and a sort key for. |
20 | * The sort key will be used by QTable to sort the table later | 19 | * The sort key will be used by QTable to sort the table later |
21 | * @param t The parent QTable where the check item belongs | 20 | * @param t The parent QTable where the check item belongs |
22 | * @param key A sort key | 21 | * @param key A sort key |
23 | */ | 22 | */ |
24 | OCheckItem::OCheckItem( QTable *t, const QString &key ) | 23 | OCheckItem::OCheckItem( QTable *t, const QString &key ) |
25 | : QTableItem( t, Never, "" ), m_checked( FALSE ), m_sortKey( key ) | 24 | : QTableItem( t, Never, "" ), m_checked( FALSE ), m_sortKey( key ) |
26 | { | 25 | { |
27 | } | 26 | } |
28 | 27 | ||
29 | /** | 28 | /** |
30 | * reimplemted for internal reasons | 29 | * reimplemted for internal reasons |
31 | * @return Returns the sort key of the Item | 30 | * @return Returns the sort key of the Item |
32 | * @see QTableItem | 31 | * @see QTableItem |
33 | */ | 32 | */ |
34 | QString OCheckItem::key() const | 33 | QString OCheckItem::key() const |
35 | { | 34 | { |
36 | return m_sortKey; | 35 | return m_sortKey; |
37 | } | 36 | } |
38 | 37 | ||
39 | /** | 38 | /** |
40 | * This method can check or uncheck the item. It will | 39 | * This method can check or uncheck the item. It will |
41 | * call QTable to update the cell. | 40 | * call QTable to update the cell. |
42 | * | 41 | * |
43 | * @param b Whether to check or uncheck the item | 42 | * @param b Whether to check or uncheck the item |
44 | */ | 43 | */ |
45 | void OCheckItem::setChecked( bool b ) | 44 | void OCheckItem::setChecked( bool b ) |
46 | { | 45 | { |
47 | m_checked = b; | 46 | m_checked = b; |
48 | table()->updateCell( row(), col() ); | 47 | table()->updateCell( row(), col() ); |
49 | } | 48 | } |
50 | 49 | ||
51 | /** | 50 | /** |
52 | * This will toggle the item. If it is checked it'll get | 51 | * This will toggle the item. If it is checked it'll get |
53 | * unchecked by this method or vice versa. | 52 | * unchecked by this method or vice versa. |
54 | */ | 53 | */ |
55 | void OCheckItem::toggle() | 54 | void OCheckItem::toggle() |
56 | { | 55 | { |
57 | m_checked = !m_checked; | 56 | m_checked = !m_checked; |
58 | } | 57 | } |
59 | 58 | ||
60 | /** | 59 | /** |
61 | * This will return the state of the item. | 60 | * This will return the state of the item. |
62 | * | 61 | * |
63 | * @return Returns true if the item is checked | 62 | * @return Returns true if the item is checked |
64 | */ | 63 | */ |
65 | bool OCheckItem::isChecked() const | 64 | bool OCheckItem::isChecked() const |
66 | { | 65 | { |
67 | return m_checked; | 66 | return m_checked; |
68 | } | 67 | } |
69 | 68 | ||
70 | /** | 69 | /** |
71 | * @internal | 70 | * @internal |
72 | * This paints the item | 71 | * This paints the item |
73 | */ | 72 | */ |
74 | void OCheckItem::paint( QPainter *p, const QColorGroup &cg, const QRect &cr, | 73 | void OCheckItem::paint( QPainter *p, const QColorGroup &cg, const QRect &cr, |
75 | bool ) | 74 | bool ) |
76 | { | 75 | { |
77 | p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); | 76 | p->fillRect( 0, 0, cr.width(), cr.height(), cg.brush( QColorGroup::Base ) ); |
78 | 77 | ||
79 | int marg = ( cr.width() - BoxSize ) / 2; | 78 | int marg = ( cr.width() - BoxSize ) / 2; |
80 | int x = 0; | 79 | int x = 0; |
81 | int y = ( cr.height() - BoxSize ) / 2; | 80 | int y = ( cr.height() - BoxSize ) / 2; |
82 | p->setPen( QPen( cg.text() ) ); | 81 | p->setPen( QPen( cg.text() ) ); |
83 | p->drawRect( x + marg, y, BoxSize, BoxSize ); | 82 | p->drawRect( x + marg, y, BoxSize, BoxSize ); |
84 | p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 ); | 83 | p->drawRect( x + marg+1, y+1, BoxSize-2, BoxSize-2 ); |
85 | p->setPen( darkGreen ); | 84 | p->setPen( darkGreen ); |
86 | x += 1; | 85 | x += 1; |
87 | y += 1; | 86 | y += 1; |
88 | if ( m_checked ) { | 87 | if ( m_checked ) { |
89 | QPointArray a( 7*2 ); | 88 | QPointArray a( 7*2 ); |
90 | int i, xx, yy; | 89 | int i, xx, yy; |
91 | xx = x+1+marg; | 90 | xx = x+1+marg; |
92 | yy = y+2; | 91 | yy = y+2; |
93 | for ( i=0; i<3; i++ ) { | 92 | for ( i=0; i<3; i++ ) { |
94 | a.setPoint( 2*i, xx, yy ); | 93 | a.setPoint( 2*i, xx, yy ); |
95 | a.setPoint( 2*i+1, xx, yy+2 ); | 94 | a.setPoint( 2*i+1, xx, yy+2 ); |
96 | xx++; yy++; | 95 | xx++; yy++; |
97 | } | 96 | } |
98 | yy -= 2; | 97 | yy -= 2; |
99 | for ( i=3; i<7; i++ ) { | 98 | for ( i=3; i<7; i++ ) { |
100 | a.setPoint( 2*i, xx, yy ); | 99 | a.setPoint( 2*i, xx, yy ); |
101 | a.setPoint( 2*i+1, xx, yy+2 ); | 100 | a.setPoint( 2*i+1, xx, yy+2 ); |
102 | xx++; yy--; | 101 | xx++; yy--; |
103 | } | 102 | } |
104 | p->drawLineSegments( a ); | 103 | p->drawLineSegments( a ); |
105 | } | 104 | } |
106 | } | 105 | } |
diff --git a/libopie/ocolorbutton.cpp b/libopie/ocolorbutton.cpp index 113a77a..93fe5d0 100644 --- a/libopie/ocolorbutton.cpp +++ b/libopie/ocolorbutton.cpp | |||
@@ -1,142 +1,139 @@ | |||
1 | /* | 1 | /* |
2 | =. This file is part of the OPIE Project | 2 | =. This file is part of the OPIE Project |
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | 3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> |
4 | .>+-= | 4 | .>+-= |
5 | _;:, .> :=|. This library is free software; you can | 5 | _;:, .> :=|. This library is free software; you can |
6 | .> <`_, > . <= redistribute it and/or modify it under | 6 | .> <`_, > . <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
8 | .="- .-=="i, .._ License as published by the Free Software | 8 | .="- .-=="i, .._ License as published by the Free Software |
9 | - . .-<_> .<> Foundation; either version 2 of the License, | 9 | - . .-<_> .<> Foundation; either version 2 of the License, |
10 | ._= =} : or (at your option) any later version. | 10 | ._= =} : or (at your option) any later version. |
11 | .%`+i> _;_. | 11 | .%`+i> _;_. |
12 | .i_,=:_. -<s. This library is distributed in the hope that | 12 | .i_,=:_. -<s. This library is distributed in the hope that |
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
14 | : .. .:, . . . without even the implied warranty of | 14 | : .. .:, . . . without even the implied warranty of |
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
17 | ..}^=.= = ; Library General Public License for more | 17 | ..}^=.= = ; Library General Public License for more |
18 | ++= -. .` .: details. | 18 | ++= -. .` .: details. |
19 | : = ...= . :.=- | 19 | : = ...= . :.=- |
20 | -. .:....=;==+<; You should have received a copy of the GNU | 20 | -. .:....=;==+<; You should have received a copy of the GNU |
21 | -_. . . )=. = Library General Public License along with | 21 | -_. . . )=. = Library General Public License along with |
22 | -- :-=` this library; see the file COPYING.LIB. | 22 | -- :-=` this library; see the file COPYING.LIB. |
23 | If not, write to the Free Software Foundation, | 23 | If not, write to the Free Software Foundation, |
24 | Inc., 59 Temple Place - Suite 330, | 24 | Inc., 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
26 | 26 | ||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <opie/colorpopupmenu.h> | 29 | #include <opie/colorpopupmenu.h> |
30 | #include <opie/ocolorbutton.h> | 30 | #include <opie/ocolorbutton.h> |
31 | #include <qcolor.h> | ||
32 | #include <qpixmap.h> | ||
33 | #include <qimage.h> | ||
34 | 31 | ||
35 | #include <qpe/resource.h> | 32 | #include <qpe/resource.h> |
36 | 33 | ||
37 | struct OColorButtonPrivate { | 34 | struct OColorButtonPrivate { |
38 | QPopupMenu *m_menu; | 35 | QPopupMenu *m_menu; |
39 | QColor m_color; | 36 | QColor m_color; |
40 | }; | 37 | }; |
41 | 38 | ||
42 | 39 | ||
43 | /** | 40 | /** |
44 | * This concstructs a Color Button with @param color as the start color | 41 | * This concstructs a Color Button with @param color as the start color |
45 | * It'll use a OColorPopupMenu internally | 42 | * It'll use a OColorPopupMenu internally |
46 | * | 43 | * |
47 | * @param parent The parent of the Color Button | 44 | * @param parent The parent of the Color Button |
48 | * @param color The color from where to start on | 45 | * @param color The color from where to start on |
49 | * @param name @see QObject | 46 | * @param name @see QObject |
50 | */ | 47 | */ |
51 | OColorButton::OColorButton ( QWidget *parent, const QColor &color, const char *name ) | 48 | OColorButton::OColorButton ( QWidget *parent, const QColor &color, const char *name ) |
52 | : QPushButton ( parent, name ) | 49 | : QPushButton ( parent, name ) |
53 | { | 50 | { |
54 | d = new OColorButtonPrivate; | 51 | d = new OColorButtonPrivate; |
55 | 52 | ||
56 | d-> m_menu = new OColorPopupMenu ( color, 0, 0 ); | 53 | d-> m_menu = new OColorPopupMenu ( color, 0, 0 ); |
57 | setPopup ( d-> m_menu ); | 54 | setPopup ( d-> m_menu ); |
58 | //setPopupDelay ( 0 ); | 55 | //setPopupDelay ( 0 ); |
59 | connect ( d-> m_menu, SIGNAL( colorSelected ( const QColor & )), this, SLOT( updateColor ( const QColor & ))); | 56 | connect ( d-> m_menu, SIGNAL( colorSelected ( const QColor & )), this, SLOT( updateColor ( const QColor & ))); |
60 | 57 | ||
61 | updateColor ( color ); | 58 | updateColor ( color ); |
62 | 59 | ||
63 | QSize s = sizeHint ( ) + QSize ( 12, 0 ); | 60 | QSize s = sizeHint ( ) + QSize ( 12, 0 ); |
64 | setMinimumSize ( s ); | 61 | setMinimumSize ( s ); |
65 | setMaximumSize ( s. width ( ) * 2, s. height ( )); | 62 | setMaximumSize ( s. width ( ) * 2, s. height ( )); |
66 | } | 63 | } |
67 | 64 | ||
68 | /** | 65 | /** |
69 | * This destructs the object | 66 | * This destructs the object |
70 | */ | 67 | */ |
71 | OColorButton::~OColorButton ( ) | 68 | OColorButton::~OColorButton ( ) |
72 | { | 69 | { |
73 | delete d; | 70 | delete d; |
74 | } | 71 | } |
75 | 72 | ||
76 | /** | 73 | /** |
77 | * @return Returns the current color of the button | 74 | * @return Returns the current color of the button |
78 | */ | 75 | */ |
79 | QColor OColorButton::color ( ) const | 76 | QColor OColorButton::color ( ) const |
80 | { | 77 | { |
81 | return d-> m_color; | 78 | return d-> m_color; |
82 | } | 79 | } |
83 | 80 | ||
84 | /** | 81 | /** |
85 | * This method sets the color of the button | 82 | * This method sets the color of the button |
86 | * @param c The color to be set. | 83 | * @param c The color to be set. |
87 | */ | 84 | */ |
88 | void OColorButton::setColor ( const QColor &c ) | 85 | void OColorButton::setColor ( const QColor &c ) |
89 | { | 86 | { |
90 | updateColor ( c ); | 87 | updateColor ( c ); |
91 | } | 88 | } |
92 | 89 | ||
93 | /** | 90 | /** |
94 | * @internal | 91 | * @internal |
95 | */ | 92 | */ |
96 | void OColorButton::updateColor ( const QColor &c ) | 93 | void OColorButton::updateColor ( const QColor &c ) |
97 | { | 94 | { |
98 | d-> m_color = c; | 95 | d-> m_color = c; |
99 | 96 | ||
100 | QImage img ( 16, 16, 32 ); | 97 | QImage img ( 16, 16, 32 ); |
101 | img. fill ( 0 ); | 98 | img. fill ( 0 ); |
102 | 99 | ||
103 | int r, g, b; | 100 | int r, g, b; |
104 | c. rgb ( &r, &g, &b ); | 101 | c. rgb ( &r, &g, &b ); |
105 | 102 | ||
106 | int w = img. width ( ); | 103 | int w = img. width ( ); |
107 | int h = img. height ( ); | 104 | int h = img. height ( ); |
108 | 105 | ||
109 | int dx = w * 20 / 100; // 15% | 106 | int dx = w * 20 / 100; // 15% |
110 | int dy = h * 20 / 100; | 107 | int dy = h * 20 / 100; |
111 | 108 | ||
112 | for ( int y = 0; y < h; y++ ) { | 109 | for ( int y = 0; y < h; y++ ) { |
113 | for ( int x = 0; x < w; x++ ) { | 110 | for ( int x = 0; x < w; x++ ) { |
114 | double alpha = 1.0; | 111 | double alpha = 1.0; |
115 | 112 | ||
116 | if ( x < dx ) | 113 | if ( x < dx ) |
117 | alpha *= ( double ( x + 1 ) / dx ); | 114 | alpha *= ( double ( x + 1 ) / dx ); |
118 | else if ( x >= w - dx ) | 115 | else if ( x >= w - dx ) |
119 | alpha *= ( double ( w - x ) / dx ); | 116 | alpha *= ( double ( w - x ) / dx ); |
120 | if ( y < dy ) | 117 | if ( y < dy ) |
121 | alpha *= ( double ( y + 1 ) / dy ); | 118 | alpha *= ( double ( y + 1 ) / dy ); |
122 | else if ( y >= h - dy ) | 119 | else if ( y >= h - dy ) |
123 | alpha *= ( double ( h - y ) / dy ); | 120 | alpha *= ( double ( h - y ) / dy ); |
124 | 121 | ||
125 | int a = int ( alpha * 255.0 ); | 122 | int a = int ( alpha * 255.0 ); |
126 | if ( a < 0 ) | 123 | if ( a < 0 ) |
127 | a = 0; | 124 | a = 0; |
128 | if ( a > 255 ) | 125 | if ( a > 255 ) |
129 | a = 255; | 126 | a = 255; |
130 | 127 | ||
131 | img. setPixel ( x, y, qRgba ( r, g, b, a )); | 128 | img. setPixel ( x, y, qRgba ( r, g, b, a )); |
132 | } | 129 | } |
133 | } | 130 | } |
134 | img. setAlphaBuffer ( true ); | 131 | img. setAlphaBuffer ( true ); |
135 | 132 | ||
136 | QPixmap pix; | 133 | QPixmap pix; |
137 | pix. convertFromImage ( img ); | 134 | pix. convertFromImage ( img ); |
138 | setPixmap ( pix ); | 135 | setPixmap ( pix ); |
139 | 136 | ||
140 | emit colorSelected ( c ); | 137 | emit colorSelected ( c ); |
141 | } | 138 | } |
142 | 139 | ||
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index c5342e1..c0b6efa 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp | |||
@@ -1,223 +1,222 @@ | |||
1 | /* This file is part of the OPIE libraries | 1 | /* This file is part of the OPIE libraries |
2 | Copyright (C) 2002 Robert Griebl (sandman@handhelds.org) | 2 | Copyright (C) 2002 Robert Griebl (sandman@handhelds.org) |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Library General Public | 5 | modify it under the terms of the GNU Library General Public |
6 | License as published by the Free Software Foundation; either | 6 | License as published by the Free Software Foundation; either |
7 | version 2 of the License, or (at your option) any later version. | 7 | version 2 of the License, or (at your option) any later version. |
8 | 8 | ||
9 | This library is distributed in the hope that it will be useful, | 9 | This library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Library General Public License for more details. | 12 | Library General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU Library General Public License | 14 | You should have received a copy of the GNU Library General Public License |
15 | along with this library; see the file COPYING.LIB. If not, write to | 15 | along with this library; see the file COPYING.LIB. If not, write to |
16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
17 | Boston, MA 02111-1307, USA. | 17 | Boston, MA 02111-1307, USA. |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <stdlib.h> | 20 | #include <stdlib.h> |
21 | #include <unistd.h> | 21 | #include <unistd.h> |
22 | #include <fcntl.h> | 22 | #include <fcntl.h> |
23 | #include <sys/ioctl.h> | 23 | #include <sys/ioctl.h> |
24 | #include <signal.h> | 24 | #include <signal.h> |
25 | #include <sys/time.h> | 25 | #include <sys/time.h> |
26 | #ifndef QT_NO_SOUND | 26 | #ifndef QT_NO_SOUND |
27 | #include <linux/soundcard.h> | 27 | #include <linux/soundcard.h> |
28 | #endif | 28 | #endif |
29 | #include <math.h> | 29 | #include <math.h> |
30 | 30 | ||
31 | #include <qapplication.h> | ||
32 | 31 | ||
33 | #include <qfile.h> | 32 | #include <qfile.h> |
34 | #include <qtextstream.h> | 33 | #include <qtextstream.h> |
35 | #include <qpe/sound.h> | 34 | #include <qpe/sound.h> |
36 | #include <qpe/resource.h> | 35 | #include <qpe/resource.h> |
37 | #include <qpe/config.h> | 36 | #include <qpe/config.h> |
38 | #include <qpe/qcopenvelope_qws.h> | 37 | #include <qpe/qcopenvelope_qws.h> |
39 | 38 | ||
40 | #include "odevice.h" | 39 | #include "odevice.h" |
41 | 40 | ||
42 | #include <qwindowsystem_qws.h> | 41 | #include <qwindowsystem_qws.h> |
43 | 42 | ||
44 | #ifndef ARRAY_SIZE | 43 | #ifndef ARRAY_SIZE |
45 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) | 44 | #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) |
46 | #endif | 45 | #endif |
47 | 46 | ||
48 | // _IO and friends are only defined in kernel headers ... | 47 | // _IO and friends are only defined in kernel headers ... |
49 | 48 | ||
50 | #define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) | 49 | #define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) |
51 | 50 | ||
52 | #define OD_IO(type,number) OD_IOC(0,type,number,0) | 51 | #define OD_IO(type,number) OD_IOC(0,type,number,0) |
53 | #define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) | 52 | #define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) |
54 | #define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) | 53 | #define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) |
55 | #define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) | 54 | #define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) |
56 | 55 | ||
57 | using namespace Opie; | 56 | using namespace Opie; |
58 | 57 | ||
59 | class ODeviceData { | 58 | class ODeviceData { |
60 | public: | 59 | public: |
61 | QString m_vendorstr; | 60 | QString m_vendorstr; |
62 | OVendor m_vendor; | 61 | OVendor m_vendor; |
63 | 62 | ||
64 | QString m_modelstr; | 63 | QString m_modelstr; |
65 | OModel m_model; | 64 | OModel m_model; |
66 | 65 | ||
67 | QString m_systemstr; | 66 | QString m_systemstr; |
68 | OSystem m_system; | 67 | OSystem m_system; |
69 | 68 | ||
70 | QString m_sysverstr; | 69 | QString m_sysverstr; |
71 | 70 | ||
72 | Transformation m_rotation; | 71 | Transformation m_rotation; |
73 | ODirection m_direction; | 72 | ODirection m_direction; |
74 | 73 | ||
75 | QValueList <ODeviceButton> *m_buttons; | 74 | QValueList <ODeviceButton> *m_buttons; |
76 | uint m_holdtime; | 75 | uint m_holdtime; |
77 | QStrList *m_cpu_frequencies; | 76 | QStrList *m_cpu_frequencies; |
78 | 77 | ||
79 | }; | 78 | }; |
80 | 79 | ||
81 | class iPAQ : public ODevice, public QWSServer::KeyboardFilter { | 80 | class iPAQ : public ODevice, public QWSServer::KeyboardFilter { |
82 | protected: | 81 | protected: |
83 | virtual void init ( ); | 82 | virtual void init ( ); |
84 | virtual void initButtons ( ); | 83 | virtual void initButtons ( ); |
85 | 84 | ||
86 | public: | 85 | public: |
87 | virtual bool setSoftSuspend ( bool soft ); | 86 | virtual bool setSoftSuspend ( bool soft ); |
88 | 87 | ||
89 | virtual bool setDisplayBrightness ( int b ); | 88 | virtual bool setDisplayBrightness ( int b ); |
90 | virtual int displayBrightnessResolution ( ) const; | 89 | virtual int displayBrightnessResolution ( ) const; |
91 | 90 | ||
92 | virtual void alarmSound ( ); | 91 | virtual void alarmSound ( ); |
93 | 92 | ||
94 | virtual QValueList <OLed> ledList ( ) const; | 93 | virtual QValueList <OLed> ledList ( ) const; |
95 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 94 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
96 | virtual OLedState ledState ( OLed led ) const; | 95 | virtual OLedState ledState ( OLed led ) const; |
97 | virtual bool setLedState ( OLed led, OLedState st ); | 96 | virtual bool setLedState ( OLed led, OLedState st ); |
98 | 97 | ||
99 | virtual bool hasLightSensor ( ) const; | 98 | virtual bool hasLightSensor ( ) const; |
100 | virtual int readLightSensor ( ); | 99 | virtual int readLightSensor ( ); |
101 | virtual int lightSensorResolution ( ) const; | 100 | virtual int lightSensorResolution ( ) const; |
102 | 101 | ||
103 | protected: | 102 | protected: |
104 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); | 103 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); |
105 | virtual void timerEvent ( QTimerEvent *te ); | 104 | virtual void timerEvent ( QTimerEvent *te ); |
106 | 105 | ||
107 | int m_power_timer; | 106 | int m_power_timer; |
108 | 107 | ||
109 | OLedState m_leds [2]; | 108 | OLedState m_leds [2]; |
110 | }; | 109 | }; |
111 | 110 | ||
112 | class Jornada : public ODevice { | 111 | class Jornada : public ODevice { |
113 | protected: | 112 | protected: |
114 | virtual void init ( ); | 113 | virtual void init ( ); |
115 | //virtual void initButtons ( ); | 114 | //virtual void initButtons ( ); |
116 | public: | 115 | public: |
117 | virtual bool setSoftSuspend ( bool soft ); | 116 | virtual bool setSoftSuspend ( bool soft ); |
118 | virtual bool setDisplayBrightness ( int b ); | 117 | virtual bool setDisplayBrightness ( int b ); |
119 | virtual int displayBrightnessResolution ( ) const; | 118 | virtual int displayBrightnessResolution ( ) const; |
120 | static bool isJornada(); | 119 | static bool isJornada(); |
121 | 120 | ||
122 | }; | 121 | }; |
123 | 122 | ||
124 | class Zaurus : public ODevice { | 123 | class Zaurus : public ODevice { |
125 | protected: | 124 | protected: |
126 | virtual void init ( ); | 125 | virtual void init ( ); |
127 | virtual void initButtons ( ); | 126 | virtual void initButtons ( ); |
128 | 127 | ||
129 | public: | 128 | public: |
130 | virtual bool setSoftSuspend ( bool soft ); | 129 | virtual bool setSoftSuspend ( bool soft ); |
131 | 130 | ||
132 | virtual bool setDisplayBrightness ( int b ); | 131 | virtual bool setDisplayBrightness ( int b ); |
133 | virtual int displayBrightnessResolution ( ) const; | 132 | virtual int displayBrightnessResolution ( ) const; |
134 | 133 | ||
135 | virtual void alarmSound ( ); | 134 | virtual void alarmSound ( ); |
136 | virtual void keySound ( ); | 135 | virtual void keySound ( ); |
137 | virtual void touchSound ( ); | 136 | virtual void touchSound ( ); |
138 | 137 | ||
139 | virtual QValueList <OLed> ledList ( ) const; | 138 | virtual QValueList <OLed> ledList ( ) const; |
140 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 139 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
141 | virtual OLedState ledState ( OLed led ) const; | 140 | virtual OLedState ledState ( OLed led ) const; |
142 | virtual bool setLedState ( OLed led, OLedState st ); | 141 | virtual bool setLedState ( OLed led, OLedState st ); |
143 | 142 | ||
144 | bool hasHingeSensor() const; | 143 | bool hasHingeSensor() const; |
145 | OHingeStatus readHingeSensor(); | 144 | OHingeStatus readHingeSensor(); |
146 | 145 | ||
147 | static bool isZaurus(); | 146 | static bool isZaurus(); |
148 | 147 | ||
149 | // Does this break BC? | 148 | // Does this break BC? |
150 | virtual bool suspend ( ); | 149 | virtual bool suspend ( ); |
151 | Transformation rotation ( ) const; | 150 | Transformation rotation ( ) const; |
152 | ODirection direction ( ) const; | 151 | ODirection direction ( ) const; |
153 | 152 | ||
154 | protected: | 153 | protected: |
155 | virtual void buzzer ( int snd ); | 154 | virtual void buzzer ( int snd ); |
156 | 155 | ||
157 | OLedState m_leds [1]; | 156 | OLedState m_leds [1]; |
158 | bool m_embedix; | 157 | bool m_embedix; |
159 | void virtual_hook( int id, void *data ); | 158 | void virtual_hook( int id, void *data ); |
160 | }; | 159 | }; |
161 | 160 | ||
162 | class SIMpad : public ODevice, public QWSServer::KeyboardFilter { | 161 | class SIMpad : public ODevice, public QWSServer::KeyboardFilter { |
163 | protected: | 162 | protected: |
164 | virtual void init ( ); | 163 | virtual void init ( ); |
165 | virtual void initButtons ( ); | 164 | virtual void initButtons ( ); |
166 | 165 | ||
167 | public: | 166 | public: |
168 | virtual bool setSoftSuspend ( bool soft ); | 167 | virtual bool setSoftSuspend ( bool soft ); |
169 | virtual bool suspend(); | 168 | virtual bool suspend(); |
170 | 169 | ||
171 | virtual bool setDisplayStatus( bool on ); | 170 | virtual bool setDisplayStatus( bool on ); |
172 | virtual bool setDisplayBrightness ( int b ); | 171 | virtual bool setDisplayBrightness ( int b ); |
173 | virtual int displayBrightnessResolution ( ) const; | 172 | virtual int displayBrightnessResolution ( ) const; |
174 | 173 | ||
175 | virtual void alarmSound ( ); | 174 | virtual void alarmSound ( ); |
176 | 175 | ||
177 | virtual QValueList <OLed> ledList ( ) const; | 176 | virtual QValueList <OLed> ledList ( ) const; |
178 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 177 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
179 | virtual OLedState ledState ( OLed led ) const; | 178 | virtual OLedState ledState ( OLed led ) const; |
180 | virtual bool setLedState ( OLed led, OLedState st ); | 179 | virtual bool setLedState ( OLed led, OLedState st ); |
181 | 180 | ||
182 | protected: | 181 | protected: |
183 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); | 182 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); |
184 | virtual void timerEvent ( QTimerEvent *te ); | 183 | virtual void timerEvent ( QTimerEvent *te ); |
185 | 184 | ||
186 | int m_power_timer; | 185 | int m_power_timer; |
187 | 186 | ||
188 | OLedState m_leds [1]; //FIXME check if really only one | 187 | OLedState m_leds [1]; //FIXME check if really only one |
189 | }; | 188 | }; |
190 | 189 | ||
191 | class Ramses : public ODevice, public QWSServer::KeyboardFilter { | 190 | class Ramses : public ODevice, public QWSServer::KeyboardFilter { |
192 | protected: | 191 | protected: |
193 | virtual void init ( ); | 192 | virtual void init ( ); |
194 | 193 | ||
195 | public: | 194 | public: |
196 | virtual bool setSoftSuspend ( bool soft ); | 195 | virtual bool setSoftSuspend ( bool soft ); |
197 | virtual bool suspend ( ); | 196 | virtual bool suspend ( ); |
198 | 197 | ||
199 | virtual bool setDisplayStatus( bool on ); | 198 | virtual bool setDisplayStatus( bool on ); |
200 | virtual bool setDisplayBrightness ( int b ); | 199 | virtual bool setDisplayBrightness ( int b ); |
201 | virtual int displayBrightnessResolution ( ) const; | 200 | virtual int displayBrightnessResolution ( ) const; |
202 | virtual bool setDisplayContrast ( int b ); | 201 | virtual bool setDisplayContrast ( int b ); |
203 | virtual int displayContrastResolution ( ) const; | 202 | virtual int displayContrastResolution ( ) const; |
204 | 203 | ||
205 | protected: | 204 | protected: |
206 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); | 205 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); |
207 | virtual void timerEvent ( QTimerEvent *te ); | 206 | virtual void timerEvent ( QTimerEvent *te ); |
208 | 207 | ||
209 | int m_power_timer; | 208 | int m_power_timer; |
210 | }; | 209 | }; |
211 | 210 | ||
212 | struct i_button { | 211 | struct i_button { |
213 | uint model; | 212 | uint model; |
214 | Qt::Key code; | 213 | Qt::Key code; |
215 | char *utext; | 214 | char *utext; |
216 | char *pix; | 215 | char *pix; |
217 | char *fpressedservice; | 216 | char *fpressedservice; |
218 | char *fpressedaction; | 217 | char *fpressedaction; |
219 | char *fheldservice; | 218 | char *fheldservice; |
220 | char *fheldaction; | 219 | char *fheldaction; |
221 | } ipaq_buttons [] = { | 220 | } ipaq_buttons [] = { |
222 | { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, | 221 | { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, |
223 | Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), | 222 | Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), |
diff --git a/libopie/odevicebutton.cpp b/libopie/odevicebutton.cpp index 314eb51..647ac4b 100644 --- a/libopie/odevicebutton.cpp +++ b/libopie/odevicebutton.cpp | |||
@@ -1,214 +1,212 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of the Qtopia Environment. | 4 | ** This file is part of the Qtopia Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | ||
21 | #include <qpixmap.h> | ||
22 | #include <qstring.h> | ||
23 | 21 | ||
24 | #include <qpe/qcopenvelope_qws.h> | 22 | #include <qpe/qcopenvelope_qws.h> |
25 | #include <opie/odevicebutton.h> | 23 | #include <opie/odevicebutton.h> |
26 | 24 | ||
27 | using namespace Opie; | 25 | using namespace Opie; |
28 | 26 | ||
29 | 27 | ||
30 | class OQCopMessageData { | 28 | class OQCopMessageData { |
31 | public: | 29 | public: |
32 | QCString m_channel; | 30 | QCString m_channel; |
33 | QCString m_message; | 31 | QCString m_message; |
34 | QByteArray m_data; | 32 | QByteArray m_data; |
35 | }; | 33 | }; |
36 | 34 | ||
37 | 35 | ||
38 | OQCopMessage::OQCopMessage ( ) | 36 | OQCopMessage::OQCopMessage ( ) |
39 | : d ( 0 ) | 37 | : d ( 0 ) |
40 | { | 38 | { |
41 | init ( QCString ( ), QCString ( ), QByteArray ( )); | 39 | init ( QCString ( ), QCString ( ), QByteArray ( )); |
42 | } | 40 | } |
43 | 41 | ||
44 | OQCopMessage::OQCopMessage ( const OQCopMessage © ) | 42 | OQCopMessage::OQCopMessage ( const OQCopMessage © ) |
45 | : d ( 0 ) | 43 | : d ( 0 ) |
46 | { | 44 | { |
47 | init ( copy. channel ( ), copy. message ( ), copy. data ( )); | 45 | init ( copy. channel ( ), copy. message ( ), copy. data ( )); |
48 | } | 46 | } |
49 | 47 | ||
50 | OQCopMessage &OQCopMessage::operator = ( const OQCopMessage &assign ) | 48 | OQCopMessage &OQCopMessage::operator = ( const OQCopMessage &assign ) |
51 | { | 49 | { |
52 | init ( assign. channel ( ), assign. message ( ), assign. data ( )); | 50 | init ( assign. channel ( ), assign. message ( ), assign. data ( )); |
53 | return *this; | 51 | return *this; |
54 | } | 52 | } |
55 | 53 | ||
56 | OQCopMessage::OQCopMessage ( const QCString &ch, const QCString &m, const QByteArray &arg ) | 54 | OQCopMessage::OQCopMessage ( const QCString &ch, const QCString &m, const QByteArray &arg ) |
57 | : d ( 0 ) | 55 | : d ( 0 ) |
58 | { | 56 | { |
59 | init ( ch, m, arg ); | 57 | init ( ch, m, arg ); |
60 | } | 58 | } |
61 | 59 | ||
62 | void OQCopMessage::init ( const QCString &ch, const QCString &m, const QByteArray &arg ) | 60 | void OQCopMessage::init ( const QCString &ch, const QCString &m, const QByteArray &arg ) |
63 | { | 61 | { |
64 | if ( !d ) | 62 | if ( !d ) |
65 | d = new OQCopMessageData ( ); | 63 | d = new OQCopMessageData ( ); |
66 | d-> m_channel = ch; | 64 | d-> m_channel = ch; |
67 | d-> m_message = m; | 65 | d-> m_message = m; |
68 | d-> m_data = arg; | 66 | d-> m_data = arg; |
69 | } | 67 | } |
70 | 68 | ||
71 | bool OQCopMessage::send ( ) | 69 | bool OQCopMessage::send ( ) |
72 | { | 70 | { |
73 | if ( d-> m_channel. isEmpty ( ) || d-> m_message. isEmpty ( ) ) | 71 | if ( d-> m_channel. isEmpty ( ) || d-> m_message. isEmpty ( ) ) |
74 | return false; | 72 | return false; |
75 | 73 | ||
76 | QCopEnvelope e ( d-> m_channel, d-> m_message ); | 74 | QCopEnvelope e ( d-> m_channel, d-> m_message ); |
77 | 75 | ||
78 | if ( d-> m_data. size ( )) | 76 | if ( d-> m_data. size ( )) |
79 | e. writeRawBytes ( d-> m_data. data ( ), d-> m_data. size ( )); | 77 | e. writeRawBytes ( d-> m_data. data ( ), d-> m_data. size ( )); |
80 | 78 | ||
81 | return true; | 79 | return true; |
82 | } | 80 | } |
83 | 81 | ||
84 | QCString OQCopMessage::channel ( ) const | 82 | QCString OQCopMessage::channel ( ) const |
85 | { | 83 | { |
86 | return d-> m_channel; | 84 | return d-> m_channel; |
87 | } | 85 | } |
88 | 86 | ||
89 | QCString OQCopMessage::message ( ) const | 87 | QCString OQCopMessage::message ( ) const |
90 | { | 88 | { |
91 | return d-> m_message; | 89 | return d-> m_message; |
92 | } | 90 | } |
93 | 91 | ||
94 | QByteArray OQCopMessage::data ( ) const | 92 | QByteArray OQCopMessage::data ( ) const |
95 | { | 93 | { |
96 | return d-> m_data; | 94 | return d-> m_data; |
97 | } | 95 | } |
98 | 96 | ||
99 | bool OQCopMessage::isNull() const | 97 | bool OQCopMessage::isNull() const |
100 | { | 98 | { |
101 | return d-> m_message.isNull() || d-> m_channel.isNull(); | 99 | return d-> m_message.isNull() || d-> m_channel.isNull(); |
102 | } | 100 | } |
103 | void OQCopMessage::setChannel ( const QCString &ch ) | 101 | void OQCopMessage::setChannel ( const QCString &ch ) |
104 | { | 102 | { |
105 | d-> m_channel = ch; | 103 | d-> m_channel = ch; |
106 | } | 104 | } |
107 | 105 | ||
108 | void OQCopMessage::setMessage ( const QCString &m ) | 106 | void OQCopMessage::setMessage ( const QCString &m ) |
109 | { | 107 | { |
110 | d-> m_message = m; | 108 | d-> m_message = m; |
111 | } | 109 | } |
112 | 110 | ||
113 | void OQCopMessage::setData ( const QByteArray &data ) | 111 | void OQCopMessage::setData ( const QByteArray &data ) |
114 | { | 112 | { |
115 | d-> m_data = data; | 113 | d-> m_data = data; |
116 | } | 114 | } |
117 | 115 | ||
118 | /*! \class Opie::ODeviceButton | 116 | /*! \class Opie::ODeviceButton |
119 | \brief The Opie::ODeviceButton class represents a physical user mappable button on a Qtopia device. | 117 | \brief The Opie::ODeviceButton class represents a physical user mappable button on a Qtopia device. |
120 | 118 | ||
121 | This class represents a physical button on a Qtopia device. A | 119 | This class represents a physical button on a Qtopia device. A |
122 | device may have "user programmable" buttons. | 120 | device may have "user programmable" buttons. |
123 | The location and number of buttons will vary from device to | 121 | The location and number of buttons will vary from device to |
124 | device. userText() and pixmap() may be used to describe this button | 122 | device. userText() and pixmap() may be used to describe this button |
125 | to the user in help documentation. | 123 | to the user in help documentation. |
126 | 124 | ||
127 | \ingroup qtopiaemb | 125 | \ingroup qtopiaemb |
128 | \internal | 126 | \internal |
129 | */ | 127 | */ |
130 | 128 | ||
131 | ODeviceButton::ODeviceButton() | 129 | ODeviceButton::ODeviceButton() |
132 | { | 130 | { |
133 | } | 131 | } |
134 | 132 | ||
135 | ODeviceButton::~ODeviceButton() | 133 | ODeviceButton::~ODeviceButton() |
136 | { | 134 | { |
137 | } | 135 | } |
138 | 136 | ||
139 | /*! | 137 | /*! |
140 | Returns the button's keycode. | 138 | Returns the button's keycode. |
141 | */ | 139 | */ |
142 | ushort ODeviceButton::keycode() const | 140 | ushort ODeviceButton::keycode() const |
143 | { | 141 | { |
144 | return m_Keycode; | 142 | return m_Keycode; |
145 | } | 143 | } |
146 | 144 | ||
147 | 145 | ||
148 | /*! | 146 | /*! |
149 | This function returns a human readable, translated description of the button. | 147 | This function returns a human readable, translated description of the button. |
150 | */ | 148 | */ |
151 | QString ODeviceButton::userText() const | 149 | QString ODeviceButton::userText() const |
152 | { | 150 | { |
153 | return m_UserText; | 151 | return m_UserText; |
154 | } | 152 | } |
155 | 153 | ||
156 | /*! | 154 | /*! |
157 | This function returns the pixmap for this button. If there isn't one | 155 | This function returns the pixmap for this button. If there isn't one |
158 | it will return an empty (null) pixmap. | 156 | it will return an empty (null) pixmap. |
159 | */ | 157 | */ |
160 | QPixmap ODeviceButton::pixmap() const | 158 | QPixmap ODeviceButton::pixmap() const |
161 | { | 159 | { |
162 | return m_Pixmap; | 160 | return m_Pixmap; |
163 | } | 161 | } |
164 | 162 | ||
165 | /*! | 163 | /*! |
166 | This function returns the factory preset (default) action for when this button | 164 | This function returns the factory preset (default) action for when this button |
167 | is pressed. The return value is a legal QCop message. | 165 | is pressed. The return value is a legal QCop message. |
168 | */ | 166 | */ |
169 | OQCopMessage ODeviceButton::factoryPresetPressedAction() const | 167 | OQCopMessage ODeviceButton::factoryPresetPressedAction() const |
170 | { | 168 | { |
171 | return m_FactoryPresetPressedAction; | 169 | return m_FactoryPresetPressedAction; |
172 | } | 170 | } |
173 | 171 | ||
174 | /*! | 172 | /*! |
175 | This function returns the user assigned action for when this button is pressed. | 173 | This function returns the user assigned action for when this button is pressed. |
176 | If no action is assigned, factoryPresetAction() is returned. | 174 | If no action is assigned, factoryPresetAction() is returned. |
177 | */ | 175 | */ |
178 | OQCopMessage ODeviceButton::pressedAction() const | 176 | OQCopMessage ODeviceButton::pressedAction() const |
179 | { | 177 | { |
180 | if (m_PressedAction.channel().isEmpty()) | 178 | if (m_PressedAction.channel().isEmpty()) |
181 | return factoryPresetPressedAction(); | 179 | return factoryPresetPressedAction(); |
182 | return m_PressedAction; | 180 | return m_PressedAction; |
183 | } | 181 | } |
184 | 182 | ||
185 | /*! | 183 | /*! |
186 | This function returns the factory preset (default) action for when this button | 184 | This function returns the factory preset (default) action for when this button |
187 | is pressed and held. The return value is a legal QCop message. | 185 | is pressed and held. The return value is a legal QCop message. |
188 | */ | 186 | */ |
189 | OQCopMessage ODeviceButton::factoryPresetHeldAction() const | 187 | OQCopMessage ODeviceButton::factoryPresetHeldAction() const |
190 | { | 188 | { |
191 | return m_FactoryPresetHeldAction; | 189 | return m_FactoryPresetHeldAction; |
192 | } | 190 | } |
193 | 191 | ||
194 | /*! | 192 | /*! |
195 | This function returns the user assigned action for when this button is pressed | 193 | This function returns the user assigned action for when this button is pressed |
196 | and held. If no action is assigned, factoryPresetAction() is returned. | 194 | and held. If no action is assigned, factoryPresetAction() is returned. |
197 | */ | 195 | */ |
198 | OQCopMessage ODeviceButton::heldAction() const | 196 | OQCopMessage ODeviceButton::heldAction() const |
199 | { | 197 | { |
200 | if (m_HeldAction.channel().isEmpty()) | 198 | if (m_HeldAction.channel().isEmpty()) |
201 | return factoryPresetHeldAction(); | 199 | return factoryPresetHeldAction(); |
202 | return m_HeldAction; | 200 | return m_HeldAction; |
203 | } | 201 | } |
204 | 202 | ||
205 | void ODeviceButton::setKeycode(ushort keycode) | 203 | void ODeviceButton::setKeycode(ushort keycode) |
206 | { | 204 | { |
207 | m_Keycode = keycode; | 205 | m_Keycode = keycode; |
208 | } | 206 | } |
209 | 207 | ||
210 | void ODeviceButton::setUserText(const QString& text) | 208 | void ODeviceButton::setUserText(const QString& text) |
211 | { | 209 | { |
212 | m_UserText = text; | 210 | m_UserText = text; |
213 | } | 211 | } |
214 | 212 | ||
diff --git a/libopie/ofiledialog.cc b/libopie/ofiledialog.cc index 5511b24..47306b6 100644 --- a/libopie/ofiledialog.cc +++ b/libopie/ofiledialog.cc | |||
@@ -1,215 +1,212 @@ | |||
1 | /* | 1 | /* |
2 | =. This file is part of the OPIE Project | 2 | =. This file is part of the OPIE Project |
3 | .=l. Copyright (c) 2002,2003 <zecke@handhelds.org> | 3 | .=l. Copyright (c) 2002,2003 <zecke@handhelds.org> |
4 | .>+-= | 4 | .>+-= |
5 | _;:, .> :=|. This library is free software; you can | 5 | _;:, .> :=|. This library is free software; you can |
6 | .> <`_, > . <= redistribute it and/or modify it under | 6 | .> <`_, > . <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
8 | .="- .-=="i, .._ License as published by the Free Software | 8 | .="- .-=="i, .._ License as published by the Free Software |
9 | - . .-<_> .<> Foundation; either version 2 of the License, | 9 | - . .-<_> .<> Foundation; either version 2 of the License, |
10 | ._= =} : or (at your option) any later version. | 10 | ._= =} : or (at your option) any later version. |
11 | .%`+i> _;_. | 11 | .%`+i> _;_. |
12 | .i_,=:_. -<s. This library is distributed in the hope that | 12 | .i_,=:_. -<s. This library is distributed in the hope that |
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
14 | : .. .:, . . . without even the implied warranty of | 14 | : .. .:, . . . without even the implied warranty of |
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
17 | ..}^=.= = ; Library General Public License for more | 17 | ..}^=.= = ; Library General Public License for more |
18 | ++= -. .` .: details. | 18 | ++= -. .` .: details. |
19 | : = ...= . :.=- | 19 | : = ...= . :.=- |
20 | -. .:....=;==+<; You should have received a copy of the GNU | 20 | -. .:....=;==+<; You should have received a copy of the GNU |
21 | -_. . . )=. = Library General Public License along with | 21 | -_. . . )=. = Library General Public License along with |
22 | -- :-=` this library; see the file COPYING.LIB. | 22 | -- :-=` this library; see the file COPYING.LIB. |
23 | If not, write to the Free Software Foundation, | 23 | If not, write to the Free Software Foundation, |
24 | Inc., 59 Temple Place - Suite 330, | 24 | Inc., 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
26 | 26 | ||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <qpe/applnk.h> | ||
30 | #include <qpe/config.h> | 29 | #include <qpe/config.h> |
31 | #include <qpe/qpeapplication.h> | 30 | #include <qpe/qpeapplication.h> |
32 | 31 | ||
33 | #include <qfileinfo.h> | 32 | #include <qfileinfo.h> |
34 | #include <qstring.h> | ||
35 | #include <qapplication.h> | ||
36 | #include <qlayout.h> | 33 | #include <qlayout.h> |
37 | 34 | ||
38 | 35 | ||
39 | #include "ofiledialog.h" | 36 | #include "ofiledialog.h" |
40 | 37 | ||
41 | 38 | ||
42 | namespace { | 39 | namespace { |
43 | /* | 40 | /* |
44 | * helper functions to load the start dir | 41 | * helper functions to load the start dir |
45 | * and to save it | 42 | * and to save it |
46 | * helper to extract the dir out of a file name | 43 | * helper to extract the dir out of a file name |
47 | */ | 44 | */ |
48 | /** | 45 | /** |
49 | * This method will use Config( argv[0] ); | 46 | * This method will use Config( argv[0] ); |
50 | * @param key The group key used | 47 | * @param key The group key used |
51 | */ | 48 | */ |
52 | QString lastUsedDir( const QString& key ) { | 49 | QString lastUsedDir( const QString& key ) { |
53 | if ( qApp->argc() < 1 ) | 50 | if ( qApp->argc() < 1 ) |
54 | return QString::null; | 51 | return QString::null; |
55 | 52 | ||
56 | Config cfg( QFileInfo(qApp->argv()[0]).fileName() ); // appname | 53 | Config cfg( QFileInfo(qApp->argv()[0]).fileName() ); // appname |
57 | cfg.setGroup( key ); | 54 | cfg.setGroup( key ); |
58 | return cfg.readEntry("LastDir", QPEApplication::documentDir() ); | 55 | return cfg.readEntry("LastDir", QPEApplication::documentDir() ); |
59 | } | 56 | } |
60 | 57 | ||
61 | void saveLastDir( const QString& key, const QString& file ) { | 58 | void saveLastDir( const QString& key, const QString& file ) { |
62 | if ( qApp->argc() < 1 ) | 59 | if ( qApp->argc() < 1 ) |
63 | return; | 60 | return; |
64 | 61 | ||
65 | Config cfg( QFileInfo(qApp->argv()[0]).fileName() ); | 62 | Config cfg( QFileInfo(qApp->argv()[0]).fileName() ); |
66 | cfg.setGroup( key ); | 63 | cfg.setGroup( key ); |
67 | QFileInfo inf( file ); | 64 | QFileInfo inf( file ); |
68 | cfg.writeEntry("LastDir", inf.dirPath( true ) ); | 65 | cfg.writeEntry("LastDir", inf.dirPath( true ) ); |
69 | } | 66 | } |
70 | }; | 67 | }; |
71 | 68 | ||
72 | /** | 69 | /** |
73 | * This constructs a modal dialog | 70 | * This constructs a modal dialog |
74 | * | 71 | * |
75 | * @param caption The caption of the dialog | 72 | * @param caption The caption of the dialog |
76 | * @param wid The parent widget | 73 | * @param wid The parent widget |
77 | * @param mode The mode of the OFileSelector @see OFileSelector | 74 | * @param mode The mode of the OFileSelector @see OFileSelector |
78 | * @param selector The selector of the OFileSelector | 75 | * @param selector The selector of the OFileSelector |
79 | * @param dirName the dir or resource to start from | 76 | * @param dirName the dir or resource to start from |
80 | * @param fileName a proposed or existing filename | 77 | * @param fileName a proposed or existing filename |
81 | * @param mimetypes The mimeTypes | 78 | * @param mimetypes The mimeTypes |
82 | */ | 79 | */ |
83 | OFileDialog::OFileDialog(const QString &caption, | 80 | OFileDialog::OFileDialog(const QString &caption, |
84 | QWidget *wid, int mode, int selector, | 81 | QWidget *wid, int mode, int selector, |
85 | const QString &dirName, | 82 | const QString &dirName, |
86 | const QString &fileName, | 83 | const QString &fileName, |
87 | const QMap<QString,QStringList>& mimetypes ) | 84 | const QMap<QString,QStringList>& mimetypes ) |
88 | : QDialog( wid, "OFileDialog", true ) | 85 | : QDialog( wid, "OFileDialog", true ) |
89 | { | 86 | { |
90 | // QVBoxLayout *lay = new QVBoxLayout(this); | 87 | // QVBoxLayout *lay = new QVBoxLayout(this); |
91 | //showMaximized(); | 88 | //showMaximized(); |
92 | QVBoxLayout *lay = new QVBoxLayout(this ); | 89 | QVBoxLayout *lay = new QVBoxLayout(this ); |
93 | file = new OFileSelector(this , mode, selector, | 90 | file = new OFileSelector(this , mode, selector, |
94 | dirName, fileName, | 91 | dirName, fileName, |
95 | mimetypes ); | 92 | mimetypes ); |
96 | lay->addWidget( file ); | 93 | lay->addWidget( file ); |
97 | 94 | ||
98 | //lay->addWidget( file ); | 95 | //lay->addWidget( file ); |
99 | //showFullScreen(); | 96 | //showFullScreen(); |
100 | setCaption( caption.isEmpty() ? tr("FileDialog") : caption ); | 97 | setCaption( caption.isEmpty() ? tr("FileDialog") : caption ); |
101 | connect(file, SIGNAL(fileSelected(const QString&) ), | 98 | connect(file, SIGNAL(fileSelected(const QString&) ), |
102 | this, SLOT(slotFileSelected(const QString&) ) ); | 99 | this, SLOT(slotFileSelected(const QString&) ) ); |
103 | connect(file, SIGNAL(ok() ), | 100 | connect(file, SIGNAL(ok() ), |
104 | this, SLOT(slotSelectorOk()) ) ; | 101 | this, SLOT(slotSelectorOk()) ) ; |
105 | 102 | ||
106 | connect(file, SIGNAL(dirSelected(const QString&) ), this, SLOT(slotDirSelected(const QString&) ) ); | 103 | connect(file, SIGNAL(dirSelected(const QString&) ), this, SLOT(slotDirSelected(const QString&) ) ); |
107 | 104 | ||
108 | #if 0 | 105 | #if 0 |
109 | connect(file, SIGNAL(dirSelected(const QString &) ), | 106 | connect(file, SIGNAL(dirSelected(const QString &) ), |
110 | this, SLOT(slotDirSelected(const QString &) ) ); | 107 | this, SLOT(slotDirSelected(const QString &) ) ); |
111 | #endif | 108 | #endif |
112 | } | 109 | } |
113 | /** | 110 | /** |
114 | * @returns the mimetype of the selected | 111 | * @returns the mimetype of the selected |
115 | * currently it return QString::null | 112 | * currently it return QString::null |
116 | */ | 113 | */ |
117 | QString OFileDialog::mimetype()const | 114 | QString OFileDialog::mimetype()const |
118 | { | 115 | { |
119 | return QString::null; | 116 | return QString::null; |
120 | } | 117 | } |
121 | 118 | ||
122 | /** | 119 | /** |
123 | * @return the fileName | 120 | * @return the fileName |
124 | */ | 121 | */ |
125 | QString OFileDialog::fileName()const | 122 | QString OFileDialog::fileName()const |
126 | { | 123 | { |
127 | return file->selectedName(); | 124 | return file->selectedName(); |
128 | } | 125 | } |
129 | 126 | ||
130 | /** | 127 | /** |
131 | * return a DocLnk to the current file | 128 | * return a DocLnk to the current file |
132 | */ | 129 | */ |
133 | DocLnk OFileDialog::selectedDocument()const | 130 | DocLnk OFileDialog::selectedDocument()const |
134 | { | 131 | { |
135 | return file->selectedDocument(); | 132 | return file->selectedDocument(); |
136 | } | 133 | } |
137 | 134 | ||
138 | /** | 135 | /** |
139 | * This opens up a filedialog in Open mode | 136 | * This opens up a filedialog in Open mode |
140 | * | 137 | * |
141 | * @param selector the Selector Mode | 138 | * @param selector the Selector Mode |
142 | * @param startDir Where to start from | 139 | * @param startDir Where to start from |
143 | * @param file A proposed filename | 140 | * @param file A proposed filename |
144 | * @param mimes A list of MimeTypes | 141 | * @param mimes A list of MimeTypes |
145 | * @param wid the parent | 142 | * @param wid the parent |
146 | * @param caption of the dialog if QString::null tr("Open") will be used | 143 | * @param caption of the dialog if QString::null tr("Open") will be used |
147 | * @return the fileName or QString::null | 144 | * @return the fileName or QString::null |
148 | */ | 145 | */ |
149 | QString OFileDialog::getOpenFileName(int selector, | 146 | QString OFileDialog::getOpenFileName(int selector, |
150 | const QString &_startDir, | 147 | const QString &_startDir, |
151 | const QString &file, | 148 | const QString &file, |
152 | const MimeTypes &mimes, | 149 | const MimeTypes &mimes, |
153 | QWidget *wid, | 150 | QWidget *wid, |
154 | const QString &caption ) | 151 | const QString &caption ) |
155 | { | 152 | { |
156 | QString ret; | 153 | QString ret; |
157 | QString startDir = _startDir; | 154 | QString startDir = _startDir; |
158 | if (startDir.isEmpty() ) | 155 | if (startDir.isEmpty() ) |
159 | startDir = lastUsedDir( "FileDialog-OPEN" ); | 156 | startDir = lastUsedDir( "FileDialog-OPEN" ); |
160 | 157 | ||
161 | 158 | ||
162 | OFileDialog dlg( caption.isEmpty() ? tr("Open") : caption, | 159 | OFileDialog dlg( caption.isEmpty() ? tr("Open") : caption, |
163 | wid, OFileSelector::Open, selector, startDir, file, mimes); | 160 | wid, OFileSelector::Open, selector, startDir, file, mimes); |
164 | dlg.showMaximized(); | 161 | dlg.showMaximized(); |
165 | if( dlg.exec() ) { | 162 | if( dlg.exec() ) { |
166 | ret = dlg.fileName(); | 163 | ret = dlg.fileName(); |
167 | saveLastDir( "FileDialog-OPEN", ret ); | 164 | saveLastDir( "FileDialog-OPEN", ret ); |
168 | } | 165 | } |
169 | 166 | ||
170 | return ret; | 167 | return ret; |
171 | } | 168 | } |
172 | 169 | ||
173 | /** | 170 | /** |
174 | * This opens up a file dialog in save mode | 171 | * This opens up a file dialog in save mode |
175 | * @see getOpenFileName | 172 | * @see getOpenFileName |
176 | */ | 173 | */ |
177 | QString OFileDialog::getSaveFileName(int selector, | 174 | QString OFileDialog::getSaveFileName(int selector, |
178 | const QString &_startDir, | 175 | const QString &_startDir, |
179 | const QString &file, | 176 | const QString &file, |
180 | const MimeTypes &mimes, | 177 | const MimeTypes &mimes, |
181 | QWidget *wid, | 178 | QWidget *wid, |
182 | const QString &caption ) | 179 | const QString &caption ) |
183 | { | 180 | { |
184 | QString ret; | 181 | QString ret; |
185 | QString startDir = _startDir; | 182 | QString startDir = _startDir; |
186 | if (startDir.isEmpty() ) | 183 | if (startDir.isEmpty() ) |
187 | startDir = lastUsedDir( "FileDialog-SAVE" ); | 184 | startDir = lastUsedDir( "FileDialog-SAVE" ); |
188 | 185 | ||
189 | OFileDialog dlg( caption.isEmpty() ? tr("Save") : caption, | 186 | OFileDialog dlg( caption.isEmpty() ? tr("Save") : caption, |
190 | wid, OFileSelector::Save, selector, startDir, file, mimes); | 187 | wid, OFileSelector::Save, selector, startDir, file, mimes); |
191 | dlg.showMaximized(); | 188 | dlg.showMaximized(); |
192 | if( dlg.exec() ) { | 189 | if( dlg.exec() ) { |
193 | ret = dlg.fileName(); | 190 | ret = dlg.fileName(); |
194 | saveLastDir( "FileDialog-SAVE", ret ); | 191 | saveLastDir( "FileDialog-SAVE", ret ); |
195 | } | 192 | } |
196 | 193 | ||
197 | return ret; | 194 | return ret; |
198 | } | 195 | } |
199 | 196 | ||
200 | void OFileDialog::slotFileSelected(const QString & ) | 197 | void OFileDialog::slotFileSelected(const QString & ) |
201 | { | 198 | { |
202 | accept(); | 199 | accept(); |
203 | } | 200 | } |
204 | 201 | ||
205 | void OFileDialog::slotSelectorOk( ) | 202 | void OFileDialog::slotSelectorOk( ) |
206 | { | 203 | { |
207 | accept(); | 204 | accept(); |
208 | } | 205 | } |
209 | 206 | ||
210 | void OFileDialog::slotDirSelected(const QString &dir ) | 207 | void OFileDialog::slotDirSelected(const QString &dir ) |
211 | { | 208 | { |
212 | setCaption( dir ); | 209 | setCaption( dir ); |
213 | // if mode | 210 | // if mode |
214 | //accept(); | 211 | //accept(); |
215 | } | 212 | } |
diff --git a/libopie/ofileselector.cpp b/libopie/ofileselector.cpp index 9ac2981..1ba94ae 100644 --- a/libopie/ofileselector.cpp +++ b/libopie/ofileselector.cpp | |||
@@ -1,204 +1,199 @@ | |||
1 | #include <qcombobox.h> | 1 | #include <qcombobox.h> |
2 | #include <qdir.h> | 2 | #include <qdir.h> |
3 | #include <qhbox.h> | ||
4 | #include <qheader.h> | ||
5 | #include <qlabel.h> | 3 | #include <qlabel.h> |
6 | #include <qlayout.h> | 4 | #include <qlayout.h> |
7 | #include <qlineedit.h> | 5 | #include <qlineedit.h> |
8 | #include <qlistview.h> | ||
9 | #include <qpopupmenu.h> | 6 | #include <qpopupmenu.h> |
10 | #include <qwidgetstack.h> | 7 | #include <qwidgetstack.h> |
11 | #include <qregexp.h> | ||
12 | #include <qobjectlist.h> | ||
13 | 8 | ||
14 | /* hacky but we need to get FileSelector::filter */ | 9 | /* hacky but we need to get FileSelector::filter */ |
15 | #define private public | 10 | #define private public |
16 | #include <qpe/fileselector.h> | 11 | #include <qpe/fileselector.h> |
17 | #undef private | 12 | #undef private |
18 | 13 | ||
19 | #include <qpe/qpeapplication.h> | 14 | #include <qpe/qpeapplication.h> |
20 | #include <qpe/mimetype.h> | 15 | #include <qpe/mimetype.h> |
21 | #include <qpe/resource.h> | 16 | #include <qpe/resource.h> |
22 | #include <qpe/storage.h> | 17 | #include <qpe/storage.h> |
23 | 18 | ||
24 | #include "ofileselector_p.h" | 19 | #include "ofileselector_p.h" |
25 | #include "ofileselector.h" | 20 | #include "ofileselector.h" |
26 | 21 | ||
27 | 22 | ||
28 | 23 | ||
29 | OFileViewInterface::OFileViewInterface( OFileSelector* selector ) | 24 | OFileViewInterface::OFileViewInterface( OFileSelector* selector ) |
30 | : m_selector( selector ) { | 25 | : m_selector( selector ) { |
31 | } | 26 | } |
32 | OFileViewInterface::~OFileViewInterface() { | 27 | OFileViewInterface::~OFileViewInterface() { |
33 | } | 28 | } |
34 | QString OFileViewInterface::name()const{ | 29 | QString OFileViewInterface::name()const{ |
35 | return m_name; | 30 | return m_name; |
36 | } | 31 | } |
37 | void OFileViewInterface::setName( const QString& name ) { | 32 | void OFileViewInterface::setName( const QString& name ) { |
38 | m_name = name; | 33 | m_name = name; |
39 | } | 34 | } |
40 | OFileSelector* OFileViewInterface::selector()const { | 35 | OFileSelector* OFileViewInterface::selector()const { |
41 | return m_selector; | 36 | return m_selector; |
42 | } | 37 | } |
43 | DocLnk OFileViewInterface::selectedDocument()const { | 38 | DocLnk OFileViewInterface::selectedDocument()const { |
44 | return DocLnk( selectedName() ); | 39 | return DocLnk( selectedName() ); |
45 | } | 40 | } |
46 | bool OFileViewInterface::showNew()const { | 41 | bool OFileViewInterface::showNew()const { |
47 | return selector()->showNew(); | 42 | return selector()->showNew(); |
48 | } | 43 | } |
49 | bool OFileViewInterface::showClose()const { | 44 | bool OFileViewInterface::showClose()const { |
50 | return selector()->showClose(); | 45 | return selector()->showClose(); |
51 | } | 46 | } |
52 | MimeTypes OFileViewInterface::mimeTypes()const { | 47 | MimeTypes OFileViewInterface::mimeTypes()const { |
53 | return selector()->mimeTypes(); | 48 | return selector()->mimeTypes(); |
54 | } | 49 | } |
55 | QStringList OFileViewInterface::currentMimeType()const { | 50 | QStringList OFileViewInterface::currentMimeType()const { |
56 | return selector()->currentMimeType(); | 51 | return selector()->currentMimeType(); |
57 | } | 52 | } |
58 | void OFileViewInterface::activate( const QString& ) { | 53 | void OFileViewInterface::activate( const QString& ) { |
59 | // not implemented here | 54 | // not implemented here |
60 | } | 55 | } |
61 | void OFileViewInterface::ok() { | 56 | void OFileViewInterface::ok() { |
62 | emit selector()->ok(); | 57 | emit selector()->ok(); |
63 | } | 58 | } |
64 | void OFileViewInterface::cancel() { | 59 | void OFileViewInterface::cancel() { |
65 | emit selector()->cancel(); | 60 | emit selector()->cancel(); |
66 | } | 61 | } |
67 | void OFileViewInterface::closeMe() { | 62 | void OFileViewInterface::closeMe() { |
68 | emit selector()->closeMe(); | 63 | emit selector()->closeMe(); |
69 | } | 64 | } |
70 | void OFileViewInterface::fileSelected( const QString& str) { | 65 | void OFileViewInterface::fileSelected( const QString& str) { |
71 | emit selector()->fileSelected( str); | 66 | emit selector()->fileSelected( str); |
72 | } | 67 | } |
73 | void OFileViewInterface::fileSelected( const DocLnk& lnk) { | 68 | void OFileViewInterface::fileSelected( const DocLnk& lnk) { |
74 | emit selector()->fileSelected( lnk ); | 69 | emit selector()->fileSelected( lnk ); |
75 | } | 70 | } |
76 | void OFileViewInterface::setCurrentFileName( const QString& str ) { | 71 | void OFileViewInterface::setCurrentFileName( const QString& str ) { |
77 | selector()->m_lneEdit->setText( str ); | 72 | selector()->m_lneEdit->setText( str ); |
78 | } | 73 | } |
79 | QString OFileViewInterface::currentFileName()const{ | 74 | QString OFileViewInterface::currentFileName()const{ |
80 | return selector()->m_lneEdit->text(); | 75 | return selector()->m_lneEdit->text(); |
81 | } | 76 | } |
82 | QString OFileViewInterface::startDirectory()const{ | 77 | QString OFileViewInterface::startDirectory()const{ |
83 | return selector()->m_startDir; | 78 | return selector()->m_startDir; |
84 | } | 79 | } |
85 | 80 | ||
86 | 81 | ||
87 | ODocumentFileView::ODocumentFileView( OFileSelector* selector ) | 82 | ODocumentFileView::ODocumentFileView( OFileSelector* selector ) |
88 | : OFileViewInterface( selector ) { | 83 | : OFileViewInterface( selector ) { |
89 | m_selector = 0; | 84 | m_selector = 0; |
90 | setName( QObject::tr("Documents") ); | 85 | setName( QObject::tr("Documents") ); |
91 | } | 86 | } |
92 | ODocumentFileView::~ODocumentFileView() { | 87 | ODocumentFileView::~ODocumentFileView() { |
93 | 88 | ||
94 | } | 89 | } |
95 | QString ODocumentFileView::selectedName()const { | 90 | QString ODocumentFileView::selectedName()const { |
96 | if (!m_selector) | 91 | if (!m_selector) |
97 | return QString::null; | 92 | return QString::null; |
98 | 93 | ||
99 | return m_selector->selectedDocument().file(); | 94 | return m_selector->selectedDocument().file(); |
100 | } | 95 | } |
101 | QString ODocumentFileView::selectedPath()const { | 96 | QString ODocumentFileView::selectedPath()const { |
102 | return QPEApplication::documentDir(); | 97 | return QPEApplication::documentDir(); |
103 | } | 98 | } |
104 | QString ODocumentFileView::directory()const { | 99 | QString ODocumentFileView::directory()const { |
105 | return selectedPath(); | 100 | return selectedPath(); |
106 | } | 101 | } |
107 | void ODocumentFileView::reread() { | 102 | void ODocumentFileView::reread() { |
108 | if (!m_selector) | 103 | if (!m_selector) |
109 | return; | 104 | return; |
110 | 105 | ||
111 | m_selector->setNewVisible( showNew() ); | 106 | m_selector->setNewVisible( showNew() ); |
112 | m_selector->setCloseVisible( showClose() ); | 107 | m_selector->setCloseVisible( showClose() ); |
113 | m_selector->filter = currentMimeType().join(";"); | 108 | m_selector->filter = currentMimeType().join(";"); |
114 | m_selector->reread(); | 109 | m_selector->reread(); |
115 | } | 110 | } |
116 | int ODocumentFileView::fileCount()const { | 111 | int ODocumentFileView::fileCount()const { |
117 | if (!m_selector) | 112 | if (!m_selector) |
118 | return -1; | 113 | return -1; |
119 | 114 | ||
120 | return m_selector->fileCount(); | 115 | return m_selector->fileCount(); |
121 | } | 116 | } |
122 | DocLnk ODocumentFileView::selectedDocument()const { | 117 | DocLnk ODocumentFileView::selectedDocument()const { |
123 | if (!m_selector) | 118 | if (!m_selector) |
124 | return DocLnk(); | 119 | return DocLnk(); |
125 | 120 | ||
126 | return m_selector->selectedDocument(); | 121 | return m_selector->selectedDocument(); |
127 | } | 122 | } |
128 | QWidget* ODocumentFileView::widget( QWidget* parent ) { | 123 | QWidget* ODocumentFileView::widget( QWidget* parent ) { |
129 | if (!m_selector ) { | 124 | if (!m_selector ) { |
130 | m_selector = new FileSelector(currentMimeType().join(";"), parent, "fileselector", showNew(), showClose() ); | 125 | m_selector = new FileSelector(currentMimeType().join(";"), parent, "fileselector", showNew(), showClose() ); |
131 | QObject::connect(m_selector, SIGNAL(fileSelected( const DocLnk& ) ), | 126 | QObject::connect(m_selector, SIGNAL(fileSelected( const DocLnk& ) ), |
132 | selector(), SLOT(slotDocLnkBridge(const DocLnk&) ) ); | 127 | selector(), SLOT(slotDocLnkBridge(const DocLnk&) ) ); |
133 | QObject::connect(m_selector, SIGNAL(closeMe() ), | 128 | QObject::connect(m_selector, SIGNAL(closeMe() ), |
134 | selector(), SIGNAL(closeMe() ) ); | 129 | selector(), SIGNAL(closeMe() ) ); |
135 | QObject::connect(m_selector, SIGNAL(newSelected(const DocLnk& ) ), | 130 | QObject::connect(m_selector, SIGNAL(newSelected(const DocLnk& ) ), |
136 | selector(), SIGNAL(newSelected(const DocLnk& ) ) ); | 131 | selector(), SIGNAL(newSelected(const DocLnk& ) ) ); |
137 | } | 132 | } |
138 | 133 | ||
139 | return m_selector; | 134 | return m_selector; |
140 | } | 135 | } |
141 | 136 | ||
142 | /* | 137 | /* |
143 | * This is the file system view used | 138 | * This is the file system view used |
144 | * we use a QListView + QListViewItems for it | 139 | * we use a QListView + QListViewItems for it |
145 | */ | 140 | */ |
146 | 141 | ||
147 | OFileSelectorItem::OFileSelectorItem( QListView* view, const QPixmap& pixmap, | 142 | OFileSelectorItem::OFileSelectorItem( QListView* view, const QPixmap& pixmap, |
148 | const QString& path, const QString& date, | 143 | const QString& path, const QString& date, |
149 | const QString& size, const QString& dir, | 144 | const QString& size, const QString& dir, |
150 | bool isLocked, bool isDir ) | 145 | bool isLocked, bool isDir ) |
151 | : QListViewItem( view ) | 146 | : QListViewItem( view ) |
152 | { | 147 | { |
153 | setPixmap(0, pixmap ); | 148 | setPixmap(0, pixmap ); |
154 | setText(1, path ); | 149 | setText(1, path ); |
155 | setText(2, size ); | 150 | setText(2, size ); |
156 | setText(3, date ); | 151 | setText(3, date ); |
157 | m_isDir = isDir; | 152 | m_isDir = isDir; |
158 | m_dir = dir; | 153 | m_dir = dir; |
159 | m_locked = isLocked; | 154 | m_locked = isLocked; |
160 | } | 155 | } |
161 | OFileSelectorItem::~OFileSelectorItem() { | 156 | OFileSelectorItem::~OFileSelectorItem() { |
162 | 157 | ||
163 | } | 158 | } |
164 | bool OFileSelectorItem::isLocked()const { | 159 | bool OFileSelectorItem::isLocked()const { |
165 | return m_locked; | 160 | return m_locked; |
166 | } | 161 | } |
167 | QString OFileSelectorItem::directory()const { | 162 | QString OFileSelectorItem::directory()const { |
168 | return m_dir; | 163 | return m_dir; |
169 | } | 164 | } |
170 | bool OFileSelectorItem::isDir()const { | 165 | bool OFileSelectorItem::isDir()const { |
171 | return m_isDir; | 166 | return m_isDir; |
172 | } | 167 | } |
173 | QString OFileSelectorItem::path()const { | 168 | QString OFileSelectorItem::path()const { |
174 | return text( 1 ); | 169 | return text( 1 ); |
175 | } | 170 | } |
176 | QString OFileSelectorItem::key( int id, bool )const { | 171 | QString OFileSelectorItem::key( int id, bool )const { |
177 | QString ke; | 172 | QString ke; |
178 | if( id == 0 || id == 1 ){ // name | 173 | if( id == 0 || id == 1 ){ // name |
179 | if( m_isDir ){ | 174 | if( m_isDir ){ |
180 | ke.append("0" ); | 175 | ke.append("0" ); |
181 | ke.append( text(1) ); | 176 | ke.append( text(1) ); |
182 | }else{ | 177 | }else{ |
183 | ke.append("1" ); | 178 | ke.append("1" ); |
184 | ke.append( text(1) ); | 179 | ke.append( text(1) ); |
185 | } | 180 | } |
186 | return ke; | 181 | return ke; |
187 | }else | 182 | }else |
188 | return text( id ); | 183 | return text( id ); |
189 | 184 | ||
190 | } | 185 | } |
191 | 186 | ||
192 | OFileViewFileListView::OFileViewFileListView( QWidget* parent, const QString& startDir, | 187 | OFileViewFileListView::OFileViewFileListView( QWidget* parent, const QString& startDir, |
193 | OFileSelector* sel) | 188 | OFileSelector* sel) |
194 | : QWidget( parent ), m_sel( sel ) { | 189 | : QWidget( parent ), m_sel( sel ) { |
195 | m_all = false; | 190 | m_all = false; |
196 | QVBoxLayout* lay = new QVBoxLayout( this ); | 191 | QVBoxLayout* lay = new QVBoxLayout( this ); |
197 | m_currentDir = startDir; | 192 | m_currentDir = startDir; |
198 | 193 | ||
199 | /* | 194 | /* |
200 | * now we add a special bar | 195 | * now we add a special bar |
201 | * One Button For Up | 196 | * One Button For Up |
202 | * Home | 197 | * Home |
203 | * Doc | 198 | * Doc |
204 | * And a dropdown menu with FileSystems | 199 | * And a dropdown menu with FileSystems |
diff --git a/libopie/ofontselector.cpp b/libopie/ofontselector.cpp index c8471cc..7e07008 100644 --- a/libopie/ofontselector.cpp +++ b/libopie/ofontselector.cpp | |||
@@ -1,225 +1,224 @@ | |||
1 | /* | 1 | /* |
2 | =. This file is part of the OPIE Project | 2 | =. This file is part of the OPIE Project |
3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> | 3 | .=l. Copyright (c) 2002 Robert Griebl <sandman@handhelds.org> |
4 | .>+-= | 4 | .>+-= |
5 | _;:, .> :=|. This library is free software; you can | 5 | _;:, .> :=|. This library is free software; you can |
6 | .> <`_, > . <= redistribute it and/or modify it under | 6 | .> <`_, > . <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
8 | .="- .-=="i, .._ License as published by the Free Software | 8 | .="- .-=="i, .._ License as published by the Free Software |
9 | - . .-<_> .<> Foundation; either version 2 of the License, | 9 | - . .-<_> .<> Foundation; either version 2 of the License, |
10 | ._= =} : or (at your option) any later version. | 10 | ._= =} : or (at your option) any later version. |
11 | .%`+i> _;_. | 11 | .%`+i> _;_. |
12 | .i_,=:_. -<s. This library is distributed in the hope that | 12 | .i_,=:_. -<s. This library is distributed in the hope that |
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
14 | : .. .:, . . . without even the implied warranty of | 14 | : .. .:, . . . without even the implied warranty of |
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
17 | ..}^=.= = ; Library General Public License for more | 17 | ..}^=.= = ; Library General Public License for more |
18 | ++= -. .` .: details. | 18 | ++= -. .` .: details. |
19 | : = ...= . :.=- | 19 | : = ...= . :.=- |
20 | -. .:....=;==+<; You should have received a copy of the GNU | 20 | -. .:....=;==+<; You should have received a copy of the GNU |
21 | -_. . . )=. = Library General Public License along with | 21 | -_. . . )=. = Library General Public License along with |
22 | -- :-=` this library; see the file COPYING.LIB. | 22 | -- :-=` this library; see the file COPYING.LIB. |
23 | If not, write to the Free Software Foundation, | 23 | If not, write to the Free Software Foundation, |
24 | Inc., 59 Temple Place - Suite 330, | 24 | Inc., 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
26 | 26 | ||
27 | */ | 27 | */ |
28 | 28 | ||
29 | #include <qlayout.h> | 29 | #include <qlayout.h> |
30 | #include <qlistbox.h> | 30 | #include <qlistbox.h> |
31 | #include <qcombobox.h> | 31 | #include <qcombobox.h> |
32 | #include <qlabel.h> | 32 | #include <qlabel.h> |
33 | #include <qfont.h> | ||
34 | #include <qmultilineedit.h> | 33 | #include <qmultilineedit.h> |
35 | 34 | ||
36 | #include <qpe/fontdatabase.h> | 35 | #include <qpe/fontdatabase.h> |
37 | 36 | ||
38 | #include "ofontselector.h" | 37 | #include "ofontselector.h" |
39 | 38 | ||
40 | class OFontSelectorPrivate { | 39 | class OFontSelectorPrivate { |
41 | public: | 40 | public: |
42 | QListBox * m_font_family_list; | 41 | QListBox * m_font_family_list; |
43 | QComboBox * m_font_style_list; | 42 | QComboBox * m_font_style_list; |
44 | QComboBox * m_font_size_list; | 43 | QComboBox * m_font_size_list; |
45 | QMultiLineEdit *m_preview; | 44 | QMultiLineEdit *m_preview; |
46 | 45 | ||
47 | bool m_pointbug : 1; | 46 | bool m_pointbug : 1; |
48 | 47 | ||
49 | FontDatabase m_fdb; | 48 | FontDatabase m_fdb; |
50 | }; | 49 | }; |
51 | 50 | ||
52 | namespace { | 51 | namespace { |
53 | 52 | ||
54 | class FontListItem : public QListBoxText { | 53 | class FontListItem : public QListBoxText { |
55 | public: | 54 | public: |
56 | FontListItem ( const QString &t, const QStringList &styles, const QValueList<int> &sizes ) : QListBoxText ( ) | 55 | FontListItem ( const QString &t, const QStringList &styles, const QValueList<int> &sizes ) : QListBoxText ( ) |
57 | { | 56 | { |
58 | m_name = t; | 57 | m_name = t; |
59 | m_styles = styles; | 58 | m_styles = styles; |
60 | m_sizes = sizes; | 59 | m_sizes = sizes; |
61 | 60 | ||
62 | QString str = t; | 61 | QString str = t; |
63 | str [0] = str [0]. upper ( ); | 62 | str [0] = str [0]. upper ( ); |
64 | setText ( str ); | 63 | setText ( str ); |
65 | } | 64 | } |
66 | 65 | ||
67 | QString family ( ) const | 66 | QString family ( ) const |
68 | { | 67 | { |
69 | return m_name; | 68 | return m_name; |
70 | } | 69 | } |
71 | 70 | ||
72 | const QStringList &styles ( ) const | 71 | const QStringList &styles ( ) const |
73 | { | 72 | { |
74 | return m_styles; | 73 | return m_styles; |
75 | } | 74 | } |
76 | 75 | ||
77 | const QValueList<int> &sizes ( ) const | 76 | const QValueList<int> &sizes ( ) const |
78 | { | 77 | { |
79 | return m_sizes; | 78 | return m_sizes; |
80 | } | 79 | } |
81 | 80 | ||
82 | private: | 81 | private: |
83 | QStringList m_styles; | 82 | QStringList m_styles; |
84 | QValueList<int> m_sizes; | 83 | QValueList<int> m_sizes; |
85 | QString m_name; | 84 | QString m_name; |
86 | }; | 85 | }; |
87 | 86 | ||
88 | 87 | ||
89 | static int findItemCB ( QComboBox *box, const QString &str ) | 88 | static int findItemCB ( QComboBox *box, const QString &str ) |
90 | { | 89 | { |
91 | for ( int i = 0; i < box-> count ( ); i++ ) { | 90 | for ( int i = 0; i < box-> count ( ); i++ ) { |
92 | if ( box-> text ( i ) == str ) | 91 | if ( box-> text ( i ) == str ) |
93 | return i; | 92 | return i; |
94 | } | 93 | } |
95 | return -1; | 94 | return -1; |
96 | } | 95 | } |
97 | 96 | ||
98 | } | 97 | } |
99 | /* static same as anon. namespace */ | 98 | /* static same as anon. namespace */ |
100 | static int qt_version ( ) | 99 | static int qt_version ( ) |
101 | { | 100 | { |
102 | const char *qver = qVersion ( ); | 101 | const char *qver = qVersion ( ); |
103 | 102 | ||
104 | return ( qver [0] - '0' ) * 100 + ( qver [2] - '0' ) * 10 + ( qver [4] - '0' ); | 103 | return ( qver [0] - '0' ) * 100 + ( qver [2] - '0' ) * 10 + ( qver [4] - '0' ); |
105 | } | 104 | } |
106 | 105 | ||
107 | /** | 106 | /** |
108 | * Constructs the Selector object | 107 | * Constructs the Selector object |
109 | * @param withpreview If a font preview should be given | 108 | * @param withpreview If a font preview should be given |
110 | * @param parent The parent of the Font Selector | 109 | * @param parent The parent of the Font Selector |
111 | * @param name The name of the object | 110 | * @param name The name of the object |
112 | * @param fl WidgetFlags | 111 | * @param fl WidgetFlags |
113 | */ | 112 | */ |
114 | OFontSelector::OFontSelector ( bool withpreview, QWidget *parent, const char *name, WFlags fl ) : QWidget ( parent, name, fl ) | 113 | OFontSelector::OFontSelector ( bool withpreview, QWidget *parent, const char *name, WFlags fl ) : QWidget ( parent, name, fl ) |
115 | { | 114 | { |
116 | d = new OFontSelectorPrivate ( ); | 115 | d = new OFontSelectorPrivate ( ); |
117 | 116 | ||
118 | QGridLayout *gridLayout = new QGridLayout ( this, 0, 0, 4, 4 ); | 117 | QGridLayout *gridLayout = new QGridLayout ( this, 0, 0, 4, 4 ); |
119 | gridLayout->setRowStretch ( 4, 10 ); | 118 | gridLayout->setRowStretch ( 4, 10 ); |
120 | 119 | ||
121 | d-> m_font_family_list = new QListBox( this, "FontListBox" ); | 120 | d-> m_font_family_list = new QListBox( this, "FontListBox" ); |
122 | gridLayout->addMultiCellWidget( d-> m_font_family_list, 0, 4, 0, 0 ); | 121 | gridLayout->addMultiCellWidget( d-> m_font_family_list, 0, 4, 0, 0 ); |
123 | connect( d-> m_font_family_list, SIGNAL( highlighted( int ) ), this, SLOT( fontFamilyClicked( int ) ) ); | 122 | connect( d-> m_font_family_list, SIGNAL( highlighted( int ) ), this, SLOT( fontFamilyClicked( int ) ) ); |
124 | 123 | ||
125 | QLabel *label = new QLabel( tr( "Style" ), this ); | 124 | QLabel *label = new QLabel( tr( "Style" ), this ); |
126 | gridLayout->addWidget( label, 0, 1 ); | 125 | gridLayout->addWidget( label, 0, 1 ); |
127 | 126 | ||
128 | d-> m_font_style_list = new QComboBox( this, "StyleListBox" ); | 127 | d-> m_font_style_list = new QComboBox( this, "StyleListBox" ); |
129 | connect( d-> m_font_style_list, SIGNAL( activated( int ) ), this, SLOT( fontStyleClicked( int ) ) ); | 128 | connect( d-> m_font_style_list, SIGNAL( activated( int ) ), this, SLOT( fontStyleClicked( int ) ) ); |
130 | gridLayout->addWidget( d-> m_font_style_list, 1, 1 ); | 129 | gridLayout->addWidget( d-> m_font_style_list, 1, 1 ); |
131 | 130 | ||
132 | label = new QLabel( tr( "Size" ), this ); | 131 | label = new QLabel( tr( "Size" ), this ); |
133 | gridLayout->addWidget( label, 2, 1 ); | 132 | gridLayout->addWidget( label, 2, 1 ); |
134 | 133 | ||
135 | d-> m_font_size_list = new QComboBox( this, "SizeListBox" ); | 134 | d-> m_font_size_list = new QComboBox( this, "SizeListBox" ); |
136 | connect( d-> m_font_size_list, SIGNAL( activated( int ) ), | 135 | connect( d-> m_font_size_list, SIGNAL( activated( int ) ), |
137 | this, SLOT( fontSizeClicked( int ) ) ); | 136 | this, SLOT( fontSizeClicked( int ) ) ); |
138 | gridLayout->addWidget( d-> m_font_size_list, 3, 1 ); | 137 | gridLayout->addWidget( d-> m_font_size_list, 3, 1 ); |
139 | 138 | ||
140 | d-> m_pointbug = ( qt_version ( ) <= 233 ); | 139 | d-> m_pointbug = ( qt_version ( ) <= 233 ); |
141 | 140 | ||
142 | if ( withpreview ) { | 141 | if ( withpreview ) { |
143 | d-> m_preview = new QMultiLineEdit ( this, "Preview" ); | 142 | d-> m_preview = new QMultiLineEdit ( this, "Preview" ); |
144 | d-> m_preview-> setAlignment ( AlignCenter ); | 143 | d-> m_preview-> setAlignment ( AlignCenter ); |
145 | d-> m_preview-> setWordWrap ( QMultiLineEdit::WidgetWidth ); | 144 | d-> m_preview-> setWordWrap ( QMultiLineEdit::WidgetWidth ); |
146 | d-> m_preview-> setMargin ( 3 ); | 145 | d-> m_preview-> setMargin ( 3 ); |
147 | d-> m_preview-> setText ( tr( "The Quick Brown Fox Jumps Over The Lazy Dog" )); | 146 | d-> m_preview-> setText ( tr( "The Quick Brown Fox Jumps Over The Lazy Dog" )); |
148 | gridLayout-> addRowSpacing ( 5, 4 ); | 147 | gridLayout-> addRowSpacing ( 5, 4 ); |
149 | gridLayout-> addMultiCellWidget ( d-> m_preview, 6, 6, 0, 1 ); | 148 | gridLayout-> addMultiCellWidget ( d-> m_preview, 6, 6, 0, 1 ); |
150 | gridLayout-> setRowStretch ( 6, 5 ); | 149 | gridLayout-> setRowStretch ( 6, 5 ); |
151 | } | 150 | } |
152 | else | 151 | else |
153 | d-> m_preview = 0; | 152 | d-> m_preview = 0; |
154 | 153 | ||
155 | loadFonts ( d-> m_font_family_list ); | 154 | loadFonts ( d-> m_font_family_list ); |
156 | } | 155 | } |
157 | 156 | ||
158 | OFontSelector::~OFontSelector ( ) | 157 | OFontSelector::~OFontSelector ( ) |
159 | { | 158 | { |
160 | delete d; | 159 | delete d; |
161 | } | 160 | } |
162 | 161 | ||
163 | /** | 162 | /** |
164 | * This methods tries to set the font | 163 | * This methods tries to set the font |
165 | * @param f The wishes font | 164 | * @param f The wishes font |
166 | * @return success or failure | 165 | * @return success or failure |
167 | */ | 166 | */ |
168 | bool OFontSelector::setSelectedFont ( const QFont &f ) | 167 | bool OFontSelector::setSelectedFont ( const QFont &f ) |
169 | { | 168 | { |
170 | return setSelectedFont ( f. family ( ), d-> m_fdb. styleString ( f ), f. pointSize ( ), QFont::encodingName ( f. charSet ( ))); | 169 | return setSelectedFont ( f. family ( ), d-> m_fdb. styleString ( f ), f. pointSize ( ), QFont::encodingName ( f. charSet ( ))); |
171 | } | 170 | } |
172 | 171 | ||
173 | 172 | ||
174 | /** | 173 | /** |
175 | * This is an overloaded method @see setSelectedFont | 174 | * This is an overloaded method @see setSelectedFont |
176 | * @param familyStr The family of the font | 175 | * @param familyStr The family of the font |
177 | * @param styleStr The style of the font | 176 | * @param styleStr The style of the font |
178 | * @param sizeVal The size of font | 177 | * @param sizeVal The size of font |
179 | * @param charset The charset to be used. Will be deprecated by QT3 | 178 | * @param charset The charset to be used. Will be deprecated by QT3 |
180 | */ | 179 | */ |
181 | bool OFontSelector::setSelectedFont ( const QString &familyStr, const QString &styleStr, int sizeVal, const QString & charset ) | 180 | bool OFontSelector::setSelectedFont ( const QString &familyStr, const QString &styleStr, int sizeVal, const QString & charset ) |
182 | { | 181 | { |
183 | QString sizeStr = QString::number ( sizeVal ); | 182 | QString sizeStr = QString::number ( sizeVal ); |
184 | 183 | ||
185 | QListBoxItem *family = d-> m_font_family_list-> findItem ( familyStr ); | 184 | QListBoxItem *family = d-> m_font_family_list-> findItem ( familyStr ); |
186 | if ( !family ) | 185 | if ( !family ) |
187 | family = d-> m_font_family_list-> findItem ( "Helvetica" ); | 186 | family = d-> m_font_family_list-> findItem ( "Helvetica" ); |
188 | if ( !family ) | 187 | if ( !family ) |
189 | family = d-> m_font_family_list-> firstItem ( ); | 188 | family = d-> m_font_family_list-> firstItem ( ); |
190 | d-> m_font_family_list-> setCurrentItem ( family ); | 189 | d-> m_font_family_list-> setCurrentItem ( family ); |
191 | fontFamilyClicked ( d-> m_font_family_list-> index ( family )); | 190 | fontFamilyClicked ( d-> m_font_family_list-> index ( family )); |
192 | 191 | ||
193 | int style = findItemCB ( d-> m_font_style_list, styleStr ); | 192 | int style = findItemCB ( d-> m_font_style_list, styleStr ); |
194 | if ( style < 0 ) | 193 | if ( style < 0 ) |
195 | style = findItemCB ( d-> m_font_style_list, "Regular" ); | 194 | style = findItemCB ( d-> m_font_style_list, "Regular" ); |
196 | if ( style < 0 && d-> m_font_style_list-> count ( ) > 0 ) | 195 | if ( style < 0 && d-> m_font_style_list-> count ( ) > 0 ) |
197 | style = 0; | 196 | style = 0; |
198 | d-> m_font_style_list-> setCurrentItem ( style ); | 197 | d-> m_font_style_list-> setCurrentItem ( style ); |
199 | fontStyleClicked ( style ); | 198 | fontStyleClicked ( style ); |
200 | 199 | ||
201 | int size = findItemCB ( d-> m_font_size_list, sizeStr ); | 200 | int size = findItemCB ( d-> m_font_size_list, sizeStr ); |
202 | if ( size < 0 ) | 201 | if ( size < 0 ) |
203 | size = findItemCB ( d-> m_font_size_list, "10" ); | 202 | size = findItemCB ( d-> m_font_size_list, "10" ); |
204 | if ( size < 0 && d-> m_font_size_list-> count ( ) > 0 ) | 203 | if ( size < 0 && d-> m_font_size_list-> count ( ) > 0 ) |
205 | size = 0; | 204 | size = 0; |
206 | d-> m_font_size_list-> setCurrentItem ( size ); | 205 | d-> m_font_size_list-> setCurrentItem ( size ); |
207 | fontSizeClicked ( size ); | 206 | fontSizeClicked ( size ); |
208 | 207 | ||
209 | return (( family ) && ( style >= 0 ) && ( size >= 0 )); | 208 | return (( family ) && ( style >= 0 ) && ( size >= 0 )); |
210 | } | 209 | } |
211 | 210 | ||
212 | /** | 211 | /** |
213 | * This method returns the name, style and size of the currently selected | 212 | * This method returns the name, style and size of the currently selected |
214 | * font or false if no font is selected | 213 | * font or false if no font is selected |
215 | * @param family The font family will be written there | 214 | * @param family The font family will be written there |
216 | * @param style The style will be written there | 215 | * @param style The style will be written there |
217 | * @param size The size will be written there | 216 | * @param size The size will be written there |
218 | * @return success or failure | 217 | * @return success or failure |
219 | */ | 218 | */ |
220 | bool OFontSelector::selectedFont ( QString &family, QString &style, int &size ) | 219 | bool OFontSelector::selectedFont ( QString &family, QString &style, int &size ) |
221 | { | 220 | { |
222 | QString dummy; | 221 | QString dummy; |
223 | return selectedFont ( family, style, size, dummy ); | 222 | return selectedFont ( family, style, size, dummy ); |
224 | } | 223 | } |
225 | 224 | ||
diff --git a/libopie/oprocctrl.cpp b/libopie/oprocctrl.cpp index e7db622..df8da1e 100644 --- a/libopie/oprocctrl.cpp +++ b/libopie/oprocctrl.cpp | |||
@@ -1,234 +1,233 @@ | |||
1 | /* This file is part of the KDE libraries | 1 | /* This file is part of the KDE libraries |
2 | Copyright (C) 1997 Christian Czezakte (e9025461@student.tuwien.ac.at) | 2 | Copyright (C) 1997 Christian Czezakte (e9025461@student.tuwien.ac.at) |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Library General Public | 5 | modify it under the terms of the GNU Library General Public |
6 | License as published by the Free Software Foundation; either | 6 | License as published by the Free Software Foundation; either |
7 | version 2 of the License, or (at your option) any later version. | 7 | version 2 of the License, or (at your option) any later version. |
8 | 8 | ||
9 | This library is distributed in the hope that it will be useful, | 9 | This library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Library General Public License for more details. | 12 | Library General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU Library General Public License | 14 | You should have received a copy of the GNU Library General Public License |
15 | along with this library; see the file COPYING.LIB. If not, write to | 15 | along with this library; see the file COPYING.LIB. If not, write to |
16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
17 | Boston, MA 02111-1307, USA. | 17 | Boston, MA 02111-1307, USA. |
18 | */ | 18 | */ |
19 | // | 19 | // |
20 | // KPROCESSCONTROLLER -- A helper class for KProcess | 20 | // KPROCESSCONTROLLER -- A helper class for KProcess |
21 | // | 21 | // |
22 | // version 0.3.1, Jan, 8th 1997 | 22 | // version 0.3.1, Jan, 8th 1997 |
23 | // | 23 | // |
24 | // (C) Christian Czezatke | 24 | // (C) Christian Czezatke |
25 | // e9025461@student.tuwien.ac.at | 25 | // e9025461@student.tuwien.ac.at |
26 | // Ported by Holger Freyther | 26 | // Ported by Holger Freyther |
27 | // | 27 | // |
28 | 28 | ||
29 | //#include <config.h> | 29 | //#include <config.h> |
30 | 30 | ||
31 | #include <sys/types.h> | 31 | #include <sys/types.h> |
32 | #include <sys/socket.h> | 32 | #include <sys/socket.h> |
33 | 33 | ||
34 | #include <errno.h> | 34 | #include <errno.h> |
35 | #include <fcntl.h> | 35 | #include <fcntl.h> |
36 | #include <stdio.h> | 36 | #include <stdio.h> |
37 | #include <string.h> | 37 | #include <string.h> |
38 | #include <unistd.h> | 38 | #include <unistd.h> |
39 | #include <assert.h> | 39 | #include <assert.h> |
40 | 40 | ||
41 | #include <qsocketnotifier.h> | 41 | #include <qsocketnotifier.h> |
42 | #include "oprocess.h" | ||
43 | #include "oprocctrl.h" | 42 | #include "oprocctrl.h" |
44 | 43 | ||
45 | OProcessController *OProcessController::theOProcessController = 0; | 44 | OProcessController *OProcessController::theOProcessController = 0; |
46 | 45 | ||
47 | struct sigaction OProcessController::oldChildHandlerData; | 46 | struct sigaction OProcessController::oldChildHandlerData; |
48 | bool OProcessController::handlerSet = false; | 47 | bool OProcessController::handlerSet = false; |
49 | 48 | ||
50 | OProcessController::OProcessController() | 49 | OProcessController::OProcessController() |
51 | { | 50 | { |
52 | assert( theOProcessController == 0 ); | 51 | assert( theOProcessController == 0 ); |
53 | 52 | ||
54 | if (0 > pipe(fd)) | 53 | if (0 > pipe(fd)) |
55 | printf(strerror(errno)); | 54 | printf(strerror(errno)); |
56 | 55 | ||
57 | notifier = new QSocketNotifier(fd[0], QSocketNotifier::Read); | 56 | notifier = new QSocketNotifier(fd[0], QSocketNotifier::Read); |
58 | notifier->setEnabled(true); | 57 | notifier->setEnabled(true); |
59 | QObject::connect(notifier, SIGNAL(activated(int)), | 58 | QObject::connect(notifier, SIGNAL(activated(int)), |
60 | this, SLOT(slotDoHousekeeping(int))); | 59 | this, SLOT(slotDoHousekeeping(int))); |
61 | connect( &delayedChildrenCleanupTimer, SIGNAL( timeout()), | 60 | connect( &delayedChildrenCleanupTimer, SIGNAL( timeout()), |
62 | SLOT( delayedChildrenCleanup())); | 61 | SLOT( delayedChildrenCleanup())); |
63 | 62 | ||
64 | theOProcessController = this; | 63 | theOProcessController = this; |
65 | 64 | ||
66 | setupHandlers(); | 65 | setupHandlers(); |
67 | } | 66 | } |
68 | 67 | ||
69 | 68 | ||
70 | void OProcessController::setupHandlers() | 69 | void OProcessController::setupHandlers() |
71 | { | 70 | { |
72 | if( handlerSet ) | 71 | if( handlerSet ) |
73 | return; | 72 | return; |
74 | struct sigaction act; | 73 | struct sigaction act; |
75 | act.sa_handler=theSigCHLDHandler; | 74 | act.sa_handler=theSigCHLDHandler; |
76 | sigemptyset(&(act.sa_mask)); | 75 | sigemptyset(&(act.sa_mask)); |
77 | sigaddset(&(act.sa_mask), SIGCHLD); | 76 | sigaddset(&(act.sa_mask), SIGCHLD); |
78 | // Make sure we don't block this signal. gdb tends to do that :-( | 77 | // Make sure we don't block this signal. gdb tends to do that :-( |
79 | sigprocmask(SIG_UNBLOCK, &(act.sa_mask), 0); | 78 | sigprocmask(SIG_UNBLOCK, &(act.sa_mask), 0); |
80 | 79 | ||
81 | act.sa_flags = SA_NOCLDSTOP; | 80 | act.sa_flags = SA_NOCLDSTOP; |
82 | 81 | ||
83 | // CC: take care of SunOS which automatically restarts interrupted system | 82 | // CC: take care of SunOS which automatically restarts interrupted system |
84 | // calls (and thus does not have SA_RESTART) | 83 | // calls (and thus does not have SA_RESTART) |
85 | 84 | ||
86 | #ifdef SA_RESTART | 85 | #ifdef SA_RESTART |
87 | act.sa_flags |= SA_RESTART; | 86 | act.sa_flags |= SA_RESTART; |
88 | #endif | 87 | #endif |
89 | 88 | ||
90 | sigaction( SIGCHLD, &act, &oldChildHandlerData ); | 89 | sigaction( SIGCHLD, &act, &oldChildHandlerData ); |
91 | 90 | ||
92 | act.sa_handler=SIG_IGN; | 91 | act.sa_handler=SIG_IGN; |
93 | sigemptyset(&(act.sa_mask)); | 92 | sigemptyset(&(act.sa_mask)); |
94 | sigaddset(&(act.sa_mask), SIGPIPE); | 93 | sigaddset(&(act.sa_mask), SIGPIPE); |
95 | act.sa_flags = 0; | 94 | act.sa_flags = 0; |
96 | sigaction( SIGPIPE, &act, 0L); | 95 | sigaction( SIGPIPE, &act, 0L); |
97 | handlerSet = true; | 96 | handlerSet = true; |
98 | } | 97 | } |
99 | 98 | ||
100 | void OProcessController::resetHandlers() | 99 | void OProcessController::resetHandlers() |
101 | { | 100 | { |
102 | if( !handlerSet ) | 101 | if( !handlerSet ) |
103 | return; | 102 | return; |
104 | sigaction( SIGCHLD, &oldChildHandlerData, 0 ); | 103 | sigaction( SIGCHLD, &oldChildHandlerData, 0 ); |
105 | // there should be no problem with SIGPIPE staying SIG_IGN | 104 | // there should be no problem with SIGPIPE staying SIG_IGN |
106 | handlerSet = false; | 105 | handlerSet = false; |
107 | } | 106 | } |
108 | 107 | ||
109 | // block SIGCHLD handler, because it accesses processList | 108 | // block SIGCHLD handler, because it accesses processList |
110 | void OProcessController::addOProcess( OProcess* p ) | 109 | void OProcessController::addOProcess( OProcess* p ) |
111 | { | 110 | { |
112 | sigset_t newset, oldset; | 111 | sigset_t newset, oldset; |
113 | sigemptyset( &newset ); | 112 | sigemptyset( &newset ); |
114 | sigaddset( &newset, SIGCHLD ); | 113 | sigaddset( &newset, SIGCHLD ); |
115 | sigprocmask( SIG_BLOCK, &newset, &oldset ); | 114 | sigprocmask( SIG_BLOCK, &newset, &oldset ); |
116 | processList.append( p ); | 115 | processList.append( p ); |
117 | sigprocmask( SIG_SETMASK, &oldset, 0 ); | 116 | sigprocmask( SIG_SETMASK, &oldset, 0 ); |
118 | } | 117 | } |
119 | 118 | ||
120 | void OProcessController::removeOProcess( OProcess* p ) | 119 | void OProcessController::removeOProcess( OProcess* p ) |
121 | { | 120 | { |
122 | sigset_t newset, oldset; | 121 | sigset_t newset, oldset; |
123 | sigemptyset( &newset ); | 122 | sigemptyset( &newset ); |
124 | sigaddset( &newset, SIGCHLD ); | 123 | sigaddset( &newset, SIGCHLD ); |
125 | sigprocmask( SIG_BLOCK, &newset, &oldset ); | 124 | sigprocmask( SIG_BLOCK, &newset, &oldset ); |
126 | processList.remove( p ); | 125 | processList.remove( p ); |
127 | sigprocmask( SIG_SETMASK, &oldset, 0 ); | 126 | sigprocmask( SIG_SETMASK, &oldset, 0 ); |
128 | } | 127 | } |
129 | 128 | ||
130 | //using a struct which contains both the pid and the status makes it easier to write | 129 | //using a struct which contains both the pid and the status makes it easier to write |
131 | //and read the data into the pipe | 130 | //and read the data into the pipe |
132 | //especially this solves a problem which appeared on my box where slotDoHouseKeeping() received | 131 | //especially this solves a problem which appeared on my box where slotDoHouseKeeping() received |
133 | //only 4 bytes (with some debug output around the write()'s it received all 8 bytes) | 132 | //only 4 bytes (with some debug output around the write()'s it received all 8 bytes) |
134 | //don't know why this happened, but when writing all 8 bytes at once it works here, aleXXX | 133 | //don't know why this happened, but when writing all 8 bytes at once it works here, aleXXX |
135 | struct waitdata | 134 | struct waitdata |
136 | { | 135 | { |
137 | pid_t pid; | 136 | pid_t pid; |
138 | int status; | 137 | int status; |
139 | }; | 138 | }; |
140 | 139 | ||
141 | void OProcessController::theSigCHLDHandler(int arg) | 140 | void OProcessController::theSigCHLDHandler(int arg) |
142 | { | 141 | { |
143 | struct waitdata wd; | 142 | struct waitdata wd; |
144 | // int status; | 143 | // int status; |
145 | // pid_t this_pid; | 144 | // pid_t this_pid; |
146 | int saved_errno; | 145 | int saved_errno; |
147 | 146 | ||
148 | saved_errno = errno; | 147 | saved_errno = errno; |
149 | // since waitpid and write change errno, we have to save it and restore it | 148 | // since waitpid and write change errno, we have to save it and restore it |
150 | // (Richard Stevens, Advanced programming in the Unix Environment) | 149 | // (Richard Stevens, Advanced programming in the Unix Environment) |
151 | 150 | ||
152 | bool found = false; | 151 | bool found = false; |
153 | if( theOProcessController != 0 ) { | 152 | if( theOProcessController != 0 ) { |
154 | // iterating the list doesn't perform any system call | 153 | // iterating the list doesn't perform any system call |
155 | for( QValueList<OProcess*>::ConstIterator it = theOProcessController->processList.begin(); | 154 | for( QValueList<OProcess*>::ConstIterator it = theOProcessController->processList.begin(); |
156 | it != theOProcessController->processList.end(); | 155 | it != theOProcessController->processList.end(); |
157 | ++it ) | 156 | ++it ) |
158 | { | 157 | { |
159 | if( !(*it)->isRunning()) | 158 | if( !(*it)->isRunning()) |
160 | continue; | 159 | continue; |
161 | wd.pid = waitpid( (*it)->pid(), &wd.status, WNOHANG ); | 160 | wd.pid = waitpid( (*it)->pid(), &wd.status, WNOHANG ); |
162 | if ( wd.pid > 0 ) { | 161 | if ( wd.pid > 0 ) { |
163 | ::write(theOProcessController->fd[1], &wd, sizeof(wd)); | 162 | ::write(theOProcessController->fd[1], &wd, sizeof(wd)); |
164 | found = true; | 163 | found = true; |
165 | } | 164 | } |
166 | } | 165 | } |
167 | } | 166 | } |
168 | if( !found && oldChildHandlerData.sa_handler != SIG_IGN | 167 | if( !found && oldChildHandlerData.sa_handler != SIG_IGN |
169 | && oldChildHandlerData.sa_handler != SIG_DFL ) | 168 | && oldChildHandlerData.sa_handler != SIG_DFL ) |
170 | oldChildHandlerData.sa_handler( arg ); // call the old handler | 169 | oldChildHandlerData.sa_handler( arg ); // call the old handler |
171 | // handle the rest | 170 | // handle the rest |
172 | if( theOProcessController != 0 ) { | 171 | if( theOProcessController != 0 ) { |
173 | static const struct waitdata dwd = { 0, 0 }; // delayed waitpid() | 172 | static const struct waitdata dwd = { 0, 0 }; // delayed waitpid() |
174 | ::write(theOProcessController->fd[1], &dwd, sizeof(dwd)); | 173 | ::write(theOProcessController->fd[1], &dwd, sizeof(dwd)); |
175 | } else { | 174 | } else { |
176 | int dummy; | 175 | int dummy; |
177 | while( waitpid( -1, &dummy, WNOHANG ) > 0 ) | 176 | while( waitpid( -1, &dummy, WNOHANG ) > 0 ) |
178 | ; | 177 | ; |
179 | } | 178 | } |
180 | 179 | ||
181 | errno = saved_errno; | 180 | errno = saved_errno; |
182 | } | 181 | } |
183 | 182 | ||
184 | 183 | ||
185 | 184 | ||
186 | void OProcessController::slotDoHousekeeping(int ) | 185 | void OProcessController::slotDoHousekeeping(int ) |
187 | { | 186 | { |
188 | unsigned int bytes_read = 0; | 187 | unsigned int bytes_read = 0; |
189 | unsigned int errcnt=0; | 188 | unsigned int errcnt=0; |
190 | // read pid and status from the pipe. | 189 | // read pid and status from the pipe. |
191 | struct waitdata wd; | 190 | struct waitdata wd; |
192 | while ((bytes_read < sizeof(wd)) && (errcnt < 50)) { | 191 | while ((bytes_read < sizeof(wd)) && (errcnt < 50)) { |
193 | int r = ::read(fd[0], ((char *)&wd) + bytes_read, sizeof(wd) - bytes_read); | 192 | int r = ::read(fd[0], ((char *)&wd) + bytes_read, sizeof(wd) - bytes_read); |
194 | if (r > 0) bytes_read += r; | 193 | if (r > 0) bytes_read += r; |
195 | else if (r < 0) errcnt++; | 194 | else if (r < 0) errcnt++; |
196 | } | 195 | } |
197 | if (errcnt >= 50) { | 196 | if (errcnt >= 50) { |
198 | fprintf(stderr, | 197 | fprintf(stderr, |
199 | "Error: Max. error count for pipe read " | 198 | "Error: Max. error count for pipe read " |
200 | "exceeded in OProcessController::slotDoHousekeeping\n"); | 199 | "exceeded in OProcessController::slotDoHousekeeping\n"); |
201 | return; // it makes no sense to continue here! | 200 | return; // it makes no sense to continue here! |
202 | } | 201 | } |
203 | if (bytes_read != sizeof(wd)) { | 202 | if (bytes_read != sizeof(wd)) { |
204 | fprintf(stderr, | 203 | fprintf(stderr, |
205 | "Error: Could not read info from signal handler %d <> %d!\n", | 204 | "Error: Could not read info from signal handler %d <> %d!\n", |
206 | bytes_read, sizeof(wd)); | 205 | bytes_read, sizeof(wd)); |
207 | return; // it makes no sense to continue here! | 206 | return; // it makes no sense to continue here! |
208 | } | 207 | } |
209 | if (wd.pid==0) { // special case, see delayedChildrenCleanup() | 208 | if (wd.pid==0) { // special case, see delayedChildrenCleanup() |
210 | delayedChildrenCleanupTimer.start( 1000, true ); | 209 | delayedChildrenCleanupTimer.start( 1000, true ); |
211 | return; | 210 | return; |
212 | } | 211 | } |
213 | 212 | ||
214 | for( QValueList<OProcess*>::ConstIterator it = processList.begin(); | 213 | for( QValueList<OProcess*>::ConstIterator it = processList.begin(); |
215 | it != processList.end(); | 214 | it != processList.end(); |
216 | ++it ) { | 215 | ++it ) { |
217 | OProcess* proc = *it; | 216 | OProcess* proc = *it; |
218 | if (proc->pid() == wd.pid) { | 217 | if (proc->pid() == wd.pid) { |
219 | // process has exited, so do emit the respective events | 218 | // process has exited, so do emit the respective events |
220 | if (proc->run_mode == OProcess::Block) { | 219 | if (proc->run_mode == OProcess::Block) { |
221 | // If the reads are done blocking then set the status in proc | 220 | // If the reads are done blocking then set the status in proc |
222 | // but do nothing else because OProcess will perform the other | 221 | // but do nothing else because OProcess will perform the other |
223 | // actions of processHasExited. | 222 | // actions of processHasExited. |
224 | proc->status = wd.status; | 223 | proc->status = wd.status; |
225 | proc->runs = false; | 224 | proc->runs = false; |
226 | } else { | 225 | } else { |
227 | proc->processHasExited(wd.status); | 226 | proc->processHasExited(wd.status); |
228 | } | 227 | } |
229 | return; | 228 | return; |
230 | } | 229 | } |
231 | } | 230 | } |
232 | } | 231 | } |
233 | 232 | ||
234 | // this is needed e.g. for popen(), which calls waitpid() checking | 233 | // this is needed e.g. for popen(), which calls waitpid() checking |
diff --git a/libopie/oprocess.cpp b/libopie/oprocess.cpp index 5db2b6c..c19881a 100644 --- a/libopie/oprocess.cpp +++ b/libopie/oprocess.cpp | |||
@@ -1,248 +1,247 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | $Id$ | 3 | $Id$ |
4 | 4 | ||
5 | This file is part of the KDE libraries | 5 | This file is part of the KDE libraries |
6 | Copyright (C) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) | 6 | Copyright (C) 1997 Christian Czezatke (e9025461@student.tuwien.ac.at) |
7 | 7 | ||
8 | This library is free software; you can redistribute it and/or | 8 | This library is free software; you can redistribute it and/or |
9 | modify it under the terms of the GNU Library General Public | 9 | modify it under the terms of the GNU Library General Public |
10 | License as published by the Free Software Foundation; either | 10 | License as published by the Free Software Foundation; either |
11 | version 2 of the License, or (at your option) any later version. | 11 | version 2 of the License, or (at your option) any later version. |
12 | 12 | ||
13 | This library is distributed in the hope that it will be useful, | 13 | This library is distributed in the hope that it will be useful, |
14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 | Library General Public License for more details. | 16 | Library General Public License for more details. |
17 | 17 | ||
18 | You should have received a copy of the GNU Library General Public License | 18 | You should have received a copy of the GNU Library General Public License |
19 | along with this library; see the file COPYING.LIB. If not, write to | 19 | along with this library; see the file COPYING.LIB. If not, write to |
20 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 20 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
21 | Boston, MA 02111-1307, USA. | 21 | Boston, MA 02111-1307, USA. |
22 | 22 | ||
23 | */ | 23 | */ |
24 | 24 | ||
25 | 25 | ||
26 | // | 26 | // |
27 | // KPROCESS -- A class for handling child processes in KDE without | 27 | // KPROCESS -- A class for handling child processes in KDE without |
28 | // having to take care of Un*x specific implementation details | 28 | // having to take care of Un*x specific implementation details |
29 | // | 29 | // |
30 | // version 0.3.1, Jan 8th 1998 | 30 | // version 0.3.1, Jan 8th 1998 |
31 | // | 31 | // |
32 | // (C) Christian Czezatke | 32 | // (C) Christian Czezatke |
33 | // e9025461@student.tuwien.ac.at | 33 | // e9025461@student.tuwien.ac.at |
34 | // | 34 | // |
35 | // Changes: | 35 | // Changes: |
36 | // | 36 | // |
37 | // March 2nd, 1998: Changed parameter list for KShellProcess: | 37 | // March 2nd, 1998: Changed parameter list for KShellProcess: |
38 | // Arguments are now placed in a single string so that | 38 | // Arguments are now placed in a single string so that |
39 | // <shell> -c <commandstring> is passed to the shell | 39 | // <shell> -c <commandstring> is passed to the shell |
40 | // to make the use of "operator<<" consistent with KProcess | 40 | // to make the use of "operator<<" consistent with KProcess |
41 | // | 41 | // |
42 | // | 42 | // |
43 | // Ported by Holger Freyther | 43 | // Ported by Holger Freyther |
44 | // <zekce> Harlekin: oprocess and say it was ported to Qt by the Opie developers an Qt 2 | 44 | // <zekce> Harlekin: oprocess and say it was ported to Qt by the Opie developers an Qt 2 |
45 | 45 | ||
46 | 46 | ||
47 | 47 | ||
48 | #include "oprocess.h" | 48 | #include "oprocess.h" |
49 | #define _MAY_INCLUDE_KPROCESSCONTROLLER_ | 49 | #define _MAY_INCLUDE_KPROCESSCONTROLLER_ |
50 | #include "oprocctrl.h" | 50 | #include "oprocctrl.h" |
51 | 51 | ||
52 | //#include <config.h> | 52 | //#include <config.h> |
53 | 53 | ||
54 | #include <qfile.h> | 54 | #include <qfile.h> |
55 | #include <qsocketnotifier.h> | 55 | #include <qsocketnotifier.h> |
56 | #include <qregexp.h> | ||
57 | 56 | ||
58 | #include <sys/time.h> | 57 | #include <sys/time.h> |
59 | #include <sys/types.h> | 58 | #include <sys/types.h> |
60 | #include <sys/stat.h> | 59 | #include <sys/stat.h> |
61 | #include <sys/socket.h> | 60 | #include <sys/socket.h> |
62 | 61 | ||
63 | #include <errno.h> | 62 | #include <errno.h> |
64 | #include <fcntl.h> | 63 | #include <fcntl.h> |
65 | #include <stdlib.h> | 64 | #include <stdlib.h> |
66 | #include <signal.h> | 65 | #include <signal.h> |
67 | #include <stdio.h> | 66 | #include <stdio.h> |
68 | #include <string.h> | 67 | #include <string.h> |
69 | #include <unistd.h> | 68 | #include <unistd.h> |
70 | #ifdef HAVE_SYS_SELECT_H | 69 | #ifdef HAVE_SYS_SELECT_H |
71 | #include <sys/select.h> | 70 | #include <sys/select.h> |
72 | #endif | 71 | #endif |
73 | #ifdef HAVE_INITGROUPS | 72 | #ifdef HAVE_INITGROUPS |
74 | #include <grp.h> | 73 | #include <grp.h> |
75 | #endif | 74 | #endif |
76 | #include <pwd.h> | 75 | #include <pwd.h> |
77 | 76 | ||
78 | #include <qapplication.h> | 77 | #include <qapplication.h> |
79 | #include <qmap.h> | 78 | #include <qmap.h> |
80 | //#include <kdebug.h> | 79 | //#include <kdebug.h> |
81 | 80 | ||
82 | ///////////////////////////// | 81 | ///////////////////////////// |
83 | // public member functions // | 82 | // public member functions // |
84 | ///////////////////////////// | 83 | ///////////////////////////// |
85 | 84 | ||
86 | class OProcessPrivate { | 85 | class OProcessPrivate { |
87 | public: | 86 | public: |
88 | OProcessPrivate() : useShell(false) { } | 87 | OProcessPrivate() : useShell(false) { } |
89 | 88 | ||
90 | bool useShell; | 89 | bool useShell; |
91 | QMap<QString,QString> env; | 90 | QMap<QString,QString> env; |
92 | QString wd; | 91 | QString wd; |
93 | QCString shell; | 92 | QCString shell; |
94 | }; | 93 | }; |
95 | 94 | ||
96 | 95 | ||
97 | OProcess::OProcess(QObject *parent, const char *name) | 96 | OProcess::OProcess(QObject *parent, const char *name) |
98 | : QObject(parent, name) | 97 | : QObject(parent, name) |
99 | { | 98 | { |
100 | init ( ); | 99 | init ( ); |
101 | } | 100 | } |
102 | 101 | ||
103 | OProcess::OProcess(const QString &arg0, QObject *parent, const char *name) | 102 | OProcess::OProcess(const QString &arg0, QObject *parent, const char *name) |
104 | : QObject(parent, name) | 103 | : QObject(parent, name) |
105 | { | 104 | { |
106 | init ( ); | 105 | init ( ); |
107 | *this << arg0; | 106 | *this << arg0; |
108 | } | 107 | } |
109 | 108 | ||
110 | OProcess::OProcess(const QStringList &args, QObject *parent, const char *name) | 109 | OProcess::OProcess(const QStringList &args, QObject *parent, const char *name) |
111 | : QObject(parent, name) | 110 | : QObject(parent, name) |
112 | { | 111 | { |
113 | init ( ); | 112 | init ( ); |
114 | *this << args; | 113 | *this << args; |
115 | } | 114 | } |
116 | 115 | ||
117 | void OProcess::init ( ) | 116 | void OProcess::init ( ) |
118 | { | 117 | { |
119 | run_mode = NotifyOnExit; | 118 | run_mode = NotifyOnExit; |
120 | runs = false; | 119 | runs = false; |
121 | pid_ = 0; | 120 | pid_ = 0; |
122 | status = 0; | 121 | status = 0; |
123 | keepPrivs = false; | 122 | keepPrivs = false; |
124 | innot = 0; | 123 | innot = 0; |
125 | outnot = 0; | 124 | outnot = 0; |
126 | errnot = 0; | 125 | errnot = 0; |
127 | communication = NoCommunication; | 126 | communication = NoCommunication; |
128 | input_data = 0; | 127 | input_data = 0; |
129 | input_sent = 0; | 128 | input_sent = 0; |
130 | input_total = 0; | 129 | input_total = 0; |
131 | d = 0; | 130 | d = 0; |
132 | 131 | ||
133 | if (0 == OProcessController::theOProcessController) { | 132 | if (0 == OProcessController::theOProcessController) { |
134 | (void) new OProcessController(); | 133 | (void) new OProcessController(); |
135 | CHECK_PTR(OProcessController::theOProcessController); | 134 | CHECK_PTR(OProcessController::theOProcessController); |
136 | } | 135 | } |
137 | 136 | ||
138 | OProcessController::theOProcessController->addOProcess(this); | 137 | OProcessController::theOProcessController->addOProcess(this); |
139 | out[0] = out[1] = -1; | 138 | out[0] = out[1] = -1; |
140 | in[0] = in[1] = -1; | 139 | in[0] = in[1] = -1; |
141 | err[0] = err[1] = -1; | 140 | err[0] = err[1] = -1; |
142 | } | 141 | } |
143 | 142 | ||
144 | void | 143 | void |
145 | OProcess::setEnvironment(const QString &name, const QString &value) | 144 | OProcess::setEnvironment(const QString &name, const QString &value) |
146 | { | 145 | { |
147 | if (!d) | 146 | if (!d) |
148 | d = new OProcessPrivate; | 147 | d = new OProcessPrivate; |
149 | d->env.insert(name, value); | 148 | d->env.insert(name, value); |
150 | } | 149 | } |
151 | 150 | ||
152 | void | 151 | void |
153 | OProcess::setWorkingDirectory(const QString &dir) | 152 | OProcess::setWorkingDirectory(const QString &dir) |
154 | { | 153 | { |
155 | if (!d) | 154 | if (!d) |
156 | d = new OProcessPrivate; | 155 | d = new OProcessPrivate; |
157 | d->wd = dir; | 156 | d->wd = dir; |
158 | } | 157 | } |
159 | 158 | ||
160 | void | 159 | void |
161 | OProcess::setupEnvironment() | 160 | OProcess::setupEnvironment() |
162 | { | 161 | { |
163 | if (d) | 162 | if (d) |
164 | { | 163 | { |
165 | QMap<QString,QString>::Iterator it; | 164 | QMap<QString,QString>::Iterator it; |
166 | for(it = d->env.begin(); it != d->env.end(); ++it) | 165 | for(it = d->env.begin(); it != d->env.end(); ++it) |
167 | setenv(QFile::encodeName(it.key()).data(), | 166 | setenv(QFile::encodeName(it.key()).data(), |
168 | QFile::encodeName(it.data()).data(), 1); | 167 | QFile::encodeName(it.data()).data(), 1); |
169 | if (!d->wd.isEmpty()) | 168 | if (!d->wd.isEmpty()) |
170 | chdir(QFile::encodeName(d->wd).data()); | 169 | chdir(QFile::encodeName(d->wd).data()); |
171 | } | 170 | } |
172 | } | 171 | } |
173 | 172 | ||
174 | void | 173 | void |
175 | OProcess::setRunPrivileged(bool keepPrivileges) | 174 | OProcess::setRunPrivileged(bool keepPrivileges) |
176 | { | 175 | { |
177 | keepPrivs = keepPrivileges; | 176 | keepPrivs = keepPrivileges; |
178 | } | 177 | } |
179 | 178 | ||
180 | bool | 179 | bool |
181 | OProcess::runPrivileged() const | 180 | OProcess::runPrivileged() const |
182 | { | 181 | { |
183 | return keepPrivs; | 182 | return keepPrivs; |
184 | } | 183 | } |
185 | 184 | ||
186 | 185 | ||
187 | OProcess::~OProcess() | 186 | OProcess::~OProcess() |
188 | { | 187 | { |
189 | // destroying the OProcess instance sends a SIGKILL to the | 188 | // destroying the OProcess instance sends a SIGKILL to the |
190 | // child process (if it is running) after removing it from the | 189 | // child process (if it is running) after removing it from the |
191 | // list of valid processes (if the process is not started as | 190 | // list of valid processes (if the process is not started as |
192 | // "DontCare") | 191 | // "DontCare") |
193 | 192 | ||
194 | OProcessController::theOProcessController->removeOProcess(this); | 193 | OProcessController::theOProcessController->removeOProcess(this); |
195 | // this must happen before we kill the child | 194 | // this must happen before we kill the child |
196 | // TODO: block the signal while removing the current process from the process list | 195 | // TODO: block the signal while removing the current process from the process list |
197 | 196 | ||
198 | if (runs && (run_mode != DontCare)) | 197 | if (runs && (run_mode != DontCare)) |
199 | kill(SIGKILL); | 198 | kill(SIGKILL); |
200 | 199 | ||
201 | // Clean up open fd's and socket notifiers. | 200 | // Clean up open fd's and socket notifiers. |
202 | closeStdin(); | 201 | closeStdin(); |
203 | closeStdout(); | 202 | closeStdout(); |
204 | closeStderr(); | 203 | closeStderr(); |
205 | 204 | ||
206 | // TODO: restore SIGCHLD and SIGPIPE handler if this is the last OProcess | 205 | // TODO: restore SIGCHLD and SIGPIPE handler if this is the last OProcess |
207 | delete d; | 206 | delete d; |
208 | } | 207 | } |
209 | 208 | ||
210 | void OProcess::detach() | 209 | void OProcess::detach() |
211 | { | 210 | { |
212 | OProcessController::theOProcessController->removeOProcess(this); | 211 | OProcessController::theOProcessController->removeOProcess(this); |
213 | 212 | ||
214 | runs = false; | 213 | runs = false; |
215 | pid_ = 0; | 214 | pid_ = 0; |
216 | 215 | ||
217 | // Clean up open fd's and socket notifiers. | 216 | // Clean up open fd's and socket notifiers. |
218 | closeStdin(); | 217 | closeStdin(); |
219 | closeStdout(); | 218 | closeStdout(); |
220 | closeStderr(); | 219 | closeStderr(); |
221 | } | 220 | } |
222 | 221 | ||
223 | bool OProcess::setExecutable(const QString& proc) | 222 | bool OProcess::setExecutable(const QString& proc) |
224 | { | 223 | { |
225 | if (runs) return false; | 224 | if (runs) return false; |
226 | 225 | ||
227 | if (proc.isEmpty()) return false; | 226 | if (proc.isEmpty()) return false; |
228 | 227 | ||
229 | if (!arguments.isEmpty()) | 228 | if (!arguments.isEmpty()) |
230 | arguments.remove(arguments.begin()); | 229 | arguments.remove(arguments.begin()); |
231 | arguments.prepend(QFile::encodeName(proc)); | 230 | arguments.prepend(QFile::encodeName(proc)); |
232 | 231 | ||
233 | return true; | 232 | return true; |
234 | } | 233 | } |
235 | 234 | ||
236 | OProcess &OProcess::operator<<(const QStringList& args) | 235 | OProcess &OProcess::operator<<(const QStringList& args) |
237 | { | 236 | { |
238 | QStringList::ConstIterator it = args.begin(); | 237 | QStringList::ConstIterator it = args.begin(); |
239 | for ( ; it != args.end() ; ++it ) | 238 | for ( ; it != args.end() ; ++it ) |
240 | arguments.append(QFile::encodeName(*it)); | 239 | arguments.append(QFile::encodeName(*it)); |
241 | return *this; | 240 | return *this; |
242 | } | 241 | } |
243 | 242 | ||
244 | OProcess &OProcess::operator<<(const QCString& arg) | 243 | OProcess &OProcess::operator<<(const QCString& arg) |
245 | { | 244 | { |
246 | return operator<< (arg.data()); | 245 | return operator<< (arg.data()); |
247 | } | 246 | } |
248 | 247 | ||
diff --git a/libopie/orecurrancewidget.cpp b/libopie/orecurrancewidget.cpp index be8ec30..d81851e 100644 --- a/libopie/orecurrancewidget.cpp +++ b/libopie/orecurrancewidget.cpp | |||
@@ -1,198 +1,196 @@ | |||
1 | #include <qapplication.h> | 1 | #include <qapplication.h> |
2 | #include <qlabel.h> | 2 | #include <qlabel.h> |
3 | #include <qpopupmenu.h> | ||
4 | #include <qspinbox.h> | 3 | #include <qspinbox.h> |
5 | 4 | ||
6 | #include <qpe/timestring.h> | ||
7 | 5 | ||
8 | #include "orecurrancewidget.h" | 6 | #include "orecurrancewidget.h" |
9 | 7 | ||
10 | // Global Templates for use in setting up the repeat label... | 8 | // Global Templates for use in setting up the repeat label... |
11 | // the problem is these strings get initialized before QPEApplication can install the translator -zecke | 9 | // the problem is these strings get initialized before QPEApplication can install the translator -zecke |
12 | namespace { | 10 | namespace { |
13 | QString strDayTemplate; | 11 | QString strDayTemplate; |
14 | QString strYearTemplate; | 12 | QString strYearTemplate; |
15 | QString strMonthDateTemplate; | 13 | QString strMonthDateTemplate; |
16 | QString strMonthDayTemplate; | 14 | QString strMonthDayTemplate; |
17 | QString strWeekTemplate; | 15 | QString strWeekTemplate; |
18 | QString dayLabel[7]; | 16 | QString dayLabel[7]; |
19 | } | 17 | } |
20 | 18 | ||
21 | /* | 19 | /* |
22 | * static linkage to not polute the symbol table... | 20 | * static linkage to not polute the symbol table... |
23 | * The problem is that const and static linkage are resolved prior to installing a translator | 21 | * The problem is that const and static linkage are resolved prior to installing a translator |
24 | * leading to that the above strings are translted but to the original we delay the init of these strings... | 22 | * leading to that the above strings are translted but to the original we delay the init of these strings... |
25 | * -zecke | 23 | * -zecke |
26 | */ | 24 | */ |
27 | static void fillStrings() { | 25 | static void fillStrings() { |
28 | strDayTemplate = QObject::tr("Every"); | 26 | strDayTemplate = QObject::tr("Every"); |
29 | strYearTemplate = QObject::tr("%1 %2 every "); | 27 | strYearTemplate = QObject::tr("%1 %2 every "); |
30 | strMonthDateTemplate = QObject::tr("The %1 every "); | 28 | strMonthDateTemplate = QObject::tr("The %1 every "); |
31 | strMonthDayTemplate = QObject::tr("The %1 %2 of every"); | 29 | strMonthDayTemplate = QObject::tr("The %1 %2 of every"); |
32 | strWeekTemplate = QObject::tr("Every "); | 30 | strWeekTemplate = QObject::tr("Every "); |
33 | dayLabel[0] = QObject::tr("Monday"); | 31 | dayLabel[0] = QObject::tr("Monday"); |
34 | dayLabel[1] = QObject::tr("Tuesday"); | 32 | dayLabel[1] = QObject::tr("Tuesday"); |
35 | dayLabel[2] = QObject::tr("Wednesday"); | 33 | dayLabel[2] = QObject::tr("Wednesday"); |
36 | dayLabel[3] = QObject::tr("Thursday"); | 34 | dayLabel[3] = QObject::tr("Thursday"); |
37 | dayLabel[4] = QObject::tr("Friday"); | 35 | dayLabel[4] = QObject::tr("Friday"); |
38 | dayLabel[5] = QObject::tr("Saturday"); | 36 | dayLabel[5] = QObject::tr("Saturday"); |
39 | dayLabel[6] = QObject::tr("Sunday"); | 37 | dayLabel[6] = QObject::tr("Sunday"); |
40 | } | 38 | } |
41 | 39 | ||
42 | static QString numberPlacing( int x );// return the proper word format for | 40 | static QString numberPlacing( int x );// return the proper word format for |
43 | // x (1st, 2nd, etc) | 41 | // x (1st, 2nd, etc) |
44 | static int week( const QDate &dt ); // what week in the month is dt? | 42 | static int week( const QDate &dt ); // what week in the month is dt? |
45 | 43 | ||
46 | /** | 44 | /** |
47 | * Constructs the Widget | 45 | * Constructs the Widget |
48 | * @param startOnMonday Does the week start on monday | 46 | * @param startOnMonday Does the week start on monday |
49 | * @param newStart The start date of the recurrence | 47 | * @param newStart The start date of the recurrence |
50 | * @param parent The parent widget | 48 | * @param parent The parent widget |
51 | * @param name the name of object | 49 | * @param name the name of object |
52 | * @param modal if the dialog should be modal | 50 | * @param modal if the dialog should be modal |
53 | * @param fl Additional window flags | 51 | * @param fl Additional window flags |
54 | */ | 52 | */ |
55 | ORecurranceWidget::ORecurranceWidget( bool startOnMonday, | 53 | ORecurranceWidget::ORecurranceWidget( bool startOnMonday, |
56 | const QDate& newStart, | 54 | const QDate& newStart, |
57 | QWidget* parent, | 55 | QWidget* parent, |
58 | const char* name, | 56 | const char* name, |
59 | bool modal, | 57 | bool modal, |
60 | WFlags fl ) | 58 | WFlags fl ) |
61 | : ORecurranceBase( parent, name, modal, fl ), | 59 | : ORecurranceBase( parent, name, modal, fl ), |
62 | start( newStart ), | 60 | start( newStart ), |
63 | currInterval( None ), | 61 | currInterval( None ), |
64 | startWeekOnMonday( startOnMonday ) | 62 | startWeekOnMonday( startOnMonday ) |
65 | { | 63 | { |
66 | if (strDayTemplate.isEmpty() ) | 64 | if (strDayTemplate.isEmpty() ) |
67 | fillStrings(); | 65 | fillStrings(); |
68 | 66 | ||
69 | init(); | 67 | init(); |
70 | fraType->setButton( currInterval ); | 68 | fraType->setButton( currInterval ); |
71 | chkNoEnd->setChecked( TRUE ); | 69 | chkNoEnd->setChecked( TRUE ); |
72 | setupNone(); | 70 | setupNone(); |
73 | } | 71 | } |
74 | 72 | ||
75 | /** | 73 | /** |
76 | * Different constructor | 74 | * Different constructor |
77 | * @param startOnMonday Does the week start on monday? | 75 | * @param startOnMonday Does the week start on monday? |
78 | * @param rp Already set ORecur object | 76 | * @param rp Already set ORecur object |
79 | * @param startDate The start date | 77 | * @param startDate The start date |
80 | * @param parent The parent widget | 78 | * @param parent The parent widget |
81 | * @param name The name of the object | 79 | * @param name The name of the object |
82 | * @param modal | 80 | * @param modal |
83 | * @param fl The flags for window | 81 | * @param fl The flags for window |
84 | */ | 82 | */ |
85 | ORecurranceWidget::ORecurranceWidget( bool startOnMonday, | 83 | ORecurranceWidget::ORecurranceWidget( bool startOnMonday, |
86 | const ORecur& rp, const QDate& startDate, | 84 | const ORecur& rp, const QDate& startDate, |
87 | QWidget* parent, const char* name, | 85 | QWidget* parent, const char* name, |
88 | bool modal, WFlags fl) | 86 | bool modal, WFlags fl) |
89 | : ORecurranceBase( parent, name, modal, fl ), | 87 | : ORecurranceBase( parent, name, modal, fl ), |
90 | start( startDate ), | 88 | start( startDate ), |
91 | end( rp.endDate() ), | 89 | end( rp.endDate() ), |
92 | startWeekOnMonday( startOnMonday ) | 90 | startWeekOnMonday( startOnMonday ) |
93 | { | 91 | { |
94 | if (strDayTemplate.isEmpty() ) | 92 | if (strDayTemplate.isEmpty() ) |
95 | fillStrings(); | 93 | fillStrings(); |
96 | // do some stuff with the repeat pattern | 94 | // do some stuff with the repeat pattern |
97 | init(); | 95 | init(); |
98 | setRecurrence( rp ); | 96 | setRecurrence( rp ); |
99 | } | 97 | } |
100 | 98 | ||
101 | ORecurranceWidget::~ORecurranceWidget() { | 99 | ORecurranceWidget::~ORecurranceWidget() { |
102 | } | 100 | } |
103 | 101 | ||
104 | /** | 102 | /** |
105 | * set the start date | 103 | * set the start date |
106 | * @param date the new start date | 104 | * @param date the new start date |
107 | */ | 105 | */ |
108 | void ORecurranceWidget::setStartDate( const QDate& date ) { | 106 | void ORecurranceWidget::setStartDate( const QDate& date ) { |
109 | setRecurrence( recurrence(), date ); | 107 | setRecurrence( recurrence(), date ); |
110 | } | 108 | } |
111 | /** | 109 | /** |
112 | * set the recurrence | 110 | * set the recurrence |
113 | * @param rp The ORecur object with the new recurrence rules | 111 | * @param rp The ORecur object with the new recurrence rules |
114 | */ | 112 | */ |
115 | void ORecurranceWidget::setRecurrence( const ORecur& rp ) { | 113 | void ORecurranceWidget::setRecurrence( const ORecur& rp ) { |
116 | setRecurrence( rp, start ); | 114 | setRecurrence( rp, start ); |
117 | } | 115 | } |
118 | 116 | ||
119 | /** | 117 | /** |
120 | * overloaded method taking ORecur and a new start date | 118 | * overloaded method taking ORecur and a new start date |
121 | * @param rp Recurrence rule | 119 | * @param rp Recurrence rule |
122 | * @param date The new start date | 120 | * @param date The new start date |
123 | */ | 121 | */ |
124 | void ORecurranceWidget::setRecurrence( const ORecur& rp, const QDate& date ) { | 122 | void ORecurranceWidget::setRecurrence( const ORecur& rp, const QDate& date ) { |
125 | start = date; | 123 | start = date; |
126 | end = rp.endDate(); | 124 | end = rp.endDate(); |
127 | switch ( rp.type() ) { | 125 | switch ( rp.type() ) { |
128 | default: | 126 | default: |
129 | case ORecur::NoRepeat: | 127 | case ORecur::NoRepeat: |
130 | currInterval = None; | 128 | currInterval = None; |
131 | setupNone(); | 129 | setupNone(); |
132 | break; | 130 | break; |
133 | case ORecur::Daily: | 131 | case ORecur::Daily: |
134 | currInterval = Day; | 132 | currInterval = Day; |
135 | setupDaily(); | 133 | setupDaily(); |
136 | break; | 134 | break; |
137 | case ORecur::Weekly: | 135 | case ORecur::Weekly: |
138 | currInterval = Week; | 136 | currInterval = Week; |
139 | setupWeekly(); | 137 | setupWeekly(); |
140 | int day, buttons; | 138 | int day, buttons; |
141 | for ( day = 0x01, buttons = 0; buttons < 7; | 139 | for ( day = 0x01, buttons = 0; buttons < 7; |
142 | day = day << 1, buttons++ ) { | 140 | day = day << 1, buttons++ ) { |
143 | if ( rp.days() & day ) { | 141 | if ( rp.days() & day ) { |
144 | if ( startWeekOnMonday ) | 142 | if ( startWeekOnMonday ) |
145 | fraExtra->setButton( buttons ); | 143 | fraExtra->setButton( buttons ); |
146 | else { | 144 | else { |
147 | if ( buttons == 7 ) | 145 | if ( buttons == 7 ) |
148 | fraExtra->setButton( 0 ); | 146 | fraExtra->setButton( 0 ); |
149 | else | 147 | else |
150 | fraExtra->setButton( buttons + 1 ); | 148 | fraExtra->setButton( buttons + 1 ); |
151 | } | 149 | } |
152 | } | 150 | } |
153 | } | 151 | } |
154 | slotWeekLabel(); | 152 | slotWeekLabel(); |
155 | break; | 153 | break; |
156 | case ORecur::MonthlyDay: | 154 | case ORecur::MonthlyDay: |
157 | currInterval = Month; | 155 | currInterval = Month; |
158 | setupMonthly(); | 156 | setupMonthly(); |
159 | fraExtra->setButton( 0 ); | 157 | fraExtra->setButton( 0 ); |
160 | slotMonthLabel( 0 ); | 158 | slotMonthLabel( 0 ); |
161 | break; | 159 | break; |
162 | case ORecur::MonthlyDate: | 160 | case ORecur::MonthlyDate: |
163 | currInterval = Month; | 161 | currInterval = Month; |
164 | setupMonthly(); | 162 | setupMonthly(); |
165 | fraExtra->setButton( 1 ); | 163 | fraExtra->setButton( 1 ); |
166 | slotMonthLabel( 1 ); | 164 | slotMonthLabel( 1 ); |
167 | break; | 165 | break; |
168 | case ORecur::Yearly: | 166 | case ORecur::Yearly: |
169 | currInterval = Year; | 167 | currInterval = Year; |
170 | setupYearly(); | 168 | setupYearly(); |
171 | break; | 169 | break; |
172 | } | 170 | } |
173 | fraType->setButton( currInterval ); | 171 | fraType->setButton( currInterval ); |
174 | spinFreq->setValue( rp.frequency() ); | 172 | spinFreq->setValue( rp.frequency() ); |
175 | if ( !rp.hasEndDate() ) { | 173 | if ( !rp.hasEndDate() ) { |
176 | cmdEnd->setText( tr("No End Date") ); | 174 | cmdEnd->setText( tr("No End Date") ); |
177 | chkNoEnd->setChecked( TRUE ); | 175 | chkNoEnd->setChecked( TRUE ); |
178 | } else | 176 | } else |
179 | cmdEnd->setText( TimeString::shortDate( end ) ); | 177 | cmdEnd->setText( TimeString::shortDate( end ) ); |
180 | } | 178 | } |
181 | 179 | ||
182 | /** | 180 | /** |
183 | * the user selected recurrence rule. | 181 | * the user selected recurrence rule. |
184 | * @return The recurrence rule. | 182 | * @return The recurrence rule. |
185 | */ | 183 | */ |
186 | ORecur ORecurranceWidget::recurrence()const { | 184 | ORecur ORecurranceWidget::recurrence()const { |
187 | QListIterator<QToolButton> it( listRTypeButtons ); | 185 | QListIterator<QToolButton> it( listRTypeButtons ); |
188 | QListIterator<QToolButton> itExtra( listExtra ); | 186 | QListIterator<QToolButton> itExtra( listExtra ); |
189 | ORecur rpTmp; | 187 | ORecur rpTmp; |
190 | int i; | 188 | int i; |
191 | for ( i = 0; *it; ++it, i++ ) { | 189 | for ( i = 0; *it; ++it, i++ ) { |
192 | if ( (*it)->isOn() ) { | 190 | if ( (*it)->isOn() ) { |
193 | switch ( i ) { | 191 | switch ( i ) { |
194 | case None: | 192 | case None: |
195 | rpTmp.setType( ORecur::NoRepeat ); | 193 | rpTmp.setType( ORecur::NoRepeat ); |
196 | break; | 194 | break; |
197 | case Day: | 195 | case Day: |
198 | rpTmp.setType( ORecur::Daily ); | 196 | rpTmp.setType( ORecur::Daily ); |
diff --git a/libopie/oticker.cpp b/libopie/oticker.cpp index 4fb5945..c05c2a8 100644 --- a/libopie/oticker.cpp +++ b/libopie/oticker.cpp | |||
@@ -1,139 +1,130 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of the Opie Project | 2 | This file is part of the Opie Project |
3 | Copyright (c) 2002 L. Potter <ljp@llornkcor.com> | 3 | Copyright (c) 2002 L. Potter <ljp@llornkcor.com> |
4 | =. | 4 | =. |
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 General Public | 9 | :`=1 )Y*s>-.-- : the terms of the GNU General Public |
10 | .="- .-=="i, .._ License as published by the Free Software | 10 | .="- .-=="i, .._ License as published by the Free Software |
11 | - . .-<_> .<> Foundation; either version 2 of the License, | 11 | - . .-<_> .<> Foundation; either version 2 of the License, |
12 | ._= =} : or (at your option) any later version. | 12 | ._= =} : or (at your option) any later version. |
13 | .%`+i> _;_. | 13 | .%`+i> _;_. |
14 | .i_,=:_. -<s. This 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 | 30 | ||
31 | #include <qpe/qpeapplication.h> | ||
32 | #include <qpe/resource.h> | ||
33 | #include <qpe/config.h> | 31 | #include <qpe/config.h> |
34 | 32 | ||
35 | #include <qwidget.h> | ||
36 | #include <qpixmap.h> | ||
37 | #include <qbutton.h> | ||
38 | #include <qpainter.h> | ||
39 | #include <qframe.h> | ||
40 | #include <qlayout.h> | ||
41 | #include <qdir.h> | ||
42 | #include <stdlib.h> | 33 | #include <stdlib.h> |
43 | #include <stdio.h> | 34 | #include <stdio.h> |
44 | 35 | ||
45 | #include "oticker.h" | 36 | #include "oticker.h" |
46 | 37 | ||
47 | OTicker::OTicker( QWidget* parent ) | 38 | OTicker::OTicker( QWidget* parent ) |
48 | : QLabel( parent ) { | 39 | : QLabel( parent ) { |
49 | // : QFrame( parent ) { | 40 | // : QFrame( parent ) { |
50 | setTextFormat(Qt::RichText); | 41 | setTextFormat(Qt::RichText); |
51 | Config cfg("qpe"); | 42 | Config cfg("qpe"); |
52 | cfg.setGroup("Appearance"); | 43 | cfg.setGroup("Appearance"); |
53 | backgroundcolor = QColor( cfg.readEntry( "Background", "#E5E1D5" ) ); | 44 | backgroundcolor = QColor( cfg.readEntry( "Background", "#E5E1D5" ) ); |
54 | foregroundcolor= Qt::black; | 45 | foregroundcolor= Qt::black; |
55 | updateTimerTime = 50; | 46 | updateTimerTime = 50; |
56 | scrollLength = 1; | 47 | scrollLength = 1; |
57 | } | 48 | } |
58 | 49 | ||
59 | OTicker::~OTicker() { | 50 | OTicker::~OTicker() { |
60 | } | 51 | } |
61 | 52 | ||
62 | void OTicker::setBackgroundColor(const QColor& backcolor) { | 53 | void OTicker::setBackgroundColor(const QColor& backcolor) { |
63 | backgroundcolor = backcolor; | 54 | backgroundcolor = backcolor; |
64 | update(); | 55 | update(); |
65 | } | 56 | } |
66 | 57 | ||
67 | void OTicker::setForegroundColor(const QColor& backcolor) { | 58 | void OTicker::setForegroundColor(const QColor& backcolor) { |
68 | foregroundcolor = backcolor; | 59 | foregroundcolor = backcolor; |
69 | update(); | 60 | update(); |
70 | } | 61 | } |
71 | 62 | ||
72 | void OTicker::setFrame(int frameStyle) { | 63 | void OTicker::setFrame(int frameStyle) { |
73 | setFrameStyle( frameStyle/*WinPanel | Sunken */); | 64 | setFrameStyle( frameStyle/*WinPanel | Sunken */); |
74 | update(); | 65 | update(); |
75 | } | 66 | } |
76 | 67 | ||
77 | void OTicker::setText( const QString& text ) { | 68 | void OTicker::setText( const QString& text ) { |
78 | pos = 0; // reset it everytime the text is changed | 69 | pos = 0; // reset it everytime the text is changed |
79 | scrollText = text; | 70 | scrollText = text; |
80 | qDebug(scrollText); | 71 | qDebug(scrollText); |
81 | 72 | ||
82 | int pixelLen = 0; | 73 | int pixelLen = 0; |
83 | bool bigger = false; | 74 | bool bigger = false; |
84 | int contWidth = contentsRect().width(); | 75 | int contWidth = contentsRect().width(); |
85 | int contHeight = contentsRect().height(); | 76 | int contHeight = contentsRect().height(); |
86 | int pixelTextLen = fontMetrics().width( text ); | 77 | int pixelTextLen = fontMetrics().width( text ); |
87 | printf("<<<<<<<height %d, width %d, text width %d %d\n", contHeight, contWidth, pixelTextLen, scrollText.length()); | 78 | printf("<<<<<<<height %d, width %d, text width %d %d\n", contHeight, contWidth, pixelTextLen, scrollText.length()); |
88 | if( pixelTextLen < contWidth) | 79 | if( pixelTextLen < contWidth) |
89 | { | 80 | { |
90 | pixelLen = contWidth; | 81 | pixelLen = contWidth; |
91 | } | 82 | } |
92 | else | 83 | else |
93 | { | 84 | { |
94 | bigger = true; | 85 | bigger = true; |
95 | pixelLen = pixelTextLen; | 86 | pixelLen = pixelTextLen; |
96 | } | 87 | } |
97 | QPixmap pm( pixelLen, contHeight); | 88 | QPixmap pm( pixelLen, contHeight); |
98 | // pm.fill( QColor( 167, 212, 167 )); | 89 | // pm.fill( QColor( 167, 212, 167 )); |
99 | 90 | ||
100 | pm.fill(backgroundcolor); | 91 | pm.fill(backgroundcolor); |
101 | QPainter pmp( &pm ); | 92 | QPainter pmp( &pm ); |
102 | pmp.setPen(foregroundcolor ); | 93 | pmp.setPen(foregroundcolor ); |
103 | pmp.drawText( 0, 0, pixelTextLen, contHeight, AlignVCenter, scrollText ); | 94 | pmp.drawText( 0, 0, pixelTextLen, contHeight, AlignVCenter, scrollText ); |
104 | pmp.end(); | 95 | pmp.end(); |
105 | scrollTextPixmap = pm; | 96 | scrollTextPixmap = pm; |
106 | 97 | ||
107 | killTimers(); | 98 | killTimers(); |
108 | // qDebug("Scrollupdate %d", updateTimerTime); | 99 | // qDebug("Scrollupdate %d", updateTimerTime); |
109 | if ( bigger /*pixelTextLen > contWidth*/ ) | 100 | if ( bigger /*pixelTextLen > contWidth*/ ) |
110 | startTimer( updateTimerTime); | 101 | startTimer( updateTimerTime); |
111 | update(); | 102 | update(); |
112 | } | 103 | } |
113 | 104 | ||
114 | 105 | ||
115 | void OTicker::timerEvent( QTimerEvent * ) { | 106 | void OTicker::timerEvent( QTimerEvent * ) { |
116 | pos = ( pos <= 0 ) ? scrollTextPixmap.width() : pos - scrollLength;//1; | 107 | pos = ( pos <= 0 ) ? scrollTextPixmap.width() : pos - scrollLength;//1; |
117 | repaint( FALSE ); | 108 | repaint( FALSE ); |
118 | } | 109 | } |
119 | 110 | ||
120 | void OTicker::drawContents( QPainter *p ) { | 111 | void OTicker::drawContents( QPainter *p ) { |
121 | int pixelLen = scrollTextPixmap.width(); | 112 | int pixelLen = scrollTextPixmap.width(); |
122 | p->drawPixmap( pos, contentsRect().y(), scrollTextPixmap ); | 113 | p->drawPixmap( pos, contentsRect().y(), scrollTextPixmap ); |
123 | if ( pixelLen > contentsRect().width() ) // Scrolling | 114 | if ( pixelLen > contentsRect().width() ) // Scrolling |
124 | p->drawPixmap( pos - pixelLen, contentsRect().y(), scrollTextPixmap ); | 115 | p->drawPixmap( pos - pixelLen, contentsRect().y(), scrollTextPixmap ); |
125 | } | 116 | } |
126 | 117 | ||
127 | void OTicker::mouseReleaseEvent( QMouseEvent * ) { | 118 | void OTicker::mouseReleaseEvent( QMouseEvent * ) { |
128 | // qDebug("<<<<<<<>>>>>>>>>"); | 119 | // qDebug("<<<<<<<>>>>>>>>>"); |
129 | emit mousePressed(); | 120 | emit mousePressed(); |
130 | } | 121 | } |
131 | 122 | ||
132 | void OTicker::setUpdateTime(int time) { | 123 | void OTicker::setUpdateTime(int time) { |
133 | updateTimerTime=time; | 124 | updateTimerTime=time; |
134 | } | 125 | } |
135 | 126 | ||
136 | void OTicker::setScrollLength(int len) { | 127 | void OTicker::setScrollLength(int len) { |
137 | scrollLength=len; | 128 | scrollLength=len; |
138 | } | 129 | } |
139 | 130 | ||
diff --git a/libopie/otimepicker.cpp b/libopie/otimepicker.cpp index 115d39b..1eca7c5 100644 --- a/libopie/otimepicker.cpp +++ b/libopie/otimepicker.cpp | |||
@@ -1,198 +1,195 @@ | |||
1 | #include "otimepicker.h" | 1 | #include "otimepicker.h" |
2 | 2 | ||
3 | #include <qbuttongroup.h> | ||
4 | #include <qtoolbutton.h> | ||
5 | #include <qlayout.h> | 3 | #include <qlayout.h> |
6 | #include <qstring.h> | ||
7 | #include <stdio.h> | 4 | #include <stdio.h> |
8 | #include <qlineedit.h> | 5 | #include <qlineedit.h> |
9 | 6 | ||
10 | 7 | ||
11 | /** | 8 | /** |
12 | * Constructs the widget | 9 | * Constructs the widget |
13 | * @param parent The parent of the OTimePicker | 10 | * @param parent The parent of the OTimePicker |
14 | * @param name The name of the object | 11 | * @param name The name of the object |
15 | * @param fl Window Flags | 12 | * @param fl Window Flags |
16 | */ | 13 | */ |
17 | OTimePicker::OTimePicker(QWidget* parent, const char* name, | 14 | OTimePicker::OTimePicker(QWidget* parent, const char* name, |
18 | WFlags fl) : | 15 | WFlags fl) : |
19 | QWidget(parent,name,fl) | 16 | QWidget(parent,name,fl) |
20 | { | 17 | { |
21 | 18 | ||
22 | QVBoxLayout *vbox=new QVBoxLayout(this); | 19 | QVBoxLayout *vbox=new QVBoxLayout(this); |
23 | 20 | ||
24 | OClickableLabel *r; | 21 | OClickableLabel *r; |
25 | QString s; | 22 | QString s; |
26 | 23 | ||
27 | // Hour Row | 24 | // Hour Row |
28 | QWidget *row=new QWidget(this); | 25 | QWidget *row=new QWidget(this); |
29 | QHBoxLayout *l=new QHBoxLayout(row); | 26 | QHBoxLayout *l=new QHBoxLayout(row); |
30 | vbox->addWidget(row); | 27 | vbox->addWidget(row); |
31 | 28 | ||
32 | 29 | ||
33 | for (int i=0; i<24; i++) { | 30 | for (int i=0; i<24; i++) { |
34 | r=new OClickableLabel(row); | 31 | r=new OClickableLabel(row); |
35 | hourLst.append(r); | 32 | hourLst.append(r); |
36 | s.sprintf("%.2d",i); | 33 | s.sprintf("%.2d",i); |
37 | r->setText(s); | 34 | r->setText(s); |
38 | r->setToggleButton(true); | 35 | r->setToggleButton(true); |
39 | r->setAlignment(AlignHCenter | AlignVCenter); | 36 | r->setAlignment(AlignHCenter | AlignVCenter); |
40 | l->addWidget(r); | 37 | l->addWidget(r); |
41 | connect(r, SIGNAL(toggled(bool)), | 38 | connect(r, SIGNAL(toggled(bool)), |
42 | this, SLOT(slotHour(bool))); | 39 | this, SLOT(slotHour(bool))); |
43 | 40 | ||
44 | if (i==11) { // Second row | 41 | if (i==11) { // Second row |
45 | row=new QWidget(this); | 42 | row=new QWidget(this); |
46 | l=new QHBoxLayout(row); | 43 | l=new QHBoxLayout(row); |
47 | vbox->addWidget(row); | 44 | vbox->addWidget(row); |
48 | } | 45 | } |
49 | } | 46 | } |
50 | 47 | ||
51 | // Minute Row | 48 | // Minute Row |
52 | row=new QWidget(this); | 49 | row=new QWidget(this); |
53 | l=new QHBoxLayout(row); | 50 | l=new QHBoxLayout(row); |
54 | vbox->addWidget(row); | 51 | vbox->addWidget(row); |
55 | 52 | ||
56 | for (int i=0; i<60; i+=5) { | 53 | for (int i=0; i<60; i+=5) { |
57 | r=new OClickableLabel(row); | 54 | r=new OClickableLabel(row); |
58 | minuteLst.append(r); | 55 | minuteLst.append(r); |
59 | s.sprintf("%.2d",i); | 56 | s.sprintf("%.2d",i); |
60 | r->setText(s); | 57 | r->setText(s); |
61 | r->setToggleButton(true); | 58 | r->setToggleButton(true); |
62 | r->setAlignment(AlignHCenter | AlignVCenter); | 59 | r->setAlignment(AlignHCenter | AlignVCenter); |
63 | l->addWidget(r); | 60 | l->addWidget(r); |
64 | connect(r, SIGNAL(toggled(bool)), | 61 | connect(r, SIGNAL(toggled(bool)), |
65 | this, SLOT(slotMinute(bool))); | 62 | this, SLOT(slotMinute(bool))); |
66 | } | 63 | } |
67 | } | 64 | } |
68 | 65 | ||
69 | /** | 66 | /** |
70 | * This method return the current time | 67 | * This method return the current time |
71 | * @return the time | 68 | * @return the time |
72 | */ | 69 | */ |
73 | QTime OTimePicker::time()const { | 70 | QTime OTimePicker::time()const { |
74 | return tm; | 71 | return tm; |
75 | } | 72 | } |
76 | 73 | ||
77 | void OTimePicker::slotHour(bool b) { | 74 | void OTimePicker::slotHour(bool b) { |
78 | 75 | ||
79 | OClickableLabel *r = (OClickableLabel *) sender(); | 76 | OClickableLabel *r = (OClickableLabel *) sender(); |
80 | 77 | ||
81 | if (b) { | 78 | if (b) { |
82 | QValueListIterator<OClickableLabel *> it; | 79 | QValueListIterator<OClickableLabel *> it; |
83 | for (it=hourLst.begin(); it!=hourLst.end(); it++) { | 80 | for (it=hourLst.begin(); it!=hourLst.end(); it++) { |
84 | if (*it != r) (*it)->setOn(false); | 81 | if (*it != r) (*it)->setOn(false); |
85 | else tm.setHMS((*it)->text().toInt(), tm.minute(), 0); | 82 | else tm.setHMS((*it)->text().toInt(), tm.minute(), 0); |
86 | } | 83 | } |
87 | emit timeChanged(tm); | 84 | emit timeChanged(tm); |
88 | } else { | 85 | } else { |
89 | r->setOn(true); | 86 | r->setOn(true); |
90 | } | 87 | } |
91 | 88 | ||
92 | } | 89 | } |
93 | 90 | ||
94 | void OTimePicker::slotMinute(bool b) { | 91 | void OTimePicker::slotMinute(bool b) { |
95 | 92 | ||
96 | OClickableLabel *r = (OClickableLabel *) sender(); | 93 | OClickableLabel *r = (OClickableLabel *) sender(); |
97 | 94 | ||
98 | if (b) { | 95 | if (b) { |
99 | QValueListIterator<OClickableLabel *> it; | 96 | QValueListIterator<OClickableLabel *> it; |
100 | for (it=minuteLst.begin(); it!=minuteLst.end(); it++) { | 97 | for (it=minuteLst.begin(); it!=minuteLst.end(); it++) { |
101 | if (*it != r) (*it)->setOn(false); | 98 | if (*it != r) (*it)->setOn(false); |
102 | else tm.setHMS(tm.hour(),(*it)->text().toInt(), 0); | 99 | else tm.setHMS(tm.hour(),(*it)->text().toInt(), 0); |
103 | } | 100 | } |
104 | emit timeChanged(tm); | 101 | emit timeChanged(tm); |
105 | } else { | 102 | } else { |
106 | r->setOn(true); | 103 | r->setOn(true); |
107 | } | 104 | } |
108 | 105 | ||
109 | } | 106 | } |
110 | 107 | ||
111 | /** | 108 | /** |
112 | * Method to set the time. No signal gets emitted during this method call | 109 | * Method to set the time. No signal gets emitted during this method call |
113 | * Minutes must be within 5 minutes step starting at 0 ( 0,5,10,15,20... ) | 110 | * Minutes must be within 5 minutes step starting at 0 ( 0,5,10,15,20... ) |
114 | * @param t The time to be set | 111 | * @param t The time to be set |
115 | */ | 112 | */ |
116 | void OTimePicker::setTime( const QTime& t) { | 113 | void OTimePicker::setTime( const QTime& t) { |
117 | setTime( t.hour(), t.minute() ); | 114 | setTime( t.hour(), t.minute() ); |
118 | } | 115 | } |
119 | 116 | ||
120 | /** | 117 | /** |
121 | * Method to set the time. No signal gets emitted during this method call | 118 | * Method to set the time. No signal gets emitted during this method call |
122 | * @param h The hour | 119 | * @param h The hour |
123 | * @param m The minute. Minutes need to set by 5 minute steps | 120 | * @param m The minute. Minutes need to set by 5 minute steps |
124 | */ | 121 | */ |
125 | void OTimePicker::setTime( int h, int m ) { | 122 | void OTimePicker::setTime( int h, int m ) { |
126 | setHour(h); | 123 | setHour(h); |
127 | setMinute(m); | 124 | setMinute(m); |
128 | } | 125 | } |
129 | 126 | ||
130 | /* | 127 | /* |
131 | * FIXME round minutes to the 5 minute arrangement -zecke | 128 | * FIXME round minutes to the 5 minute arrangement -zecke |
132 | */ | 129 | */ |
133 | /** | 130 | /** |
134 | * Method to set the minutes | 131 | * Method to set the minutes |
135 | * @param m minutes | 132 | * @param m minutes |
136 | */ | 133 | */ |
137 | void OTimePicker::setMinute(int m) { | 134 | void OTimePicker::setMinute(int m) { |
138 | 135 | ||
139 | QString minute; | 136 | QString minute; |
140 | minute.sprintf("%.2d",m); | 137 | minute.sprintf("%.2d",m); |
141 | 138 | ||
142 | QValueListIterator<OClickableLabel *> it; | 139 | QValueListIterator<OClickableLabel *> it; |
143 | for (it=minuteLst.begin(); it!=minuteLst.end(); it++) { | 140 | for (it=minuteLst.begin(); it!=minuteLst.end(); it++) { |
144 | if ((*it)->text() == minute) (*it)->setOn(true); | 141 | if ((*it)->text() == minute) (*it)->setOn(true); |
145 | else (*it)->setOn(false); | 142 | else (*it)->setOn(false); |
146 | } | 143 | } |
147 | 144 | ||
148 | tm.setHMS(tm.hour(),m,0); | 145 | tm.setHMS(tm.hour(),m,0); |
149 | } | 146 | } |
150 | 147 | ||
151 | /** | 148 | /** |
152 | * Method to set the hour | 149 | * Method to set the hour |
153 | */ | 150 | */ |
154 | void OTimePicker::setHour(int h) { | 151 | void OTimePicker::setHour(int h) { |
155 | 152 | ||
156 | QString hour; | 153 | QString hour; |
157 | hour.sprintf("%.2d",h); | 154 | hour.sprintf("%.2d",h); |
158 | 155 | ||
159 | QValueListIterator<OClickableLabel *> it; | 156 | QValueListIterator<OClickableLabel *> it; |
160 | for (it=hourLst.begin(); it!=hourLst.end(); it++) { | 157 | for (it=hourLst.begin(); it!=hourLst.end(); it++) { |
161 | if ((*it)->text() == hour) (*it)->setOn(true); | 158 | if ((*it)->text() == hour) (*it)->setOn(true); |
162 | else (*it)->setOn(false); | 159 | else (*it)->setOn(false); |
163 | } | 160 | } |
164 | tm.setHMS(h,tm.minute(),0); | 161 | tm.setHMS(h,tm.minute(),0); |
165 | } | 162 | } |
166 | 163 | ||
167 | 164 | ||
168 | /** | 165 | /** |
169 | * This is a modal Dialog. | 166 | * This is a modal Dialog. |
170 | * | 167 | * |
171 | * @param parent The parent widget | 168 | * @param parent The parent widget |
172 | * @param name The name of the object | 169 | * @param name The name of the object |
173 | * @param fl Possible window flags | 170 | * @param fl Possible window flags |
174 | */ | 171 | */ |
175 | OTimePickerDialog::OTimePickerDialog ( QWidget* parent, const char* name, WFlags fl ) | 172 | OTimePickerDialog::OTimePickerDialog ( QWidget* parent, const char* name, WFlags fl ) |
176 | : OTimePickerDialogBase (parent , name, true , fl) | 173 | : OTimePickerDialogBase (parent , name, true , fl) |
177 | { | 174 | { |
178 | 175 | ||
179 | connect ( m_timePicker, SIGNAL( timeChanged( const QTime& ) ), | 176 | connect ( m_timePicker, SIGNAL( timeChanged( const QTime& ) ), |
180 | this, SLOT( setTime ( const QTime& ) ) ); | 177 | this, SLOT( setTime ( const QTime& ) ) ); |
181 | connect ( minuteField, SIGNAL( textChanged ( const QString& ) ), | 178 | connect ( minuteField, SIGNAL( textChanged ( const QString& ) ), |
182 | this, SLOT ( setMinute ( const QString& ) ) ); | 179 | this, SLOT ( setMinute ( const QString& ) ) ); |
183 | connect ( hourField, SIGNAL( textChanged ( const QString& ) ), | 180 | connect ( hourField, SIGNAL( textChanged ( const QString& ) ), |
184 | this, SLOT ( setHour ( const QString& ) ) ); | 181 | this, SLOT ( setHour ( const QString& ) ) ); |
185 | 182 | ||
186 | } | 183 | } |
187 | 184 | ||
188 | /** | 185 | /** |
189 | * @return the time | 186 | * @return the time |
190 | */ | 187 | */ |
191 | QTime OTimePickerDialog::time()const | 188 | QTime OTimePickerDialog::time()const |
192 | { | 189 | { |
193 | return m_time; | 190 | return m_time; |
194 | } | 191 | } |
195 | 192 | ||
196 | /** | 193 | /** |
197 | * Set the time to time | 194 | * Set the time to time |
198 | * @param time The time to be set | 195 | * @param time The time to be set |
diff --git a/libopie/owait.cpp b/libopie/owait.cpp index 0fdf08d..a0f3834 100644 --- a/libopie/owait.cpp +++ b/libopie/owait.cpp | |||
@@ -1,93 +1,91 @@ | |||
1 | /* This file is part of the OPIE libraries | 1 | /* This file is part of the OPIE libraries |
2 | Copyright (C) 2003 Maximilian Reiss (harlekin@handhelds.org) | 2 | Copyright (C) 2003 Maximilian Reiss (harlekin@handhelds.org) |
3 | 3 | ||
4 | This library is free software; you can redistribute it and/or | 4 | This library is free software; you can redistribute it and/or |
5 | modify it under the terms of the GNU Library General Public | 5 | modify it under the terms of the GNU Library General Public |
6 | License as published by the Free Software Foundation; either | 6 | License as published by the Free Software Foundation; either |
7 | version 2 of the License, or (at your option) any later version. | 7 | version 2 of the License, or (at your option) any later version. |
8 | 8 | ||
9 | This library is distributed in the hope that it will be useful, | 9 | This library is distributed in the hope that it will be useful, |
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | 11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | Library General Public License for more details. | 12 | Library General Public License for more details. |
13 | 13 | ||
14 | You should have received a copy of the GNU Library General Public License | 14 | You should have received a copy of the GNU Library General Public License |
15 | along with this library; see the file COPYING.LIB. If not, write to | 15 | along with this library; see the file COPYING.LIB. If not, write to |
16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | 16 | the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
17 | Boston, MA 02111-1307, USA. | 17 | Boston, MA 02111-1307, USA. |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <qlabel.h> | ||
21 | #include <qlayout.h> | 20 | #include <qlayout.h> |
22 | #include <qtimer.h> | ||
23 | #include <qpe/qpeapplication.h> | 21 | #include <qpe/qpeapplication.h> |
24 | #include <qpainter.h> | 22 | #include <qpainter.h> |
25 | 23 | ||
26 | #include "owait.h" | 24 | #include "owait.h" |
27 | 25 | ||
28 | #include <qpe/resource.h> | 26 | #include <qpe/resource.h> |
29 | 27 | ||
30 | static int frame = 0; | 28 | static int frame = 0; |
31 | 29 | ||
32 | /** | 30 | /** |
33 | * This will construct a modal dialog. | 31 | * This will construct a modal dialog. |
34 | * | 32 | * |
35 | * The default timer length is 10. | 33 | * The default timer length is 10. |
36 | * | 34 | * |
37 | * @param parent The parent of the widget | 35 | * @param parent The parent of the widget |
38 | * @param msg The name of the object | 36 | * @param msg The name of the object |
39 | * @param dispIcon Display Icon? | 37 | * @param dispIcon Display Icon? |
40 | */ | 38 | */ |
41 | OWait::OWait(QWidget *parent, const char* msg, bool dispIcon ) | 39 | OWait::OWait(QWidget *parent, const char* msg, bool dispIcon ) |
42 | :QDialog(parent, msg, TRUE,WStyle_Customize) { | 40 | :QDialog(parent, msg, TRUE,WStyle_Customize) { |
43 | 41 | ||
44 | 42 | ||
45 | QHBoxLayout *hbox = new QHBoxLayout( this ); | 43 | QHBoxLayout *hbox = new QHBoxLayout( this ); |
46 | 44 | ||
47 | m_lb = new QLabel( this ); | 45 | m_lb = new QLabel( this ); |
48 | m_lb->setBackgroundMode ( NoBackground ); | 46 | m_lb->setBackgroundMode ( NoBackground ); |
49 | 47 | ||
50 | hbox->addWidget( m_lb ); | 48 | hbox->addWidget( m_lb ); |
51 | hbox->activate(); | 49 | hbox->activate(); |
52 | 50 | ||
53 | m_pix = Resource::loadPixmap( "BigBusy" ); | 51 | m_pix = Resource::loadPixmap( "BigBusy" ); |
54 | m_aniSize = m_pix.height(); | 52 | m_aniSize = m_pix.height(); |
55 | resize( m_aniSize, m_aniSize ); | 53 | resize( m_aniSize, m_aniSize ); |
56 | 54 | ||
57 | m_timerLength = 10; | 55 | m_timerLength = 10; |
58 | 56 | ||
59 | m_waitTimer = new QTimer( this ); | 57 | m_waitTimer = new QTimer( this ); |
60 | connect( m_waitTimer, SIGNAL( timeout() ), this, SLOT( hide() ) ); | 58 | connect( m_waitTimer, SIGNAL( timeout() ), this, SLOT( hide() ) ); |
61 | } | 59 | } |
62 | 60 | ||
63 | void OWait::timerEvent( QTimerEvent * ) { | 61 | void OWait::timerEvent( QTimerEvent * ) { |
64 | frame = (++frame) % 4; | 62 | frame = (++frame) % 4; |
65 | repaint(); | 63 | repaint(); |
66 | } | 64 | } |
67 | 65 | ||
68 | void OWait::paintEvent( QPaintEvent * ) { | 66 | void OWait::paintEvent( QPaintEvent * ) { |
69 | QPainter p( m_lb ); | 67 | QPainter p( m_lb ); |
70 | p.drawPixmap( 0, 0, m_pix, m_aniSize * frame, 0, m_aniSize, m_aniSize ); | 68 | p.drawPixmap( 0, 0, m_pix, m_aniSize * frame, 0, m_aniSize, m_aniSize ); |
71 | } | 69 | } |
72 | 70 | ||
73 | void OWait::show() { | 71 | void OWait::show() { |
74 | 72 | ||
75 | move( ( ( qApp->desktop()->width() ) / 2 ) - ( m_aniSize / 2 ), ( ( qApp->desktop()->height() ) / 2 ) - ( m_aniSize / 2 ) ); | 73 | move( ( ( qApp->desktop()->width() ) / 2 ) - ( m_aniSize / 2 ), ( ( qApp->desktop()->height() ) / 2 ) - ( m_aniSize / 2 ) ); |
76 | startTimer( 300 ); | 74 | startTimer( 300 ); |
77 | m_waitTimer->start( m_timerLength * 1000, true ); | 75 | m_waitTimer->start( m_timerLength * 1000, true ); |
78 | QDialog::show(); | 76 | QDialog::show(); |
79 | } | 77 | } |
80 | 78 | ||
81 | void OWait::hide() { | 79 | void OWait::hide() { |
82 | killTimers(); | 80 | killTimers(); |
83 | m_waitTimer->stop(); | 81 | m_waitTimer->stop(); |
84 | frame = 0; | 82 | frame = 0; |
85 | QDialog::hide(); | 83 | QDialog::hide(); |
86 | } | 84 | } |
87 | 85 | ||
88 | void OWait::setTimerLength( int length ) { | 86 | void OWait::setTimerLength( int length ) { |
89 | m_timerLength = length; | 87 | m_timerLength = length; |
90 | } | 88 | } |
91 | 89 | ||
92 | OWait::~OWait() { | 90 | OWait::~OWait() { |
93 | } | 91 | } |
diff --git a/libopie/pim/ocontactaccessbackend_xml.cpp b/libopie/pim/ocontactaccessbackend_xml.cpp index aae7fca..2373ad6 100644 --- a/libopie/pim/ocontactaccessbackend_xml.cpp +++ b/libopie/pim/ocontactaccessbackend_xml.cpp | |||
@@ -1,305 +1,306 @@ | |||
1 | /* | 1 | /* |
2 | * XML Backend for the OPIE-Contact Database. | 2 | * XML Backend for the OPIE-Contact Database. |
3 | * | 3 | * |
4 | * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) | 4 | * Copyright (c) 2002 by Stefan Eilers (Eilers.Stefan@epost.de) |
5 | * | 5 | * |
6 | * ===================================================================== | 6 | * ===================================================================== |
7 | *This program is free software; you can redistribute it and/or | 7 | *This program is free software; you can redistribute it and/or |
8 | *modify it under the terms of the GNU Library General Public | 8 | *modify it under the terms of the GNU Library General Public |
9 | * License as published by the Free Software Foundation; either | 9 | * License as published by the Free Software Foundation; either |
10 | * version 2 of the License, or (at your option) any later version. | 10 | * version 2 of the License, or (at your option) any later version. |
11 | * ===================================================================== | 11 | * ===================================================================== |
12 | * | 12 | * |
13 | * ===================================================================== | 13 | * ===================================================================== |
14 | * Version: $Id$ | 14 | * Version: $Id$ |
15 | * ===================================================================== | 15 | * ===================================================================== |
16 | * History: | 16 | * History: |
17 | * $Log$ | 17 | * $Log$ |
18 | * Revision 1.10 2004/03/01 15:44:36 chicken | ||
19 | * fix includes | ||
20 | * | ||
18 | * Revision 1.9 2003/09/22 14:31:16 eilers | 21 | * Revision 1.9 2003/09/22 14:31:16 eilers |
19 | * Added first experimental incarnation of sql-backend for addressbook. | 22 | * Added first experimental incarnation of sql-backend for addressbook. |
20 | * Some modifications to be able to compile the todo sql-backend. | 23 | * Some modifications to be able to compile the todo sql-backend. |
21 | * A lot of changes fill follow... | 24 | * A lot of changes fill follow... |
22 | * | 25 | * |
23 | * Revision 1.8 2003/08/30 15:28:26 eilers | 26 | * Revision 1.8 2003/08/30 15:28:26 eilers |
24 | * Removed some unimportant debug output which causes slow down.. | 27 | * Removed some unimportant debug output which causes slow down.. |
25 | * | 28 | * |
26 | * Revision 1.7 2003/08/01 12:30:16 eilers | 29 | * Revision 1.7 2003/08/01 12:30:16 eilers |
27 | * Merging changes from BRANCH_1_0 to HEAD | 30 | * Merging changes from BRANCH_1_0 to HEAD |
28 | * | 31 | * |
29 | * Revision 1.6 2003/07/07 16:19:47 eilers | 32 | * Revision 1.6 2003/07/07 16:19:47 eilers |
30 | * Fixing serious bug in hasQuerySettings() | 33 | * Fixing serious bug in hasQuerySettings() |
31 | * | 34 | * |
32 | * Revision 1.5 2003/04/13 18:07:10 zecke | 35 | * Revision 1.5 2003/04/13 18:07:10 zecke |
33 | * More API doc | 36 | * More API doc |
34 | * QString -> const QString& | 37 | * QString -> const QString& |
35 | * QString = 0l -> QString::null | 38 | * QString = 0l -> QString::null |
36 | * | 39 | * |
37 | * Revision 1.4 2003/03/21 14:32:54 mickeyl | 40 | * Revision 1.4 2003/03/21 14:32:54 mickeyl |
38 | * g++ compliance fix: default arguments belong into the declaration, but not the definition | 41 | * g++ compliance fix: default arguments belong into the declaration, but not the definition |
39 | * | 42 | * |
40 | * Revision 1.3 2003/03/21 12:26:28 eilers | 43 | * Revision 1.3 2003/03/21 12:26:28 eilers |
41 | * Fixing small bug: If we search a birthday from today to today, it returned | 44 | * Fixing small bug: If we search a birthday from today to today, it returned |
42 | * every contact .. | 45 | * every contact .. |
43 | * | 46 | * |
44 | * Revision 1.2 2003/03/21 10:33:09 eilers | 47 | * Revision 1.2 2003/03/21 10:33:09 eilers |
45 | * Merged speed optimized xml backend for contacts to main. | 48 | * Merged speed optimized xml backend for contacts to main. |
46 | * Added QDateTime to querybyexample. For instance, it is now possible to get | 49 | * Added QDateTime to querybyexample. For instance, it is now possible to get |
47 | * all Birthdays/Anniversaries between two dates. This should be used | 50 | * all Birthdays/Anniversaries between two dates. This should be used |
48 | * to show all birthdays in the datebook.. | 51 | * to show all birthdays in the datebook.. |
49 | * This change is sourcecode backward compatible but you have to upgrade | 52 | * This change is sourcecode backward compatible but you have to upgrade |
50 | * the binaries for today-addressbook. | 53 | * the binaries for today-addressbook. |
51 | * | 54 | * |
52 | * Revision 1.1.2.2 2003/02/11 12:17:28 eilers | 55 | * Revision 1.1.2.2 2003/02/11 12:17:28 eilers |
53 | * Speed optimization. Removed the sequential search loops. | 56 | * Speed optimization. Removed the sequential search loops. |
54 | * | 57 | * |
55 | * Revision 1.1.2.1 2003/02/10 15:31:38 eilers | 58 | * Revision 1.1.2.1 2003/02/10 15:31:38 eilers |
56 | * Writing offsets to debug output.. | 59 | * Writing offsets to debug output.. |
57 | * | 60 | * |
58 | * Revision 1.1 2003/02/09 15:05:01 eilers | 61 | * Revision 1.1 2003/02/09 15:05:01 eilers |
59 | * Nothing happened.. Just some cleanup before I will start.. | 62 | * Nothing happened.. Just some cleanup before I will start.. |
60 | * | 63 | * |
61 | * Revision 1.12 2003/01/03 16:58:03 eilers | 64 | * Revision 1.12 2003/01/03 16:58:03 eilers |
62 | * Reenable debug output | 65 | * Reenable debug output |
63 | * | 66 | * |
64 | * Revision 1.11 2003/01/03 12:31:28 eilers | 67 | * Revision 1.11 2003/01/03 12:31:28 eilers |
65 | * Bugfix for calculating data diffs.. | 68 | * Bugfix for calculating data diffs.. |
66 | * | 69 | * |
67 | * Revision 1.10 2003/01/02 14:27:12 eilers | 70 | * Revision 1.10 2003/01/02 14:27:12 eilers |
68 | * Improved query by example: Search by date is possible.. First step | 71 | * Improved query by example: Search by date is possible.. First step |
69 | * for a today plugin for birthdays.. | 72 | * for a today plugin for birthdays.. |
70 | * | 73 | * |
71 | * Revision 1.9 2002/12/08 12:48:57 eilers | 74 | * Revision 1.9 2002/12/08 12:48:57 eilers |
72 | * Moved journal-enum from ocontact into i the xml-backend.. | 75 | * Moved journal-enum from ocontact into i the xml-backend.. |
73 | * | 76 | * |
74 | * Revision 1.8 2002/11/14 17:04:24 eilers | 77 | * Revision 1.8 2002/11/14 17:04:24 eilers |
75 | * Sorting will now work if fullname is identical on some entries | 78 | * Sorting will now work if fullname is identical on some entries |
76 | * | 79 | * |
77 | * Revision 1.7 2002/11/13 15:02:46 eilers | 80 | * Revision 1.7 2002/11/13 15:02:46 eilers |
78 | * Small Bug in sorted fixed | 81 | * Small Bug in sorted fixed |
79 | * | 82 | * |
80 | * Revision 1.6 2002/11/13 14:14:51 eilers | 83 | * Revision 1.6 2002/11/13 14:14:51 eilers |
81 | * Added sorted for Contacts.. | 84 | * Added sorted for Contacts.. |
82 | * | 85 | * |
83 | * Revision 1.5 2002/11/01 15:10:42 eilers | 86 | * Revision 1.5 2002/11/01 15:10:42 eilers |
84 | * Added regExp-search in database for all fields in a contact. | 87 | * Added regExp-search in database for all fields in a contact. |
85 | * | 88 | * |
86 | * Revision 1.4 2002/10/16 10:52:40 eilers | 89 | * Revision 1.4 2002/10/16 10:52:40 eilers |
87 | * Added some docu to the interface and now using the cache infrastucture by zecke.. :) | 90 | * Added some docu to the interface and now using the cache infrastucture by zecke.. :) |
88 | * | 91 | * |
89 | * Revision 1.3 2002/10/14 16:21:54 eilers | 92 | * Revision 1.3 2002/10/14 16:21:54 eilers |
90 | * Some minor interface updates | 93 | * Some minor interface updates |
91 | * | 94 | * |
92 | * Revision 1.2 2002/10/07 17:34:24 eilers | 95 | * Revision 1.2 2002/10/07 17:34:24 eilers |
93 | * added OBackendFactory for advanced backend access | 96 | * added OBackendFactory for advanced backend access |
94 | * | 97 | * |
95 | * Revision 1.1 2002/09/27 17:11:44 eilers | 98 | * Revision 1.1 2002/09/27 17:11:44 eilers |
96 | * Added API for accessing the Contact-Database ! It is compiling, but | 99 | * Added API for accessing the Contact-Database ! It is compiling, but |
97 | * please do not expect that anything is working ! | 100 | * please do not expect that anything is working ! |
98 | * I will debug that stuff in the next time .. | 101 | * I will debug that stuff in the next time .. |
99 | * Please read README_COMPILE for compiling ! | 102 | * Please read README_COMPILE for compiling ! |
100 | * | 103 | * |
101 | * | 104 | * |
102 | */ | 105 | */ |
103 | 106 | ||
104 | #include "ocontactaccessbackend_xml.h" | 107 | #include "ocontactaccessbackend_xml.h" |
105 | 108 | ||
106 | #include <qasciidict.h> | 109 | #include <qasciidict.h> |
107 | #include <qdatetime.h> | ||
108 | #include <qfile.h> | 110 | #include <qfile.h> |
109 | #include <qfileinfo.h> | 111 | #include <qfileinfo.h> |
110 | #include <qregexp.h> | 112 | #include <qregexp.h> |
111 | #include <qarray.h> | 113 | #include <qarray.h> |
112 | #include <qmap.h> | 114 | #include <qmap.h> |
113 | #include <qdatetime.h> | ||
114 | 115 | ||
115 | #include <qpe/global.h> | 116 | #include <qpe/global.h> |
116 | 117 | ||
117 | #include <opie/xmltree.h> | 118 | #include <opie/xmltree.h> |
118 | #include "ocontactaccessbackend.h" | 119 | #include "ocontactaccessbackend.h" |
119 | #include "ocontactaccess.h" | 120 | #include "ocontactaccess.h" |
120 | 121 | ||
121 | #include <stdlib.h> | 122 | #include <stdlib.h> |
122 | #include <errno.h> | 123 | #include <errno.h> |
123 | 124 | ||
124 | using namespace Opie; | 125 | using namespace Opie; |
125 | 126 | ||
126 | 127 | ||
127 | OContactAccessBackend_XML::OContactAccessBackend_XML ( const QString& appname, const QString& filename ): | 128 | OContactAccessBackend_XML::OContactAccessBackend_XML ( const QString& appname, const QString& filename ): |
128 | m_changed( false ) | 129 | m_changed( false ) |
129 | { | 130 | { |
130 | // Just m_contactlist should call delete if an entry | 131 | // Just m_contactlist should call delete if an entry |
131 | // is removed. | 132 | // is removed. |
132 | m_contactList.setAutoDelete( true ); | 133 | m_contactList.setAutoDelete( true ); |
133 | m_uidToContact.setAutoDelete( false ); | 134 | m_uidToContact.setAutoDelete( false ); |
134 | 135 | ||
135 | m_appName = appname; | 136 | m_appName = appname; |
136 | 137 | ||
137 | /* Set journalfile name ... */ | 138 | /* Set journalfile name ... */ |
138 | m_journalName = getenv("HOME"); | 139 | m_journalName = getenv("HOME"); |
139 | m_journalName +="/.abjournal" + appname; | 140 | m_journalName +="/.abjournal" + appname; |
140 | 141 | ||
141 | /* Expecting to access the default filename if nothing else is set */ | 142 | /* Expecting to access the default filename if nothing else is set */ |
142 | if ( filename.isEmpty() ){ | 143 | if ( filename.isEmpty() ){ |
143 | m_fileName = Global::applicationFileName( "addressbook","addressbook.xml" ); | 144 | m_fileName = Global::applicationFileName( "addressbook","addressbook.xml" ); |
144 | } else | 145 | } else |
145 | m_fileName = filename; | 146 | m_fileName = filename; |
146 | 147 | ||
147 | /* Load Database now */ | 148 | /* Load Database now */ |
148 | load (); | 149 | load (); |
149 | } | 150 | } |
150 | 151 | ||
151 | bool OContactAccessBackend_XML::save() | 152 | bool OContactAccessBackend_XML::save() |
152 | { | 153 | { |
153 | 154 | ||
154 | if ( !m_changed ) | 155 | if ( !m_changed ) |
155 | return true; | 156 | return true; |
156 | 157 | ||
157 | QString strNewFile = m_fileName + ".new"; | 158 | QString strNewFile = m_fileName + ".new"; |
158 | QFile f( strNewFile ); | 159 | QFile f( strNewFile ); |
159 | if ( !f.open( IO_WriteOnly|IO_Raw ) ) | 160 | if ( !f.open( IO_WriteOnly|IO_Raw ) ) |
160 | return false; | 161 | return false; |
161 | 162 | ||
162 | int total_written; | 163 | int total_written; |
163 | int idx_offset = 0; | 164 | int idx_offset = 0; |
164 | QString out; | 165 | QString out; |
165 | 166 | ||
166 | // Write Header | 167 | // Write Header |
167 | out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>\n" | 168 | out = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE Addressbook ><AddressBook>\n" |
168 | " <Groups>\n" | 169 | " <Groups>\n" |
169 | " </Groups>\n" | 170 | " </Groups>\n" |
170 | " <Contacts>\n"; | 171 | " <Contacts>\n"; |
171 | QCString cstr = out.utf8(); | 172 | QCString cstr = out.utf8(); |
172 | f.writeBlock( cstr.data(), cstr.length() ); | 173 | f.writeBlock( cstr.data(), cstr.length() ); |
173 | idx_offset += cstr.length(); | 174 | idx_offset += cstr.length(); |
174 | out = ""; | 175 | out = ""; |
175 | 176 | ||
176 | // Write all contacts | 177 | // Write all contacts |
177 | QListIterator<OContact> it( m_contactList ); | 178 | QListIterator<OContact> it( m_contactList ); |
178 | for ( ; it.current(); ++it ) { | 179 | for ( ; it.current(); ++it ) { |
179 | // qWarning(" Uid %d at Offset: %x", (*it)->uid(), idx_offset ); | 180 | // qWarning(" Uid %d at Offset: %x", (*it)->uid(), idx_offset ); |
180 | out += "<Contact "; | 181 | out += "<Contact "; |
181 | (*it)->save( out ); | 182 | (*it)->save( out ); |
182 | out += "/>\n"; | 183 | out += "/>\n"; |
183 | cstr = out.utf8(); | 184 | cstr = out.utf8(); |
184 | total_written = f.writeBlock( cstr.data(), cstr.length() ); | 185 | total_written = f.writeBlock( cstr.data(), cstr.length() ); |
185 | idx_offset += cstr.length(); | 186 | idx_offset += cstr.length(); |
186 | if ( total_written != int(cstr.length()) ) { | 187 | if ( total_written != int(cstr.length()) ) { |
187 | f.close(); | 188 | f.close(); |
188 | QFile::remove( strNewFile ); | 189 | QFile::remove( strNewFile ); |
189 | return false; | 190 | return false; |
190 | } | 191 | } |
191 | out = ""; | 192 | out = ""; |
192 | } | 193 | } |
193 | out += " </Contacts>\n</AddressBook>\n"; | 194 | out += " </Contacts>\n</AddressBook>\n"; |
194 | 195 | ||
195 | // Write Footer | 196 | // Write Footer |
196 | cstr = out.utf8(); | 197 | cstr = out.utf8(); |
197 | total_written = f.writeBlock( cstr.data(), cstr.length() ); | 198 | total_written = f.writeBlock( cstr.data(), cstr.length() ); |
198 | if ( total_written != int( cstr.length() ) ) { | 199 | if ( total_written != int( cstr.length() ) ) { |
199 | f.close(); | 200 | f.close(); |
200 | QFile::remove( strNewFile ); | 201 | QFile::remove( strNewFile ); |
201 | return false; | 202 | return false; |
202 | } | 203 | } |
203 | f.close(); | 204 | f.close(); |
204 | 205 | ||
205 | // move the file over, I'm just going to use the system call | 206 | // move the file over, I'm just going to use the system call |
206 | // because, I don't feel like using QDir. | 207 | // because, I don't feel like using QDir. |
207 | if ( ::rename( strNewFile.latin1(), m_fileName.latin1() ) < 0 ) { | 208 | if ( ::rename( strNewFile.latin1(), m_fileName.latin1() ) < 0 ) { |
208 | qWarning( "problem renaming file %s to %s, errno: %d", | 209 | qWarning( "problem renaming file %s to %s, errno: %d", |
209 | strNewFile.latin1(), m_journalName.latin1(), errno ); | 210 | strNewFile.latin1(), m_journalName.latin1(), errno ); |
210 | // remove the tmp file... | 211 | // remove the tmp file... |
211 | QFile::remove( strNewFile ); | 212 | QFile::remove( strNewFile ); |
212 | } | 213 | } |
213 | 214 | ||
214 | /* The journalfile should be removed now... */ | 215 | /* The journalfile should be removed now... */ |
215 | removeJournal(); | 216 | removeJournal(); |
216 | 217 | ||
217 | m_changed = false; | 218 | m_changed = false; |
218 | return true; | 219 | return true; |
219 | } | 220 | } |
220 | 221 | ||
221 | bool OContactAccessBackend_XML::load () | 222 | bool OContactAccessBackend_XML::load () |
222 | { | 223 | { |
223 | m_contactList.clear(); | 224 | m_contactList.clear(); |
224 | m_uidToContact.clear(); | 225 | m_uidToContact.clear(); |
225 | 226 | ||
226 | /* Load XML-File and journal if it exists */ | 227 | /* Load XML-File and journal if it exists */ |
227 | if ( !load ( m_fileName, false ) ) | 228 | if ( !load ( m_fileName, false ) ) |
228 | return false; | 229 | return false; |
229 | /* The returncode of the journalfile is ignored due to the | 230 | /* The returncode of the journalfile is ignored due to the |
230 | * fact that it does not exist when this class is instantiated ! | 231 | * fact that it does not exist when this class is instantiated ! |
231 | * But there may such a file exist, if the application crashed. | 232 | * But there may such a file exist, if the application crashed. |
232 | * Therefore we try to load it to get the changes before the # | 233 | * Therefore we try to load it to get the changes before the # |
233 | * crash happened... | 234 | * crash happened... |
234 | */ | 235 | */ |
235 | load (m_journalName, true); | 236 | load (m_journalName, true); |
236 | 237 | ||
237 | return true; | 238 | return true; |
238 | } | 239 | } |
239 | 240 | ||
240 | void OContactAccessBackend_XML::clear () | 241 | void OContactAccessBackend_XML::clear () |
241 | { | 242 | { |
242 | m_contactList.clear(); | 243 | m_contactList.clear(); |
243 | m_uidToContact.clear(); | 244 | m_uidToContact.clear(); |
244 | 245 | ||
245 | m_changed = false; | 246 | m_changed = false; |
246 | } | 247 | } |
247 | 248 | ||
248 | bool OContactAccessBackend_XML::wasChangedExternally() | 249 | bool OContactAccessBackend_XML::wasChangedExternally() |
249 | { | 250 | { |
250 | QFileInfo fi( m_fileName ); | 251 | QFileInfo fi( m_fileName ); |
251 | 252 | ||
252 | QDateTime lastmod = fi.lastModified (); | 253 | QDateTime lastmod = fi.lastModified (); |
253 | 254 | ||
254 | return (lastmod != m_readtime); | 255 | return (lastmod != m_readtime); |
255 | } | 256 | } |
256 | 257 | ||
257 | QArray<int> OContactAccessBackend_XML::allRecords() const | 258 | QArray<int> OContactAccessBackend_XML::allRecords() const |
258 | { | 259 | { |
259 | QArray<int> uid_list( m_contactList.count() ); | 260 | QArray<int> uid_list( m_contactList.count() ); |
260 | 261 | ||
261 | uint counter = 0; | 262 | uint counter = 0; |
262 | QListIterator<OContact> it( m_contactList ); | 263 | QListIterator<OContact> it( m_contactList ); |
263 | for( ; it.current(); ++it ){ | 264 | for( ; it.current(); ++it ){ |
264 | uid_list[counter++] = (*it)->uid(); | 265 | uid_list[counter++] = (*it)->uid(); |
265 | } | 266 | } |
266 | 267 | ||
267 | return ( uid_list ); | 268 | return ( uid_list ); |
268 | } | 269 | } |
269 | 270 | ||
270 | OContact OContactAccessBackend_XML::find ( int uid ) const | 271 | OContact OContactAccessBackend_XML::find ( int uid ) const |
271 | { | 272 | { |
272 | OContact foundContact; //Create empty contact | 273 | OContact foundContact; //Create empty contact |
273 | 274 | ||
274 | OContact* found = m_uidToContact.find( QString().setNum( uid ) ); | 275 | OContact* found = m_uidToContact.find( QString().setNum( uid ) ); |
275 | 276 | ||
276 | if ( found ){ | 277 | if ( found ){ |
277 | foundContact = *found; | 278 | foundContact = *found; |
278 | } | 279 | } |
279 | 280 | ||
280 | return ( foundContact ); | 281 | return ( foundContact ); |
281 | } | 282 | } |
282 | 283 | ||
283 | QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, int settings, | 284 | QArray<int> OContactAccessBackend_XML::queryByExample ( const OContact &query, int settings, |
284 | const QDateTime& d ) | 285 | const QDateTime& d ) |
285 | { | 286 | { |
286 | 287 | ||
287 | QArray<int> m_currentQuery( m_contactList.count() ); | 288 | QArray<int> m_currentQuery( m_contactList.count() ); |
288 | QListIterator<OContact> it( m_contactList ); | 289 | QListIterator<OContact> it( m_contactList ); |
289 | uint arraycounter = 0; | 290 | uint arraycounter = 0; |
290 | 291 | ||
291 | for( ; it.current(); ++it ){ | 292 | for( ; it.current(); ++it ){ |
292 | /* Search all fields and compare them with query object. Store them into list | 293 | /* Search all fields and compare them with query object. Store them into list |
293 | * if all fields matches. | 294 | * if all fields matches. |
294 | */ | 295 | */ |
295 | QDate* queryDate = 0l; | 296 | QDate* queryDate = 0l; |
296 | QDate* checkDate = 0l; | 297 | QDate* checkDate = 0l; |
297 | bool allcorrect = true; | 298 | bool allcorrect = true; |
298 | for ( int i = 0; i < Qtopia::Groups; i++ ) { | 299 | for ( int i = 0; i < Qtopia::Groups; i++ ) { |
299 | // Birthday and anniversary are special nonstring fields and should | 300 | // Birthday and anniversary are special nonstring fields and should |
300 | // be handled specially | 301 | // be handled specially |
301 | switch ( i ){ | 302 | switch ( i ){ |
302 | case Qtopia::Birthday: | 303 | case Qtopia::Birthday: |
303 | queryDate = new QDate( query.birthday() ); | 304 | queryDate = new QDate( query.birthday() ); |
304 | checkDate = new QDate( (*it)->birthday() ); | 305 | checkDate = new QDate( (*it)->birthday() ); |
305 | case Qtopia::Anniversary: | 306 | case Qtopia::Anniversary: |
diff --git a/libopie/pim/otodo.cpp b/libopie/pim/otodo.cpp index 189bf94..b2c76f8 100644 --- a/libopie/pim/otodo.cpp +++ b/libopie/pim/otodo.cpp | |||
@@ -1,204 +1,203 @@ | |||
1 | 1 | ||
2 | #include <qobject.h> | 2 | #include <qobject.h> |
3 | #include <qshared.h> | 3 | #include <qshared.h> |
4 | 4 | ||
5 | 5 | ||
6 | 6 | ||
7 | #include <qpe/palmtopuidgen.h> | 7 | #include <qpe/palmtopuidgen.h> |
8 | #include <qpe/stringutil.h> | ||
9 | #include <qpe/palmtoprecord.h> | 8 | #include <qpe/palmtoprecord.h> |
10 | #include <qpe/stringutil.h> | ||
11 | #include <qpe/categories.h> | 9 | #include <qpe/categories.h> |
12 | #include <qpe/categoryselect.h> | 10 | #include <qpe/categoryselect.h> |
11 | #include <qpe/stringutil.h> | ||
13 | 12 | ||
14 | 13 | ||
15 | #include "opimstate.h" | 14 | #include "opimstate.h" |
16 | #include "orecur.h" | 15 | #include "orecur.h" |
17 | #include "opimmaintainer.h" | 16 | #include "opimmaintainer.h" |
18 | #include "opimnotifymanager.h" | 17 | #include "opimnotifymanager.h" |
19 | #include "opimresolver.h" | 18 | #include "opimresolver.h" |
20 | 19 | ||
21 | #include "otodo.h" | 20 | #include "otodo.h" |
22 | 21 | ||
23 | 22 | ||
24 | struct OTodo::OTodoData : public QShared { | 23 | struct OTodo::OTodoData : public QShared { |
25 | OTodoData() : QShared() { | 24 | OTodoData() : QShared() { |
26 | recur = 0; | 25 | recur = 0; |
27 | state = 0; | 26 | state = 0; |
28 | maintainer = 0; | 27 | maintainer = 0; |
29 | notifiers = 0; | 28 | notifiers = 0; |
30 | }; | 29 | }; |
31 | ~OTodoData() { | 30 | ~OTodoData() { |
32 | delete recur; | 31 | delete recur; |
33 | delete maintainer; | 32 | delete maintainer; |
34 | delete notifiers; | 33 | delete notifiers; |
35 | } | 34 | } |
36 | 35 | ||
37 | QDate date; | 36 | QDate date; |
38 | bool isCompleted:1; | 37 | bool isCompleted:1; |
39 | bool hasDate:1; | 38 | bool hasDate:1; |
40 | int priority; | 39 | int priority; |
41 | QString desc; | 40 | QString desc; |
42 | QString sum; | 41 | QString sum; |
43 | QMap<QString, QString> extra; | 42 | QMap<QString, QString> extra; |
44 | ushort prog; | 43 | ushort prog; |
45 | OPimState *state; | 44 | OPimState *state; |
46 | ORecur *recur; | 45 | ORecur *recur; |
47 | OPimMaintainer *maintainer; | 46 | OPimMaintainer *maintainer; |
48 | QDate start; | 47 | QDate start; |
49 | QDate completed; | 48 | QDate completed; |
50 | OPimNotifyManager *notifiers; | 49 | OPimNotifyManager *notifiers; |
51 | }; | 50 | }; |
52 | 51 | ||
53 | OTodo::OTodo(const OTodo &event ) | 52 | OTodo::OTodo(const OTodo &event ) |
54 | : OPimRecord( event ), data( event.data ) | 53 | : OPimRecord( event ), data( event.data ) |
55 | { | 54 | { |
56 | data->ref(); | 55 | data->ref(); |
57 | // qWarning("ref up"); | 56 | // qWarning("ref up"); |
58 | } | 57 | } |
59 | OTodo::~OTodo() { | 58 | OTodo::~OTodo() { |
60 | 59 | ||
61 | // qWarning("~OTodo " ); | 60 | // qWarning("~OTodo " ); |
62 | if ( data->deref() ) { | 61 | if ( data->deref() ) { |
63 | // qWarning("OTodo::dereffing"); | 62 | // qWarning("OTodo::dereffing"); |
64 | delete data; | 63 | delete data; |
65 | data = 0l; | 64 | data = 0l; |
66 | } | 65 | } |
67 | } | 66 | } |
68 | OTodo::OTodo(bool completed, int priority, | 67 | OTodo::OTodo(bool completed, int priority, |
69 | const QArray<int> &category, | 68 | const QArray<int> &category, |
70 | const QString& summary, | 69 | const QString& summary, |
71 | const QString &description, | 70 | const QString &description, |
72 | ushort progress, | 71 | ushort progress, |
73 | bool hasDate, QDate date, int uid ) | 72 | bool hasDate, QDate date, int uid ) |
74 | : OPimRecord( uid ) | 73 | : OPimRecord( uid ) |
75 | { | 74 | { |
76 | // qWarning("OTodoData " + summary); | 75 | // qWarning("OTodoData " + summary); |
77 | setCategories( category ); | 76 | setCategories( category ); |
78 | 77 | ||
79 | data = new OTodoData; | 78 | data = new OTodoData; |
80 | 79 | ||
81 | data->date = date; | 80 | data->date = date; |
82 | data->isCompleted = completed; | 81 | data->isCompleted = completed; |
83 | data->hasDate = hasDate; | 82 | data->hasDate = hasDate; |
84 | data->priority = priority; | 83 | data->priority = priority; |
85 | data->sum = summary; | 84 | data->sum = summary; |
86 | data->prog = progress; | 85 | data->prog = progress; |
87 | data->desc = Qtopia::simplifyMultiLineSpace(description ); | 86 | data->desc = Qtopia::simplifyMultiLineSpace(description ); |
88 | } | 87 | } |
89 | OTodo::OTodo(bool completed, int priority, | 88 | OTodo::OTodo(bool completed, int priority, |
90 | const QStringList &category, | 89 | const QStringList &category, |
91 | const QString& summary, | 90 | const QString& summary, |
92 | const QString &description, | 91 | const QString &description, |
93 | ushort progress, | 92 | ushort progress, |
94 | bool hasDate, QDate date, int uid ) | 93 | bool hasDate, QDate date, int uid ) |
95 | : OPimRecord( uid ) | 94 | : OPimRecord( uid ) |
96 | { | 95 | { |
97 | // qWarning("OTodoData" + summary); | 96 | // qWarning("OTodoData" + summary); |
98 | setCategories( idsFromString( category.join(";") ) ); | 97 | setCategories( idsFromString( category.join(";") ) ); |
99 | 98 | ||
100 | data = new OTodoData; | 99 | data = new OTodoData; |
101 | 100 | ||
102 | data->date = date; | 101 | data->date = date; |
103 | data->isCompleted = completed; | 102 | data->isCompleted = completed; |
104 | data->hasDate = hasDate; | 103 | data->hasDate = hasDate; |
105 | data->priority = priority; | 104 | data->priority = priority; |
106 | data->sum = summary; | 105 | data->sum = summary; |
107 | data->prog = progress; | 106 | data->prog = progress; |
108 | data->desc = Qtopia::simplifyMultiLineSpace(description ); | 107 | data->desc = Qtopia::simplifyMultiLineSpace(description ); |
109 | } | 108 | } |
110 | bool OTodo::match( const QRegExp ®Exp )const | 109 | bool OTodo::match( const QRegExp ®Exp )const |
111 | { | 110 | { |
112 | if( QString::number( data->priority ).find( regExp ) != -1 ){ | 111 | if( QString::number( data->priority ).find( regExp ) != -1 ){ |
113 | setLastHitField( Priority ); | 112 | setLastHitField( Priority ); |
114 | return true; | 113 | return true; |
115 | }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){ | 114 | }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){ |
116 | setLastHitField( HasDate ); | 115 | setLastHitField( HasDate ); |
117 | return true; | 116 | return true; |
118 | }else if(data->desc.find( regExp ) != -1 ){ | 117 | }else if(data->desc.find( regExp ) != -1 ){ |
119 | setLastHitField( Description ); | 118 | setLastHitField( Description ); |
120 | return true; | 119 | return true; |
121 | }else if(data->sum.find( regExp ) != -1 ) { | 120 | }else if(data->sum.find( regExp ) != -1 ) { |
122 | setLastHitField( Summary ); | 121 | setLastHitField( Summary ); |
123 | return true; | 122 | return true; |
124 | } | 123 | } |
125 | return false; | 124 | return false; |
126 | } | 125 | } |
127 | bool OTodo::isCompleted() const | 126 | bool OTodo::isCompleted() const |
128 | { | 127 | { |
129 | return data->isCompleted; | 128 | return data->isCompleted; |
130 | } | 129 | } |
131 | bool OTodo::hasDueDate() const | 130 | bool OTodo::hasDueDate() const |
132 | { | 131 | { |
133 | return data->hasDate; | 132 | return data->hasDate; |
134 | } | 133 | } |
135 | bool OTodo::hasStartDate()const { | 134 | bool OTodo::hasStartDate()const { |
136 | return data->start.isValid(); | 135 | return data->start.isValid(); |
137 | } | 136 | } |
138 | bool OTodo::hasCompletedDate()const { | 137 | bool OTodo::hasCompletedDate()const { |
139 | return data->completed.isValid(); | 138 | return data->completed.isValid(); |
140 | } | 139 | } |
141 | int OTodo::priority()const | 140 | int OTodo::priority()const |
142 | { | 141 | { |
143 | return data->priority; | 142 | return data->priority; |
144 | } | 143 | } |
145 | QString OTodo::summary() const | 144 | QString OTodo::summary() const |
146 | { | 145 | { |
147 | return data->sum; | 146 | return data->sum; |
148 | } | 147 | } |
149 | ushort OTodo::progress() const | 148 | ushort OTodo::progress() const |
150 | { | 149 | { |
151 | return data->prog; | 150 | return data->prog; |
152 | } | 151 | } |
153 | QDate OTodo::dueDate()const | 152 | QDate OTodo::dueDate()const |
154 | { | 153 | { |
155 | return data->date; | 154 | return data->date; |
156 | } | 155 | } |
157 | QDate OTodo::startDate()const { | 156 | QDate OTodo::startDate()const { |
158 | return data->start; | 157 | return data->start; |
159 | } | 158 | } |
160 | QDate OTodo::completedDate()const { | 159 | QDate OTodo::completedDate()const { |
161 | return data->completed; | 160 | return data->completed; |
162 | } | 161 | } |
163 | QString OTodo::description()const | 162 | QString OTodo::description()const |
164 | { | 163 | { |
165 | return data->desc; | 164 | return data->desc; |
166 | } | 165 | } |
167 | bool OTodo::hasState() const{ | 166 | bool OTodo::hasState() const{ |
168 | if (!data->state ) return false; | 167 | if (!data->state ) return false; |
169 | return ( data->state->state() != OPimState::Undefined ); | 168 | return ( data->state->state() != OPimState::Undefined ); |
170 | } | 169 | } |
171 | OPimState OTodo::state()const { | 170 | OPimState OTodo::state()const { |
172 | if (!data->state ) { | 171 | if (!data->state ) { |
173 | OPimState state; | 172 | OPimState state; |
174 | return state; | 173 | return state; |
175 | } | 174 | } |
176 | 175 | ||
177 | return (*data->state); | 176 | return (*data->state); |
178 | } | 177 | } |
179 | bool OTodo::hasRecurrence()const { | 178 | bool OTodo::hasRecurrence()const { |
180 | if (!data->recur) return false; | 179 | if (!data->recur) return false; |
181 | return data->recur->doesRecur(); | 180 | return data->recur->doesRecur(); |
182 | } | 181 | } |
183 | ORecur OTodo::recurrence()const { | 182 | ORecur OTodo::recurrence()const { |
184 | if (!data->recur) return ORecur(); | 183 | if (!data->recur) return ORecur(); |
185 | 184 | ||
186 | return (*data->recur); | 185 | return (*data->recur); |
187 | } | 186 | } |
188 | bool OTodo::hasMaintainer()const { | 187 | bool OTodo::hasMaintainer()const { |
189 | if (!data->maintainer) return false; | 188 | if (!data->maintainer) return false; |
190 | 189 | ||
191 | return (data->maintainer->mode() != OPimMaintainer::Undefined ); | 190 | return (data->maintainer->mode() != OPimMaintainer::Undefined ); |
192 | } | 191 | } |
193 | OPimMaintainer OTodo::maintainer()const { | 192 | OPimMaintainer OTodo::maintainer()const { |
194 | if (!data->maintainer) return OPimMaintainer(); | 193 | if (!data->maintainer) return OPimMaintainer(); |
195 | 194 | ||
196 | return (*data->maintainer); | 195 | return (*data->maintainer); |
197 | } | 196 | } |
198 | void OTodo::setCompleted( bool completed ) | 197 | void OTodo::setCompleted( bool completed ) |
199 | { | 198 | { |
200 | changeOrModify(); | 199 | changeOrModify(); |
201 | data->isCompleted = completed; | 200 | data->isCompleted = completed; |
202 | } | 201 | } |
203 | void OTodo::setHasDueDate( bool hasDate ) | 202 | void OTodo::setHasDueDate( bool hasDate ) |
204 | { | 203 | { |