summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opieui/olistview.cpp8
-rw-r--r--libopie2/opieui/opopupmenu.cpp4
-rw-r--r--libopie2/opieui/oselector.cpp2
-rw-r--r--libopie2/opieui/oselector.h4
-rw-r--r--libopie2/qt3/opiecore/osortablevaluelist.h2
-rw-r--r--libopie2/qt3/opieui/ocombobox.cpp6
-rw-r--r--libopie2/qt3/opieui/oeditlistbox.cpp6
-rw-r--r--libopie2/qt3/opieui/olineedit.cpp6
8 files changed, 19 insertions, 19 deletions
diff --git a/libopie2/opieui/olistview.cpp b/libopie2/opieui/olistview.cpp
index 67b4b83..4386e0e 100644
--- a/libopie2/opieui/olistview.cpp
+++ b/libopie2/opieui/olistview.cpp
@@ -1,768 +1,768 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3 =. (C) 2003-2004 Michael 'Mickey' Lauer <mickey@Vanille.de> 3 =. (C) 2003-2004 Michael 'Mickey' Lauer <mickey@Vanille.de>
4 .=l. 4 .=l.
5           .>+-= 5           .>+-=
6 _;:,     .>    :=|. This program is free software; you can 6 _;:,     .>    :=|. This program is free software; you can
7.> <`_,   >  .   <= redistribute it and/or modify it under 7.> <`_,   >  .   <= redistribute it and/or modify it under
8:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 8:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
9.="- .-=="i,     .._ License as published by the Free Software 9.="- .-=="i,     .._ License as published by the Free Software
10 - .   .-<_>     .<> Foundation; either version 2 of the License, 10 - .   .-<_>     .<> Foundation; either version 2 of the License,
11     ._= =}       : or (at your option) any later version. 11     ._= =}       : or (at your option) any later version.
12    .%`+i>       _;_. 12    .%`+i>       _;_.
13    .i_,=:_.      -<s. This program is distributed in the hope that 13    .i_,=:_.      -<s. This program is distributed in the hope that
14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 14     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
15    : ..    .:,     . . . without even the implied warranty of 15    : ..    .:,     . . . without even the implied warranty of
16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 16    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 17  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
18..}^=.=       =       ; Library General Public License for more 18..}^=.=       =       ; Library General Public License for more
19++=   -.     .`     .: details. 19++=   -.     .`     .: details.
20 :     =  ...= . :.=- 20 :     =  ...= . :.=-
21 -.   .:....=;==+<; You should have received a copy of the GNU 21 -.   .:....=;==+<; You should have received a copy of the GNU
22  -_. . .   )=.  = Library General Public License along with 22  -_. . .   )=.  = Library General Public License along with
23    --        :-=` this library; see the file COPYING.LIB. 23    --        :-=` this library; see the file COPYING.LIB.
24 If not, write to the Free Software Foundation, 24 If not, write to the Free Software Foundation,
25 Inc., 59 Temple Place - Suite 330, 25 Inc., 59 Temple Place - Suite 330,
26 Boston, MA 02111-1307, USA. 26 Boston, MA 02111-1307, USA.
27 27
28*/ 28*/
29 29
30/* QT */ 30/* QT */
31 31
32#include <qpixmap.h> 32#include <qpixmap.h>
33 33
34/* OPIE */ 34/* OPIE */
35 35
36#include <opie2/odebug.h> 36#include <opie2/odebug.h>
37#include <opie2/olistview.h> 37#include <opie2/olistview.h>
38 38
39using namespace Opie::Core; 39using namespace Opie::Core;
40 40
41 41
42namespace Opie { 42namespace Opie {
43namespace Ui { 43namespace Ui {
44/*====================================================================================== 44/*======================================================================================
45 * OListView 45 * OListView
46 *======================================================================================*/ 46 *======================================================================================*/
47 47
48OListView::OListView( QWidget *parent, const char *name, WFlags fl ) 48OListView::OListView( QWidget *parent, const char *name, WFlags fl )
49 :QListView( parent, name, fl ) 49 :QListView( parent, name, fl )
50{ 50{
51 //FIXME: get from global settings and calculate ==> see oglobalsettings.* 51 //FIXME: get from global settings and calculate ==> see oglobalsettings.*
52 52
53 m_alternateBackground = QColor( 238, 246, 255 ); 53 m_alternateBackground = QColor( 238, 246, 255 );
54 m_columnSeparator = QPen( QColor( 150, 160, 170 ), 0, DotLine ); 54 m_columnSeparator = QPen( QColor( 150, 160, 170 ), 0, DotLine );
55 m_fullWidth = true; 55 m_fullWidth = true;
56 connect( this, SIGNAL(expanded(QListViewItem*)), SLOT(expand(QListViewItem*))); 56 connect( this, SIGNAL(expanded(QListViewItem*)), SLOT(expand(QListViewItem*)));
57} 57}
58 58
59OListView::~OListView() 59OListView::~OListView()
60{ 60{
61} 61}
62 62
63void OListView::setFullWidth( bool fullWidth ) 63void OListView::setFullWidth( bool fullWidth )
64{ 64{
65 m_fullWidth = fullWidth; 65 m_fullWidth = fullWidth;
66 #if QT_VERSION > 290 66 #if QT_VERSION >= 0x030000
67 header()->setStretchEnabled( fullWidth, columns()-1 ); 67 header()->setStretchEnabled( fullWidth, columns()-1 );
68 #endif 68 #endif
69} 69}
70 70
71bool OListView::fullWidth() const 71bool OListView::fullWidth() const
72{ 72{
73 return m_fullWidth; 73 return m_fullWidth;
74} 74}
75 75
76int OListView::addColumn( const QString& label, int width ) 76int OListView::addColumn( const QString& label, int width )
77{ 77{
78 int result = QListView::addColumn( label, width ); 78 int result = QListView::addColumn( label, width );
79 #if QT_VERSION > 290 79 #if QT_VERSION >= 0x030000
80 if (m_fullWidth) { 80 if (m_fullWidth) {
81 header()->setStretchEnabled( false, columns()-2 ); 81 header()->setStretchEnabled( false, columns()-2 );
82 header()->setStretchEnabled( true, columns()-1 ); 82 header()->setStretchEnabled( true, columns()-1 );
83 } 83 }
84 #endif 84 #endif
85 return result; 85 return result;
86} 86}
87 87
88int OListView::addColumn( const QIconSet& iconset, const QString& label, int width ) 88int OListView::addColumn( const QIconSet& iconset, const QString& label, int width )
89{ 89{
90 int result = QListView::addColumn( iconset, label, width ); 90 int result = QListView::addColumn( iconset, label, width );
91 #if QT_VERSION > 290 91 #if QT_VERSION >= 0x030000
92 if (m_fullWidth) { 92 if (m_fullWidth) {
93 header()->setStretchEnabled( false, columns()-2 ); 93 header()->setStretchEnabled( false, columns()-2 );
94 header()->setStretchEnabled( true, columns()-1 ); 94 header()->setStretchEnabled( true, columns()-1 );
95 } 95 }
96 #endif 96 #endif
97 return result; 97 return result;
98} 98}
99 99
100void OListView::removeColumn( int index ) 100void OListView::removeColumn( int index )
101{ 101{
102 QListView::removeColumn(index); 102 QListView::removeColumn(index);
103 #if QT_VERSION > 290 103 #if QT_VERSION >= 0x030000
104 if ( m_fullWidth && index == columns() ) 104 if ( m_fullWidth && index == columns() )
105 { 105 {
106 header()->setStretchEnabled( true, columns()-1 ); 106 header()->setStretchEnabled( true, columns()-1 );
107 } 107 }
108 #endif 108 #endif
109} 109}
110 110
111const QColor& OListView::alternateBackground() const 111const QColor& OListView::alternateBackground() const
112{ 112{
113 return m_alternateBackground; 113 return m_alternateBackground;
114} 114}
115 115
116void OListView::setAlternateBackground( const QColor &c ) 116void OListView::setAlternateBackground( const QColor &c )
117{ 117{
118 m_alternateBackground = c; 118 m_alternateBackground = c;
119 repaint(); 119 repaint();
120} 120}
121 121
122const QPen& OListView::columnSeparator() const 122const QPen& OListView::columnSeparator() const
123{ 123{
124 return m_columnSeparator; 124 return m_columnSeparator;
125} 125}
126 126
127void OListView::setColumnSeparator( const QPen& p ) 127void OListView::setColumnSeparator( const QPen& p )
128{ 128{
129 m_columnSeparator = p; 129 m_columnSeparator = p;
130 repaint(); 130 repaint();
131} 131}
132 132
133void OListView::expand(QListViewItem *item) 133void OListView::expand(QListViewItem *item)
134{ 134{
135 ((OListViewItem*)item)->expand(); 135 ((OListViewItem*)item)->expand();
136} 136}
137 137
138OListViewItem* OListView::childFactory() 138OListViewItem* OListView::childFactory()
139{ 139{
140 return new OListViewItem( this ); 140 return new OListViewItem( this );
141} 141}
142 142
143#ifndef QT_NO_DATASTREAM 143#ifndef QT_NO_DATASTREAM
144void OListView::serializeTo( QDataStream& s ) const 144void OListView::serializeTo( QDataStream& s ) const
145{ 145{
146 #warning Caution... the binary format is still under construction... 146 #warning Caution... the binary format is still under construction...
147 odebug << "storing OListView..." << oendl; 147 odebug << "storing OListView..." << oendl;
148 148
149 // store number of columns and the labels 149 // store number of columns and the labels
150 s << columns(); 150 s << columns();
151 for ( int i = 0; i < columns(); ++i ) 151 for ( int i = 0; i < columns(); ++i )
152 s << columnText( i ); 152 s << columnText( i );
153 153
154 // calculate the number of top-level items to serialize 154 // calculate the number of top-level items to serialize
155 int items = 0; 155 int items = 0;
156 QListViewItem* item = firstChild(); 156 QListViewItem* item = firstChild();
157 while ( item ) 157 while ( item )
158 { 158 {
159 item = item->nextSibling(); 159 item = item->nextSibling();
160 items++; 160 items++;
161 } 161 }
162 162
163 // store number of items and the items itself 163 // store number of items and the items itself
164 s << items; 164 s << items;
165 item = firstChild(); 165 item = firstChild();
166 for ( int i = 0; i < items; ++i ) 166 for ( int i = 0; i < items; ++i )
167 { 167 {
168 s << *static_cast<OListViewItem*>( item ); 168 s << *static_cast<OListViewItem*>( item );
169 item = item->nextSibling(); 169 item = item->nextSibling();
170 } 170 }
171 171
172 odebug << "OListview stored." << oendl; 172 odebug << "OListview stored." << oendl;
173} 173}
174 174
175void OListView::serializeFrom( QDataStream& s ) 175void OListView::serializeFrom( QDataStream& s )
176{ 176{
177 #warning Caution... the binary format is still under construction... 177 #warning Caution... the binary format is still under construction...
178 odebug << "loading OListView..." << oendl; 178 odebug << "loading OListView..." << oendl;
179 179
180 int cols; 180 int cols;
181 s >> cols; 181 s >> cols;
182 odebug << "read number of columns = " << cols << oendl; 182 odebug << "read number of columns = " << cols << oendl;
183 183
184 while ( columns() < cols ) addColumn( QString::null ); 184 while ( columns() < cols ) addColumn( QString::null );
185 185
186 for ( int i = 0; i < cols; ++i ) 186 for ( int i = 0; i < cols; ++i )
187 { 187 {
188 QString coltext; 188 QString coltext;
189 s >> coltext; 189 s >> coltext;
190 odebug << "read text '" << coltext << "' for column " << i << "" << oendl; 190 odebug << "read text '" << coltext << "' for column " << i << "" << oendl;
191 setColumnText( i, coltext ); 191 setColumnText( i, coltext );
192 } 192 }
193 193
194 int items; 194 int items;
195 s >> items; 195 s >> items;
196 odebug << "read number of items = " << items << oendl; 196 odebug << "read number of items = " << items << oendl;
197 197
198 for ( int i = 0; i < items; ++i ) 198 for ( int i = 0; i < items; ++i )
199 { 199 {
200 OListViewItem* item = childFactory(); 200 OListViewItem* item = childFactory();
201 s >> *item; 201 s >> *item;
202 } 202 }
203 203
204 odebug << "OListView loaded." << oendl; 204 odebug << "OListView loaded." << oendl;
205 205
206} 206}
207 207
208 208
209void OListView::expand() 209void OListView::expand()
210{ 210{
211 odebug << "OListView::expand" << oendl; 211 odebug << "OListView::expand" << oendl;
212 212
213 QListViewItemIterator it( this ); 213 QListViewItemIterator it( this );
214 while ( it.current() ) { 214 while ( it.current() ) {
215 it.current()->setOpen( true ); 215 it.current()->setOpen( true );
216 ++it; 216 ++it;
217 } 217 }
218} 218}
219 219
220 220
221void OListView::collapse() 221void OListView::collapse()
222{ 222{
223 odebug << "OListView::collapse" << oendl; 223 odebug << "OListView::collapse" << oendl;
224 QListViewItemIterator it( this ); 224 QListViewItemIterator it( this );
225 while ( it.current() ) { 225 while ( it.current() ) {
226 it.current()->setOpen( false ); 226 it.current()->setOpen( false );
227 ++it; 227 ++it;
228 } 228 }
229} 229}
230 230
231 231
232QDataStream& operator<<( QDataStream& s, const OListView& lv ) 232QDataStream& operator<<( QDataStream& s, const OListView& lv )
233{ 233{
234 lv.serializeTo( s ); 234 lv.serializeTo( s );
235 return s; 235 return s;
236} 236}
237 237
238QDataStream& operator>>( QDataStream& s, OListView& lv ) 238QDataStream& operator>>( QDataStream& s, OListView& lv )
239{ 239{
240 lv.serializeFrom( s ); 240 lv.serializeFrom( s );
241 return s; 241 return s;
242} 242}
243#endif // QT_NO_DATASTREAM 243#endif // QT_NO_DATASTREAM
244 244
245/*====================================================================================== 245/*======================================================================================
246 * OListViewItem 246 * OListViewItem
247 *======================================================================================*/ 247 *======================================================================================*/
248 248
249OListViewItem::OListViewItem(QListView *parent) 249OListViewItem::OListViewItem(QListView *parent)
250 : QListViewItem(parent) 250 : QListViewItem(parent)
251{ 251{
252 init(); 252 init();
253} 253}
254 254
255 255
256OListViewItem::OListViewItem(QListViewItem *parent) 256OListViewItem::OListViewItem(QListViewItem *parent)
257 : QListViewItem(parent) 257 : QListViewItem(parent)
258{ 258{
259 init(); 259 init();
260} 260}
261 261
262 262
263OListViewItem::OListViewItem(QListView *parent, QListViewItem *after) 263OListViewItem::OListViewItem(QListView *parent, QListViewItem *after)
264 : QListViewItem(parent, after) 264 : QListViewItem(parent, after)
265{ 265{
266 init(); 266 init();
267} 267}
268 268
269 269
270OListViewItem::OListViewItem(QListViewItem *parent, QListViewItem *after) 270OListViewItem::OListViewItem(QListViewItem *parent, QListViewItem *after)
271 : QListViewItem(parent, after) 271 : QListViewItem(parent, after)
272{ 272{
273 init(); 273 init();
274} 274}
275 275
276 276
277OListViewItem::OListViewItem(QListView *parent, 277OListViewItem::OListViewItem(QListView *parent,
278 QString label1, QString label2, QString label3, QString label4, 278 QString label1, QString label2, QString label3, QString label4,
279 QString label5, QString label6, QString label7, QString label8) 279 QString label5, QString label6, QString label7, QString label8)
280 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) 280 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8)
281{ 281{
282 init(); 282 init();
283} 283}
284 284
285 285
286OListViewItem::OListViewItem(QListViewItem *parent, 286OListViewItem::OListViewItem(QListViewItem *parent,
287 QString label1, QString label2, QString label3, QString label4, 287 QString label1, QString label2, QString label3, QString label4,
288 QString label5, QString label6, QString label7, QString label8) 288 QString label5, QString label6, QString label7, QString label8)
289 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) 289 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8)
290{ 290{
291 init(); 291 init();
292} 292}
293 293
294 294
295OListViewItem::OListViewItem(QListView *parent, QListViewItem *after, 295OListViewItem::OListViewItem(QListView *parent, QListViewItem *after,
296 QString label1, QString label2, QString label3, QString label4, 296 QString label1, QString label2, QString label3, QString label4,
297 QString label5, QString label6, QString label7, QString label8) 297 QString label5, QString label6, QString label7, QString label8)
298 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) 298 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8)
299{ 299{
300 init(); 300 init();
301} 301}
302 302
303 303
304OListViewItem::OListViewItem(QListViewItem *parent, QListViewItem *after, 304OListViewItem::OListViewItem(QListViewItem *parent, QListViewItem *after,
305 QString label1, QString label2, QString label3, QString label4, 305 QString label1, QString label2, QString label3, QString label4,
306 QString label5, QString label6, QString label7, QString label8) 306 QString label5, QString label6, QString label7, QString label8)
307 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) 307 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8)
308{ 308{
309 init(); 309 init();
310} 310}
311 311
312 312
313OListViewItem::~OListViewItem() 313OListViewItem::~OListViewItem()
314{ 314{
315} 315}
316 316
317 317
318void OListViewItem::init() 318void OListViewItem::init()
319{ 319{
320 m_known = false; 320 m_known = false;
321} 321}
322 322
323 323
324const QColor &OListViewItem::backgroundColor() 324const QColor &OListViewItem::backgroundColor()
325{ 325{
326 return isAlternate() ? static_cast<OListView*>(listView())->alternateBackground() : 326 return isAlternate() ? static_cast<OListView*>(listView())->alternateBackground() :
327 listView()->viewport()->colorGroup().base(); 327 listView()->viewport()->colorGroup().base();
328} 328}
329 329
330 330
331bool OListViewItem::isAlternate() 331bool OListViewItem::isAlternate()
332{ 332{
333 OListView *lv = static_cast<OListView*>( listView() ); 333 OListView *lv = static_cast<OListView*>( listView() );
334 334
335 // check if the item above is an OListViewItem 335 // check if the item above is an OListViewItem
336 OListViewItem *above = static_cast<OListViewItem*>( itemAbove() ); 336 OListViewItem *above = static_cast<OListViewItem*>( itemAbove() );
337 /*if (! itemAbove()->inherits( "OListViewItem" )) return false;*/ 337 /*if (! itemAbove()->inherits( "OListViewItem" )) return false;*/
338 338
339 // check if we have a valid alternate background color 339 // check if we have a valid alternate background color
340 if (!(lv && lv->alternateBackground().isValid())) return false; 340 if (!(lv && lv->alternateBackground().isValid())) return false;
341 341
342 m_known = above ? above->m_known : true; 342 m_known = above ? above->m_known : true;
343 if (m_known) 343 if (m_known)
344 { 344 {
345 m_odd = above ? !above->m_odd : false; 345 m_odd = above ? !above->m_odd : false;
346 } 346 }
347 else 347 else
348 { 348 {
349 OListViewItem *item; 349 OListViewItem *item;
350 bool previous = true; 350 bool previous = true;
351 if (parent()) 351 if (parent())
352 { 352 {
353 item = static_cast<OListViewItem *>(parent()); 353 item = static_cast<OListViewItem *>(parent());
354 if ( item /*&& item->inherits( "OListViewItem" )*/ ) previous = item->m_odd; 354 if ( item /*&& item->inherits( "OListViewItem" )*/ ) previous = item->m_odd;
355 item = static_cast<OListViewItem *>(parent()->firstChild()); 355 item = static_cast<OListViewItem *>(parent()->firstChild());
356 /* if ( !item.inherits( "OListViewItem" ) item = 0; */ 356 /* if ( !item.inherits( "OListViewItem" ) item = 0; */
357 } 357 }
358 else 358 else
359 { 359 {
360 item = static_cast<OListViewItem *>(lv->firstChild()); 360 item = static_cast<OListViewItem *>(lv->firstChild());
361 } 361 }
362 362
363 while(item) 363 while(item)
364 { 364 {
365 item->m_odd = previous = !previous; 365 item->m_odd = previous = !previous;
366 item->m_known = true; 366 item->m_known = true;
367 item = static_cast<OListViewItem *>(item->nextSibling()); 367 item = static_cast<OListViewItem *>(item->nextSibling());
368 /* if (!item.inherits( "OListViewItem" ) ) break; */ 368 /* if (!item.inherits( "OListViewItem" ) ) break; */
369 } 369 }
370 } 370 }
371 return m_odd; 371 return m_odd;
372} 372}
373 373
374 374
375void OListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) 375void OListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
376{ 376{
377 QColorGroup _cg = cg; 377 QColorGroup _cg = cg;
378 const QPixmap *pm = listView()->viewport()->backgroundPixmap(); 378 const QPixmap *pm = listView()->viewport()->backgroundPixmap();
379 if (pm && !pm->isNull()) 379 if (pm && !pm->isNull())
380 { 380 {
381 _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) ); 381 _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) );
382 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); 382 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() );
383 } 383 }
384 else if ( isAlternate() ) 384 else if ( isAlternate() )
385 { 385 {
386 _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() ); 386 _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() );
387 } 387 }
388 QListViewItem::paintCell( p, _cg, column, width, alignment ); 388 QListViewItem::paintCell( p, _cg, column, width, alignment );
389 389
390 //FIXME: Use styling here! 390 //FIXME: Use styling here!
391 391
392 const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator(); 392 const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator();
393 p->setPen( pen ); 393 p->setPen( pen );
394 p->drawLine( width-1, 0, width-1, height() ); 394 p->drawLine( width-1, 0, width-1, height() );
395} 395}
396 396
397 397
398OListViewItem* OListViewItem::childFactory() 398OListViewItem* OListViewItem::childFactory()
399{ 399{
400 return new OListViewItem( this ); 400 return new OListViewItem( this );
401} 401}
402 402
403 403
404#ifndef QT_NO_DATASTREAM 404#ifndef QT_NO_DATASTREAM
405void OListViewItem::serializeTo( QDataStream& s ) const 405void OListViewItem::serializeTo( QDataStream& s ) const
406{ 406{
407 #warning Caution... the binary format is still under construction... 407 #warning Caution... the binary format is still under construction...
408 odebug << "storing OListViewItem..." << oendl; 408 odebug << "storing OListViewItem..." << oendl;
409 409
410 // store item text 410 // store item text
411 for ( int i = 0; i < listView()->columns(); ++i ) 411 for ( int i = 0; i < listView()->columns(); ++i )
412 { 412 {
413 s << text( i ); 413 s << text( i );
414 } 414 }
415 415
416 // calculate the number of children to serialize 416 // calculate the number of children to serialize
417 int items = 0; 417 int items = 0;
418 QListViewItem* item = firstChild(); 418 QListViewItem* item = firstChild();
419 while ( item ) 419 while ( item )
420 { 420 {
421 item = item->nextSibling(); 421 item = item->nextSibling();
422 items++; 422 items++;
423 } 423 }
424 424
425 // store number of items and the items itself 425 // store number of items and the items itself
426 s << items; 426 s << items;
427 item = firstChild(); 427 item = firstChild();
428 for ( int i = 0; i < items; ++i ) 428 for ( int i = 0; i < items; ++i )
429 { 429 {
430 s << *static_cast<OListViewItem*>( item ); 430 s << *static_cast<OListViewItem*>( item );
431 item = item->nextSibling(); 431 item = item->nextSibling();
432 } 432 }
433 433
434 odebug << "OListviewItem stored." << oendl; 434 odebug << "OListviewItem stored." << oendl;
435} 435}
436 436
437 437
438void OListViewItem::serializeFrom( QDataStream& s ) 438void OListViewItem::serializeFrom( QDataStream& s )
439{ 439{
440 #warning Caution... the binary format is still under construction... 440 #warning Caution... the binary format is still under construction...
441 odebug << "loading OListViewItem..." << oendl; 441 odebug << "loading OListViewItem..." << oendl;
442 442
443 for ( int i = 0; i < listView()->columns(); ++i ) 443 for ( int i = 0; i < listView()->columns(); ++i )
444 { 444 {
445 QString coltext; 445 QString coltext;
446 s >> coltext; 446 s >> coltext;
447 odebug << "read text '" << coltext << "' for column " << i << "" << oendl; 447 odebug << "read text '" << coltext << "' for column " << i << "" << oendl;
448 setText( i, coltext ); 448 setText( i, coltext );
449 } 449 }
450 450
451 int items; 451 int items;
452 s >> items; 452 s >> items;
453 odebug << "read number of items = " << items << "" << oendl; 453 odebug << "read number of items = " << items << "" << oendl;
454 454
455 for ( int i = 0; i < items; ++i ) 455 for ( int i = 0; i < items; ++i )
456 { 456 {
457 OListViewItem* item = childFactory(); 457 OListViewItem* item = childFactory();
458 s >> (*item); 458 s >> (*item);
459 } 459 }
460 460
461 odebug << "OListViewItem loaded." << oendl; 461 odebug << "OListViewItem loaded." << oendl;
462} 462}
463 463
464 464
465QDataStream& operator<<( QDataStream& s, const OListViewItem& lvi ) 465QDataStream& operator<<( QDataStream& s, const OListViewItem& lvi )
466{ 466{
467 lvi.serializeTo( s ); 467 lvi.serializeTo( s );
468 return s; 468 return s;
469} 469}
470 470
471 471
472QDataStream& operator>>( QDataStream& s, OListViewItem& lvi ) 472QDataStream& operator>>( QDataStream& s, OListViewItem& lvi )
473{ 473{
474 lvi.serializeFrom( s ); 474 lvi.serializeFrom( s );
475 return s; 475 return s;
476} 476}
477#endif // QT_NO_DATASTREAM 477#endif // QT_NO_DATASTREAM
478 478
479 479
480/*====================================================================================== 480/*======================================================================================
481 * OCheckListItem 481 * OCheckListItem
482 *======================================================================================*/ 482 *======================================================================================*/
483 483
484OCheckListItem::OCheckListItem( QCheckListItem* parent, const QString& text, Type t ) 484OCheckListItem::OCheckListItem( QCheckListItem* parent, const QString& text, Type t )
485 :QCheckListItem( parent, text, t ) 485 :QCheckListItem( parent, text, t )
486{ 486{
487 init(); 487 init();
488} 488}
489 489
490 490
491OCheckListItem::OCheckListItem( QListViewItem* parent, const QString& text, Type t) 491OCheckListItem::OCheckListItem( QListViewItem* parent, const QString& text, Type t)
492 :QCheckListItem( parent, text, t ) 492 :QCheckListItem( parent, text, t )
493{ 493{
494 init(); 494 init();
495} 495}
496 496
497 497
498OCheckListItem::OCheckListItem( QListView* parent, const QString& text, Type t ) 498OCheckListItem::OCheckListItem( QListView* parent, const QString& text, Type t )
499 :QCheckListItem( parent, text, t ) 499 :QCheckListItem( parent, text, t )
500{ 500{
501 init(); 501 init();
502} 502}
503 503
504 504
505OCheckListItem::OCheckListItem( QListViewItem* parent, const QString& text, const QPixmap& p ) 505OCheckListItem::OCheckListItem( QListViewItem* parent, const QString& text, const QPixmap& p )
506 :QCheckListItem( parent, text, p ) 506 :QCheckListItem( parent, text, p )
507{ 507{
508 init(); 508 init();
509} 509}
510 510
511 511
512OCheckListItem::OCheckListItem( QListView* parent, const QString& text, const QPixmap& p ) 512OCheckListItem::OCheckListItem( QListView* parent, const QString& text, const QPixmap& p )
513 :QCheckListItem( parent, text, p ) 513 :QCheckListItem( parent, text, p )
514{ 514{
515 init(); 515 init();
516} 516}
517 517
518 518
519OCheckListItem::~OCheckListItem() 519OCheckListItem::~OCheckListItem()
520{ 520{
521} 521}
522 522
523void OCheckListItem::init() 523void OCheckListItem::init()
524{ 524{
525 m_known = false; 525 m_known = false;
526} 526}
527 527
528 528
529const QColor &OCheckListItem::backgroundColor() 529const QColor &OCheckListItem::backgroundColor()
530{ 530{
531 return isAlternate() ? static_cast<OListView*>(listView())->alternateBackground() : 531 return isAlternate() ? static_cast<OListView*>(listView())->alternateBackground() :
532 listView()->viewport()->colorGroup().base(); 532 listView()->viewport()->colorGroup().base();
533} 533}
534 534
535 535
536bool OCheckListItem::isAlternate() 536bool OCheckListItem::isAlternate()
537{ 537{
538 OListView *lv = static_cast<OListView*>( listView() ); 538 OListView *lv = static_cast<OListView*>( listView() );
539 539
540 // check if the item above is an OCheckListItem 540 // check if the item above is an OCheckListItem
541 OCheckListItem *above = static_cast<OCheckListItem*>( itemAbove() ); 541 OCheckListItem *above = static_cast<OCheckListItem*>( itemAbove() );
542 /*if (! itemAbove()->inherits( "OCheckListItem" )) return false;*/ 542 /*if (! itemAbove()->inherits( "OCheckListItem" )) return false;*/
543 543
544 // check if we have a valid alternate background color 544 // check if we have a valid alternate background color
545 if (!(lv && lv->alternateBackground().isValid())) return false; 545 if (!(lv && lv->alternateBackground().isValid())) return false;
546 546
547 m_known = above ? above->m_known : true; 547 m_known = above ? above->m_known : true;
548 if (m_known) 548 if (m_known)
549 { 549 {
550 m_odd = above ? !above->m_odd : false; 550 m_odd = above ? !above->m_odd : false;
551 } 551 }
552 else 552 else
553 { 553 {
554 OCheckListItem *item; 554 OCheckListItem *item;
555 bool previous = true; 555 bool previous = true;
556 if (parent()) 556 if (parent())
557 { 557 {
558 item = static_cast<OCheckListItem *>(parent()); 558 item = static_cast<OCheckListItem *>(parent());
559 if ( item /*&& item->inherits( "OCheckListItem" )*/ ) previous = item->m_odd; 559 if ( item /*&& item->inherits( "OCheckListItem" )*/ ) previous = item->m_odd;
560 item = static_cast<OCheckListItem *>(parent()->firstChild()); 560 item = static_cast<OCheckListItem *>(parent()->firstChild());
561 /* if ( !item.inherits( "OCheckListItem" ) item = 0; */ 561 /* if ( !item.inherits( "OCheckListItem" ) item = 0; */
562 } 562 }
563 else 563 else
564 { 564 {
565 item = static_cast<OCheckListItem *>(lv->firstChild()); 565 item = static_cast<OCheckListItem *>(lv->firstChild());
566 } 566 }
567 567
568 while(item) 568 while(item)
569 { 569 {
570 item->m_odd = previous = !previous; 570 item->m_odd = previous = !previous;
571 item->m_known = true; 571 item->m_known = true;
572 item = static_cast<OCheckListItem *>(item->nextSibling()); 572 item = static_cast<OCheckListItem *>(item->nextSibling());
573 /* if (!item.inherits( "OCheckListItem" ) ) break; */ 573 /* if (!item.inherits( "OCheckListItem" ) ) break; */
574 } 574 }
575 } 575 }
576 return m_odd; 576 return m_odd;
577} 577}
578 578
579 579
580void OCheckListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) 580void OCheckListItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
581{ 581{
582 QColorGroup _cg = cg; 582 QColorGroup _cg = cg;
583 const QPixmap *pm = listView()->viewport()->backgroundPixmap(); 583 const QPixmap *pm = listView()->viewport()->backgroundPixmap();
584 if (pm && !pm->isNull()) 584 if (pm && !pm->isNull())
585 { 585 {
586 _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) ); 586 _cg.setBrush( QColorGroup::Base, QBrush(backgroundColor(), *pm) );
587 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); 587 p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() );
588 } 588 }
589 else if ( isAlternate() ) 589 else if ( isAlternate() )
590 { 590 {
591 _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() ); 591 _cg.setColor( QColorGroup::Base, static_cast<OListView*>( listView() )->alternateBackground() );
592 } 592 }
593 QCheckListItem::paintCell( p, _cg, column, width, alignment ); 593 QCheckListItem::paintCell( p, _cg, column, width, alignment );
594 594
595 //FIXME: Use styling here! 595 //FIXME: Use styling here!
596 596
597 const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator(); 597 const QPen& pen = static_cast<OListView*>( listView() )->columnSeparator();
598 p->setPen( pen ); 598 p->setPen( pen );
599 p->drawLine( width-1, 0, width-1, height() ); 599 p->drawLine( width-1, 0, width-1, height() );
600} 600}
601 601
602 602
603/*====================================================================================== 603/*======================================================================================
604 * ONamedListView 604 * ONamedListView
605 *======================================================================================*/ 605 *======================================================================================*/
606 606
607ONamedListView::ONamedListView( QWidget *parent, const char *name ) 607ONamedListView::ONamedListView( QWidget *parent, const char *name )
608 :OListView( parent, name ) 608 :OListView( parent, name )
609{ 609{
610} 610}
611 611
612 612
613ONamedListView::~ONamedListView() 613ONamedListView::~ONamedListView()
614{ 614{
615} 615}
616 616
617 617
618void ONamedListView::addColumns( const QStringList& columns ) 618void ONamedListView::addColumns( const QStringList& columns )
619{ 619{
620 for ( QStringList::ConstIterator it = columns.begin(); it != columns.end(); ++it ) 620 for ( QStringList::ConstIterator it = columns.begin(); it != columns.end(); ++it )
621 { 621 {
622 odebug << "adding column " << *it << "" << oendl; 622 odebug << "adding column " << *it << "" << oendl;
623 addColumn( *it ); 623 addColumn( *it );
624 } 624 }
625} 625}
626 626
627 627
628int ONamedListView::findColumn( const QString& text ) const 628int ONamedListView::findColumn( const QString& text ) const
629{ 629{
630 //FIXME: If used excessively, this will slow down performance of updates 630 //FIXME: If used excessively, this will slow down performance of updates
631 //FIXME: because of the linear search over all column texts. 631 //FIXME: because of the linear search over all column texts.
632 //FIXME: I will optimize later by using a hash map. 632 //FIXME: I will optimize later by using a hash map.
633 for ( int i = 0; i < columns(); ++i ) 633 for ( int i = 0; i < columns(); ++i )
634 if ( columnText( i ) == text ) 634 if ( columnText( i ) == text )
635 return i; 635 return i;
636 return -1; 636 return -1;
637} 637}
638 638
639 639
640ONamedListViewItem* ONamedListView::find( int column, const QString& text, int recurse ) const 640ONamedListViewItem* ONamedListView::find( int column, const QString& text, int recurse ) const
641{ 641{
642 return find( (ONamedListViewItem*) firstChild(), column, text, recurse ); 642 return find( (ONamedListViewItem*) firstChild(), column, text, recurse );
643} 643}
644 644
645 645
646ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, int column, const QString& text, int recurse ) const 646ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, int column, const QString& text, int recurse ) const
647{ 647{
648 ONamedListViewItem* result; 648 ONamedListViewItem* result;
649 while ( item && item->text( column ) != text ) 649 while ( item && item->text( column ) != text )
650 { 650 {
651 odebug << "checked " << item->text( column ) << "" << oendl; 651 odebug << "checked " << item->text( column ) << "" << oendl;
652 652
653 if ( recurse < 0 || recurse > 0 ) 653 if ( recurse < 0 || recurse > 0 )
654 { 654 {
655 odebug << "recursion is " << recurse << " - recursing into..." << oendl; 655 odebug << "recursion is " << recurse << " - recursing into..." << oendl;
656 result = find( (ONamedListViewItem*) item->firstChild(), column, text, recurse-1 ); 656 result = find( (ONamedListViewItem*) item->firstChild(), column, text, recurse-1 );
657 if ( result ) return result; 657 if ( result ) return result;
658 } 658 }
659 659
660 660
661 item = (ONamedListViewItem*) item->itemBelow(); 661 item = (ONamedListViewItem*) item->itemBelow();
662 } 662 }
663 if ( item && item->text( column ) == text ) 663 if ( item && item->text( column ) == text )
664 return item; 664 return item;
665 else 665 else
666 return 0; 666 return 0;
667} 667}
668 668
669 669
670ONamedListViewItem* ONamedListView::find( const QString& column, const QString& text, int recurse ) const 670ONamedListViewItem* ONamedListView::find( const QString& column, const QString& text, int recurse ) const
671{ 671{
672 int col = findColumn( column ); 672 int col = findColumn( column );
673 if ( col != -1 ) 673 if ( col != -1 )
674 return find( (ONamedListViewItem*) firstChild(), col, text, recurse ); 674 return find( (ONamedListViewItem*) firstChild(), col, text, recurse );
675 else 675 else
676 return 0; 676 return 0;
677} 677}
678 678
679 679
680ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, const QString& column, const QString& text, int recurse ) const 680ONamedListViewItem* ONamedListView::find( ONamedListViewItem* item, const QString& column, const QString& text, int recurse ) const
681{ 681{
682 int col = findColumn( column ); 682 int col = findColumn( column );
683 if ( col != -1 ) 683 if ( col != -1 )
684 return find( item, col, text, recurse ); 684 return find( item, col, text, recurse );
685 else 685 else
686 return 0; 686 return 0;
687} 687}
688 688
689 689
690/*====================================================================================== 690/*======================================================================================
691 * ONamedListViewItem 691 * ONamedListViewItem
692 *======================================================================================*/ 692 *======================================================================================*/
693 693
694ONamedListViewItem::ONamedListViewItem( QListView* parent, const QStringList& texts ) 694ONamedListViewItem::ONamedListViewItem( QListView* parent, const QStringList& texts )
695 :OListViewItem( parent ) 695 :OListViewItem( parent )
696{ 696{
697 setText( texts ); 697 setText( texts );
698} 698}
699 699
700 700
701ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, const QStringList& texts ) 701ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, const QStringList& texts )
702 :OListViewItem( parent ) 702 :OListViewItem( parent )
703{ 703{
704 setText( texts ); 704 setText( texts );
705} 705}
706 706
707 707
708ONamedListViewItem::ONamedListViewItem( QListView* parent, QListViewItem* after, const QStringList& texts ) 708ONamedListViewItem::ONamedListViewItem( QListView* parent, QListViewItem* after, const QStringList& texts )
709 :OListViewItem( parent, after ) 709 :OListViewItem( parent, after )
710{ 710{
711 setText( texts ); 711 setText( texts );
712} 712}
713 713
714 714
715ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, QListViewItem* after, const QStringList& texts ) 715ONamedListViewItem::ONamedListViewItem( QListViewItem* parent, QListViewItem* after, const QStringList& texts )
716 :OListViewItem( parent, after ) 716 :OListViewItem( parent, after )
717{ 717{
718 setText( texts ); 718 setText( texts );
719} 719}
720 720
721 721
722ONamedListViewItem::~ONamedListViewItem() 722ONamedListViewItem::~ONamedListViewItem()
723{ 723{
724} 724}
725 725
726 726
727void ONamedListViewItem::setText( const QStringList& texts ) 727void ONamedListViewItem::setText( const QStringList& texts )
728{ 728{
729 int col = 0; 729 int col = 0;
730 for ( QStringList::ConstIterator it = texts.begin(); it != texts.end(); ++it ) 730 for ( QStringList::ConstIterator it = texts.begin(); it != texts.end(); ++it )
731 { 731 {
732 odebug << "setting column " << col << " = text " << *it << "" << oendl; 732 odebug << "setting column " << col << " = text " << *it << "" << oendl;
733 OListViewItem::setText( col++, *it ); 733 OListViewItem::setText( col++, *it );
734 } 734 }
735 735
736} 736}
737 737
738 738
739void ONamedListViewItem::setText( const QString& column, const QString& text ) 739void ONamedListViewItem::setText( const QString& column, const QString& text )
740{ 740{
741 //FIXME: If used excessively, this will slow down performance of updates 741 //FIXME: If used excessively, this will slow down performance of updates
742 //FIXME: because of the linear search over all column texts. 742 //FIXME: because of the linear search over all column texts.
743 //FIXME: I will optimize later by using a hash map. 743 //FIXME: I will optimize later by using a hash map.
744 int col = ( (ONamedListView*) listView() )->findColumn( column ); 744 int col = ( (ONamedListView*) listView() )->findColumn( column );
745 if ( col != -1 ) 745 if ( col != -1 )
746 OListViewItem::setText( col, text ); 746 OListViewItem::setText( col, text );
747 else 747 else
748 owarn << "ONamedListViewItem::setText(): Warning! Columntext '" << column << "' not found." << oendl; 748 owarn << "ONamedListViewItem::setText(): Warning! Columntext '" << column << "' not found." << oendl;
749} 749}
750 750
751 751
752ONamedListViewItem* ONamedListViewItem::find( int column, const QString& text, int recurse ) const 752ONamedListViewItem* ONamedListViewItem::find( int column, const QString& text, int recurse ) const
753{ 753{
754 return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), column, text, recurse ); 754 return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), column, text, recurse );
755} 755}
756 756
757 757
758ONamedListViewItem* ONamedListViewItem::find( const QString& column, const QString& text, int recurse ) const 758ONamedListViewItem* ONamedListViewItem::find( const QString& column, const QString& text, int recurse ) const
759{ 759{
760 int col = ( (ONamedListView*) listView() )->findColumn( column ); 760 int col = ( (ONamedListView*) listView() )->findColumn( column );
761 if ( col != -1 ) 761 if ( col != -1 )
762 return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), col, text, recurse ); 762 return ( (ONamedListView*) listView() )->find( (ONamedListViewItem*) firstChild(), col, text, recurse );
763 else 763 else
764 return 0; 764 return 0;
765} 765}
766 766
767} 767}
768} 768}
diff --git a/libopie2/opieui/opopupmenu.cpp b/libopie2/opieui/opopupmenu.cpp
index 50c613f..5ce048e 100644
--- a/libopie2/opieui/opopupmenu.cpp
+++ b/libopie2/opieui/opopupmenu.cpp
@@ -1,600 +1,600 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org> 2 Copyright (C) 2000 Daniel M. Duley <mosfet@kde.org>
3 Copyright (C) 2002 Hamish Rodda <meddie@yoyo.its.monash.edu.au> 3 Copyright (C) 2002 Hamish Rodda <meddie@yoyo.its.monash.edu.au>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License version 2 as published by the Free Software Foundation. 7 License version 2 as published by the Free Software Foundation.
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/* OPIE */ 20/* OPIE */
21#include <opie2/opopupmenu.h> 21#include <opie2/opopupmenu.h>
22#include <opie2/oconfig.h> 22#include <opie2/oconfig.h>
23#include <opie2/odebug.h> 23#include <opie2/odebug.h>
24 24
25/* QT */ 25/* QT */
26#include <qdrawutil.h> 26#include <qdrawutil.h>
27#include <qtimer.h> 27#include <qtimer.h>
28 28
29 29
30using namespace Opie::Core; 30using namespace Opie::Core;
31using namespace Opie::Ui; 31using namespace Opie::Ui;
32 32
33OPopupTitle::OPopupTitle(QWidget *parent, const char *name) 33OPopupTitle::OPopupTitle(QWidget *parent, const char *name)
34 : QWidget(parent, name) 34 : QWidget(parent, name)
35{ 35{
36 setMinimumSize(16, fontMetrics().height()+8); 36 setMinimumSize(16, fontMetrics().height()+8);
37} 37}
38 38
39OPopupTitle::OPopupTitle(OPixmapEffect::GradientType /* gradient */, 39OPopupTitle::OPopupTitle(OPixmapEffect::GradientType /* gradient */,
40 const QColor &/* color */, const QColor &/* textColor */, 40 const QColor &/* color */, const QColor &/* textColor */,
41 QWidget *parent, const char *name) 41 QWidget *parent, const char *name)
42 : QWidget(parent, name) 42 : QWidget(parent, name)
43{ 43{
44 setMinimumSize(16, fontMetrics().height()+8); 44 setMinimumSize(16, fontMetrics().height()+8);
45} 45}
46 46
47OPopupTitle::OPopupTitle(const OPixmap & /* background */, const QColor &/* color */, 47OPopupTitle::OPopupTitle(const OPixmap & /* background */, const QColor &/* color */,
48 const QColor &/* textColor */, QWidget *parent, 48 const QColor &/* textColor */, QWidget *parent,
49 const char *name) 49 const char *name)
50 : QWidget(parent, name) 50 : QWidget(parent, name)
51{ 51{
52 setMinimumSize(16, fontMetrics().height()+8); 52 setMinimumSize(16, fontMetrics().height()+8);
53} 53}
54 54
55void OPopupTitle::setTitle(const QString &text, const QPixmap *icon) 55void OPopupTitle::setTitle(const QString &text, const QPixmap *icon)
56{ 56{
57 titleStr = text; 57 titleStr = text;
58 if (icon) 58 if (icon)
59 miniicon = *icon; 59 miniicon = *icon;
60 else 60 else
61 miniicon.resize(0, 0); 61 miniicon.resize(0, 0);
62 62
63 int w = miniicon.width()+fontMetrics().width(titleStr); 63 int w = miniicon.width()+fontMetrics().width(titleStr);
64 int h = QMAX( fontMetrics().height(), miniicon.height() ); 64 int h = QMAX( fontMetrics().height(), miniicon.height() );
65 setMinimumSize( w+16, h+8 ); 65 setMinimumSize( w+16, h+8 );
66} 66}
67 67
68void OPopupTitle::setText( const QString &text ) 68void OPopupTitle::setText( const QString &text )
69{ 69{
70 titleStr = text; 70 titleStr = text;
71 int w = miniicon.width()+fontMetrics().width(titleStr); 71 int w = miniicon.width()+fontMetrics().width(titleStr);
72 int h = QMAX( fontMetrics().height(), miniicon.height() ); 72 int h = QMAX( fontMetrics().height(), miniicon.height() );
73 setMinimumSize( w+16, h+8 ); 73 setMinimumSize( w+16, h+8 );
74} 74}
75 75
76void OPopupTitle::setIcon( const QPixmap &pix ) 76void OPopupTitle::setIcon( const QPixmap &pix )
77{ 77{
78 miniicon = pix; 78 miniicon = pix;
79 int w = miniicon.width()+fontMetrics().width(titleStr); 79 int w = miniicon.width()+fontMetrics().width(titleStr);
80 int h = QMAX( fontMetrics().height(), miniicon.height() ); 80 int h = QMAX( fontMetrics().height(), miniicon.height() );
81 setMinimumSize( w+16, h+8 ); 81 setMinimumSize( w+16, h+8 );
82} 82}
83 83
84void OPopupTitle::paintEvent(QPaintEvent *) 84void OPopupTitle::paintEvent(QPaintEvent *)
85{ 85{
86 QRect r(rect()); 86 QRect r(rect());
87 QPainter p(this); 87 QPainter p(this);
88 #if QT_VERSION > 290 88 #if QT_VERSION >= 0x030000
89 qApp->style().drawPrimitive(QStyle::PE_HeaderSection, &p, r, palette().active()); 89 qApp->style().drawPrimitive(QStyle::PE_HeaderSection, &p, r, palette().active());
90 #else 90 #else
91 #warning OPopupMenu is not fully functional on Qt2 91 #warning OPopupMenu is not fully functional on Qt2
92 #endif 92 #endif
93 93
94 if (!miniicon.isNull()) 94 if (!miniicon.isNull())
95 p.drawPixmap(4, (r.height()-miniicon.height())/2, miniicon); 95 p.drawPixmap(4, (r.height()-miniicon.height())/2, miniicon);
96 96
97 if (!titleStr.isNull()) 97 if (!titleStr.isNull())
98 { 98 {
99 p.setPen(palette().active().text()); 99 p.setPen(palette().active().text());
100 QFont f = p.font(); 100 QFont f = p.font();
101 f.setBold(true); 101 f.setBold(true);
102 p.setFont(f); 102 p.setFont(f);
103 if(!miniicon.isNull()) 103 if(!miniicon.isNull())
104 { 104 {
105 p.drawText(miniicon.width()+8, 0, width()-(miniicon.width()+8), 105 p.drawText(miniicon.width()+8, 0, width()-(miniicon.width()+8),
106 height(), AlignLeft | AlignVCenter | SingleLine, 106 height(), AlignLeft | AlignVCenter | SingleLine,
107 titleStr); 107 titleStr);
108 } 108 }
109 else 109 else
110 { 110 {
111 p.drawText(0, 0, width(), height(), 111 p.drawText(0, 0, width(), height(),
112 AlignCenter | SingleLine, titleStr); 112 AlignCenter | SingleLine, titleStr);
113 } 113 }
114 } 114 }
115 115
116 p.setPen(palette().active().highlight()); 116 p.setPen(palette().active().highlight());
117 p.drawLine(0, 0, r.right(), 0); 117 p.drawLine(0, 0, r.right(), 0);
118} 118}
119 119
120QSize OPopupTitle::sizeHint() const 120QSize OPopupTitle::sizeHint() const
121{ 121{
122 return(minimumSize()); 122 return(minimumSize());
123} 123}
124 124
125class OPopupMenu::OPopupMenuPrivate 125class OPopupMenu::OPopupMenuPrivate
126{ 126{
127public: 127public:
128 OPopupMenuPrivate () 128 OPopupMenuPrivate ()
129 : noMatches(false) 129 : noMatches(false)
130 , shortcuts(false) 130 , shortcuts(false)
131 , autoExec(false) 131 , autoExec(false)
132 , lastHitIndex(-1) 132 , lastHitIndex(-1)
133 , m_ctxMenu(0) 133 , m_ctxMenu(0)
134 {} 134 {}
135 135
136 ~OPopupMenuPrivate () 136 ~OPopupMenuPrivate ()
137 { 137 {
138 delete m_ctxMenu; 138 delete m_ctxMenu;
139 } 139 }
140 140
141 QString m_lastTitle; 141 QString m_lastTitle;
142 142
143 // variables for keyboard navigation 143 // variables for keyboard navigation
144 QTimer clearTimer; 144 QTimer clearTimer;
145 145
146 bool noMatches : 1; 146 bool noMatches : 1;
147 bool shortcuts : 1; 147 bool shortcuts : 1;
148 bool autoExec : 1; 148 bool autoExec : 1;
149 149
150 QString keySeq; 150 QString keySeq;
151 QString originalText; 151 QString originalText;
152 152
153 int lastHitIndex; 153 int lastHitIndex;
154 154
155 // support for RMB menus on menus 155 // support for RMB menus on menus
156 QPopupMenu* m_ctxMenu; 156 QPopupMenu* m_ctxMenu;
157 static bool s_continueCtxMenuShow; 157 static bool s_continueCtxMenuShow;
158 static int s_highlightedItem; 158 static int s_highlightedItem;
159 static OPopupMenu* s_contextedMenu; 159 static OPopupMenu* s_contextedMenu;
160}; 160};
161 161
162int OPopupMenu::OPopupMenuPrivate::s_highlightedItem(-1); 162int OPopupMenu::OPopupMenuPrivate::s_highlightedItem(-1);
163OPopupMenu* OPopupMenu::OPopupMenuPrivate::s_contextedMenu(0); 163OPopupMenu* OPopupMenu::OPopupMenuPrivate::s_contextedMenu(0);
164bool OPopupMenu::OPopupMenuPrivate::s_continueCtxMenuShow(true); 164bool OPopupMenu::OPopupMenuPrivate::s_continueCtxMenuShow(true);
165 165
166OPopupMenu::OPopupMenu(QWidget *parent, const char *name) 166OPopupMenu::OPopupMenu(QWidget *parent, const char *name)
167 : QPopupMenu(parent, name) 167 : QPopupMenu(parent, name)
168{ 168{
169 d = new OPopupMenuPrivate; 169 d = new OPopupMenuPrivate;
170 resetKeyboardVars(); 170 resetKeyboardVars();
171 connect(&(d->clearTimer), SIGNAL(timeout()), SLOT(resetKeyboardVars())); 171 connect(&(d->clearTimer), SIGNAL(timeout()), SLOT(resetKeyboardVars()));
172} 172}
173 173
174OPopupMenu::~OPopupMenu() 174OPopupMenu::~OPopupMenu()
175{ 175{
176 if (OPopupMenuPrivate::s_contextedMenu == this) 176 if (OPopupMenuPrivate::s_contextedMenu == this)
177 { 177 {
178 OPopupMenuPrivate::s_contextedMenu = 0; 178 OPopupMenuPrivate::s_contextedMenu = 0;
179 OPopupMenuPrivate::s_highlightedItem = -1; 179 OPopupMenuPrivate::s_highlightedItem = -1;
180 } 180 }
181 181
182 delete d; 182 delete d;
183} 183}
184 184
185int OPopupMenu::insertTitle(const QString &text, int id, int index) 185int OPopupMenu::insertTitle(const QString &text, int id, int index)
186{ 186{
187 OPopupTitle *titleItem = new OPopupTitle(); 187 OPopupTitle *titleItem = new OPopupTitle();
188 titleItem->setTitle(text); 188 titleItem->setTitle(text);
189 int ret = insertItem(titleItem, id, index); 189 int ret = insertItem(titleItem, id, index);
190 setItemEnabled(id, false); 190 setItemEnabled(id, false);
191 return ret; 191 return ret;
192} 192}
193 193
194int OPopupMenu::insertTitle(const QPixmap &icon, const QString &text, int id, 194int OPopupMenu::insertTitle(const QPixmap &icon, const QString &text, int id,
195 int index) 195 int index)
196{ 196{
197 OPopupTitle *titleItem = new OPopupTitle(); 197 OPopupTitle *titleItem = new OPopupTitle();
198 titleItem->setTitle(text, &icon); 198 titleItem->setTitle(text, &icon);
199 int ret = insertItem(titleItem, id, index); 199 int ret = insertItem(titleItem, id, index);
200 setItemEnabled(id, false); 200 setItemEnabled(id, false);
201 return ret; 201 return ret;
202} 202}
203 203
204void OPopupMenu::changeTitle(int id, const QString &text) 204void OPopupMenu::changeTitle(int id, const QString &text)
205{ 205{
206 QMenuItem *item = findItem(id); 206 QMenuItem *item = findItem(id);
207 if(item){ 207 if(item){
208 if(item->widget()) 208 if(item->widget())
209 ((OPopupTitle *)item->widget())->setTitle(text); 209 ((OPopupTitle *)item->widget())->setTitle(text);
210#ifndef NDEBUG 210#ifndef NDEBUG
211 else 211 else
212 owarn << "KPopupMenu: changeTitle() called with non-title id " << id << "" << oendl; 212 owarn << "KPopupMenu: changeTitle() called with non-title id " << id << "" << oendl;
213#endif 213#endif
214 } 214 }
215#ifndef NDEBUG 215#ifndef NDEBUG
216 else 216 else
217 owarn << "KPopupMenu: changeTitle() called with invalid id " << id << "" << oendl; 217 owarn << "KPopupMenu: changeTitle() called with invalid id " << id << "" << oendl;
218#endif 218#endif
219} 219}
220 220
221void OPopupMenu::changeTitle(int id, const QPixmap &icon, const QString &text) 221void OPopupMenu::changeTitle(int id, const QPixmap &icon, const QString &text)
222{ 222{
223 QMenuItem *item = findItem(id); 223 QMenuItem *item = findItem(id);
224 if(item){ 224 if(item){
225 if(item->widget()) 225 if(item->widget())
226 ((OPopupTitle *)item->widget())->setTitle(text, &icon); 226 ((OPopupTitle *)item->widget())->setTitle(text, &icon);
227#ifndef NDEBUG 227#ifndef NDEBUG
228 else 228 else
229 owarn << "KPopupMenu: changeTitle() called with non-title id " << id << "" << oendl; 229 owarn << "KPopupMenu: changeTitle() called with non-title id " << id << "" << oendl;
230#endif 230#endif
231 } 231 }
232#ifndef NDEBUG 232#ifndef NDEBUG
233 else 233 else
234 owarn << "KPopupMenu: changeTitle() called with invalid id " << id << "" << oendl; 234 owarn << "KPopupMenu: changeTitle() called with invalid id " << id << "" << oendl;
235#endif 235#endif
236} 236}
237 237
238QString OPopupMenu::title(int id) const 238QString OPopupMenu::title(int id) const
239{ 239{
240 if(id == -1) // obsolete 240 if(id == -1) // obsolete
241 return(d->m_lastTitle); 241 return(d->m_lastTitle);
242 QMenuItem *item = findItem(id); 242 QMenuItem *item = findItem(id);
243 if(item){ 243 if(item){
244 if(item->widget()) 244 if(item->widget())
245 return(((OPopupTitle *)item->widget())->title()); 245 return(((OPopupTitle *)item->widget())->title());
246 else 246 else
247 owarn << "OPopupMenu: title() called with non-title id " << id << "." << oendl; 247 owarn << "OPopupMenu: title() called with non-title id " << id << "." << oendl;
248 } 248 }
249 else 249 else
250 owarn << "OPopupMenu: title() called with invalid id " << id << "." << oendl; 250 owarn << "OPopupMenu: title() called with invalid id " << id << "." << oendl;
251 return(QString::null); 251 return(QString::null);
252} 252}
253 253
254QPixmap OPopupMenu::titlePixmap(int id) const 254QPixmap OPopupMenu::titlePixmap(int id) const
255{ 255{
256 QMenuItem *item = findItem(id); 256 QMenuItem *item = findItem(id);
257 if(item){ 257 if(item){
258 if(item->widget()) 258 if(item->widget())
259 return(((OPopupTitle *)item->widget())->icon()); 259 return(((OPopupTitle *)item->widget())->icon());
260 else 260 else
261 owarn << "KPopupMenu: titlePixmap() called with non-title id " << id << "." << oendl; 261 owarn << "KPopupMenu: titlePixmap() called with non-title id " << id << "." << oendl;
262 } 262 }
263 else 263 else
264 owarn << "KPopupMenu: titlePixmap() called with invalid id " << id << "." << oendl; 264 owarn << "KPopupMenu: titlePixmap() called with invalid id " << id << "." << oendl;
265 QPixmap tmp; 265 QPixmap tmp;
266 return(tmp); 266 return(tmp);
267} 267}
268 268
269/** 269/**
270 * This is re-implemented for keyboard navigation. 270 * This is re-implemented for keyboard navigation.
271 */ 271 */
272void OPopupMenu::closeEvent(QCloseEvent*e) 272void OPopupMenu::closeEvent(QCloseEvent*e)
273{ 273{
274 if (d->shortcuts) 274 if (d->shortcuts)
275 resetKeyboardVars(); 275 resetKeyboardVars();
276 QPopupMenu::closeEvent(e); 276 QPopupMenu::closeEvent(e);
277} 277}
278 278
279void OPopupMenu::keyPressEvent(QKeyEvent* e) 279void OPopupMenu::keyPressEvent(QKeyEvent* e)
280{ 280{
281 if (!d->shortcuts) { 281 if (!d->shortcuts) {
282 // continue event processing by Qpopup 282 // continue event processing by Qpopup
283 //e->ignore(); 283 //e->ignore();
284 QPopupMenu::keyPressEvent(e); 284 QPopupMenu::keyPressEvent(e);
285 return; 285 return;
286 } 286 }
287 287
288 int i = 0; 288 int i = 0;
289 bool firstpass = true; 289 bool firstpass = true;
290 QString keyString = e->text(); 290 QString keyString = e->text();
291 291
292 // check for common commands dealt with by QPopup 292 // check for common commands dealt with by QPopup
293 int key = e->key(); 293 int key = e->key();
294 if (key == Key_Escape || key == Key_Return || key == Key_Enter 294 if (key == Key_Escape || key == Key_Return || key == Key_Enter
295 || key == Key_Up || key == Key_Down || key == Key_Left 295 || key == Key_Up || key == Key_Down || key == Key_Left
296 || key == Key_Right || key == Key_F1) { 296 || key == Key_Right || key == Key_F1) {
297 297
298 resetKeyboardVars(); 298 resetKeyboardVars();
299 // continue event processing by Qpopup 299 // continue event processing by Qpopup
300 //e->ignore(); 300 //e->ignore();
301 QPopupMenu::keyPressEvent(e); 301 QPopupMenu::keyPressEvent(e);
302 return; 302 return;
303 } 303 }
304 304
305 // check to see if the user wants to remove a key from the sequence (backspace) 305 // check to see if the user wants to remove a key from the sequence (backspace)
306 // or clear the sequence (delete) 306 // or clear the sequence (delete)
307 if (!d->keySeq.isNull()) { 307 if (!d->keySeq.isNull()) {
308 308
309 if (key == Key_Backspace) { 309 if (key == Key_Backspace) {
310 310
311 if (d->keySeq.length() == 1) { 311 if (d->keySeq.length() == 1) {
312 resetKeyboardVars(); 312 resetKeyboardVars();
313 return; 313 return;
314 } 314 }
315 315
316 // keep the last sequence in keyString 316 // keep the last sequence in keyString
317 keyString = d->keySeq.left(d->keySeq.length() - 1); 317 keyString = d->keySeq.left(d->keySeq.length() - 1);
318 318
319 // allow sequence matching to be tried again 319 // allow sequence matching to be tried again
320 resetKeyboardVars(); 320 resetKeyboardVars();
321 321
322 } else if (key == Key_Delete) { 322 } else if (key == Key_Delete) {
323 resetKeyboardVars(); 323 resetKeyboardVars();
324 324
325 // clear active item 325 // clear active item
326 setActiveItem(0); 326 setActiveItem(0);
327 return; 327 return;
328 328
329 } else if (d->noMatches) { 329 } else if (d->noMatches) {
330 // clear if there are no matches 330 // clear if there are no matches
331 resetKeyboardVars(); 331 resetKeyboardVars();
332 332
333 // clear active item 333 // clear active item
334 setActiveItem(0); 334 setActiveItem(0);
335 335
336 } else { 336 } else {
337 // the key sequence is not a null string 337 // the key sequence is not a null string
338 // therefore the lastHitIndex is valid 338 // therefore the lastHitIndex is valid
339 i = d->lastHitIndex; 339 i = d->lastHitIndex;
340 } 340 }
341 } else if (key == Key_Backspace && parentMenu) { 341 } else if (key == Key_Backspace && parentMenu) {
342 // backspace with no chars in the buffer... go back a menu. 342 // backspace with no chars in the buffer... go back a menu.
343 hide(); 343 hide();
344 resetKeyboardVars(); 344 resetKeyboardVars();
345 return; 345 return;
346 } 346 }
347 347
348 d->keySeq += keyString; 348 d->keySeq += keyString;
349 int seqLen = d->keySeq.length(); 349 int seqLen = d->keySeq.length();
350 350
351 for (; i < (int)count(); i++) { 351 for (; i < (int)count(); i++) {
352 // compare typed text with text of this entry 352 // compare typed text with text of this entry
353 int j = idAt(i); 353 int j = idAt(i);
354 354
355 // don't search disabled entries 355 // don't search disabled entries
356 if (!isItemEnabled(j)) 356 if (!isItemEnabled(j))
357 continue; 357 continue;
358 358
359 QString thisText; 359 QString thisText;
360 360
361 // retrieve the right text 361 // retrieve the right text
362 // (the last selected item one may have additional ampersands) 362 // (the last selected item one may have additional ampersands)
363 if (i == d->lastHitIndex) 363 if (i == d->lastHitIndex)
364 thisText = d->originalText; 364 thisText = d->originalText;
365 else 365 else
366 thisText = text(j); 366 thisText = text(j);
367 367
368 // if there is an accelerator present, remove it 368 // if there is an accelerator present, remove it
369 if ((int)accel(j) != 0) 369 if ((int)accel(j) != 0)
370 thisText = thisText.replace(QRegExp("&"), ""); 370 thisText = thisText.replace(QRegExp("&"), "");
371 371
372 // chop text to the search length 372 // chop text to the search length
373 thisText = thisText.left(seqLen); 373 thisText = thisText.left(seqLen);
374 374
375 // do the search 375 // do the search
376 if (thisText.find(d->keySeq, 0, false) == 0) { 376 if (thisText.find(d->keySeq, 0, false) == 0) {
377 377
378 if (firstpass) { 378 if (firstpass) {
379 // match 379 // match
380 setActiveItem(i); 380 setActiveItem(i);
381 381
382 // check to see if we're underlining a different item 382 // check to see if we're underlining a different item
383 if (d->lastHitIndex != i) 383 if (d->lastHitIndex != i)
384 // yes; revert the underlining 384 // yes; revert the underlining
385 changeItem(idAt(d->lastHitIndex), d->originalText); 385 changeItem(idAt(d->lastHitIndex), d->originalText);
386 386
387 // set the original text if it's a different item 387 // set the original text if it's a different item
388 if (d->lastHitIndex != i || d->lastHitIndex == -1) 388 if (d->lastHitIndex != i || d->lastHitIndex == -1)
389 d->originalText = text(j); 389 d->originalText = text(j);
390 390
391 // underline the currently selected item 391 // underline the currently selected item
392 changeItem(j, underlineText(d->originalText, d->keySeq.length())); 392 changeItem(j, underlineText(d->originalText, d->keySeq.length()));
393 393
394 // remeber what's going on 394 // remeber what's going on
395 d->lastHitIndex = i; 395 d->lastHitIndex = i;
396 396
397 // start/restart the clear timer 397 // start/restart the clear timer
398 d->clearTimer.start(5000, true); 398 d->clearTimer.start(5000, true);
399 399
400 // go around for another try, to see if we can execute 400 // go around for another try, to see if we can execute
401 firstpass = false; 401 firstpass = false;
402 } else { 402 } else {
403 // don't allow execution 403 // don't allow execution
404 return; 404 return;
405 } 405 }
406 } 406 }
407 407
408 // fall through to allow execution 408 // fall through to allow execution
409 } 409 }
410 410
411 if (!firstpass) { 411 if (!firstpass) {
412 if (d->autoExec) { 412 if (d->autoExec) {
413 // activate anything 413 // activate anything
414 activateItemAt(d->lastHitIndex); 414 activateItemAt(d->lastHitIndex);
415 resetKeyboardVars(); 415 resetKeyboardVars();
416 416
417 } else if (findItem(idAt(d->lastHitIndex)) && 417 } else if (findItem(idAt(d->lastHitIndex)) &&
418 findItem(idAt(d->lastHitIndex))->popup()) { 418 findItem(idAt(d->lastHitIndex))->popup()) {
419 // only activate sub-menus 419 // only activate sub-menus
420 activateItemAt(d->lastHitIndex); 420 activateItemAt(d->lastHitIndex);
421 resetKeyboardVars(); 421 resetKeyboardVars();
422 } 422 }
423 423
424 return; 424 return;
425 } 425 }
426 426
427 // no matches whatsoever, clean up 427 // no matches whatsoever, clean up
428 resetKeyboardVars(true); 428 resetKeyboardVars(true);
429 //e->ignore(); 429 //e->ignore();
430 QPopupMenu::keyPressEvent(e); 430 QPopupMenu::keyPressEvent(e);
431} 431}
432 432
433QString OPopupMenu::underlineText(const QString& text, uint length) 433QString OPopupMenu::underlineText(const QString& text, uint length)
434{ 434{
435 QString ret = text; 435 QString ret = text;
436 for (uint i = 0; i < length; i++) { 436 for (uint i = 0; i < length; i++) {
437 if (ret[2*i] != '&') 437 if (ret[2*i] != '&')
438 ret.insert(2*i, "&"); 438 ret.insert(2*i, "&");
439 } 439 }
440 return ret; 440 return ret;
441} 441}
442 442
443void OPopupMenu::resetKeyboardVars(bool noMatches /* = false */) 443void OPopupMenu::resetKeyboardVars(bool noMatches /* = false */)
444{ 444{
445 // Clean up keyboard variables 445 // Clean up keyboard variables
446 if (d->lastHitIndex != -1) { 446 if (d->lastHitIndex != -1) {
447 changeItem(idAt(d->lastHitIndex), d->originalText); 447 changeItem(idAt(d->lastHitIndex), d->originalText);
448 d->lastHitIndex = -1; 448 d->lastHitIndex = -1;
449 } 449 }
450 450
451 if (!noMatches) { 451 if (!noMatches) {
452 d->keySeq = QString::null; 452 d->keySeq = QString::null;
453 } 453 }
454 454
455 d->noMatches = noMatches; 455 d->noMatches = noMatches;
456} 456}
457 457
458void OPopupMenu::setKeyboardShortcutsEnabled(bool enable) 458void OPopupMenu::setKeyboardShortcutsEnabled(bool enable)
459{ 459{
460 d->shortcuts = enable; 460 d->shortcuts = enable;
461} 461}
462 462
463void OPopupMenu::setKeyboardShortcutsExecute(bool enable) 463void OPopupMenu::setKeyboardShortcutsExecute(bool enable)
464{ 464{
465 d->autoExec = enable; 465 d->autoExec = enable;
466} 466}
467/** 467/**
468 * End keyboard navigation. 468 * End keyboard navigation.
469 */ 469 */
470 470
471/** 471/**
472 * RMB menus on menus 472 * RMB menus on menus
473 */ 473 */
474QPopupMenu* OPopupMenu::contextMenu() 474QPopupMenu* OPopupMenu::contextMenu()
475{ 475{
476 if (!d->m_ctxMenu) 476 if (!d->m_ctxMenu)
477 { 477 {
478 d->m_ctxMenu = new QPopupMenu(this); 478 d->m_ctxMenu = new QPopupMenu(this);
479 installEventFilter(this); 479 installEventFilter(this);
480 connect(d->m_ctxMenu, SIGNAL(aboutToHide()), this, SLOT(ctxMenuHiding())); 480 connect(d->m_ctxMenu, SIGNAL(aboutToHide()), this, SLOT(ctxMenuHiding()));
481 } 481 }
482 482
483 return d->m_ctxMenu; 483 return d->m_ctxMenu;
484} 484}
485 485
486void OPopupMenu::cancelContextMenuShow() 486void OPopupMenu::cancelContextMenuShow()
487{ 487{
488 OPopupMenuPrivate::s_continueCtxMenuShow = false; 488 OPopupMenuPrivate::s_continueCtxMenuShow = false;
489} 489}
490 490
491int OPopupMenu::contextMenuFocusItem() 491int OPopupMenu::contextMenuFocusItem()
492{ 492{
493 return OPopupMenuPrivate::s_highlightedItem; 493 return OPopupMenuPrivate::s_highlightedItem;
494} 494}
495 495
496OPopupMenu* OPopupMenu::contextMenuFocus() 496OPopupMenu* OPopupMenu::contextMenuFocus()
497{ 497{
498 return OPopupMenuPrivate::s_contextedMenu; 498 return OPopupMenuPrivate::s_contextedMenu;
499} 499}
500 500
501void OPopupMenu::itemHighlighted(int /* whichItem */) 501void OPopupMenu::itemHighlighted(int /* whichItem */)
502{ 502{
503 if (!d->m_ctxMenu || !d->m_ctxMenu->isVisible()) 503 if (!d->m_ctxMenu || !d->m_ctxMenu->isVisible())
504 { 504 {
505 return; 505 return;
506 } 506 }
507 507
508 d->m_ctxMenu->hide(); 508 d->m_ctxMenu->hide();
509 showCtxMenu(mapFromGlobal(QCursor::pos())); 509 showCtxMenu(mapFromGlobal(QCursor::pos()));
510} 510}
511 511
512void OPopupMenu::showCtxMenu(QPoint pos) 512void OPopupMenu::showCtxMenu(QPoint pos)
513{ 513{
514 OPopupMenuPrivate::s_highlightedItem = idAt(pos); 514 OPopupMenuPrivate::s_highlightedItem = idAt(pos);
515 515
516 if (OPopupMenuPrivate::s_highlightedItem == -1) 516 if (OPopupMenuPrivate::s_highlightedItem == -1)
517 { 517 {
518 OPopupMenuPrivate::s_contextedMenu = 0; 518 OPopupMenuPrivate::s_contextedMenu = 0;
519 return; 519 return;
520 } 520 }
521 521
522 emit aboutToShowContextMenu(this, OPopupMenuPrivate::s_highlightedItem, d->m_ctxMenu); 522 emit aboutToShowContextMenu(this, OPopupMenuPrivate::s_highlightedItem, d->m_ctxMenu);
523 523
524 if (!OPopupMenuPrivate::s_continueCtxMenuShow) 524 if (!OPopupMenuPrivate::s_continueCtxMenuShow)
525 { 525 {
526 OPopupMenuPrivate::s_continueCtxMenuShow = true; 526 OPopupMenuPrivate::s_continueCtxMenuShow = true;
527 return; 527 return;
528 } 528 }
529 529
530 OPopupMenuPrivate::s_contextedMenu = this; 530 OPopupMenuPrivate::s_contextedMenu = this;
531 d->m_ctxMenu->popup(this->mapToGlobal(pos)); 531 d->m_ctxMenu->popup(this->mapToGlobal(pos));
532 connect(this, SIGNAL(highlighted(int)), this, SLOT(itemHighlighted(int))); 532 connect(this, SIGNAL(highlighted(int)), this, SLOT(itemHighlighted(int)));
533} 533}
534 534
535void OPopupMenu::ctxMenuHiding() 535void OPopupMenu::ctxMenuHiding()
536{ 536{
537 disconnect(this, SIGNAL(highlighted(int)), this, SLOT(itemHighlighted(int))); 537 disconnect(this, SIGNAL(highlighted(int)), this, SLOT(itemHighlighted(int)));
538 OPopupMenuPrivate::s_continueCtxMenuShow = true; 538 OPopupMenuPrivate::s_continueCtxMenuShow = true;
539} 539}
540 540
541bool OPopupMenu::eventFilter(QObject* obj, QEvent* event) 541bool OPopupMenu::eventFilter(QObject* obj, QEvent* event)
542{ 542{
543 if (d->m_ctxMenu && obj == this) 543 if (d->m_ctxMenu && obj == this)
544 { 544 {
545 if (event->type() == QEvent::MouseButtonRelease) 545 if (event->type() == QEvent::MouseButtonRelease)
546 { 546 {
547 if (d->m_ctxMenu->isVisible()) 547 if (d->m_ctxMenu->isVisible())
548 { 548 {
549 return true; 549 return true;
550 } 550 }
551 } 551 }
552 #if QT_VERSION > 290 552 #if QT_VERSION >= 0x030000
553 else if (event->type() == QEvent::ContextMenu) 553 else if (event->type() == QEvent::ContextMenu)
554 #else 554 #else
555 else if ( (event->type() == QEvent::MouseButtonPress) && 555 else if ( (event->type() == QEvent::MouseButtonPress) &&
556 ( (QMouseEvent*) event )->button() == QMouseEvent::RightButton ) 556 ( (QMouseEvent*) event )->button() == QMouseEvent::RightButton )
557 #endif 557 #endif
558 { 558 {
559 showCtxMenu(mapFromGlobal(QCursor::pos())); 559 showCtxMenu(mapFromGlobal(QCursor::pos()));
560 return true; 560 return true;
561 } 561 }
562 } 562 }
563 563
564 return QWidget::eventFilter(obj, event); 564 return QWidget::eventFilter(obj, event);
565} 565}
566 566
567void OPopupMenu::hideEvent(QHideEvent*) 567void OPopupMenu::hideEvent(QHideEvent*)
568{ 568{
569 if (d->m_ctxMenu) 569 if (d->m_ctxMenu)
570 { 570 {
571 d->m_ctxMenu->hide(); 571 d->m_ctxMenu->hide();
572 } 572 }
573} 573}
574/** 574/**
575 * end of RMB menus on menus support 575 * end of RMB menus on menus support
576 */ 576 */
577 577
578// Obsolete 578// Obsolete
579OPopupMenu::OPopupMenu(const QString& title, QWidget *parent, const char *name) 579OPopupMenu::OPopupMenu(const QString& title, QWidget *parent, const char *name)
580 : QPopupMenu(parent, name) 580 : QPopupMenu(parent, name)
581{ 581{
582 d = new OPopupMenuPrivate; 582 d = new OPopupMenuPrivate;
583 setTitle(title); 583 setTitle(title);
584} 584}
585 585
586// Obsolete 586// Obsolete
587void OPopupMenu::setTitle(const QString &title) 587void OPopupMenu::setTitle(const QString &title)
588{ 588{
589 OPopupTitle *titleItem = new OPopupTitle(); 589 OPopupTitle *titleItem = new OPopupTitle();
590 titleItem->setTitle(title); 590 titleItem->setTitle(title);
591 insertItem(titleItem); 591 insertItem(titleItem);
592 d->m_lastTitle = title; 592 d->m_lastTitle = title;
593} 593}
594 594
595void OPopupTitle::virtual_hook( int, void* ) 595void OPopupTitle::virtual_hook( int, void* )
596{ /*BASE::virtual_hook( id, data );*/ } 596{ /*BASE::virtual_hook( id, data );*/ }
597 597
598void OPopupMenu::virtual_hook( int, void* ) 598void OPopupMenu::virtual_hook( int, void* )
599{ /*BASE::virtual_hook( id, data );*/ } 599{ /*BASE::virtual_hook( id, data );*/ }
600 600
diff --git a/libopie2/opieui/oselector.cpp b/libopie2/opieui/oselector.cpp
index 05543c5..936dfe6 100644
--- a/libopie2/opieui/oselector.cpp
+++ b/libopie2/opieui/oselector.cpp
@@ -1,719 +1,719 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 3
4 This library is free software; you can redistribute it and/or 4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public 5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either 6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version. 7 version 2 of the License, or (at your option) any later version.
8 8
9 This library is distributed in the hope that it will be useful, 9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details. 12 Library General Public License for more details.
13 13
14 You should have received a copy of the GNU Library General Public License 14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to 15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. 17 Boston, MA 02111-1307, USA.
18*/ 18*/
19 19
20/* QT */ 20/* QT */
21 21
22#include <qimage.h> 22#include <qimage.h>
23#include <qdrawutil.h> 23#include <qdrawutil.h>
24 24
25/* OPIE */ 25/* OPIE */
26 26
27#include <opie2/oimageeffect.h> 27#include <opie2/oimageeffect.h>
28#include <opie2/oselector.h> 28#include <opie2/oselector.h>
29 29
30#define STORE_W 8 30#define STORE_W 8
31#define STORE_W2 STORE_W * 2 31#define STORE_W2 STORE_W * 2
32 32
33//----------------------------------------------------------------------------- 33//-----------------------------------------------------------------------------
34/* 34/*
35 * 2D value selector. 35 * 2D value selector.
36 * The contents of the selector are drawn by derived class. 36 * The contents of the selector are drawn by derived class.
37 */ 37 */
38 38
39using namespace Opie::Ui; 39using namespace Opie::Ui;
40 40
41OXYSelector::OXYSelector( QWidget *parent, const char *name ) 41OXYSelector::OXYSelector( QWidget *parent, const char *name )
42 : QWidget( parent, name ) 42 : QWidget( parent, name )
43{ 43{
44 xPos = 0; 44 xPos = 0;
45 yPos = 0; 45 yPos = 0;
46 minX = 0; 46 minX = 0;
47 minY = 0; 47 minY = 0;
48 maxX = 100; 48 maxX = 100;
49 maxY = 100; 49 maxY = 100;
50 store.setOptimization( QPixmap::BestOptim ); 50 store.setOptimization( QPixmap::BestOptim );
51 store.resize( STORE_W2, STORE_W2 ); 51 store.resize( STORE_W2, STORE_W2 );
52} 52}
53 53
54 54
55OXYSelector::~OXYSelector() 55OXYSelector::~OXYSelector()
56{} 56{}
57 57
58 58
59void OXYSelector::setRange( int _minX, int _minY, int _maxX, int _maxY ) 59void OXYSelector::setRange( int _minX, int _minY, int _maxX, int _maxY )
60{ 60{
61 px = 2; 61 px = 2;
62 py = 2; 62 py = 2;
63 minX = _minX; 63 minX = _minX;
64 minY = _minY; 64 minY = _minY;
65 maxX = _maxX; 65 maxX = _maxX;
66 maxY = _maxY; 66 maxY = _maxY;
67} 67}
68 68
69void OXYSelector::setValues( int _xPos, int _yPos ) 69void OXYSelector::setValues( int _xPos, int _yPos )
70{ 70{
71 xPos = _xPos; 71 xPos = _xPos;
72 yPos = _yPos; 72 yPos = _yPos;
73 73
74 if ( xPos > maxX ) 74 if ( xPos > maxX )
75 xPos = maxX; 75 xPos = maxX;
76 else if ( xPos < minX ) 76 else if ( xPos < minX )
77 xPos = minX; 77 xPos = minX;
78 78
79 if ( yPos > maxY ) 79 if ( yPos > maxY )
80 yPos = maxY; 80 yPos = maxY;
81 else if ( yPos < minY ) 81 else if ( yPos < minY )
82 yPos = minY; 82 yPos = minY;
83 83
84 int xp = 2 + (width() - 4) * xPos / (maxX - minX); 84 int xp = 2 + (width() - 4) * xPos / (maxX - minX);
85 int yp = height() - 2 - (height() - 4) * yPos / (maxY - minY); 85 int yp = height() - 2 - (height() - 4) * yPos / (maxY - minY);
86 86
87 setPosition( xp, yp ); 87 setPosition( xp, yp );
88} 88}
89 89
90QRect OXYSelector::contentsRect() const 90QRect OXYSelector::contentsRect() const
91{ 91{
92 return QRect( 2, 2, width()-4, height()-4 ); 92 return QRect( 2, 2, width()-4, height()-4 );
93} 93}
94 94
95void OXYSelector::paintEvent( QPaintEvent *ev ) 95void OXYSelector::paintEvent( QPaintEvent *ev )
96{ 96{
97 QRect cursorRect( px - STORE_W, py - STORE_W, STORE_W2, STORE_W2); 97 QRect cursorRect( px - STORE_W, py - STORE_W, STORE_W2, STORE_W2);
98 QRect paintRect = ev->rect(); 98 QRect paintRect = ev->rect();
99 99
100 QPainter painter; 100 QPainter painter;
101 painter.begin( this ); 101 painter.begin( this );
102 102
103 QBrush brush; 103 QBrush brush;
104 qDrawShadePanel( &painter, 0, 0, width(), height(), colorGroup(), 104 qDrawShadePanel( &painter, 0, 0, width(), height(), colorGroup(),
105 TRUE, 2, &brush ); 105 TRUE, 2, &brush );
106 106
107 drawContents( &painter ); 107 drawContents( &painter );
108 if (paintRect.contains(cursorRect)) 108 if (paintRect.contains(cursorRect))
109 { 109 {
110 bitBlt( &store, 0, 0, this, px - STORE_W, py - STORE_W, 110 bitBlt( &store, 0, 0, this, px - STORE_W, py - STORE_W,
111 STORE_W2, STORE_W2, CopyROP ); 111 STORE_W2, STORE_W2, CopyROP );
112 drawCursor( &painter, px, py ); 112 drawCursor( &painter, px, py );
113 } 113 }
114 else if (paintRect.intersects(cursorRect)) 114 else if (paintRect.intersects(cursorRect))
115 { 115 {
116 repaint( cursorRect, false); 116 repaint( cursorRect, false);
117 } 117 }
118 118
119 painter.end(); 119 painter.end();
120} 120}
121 121
122void OXYSelector::mousePressEvent( QMouseEvent *e ) 122void OXYSelector::mousePressEvent( QMouseEvent *e )
123{ 123{
124 int xVal, yVal; 124 int xVal, yVal;
125 valuesFromPosition( e->pos().x() - 2, e->pos().y() - 2, xVal, yVal ); 125 valuesFromPosition( e->pos().x() - 2, e->pos().y() - 2, xVal, yVal );
126 setValues( xVal, yVal ); 126 setValues( xVal, yVal );
127 127
128 emit valueChanged( xPos, yPos ); 128 emit valueChanged( xPos, yPos );
129} 129}
130 130
131void OXYSelector::mouseMoveEvent( QMouseEvent *e ) 131void OXYSelector::mouseMoveEvent( QMouseEvent *e )
132{ 132{
133 int xVal, yVal; 133 int xVal, yVal;
134 valuesFromPosition( e->pos().x() - 2, e->pos().y() - 2, xVal, yVal ); 134 valuesFromPosition( e->pos().x() - 2, e->pos().y() - 2, xVal, yVal );
135 setValues( xVal, yVal ); 135 setValues( xVal, yVal );
136 136
137 emit valueChanged( xPos, yPos ); 137 emit valueChanged( xPos, yPos );
138} 138}
139 139
140void OXYSelector::wheelEvent( QWheelEvent *e ) 140void OXYSelector::wheelEvent( QWheelEvent *e )
141{ 141{
142 #if QT_VERSION > 290 142 #if QT_VERSION >= 0x030000
143 if ( e->orientation() == Qt::Horizontal ) 143 if ( e->orientation() == Qt::Horizontal )
144 setValues( xValue() + e->delta()/120, yValue() ); 144 setValues( xValue() + e->delta()/120, yValue() );
145 else 145 else
146 setValues( xValue(), yValue() + e->delta()/120 ); 146 setValues( xValue(), yValue() + e->delta()/120 );
147 147
148 emit valueChanged( xPos, yPos ); 148 emit valueChanged( xPos, yPos );
149 #else 149 #else
150 Q_UNUSED( e ) 150 Q_UNUSED( e )
151 #endif 151 #endif
152} 152}
153 153
154void OXYSelector::valuesFromPosition( int x, int y, int &xVal, int &yVal ) const 154void OXYSelector::valuesFromPosition( int x, int y, int &xVal, int &yVal ) const
155{ 155{
156 xVal = ( (maxX-minX) * (x-2) ) / ( width()-4 ); 156 xVal = ( (maxX-minX) * (x-2) ) / ( width()-4 );
157 yVal = maxY - ( ( (maxY-minY) * (y-2) ) / ( height()-4 ) ); 157 yVal = maxY - ( ( (maxY-minY) * (y-2) ) / ( height()-4 ) );
158 158
159 if ( xVal > maxX ) 159 if ( xVal > maxX )
160 xVal = maxX; 160 xVal = maxX;
161 else if ( xVal < minX ) 161 else if ( xVal < minX )
162 xVal = minX; 162 xVal = minX;
163 163
164 if ( yVal > maxY ) 164 if ( yVal > maxY )
165 yVal = maxY; 165 yVal = maxY;
166 else if ( yVal < minY ) 166 else if ( yVal < minY )
167 yVal = minY; 167 yVal = minY;
168} 168}
169 169
170void OXYSelector::setPosition( int xp, int yp ) 170void OXYSelector::setPosition( int xp, int yp )
171{ 171{
172 if ( xp < 2 ) 172 if ( xp < 2 )
173 xp = 2; 173 xp = 2;
174 else if ( xp > width() - 2 ) 174 else if ( xp > width() - 2 )
175 xp = width() - 2; 175 xp = width() - 2;
176 176
177 if ( yp < 2 ) 177 if ( yp < 2 )
178 yp = 2; 178 yp = 2;
179 else if ( yp > height() - 2 ) 179 else if ( yp > height() - 2 )
180 yp = height() - 2; 180 yp = height() - 2;
181 181
182 QPainter painter; 182 QPainter painter;
183 painter.begin( this ); 183 painter.begin( this );
184 184
185 bitBlt( this, px - STORE_W, py - STORE_W, &store, 0, 0, 185 bitBlt( this, px - STORE_W, py - STORE_W, &store, 0, 0,
186 STORE_W2, STORE_W2, CopyROP ); 186 STORE_W2, STORE_W2, CopyROP );
187 bitBlt( &store, 0, 0, this, xp - STORE_W, yp - STORE_W, 187 bitBlt( &store, 0, 0, this, xp - STORE_W, yp - STORE_W,
188 STORE_W2, STORE_W2, CopyROP ); 188 STORE_W2, STORE_W2, CopyROP );
189 drawCursor( &painter, xp, yp ); 189 drawCursor( &painter, xp, yp );
190 px = xp; 190 px = xp;
191 py = yp; 191 py = yp;
192 192
193 painter.end(); 193 painter.end();
194} 194}
195 195
196void OXYSelector::drawContents( QPainter * ) 196void OXYSelector::drawContents( QPainter * )
197{} 197{}
198 198
199 199
200void OXYSelector::drawCursor( QPainter *p, int xp, int yp ) 200void OXYSelector::drawCursor( QPainter *p, int xp, int yp )
201{ 201{
202 p->setPen( QPen( white ) ); 202 p->setPen( QPen( white ) );
203 203
204 p->drawLine( xp - 6, yp - 6, xp - 2, yp - 2 ); 204 p->drawLine( xp - 6, yp - 6, xp - 2, yp - 2 );
205 p->drawLine( xp - 6, yp + 6, xp - 2, yp + 2 ); 205 p->drawLine( xp - 6, yp + 6, xp - 2, yp + 2 );
206 p->drawLine( xp + 6, yp - 6, xp + 2, yp - 2 ); 206 p->drawLine( xp + 6, yp - 6, xp + 2, yp - 2 );
207 p->drawLine( xp + 6, yp + 6, xp + 2, yp + 2 ); 207 p->drawLine( xp + 6, yp + 6, xp + 2, yp + 2 );
208} 208}
209 209
210//----------------------------------------------------------------------------- 210//-----------------------------------------------------------------------------
211/* 211/*
212 * 1D value selector with contents drawn by derived class. 212 * 1D value selector with contents drawn by derived class.
213 * See OColorDialog for example. 213 * See OColorDialog for example.
214 */ 214 */
215 215
216 216
217OSelector::OSelector( QWidget *parent, const char *name ) 217OSelector::OSelector( QWidget *parent, const char *name )
218 : QWidget( parent, name ), QRangeControl() 218 : QWidget( parent, name ), QRangeControl()
219{ 219{
220 _orientation = Horizontal; 220 _orientation = Horizontal;
221 _indent = TRUE; 221 _indent = TRUE;
222} 222}
223 223
224OSelector::OSelector( Orientation o, QWidget *parent, const char *name ) 224OSelector::OSelector( Orientation o, QWidget *parent, const char *name )
225 : QWidget( parent, name ), QRangeControl() 225 : QWidget( parent, name ), QRangeControl()
226{ 226{
227 _orientation = o; 227 _orientation = o;
228 _indent = TRUE; 228 _indent = TRUE;
229} 229}
230 230
231 231
232OSelector::~OSelector() 232OSelector::~OSelector()
233{} 233{}
234 234
235 235
236QRect OSelector::contentsRect() const 236QRect OSelector::contentsRect() const
237{ 237{
238 if ( orientation() == Vertical ) 238 if ( orientation() == Vertical )
239 return QRect( 2, 5, width()-9, height()-10 ); 239 return QRect( 2, 5, width()-9, height()-10 );
240 else 240 else
241 return QRect( 5, 2, width()-10, height()-9 ); 241 return QRect( 5, 2, width()-10, height()-9 );
242} 242}
243 243
244void OSelector::paintEvent( QPaintEvent * ) 244void OSelector::paintEvent( QPaintEvent * )
245{ 245{
246 QPainter painter; 246 QPainter painter;
247 247
248 painter.begin( this ); 248 painter.begin( this );
249 249
250 drawContents( &painter ); 250 drawContents( &painter );
251 251
252 QBrush brush; 252 QBrush brush;
253 253
254 if ( indent() ) 254 if ( indent() )
255 { 255 {
256 if ( orientation() == Vertical ) 256 if ( orientation() == Vertical )
257 qDrawShadePanel( &painter, 0, 3, width()-5, height()-6, 257 qDrawShadePanel( &painter, 0, 3, width()-5, height()-6,
258 colorGroup(), TRUE, 2, &brush ); 258 colorGroup(), TRUE, 2, &brush );
259 else 259 else
260 qDrawShadePanel( &painter, 3, 0, width()-6, height()-5, 260 qDrawShadePanel( &painter, 3, 0, width()-6, height()-5,
261 colorGroup(), TRUE, 2, &brush ); 261 colorGroup(), TRUE, 2, &brush );
262 } 262 }
263 263
264 QPoint pos = calcArrowPos( value() ); 264 QPoint pos = calcArrowPos( value() );
265 drawArrow( &painter, TRUE, pos ); 265 drawArrow( &painter, TRUE, pos );
266 266
267 painter.end(); 267 painter.end();
268} 268}
269 269
270void OSelector::mousePressEvent( QMouseEvent *e ) 270void OSelector::mousePressEvent( QMouseEvent *e )
271{ 271{
272 moveArrow( e->pos() ); 272 moveArrow( e->pos() );
273} 273}
274 274
275void OSelector::mouseMoveEvent( QMouseEvent *e ) 275void OSelector::mouseMoveEvent( QMouseEvent *e )
276{ 276{
277 moveArrow( e->pos() ); 277 moveArrow( e->pos() );
278} 278}
279 279
280void OSelector::wheelEvent( QWheelEvent *e ) 280void OSelector::wheelEvent( QWheelEvent *e )
281{ 281{
282 int val = value() + e->delta()/120; 282 int val = value() + e->delta()/120;
283 emit valueChanged( val ); 283 emit valueChanged( val );
284 setValue( val ); 284 setValue( val );
285} 285}
286 286
287void OSelector::valueChange() 287void OSelector::valueChange()
288{ 288{
289 QPainter painter; 289 QPainter painter;
290 QPoint pos; 290 QPoint pos;
291 291
292 painter.begin( this ); 292 painter.begin( this );
293 293
294 pos = calcArrowPos( prevValue() ); 294 pos = calcArrowPos( prevValue() );
295 drawArrow( &painter, FALSE, pos ); 295 drawArrow( &painter, FALSE, pos );
296 296
297 pos = calcArrowPos( value() ); 297 pos = calcArrowPos( value() );
298 drawArrow( &painter, TRUE, pos ); 298 drawArrow( &painter, TRUE, pos );
299 299
300 painter.end(); 300 painter.end();
301} 301}
302 302
303void OSelector::moveArrow( const QPoint &pos ) 303void OSelector::moveArrow( const QPoint &pos )
304{ 304{
305 int val; 305 int val;
306 306
307 if ( orientation() == Vertical ) 307 if ( orientation() == Vertical )
308 val = ( maxValue() - minValue() ) * (height()-pos.y()-3) 308 val = ( maxValue() - minValue() ) * (height()-pos.y()-3)
309 / (height()-10) + minValue(); 309 / (height()-10) + minValue();
310 else 310 else
311 val = ( maxValue() - minValue() ) * (width()-pos.x()-3) 311 val = ( maxValue() - minValue() ) * (width()-pos.x()-3)
312 / (width()-10) + minValue(); 312 / (width()-10) + minValue();
313 313
314 if ( val > maxValue() ) 314 if ( val > maxValue() )
315 val = maxValue(); 315 val = maxValue();
316 if ( val < minValue() ) 316 if ( val < minValue() )
317 val = minValue(); 317 val = minValue();
318 318
319 emit valueChanged( val ); 319 emit valueChanged( val );
320 setValue( val ); 320 setValue( val );
321} 321}
322 322
323QPoint OSelector::calcArrowPos( int val ) 323QPoint OSelector::calcArrowPos( int val )
324{ 324{
325 QPoint p; 325 QPoint p;
326 326
327 if ( orientation() == Vertical ) 327 if ( orientation() == Vertical )
328 { 328 {
329 p.setY( height() - ( (height()-10) * val 329 p.setY( height() - ( (height()-10) * val
330 / ( maxValue() - minValue() ) + 5 ) ); 330 / ( maxValue() - minValue() ) + 5 ) );
331 p.setX( width() - 5 ); 331 p.setX( width() - 5 );
332 } 332 }
333 else 333 else
334 { 334 {
335 p.setX( width() - ( (width()-10) * val 335 p.setX( width() - ( (width()-10) * val
336 / ( maxValue() - minValue() ) + 5 ) ); 336 / ( maxValue() - minValue() ) + 5 ) );
337 p.setY( height() - 5 ); 337 p.setY( height() - 5 );
338 } 338 }
339 339
340 return p; 340 return p;
341} 341}
342 342
343void OSelector::drawContents( QPainter * ) 343void OSelector::drawContents( QPainter * )
344{} 344{}
345 345
346void OSelector::drawArrow( QPainter *painter, bool show, const QPoint &pos ) 346void OSelector::drawArrow( QPainter *painter, bool show, const QPoint &pos )
347{ 347{
348 if ( show ) 348 if ( show )
349 { 349 {
350 QPointArray array(3); 350 QPointArray array(3);
351 351
352 painter->setPen( QPen() ); 352 painter->setPen( QPen() );
353 painter->setBrush( QBrush( colorGroup().buttonText() ) ); 353 painter->setBrush( QBrush( colorGroup().buttonText() ) );
354 if ( orientation() == Vertical ) 354 if ( orientation() == Vertical )
355 { 355 {
356 array.setPoint( 0, pos.x()+0, pos.y()+0 ); 356 array.setPoint( 0, pos.x()+0, pos.y()+0 );
357 array.setPoint( 1, pos.x()+5, pos.y()+5 ); 357 array.setPoint( 1, pos.x()+5, pos.y()+5 );
358 array.setPoint( 2, pos.x()+5, pos.y()-5 ); 358 array.setPoint( 2, pos.x()+5, pos.y()-5 );
359 } 359 }
360 else 360 else
361 { 361 {
362 array.setPoint( 0, pos.x()+0, pos.y()+0 ); 362 array.setPoint( 0, pos.x()+0, pos.y()+0 );
363 array.setPoint( 1, pos.x()+5, pos.y()+5 ); 363 array.setPoint( 1, pos.x()+5, pos.y()+5 );
364 array.setPoint( 2, pos.x()-5, pos.y()+5 ); 364 array.setPoint( 2, pos.x()-5, pos.y()+5 );
365 } 365 }
366 366
367 painter->drawPolygon( array ); 367 painter->drawPolygon( array );
368 } 368 }
369 else 369 else
370 { 370 {
371 if ( orientation() == Vertical ) 371 if ( orientation() == Vertical )
372 { 372 {
373 repaint(pos.x(), pos.y()-5, 6, 11, true); 373 repaint(pos.x(), pos.y()-5, 6, 11, true);
374 } 374 }
375 else 375 else
376 { 376 {
377 repaint(pos.x()-5, pos.y(), 11, 6, true); 377 repaint(pos.x()-5, pos.y(), 11, 6, true);
378 } 378 }
379 } 379 }
380} 380}
381 381
382//---------------------------------------------------------------------------- 382//----------------------------------------------------------------------------
383 383
384OGradientSelector::OGradientSelector( QWidget *parent, const char *name ) 384OGradientSelector::OGradientSelector( QWidget *parent, const char *name )
385 : OSelector( parent, name ) 385 : OSelector( parent, name )
386{ 386{
387 init(); 387 init();
388} 388}
389 389
390 390
391OGradientSelector::OGradientSelector( Orientation o, QWidget *parent, 391OGradientSelector::OGradientSelector( Orientation o, QWidget *parent,
392 const char *name ) 392 const char *name )
393 : OSelector( o, parent, name ) 393 : OSelector( o, parent, name )
394{ 394{
395 init(); 395 init();
396} 396}
397 397
398 398
399OGradientSelector::~OGradientSelector() 399OGradientSelector::~OGradientSelector()
400{} 400{}
401 401
402 402
403void OGradientSelector::init() 403void OGradientSelector::init()
404{ 404{
405 color1.setRgb( 0, 0, 0 ); 405 color1.setRgb( 0, 0, 0 );
406 color2.setRgb( 255, 255, 255 ); 406 color2.setRgb( 255, 255, 255 );
407 407
408 text1 = text2 = ""; 408 text1 = text2 = "";
409} 409}
410 410
411 411
412void OGradientSelector::drawContents( QPainter *painter ) 412void OGradientSelector::drawContents( QPainter *painter )
413{ 413{
414 QImage image( contentsRect().width(), contentsRect().height(), 32 ); 414 QImage image( contentsRect().width(), contentsRect().height(), 32 );
415 415
416 QColor col; 416 QColor col;
417 float scale; 417 float scale;
418 418
419 int redDiff = color2.red() - color1.red(); 419 int redDiff = color2.red() - color1.red();
420 int greenDiff = color2.green() - color1.green(); 420 int greenDiff = color2.green() - color1.green();
421 int blueDiff = color2.blue() - color1.blue(); 421 int blueDiff = color2.blue() - color1.blue();
422 422
423 if ( orientation() == Vertical ) 423 if ( orientation() == Vertical )
424 { 424 {
425 for ( int y = 0; y < image.height(); y++ ) 425 for ( int y = 0; y < image.height(); y++ )
426 { 426 {
427 scale = 1.0 * y / image.height(); 427 scale = 1.0 * y / image.height();
428 col.setRgb( color1.red() + int(redDiff*scale), 428 col.setRgb( color1.red() + int(redDiff*scale),
429 color1.green() + int(greenDiff*scale), 429 color1.green() + int(greenDiff*scale),
430 color1.blue() + int(blueDiff*scale) ); 430 color1.blue() + int(blueDiff*scale) );
431 431
432 unsigned int *p = (uint *) image.scanLine( y ); 432 unsigned int *p = (uint *) image.scanLine( y );
433 for ( int x = 0; x < image.width(); x++ ) 433 for ( int x = 0; x < image.width(); x++ )
434 *p++ = col.rgb(); 434 *p++ = col.rgb();
435 } 435 }
436 } 436 }
437 else 437 else
438 { 438 {
439 unsigned int *p = (uint *) image.scanLine( 0 ); 439 unsigned int *p = (uint *) image.scanLine( 0 );
440 440
441 for ( int x = 0; x < image.width(); x++ ) 441 for ( int x = 0; x < image.width(); x++ )
442 { 442 {
443 scale = 1.0 * x / image.width(); 443 scale = 1.0 * x / image.width();
444 col.setRgb( color1.red() + int(redDiff*scale), 444 col.setRgb( color1.red() + int(redDiff*scale),
445 color1.green() + int(greenDiff*scale), 445 color1.green() + int(greenDiff*scale),
446 color1.blue() + int(blueDiff*scale) ); 446 color1.blue() + int(blueDiff*scale) );
447 *p++ = col.rgb(); 447 *p++ = col.rgb();
448 } 448 }
449 449
450 for ( int y = 1; y < image.height(); y++ ) 450 for ( int y = 1; y < image.height(); y++ )
451 memcpy( image.scanLine( y ), image.scanLine( y - 1), 451 memcpy( image.scanLine( y ), image.scanLine( y - 1),
452 sizeof( unsigned int ) * image.width() ); 452 sizeof( unsigned int ) * image.width() );
453 } 453 }
454 454
455 QColor ditherPalette[8]; 455 QColor ditherPalette[8];
456 456
457 for ( int s = 0; s < 8; s++ ) 457 for ( int s = 0; s < 8; s++ )
458 ditherPalette[s].setRgb( color1.red() + redDiff * s / 8, 458 ditherPalette[s].setRgb( color1.red() + redDiff * s / 8,
459 color1.green() + greenDiff * s / 8, 459 color1.green() + greenDiff * s / 8,
460 color1.blue() + blueDiff * s / 8 ); 460 color1.blue() + blueDiff * s / 8 );
461 461
462 OImageEffect::dither( image, ditherPalette, 8 ); 462 OImageEffect::dither( image, ditherPalette, 8 );
463 463
464 QPixmap p; 464 QPixmap p;
465 p.convertFromImage( image ); 465 p.convertFromImage( image );
466 466
467 painter->drawPixmap( contentsRect().x(), contentsRect().y(), p ); 467 painter->drawPixmap( contentsRect().x(), contentsRect().y(), p );
468 468
469 if ( orientation() == Vertical ) 469 if ( orientation() == Vertical )
470 { 470 {
471 int yPos = contentsRect().top() + painter->fontMetrics().ascent() + 2; 471 int yPos = contentsRect().top() + painter->fontMetrics().ascent() + 2;
472 int xPos = contentsRect().left() + (contentsRect().width() - 472 int xPos = contentsRect().left() + (contentsRect().width() -
473 painter->fontMetrics().width( text2 )) / 2; 473 painter->fontMetrics().width( text2 )) / 2;
474 QPen pen( color2 ); 474 QPen pen( color2 );
475 painter->setPen( pen ); 475 painter->setPen( pen );
476 painter->drawText( xPos, yPos, text2 ); 476 painter->drawText( xPos, yPos, text2 );
477 477
478 yPos = contentsRect().bottom() - painter->fontMetrics().descent() - 2; 478 yPos = contentsRect().bottom() - painter->fontMetrics().descent() - 2;
479 xPos = contentsRect().left() + (contentsRect().width() - 479 xPos = contentsRect().left() + (contentsRect().width() -
480 painter->fontMetrics().width( text1 )) / 2; 480 painter->fontMetrics().width( text1 )) / 2;
481 pen.setColor( color1 ); 481 pen.setColor( color1 );
482 painter->setPen( pen ); 482 painter->setPen( pen );
483 painter->drawText( xPos, yPos, text1 ); 483 painter->drawText( xPos, yPos, text1 );
484 } 484 }
485 else 485 else
486 { 486 {
487 int yPos = contentsRect().bottom()-painter->fontMetrics().descent()-2; 487 int yPos = contentsRect().bottom()-painter->fontMetrics().descent()-2;
488 488
489 QPen pen( color2 ); 489 QPen pen( color2 );
490 painter->setPen( pen ); 490 painter->setPen( pen );
491 painter->drawText( contentsRect().left() + 2, yPos, text1 ); 491 painter->drawText( contentsRect().left() + 2, yPos, text1 );
492 492
493 pen.setColor( color1 ); 493 pen.setColor( color1 );
494 painter->setPen( pen ); 494 painter->setPen( pen );
495 painter->drawText( contentsRect().right() - 495 painter->drawText( contentsRect().right() -
496 painter->fontMetrics().width( text2 ) - 2, yPos, text2 ); 496 painter->fontMetrics().width( text2 ) - 2, yPos, text2 );
497 } 497 }
498} 498}
499 499
500//----------------------------------------------------------------------------- 500//-----------------------------------------------------------------------------
501 501
502static QColor *standardPalette = 0; 502static QColor *standardPalette = 0;
503 503
504#define STANDARD_PAL_SIZE 17 504#define STANDARD_PAL_SIZE 17
505 505
506OColor::OColor() 506OColor::OColor()
507: QColor() 507: QColor()
508{ 508{
509 r = 0; g = 0; b = 0; h = 0; s = 0; v = 0; 509 r = 0; g = 0; b = 0; h = 0; s = 0; v = 0;
510}; 510};
511 511
512OColor::OColor( const OColor &col) 512OColor::OColor( const OColor &col)
513: QColor( col ) 513: QColor( col )
514{ 514{
515 h = col.h; s = col.s; v = col.v; 515 h = col.h; s = col.s; v = col.v;
516 r = col.r; g = col.g; b = col.b; 516 r = col.r; g = col.g; b = col.b;
517}; 517};
518 518
519OColor::OColor( const QColor &col) 519OColor::OColor( const QColor &col)
520: QColor( col ) 520: QColor( col )
521{ 521{
522 QColor::rgb(&r, &g, &b); 522 QColor::rgb(&r, &g, &b);
523 QColor::hsv(&h, &s, &v); 523 QColor::hsv(&h, &s, &v);
524}; 524};
525 525
526bool OColor::operator==(const OColor& col) const 526bool OColor::operator==(const OColor& col) const
527{ 527{
528 return (h == col.h) && (s == col.s) && (v == col.v) && 528 return (h == col.h) && (s == col.s) && (v == col.v) &&
529 (r == col.r) && (g == col.g) && (b == col.b); 529 (r == col.r) && (g == col.g) && (b == col.b);
530} 530}
531 531
532OColor& OColor::operator=(const OColor& col) 532OColor& OColor::operator=(const OColor& col)
533{ 533{
534 *(QColor *)this = col; 534 *(QColor *)this = col;
535 h = col.h; s = col.s; v = col.v; 535 h = col.h; s = col.s; v = col.v;
536 r = col.r; g = col.g; b = col.b; 536 r = col.r; g = col.g; b = col.b;
537 return *this; 537 return *this;
538} 538}
539 539
540void 540void
541OColor::setHsv(int _h, int _s, int _v) 541OColor::setHsv(int _h, int _s, int _v)
542{ 542{
543 h = _h; s = _s; v = _v; 543 h = _h; s = _s; v = _v;
544 QColor::setHsv(h, s, v); 544 QColor::setHsv(h, s, v);
545 QColor::rgb(&r, &g, &b); 545 QColor::rgb(&r, &g, &b);
546}; 546};
547 547
548void 548void
549OColor::setRgb(int _r, int _g, int _b) 549OColor::setRgb(int _r, int _g, int _b)
550{ 550{
551 r = _r; g = _g; b = _b; 551 r = _r; g = _g; b = _b;
552 QColor::setRgb(r, g, b); 552 QColor::setRgb(r, g, b);
553 QColor::hsv(&h, &s, &v); 553 QColor::hsv(&h, &s, &v);
554} 554}
555 555
556void 556void
557OColor::rgb(int *_r, int *_g, int *_b) const 557OColor::rgb(int *_r, int *_g, int *_b) const
558{ 558{
559 *_r = r; *_g = g; *_b = b; 559 *_r = r; *_g = g; *_b = b;
560} 560}
561 561
562void 562void
563OColor::hsv(int *_h, int *_s, int *_v) const 563OColor::hsv(int *_h, int *_s, int *_v) const
564{ 564{
565 *_h = h; *_s = s; *_v = v; 565 *_h = h; *_s = s; *_v = v;
566} 566}
567 567
568static void createStandardPalette() 568static void createStandardPalette()
569{ 569{
570 if ( standardPalette ) 570 if ( standardPalette )
571 return; 571 return;
572 572
573 standardPalette = new QColor[STANDARD_PAL_SIZE]; 573 standardPalette = new QColor[STANDARD_PAL_SIZE];
574 574
575 int i = 0; 575 int i = 0;
576 576
577 standardPalette[i++] = Qt::red; 577 standardPalette[i++] = Qt::red;
578 standardPalette[i++] = Qt::green; 578 standardPalette[i++] = Qt::green;
579 standardPalette[i++] = Qt::blue; 579 standardPalette[i++] = Qt::blue;
580 standardPalette[i++] = Qt::cyan; 580 standardPalette[i++] = Qt::cyan;
581 standardPalette[i++] = Qt::magenta; 581 standardPalette[i++] = Qt::magenta;
582 standardPalette[i++] = Qt::yellow; 582 standardPalette[i++] = Qt::yellow;
583 standardPalette[i++] = Qt::darkRed; 583 standardPalette[i++] = Qt::darkRed;
584 standardPalette[i++] = Qt::darkGreen; 584 standardPalette[i++] = Qt::darkGreen;
585 standardPalette[i++] = Qt::darkBlue; 585 standardPalette[i++] = Qt::darkBlue;
586 standardPalette[i++] = Qt::darkCyan; 586 standardPalette[i++] = Qt::darkCyan;
587 standardPalette[i++] = Qt::darkMagenta; 587 standardPalette[i++] = Qt::darkMagenta;
588 standardPalette[i++] = Qt::darkYellow; 588 standardPalette[i++] = Qt::darkYellow;
589 standardPalette[i++] = Qt::white; 589 standardPalette[i++] = Qt::white;
590 standardPalette[i++] = Qt::lightGray; 590 standardPalette[i++] = Qt::lightGray;
591 standardPalette[i++] = Qt::gray; 591 standardPalette[i++] = Qt::gray;
592 standardPalette[i++] = Qt::darkGray; 592 standardPalette[i++] = Qt::darkGray;
593 standardPalette[i++] = Qt::black; 593 standardPalette[i++] = Qt::black;
594} 594}
595 595
596 596
597OHSSelector::OHSSelector( QWidget *parent, const char *name ) 597OHSSelector::OHSSelector( QWidget *parent, const char *name )
598 : OXYSelector( parent, name ) 598 : OXYSelector( parent, name )
599{ 599{
600 setRange( 0, 0, 359, 255 ); 600 setRange( 0, 0, 359, 255 );
601} 601}
602 602
603void OHSSelector::updateContents() 603void OHSSelector::updateContents()
604{ 604{
605 drawPalette(&pixmap); 605 drawPalette(&pixmap);
606} 606}
607 607
608void OHSSelector::resizeEvent( QResizeEvent * ) 608void OHSSelector::resizeEvent( QResizeEvent * )
609{ 609{
610 updateContents(); 610 updateContents();
611} 611}
612 612
613void OHSSelector::drawContents( QPainter *painter ) 613void OHSSelector::drawContents( QPainter *painter )
614{ 614{
615 painter->drawPixmap( contentsRect().x(), contentsRect().y(), pixmap ); 615 painter->drawPixmap( contentsRect().x(), contentsRect().y(), pixmap );
616} 616}
617 617
618void OHSSelector::drawPalette( QPixmap *pixmap ) 618void OHSSelector::drawPalette( QPixmap *pixmap )
619{ 619{
620 int xSize = contentsRect().width(), ySize = contentsRect().height(); 620 int xSize = contentsRect().width(), ySize = contentsRect().height();
621 QImage image( xSize, ySize, 32 ); 621 QImage image( xSize, ySize, 32 );
622 QColor col; 622 QColor col;
623 int h, s; 623 int h, s;
624 uint *p; 624 uint *p;
625 625
626 for ( s = ySize-1; s >= 0; s-- ) 626 for ( s = ySize-1; s >= 0; s-- )
627 { 627 {
628 p = (uint *) image.scanLine( ySize - s - 1 ); 628 p = (uint *) image.scanLine( ySize - s - 1 );
629 for( h = 0; h < xSize; h++ ) 629 for( h = 0; h < xSize; h++ )
630 { 630 {
631 col.setHsv( 359*h/(xSize-1), 255*s/(ySize-1), 192 ); 631 col.setHsv( 359*h/(xSize-1), 255*s/(ySize-1), 192 );
632 *p = col.rgb(); 632 *p = col.rgb();
633 p++; 633 p++;
634 } 634 }
635 } 635 }
636 636
637 if ( QColor::numBitPlanes() <= 8 ) 637 if ( QColor::numBitPlanes() <= 8 )
638 { 638 {
639 createStandardPalette(); 639 createStandardPalette();
640 OImageEffect::dither( image, standardPalette, STANDARD_PAL_SIZE ); 640 OImageEffect::dither( image, standardPalette, STANDARD_PAL_SIZE );
641 } 641 }
642 pixmap->convertFromImage( image ); 642 pixmap->convertFromImage( image );
643} 643}
644 644
645 645
646//----------------------------------------------------------------------------- 646//-----------------------------------------------------------------------------
647 647
648OValueSelector::OValueSelector( QWidget *parent, const char *name ) 648OValueSelector::OValueSelector( QWidget *parent, const char *name )
649 : OSelector( OSelector::Vertical, parent, name ), _hue(0), _sat(0) 649 : OSelector( OSelector::Vertical, parent, name ), _hue(0), _sat(0)
650{ 650{
651 setRange( 0, 255 ); 651 setRange( 0, 255 );
652 pixmap.setOptimization( QPixmap::BestOptim ); 652 pixmap.setOptimization( QPixmap::BestOptim );
653} 653}
654 654
655OValueSelector::OValueSelector(Orientation o, QWidget *parent, const char *name 655OValueSelector::OValueSelector(Orientation o, QWidget *parent, const char *name
656 ) 656 )
657 : OSelector( o, parent, name), _hue(0), _sat(0) 657 : OSelector( o, parent, name), _hue(0), _sat(0)
658{ 658{
659 setRange( 0, 255 ); 659 setRange( 0, 255 );
660 pixmap.setOptimization( QPixmap::BestOptim ); 660 pixmap.setOptimization( QPixmap::BestOptim );
661} 661}
662 662
663void OValueSelector::updateContents() 663void OValueSelector::updateContents()
664{ 664{
665 drawPalette(&pixmap); 665 drawPalette(&pixmap);
666} 666}
667 667
668void OValueSelector::resizeEvent( QResizeEvent * ) 668void OValueSelector::resizeEvent( QResizeEvent * )
669{ 669{
670 updateContents(); 670 updateContents();
671} 671}
672 672
673void OValueSelector::drawContents( QPainter *painter ) 673void OValueSelector::drawContents( QPainter *painter )
674{ 674{
675 painter->drawPixmap( contentsRect().x(), contentsRect().y(), pixmap ); 675 painter->drawPixmap( contentsRect().x(), contentsRect().y(), pixmap );
676} 676}
677 677
678void OValueSelector::drawPalette( QPixmap *pixmap ) 678void OValueSelector::drawPalette( QPixmap *pixmap )
679{ 679{
680 int xSize = contentsRect().width(), ySize = contentsRect().height(); 680 int xSize = contentsRect().width(), ySize = contentsRect().height();
681 QImage image( xSize, ySize, 32 ); 681 QImage image( xSize, ySize, 32 );
682 QColor col; 682 QColor col;
683 uint *p; 683 uint *p;
684 QRgb rgb; 684 QRgb rgb;
685 685
686 if ( orientation() == OSelector::Horizontal ) 686 if ( orientation() == OSelector::Horizontal )
687 { 687 {
688 for ( int v = 0; v < ySize; v++ ) 688 for ( int v = 0; v < ySize; v++ )
689 { 689 {
690 p = (uint *) image.scanLine( ySize - v - 1 ); 690 p = (uint *) image.scanLine( ySize - v - 1 );
691 691
692 for( int x = 0; x < xSize; x++ ) 692 for( int x = 0; x < xSize; x++ )
693 { 693 {
694 col.setHsv( _hue, _sat, 255*x/(xSize-1) ); 694 col.setHsv( _hue, _sat, 255*x/(xSize-1) );
695 rgb = col.rgb(); 695 rgb = col.rgb();
696 *p++ = rgb; 696 *p++ = rgb;
697 } 697 }
698 } 698 }
699 } 699 }
700 700
701 if( orientation() == OSelector::Vertical ) 701 if( orientation() == OSelector::Vertical )
702 { 702 {
703 for ( int v = 0; v < ySize; v++ ) 703 for ( int v = 0; v < ySize; v++ )
704 { 704 {
705 p = (uint *) image.scanLine( ySize - v - 1 ); 705 p = (uint *) image.scanLine( ySize - v - 1 );
706 col.setHsv( _hue, _sat, 255*v/(ySize-1) ); 706 col.setHsv( _hue, _sat, 255*v/(ySize-1) );
707 rgb = col.rgb(); 707 rgb = col.rgb();
708 for ( int i = 0; i < xSize; i++ ) 708 for ( int i = 0; i < xSize; i++ )
709 *p++ = rgb; 709 *p++ = rgb;
710 } 710 }
711 } 711 }
712 712
713 if ( QColor::numBitPlanes() <= 8 ) 713 if ( QColor::numBitPlanes() <= 8 )
714 { 714 {
715 createStandardPalette(); 715 createStandardPalette();
716 OImageEffect::dither( image, standardPalette, STANDARD_PAL_SIZE ); 716 OImageEffect::dither( image, standardPalette, STANDARD_PAL_SIZE );
717 } 717 }
718 pixmap->convertFromImage( image ); 718 pixmap->convertFromImage( image );
719} 719}
diff --git a/libopie2/opieui/oselector.h b/libopie2/opieui/oselector.h
index fe75a46..3dbdb38 100644
--- a/libopie2/opieui/oselector.h
+++ b/libopie2/opieui/oselector.h
@@ -1,523 +1,523 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 1997 Martin Jones (mjones@kde.org) 2 Copyright (C) 1997 Martin Jones (mjones@kde.org)
3 3
4 This library is free software; you can redistribute it and/or 4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public 5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either 6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version. 7 version 2 of the License, or (at your option) any later version.
8 8
9 This library is distributed in the hope that it will be useful, 9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details. 12 Library General Public License for more details.
13 13
14 You should have received a copy of the GNU Library General Public License 14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to 15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 16 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. 17 Boston, MA 02111-1307, USA.
18*/ 18*/
19//----------------------------------------------------------------------------- 19//-----------------------------------------------------------------------------
20// Selector widgets for KDE Color Selector, but probably useful for other 20// Selector widgets for KDE Color Selector, but probably useful for other
21// stuff also. 21// stuff also.
22 22
23#ifndef __OSELECT_H__ 23#ifndef __OSELECT_H__
24#define __OSELECT_H__ 24#define __OSELECT_H__
25 25
26#include <qwidget.h> 26#include <qwidget.h>
27#include <qrangecontrol.h> 27#include <qrangecontrol.h>
28#include <qpixmap.h> 28#include <qpixmap.h>
29 29
30 30
31namespace Opie { 31namespace Opie {
32namespace Ui { 32namespace Ui {
33/** 33/**
34 * OXYSelector is the base class for other widgets which 34 * OXYSelector is the base class for other widgets which
35 * provides the ability to choose from a two-dimensional 35 * provides the ability to choose from a two-dimensional
36 * range of values. The currently chosen value is indicated 36 * range of values. The currently chosen value is indicated
37 * by a cross. An example is the @ref OHSSelector which 37 * by a cross. An example is the @ref OHSSelector which
38 * allows to choose from a range of colors, and which is 38 * allows to choose from a range of colors, and which is
39 * used in OColorDialog. 39 * used in OColorDialog.
40 * 40 *
41 * A custom drawing routine for the widget surface has 41 * A custom drawing routine for the widget surface has
42 * to be provided by the subclass. 42 * to be provided by the subclass.
43 */ 43 */
44class OXYSelector : public QWidget 44class OXYSelector : public QWidget
45{ 45{
46 Q_OBJECT 46 Q_OBJECT
47 47
48public: 48public:
49 /** 49 /**
50 * Constructs a two-dimensional selector widget which 50 * Constructs a two-dimensional selector widget which
51 * has a value range of [0..100] in both directions. 51 * has a value range of [0..100] in both directions.
52 */ 52 */
53 OXYSelector( QWidget *parent=0, const char *name=0 ); 53 OXYSelector( QWidget *parent=0, const char *name=0 );
54 /** 54 /**
55 * Destructs the widget. 55 * Destructs the widget.
56 */ 56 */
57 ~OXYSelector(); 57 ~OXYSelector();
58 58
59 /** 59 /**
60 * Sets the current values in horizontal and 60 * Sets the current values in horizontal and
61 * vertical direction. 61 * vertical direction.
62 */ 62 */
63 void setValues( int xPos, int yPos ); 63 void setValues( int xPos, int yPos );
64 /** 64 /**
65 * Sets the range of possible values. 65 * Sets the range of possible values.
66 */ 66 */
67 void setRange( int minX, int minY, int maxX, int maxY ); 67 void setRange( int minX, int minY, int maxX, int maxY );
68 68
69 /** 69 /**
70 * @return the current value in horizontal direction. 70 * @return the current value in horizontal direction.
71 */ 71 */
72 int xValue() const {return xPos; } 72 int xValue() const {return xPos; }
73 /** 73 /**
74 * @return the current value in vertical direction. 74 * @return the current value in vertical direction.
75 */ 75 */
76 int yValue() const {return yPos; } 76 int yValue() const {return yPos; }
77 77
78 /** 78 /**
79 * @return the rectangle on which subclasses should draw. 79 * @return the rectangle on which subclasses should draw.
80 */ 80 */
81 QRect contentsRect() const; 81 QRect contentsRect() const;
82 82
83signals: 83signals:
84 /** 84 /**
85 * This signal is emitted whenever the user chooses a value, 85 * This signal is emitted whenever the user chooses a value,
86 * e.g. by clicking with the mouse on the widget. 86 * e.g. by clicking with the mouse on the widget.
87 */ 87 */
88 void valueChanged( int x, int y ); 88 void valueChanged( int x, int y );
89 89
90protected: 90protected:
91 /** 91 /**
92 * Override this function to draw the contents of the widget. 92 * Override this function to draw the contents of the widget.
93 * The default implementation does nothing. 93 * The default implementation does nothing.
94 * 94 *
95 * Draw within @ref contentsRect() only. 95 * Draw within @ref contentsRect() only.
96 */ 96 */
97 virtual void drawContents( QPainter * ); 97 virtual void drawContents( QPainter * );
98 /** 98 /**
99 * Override this function to draw the cursor which 99 * Override this function to draw the cursor which
100 * indicates the currently selected value pair. 100 * indicates the currently selected value pair.
101 */ 101 */
102 virtual void drawCursor( QPainter *p, int xp, int yp ); 102 virtual void drawCursor( QPainter *p, int xp, int yp );
103 /** 103 /**
104 * @reimplemented 104 * @reimplemented
105 */ 105 */
106 virtual void paintEvent( QPaintEvent *e ); 106 virtual void paintEvent( QPaintEvent *e );
107 /** 107 /**
108 * @reimplemented 108 * @reimplemented
109 */ 109 */
110 virtual void mousePressEvent( QMouseEvent *e ); 110 virtual void mousePressEvent( QMouseEvent *e );
111 /** 111 /**
112 * @reimplemented 112 * @reimplemented
113 */ 113 */
114 virtual void mouseMoveEvent( QMouseEvent *e ); 114 virtual void mouseMoveEvent( QMouseEvent *e );
115 /** 115 /**
116 * @reimplemented 116 * @reimplemented
117 */ 117 */
118 virtual void wheelEvent( QWheelEvent * ); 118 virtual void wheelEvent( QWheelEvent * );
119 /** 119 /**
120 * Converts a pixel position to its corresponding values. 120 * Converts a pixel position to its corresponding values.
121 */ 121 */
122 void valuesFromPosition( int x, int y, int& xVal, int& yVal ) const; 122 void valuesFromPosition( int x, int y, int& xVal, int& yVal ) const;
123 123
124private: 124private:
125 void setPosition( int xp, int yp ); 125 void setPosition( int xp, int yp );
126 int px; 126 int px;
127 int py; 127 int py;
128 int xPos; 128 int xPos;
129 int yPos; 129 int yPos;
130 int minX; 130 int minX;
131 int maxX; 131 int maxX;
132 int minY; 132 int minY;
133 int maxY; 133 int maxY;
134 QPixmap store; 134 QPixmap store;
135 135
136private: 136private:
137 class OXYSelectorPrivate; 137 class OXYSelectorPrivate;
138 OXYSelectorPrivate *d; 138 OXYSelectorPrivate *d;
139}; 139};
140 140
141 141
142/** 142/**
143 * OSelector is the base class for other widgets which 143 * OSelector is the base class for other widgets which
144 * provides the ability to choose from a one-dimensional 144 * provides the ability to choose from a one-dimensional
145 * range of values. An example is the @ref OGradientSelector 145 * range of values. An example is the @ref OGradientSelector
146 * which allows to choose from a range of colors. 146 * which allows to choose from a range of colors.
147 * 147 *
148 * A custom drawing routine for the widget surface has 148 * A custom drawing routine for the widget surface has
149 * to be provided by the subclass. 149 * to be provided by the subclass.
150 */ 150 */
151class OSelector : public QWidget, public QRangeControl 151class OSelector : public QWidget, public QRangeControl
152{ 152{
153 Q_OBJECT 153 Q_OBJECT
154 Q_PROPERTY( int value READ value WRITE setValue ) 154 Q_PROPERTY( int value READ value WRITE setValue )
155 Q_PROPERTY( int minValue READ minValue WRITE setMinValue ) 155 Q_PROPERTY( int minValue READ minValue WRITE setMinValue )
156 Q_PROPERTY( int maxValue READ maxValue WRITE setMaxValue ) 156 Q_PROPERTY( int maxValue READ maxValue WRITE setMaxValue )
157public: 157public:
158 158
159 /** 159 /**
160 * Constructs a horizontal one-dimensional selection widget. 160 * Constructs a horizontal one-dimensional selection widget.
161 */ 161 */
162 OSelector( QWidget *parent=0, const char *name=0 ); 162 OSelector( QWidget *parent=0, const char *name=0 );
163 /** 163 /**
164 * Constructs a one-dimensional selection widget with 164 * Constructs a one-dimensional selection widget with
165 * a given orientation. 165 * a given orientation.
166 */ 166 */
167 OSelector( Orientation o, QWidget *parent = 0L, const char *name = 0L ); 167 OSelector( Orientation o, QWidget *parent = 0L, const char *name = 0L );
168 /* 168 /*
169 * Destructs the widget. 169 * Destructs the widget.
170 */ 170 */
171 ~OSelector(); 171 ~OSelector();
172 172
173 /** 173 /**
174 * @return the orientation of the widget. 174 * @return the orientation of the widget.
175 */ 175 */
176 Orientation orientation() const 176 Orientation orientation() const
177 {return _orientation; } 177 {return _orientation; }
178 178
179 /** 179 /**
180 * @return the rectangle on which subclasses should draw. 180 * @return the rectangle on which subclasses should draw.
181 */ 181 */
182 QRect contentsRect() const; 182 QRect contentsRect() const;
183 183
184 /** 184 /**
185 * Sets the indent option of the widget to i. 185 * Sets the indent option of the widget to i.
186 * This determines whether a shaded frame is drawn. 186 * This determines whether a shaded frame is drawn.
187 */ 187 */
188 void setIndent( bool i ) 188 void setIndent( bool i )
189 {_indent = i; } 189 {_indent = i; }
190 /** 190 /**
191 * @return whether the indent option is set. 191 * @return whether the indent option is set.
192 */ 192 */
193 bool indent() const 193 bool indent() const
194 {return _indent; } 194 {return _indent; }
195 195
196 /** 196 /**
197 * Sets the value. 197 * Sets the value.
198 */ 198 */
199 void setValue(int value) 199 void setValue(int value)
200 { QRangeControl::setValue(value); } 200 { QRangeControl::setValue(value); }
201 201
202 /** 202 /**
203 * @returns the value. 203 * @returns the value.
204 */ 204 */
205 int value() const 205 int value() const
206 { return QRangeControl::value(); } 206 { return QRangeControl::value(); }
207 207
208 /** 208 /**
209 * Sets the min value. 209 * Sets the min value.
210 */ 210 */
211 #if ( QT_VERSION > 290 ) 211 #if ( QT_VERSION >= 0x030000 )
212 void setMinValue(int value) { QRangeControl::setMinValue(value); } 212 void setMinValue(int value) { QRangeControl::setMinValue(value); }
213 #else 213 #else
214 void setMinValue(int value) { QRangeControl::setRange(value,QRangeControl::maxValue()); } 214 void setMinValue(int value) { QRangeControl::setRange(value,QRangeControl::maxValue()); }
215 #endif 215 #endif
216 216
217 /** 217 /**
218 * @return the min value. 218 * @return the min value.
219 */ 219 */
220 int minValue() const 220 int minValue() const
221 { return QRangeControl::minValue(); } 221 { return QRangeControl::minValue(); }
222 222
223 /** 223 /**
224 * Sets the max value. 224 * Sets the max value.
225 */ 225 */
226 #if ( QT_VERSION > 290 ) 226 #if ( QT_VERSION >= 0x030000 )
227 void setMaxValue(int value) { QRangeControl::setMaxValue(value); } 227 void setMaxValue(int value) { QRangeControl::setMaxValue(value); }
228 #else 228 #else
229 void setMaxValue(int value) { QRangeControl::setRange(QRangeControl::minValue(),value); } 229 void setMaxValue(int value) { QRangeControl::setRange(QRangeControl::minValue(),value); }
230 #endif 230 #endif
231 231
232 /** 232 /**
233 * @return the max value. 233 * @return the max value.
234 */ 234 */
235 int maxValue() const 235 int maxValue() const
236 { return QRangeControl::maxValue(); } 236 { return QRangeControl::maxValue(); }
237 237
238signals: 238signals:
239 /** 239 /**
240 * This signal is emitted whenever the user chooses a value, 240 * This signal is emitted whenever the user chooses a value,
241 * e.g. by clicking with the mouse on the widget. 241 * e.g. by clicking with the mouse on the widget.
242 */ 242 */
243 void valueChanged( int value ); 243 void valueChanged( int value );
244 244
245protected: 245protected:
246 /** 246 /**
247 * Override this function to draw the contents of the control. 247 * Override this function to draw the contents of the control.
248 * The default implementation does nothing. 248 * The default implementation does nothing.
249 * 249 *
250 * Draw only within contentsRect(). 250 * Draw only within contentsRect().
251 */ 251 */
252 virtual void drawContents( QPainter * ); 252 virtual void drawContents( QPainter * );
253 /** 253 /**
254 * Override this function to draw the cursor which 254 * Override this function to draw the cursor which
255 * indicates the current value. This function is 255 * indicates the current value. This function is
256 * always called twice, once with argument show=false 256 * always called twice, once with argument show=false
257 * to clear the old cursor, once with argument show=true 257 * to clear the old cursor, once with argument show=true
258 * to draw the new one. 258 * to draw the new one.
259 */ 259 */
260 virtual void drawArrow( QPainter *painter, bool show, const QPoint &pos ); 260 virtual void drawArrow( QPainter *painter, bool show, const QPoint &pos );
261 261
262 /** 262 /**
263 * @reimplemented 263 * @reimplemented
264 */ 264 */
265 virtual void valueChange(); 265 virtual void valueChange();
266 /** 266 /**
267 * @reimplemented 267 * @reimplemented
268 */ 268 */
269 virtual void paintEvent( QPaintEvent * ); 269 virtual void paintEvent( QPaintEvent * );
270 /** 270 /**
271 * @reimplemented 271 * @reimplemented
272 */ 272 */
273 virtual void mousePressEvent( QMouseEvent *e ); 273 virtual void mousePressEvent( QMouseEvent *e );
274 /** 274 /**
275 * @reimplemented 275 * @reimplemented
276 */ 276 */
277 virtual void mouseMoveEvent( QMouseEvent *e ); 277 virtual void mouseMoveEvent( QMouseEvent *e );
278 /** 278 /**
279 * @reimplemented 279 * @reimplemented
280 */ 280 */
281 virtual void wheelEvent( QWheelEvent * ); 281 virtual void wheelEvent( QWheelEvent * );
282 282
283private: 283private:
284 QPoint calcArrowPos( int val ); 284 QPoint calcArrowPos( int val );
285 void moveArrow( const QPoint &pos ); 285 void moveArrow( const QPoint &pos );
286 286
287 Orientation _orientation; 287 Orientation _orientation;
288 bool _indent; 288 bool _indent;
289 289
290private: 290private:
291 class OSelectorPrivate; 291 class OSelectorPrivate;
292 OSelectorPrivate *d; 292 OSelectorPrivate *d;
293}; 293};
294 294
295 295
296/** 296/**
297 * The OGradientSelector widget allows the user to choose 297 * The OGradientSelector widget allows the user to choose
298 * from a one-dimensional range of colors which is given as a 298 * from a one-dimensional range of colors which is given as a
299 * gradient between two colors provided by the programmer. 299 * gradient between two colors provided by the programmer.
300 */ 300 */
301class OGradientSelector : public OSelector 301class OGradientSelector : public OSelector
302{ 302{
303 Q_OBJECT 303 Q_OBJECT
304 304
305 Q_PROPERTY( QColor firstColor READ firstColor WRITE setFirstColor ) 305 Q_PROPERTY( QColor firstColor READ firstColor WRITE setFirstColor )
306 Q_PROPERTY( QColor secondColor READ secondColor WRITE setSecondColor ) 306 Q_PROPERTY( QColor secondColor READ secondColor WRITE setSecondColor )
307 Q_PROPERTY( QString firstText READ firstText WRITE setFirstText ) 307 Q_PROPERTY( QString firstText READ firstText WRITE setFirstText )
308 Q_PROPERTY( QString secondText READ secondText WRITE setSecondText ) 308 Q_PROPERTY( QString secondText READ secondText WRITE setSecondText )
309 309
310public: 310public:
311 /** 311 /**
312 * Constructs a horizontal color selector which 312 * Constructs a horizontal color selector which
313 * contains a gradient between white and black. 313 * contains a gradient between white and black.
314 */ 314 */
315 OGradientSelector( QWidget *parent=0, const char *name=0 ); 315 OGradientSelector( QWidget *parent=0, const char *name=0 );
316 /** 316 /**
317 * Constructs a colors selector with orientation o which 317 * Constructs a colors selector with orientation o which
318 * contains a gradient between white and black. 318 * contains a gradient between white and black.
319 */ 319 */
320 OGradientSelector( Orientation o, QWidget *parent=0, const char *name=0 ); 320 OGradientSelector( Orientation o, QWidget *parent=0, const char *name=0 );
321 /** 321 /**
322 * Destructs the widget. 322 * Destructs the widget.
323 */ 323 */
324 ~OGradientSelector(); 324 ~OGradientSelector();
325 /** 325 /**
326 * Sets the two colors which span the gradient. 326 * Sets the two colors which span the gradient.
327 */ 327 */
328 void setColors( const QColor &col1, const QColor &col2 ) 328 void setColors( const QColor &col1, const QColor &col2 )
329 {color1 = col1; color2 = col2; update();} 329 {color1 = col1; color2 = col2; update();}
330 void setText( const QString &t1, const QString &t2 ) 330 void setText( const QString &t1, const QString &t2 )
331 {text1 = t1; text2 = t2; update(); } 331 {text1 = t1; text2 = t2; update(); }
332 332
333 /** 333 /**
334 * Set each color on its own. 334 * Set each color on its own.
335 */ 335 */
336 void setFirstColor( const QColor &col ) 336 void setFirstColor( const QColor &col )
337 { color1 = col; update(); } 337 { color1 = col; update(); }
338 void setSecondColor( const QColor &col ) 338 void setSecondColor( const QColor &col )
339 { color2 = col; update(); } 339 { color2 = col; update(); }
340 340
341 /** 341 /**
342 * Set each description on its own 342 * Set each description on its own
343 */ 343 */
344 void setFirstText( const QString &t ) 344 void setFirstText( const QString &t )
345 { text1 = t; update(); } 345 { text1 = t; update(); }
346 void setSecondText( const QString &t ) 346 void setSecondText( const QString &t )
347 { text2 = t; update(); } 347 { text2 = t; update(); }
348 348
349 const QColor firstColor() const 349 const QColor firstColor() const
350 { return color1; } 350 { return color1; }
351 const QColor secondColor() const 351 const QColor secondColor() const
352 { return color2; } 352 { return color2; }
353 353
354 const QString firstText() const 354 const QString firstText() const
355 { return text1; } 355 { return text1; }
356 const QString secondText() const 356 const QString secondText() const
357 { return text2; } 357 { return text2; }
358 358
359protected: 359protected:
360 /** 360 /**
361 * @reimplemented 361 * @reimplemented
362 */ 362 */
363 virtual void drawContents( QPainter * ); 363 virtual void drawContents( QPainter * );
364 364
365 /** 365 /**
366 * @reimplemented 366 * @reimplemented
367 */ 367 */
368 virtual QSize minimumSize() const 368 virtual QSize minimumSize() const
369 { return sizeHint(); } 369 { return sizeHint(); }
370 370
371private: 371private:
372 void init(); 372 void init();
373 QColor color1; 373 QColor color1;
374 QColor color2; 374 QColor color2;
375 QString text1; 375 QString text1;
376 QString text2; 376 QString text2;
377 377
378private: 378private:
379 class OGradientSelectorPrivate; 379 class OGradientSelectorPrivate;
380 OGradientSelectorPrivate *d; 380 OGradientSelectorPrivate *d;
381}; 381};
382 382
383/** 383/**
384 * Widget for Hue/Saturation selection. 384 * Widget for Hue/Saturation selection.
385 * The actual values can be fetched using the inherited xValue and yValue 385 * The actual values can be fetched using the inherited xValue and yValue
386 * methods. 386 * methods.
387 * 387 *
388 * @see OXYSelector, OValueSelector, OColorDialog 388 * @see OXYSelector, OValueSelector, OColorDialog
389 * @author Martin Jones (mjones@kde.org) 389 * @author Martin Jones (mjones@kde.org)
390 * @version $Id$ 390 * @version $Id$
391*/ 391*/
392class OHSSelector : public OXYSelector 392class OHSSelector : public OXYSelector
393{ 393{
394 Q_OBJECT 394 Q_OBJECT
395 395
396public: 396public:
397 /** 397 /**
398 * Constructs a hue/saturation selection widget. 398 * Constructs a hue/saturation selection widget.
399 */ 399 */
400 OHSSelector( QWidget *parent=0, const char *name=0 ); 400 OHSSelector( QWidget *parent=0, const char *name=0 );
401 401
402protected: 402protected:
403 /** 403 /**
404 * Draws the contents of the widget on a pixmap, 404 * Draws the contents of the widget on a pixmap,
405 * which is used for buffering. 405 * which is used for buffering.
406 */ 406 */
407 virtual void drawPalette( QPixmap *pixmap ); 407 virtual void drawPalette( QPixmap *pixmap );
408 /** 408 /**
409 * @reimplemented 409 * @reimplemented
410 */ 410 */
411 virtual void resizeEvent( QResizeEvent * ); 411 virtual void resizeEvent( QResizeEvent * );
412 /** 412 /**
413 * Reimplemented from OXYSelector. This drawing is 413 * Reimplemented from OXYSelector. This drawing is
414 * buffered in a pixmap here. As real drawing 414 * buffered in a pixmap here. As real drawing
415 * routine, drawPalette() is used. 415 * routine, drawPalette() is used.
416 */ 416 */
417 virtual void drawContents( QPainter *painter ); 417 virtual void drawContents( QPainter *painter );
418 418
419private: 419private:
420 void updateContents(); 420 void updateContents();
421 QPixmap pixmap; 421 QPixmap pixmap;
422 422
423private: 423private:
424 class OHSSelectorPrivate; 424 class OHSSelectorPrivate;
425 OHSSelectorPrivate *d; 425 OHSSelectorPrivate *d;
426}; 426};
427 427
428 428
429class OValueSelectorPrivate; 429class OValueSelectorPrivate;
430/** 430/**
431 * Widget for color value selection. 431 * Widget for color value selection.
432 * 432 *
433 * @see OHSSelector, OColorDialog 433 * @see OHSSelector, OColorDialog
434 * @author Martin Jones (mjones@kde.org) 434 * @author Martin Jones (mjones@kde.org)
435 * @version $Id$ 435 * @version $Id$
436 */ 436 */
437class OValueSelector : public OSelector 437class OValueSelector : public OSelector
438{ 438{
439 Q_OBJECT 439 Q_OBJECT
440 440
441public: 441public:
442 /** 442 /**
443 * Constructs a widget for color selection. 443 * Constructs a widget for color selection.
444 */ 444 */
445 OValueSelector( QWidget *parent=0, const char *name=0 ); 445 OValueSelector( QWidget *parent=0, const char *name=0 );
446 /** 446 /**
447 * Constructs a widget for color selection with a given orientation 447 * Constructs a widget for color selection with a given orientation
448 */ 448 */
449 OValueSelector( Orientation o, QWidget *parent = 0, const char *name = 0 ); 449 OValueSelector( Orientation o, QWidget *parent = 0, const char *name = 0 );
450 450
451 int hue() const 451 int hue() const
452 { return _hue; } 452 { return _hue; }
453 void setHue( int h ) 453 void setHue( int h )
454 { _hue = h; } 454 { _hue = h; }
455 int saturation() const 455 int saturation() const
456 { return _sat; } 456 { return _sat; }
457 void setSaturation( int s ) 457 void setSaturation( int s )
458 { _sat = s; } 458 { _sat = s; }
459 459
460 void updateContents(); 460 void updateContents();
461protected: 461protected:
462 /** 462 /**
463 * Draws the contents of the widget on a pixmap, 463 * Draws the contents of the widget on a pixmap,
464 * which is used for buffering. 464 * which is used for buffering.
465 */ 465 */
466 virtual void drawPalette( QPixmap *pixmap ); 466 virtual void drawPalette( QPixmap *pixmap );
467 /** 467 /**
468 * @reimplemented 468 * @reimplemented
469 */ 469 */
470 virtual void resizeEvent( QResizeEvent * ); 470 virtual void resizeEvent( QResizeEvent * );
471 /** 471 /**
472 * Reimplemented from OSelector. The drawing is 472 * Reimplemented from OSelector. The drawing is
473 * buffered in a pixmap here. As real drawing 473 * buffered in a pixmap here. As real drawing
474 * routine, drawPalette() is used. 474 * routine, drawPalette() is used.
475 */ 475 */
476 virtual void drawContents( QPainter *painter ); 476 virtual void drawContents( QPainter *painter );
477 477
478private: 478private:
479 int _hue; 479 int _hue;
480 int _sat; 480 int _sat;
481 QPixmap pixmap; 481 QPixmap pixmap;
482 482
483private: 483private:
484 class OValueSelectorPrivate; 484 class OValueSelectorPrivate;
485 OValueSelectorPrivate *d; 485 OValueSelectorPrivate *d;
486}; 486};
487 487
488 488
489class OColor : public QColor 489class OColor : public QColor
490{ 490{
491public: 491public:
492 OColor(); 492 OColor();
493 OColor( const OColor &col); 493 OColor( const OColor &col);
494 OColor( const QColor &col); 494 OColor( const QColor &col);
495 495
496 OColor& operator=( const OColor& col); 496 OColor& operator=( const OColor& col);
497 497
498 bool operator==( const OColor& col) const; 498 bool operator==( const OColor& col) const;
499 499
500 void setHsv(int _h, int _s, int _v); 500 void setHsv(int _h, int _s, int _v);
501 void setRgb(int _r, int _g, int _b); 501 void setRgb(int _r, int _g, int _b);
502 502
503 void rgb(int *_r, int *_g, int *_b) const; 503 void rgb(int *_r, int *_g, int *_b) const;
504 void hsv(int *_h, int *_s, int *_v) const; 504 void hsv(int *_h, int *_s, int *_v) const;
505protected: 505protected:
506 int h; 506 int h;
507 int s; 507 int s;
508 int v; 508 int v;
509 int r; 509 int r;
510 int g; 510 int g;
511 int b; 511 int b;
512 512
513private: 513private:
514 class OColorPrivate; 514 class OColorPrivate;
515 OColorPrivate *d; 515 OColorPrivate *d;
516}; 516};
517 517
518} 518}
519} 519}
520 520
521 521
522 #endif // __OSELECT_H__ 522 #endif // __OSELECT_H__
523 523
diff --git a/libopie2/qt3/opiecore/osortablevaluelist.h b/libopie2/qt3/opiecore/osortablevaluelist.h
index f66cf25..a3f75b4 100644
--- a/libopie2/qt3/opiecore/osortablevaluelist.h
+++ b/libopie2/qt3/opiecore/osortablevaluelist.h
@@ -1,117 +1,117 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3 Originally a part of the KDE Project 3 Originally a part of the KDE Project
4 (C) 2001 Carsten Pfeiffer <pfeiffer@kde.org> 4 (C) 2001 Carsten Pfeiffer <pfeiffer@kde.org>
5 =. 5 =.
6 .=l. 6 .=l.
7           .>+-= 7           .>+-=
8 _;:,     .>    :=|. This program is free software; you can 8 _;:,     .>    :=|. This program is free software; you can
9.> <`_,   >  .   <= redistribute it and/or modify it under 9.> <`_,   >  .   <= redistribute it and/or modify it under
10:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 10:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
11.="- .-=="i,     .._ License as published by the Free Software 11.="- .-=="i,     .._ License as published by the Free Software
12 - .   .-<_>     .<> Foundation; either version 2 of the License, 12 - .   .-<_>     .<> Foundation; either version 2 of the License,
13     ._= =}       : or (at your option) any later version. 13     ._= =}       : or (at your option) any later version.
14    .%`+i>       _;_. 14    .%`+i>       _;_.
15    .i_,=:_.      -<s. This program is distributed in the hope that 15    .i_,=:_.      -<s. This program is distributed in the hope that
16     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 16     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
17    : ..    .:,     . . . without even the implied warranty of 17    : ..    .:,     . . . without even the implied warranty of
18    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 18    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
19  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 19  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
20..}^=.=       =       ; Library General Public License for more 20..}^=.=       =       ; Library General Public License for more
21++=   -.     .`     .: details. 21++=   -.     .`     .: details.
22 :     =  ...= . :.=- 22 :     =  ...= . :.=-
23 -.   .:....=;==+<; You should have received a copy of the GNU 23 -.   .:....=;==+<; You should have received a copy of the GNU
24  -_. . .   )=.  = Library General Public License along with 24  -_. . .   )=.  = Library General Public License along with
25    --        :-=` this library; see the file COPYING.LIB. 25    --        :-=` this library; see the file COPYING.LIB.
26 If not, write to the Free Software Foundation, 26 If not, write to the Free Software Foundation,
27 Inc., 59 Temple Place - Suite 330, 27 Inc., 59 Temple Place - Suite 330,
28 Boston, MA 02111-1307, USA. 28 Boston, MA 02111-1307, USA.
29*/ 29*/
30 30
31#ifndef OSORTABLEVALUELIST_H 31#ifndef OSORTABLEVALUELIST_H
32#define OSORTABLEVALUELIST_H 32#define OSORTABLEVALUELIST_H
33 33
34#if QT_VERSION > 290 34#if QT_VERSION >= 0x030000
35#include <qtl.h> 35#include <qtl.h>
36#include <qpair.h> 36#include <qpair.h>
37#else 37#else
38#include <opie2/otl.h> 38#include <opie2/otl.h>
39#include <opie2/opair.h> 39#include <opie2/opair.h>
40#endif 40#endif
41#include <qvaluelist.h> 41#include <qvaluelist.h>
42 42
43template<class T, class Key = int> class OSortableItem : public QPair<Key,T> 43template<class T, class Key = int> class OSortableItem : public QPair<Key,T>
44{ 44{
45public: 45public:
46 OSortableItem( Key i, const T& t ) : QPair<Key, T>( i, t ) {} 46 OSortableItem( Key i, const T& t ) : QPair<Key, T>( i, t ) {}
47 OSortableItem( const OSortableItem<T, Key> &rhs ) 47 OSortableItem( const OSortableItem<T, Key> &rhs )
48 : QPair<Key,T>( rhs.first, rhs.second ) {} 48 : QPair<Key,T>( rhs.first, rhs.second ) {}
49 49
50 OSortableItem() {} 50 OSortableItem() {}
51 51
52 OSortableItem<T, Key> &operator=( const OSortableItem<T, Key>& i ) { 52 OSortableItem<T, Key> &operator=( const OSortableItem<T, Key>& i ) {
53 first = i.first; 53 first = i.first;
54 second = i.second; 54 second = i.second;
55 return *this; 55 return *this;
56 } 56 }
57 57
58 // operators for sorting 58 // operators for sorting
59 bool operator> ( const OSortableItem<T, Key>& i2 ) const { 59 bool operator> ( const OSortableItem<T, Key>& i2 ) const {
60 return (i2.first < first); 60 return (i2.first < first);
61 } 61 }
62 bool operator< ( const OSortableItem<T, Key>& i2 ) const { 62 bool operator< ( const OSortableItem<T, Key>& i2 ) const {
63 return (first < i2.first); 63 return (first < i2.first);
64 } 64 }
65 bool operator>= ( const OSortableItem<T, Key>& i2 ) const { 65 bool operator>= ( const OSortableItem<T, Key>& i2 ) const {
66 return (first >= i2.first); 66 return (first >= i2.first);
67 } 67 }
68 bool operator<= ( const OSortableItem<T, Key>& i2 ) const { 68 bool operator<= ( const OSortableItem<T, Key>& i2 ) const {
69 return !(i2.first < first); 69 return !(i2.first < first);
70 } 70 }
71 bool operator== ( const OSortableItem<T, Key>& i2 ) const { 71 bool operator== ( const OSortableItem<T, Key>& i2 ) const {
72 return (first == i2.first); 72 return (first == i2.first);
73 } 73 }
74 bool operator!= ( const OSortableItem<T, Key>& i2 ) const { 74 bool operator!= ( const OSortableItem<T, Key>& i2 ) const {
75 return (first != i2.first); 75 return (first != i2.first);
76 } 76 }
77 77
78 T& value() { 78 T& value() {
79 return second; 79 return second;
80 } 80 }
81 const T& value() const { 81 const T& value() const {
82 return second; 82 return second;
83 } 83 }
84 84
85 Key index() const { 85 Key index() const {
86 return first; 86 return first;
87 } 87 }
88}; 88};
89 89
90 90
91// convenience 91// convenience
92template <class T, class Key = int> 92template <class T, class Key = int>
93class OSortableValueList : public QValueList<OSortableItem<T, Key> > 93class OSortableValueList : public QValueList<OSortableItem<T, Key> >
94{ 94{
95public: 95public:
96 void insert( Key i, const T& t ) { 96 void insert( Key i, const T& t ) {
97 QValueList<OSortableItem<T, Key> >::append( OSortableItem<T, Key>( i, t ) ); 97 QValueList<OSortableItem<T, Key> >::append( OSortableItem<T, Key>( i, t ) );
98 } 98 }
99 // add more as you please... 99 // add more as you please...
100 100
101 T& operator[]( Key i ) { 101 T& operator[]( Key i ) {
102 return QValueList<OSortableItem<T, Key> >::operator[]( i ).value(); 102 return QValueList<OSortableItem<T, Key> >::operator[]( i ).value();
103 } 103 }
104 const T& operator[]( Key i ) const { 104 const T& operator[]( Key i ) const {
105 return QValueList<OSortableItem<T, Key> >::operator[]( i ).value(); 105 return QValueList<OSortableItem<T, Key> >::operator[]( i ).value();
106 } 106 }
107 107
108 void sort() { 108 void sort() {
109 qHeapSort( *this ); 109 qHeapSort( *this );
110 } 110 }
111}; 111};
112 112
113// template <class T> class OSortableValueListIterator : public QValueListIterator<OSortableItem<T> > 113// template <class T> class OSortableValueListIterator : public QValueListIterator<OSortableItem<T> >
114// { 114// {
115// }; 115// };
116 116
117#endif // OSORTABLEVALUELIST_H 117#endif // OSORTABLEVALUELIST_H
diff --git a/libopie2/qt3/opieui/ocombobox.cpp b/libopie2/qt3/opieui/ocombobox.cpp
index bd330e0..130112c 100644
--- a/libopie2/qt3/opieui/ocombobox.cpp
+++ b/libopie2/qt3/opieui/ocombobox.cpp
@@ -1,669 +1,669 @@
1/* 1/*
2 This file Copyright (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 2 This file Copyright (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
3 is part of the Copyright (C) 2000 Carsten Pfeiffer <pfeiffer@kde.org> 3 is part of the Copyright (C) 2000 Carsten Pfeiffer <pfeiffer@kde.org>
4 Opie Project Copyright (C) 2000 Dawit Alemayehu <adawit@kde.org> 4 Opie Project Copyright (C) 2000 Dawit Alemayehu <adawit@kde.org>
5 5
6 =. Originally part of the KDE Project 6 =. Originally part of the KDE Project
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/* QT */ 33/* QT */
34 34
35#include <qclipboard.h> 35#include <qclipboard.h>
36#include <qlistbox.h> 36#include <qlistbox.h>
37#include <qpopupmenu.h> 37#include <qpopupmenu.h>
38 38
39/* OPIE */ 39/* OPIE */
40 40
41#include <opie2/ocompletionbox.h> 41#include <opie2/ocompletionbox.h>
42#include <opie2/olineedit.h> 42#include <opie2/olineedit.h>
43#include <opie2/opixmapprovider.h> 43#include <opie2/opixmapprovider.h>
44#include <opie2/ocombobox.h> 44#include <opie2/ocombobox.h>
45 45
46/*====================================================================================== 46/*======================================================================================
47 * OComboBoxPrivate 47 * OComboBoxPrivate
48 *======================================================================================*/ 48 *======================================================================================*/
49 49
50class OComboBox::OComboBoxPrivate 50class OComboBox::OComboBoxPrivate
51{ 51{
52public: 52public:
53 OComboBoxPrivate() 53 OComboBoxPrivate()
54 { 54 {
55 olineEdit = 0L; 55 olineEdit = 0L;
56 } 56 }
57 ~OComboBoxPrivate() 57 ~OComboBoxPrivate()
58 { 58 {
59 } 59 }
60 60
61 OLineEdit *olineEdit; 61 OLineEdit *olineEdit;
62}; 62};
63 63
64/*====================================================================================== 64/*======================================================================================
65 * OComboBox 65 * OComboBox
66 *======================================================================================*/ 66 *======================================================================================*/
67 67
68OComboBox::OComboBox( QWidget *parent, const char *name ) 68OComboBox::OComboBox( QWidget *parent, const char *name )
69 : QComboBox( parent, name ) 69 : QComboBox( parent, name )
70{ 70{
71 init(); 71 init();
72} 72}
73 73
74OComboBox::OComboBox( bool rw, QWidget *parent, const char *name ) 74OComboBox::OComboBox( bool rw, QWidget *parent, const char *name )
75 : QComboBox( rw, parent, name ) 75 : QComboBox( rw, parent, name )
76{ 76{
77 init(); 77 init();
78 78
79 if ( rw ) 79 if ( rw )
80 { 80 {
81 OLineEdit *edit = new OLineEdit( this, "combo lineedit" ); 81 OLineEdit *edit = new OLineEdit( this, "combo lineedit" );
82 setLineEdit( edit ); 82 setLineEdit( edit );
83 } 83 }
84} 84}
85 85
86OComboBox::~OComboBox() 86OComboBox::~OComboBox()
87{ 87{
88 delete d; 88 delete d;
89} 89}
90 90
91void OComboBox::init() 91void OComboBox::init()
92{ 92{
93 d = new OComboBoxPrivate; 93 d = new OComboBoxPrivate;
94 94
95 // Permanently set some parameters in the parent object. 95 // Permanently set some parameters in the parent object.
96 QComboBox::setAutoCompletion( false ); 96 QComboBox::setAutoCompletion( false );
97 97
98 // Initialize enable popup menu to false. 98 // Initialize enable popup menu to false.
99 // Below it will be enabled if the widget 99 // Below it will be enabled if the widget
100 // is editable. 100 // is editable.
101 m_bEnableMenu = false; 101 m_bEnableMenu = false;
102 102
103 m_trapReturnKey = false; 103 m_trapReturnKey = false;
104 104
105 // Enable context menu by default if widget 105 // Enable context menu by default if widget
106 // is editable. 106 // is editable.
107 setContextMenuEnabled( true ); 107 setContextMenuEnabled( true );
108 108
109 // for wheelscrolling 109 // for wheelscrolling
110 installEventFilter( this ); 110 installEventFilter( this );
111 if ( lineEdit() ) 111 if ( lineEdit() )
112 lineEdit()->installEventFilter( this ); 112 lineEdit()->installEventFilter( this );
113} 113}
114 114
115 115
116bool OComboBox::contains( const QString& _text ) const 116bool OComboBox::contains( const QString& _text ) const
117{ 117{
118 if ( _text.isEmpty() ) 118 if ( _text.isEmpty() )
119 return false; 119 return false;
120 120
121 for (int i = 0; i < count(); i++ ) { 121 for (int i = 0; i < count(); i++ ) {
122 if ( text(i) == _text ) 122 if ( text(i) == _text )
123 return true; 123 return true;
124 } 124 }
125 return false; 125 return false;
126} 126}
127 127
128void OComboBox::setAutoCompletion( bool autocomplete ) 128void OComboBox::setAutoCompletion( bool autocomplete )
129{ 129{
130 if ( d->olineEdit ) 130 if ( d->olineEdit )
131 { 131 {
132 if ( autocomplete ) 132 if ( autocomplete )
133 { 133 {
134 d->olineEdit->setCompletionMode( OGlobalSettings::CompletionAuto ); 134 d->olineEdit->setCompletionMode( OGlobalSettings::CompletionAuto );
135 setCompletionMode( OGlobalSettings::CompletionAuto ); 135 setCompletionMode( OGlobalSettings::CompletionAuto );
136 } 136 }
137 else 137 else
138 { 138 {
139 d->olineEdit->setCompletionMode( OGlobalSettings::completionMode() ); 139 d->olineEdit->setCompletionMode( OGlobalSettings::completionMode() );
140 setCompletionMode( OGlobalSettings::completionMode() ); 140 setCompletionMode( OGlobalSettings::completionMode() );
141 } 141 }
142 } 142 }
143} 143}
144 144
145void OComboBox::setContextMenuEnabled( bool showMenu ) 145void OComboBox::setContextMenuEnabled( bool showMenu )
146{ 146{
147 if( d->olineEdit ) 147 if( d->olineEdit )
148 { 148 {
149 d->olineEdit->setContextMenuEnabled( showMenu ); 149 d->olineEdit->setContextMenuEnabled( showMenu );
150 m_bEnableMenu = showMenu; 150 m_bEnableMenu = showMenu;
151 } 151 }
152} 152}
153 153
154/* 154/*
155void OComboBox::setURLDropsEnabled( bool enable ) 155void OComboBox::setURLDropsEnabled( bool enable )
156{ 156{
157 if ( d->olineEdit ) 157 if ( d->olineEdit )
158 d->olineEdit->setURLDropsEnabled( enable ); 158 d->olineEdit->setURLDropsEnabled( enable );
159} 159}
160 160
161bool OComboBox::isURLDropsEnabled() const 161bool OComboBox::isURLDropsEnabled() const
162{ 162{
163 return d->olineEdit && d->olineEdit->isURLDropsEnabled(); 163 return d->olineEdit && d->olineEdit->isURLDropsEnabled();
164} 164}
165*/ 165*/
166 166
167void OComboBox::setCompletedText( const QString& text, bool marked ) 167void OComboBox::setCompletedText( const QString& text, bool marked )
168{ 168{
169 if ( d->olineEdit ) 169 if ( d->olineEdit )
170 d->olineEdit->setCompletedText( text, marked ); 170 d->olineEdit->setCompletedText( text, marked );
171} 171}
172 172
173void OComboBox::setCompletedText( const QString& text ) 173void OComboBox::setCompletedText( const QString& text )
174{ 174{
175 if ( d->olineEdit ) 175 if ( d->olineEdit )
176 d->olineEdit->setCompletedText( text ); 176 d->olineEdit->setCompletedText( text );
177} 177}
178 178
179void OComboBox::makeCompletion( const QString& text ) 179void OComboBox::makeCompletion( const QString& text )
180{ 180{
181 if( d->olineEdit ) 181 if( d->olineEdit )
182 d->olineEdit->makeCompletion( text ); 182 d->olineEdit->makeCompletion( text );
183 183
184 else // read-only combo completion 184 else // read-only combo completion
185 { 185 {
186 if( text.isNull() || !listBox() ) 186 if( text.isNull() || !listBox() )
187 return; 187 return;
188 188
189 int index = listBox()->index( listBox()->findItem( text ) ); 189 int index = listBox()->index( listBox()->findItem( text ) );
190 if( index >= 0 ) { 190 if( index >= 0 ) {
191 setCurrentItem( index ); 191 setCurrentItem( index );
192 } 192 }
193 } 193 }
194} 194}
195 195
196void OComboBox::rotateText( OCompletionBase::KeyBindingType type ) 196void OComboBox::rotateText( OCompletionBase::KeyBindingType type )
197{ 197{
198 if ( d->olineEdit ) 198 if ( d->olineEdit )
199 d->olineEdit->rotateText( type ); 199 d->olineEdit->rotateText( type );
200} 200}
201 201
202bool OComboBox::eventFilter( QObject* o, QEvent* ev ) 202bool OComboBox::eventFilter( QObject* o, QEvent* ev )
203{ 203{
204 QLineEdit *edit = lineEdit(); 204 QLineEdit *edit = lineEdit();
205 205
206 int type = ev->type(); 206 int type = ev->type();
207 207
208 if ( o == edit ) 208 if ( o == edit )
209 { 209 {
210 //OCursor::autoHideEventFilter( edit, ev ); 210 //OCursor::autoHideEventFilter( edit, ev );
211 211
212 if ( type == QEvent::KeyPress ) 212 if ( type == QEvent::KeyPress )
213 { 213 {
214 QKeyEvent *e = static_cast<QKeyEvent *>( ev ); 214 QKeyEvent *e = static_cast<QKeyEvent *>( ev );
215 215
216 if ( e->key() == Key_Return || e->key() == Key_Enter) 216 if ( e->key() == Key_Return || e->key() == Key_Enter)
217 { 217 {
218 // On Return pressed event, emit both 218 // On Return pressed event, emit both
219 // returnPressed(const QString&) and returnPressed() signals 219 // returnPressed(const QString&) and returnPressed() signals
220 emit returnPressed(); 220 emit returnPressed();
221 emit returnPressed( currentText() ); 221 emit returnPressed( currentText() );
222 if ( d->olineEdit && d->olineEdit->completionBox(false) && 222 if ( d->olineEdit && d->olineEdit->completionBox(false) &&
223 d->olineEdit->completionBox()->isVisible() ) 223 d->olineEdit->completionBox()->isVisible() )
224 d->olineEdit->completionBox()->hide(); 224 d->olineEdit->completionBox()->hide();
225 225
226 return m_trapReturnKey; 226 return m_trapReturnKey;
227 } 227 }
228 } 228 }
229 } 229 }
230 230
231 231
232 // wheel-scrolling changes the current item 232 // wheel-scrolling changes the current item
233 if ( type == QEvent::Wheel ) { 233 if ( type == QEvent::Wheel ) {
234 if ( !listBox() || listBox()->isHidden() ) { 234 if ( !listBox() || listBox()->isHidden() ) {
235 QWheelEvent *e = static_cast<QWheelEvent*>( ev ); 235 QWheelEvent *e = static_cast<QWheelEvent*>( ev );
236 static const int WHEEL_DELTA = 120; 236 static const int WHEEL_DELTA = 120;
237 int skipItems = e->delta() / WHEEL_DELTA; 237 int skipItems = e->delta() / WHEEL_DELTA;
238 if ( e->state() & ControlButton ) // fast skipping 238 if ( e->state() & ControlButton ) // fast skipping
239 skipItems *= 10; 239 skipItems *= 10;
240 240
241 int newItem = currentItem() - skipItems; 241 int newItem = currentItem() - skipItems;
242 242
243 if ( newItem < 0 ) 243 if ( newItem < 0 )
244 newItem = 0; 244 newItem = 0;
245 else if ( newItem >= count() ) 245 else if ( newItem >= count() )
246 newItem = count() -1; 246 newItem = count() -1;
247 247
248 setCurrentItem( newItem ); 248 setCurrentItem( newItem );
249 if ( !text( newItem ).isNull() ) 249 if ( !text( newItem ).isNull() )
250 emit activated( text( newItem ) ); 250 emit activated( text( newItem ) );
251 emit activated( newItem ); 251 emit activated( newItem );
252 e->accept(); 252 e->accept();
253 return true; 253 return true;
254 } 254 }
255 } 255 }
256 256
257 return QComboBox::eventFilter( o, ev ); 257 return QComboBox::eventFilter( o, ev );
258} 258}
259 259
260void OComboBox::setTrapReturnKey( bool grab ) 260void OComboBox::setTrapReturnKey( bool grab )
261{ 261{
262 m_trapReturnKey = grab; 262 m_trapReturnKey = grab;
263} 263}
264 264
265bool OComboBox::trapReturnKey() const 265bool OComboBox::trapReturnKey() const
266{ 266{
267 return m_trapReturnKey; 267 return m_trapReturnKey;
268} 268}
269 269
270/* 270/*
271void OComboBox::setEditURL( const OURL& url ) 271void OComboBox::setEditURL( const OURL& url )
272{ 272{
273 QComboBox::setEditText( url.prettyURL() ); 273 QComboBox::setEditText( url.prettyURL() );
274} 274}
275 275
276void OComboBox::insertURL( const OURL& url, int index ) 276void OComboBox::insertURL( const OURL& url, int index )
277{ 277{
278 QComboBox::insertItem( url.prettyURL(), index ); 278 QComboBox::insertItem( url.prettyURL(), index );
279} 279}
280 280
281void OComboBox::insertURL( const QPixmap& pixmap, const OURL& url, int index ) 281void OComboBox::insertURL( const QPixmap& pixmap, const OURL& url, int index )
282{ 282{
283 QComboBox::insertItem( pixmap, url.prettyURL(), index ); 283 QComboBox::insertItem( pixmap, url.prettyURL(), index );
284} 284}
285 285
286void OComboBox::changeURL( const OURL& url, int index ) 286void OComboBox::changeURL( const OURL& url, int index )
287{ 287{
288 QComboBox::changeItem( url.prettyURL(), index ); 288 QComboBox::changeItem( url.prettyURL(), index );
289} 289}
290 290
291void OComboBox::changeURL( const QPixmap& pixmap, const OURL& url, int index ) 291void OComboBox::changeURL( const QPixmap& pixmap, const OURL& url, int index )
292{ 292{
293 QComboBox::changeItem( pixmap, url.prettyURL(), index ); 293 QComboBox::changeItem( pixmap, url.prettyURL(), index );
294} 294}
295*/ 295*/
296 296
297 297
298void OComboBox::setCompletedItems( const QStringList& items ) 298void OComboBox::setCompletedItems( const QStringList& items )
299{ 299{
300 if ( d->olineEdit ) 300 if ( d->olineEdit )
301 d->olineEdit->setCompletedItems( items ); 301 d->olineEdit->setCompletedItems( items );
302} 302}
303 303
304 304
305OCompletionBox * OComboBox::completionBox( bool create ) 305OCompletionBox * OComboBox::completionBox( bool create )
306{ 306{
307 if ( d->olineEdit ) 307 if ( d->olineEdit )
308 return d->olineEdit->completionBox( create ); 308 return d->olineEdit->completionBox( create );
309 return 0; 309 return 0;
310} 310}
311 311
312// QWidget::create() turns off mouse-Tracking which would break auto-hiding 312// QWidget::create() turns off mouse-Tracking which would break auto-hiding
313void OComboBox::create( WId id, bool initializeWindow, bool destroyOldWindow ) 313void OComboBox::create( WId id, bool initializeWindow, bool destroyOldWindow )
314{ 314{
315 QComboBox::create( id, initializeWindow, destroyOldWindow ); 315 QComboBox::create( id, initializeWindow, destroyOldWindow );
316 //OCursor::setAutoHideCursor( lineEdit(), true, true ); 316 //OCursor::setAutoHideCursor( lineEdit(), true, true );
317} 317}
318 318
319void OComboBox::setLineEdit( OLineEdit *edit ) 319void OComboBox::setLineEdit( OLineEdit *edit )
320{ 320{
321 #if QT_VERSION > 290 321 #if QT_VERSION >= 0x030000
322 QComboBox::setLineEdit( edit ); 322 QComboBox::setLineEdit( edit );
323 if ( !edit->inherits( "OLineEdit" ) ) 323 if ( !edit->inherits( "OLineEdit" ) )
324 d->olineEdit = 0; 324 d->olineEdit = 0;
325 else 325 else
326 d->olineEdit = static_cast<OLineEdit*>( edit ); 326 d->olineEdit = static_cast<OLineEdit*>( edit );
327 setDelegate( d->olineEdit ); 327 setDelegate( d->olineEdit );
328 328
329 // forward some signals. We only emit returnPressed() ourselves. 329 // forward some signals. We only emit returnPressed() ourselves.
330 if ( d->olineEdit ) { 330 if ( d->olineEdit ) {
331 connect( d->olineEdit, SIGNAL( completion(const QString&)), 331 connect( d->olineEdit, SIGNAL( completion(const QString&)),
332 SIGNAL( completion(const QString&)) ); 332 SIGNAL( completion(const QString&)) );
333 connect( d->olineEdit, SIGNAL( substringCompletion(const QString&)), 333 connect( d->olineEdit, SIGNAL( substringCompletion(const QString&)),
334 SIGNAL( substringCompletion(const QString&)) ); 334 SIGNAL( substringCompletion(const QString&)) );
335 connect( d->olineEdit, 335 connect( d->olineEdit,
336 SIGNAL( textRotation(OCompletionBase::KeyBindingType)), 336 SIGNAL( textRotation(OCompletionBase::KeyBindingType)),
337 SIGNAL( textRotation(OCompletionBase::KeyBindingType)) ); 337 SIGNAL( textRotation(OCompletionBase::KeyBindingType)) );
338 connect( d->olineEdit, 338 connect( d->olineEdit,
339 SIGNAL( completionModeChanged(OGlobalSettings::Completion)), 339 SIGNAL( completionModeChanged(OGlobalSettings::Completion)),
340 SIGNAL( completionModeChanged(OGlobalSettings::Completion))); 340 SIGNAL( completionModeChanged(OGlobalSettings::Completion)));
341 341
342 connect( d->olineEdit, 342 connect( d->olineEdit,
343 SIGNAL( aboutToShowContextMenu(QPopupMenu*)), 343 SIGNAL( aboutToShowContextMenu(QPopupMenu*)),
344 SIGNAL( aboutToShowContextMenu(QPopupMenu*)) ); 344 SIGNAL( aboutToShowContextMenu(QPopupMenu*)) );
345 } 345 }
346 #else 346 #else
347 #warning OComboBox is not fully functional with Qt2 347 #warning OComboBox is not fully functional with Qt2
348 #endif 348 #endif
349} 349}
350 350
351// Temporary functions until QT3 appears. - Seth Chaiklin 20 may 2001 351// Temporary functions until QT3 appears. - Seth Chaiklin 20 may 2001
352void OComboBox::deleteWordForward() 352void OComboBox::deleteWordForward()
353{ 353{
354 lineEdit()->cursorWordForward(TRUE); 354 lineEdit()->cursorWordForward(TRUE);
355 #if QT_VERSION > 290 355 #if QT_VERSION >= 0x030000
356 if ( lineEdit()->hasSelectedText() ) 356 if ( lineEdit()->hasSelectedText() )
357 #else 357 #else
358 if ( lineEdit()->hasMarkedText() ) 358 if ( lineEdit()->hasMarkedText() )
359 #endif 359 #endif
360 { 360 {
361 lineEdit()->del(); 361 lineEdit()->del();
362 } 362 }
363} 363}
364 364
365void OComboBox::deleteWordBack() 365void OComboBox::deleteWordBack()
366{ 366{
367 lineEdit()->cursorWordBackward(TRUE); 367 lineEdit()->cursorWordBackward(TRUE);
368 #if QT_VERSION > 290 368 #if QT_VERSION >= 0x030000
369 if ( lineEdit()->hasSelectedText() ) 369 if ( lineEdit()->hasSelectedText() )
370 #else 370 #else
371 if ( lineEdit()->hasMarkedText() ) 371 if ( lineEdit()->hasMarkedText() )
372 #endif 372 #endif
373 { 373 {
374 lineEdit()->del(); 374 lineEdit()->del();
375 } 375 }
376} 376}
377 377
378void OComboBox::setCurrentItem( const QString& item, bool insert, int index ) 378void OComboBox::setCurrentItem( const QString& item, bool insert, int index )
379{ 379{
380 int sel = -1; 380 int sel = -1;
381 for (int i = 0; i < count(); ++i) 381 for (int i = 0; i < count(); ++i)
382 if (text(i) == item) 382 if (text(i) == item)
383 { 383 {
384 sel = i; 384 sel = i;
385 break; 385 break;
386 } 386 }
387 if (sel == -1 && insert) 387 if (sel == -1 && insert)
388 { 388 {
389 insertItem(item, index); 389 insertItem(item, index);
390 if (index >= 0) 390 if (index >= 0)
391 sel = index; 391 sel = index;
392 else 392 else
393 sel = count() - 1; 393 sel = count() - 1;
394 } 394 }
395 setCurrentItem(sel); 395 setCurrentItem(sel);
396} 396}
397 397
398void OComboBox::setCurrentItem(int index) 398void OComboBox::setCurrentItem(int index)
399{ 399{
400 QComboBox::setCurrentItem(index); 400 QComboBox::setCurrentItem(index);
401} 401}
402 402
403 403
404/*====================================================================================== 404/*======================================================================================
405 * OHistoryCombo 405 * OHistoryCombo
406 *======================================================================================*/ 406 *======================================================================================*/
407 407
408// we are always read-write 408// we are always read-write
409OHistoryCombo::OHistoryCombo( QWidget *parent, const char *name ) 409OHistoryCombo::OHistoryCombo( QWidget *parent, const char *name )
410 : OComboBox( true, parent, name ) 410 : OComboBox( true, parent, name )
411{ 411{
412 init( true ); // using completion 412 init( true ); // using completion
413} 413}
414 414
415// we are always read-write 415// we are always read-write
416OHistoryCombo::OHistoryCombo( bool useCompletion, 416OHistoryCombo::OHistoryCombo( bool useCompletion,
417 QWidget *parent, const char *name ) 417 QWidget *parent, const char *name )
418 : OComboBox( true, parent, name ) 418 : OComboBox( true, parent, name )
419{ 419{
420 init( useCompletion ); 420 init( useCompletion );
421} 421}
422 422
423void OHistoryCombo::init( bool useCompletion ) 423void OHistoryCombo::init( bool useCompletion )
424{ 424{
425 if ( useCompletion ) 425 if ( useCompletion )
426 completionObject()->setOrder( OCompletion::Weighted ); 426 completionObject()->setOrder( OCompletion::Weighted );
427 427
428 setInsertionPolicy( NoInsertion ); 428 setInsertionPolicy( NoInsertion );
429 myIterateIndex = -1; 429 myIterateIndex = -1;
430 myRotated = false; 430 myRotated = false;
431 myPixProvider = 0L; 431 myPixProvider = 0L;
432 432
433 connect( this, SIGNAL(aboutToShowContextMenu(QPopupMenu*)), 433 connect( this, SIGNAL(aboutToShowContextMenu(QPopupMenu*)),
434 SLOT(addContextMenuItems(QPopupMenu*)) ); 434 SLOT(addContextMenuItems(QPopupMenu*)) );
435 connect( this, SIGNAL( activated(int) ), SLOT( slotReset() )); 435 connect( this, SIGNAL( activated(int) ), SLOT( slotReset() ));
436 connect( this, SIGNAL( returnPressed(const QString&) ), SLOT(slotReset())); 436 connect( this, SIGNAL( returnPressed(const QString&) ), SLOT(slotReset()));
437} 437}
438 438
439OHistoryCombo::~OHistoryCombo() 439OHistoryCombo::~OHistoryCombo()
440{ 440{
441 delete myPixProvider; 441 delete myPixProvider;
442} 442}
443 443
444void OHistoryCombo::setHistoryItems( QStringList items, 444void OHistoryCombo::setHistoryItems( QStringList items,
445 bool setCompletionList ) 445 bool setCompletionList )
446{ 446{
447 OComboBox::clear(); 447 OComboBox::clear();
448 448
449 // limit to maxCount() 449 // limit to maxCount()
450 while ( (int) items.count() > maxCount() && !items.isEmpty() ) 450 while ( (int) items.count() > maxCount() && !items.isEmpty() )
451 items.remove( items.begin() ); 451 items.remove( items.begin() );
452 452
453 insertItems( items ); 453 insertItems( items );
454 454
455 if ( setCompletionList && useCompletion() ) { 455 if ( setCompletionList && useCompletion() ) {
456 // we don't have any weighting information here ;( 456 // we don't have any weighting information here ;(
457 OCompletion *comp = completionObject(); 457 OCompletion *comp = completionObject();
458 comp->setOrder( OCompletion::Insertion ); 458 comp->setOrder( OCompletion::Insertion );
459 comp->setItems( items ); 459 comp->setItems( items );
460 comp->setOrder( OCompletion::Weighted ); 460 comp->setOrder( OCompletion::Weighted );
461 } 461 }
462 462
463 clearEdit(); 463 clearEdit();
464} 464}
465 465
466QStringList OHistoryCombo::historyItems() const 466QStringList OHistoryCombo::historyItems() const
467{ 467{
468 QStringList list; 468 QStringList list;
469 for ( int i = 0; i < count(); i++ ) 469 for ( int i = 0; i < count(); i++ )
470 list.append( text( i ) ); 470 list.append( text( i ) );
471 471
472 return list; 472 return list;
473} 473}
474 474
475void OHistoryCombo::clearHistory() 475void OHistoryCombo::clearHistory()
476{ 476{
477 OComboBox::clear(); 477 OComboBox::clear();
478 if ( useCompletion() ) 478 if ( useCompletion() )
479 completionObject()->clear(); 479 completionObject()->clear();
480} 480}
481 481
482void OHistoryCombo::addContextMenuItems( QPopupMenu* menu ) 482void OHistoryCombo::addContextMenuItems( QPopupMenu* menu )
483{ 483{
484 if ( menu &&!lineEdit()->text().isEmpty()) 484 if ( menu &&!lineEdit()->text().isEmpty())
485 { 485 {
486 menu->insertSeparator(); 486 menu->insertSeparator();
487 menu->insertItem( tr("Empty Contents"), this, SLOT( slotClear())); 487 menu->insertItem( tr("Empty Contents"), this, SLOT( slotClear()));
488 } 488 }
489} 489}
490 490
491void OHistoryCombo::addToHistory( const QString& item ) 491void OHistoryCombo::addToHistory( const QString& item )
492{ 492{
493 if ( item.isEmpty() || (count() > 0 && item == text(0) )) 493 if ( item.isEmpty() || (count() > 0 && item == text(0) ))
494 return; 494 return;
495 495
496 // remove all existing items before adding 496 // remove all existing items before adding
497 if ( !duplicatesEnabled() ) { 497 if ( !duplicatesEnabled() ) {
498 for ( int i = 0; i < count(); i++ ) { 498 for ( int i = 0; i < count(); i++ ) {
499 if ( text( i ) == item ) 499 if ( text( i ) == item )
500 removeItem( i ); 500 removeItem( i );
501 } 501 }
502 } 502 }
503 503
504 // now add the item 504 // now add the item
505 if ( myPixProvider ) 505 if ( myPixProvider )
506 //insertItem( myPixProvider->pixmapFor(item, KIcon::SizeSmall), item, 0); 506 //insertItem( myPixProvider->pixmapFor(item, KIcon::SizeSmall), item, 0);
507 insertItem( myPixProvider->pixmapFor(item, 16), item, 0); 507 insertItem( myPixProvider->pixmapFor(item, 16), item, 0);
508 else 508 else
509 insertItem( item, 0 ); 509 insertItem( item, 0 );
510 510
511 int last; 511 int last;
512 QString rmItem; 512 QString rmItem;
513 513
514 bool useComp = useCompletion(); 514 bool useComp = useCompletion();
515 while ( count() > maxCount() && count() > 0 ) { 515 while ( count() > maxCount() && count() > 0 ) {
516 // remove the last item, as long as we are longer than maxCount() 516 // remove the last item, as long as we are longer than maxCount()
517 // remove the removed item from the completionObject if it isn't 517 // remove the removed item from the completionObject if it isn't
518 // anymore available at all in the combobox. 518 // anymore available at all in the combobox.
519 last = count() - 1; 519 last = count() - 1;
520 rmItem = text( last ); 520 rmItem = text( last );
521 removeItem( last ); 521 removeItem( last );
522 if ( useComp && !contains( rmItem ) ) 522 if ( useComp && !contains( rmItem ) )
523 completionObject()->removeItem( rmItem ); 523 completionObject()->removeItem( rmItem );
524 } 524 }
525 525
526 if ( useComp ) 526 if ( useComp )
527 completionObject()->addItem( item ); 527 completionObject()->addItem( item );
528} 528}
529 529
530bool OHistoryCombo::removeFromHistory( const QString& item ) 530bool OHistoryCombo::removeFromHistory( const QString& item )
531{ 531{
532 if ( item.isEmpty() ) 532 if ( item.isEmpty() )
533 return false; 533 return false;
534 534
535 bool removed = false; 535 bool removed = false;
536 QString temp = currentText(); 536 QString temp = currentText();
537 for ( int i = 0; i < count(); i++ ) { 537 for ( int i = 0; i < count(); i++ ) {
538 while ( item == text( i ) ) { 538 while ( item == text( i ) ) {
539 removed = true; 539 removed = true;
540 removeItem( i ); 540 removeItem( i );
541 } 541 }
542 } 542 }
543 543
544 if ( removed && useCompletion() ) 544 if ( removed && useCompletion() )
545 completionObject()->removeItem( item ); 545 completionObject()->removeItem( item );
546 546
547 setEditText( temp ); 547 setEditText( temp );
548 return removed; 548 return removed;
549} 549}
550 550
551void OHistoryCombo::keyPressEvent( QKeyEvent *e ) 551void OHistoryCombo::keyPressEvent( QKeyEvent *e )
552{ 552{
553 // save the current text in the lineedit 553 // save the current text in the lineedit
554 if ( myIterateIndex == -1 ) 554 if ( myIterateIndex == -1 )
555 myText = currentText(); 555 myText = currentText();
556 556
557 // going up in the history, rotating when reaching QListBox::count() 557 // going up in the history, rotating when reaching QListBox::count()
558 //if ( OStdAccel::isEqual( e, OStdAccel::rotateUp() ) ) { 558 //if ( OStdAccel::isEqual( e, OStdAccel::rotateUp() ) ) {
559 if ( e->key() == Qt::Key_Up ) { 559 if ( e->key() == Qt::Key_Up ) {
560 myIterateIndex++; 560 myIterateIndex++;
561 561
562 // skip duplicates/empty items 562 // skip duplicates/empty items
563 while ( myIterateIndex < count()-1 && 563 while ( myIterateIndex < count()-1 &&
564 (currentText() == text( myIterateIndex ) || 564 (currentText() == text( myIterateIndex ) ||
565 text( myIterateIndex ).isEmpty()) ) 565 text( myIterateIndex ).isEmpty()) )
566 myIterateIndex++; 566 myIterateIndex++;
567 567
568 if ( myIterateIndex >= count() ) { 568 if ( myIterateIndex >= count() ) {
569 myRotated = true; 569 myRotated = true;
570 myIterateIndex = -1; 570 myIterateIndex = -1;
571 571
572 // if the typed text is the same as the first item, skip the first 572 // if the typed text is the same as the first item, skip the first
573 if ( myText == text(0) ) 573 if ( myText == text(0) )
574 myIterateIndex = 0; 574 myIterateIndex = 0;
575 575
576 setEditText( myText ); 576 setEditText( myText );
577 } 577 }
578 else 578 else
579 setEditText( text( myIterateIndex )); 579 setEditText( text( myIterateIndex ));
580 } 580 }
581 581
582 582
583 // going down in the history, no rotation possible. Last item will be 583 // going down in the history, no rotation possible. Last item will be
584 // the text that was in the lineedit before Up was called. 584 // the text that was in the lineedit before Up was called.
585 //else if ( OStdAccel::isEqual( e, OStdAccel::rotateDown() ) ) { 585 //else if ( OStdAccel::isEqual( e, OStdAccel::rotateDown() ) ) {
586 else if ( e->key() == Qt::Key_Down ) { 586 else if ( e->key() == Qt::Key_Down ) {
587 myIterateIndex--; 587 myIterateIndex--;
588 588
589 // skip duplicates/empty items 589 // skip duplicates/empty items
590 while ( myIterateIndex >= 0 && 590 while ( myIterateIndex >= 0 &&
591 (currentText() == text( myIterateIndex ) || 591 (currentText() == text( myIterateIndex ) ||
592 text( myIterateIndex ).isEmpty()) ) 592 text( myIterateIndex ).isEmpty()) )
593 myIterateIndex--; 593 myIterateIndex--;
594 594
595 595
596 if ( myIterateIndex < 0 ) { 596 if ( myIterateIndex < 0 ) {
597 if ( myRotated && myIterateIndex == -2 ) { 597 if ( myRotated && myIterateIndex == -2 ) {
598 myRotated = false; 598 myRotated = false;
599 myIterateIndex = count() - 1; 599 myIterateIndex = count() - 1;
600 setEditText( text(myIterateIndex) ); 600 setEditText( text(myIterateIndex) );
601 } 601 }
602 else { // bottom of history 602 else { // bottom of history
603 if ( myIterateIndex == -2 ) { 603 if ( myIterateIndex == -2 ) {
604 qDebug( "ONotifyClient is not implemented yet." ); 604 qDebug( "ONotifyClient is not implemented yet." );
605 //ONotifyClient::event( ONotifyClient::notification, 605 //ONotifyClient::event( ONotifyClient::notification,
606 // i18n("No further item in the history.")); 606 // i18n("No further item in the history."));
607 } 607 }
608 608
609 myIterateIndex = -1; 609 myIterateIndex = -1;
610 if ( currentText() != myText ) 610 if ( currentText() != myText )
611 setEditText( myText ); 611 setEditText( myText );
612 } 612 }
613 } 613 }
614 else 614 else
615 setEditText( text( myIterateIndex )); 615 setEditText( text( myIterateIndex ));
616 } 616 }
617 617
618 else 618 else
619 OComboBox::keyPressEvent( e ); 619 OComboBox::keyPressEvent( e );
620} 620}
621 621
622void OHistoryCombo::slotReset() 622void OHistoryCombo::slotReset()
623{ 623{
624 myIterateIndex = -1; 624 myIterateIndex = -1;
625 myRotated = false; 625 myRotated = false;
626} 626}
627 627
628 628
629void OHistoryCombo::setPixmapProvider( OPixmapProvider *prov ) 629void OHistoryCombo::setPixmapProvider( OPixmapProvider *prov )
630{ 630{
631 if ( myPixProvider == prov ) 631 if ( myPixProvider == prov )
632 return; 632 return;
633 633
634 delete myPixProvider; 634 delete myPixProvider;
635 myPixProvider = prov; 635 myPixProvider = prov;
636 636
637 // re-insert all the items with/without pixmap 637 // re-insert all the items with/without pixmap
638 // I would prefer to use changeItem(), but that doesn't honour the pixmap 638 // I would prefer to use changeItem(), but that doesn't honour the pixmap
639 // when using an editable combobox (what we do) 639 // when using an editable combobox (what we do)
640 if ( count() > 0 ) { 640 if ( count() > 0 ) {
641 QStringList items( historyItems() ); 641 QStringList items( historyItems() );
642 clear(); 642 clear();
643 insertItems( items ); 643 insertItems( items );
644 } 644 }
645} 645}
646 646
647void OHistoryCombo::insertItems( const QStringList& items ) 647void OHistoryCombo::insertItems( const QStringList& items )
648{ 648{
649 QStringList::ConstIterator it = items.begin(); 649 QStringList::ConstIterator it = items.begin();
650 QString item; 650 QString item;
651 while ( it != items.end() ) { 651 while ( it != items.end() ) {
652 item = *it; 652 item = *it;
653 if ( !item.isEmpty() ) { // only insert non-empty items 653 if ( !item.isEmpty() ) { // only insert non-empty items
654 if ( myPixProvider ) 654 if ( myPixProvider )
655 // insertItem( myPixProvider->pixmapFor(item, OIcon::SizeSmall), item ); 655 // insertItem( myPixProvider->pixmapFor(item, OIcon::SizeSmall), item );
656 insertItem( myPixProvider->pixmapFor(item, 16), item ); 656 insertItem( myPixProvider->pixmapFor(item, 16), item );
657 else 657 else
658 insertItem( item ); 658 insertItem( item );
659 } 659 }
660 ++it; 660 ++it;
661 } 661 }
662} 662}
663 663
664void OHistoryCombo::slotClear() 664void OHistoryCombo::slotClear()
665{ 665{
666 clearHistory(); 666 clearHistory();
667 emit cleared(); 667 emit cleared();
668} 668}
669 669
diff --git a/libopie2/qt3/opieui/oeditlistbox.cpp b/libopie2/qt3/opieui/oeditlistbox.cpp
index 0e95274..dcc697d 100644
--- a/libopie2/qt3/opieui/oeditlistbox.cpp
+++ b/libopie2/qt3/opieui/oeditlistbox.cpp
@@ -1,417 +1,417 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 2000 David Faure <faure@kde.org>, Alexander Neundorf <neundorf@kde.org> 2 Copyright (C) 2000 David Faure <faure@kde.org>, Alexander Neundorf <neundorf@kde.org>
3 2000, 2002 Carsten Pfeiffer <pfeiffer@kde.org> 3 2000, 2002 Carsten Pfeiffer <pfeiffer@kde.org>
4 4
5 This library is free software; you can redistribute it and/or 5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public 6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either 7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version. 8 version 2 of the License, or (at your option) any later version.
9 9
10 This library is distributed in the hope that it will be useful, 10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details. 13 Library General Public License for more details.
14 14
15 You should have received a copy of the GNU Library General Public License 15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to 16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA. 18 Boston, MA 02111-1307, USA.
19*/ 19*/
20 20
21/* QT */ 21/* QT */
22 22
23#include <qstringlist.h> 23#include <qstringlist.h>
24#include <qpushbutton.h> 24#include <qpushbutton.h>
25#include <qlayout.h> 25#include <qlayout.h>
26#include <qgroupbox.h> 26#include <qgroupbox.h>
27#include <qlistbox.h> 27#include <qlistbox.h>
28#include <qwhatsthis.h> 28#include <qwhatsthis.h>
29#include <qlabel.h> 29#include <qlabel.h>
30 30
31/* OPIE */ 31/* OPIE */
32 32
33#include <opie2/ocombobox.h> 33#include <opie2/ocombobox.h>
34#include <opie2/odialog.h> 34#include <opie2/odialog.h>
35#include <opie2/olineedit.h> 35#include <opie2/olineedit.h>
36#include <opie2/oeditlistbox.h> 36#include <opie2/oeditlistbox.h>
37 37
38/* UNIX */ 38/* UNIX */
39 39
40#include <assert.h> 40#include <assert.h>
41 41
42/*====================================================================================== 42/*======================================================================================
43 * OEditListBoxPrivate 43 * OEditListBoxPrivate
44 *======================================================================================*/ 44 *======================================================================================*/
45 45
46class OEditListBoxPrivate 46class OEditListBoxPrivate
47{ 47{
48public: 48public:
49 bool m_checkAtEntering; 49 bool m_checkAtEntering;
50 int buttons; 50 int buttons;
51}; 51};
52 52
53/*====================================================================================== 53/*======================================================================================
54 * OEditListBox 54 * OEditListBox
55 *======================================================================================*/ 55 *======================================================================================*/
56 56
57OEditListBox::OEditListBox(QWidget *parent, const char *name, 57OEditListBox::OEditListBox(QWidget *parent, const char *name,
58 bool checkAtEntering, int buttons ) 58 bool checkAtEntering, int buttons )
59 :QGroupBox(parent, name ) 59 :QGroupBox(parent, name )
60{ 60{
61 init( checkAtEntering, buttons ); 61 init( checkAtEntering, buttons );
62} 62}
63 63
64OEditListBox::OEditListBox(const QString& title, QWidget *parent, 64OEditListBox::OEditListBox(const QString& title, QWidget *parent,
65 const char *name, bool checkAtEntering, int buttons) 65 const char *name, bool checkAtEntering, int buttons)
66 :QGroupBox(title, parent, name ) 66 :QGroupBox(title, parent, name )
67{ 67{
68 init( checkAtEntering, buttons ); 68 init( checkAtEntering, buttons );
69} 69}
70 70
71OEditListBox::OEditListBox(const QString& title, const CustomEditor& custom, 71OEditListBox::OEditListBox(const QString& title, const CustomEditor& custom,
72 QWidget *parent, const char *name, 72 QWidget *parent, const char *name,
73 bool checkAtEntering, int buttons) 73 bool checkAtEntering, int buttons)
74 :QGroupBox(title, parent, name ) 74 :QGroupBox(title, parent, name )
75{ 75{
76 m_lineEdit = custom.lineEdit(); 76 m_lineEdit = custom.lineEdit();
77 init( checkAtEntering, buttons, custom.representationWidget() ); 77 init( checkAtEntering, buttons, custom.representationWidget() );
78} 78}
79 79
80OEditListBox::~OEditListBox() 80OEditListBox::~OEditListBox()
81{ 81{
82 delete d; 82 delete d;
83 d=0; 83 d=0;
84} 84}
85 85
86void OEditListBox::init( bool checkAtEntering, int buttons, 86void OEditListBox::init( bool checkAtEntering, int buttons,
87 QWidget *representationWidget ) 87 QWidget *representationWidget )
88{ 88{
89 d=new OEditListBoxPrivate; 89 d=new OEditListBoxPrivate;
90 d->m_checkAtEntering=checkAtEntering; 90 d->m_checkAtEntering=checkAtEntering;
91 d->buttons = buttons; 91 d->buttons = buttons;
92 92
93 int lostButtons = 0; 93 int lostButtons = 0;
94 if ( (buttons & Add) == 0 ) 94 if ( (buttons & Add) == 0 )
95 lostButtons++; 95 lostButtons++;
96 if ( (buttons & Remove) == 0 ) 96 if ( (buttons & Remove) == 0 )
97 lostButtons++; 97 lostButtons++;
98 if ( (buttons & UpDown) == 0 ) 98 if ( (buttons & UpDown) == 0 )
99 lostButtons += 2; 99 lostButtons += 2;
100 100
101 101
102 servNewButton = servRemoveButton = servUpButton = servDownButton = 0L; 102 servNewButton = servRemoveButton = servUpButton = servDownButton = 0L;
103 setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, 103 setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,
104 QSizePolicy::MinimumExpanding)); 104 QSizePolicy::MinimumExpanding));
105 105
106 QWidget * gb = this; 106 QWidget * gb = this;
107 QGridLayout * grid = new QGridLayout(gb, 7 - lostButtons, 2, 107 QGridLayout * grid = new QGridLayout(gb, 7 - lostButtons, 2,
108 ODialog::marginHint(), 108 ODialog::marginHint(),
109 ODialog::spacingHint()); 109 ODialog::spacingHint());
110 grid->addRowSpacing(0, fontMetrics().lineSpacing()); 110 grid->addRowSpacing(0, fontMetrics().lineSpacing());
111 for ( int i = 1; i < 7 - lostButtons; i++ ) 111 for ( int i = 1; i < 7 - lostButtons; i++ )
112 grid->setRowStretch(i, 1); 112 grid->setRowStretch(i, 1);
113 113
114 grid->setMargin(15); 114 grid->setMargin(15);
115 115
116 if ( representationWidget ) 116 if ( representationWidget )
117 representationWidget->reparent( gb, QPoint(0,0) ); 117 representationWidget->reparent( gb, QPoint(0,0) );
118 else 118 else
119 m_lineEdit=new OLineEdit(gb); 119 m_lineEdit=new OLineEdit(gb);
120 120
121 m_listBox = new QListBox(gb); 121 m_listBox = new QListBox(gb);
122 122
123 QWidget *editingWidget = representationWidget ? 123 QWidget *editingWidget = representationWidget ?
124 representationWidget : m_lineEdit; 124 representationWidget : m_lineEdit;
125 grid->addMultiCellWidget(editingWidget,1,1,0,1); 125 grid->addMultiCellWidget(editingWidget,1,1,0,1);
126 grid->addMultiCellWidget(m_listBox, 2, 6 - lostButtons, 0, 0); 126 grid->addMultiCellWidget(m_listBox, 2, 6 - lostButtons, 0, 0);
127 int row = 2; 127 int row = 2;
128 if ( buttons & Add ) { 128 if ( buttons & Add ) {
129 servNewButton = new QPushButton(tr("&Add"), gb); 129 servNewButton = new QPushButton(tr("&Add"), gb);
130 servNewButton->setEnabled(false); 130 servNewButton->setEnabled(false);
131 connect(servNewButton, SIGNAL(clicked()), SLOT(addItem())); 131 connect(servNewButton, SIGNAL(clicked()), SLOT(addItem()));
132 132
133 grid->addWidget(servNewButton, row++, 1); 133 grid->addWidget(servNewButton, row++, 1);
134 } 134 }
135 135
136 if ( buttons & Remove ) { 136 if ( buttons & Remove ) {
137 servRemoveButton = new QPushButton(tr("&Remove"), gb); 137 servRemoveButton = new QPushButton(tr("&Remove"), gb);
138 servRemoveButton->setEnabled(false); 138 servRemoveButton->setEnabled(false);
139 connect(servRemoveButton, SIGNAL(clicked()), SLOT(removeItem())); 139 connect(servRemoveButton, SIGNAL(clicked()), SLOT(removeItem()));
140 140
141 grid->addWidget(servRemoveButton, row++, 1); 141 grid->addWidget(servRemoveButton, row++, 1);
142 } 142 }
143 143
144 if ( buttons & UpDown ) { 144 if ( buttons & UpDown ) {
145 servUpButton = new QPushButton(tr("Move &Up"), gb); 145 servUpButton = new QPushButton(tr("Move &Up"), gb);
146 servUpButton->setEnabled(false); 146 servUpButton->setEnabled(false);
147 connect(servUpButton, SIGNAL(clicked()), SLOT(moveItemUp())); 147 connect(servUpButton, SIGNAL(clicked()), SLOT(moveItemUp()));
148 148
149 servDownButton = new QPushButton(tr("Move &Down"), gb); 149 servDownButton = new QPushButton(tr("Move &Down"), gb);
150 servDownButton->setEnabled(false); 150 servDownButton->setEnabled(false);
151 connect(servDownButton, SIGNAL(clicked()), SLOT(moveItemDown())); 151 connect(servDownButton, SIGNAL(clicked()), SLOT(moveItemDown()));
152 152
153 grid->addWidget(servUpButton, row++, 1); 153 grid->addWidget(servUpButton, row++, 1);
154 grid->addWidget(servDownButton, row++, 1); 154 grid->addWidget(servDownButton, row++, 1);
155 } 155 }
156 156
157 connect(m_lineEdit,SIGNAL(textChanged(const QString&)),this,SLOT(typedSomething(const QString&))); 157 connect(m_lineEdit,SIGNAL(textChanged(const QString&)),this,SLOT(typedSomething(const QString&)));
158 m_lineEdit->setTrapReturnKey(true); 158 m_lineEdit->setTrapReturnKey(true);
159 connect(m_lineEdit,SIGNAL(returnPressed()),this,SLOT(addItem())); 159 connect(m_lineEdit,SIGNAL(returnPressed()),this,SLOT(addItem()));
160 connect(m_listBox, SIGNAL(highlighted(int)), SLOT(enableMoveButtons(int))); 160 connect(m_listBox, SIGNAL(highlighted(int)), SLOT(enableMoveButtons(int)));
161 161
162 // maybe supplied lineedit has some text already 162 // maybe supplied lineedit has some text already
163 typedSomething( m_lineEdit->text() ); 163 typedSomething( m_lineEdit->text() );
164} 164}
165 165
166void OEditListBox::typedSomething(const QString& text) 166void OEditListBox::typedSomething(const QString& text)
167{ 167{
168 if(currentItem() >= 0) { 168 if(currentItem() >= 0) {
169 if(currentText() != m_lineEdit->text()) 169 if(currentText() != m_lineEdit->text())
170 { 170 {
171 // IMHO changeItem() shouldn't do anything with the value 171 // IMHO changeItem() shouldn't do anything with the value
172 // of currentItem() ... like changing it or emitting signals ... 172 // of currentItem() ... like changing it or emitting signals ...
173 // but TT disagree with me on this one (it's been that way since ages ... grrr) 173 // but TT disagree with me on this one (it's been that way since ages ... grrr)
174 bool block = m_listBox->signalsBlocked(); 174 bool block = m_listBox->signalsBlocked();
175 m_listBox->blockSignals( true ); 175 m_listBox->blockSignals( true );
176 m_listBox->changeItem(text, currentItem()); 176 m_listBox->changeItem(text, currentItem());
177 m_listBox->blockSignals( block ); 177 m_listBox->blockSignals( block );
178 emit changed(); 178 emit changed();
179 } 179 }
180 } 180 }
181 181
182 if ( !servNewButton ) 182 if ( !servNewButton )
183 return; 183 return;
184 184
185 if (!d->m_checkAtEntering) 185 if (!d->m_checkAtEntering)
186 servNewButton->setEnabled(!text.isEmpty()); 186 servNewButton->setEnabled(!text.isEmpty());
187 else 187 else
188 { 188 {
189 if (text.isEmpty()) 189 if (text.isEmpty())
190 { 190 {
191 servNewButton->setEnabled(false); 191 servNewButton->setEnabled(false);
192 } 192 }
193 else 193 else
194 { 194 {
195 #if QT_VERSION > 290 195 #if QT_VERSION >= 0x030000
196 StringComparisonMode mode = (StringComparisonMode) (ExactMatch | CaseSensitive ); 196 StringComparisonMode mode = (StringComparisonMode) (ExactMatch | CaseSensitive );
197 bool enable = (m_listBox->findItem( text, mode ) == 0L); 197 bool enable = (m_listBox->findItem( text, mode ) == 0L);
198 #else 198 #else
199 bool enable = (m_listBox->findItem( text ) == 0L); 199 bool enable = (m_listBox->findItem( text ) == 0L);
200 #endif 200 #endif
201 servNewButton->setEnabled( enable ); 201 servNewButton->setEnabled( enable );
202 } 202 }
203 } 203 }
204} 204}
205 205
206void OEditListBox::moveItemUp() 206void OEditListBox::moveItemUp()
207{ 207{
208 if (!m_listBox->isEnabled()) 208 if (!m_listBox->isEnabled())
209 { 209 {
210 //ONotifyClient::beep(); 210 //ONotifyClient::beep();
211 return; 211 return;
212 } 212 }
213 213
214 unsigned int selIndex = m_listBox->currentItem(); 214 unsigned int selIndex = m_listBox->currentItem();
215 if (selIndex == 0) 215 if (selIndex == 0)
216 { 216 {
217 //ONotifyClient::beep(); 217 //ONotifyClient::beep();
218 return; 218 return;
219 } 219 }
220 220
221 QListBoxItem *selItem = m_listBox->item(selIndex); 221 QListBoxItem *selItem = m_listBox->item(selIndex);
222 m_listBox->takeItem(selItem); 222 m_listBox->takeItem(selItem);
223 m_listBox->insertItem(selItem, selIndex-1); 223 m_listBox->insertItem(selItem, selIndex-1);
224 m_listBox->setCurrentItem(selIndex - 1); 224 m_listBox->setCurrentItem(selIndex - 1);
225 225
226 emit changed(); 226 emit changed();
227} 227}
228 228
229void OEditListBox::moveItemDown() 229void OEditListBox::moveItemDown()
230{ 230{
231 if (!m_listBox->isEnabled()) 231 if (!m_listBox->isEnabled())
232 { 232 {
233 //ONotifyClient::beep(); 233 //ONotifyClient::beep();
234 return; 234 return;
235 } 235 }
236 236
237 unsigned int selIndex = m_listBox->currentItem(); 237 unsigned int selIndex = m_listBox->currentItem();
238 if (selIndex == m_listBox->count() - 1) 238 if (selIndex == m_listBox->count() - 1)
239 { 239 {
240 //ONotifyClient::beep(); 240 //ONotifyClient::beep();
241 return; 241 return;
242 } 242 }
243 243
244 QListBoxItem *selItem = m_listBox->item(selIndex); 244 QListBoxItem *selItem = m_listBox->item(selIndex);
245 m_listBox->takeItem(selItem); 245 m_listBox->takeItem(selItem);
246 m_listBox->insertItem(selItem, selIndex+1); 246 m_listBox->insertItem(selItem, selIndex+1);
247 m_listBox->setCurrentItem(selIndex + 1); 247 m_listBox->setCurrentItem(selIndex + 1);
248 248
249 emit changed(); 249 emit changed();
250} 250}
251 251
252void OEditListBox::addItem() 252void OEditListBox::addItem()
253{ 253{
254 // when m_checkAtEntering is true, the add-button is disabled, but this 254 // when m_checkAtEntering is true, the add-button is disabled, but this
255 // slot can still be called through Key_Return/Key_Enter. So we guard 255 // slot can still be called through Key_Return/Key_Enter. So we guard
256 // against this. 256 // against this.
257 if ( !servNewButton || !servNewButton->isEnabled() ) 257 if ( !servNewButton || !servNewButton->isEnabled() )
258 return; 258 return;
259 259
260 const QString& currentTextLE=m_lineEdit->text(); 260 const QString& currentTextLE=m_lineEdit->text();
261 bool alreadyInList(false); 261 bool alreadyInList(false);
262 //if we didn't check for dupes at the inserting we have to do it now 262 //if we didn't check for dupes at the inserting we have to do it now
263 if (!d->m_checkAtEntering) 263 if (!d->m_checkAtEntering)
264 { 264 {
265 // first check current item instead of dumb iterating the entire list 265 // first check current item instead of dumb iterating the entire list
266 if ( m_listBox->currentText() == currentTextLE ) 266 if ( m_listBox->currentText() == currentTextLE )
267 alreadyInList = true; 267 alreadyInList = true;
268 else 268 else
269 { 269 {
270 #if QT_VERSION > 290 270 #if QT_VERSION >= 0x030000
271 StringComparisonMode mode = (StringComparisonMode) (ExactMatch | CaseSensitive ); 271 StringComparisonMode mode = (StringComparisonMode) (ExactMatch | CaseSensitive );
272 alreadyInList =(m_listBox->findItem(currentTextLE, mode) != 0); 272 alreadyInList =(m_listBox->findItem(currentTextLE, mode) != 0);
273 #else 273 #else
274 alreadyInList =(m_listBox->findItem(currentTextLE) != 0); 274 alreadyInList =(m_listBox->findItem(currentTextLE) != 0);
275 #endif 275 #endif
276 } 276 }
277 } 277 }
278 278
279 if ( servNewButton ) 279 if ( servNewButton )
280 servNewButton->setEnabled(false); 280 servNewButton->setEnabled(false);
281 281
282 bool block = m_lineEdit->signalsBlocked(); 282 bool block = m_lineEdit->signalsBlocked();
283 m_lineEdit->blockSignals(true); 283 m_lineEdit->blockSignals(true);
284 m_lineEdit->clear(); 284 m_lineEdit->clear();
285 m_lineEdit->blockSignals(block); 285 m_lineEdit->blockSignals(block);
286 286
287 m_listBox->setSelected(currentItem(), false); 287 m_listBox->setSelected(currentItem(), false);
288 288
289 if (!alreadyInList) 289 if (!alreadyInList)
290 { 290 {
291 block = m_listBox->signalsBlocked(); 291 block = m_listBox->signalsBlocked();
292 m_listBox->blockSignals( true ); 292 m_listBox->blockSignals( true );
293 m_listBox->insertItem(currentTextLE); 293 m_listBox->insertItem(currentTextLE);
294 m_listBox->blockSignals( block ); 294 m_listBox->blockSignals( block );
295 emit changed(); 295 emit changed();
296 emit added( currentTextLE ); 296 emit added( currentTextLE );
297 } 297 }
298} 298}
299 299
300int OEditListBox::currentItem() const 300int OEditListBox::currentItem() const
301{ 301{
302 int nr = m_listBox->currentItem(); 302 int nr = m_listBox->currentItem();
303 #if QT_VERSION > 290 303 #if QT_VERSION >= 0x030000
304 if(nr >= 0 && !m_listBox->item(nr)->isSelected()) return -1; 304 if(nr >= 0 && !m_listBox->item(nr)->isSelected()) return -1;
305 #else 305 #else
306 if(nr >= 0 && !m_listBox->isSelected(m_listBox->item(nr))) return -1; 306 if(nr >= 0 && !m_listBox->isSelected(m_listBox->item(nr))) return -1;
307 #endif 307 #endif
308 return nr; 308 return nr;
309} 309}
310 310
311void OEditListBox::removeItem() 311void OEditListBox::removeItem()
312{ 312{
313 int selected = m_listBox->currentItem(); 313 int selected = m_listBox->currentItem();
314 314
315 if ( selected >= 0 ) 315 if ( selected >= 0 )
316 { 316 {
317 QString removedText = m_listBox->currentText(); 317 QString removedText = m_listBox->currentText();
318 318
319 m_listBox->removeItem( selected ); 319 m_listBox->removeItem( selected );
320 if ( count() > 0 ) 320 if ( count() > 0 )
321 m_listBox->setSelected( QMIN( selected, count() - 1 ), true ); 321 m_listBox->setSelected( QMIN( selected, count() - 1 ), true );
322 322
323 emit changed(); 323 emit changed();
324 emit removed( removedText ); 324 emit removed( removedText );
325 } 325 }
326 326
327 if ( servRemoveButton && m_listBox->currentItem() == -1 ) 327 if ( servRemoveButton && m_listBox->currentItem() == -1 )
328 servRemoveButton->setEnabled(false); 328 servRemoveButton->setEnabled(false);
329} 329}
330 330
331void OEditListBox::enableMoveButtons(int index) 331void OEditListBox::enableMoveButtons(int index)
332{ 332{
333 // Update the lineEdit when we select a different line. 333 // Update the lineEdit when we select a different line.
334 if(currentText() != m_lineEdit->text()) 334 if(currentText() != m_lineEdit->text())
335 m_lineEdit->setText(currentText()); 335 m_lineEdit->setText(currentText());
336 336
337 bool moveEnabled = servUpButton && servDownButton; 337 bool moveEnabled = servUpButton && servDownButton;
338 338
339 if (moveEnabled ) 339 if (moveEnabled )
340 { 340 {
341 if (m_listBox->count() <= 1) 341 if (m_listBox->count() <= 1)
342 { 342 {
343 servUpButton->setEnabled(false); 343 servUpButton->setEnabled(false);
344 servDownButton->setEnabled(false); 344 servDownButton->setEnabled(false);
345 } 345 }
346 else if ((uint) index == (m_listBox->count() - 1)) 346 else if ((uint) index == (m_listBox->count() - 1))
347 { 347 {
348 servUpButton->setEnabled(true); 348 servUpButton->setEnabled(true);
349 servDownButton->setEnabled(false); 349 servDownButton->setEnabled(false);
350 } 350 }
351 else if (index == 0) 351 else if (index == 0)
352 { 352 {
353 servUpButton->setEnabled(false); 353 servUpButton->setEnabled(false);
354 servDownButton->setEnabled(true); 354 servDownButton->setEnabled(true);
355 } 355 }
356 else 356 else
357 { 357 {
358 servUpButton->setEnabled(true); 358 servUpButton->setEnabled(true);
359 servDownButton->setEnabled(true); 359 servDownButton->setEnabled(true);
360 } 360 }
361 } 361 }
362 362
363 if ( servRemoveButton ) 363 if ( servRemoveButton )
364 servRemoveButton->setEnabled(true); 364 servRemoveButton->setEnabled(true);
365} 365}
366 366
367void OEditListBox::clear() 367void OEditListBox::clear()
368{ 368{
369 m_lineEdit->clear(); 369 m_lineEdit->clear();
370 m_listBox->clear(); 370 m_listBox->clear();
371 emit changed(); 371 emit changed();
372} 372}
373 373
374void OEditListBox::insertStringList(const QStringList& list, int index) 374void OEditListBox::insertStringList(const QStringList& list, int index)
375{ 375{
376 m_listBox->insertStringList(list,index); 376 m_listBox->insertStringList(list,index);
377} 377}
378 378
379void OEditListBox::insertStrList(const QStrList* list, int index) 379void OEditListBox::insertStrList(const QStrList* list, int index)
380{ 380{
381 m_listBox->insertStrList(list,index); 381 m_listBox->insertStrList(list,index);
382} 382}
383 383
384void OEditListBox::insertStrList(const QStrList& list, int index) 384void OEditListBox::insertStrList(const QStrList& list, int index)
385{ 385{
386 m_listBox->insertStrList(list,index); 386 m_listBox->insertStrList(list,index);
387} 387}
388 388
389void OEditListBox::insertStrList(const char ** list, int numStrings, int index) 389void OEditListBox::insertStrList(const char ** list, int numStrings, int index)
390{ 390{
391 m_listBox->insertStrList(list,numStrings,index); 391 m_listBox->insertStrList(list,numStrings,index);
392} 392}
393 393
394QStringList OEditListBox::items() const 394QStringList OEditListBox::items() const
395{ 395{
396 QStringList list; 396 QStringList list;
397 for ( uint i = 0; i < m_listBox->count(); i++ ) 397 for ( uint i = 0; i < m_listBox->count(); i++ )
398 list.append( m_listBox->text( i )); 398 list.append( m_listBox->text( i ));
399 399
400 return list; 400 return list;
401} 401}
402 402
403void OEditListBox::virtual_hook( int, void* ) 403void OEditListBox::virtual_hook( int, void* )
404{ /*BASE::virtual_hook( id, data );*/ } 404{ /*BASE::virtual_hook( id, data );*/ }
405 405
406 406
407/*====================================================================================== 407/*======================================================================================
408 * CustomEditor 408 * CustomEditor
409 *======================================================================================*/ 409 *======================================================================================*/
410 410
411OEditListBox::CustomEditor::CustomEditor( OComboBox *combo ) 411OEditListBox::CustomEditor::CustomEditor( OComboBox *combo )
412{ 412{
413 m_representationWidget = combo; 413 m_representationWidget = combo;
414 assert( combo->lineEdit()->inherits( "OLineEdit" ) ); 414 assert( combo->lineEdit()->inherits( "OLineEdit" ) );
415 m_lineEdit = static_cast<OLineEdit*>( combo->lineEdit() ); 415 m_lineEdit = static_cast<OLineEdit*>( combo->lineEdit() );
416 416
417} 417}
diff --git a/libopie2/qt3/opieui/olineedit.cpp b/libopie2/qt3/opieui/olineedit.cpp
index 6f66fc7..b150987 100644
--- a/libopie2/qt3/opieui/olineedit.cpp
+++ b/libopie2/qt3/opieui/olineedit.cpp
@@ -1,729 +1,729 @@
1/* 1/*
2 This file Copyright (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de> 2 This file Copyright (C) 2003 Michael 'Mickey' Lauer <mickey@tm.informatik.uni-frankfurt.de>
3 is part of the Copyright (C) 2001 Carsten Pfeiffer <pfeiffer@kde.org>, Dawit Alemayehu <adawit@kde.org> 3 is part of the Copyright (C) 2001 Carsten Pfeiffer <pfeiffer@kde.org>, Dawit Alemayehu <adawit@kde.org>
4 Opie Project Copyright (C) 1999 Preston Brown <pbrown@kde.org>, Patrick Ward <PAT_WARD@HP-USA-om5.om.hp.com> 4 Opie Project Copyright (C) 1999 Preston Brown <pbrown@kde.org>, Patrick Ward <PAT_WARD@HP-USA-om5.om.hp.com>
5 Copyright (C) 1997 Sven Radej (sven.radej@iname.com) 5 Copyright (C) 1997 Sven Radej (sven.radej@iname.com)
6 =. 6 =.
7 .=l. Originally part of the KDE Project 7 .=l. Originally part of the KDE Project
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/* QT */ 33/* QT */
34 34
35#include <qapplication.h> 35#include <qapplication.h>
36#include <qclipboard.h> 36#include <qclipboard.h>
37#include <qtimer.h> 37#include <qtimer.h>
38#include <qpopupmenu.h> 38#include <qpopupmenu.h>
39 39
40/* OPIE */ 40/* OPIE */
41 41
42#include <opie2/ocompletionbox.h> 42#include <opie2/ocompletionbox.h>
43#include <opie2/olineedit.h> 43#include <opie2/olineedit.h>
44#include <opie2/oglobalsettings.h> 44#include <opie2/oglobalsettings.h>
45 45
46typedef QString KURL; //FIXME: Revise for Opie 46typedef QString KURL; //FIXME: Revise for Opie
47 47
48/*====================================================================================== 48/*======================================================================================
49 * OLineEditPrivate 49 * OLineEditPrivate
50 *======================================================================================*/ 50 *======================================================================================*/
51 51
52class OLineEdit::OLineEditPrivate 52class OLineEdit::OLineEditPrivate
53{ 53{
54public: 54public:
55 OLineEditPrivate() 55 OLineEditPrivate()
56 { 56 {
57 grabReturnKeyEvents = false; 57 grabReturnKeyEvents = false;
58 handleURLDrops = true; 58 handleURLDrops = true;
59 completionBox = 0L; 59 completionBox = 0L;
60 } 60 }
61 ~OLineEditPrivate() 61 ~OLineEditPrivate()
62 { 62 {
63 delete completionBox; 63 delete completionBox;
64 } 64 }
65 65
66 bool grabReturnKeyEvents; 66 bool grabReturnKeyEvents;
67 bool handleURLDrops; 67 bool handleURLDrops;
68 OCompletionBox *completionBox; 68 OCompletionBox *completionBox;
69}; 69};
70 70
71 71
72/*====================================================================================== 72/*======================================================================================
73 * OLineEdit 73 * OLineEdit
74 *======================================================================================*/ 74 *======================================================================================*/
75 75
76OLineEdit::OLineEdit( const QString &string, QWidget *parent, const char *name ) 76OLineEdit::OLineEdit( const QString &string, QWidget *parent, const char *name )
77 : QLineEdit( string, parent, name ) 77 : QLineEdit( string, parent, name )
78{ 78{
79 init(); 79 init();
80} 80}
81 81
82OLineEdit::OLineEdit( QWidget *parent, const char *name ) 82OLineEdit::OLineEdit( QWidget *parent, const char *name )
83 : QLineEdit( parent, name ) 83 : QLineEdit( parent, name )
84{ 84{
85 init(); 85 init();
86} 86}
87 87
88OLineEdit::~OLineEdit () 88OLineEdit::~OLineEdit ()
89{ 89{
90 delete d; 90 delete d;
91} 91}
92 92
93void OLineEdit::init() 93void OLineEdit::init()
94{ 94{
95 d = new OLineEditPrivate; 95 d = new OLineEditPrivate;
96 possibleTripleClick = false; 96 possibleTripleClick = false;
97 // Enable the context menu by default. 97 // Enable the context menu by default.
98 setContextMenuEnabled( true ); 98 setContextMenuEnabled( true );
99 //OCursor::setAutoHideCursor( this, true, true ); 99 //OCursor::setAutoHideCursor( this, true, true );
100 installEventFilter( this ); 100 installEventFilter( this );
101} 101}
102 102
103void OLineEdit::setCompletionMode( OGlobalSettings::Completion mode ) 103void OLineEdit::setCompletionMode( OGlobalSettings::Completion mode )
104{ 104{
105 OGlobalSettings::Completion oldMode = completionMode(); 105 OGlobalSettings::Completion oldMode = completionMode();
106 if ( oldMode != mode && oldMode == OGlobalSettings::CompletionPopup && 106 if ( oldMode != mode && oldMode == OGlobalSettings::CompletionPopup &&
107 d->completionBox && d->completionBox->isVisible() ) 107 d->completionBox && d->completionBox->isVisible() )
108 d->completionBox->hide(); 108 d->completionBox->hide();
109 109
110 // If the widgets echo mode is not Normal, no completion 110 // If the widgets echo mode is not Normal, no completion
111 // feature will be enabled even if one is requested. 111 // feature will be enabled even if one is requested.
112 if ( echoMode() != QLineEdit::Normal ) 112 if ( echoMode() != QLineEdit::Normal )
113 mode = OGlobalSettings::CompletionNone; // Override the request. 113 mode = OGlobalSettings::CompletionNone; // Override the request.
114 114
115 OCompletionBase::setCompletionMode( mode ); 115 OCompletionBase::setCompletionMode( mode );
116} 116}
117 117
118void OLineEdit::setCompletedText( const QString& t, bool marked ) 118void OLineEdit::setCompletedText( const QString& t, bool marked )
119{ 119{
120 QString txt = text(); 120 QString txt = text();
121 if ( t != txt ) 121 if ( t != txt )
122 { 122 {
123 int curpos = marked ? txt.length() : t.length(); 123 int curpos = marked ? txt.length() : t.length();
124 validateAndSet( t, curpos, curpos, t.length() ); 124 validateAndSet( t, curpos, curpos, t.length() );
125 } 125 }
126} 126}
127 127
128void OLineEdit::setCompletedText( const QString& text ) 128void OLineEdit::setCompletedText( const QString& text )
129{ 129{
130 OGlobalSettings::Completion mode = completionMode(); 130 OGlobalSettings::Completion mode = completionMode();
131 bool marked = ( mode == OGlobalSettings::CompletionAuto || 131 bool marked = ( mode == OGlobalSettings::CompletionAuto ||
132 mode == OGlobalSettings::CompletionMan || 132 mode == OGlobalSettings::CompletionMan ||
133 mode == OGlobalSettings::CompletionPopup ); 133 mode == OGlobalSettings::CompletionPopup );
134 setCompletedText( text, marked ); 134 setCompletedText( text, marked );
135} 135}
136 136
137void OLineEdit::rotateText( OCompletionBase::KeyBindingType type ) 137void OLineEdit::rotateText( OCompletionBase::KeyBindingType type )
138{ 138{
139 OCompletion* comp = compObj(); 139 OCompletion* comp = compObj();
140 if ( comp && 140 if ( comp &&
141 (type == OCompletionBase::PrevCompletionMatch || 141 (type == OCompletionBase::PrevCompletionMatch ||
142 type == OCompletionBase::NextCompletionMatch ) ) 142 type == OCompletionBase::NextCompletionMatch ) )
143 { 143 {
144 QString input = (type == OCompletionBase::PrevCompletionMatch) ? comp->previousMatch() : comp->nextMatch(); 144 QString input = (type == OCompletionBase::PrevCompletionMatch) ? comp->previousMatch() : comp->nextMatch();
145 // Skip rotation if previous/next match is null or the same text 145 // Skip rotation if previous/next match is null or the same text
146 if ( input.isNull() || input == displayText() ) 146 if ( input.isNull() || input == displayText() )
147 return; 147 return;
148 #if QT_VERSION > 290 148 #if QT_VERSION >= 0x030000
149 setCompletedText( input, hasSelectedText() ); 149 setCompletedText( input, hasSelectedText() );
150 #else 150 #else
151 setCompletedText( input, hasMarkedText() ); 151 setCompletedText( input, hasMarkedText() );
152 #endif 152 #endif
153 } 153 }
154} 154}
155 155
156void OLineEdit::makeCompletion( const QString& text ) 156void OLineEdit::makeCompletion( const QString& text )
157{ 157{
158 OCompletion *comp = compObj(); 158 OCompletion *comp = compObj();
159 if ( !comp ) 159 if ( !comp )
160 return; // No completion object... 160 return; // No completion object...
161 161
162 QString match = comp->makeCompletion( text ); 162 QString match = comp->makeCompletion( text );
163 OGlobalSettings::Completion mode = completionMode(); 163 OGlobalSettings::Completion mode = completionMode();
164 if ( mode == OGlobalSettings::CompletionPopup ) 164 if ( mode == OGlobalSettings::CompletionPopup )
165 { 165 {
166 if ( match.isNull() ) 166 if ( match.isNull() )
167 { 167 {
168 if ( d->completionBox ) { 168 if ( d->completionBox ) {
169 d->completionBox->hide(); 169 d->completionBox->hide();
170 d->completionBox->clear(); 170 d->completionBox->clear();
171 } 171 }
172 } 172 }
173 else 173 else
174 setCompletedItems( comp->allMatches() ); 174 setCompletedItems( comp->allMatches() );
175 } 175 }
176 else 176 else
177 { 177 {
178 // all other completion modes 178 // all other completion modes
179 // If no match or the same match, simply return without completing. 179 // If no match or the same match, simply return without completing.
180 if ( match.isNull() || match == text ) 180 if ( match.isNull() || match == text )
181 return; 181 return;
182 182
183 setCompletedText( match ); 183 setCompletedText( match );
184 } 184 }
185} 185}
186 186
187void OLineEdit::setReadOnly(bool readOnly) 187void OLineEdit::setReadOnly(bool readOnly)
188{ 188{
189 QPalette p = palette(); 189 QPalette p = palette();
190 if (readOnly) 190 if (readOnly)
191 { 191 {
192 QColor color = p.color(QPalette::Disabled, QColorGroup::Background); 192 QColor color = p.color(QPalette::Disabled, QColorGroup::Background);
193 p.setColor(QColorGroup::Base, color); 193 p.setColor(QColorGroup::Base, color);
194 p.setColor(QColorGroup::Background, color); 194 p.setColor(QColorGroup::Background, color);
195 } 195 }
196 else 196 else
197 { 197 {
198 QColor color = p.color(QPalette::Normal, QColorGroup::Base); 198 QColor color = p.color(QPalette::Normal, QColorGroup::Base);
199 p.setColor(QColorGroup::Base, color); 199 p.setColor(QColorGroup::Base, color);
200 p.setColor(QColorGroup::Background, color); 200 p.setColor(QColorGroup::Background, color);
201 } 201 }
202 setPalette(p); 202 setPalette(p);
203 203
204 QLineEdit::setReadOnly (readOnly); 204 QLineEdit::setReadOnly (readOnly);
205} 205}
206 206
207void OLineEdit::keyPressEvent( QKeyEvent *e ) 207void OLineEdit::keyPressEvent( QKeyEvent *e )
208{ 208{
209 qDebug( "OLineEdit::keyPressEvent()" ); 209 qDebug( "OLineEdit::keyPressEvent()" );
210 210
211 /* 211 /*
212 212
213 KKey key( e ); 213 KKey key( e );
214 214
215 if ( KStdAccel::copy().contains( key ) ) { 215 if ( KStdAccel::copy().contains( key ) ) {
216 copy(); 216 copy();
217 return; 217 return;
218 } 218 }
219 else if ( KStdAccel::paste().contains( key ) ) { 219 else if ( KStdAccel::paste().contains( key ) ) {
220 paste(); 220 paste();
221 return; 221 return;
222 } 222 }
223 else if ( KStdAccel::cut().contains( key ) ) { 223 else if ( KStdAccel::cut().contains( key ) ) {
224 cut(); 224 cut();
225 return; 225 return;
226 } 226 }
227 else if ( KStdAccel::undo().contains( key ) ) { 227 else if ( KStdAccel::undo().contains( key ) ) {
228 undo(); 228 undo();
229 return; 229 return;
230 } 230 }
231 else if ( KStdAccel::redo().contains( key ) ) { 231 else if ( KStdAccel::redo().contains( key ) ) {
232 redo(); 232 redo();
233 return; 233 return;
234 } 234 }
235 else if ( KStdAccel::deleteWordBack().contains( key ) ) 235 else if ( KStdAccel::deleteWordBack().contains( key ) )
236 { 236 {
237 cursorWordBackward(TRUE); 237 cursorWordBackward(TRUE);
238 if ( hasSelectedText() ) 238 if ( hasSelectedText() )
239 del(); 239 del();
240 240
241 e->accept(); 241 e->accept();
242 return; 242 return;
243 } 243 }
244 else if ( KStdAccel::deleteWordForward().contains( key ) ) 244 else if ( KStdAccel::deleteWordForward().contains( key ) )
245 { 245 {
246 // Workaround for QT bug where 246 // Workaround for QT bug where
247 cursorWordForward(TRUE); 247 cursorWordForward(TRUE);
248 if ( hasSelectedText() ) 248 if ( hasSelectedText() )
249 del(); 249 del();
250 250
251 e->accept(); 251 e->accept();
252 return; 252 return;
253 } 253 }
254 */ 254 */
255 255
256 // Filter key-events if EchoMode is normal & 256 // Filter key-events if EchoMode is normal &
257 // completion mode is not set to CompletionNone 257 // completion mode is not set to CompletionNone
258 if ( echoMode() == QLineEdit::Normal && 258 if ( echoMode() == QLineEdit::Normal &&
259 completionMode() != OGlobalSettings::CompletionNone ) 259 completionMode() != OGlobalSettings::CompletionNone )
260 { 260 {
261 KeyBindingMap keys = getKeyBindings(); 261 KeyBindingMap keys = getKeyBindings();
262 OGlobalSettings::Completion mode = completionMode(); 262 OGlobalSettings::Completion mode = completionMode();
263 bool noModifier = (e->state() == NoButton || e->state()== ShiftButton); 263 bool noModifier = (e->state() == NoButton || e->state()== ShiftButton);
264 264
265 if ( (mode == OGlobalSettings::CompletionAuto || 265 if ( (mode == OGlobalSettings::CompletionAuto ||
266 mode == OGlobalSettings::CompletionMan) && noModifier ) 266 mode == OGlobalSettings::CompletionMan) && noModifier )
267 { 267 {
268 QString keycode = e->text(); 268 QString keycode = e->text();
269 if ( !keycode.isNull() && keycode.unicode()->isPrint() ) 269 if ( !keycode.isNull() && keycode.unicode()->isPrint() )
270 { 270 {
271 QLineEdit::keyPressEvent ( e ); 271 QLineEdit::keyPressEvent ( e );
272 QString txt = text(); 272 QString txt = text();
273 int len = txt.length(); 273 int len = txt.length();
274 #if QT_VERSION > 290 274 #if QT_VERSION >= 0x030000
275 if ( !hasSelectedText() && len && cursorPosition() == len ) 275 if ( !hasSelectedText() && len && cursorPosition() == len )
276 #else 276 #else
277 if ( !hasMarkedText() && len && cursorPosition() == len ) 277 if ( !hasMarkedText() && len && cursorPosition() == len )
278 #endif 278 #endif
279 { 279 {
280 if ( emitSignals() ) 280 if ( emitSignals() )
281 emit completion( txt ); 281 emit completion( txt );
282 if ( handleSignals() ) 282 if ( handleSignals() )
283 makeCompletion( txt ); 283 makeCompletion( txt );
284 e->accept(); 284 e->accept();
285 } 285 }
286 return; 286 return;
287 } 287 }
288 } 288 }
289 289
290 else if ( mode == OGlobalSettings::CompletionPopup && noModifier ) 290 else if ( mode == OGlobalSettings::CompletionPopup && noModifier )
291 { 291 {
292 qDebug( "OLineEdit::keyPressEvent() - global settings = CompletionPopup & noModifier" ); 292 qDebug( "OLineEdit::keyPressEvent() - global settings = CompletionPopup & noModifier" );
293 293
294 QString old_txt = text(); 294 QString old_txt = text();
295 QLineEdit::keyPressEvent ( e ); 295 QLineEdit::keyPressEvent ( e );
296 QString txt = text(); 296 QString txt = text();
297 int len = txt.length(); 297 int len = txt.length();
298 QString keycode = e->text(); 298 QString keycode = e->text();
299 299
300 300
301 if ( txt != old_txt && len && cursorPosition() == len && 301 if ( txt != old_txt && len && cursorPosition() == len &&
302 ( (!keycode.isNull() && keycode.unicode()->isPrint()) || 302 ( (!keycode.isNull() && keycode.unicode()->isPrint()) ||
303 e->key() == Key_Backspace ) ) 303 e->key() == Key_Backspace ) )
304 { 304 {
305 if ( emitSignals() ) 305 if ( emitSignals() )
306 emit completion( txt ); // emit when requested... 306 emit completion( txt ); // emit when requested...
307 if ( handleSignals() ) 307 if ( handleSignals() )
308 makeCompletion( txt ); // handle when requested... 308 makeCompletion( txt ); // handle when requested...
309 e->accept(); 309 e->accept();
310 } 310 }
311 else if (!len && d->completionBox && d->completionBox->isVisible()) 311 else if (!len && d->completionBox && d->completionBox->isVisible())
312 d->completionBox->hide(); 312 d->completionBox->hide();
313 313
314 return; 314 return;
315 } 315 }
316 316
317 /*else if ( mode == OGlobalSettings::CompletionShell ) 317 /*else if ( mode == OGlobalSettings::CompletionShell )
318 { 318 {
319 // Handles completion. 319 // Handles completion.
320 KShortcut cut; 320 KShortcut cut;
321 if ( keys[TextCompletion].isNull() ) 321 if ( keys[TextCompletion].isNull() )
322 cut = KStdAccel::shortcut(KStdAccel::TextCompletion); 322 cut = KStdAccel::shortcut(KStdAccel::TextCompletion);
323 else 323 else
324 cut = keys[TextCompletion]; 324 cut = keys[TextCompletion];
325 325
326 if ( cut.contains( key ) ) 326 if ( cut.contains( key ) )
327 { 327 {
328 // Emit completion if the completion mode is CompletionShell 328 // Emit completion if the completion mode is CompletionShell
329 // and the cursor is at the end of the string. 329 // and the cursor is at the end of the string.
330 QString txt = text(); 330 QString txt = text();
331 int len = txt.length(); 331 int len = txt.length();
332 if ( cursorPosition() == len && len != 0 ) 332 if ( cursorPosition() == len && len != 0 )
333 { 333 {
334 if ( emitSignals() ) 334 if ( emitSignals() )
335 emit completion( txt ); 335 emit completion( txt );
336 if ( handleSignals() ) 336 if ( handleSignals() )
337 makeCompletion( txt ); 337 makeCompletion( txt );
338 return; 338 return;
339 } 339 }
340 } 340 }
341 else if ( d->completionBox ) 341 else if ( d->completionBox )
342 d->completionBox->hide(); 342 d->completionBox->hide();
343 } 343 }
344 344
345 // handle rotation 345 // handle rotation
346 if ( mode != OGlobalSettings::CompletionNone ) 346 if ( mode != OGlobalSettings::CompletionNone )
347 { 347 {
348 // Handles previous match 348 // Handles previous match
349 KShortcut cut; 349 KShortcut cut;
350 if ( keys[PrevCompletionMatch].isNull() ) 350 if ( keys[PrevCompletionMatch].isNull() )
351 cut = KStdAccel::shortcut(KStdAccel::PrevCompletion); 351 cut = KStdAccel::shortcut(KStdAccel::PrevCompletion);
352 else 352 else
353 cut = keys[PrevCompletionMatch]; 353 cut = keys[PrevCompletionMatch];
354 354
355 if ( cut.contains( key ) ) 355 if ( cut.contains( key ) )
356 { 356 {
357 if ( emitSignals() ) 357 if ( emitSignals() )
358 emit textRotation( OCompletionBase::PrevCompletionMatch ); 358 emit textRotation( OCompletionBase::PrevCompletionMatch );
359 if ( handleSignals() ) 359 if ( handleSignals() )
360 rotateText( OCompletionBase::PrevCompletionMatch ); 360 rotateText( OCompletionBase::PrevCompletionMatch );
361 return; 361 return;
362 } 362 }
363 363
364 // Handles next match 364 // Handles next match
365 if ( keys[NextCompletionMatch].isNull() ) 365 if ( keys[NextCompletionMatch].isNull() )
366 cut = KStdAccel::key(KStdAccel::NextCompletion); 366 cut = KStdAccel::key(KStdAccel::NextCompletion);
367 else 367 else
368 cut = keys[NextCompletionMatch]; 368 cut = keys[NextCompletionMatch];
369 369
370 if ( cut.contains( key ) ) 370 if ( cut.contains( key ) )
371 { 371 {
372 if ( emitSignals() ) 372 if ( emitSignals() )
373 emit textRotation( OCompletionBase::NextCompletionMatch ); 373 emit textRotation( OCompletionBase::NextCompletionMatch );
374 if ( handleSignals() ) 374 if ( handleSignals() )
375 rotateText( OCompletionBase::NextCompletionMatch ); 375 rotateText( OCompletionBase::NextCompletionMatch );
376 return; 376 return;
377 } 377 }
378 } 378 }
379 379
380 // substring completion 380 // substring completion
381 if ( compObj() ) 381 if ( compObj() )
382 { 382 {
383 KShortcut cut; 383 KShortcut cut;
384 if ( keys[SubstringCompletion].isNull() ) 384 if ( keys[SubstringCompletion].isNull() )
385 cut = KStdAccel::shortcut(KStdAccel::SubstringCompletion); 385 cut = KStdAccel::shortcut(KStdAccel::SubstringCompletion);
386 else 386 else
387 cut = keys[SubstringCompletion]; 387 cut = keys[SubstringCompletion];
388 388
389 if ( cut.contains( key ) ) 389 if ( cut.contains( key ) )
390 { 390 {
391 if ( emitSignals() ) 391 if ( emitSignals() )
392 emit substringCompletion( text() ); 392 emit substringCompletion( text() );
393 if ( handleSignals() ) 393 if ( handleSignals() )
394 { 394 {
395 setCompletedItems( compObj()->substringCompletion(text())); 395 setCompletedItems( compObj()->substringCompletion(text()));
396 e->accept(); 396 e->accept();
397 } 397 }
398 return; 398 return;
399 } 399 }
400 } */ 400 } */
401 } 401 }
402 402
403 // Let QLineEdit handle any other keys events. 403 // Let QLineEdit handle any other keys events.
404 QLineEdit::keyPressEvent ( e ); 404 QLineEdit::keyPressEvent ( e );
405} 405}
406 406
407void OLineEdit::mouseDoubleClickEvent( QMouseEvent* e ) 407void OLineEdit::mouseDoubleClickEvent( QMouseEvent* e )
408{ 408{
409 if ( e->button() == Qt::LeftButton ) 409 if ( e->button() == Qt::LeftButton )
410 { 410 {
411 possibleTripleClick=true; 411 possibleTripleClick=true;
412 QTimer::singleShot( QApplication::doubleClickInterval(),this, 412 QTimer::singleShot( QApplication::doubleClickInterval(),this,
413 SLOT(tripleClickTimeout()) ); 413 SLOT(tripleClickTimeout()) );
414 } 414 }
415 QLineEdit::mouseDoubleClickEvent( e ); 415 QLineEdit::mouseDoubleClickEvent( e );
416} 416}
417 417
418void OLineEdit::mousePressEvent( QMouseEvent* e ) 418void OLineEdit::mousePressEvent( QMouseEvent* e )
419{ 419{
420 if ( possibleTripleClick && e->button() == Qt::LeftButton ) 420 if ( possibleTripleClick && e->button() == Qt::LeftButton )
421 { 421 {
422 selectAll(); 422 selectAll();
423 return; 423 return;
424 } 424 }
425 QLineEdit::mousePressEvent( e ); 425 QLineEdit::mousePressEvent( e );
426} 426}
427 427
428void OLineEdit::tripleClickTimeout() 428void OLineEdit::tripleClickTimeout()
429{ 429{
430 possibleTripleClick=false; 430 possibleTripleClick=false;
431} 431}
432 432
433QPopupMenu *OLineEdit::createPopupMenu() 433QPopupMenu *OLineEdit::createPopupMenu()
434{ 434{
435 // Return if popup menu is not enabled !! 435 // Return if popup menu is not enabled !!
436 if ( !m_bEnableMenu ) 436 if ( !m_bEnableMenu )
437 return 0; 437 return 0;
438 438
439 #if QT_VERSION > 290 439 #if QT_VERSION >= 0x030000
440 QPopupMenu *popup = QLineEdit::createPopupMenu(); 440 QPopupMenu *popup = QLineEdit::createPopupMenu();
441 #else 441 #else
442 QPopupMenu *popup = new QPopupMenu(); 442 QPopupMenu *popup = new QPopupMenu();
443 #warning OLineEdit is not fully functional on Qt2 443 #warning OLineEdit is not fully functional on Qt2
444 #endif 444 #endif
445 445
446 // completion object is present. 446 // completion object is present.
447 if ( compObj() ) 447 if ( compObj() )
448 { 448 {
449 QPopupMenu *subMenu = new QPopupMenu( popup ); 449 QPopupMenu *subMenu = new QPopupMenu( popup );
450 connect( subMenu, SIGNAL( activated(int) ), 450 connect( subMenu, SIGNAL( activated(int) ),
451 this, SLOT( completionMenuActivated(int) ) ); 451 this, SLOT( completionMenuActivated(int) ) );
452 452
453 popup->insertSeparator(); 453 popup->insertSeparator();
454 //popup->insertItem( SmallIconSet("completion"), i18n("Text Completion"), 454 //popup->insertItem( SmallIconSet("completion"), i18n("Text Completion"),
455 // subMenu ); 455 // subMenu );
456 456
457 popup->insertItem( tr("Text Completion"), subMenu ); 457 popup->insertItem( tr("Text Completion"), subMenu );
458 458
459 subMenu->insertItem( tr("None"), NoCompletion ); 459 subMenu->insertItem( tr("None"), NoCompletion );
460 subMenu->insertItem( tr("Manual"), ShellCompletion ); 460 subMenu->insertItem( tr("Manual"), ShellCompletion );
461 subMenu->insertItem( tr("Automatic"), AutoCompletion ); 461 subMenu->insertItem( tr("Automatic"), AutoCompletion );
462 subMenu->insertItem( tr("Dropdown List"), PopupCompletion ); 462 subMenu->insertItem( tr("Dropdown List"), PopupCompletion );
463 subMenu->insertItem( tr("Short Automatic"), SemiAutoCompletion ); 463 subMenu->insertItem( tr("Short Automatic"), SemiAutoCompletion );
464 464
465 //subMenu->setAccel( KStdAccel::completion(), ShellCompletion ); 465 //subMenu->setAccel( KStdAccel::completion(), ShellCompletion );
466 subMenu->setAccel( Key_Tab, ShellCompletion ); 466 subMenu->setAccel( Key_Tab, ShellCompletion );
467 467
468 OGlobalSettings::Completion mode = completionMode(); 468 OGlobalSettings::Completion mode = completionMode();
469 subMenu->setItemChecked( NoCompletion, 469 subMenu->setItemChecked( NoCompletion,
470 mode == OGlobalSettings::CompletionNone ); 470 mode == OGlobalSettings::CompletionNone );
471 subMenu->setItemChecked( ShellCompletion, 471 subMenu->setItemChecked( ShellCompletion,
472 mode == OGlobalSettings::CompletionShell ); 472 mode == OGlobalSettings::CompletionShell );
473 subMenu->setItemChecked( PopupCompletion, 473 subMenu->setItemChecked( PopupCompletion,
474 mode == OGlobalSettings::CompletionPopup ); 474 mode == OGlobalSettings::CompletionPopup );
475 subMenu->setItemChecked( AutoCompletion, 475 subMenu->setItemChecked( AutoCompletion,
476 mode == OGlobalSettings::CompletionAuto ); 476 mode == OGlobalSettings::CompletionAuto );
477 subMenu->setItemChecked( SemiAutoCompletion, 477 subMenu->setItemChecked( SemiAutoCompletion,
478 mode == OGlobalSettings::CompletionMan ); 478 mode == OGlobalSettings::CompletionMan );
479 if ( mode != OGlobalSettings::completionMode() ) 479 if ( mode != OGlobalSettings::completionMode() )
480 { 480 {
481 subMenu->insertSeparator(); 481 subMenu->insertSeparator();
482 subMenu->insertItem( tr("Default"), Default ); 482 subMenu->insertItem( tr("Default"), Default );
483 } 483 }
484 } 484 }
485 // ### do we really need this? Yes, Please do not remove! This 485 // ### do we really need this? Yes, Please do not remove! This
486 // allows applications to extend the popup menu without having to 486 // allows applications to extend the popup menu without having to
487 // inherit from this class! (DA) 487 // inherit from this class! (DA)
488 emit aboutToShowContextMenu( popup ); 488 emit aboutToShowContextMenu( popup );
489 489
490 return popup; 490 return popup;
491} 491}
492 492
493void OLineEdit::completionMenuActivated( int id ) 493void OLineEdit::completionMenuActivated( int id )
494{ 494{
495 OGlobalSettings::Completion oldMode = completionMode(); 495 OGlobalSettings::Completion oldMode = completionMode();
496 496
497 switch ( id ) 497 switch ( id )
498 { 498 {
499 case Default: 499 case Default:
500 setCompletionMode( OGlobalSettings::completionMode() ); break; 500 setCompletionMode( OGlobalSettings::completionMode() ); break;
501 case NoCompletion: 501 case NoCompletion:
502 setCompletionMode( OGlobalSettings::CompletionNone ); break; 502 setCompletionMode( OGlobalSettings::CompletionNone ); break;
503 case AutoCompletion: 503 case AutoCompletion:
504 setCompletionMode( OGlobalSettings::CompletionAuto ); break; 504 setCompletionMode( OGlobalSettings::CompletionAuto ); break;
505 case SemiAutoCompletion: 505 case SemiAutoCompletion:
506 setCompletionMode( OGlobalSettings::CompletionMan ); break; 506 setCompletionMode( OGlobalSettings::CompletionMan ); break;
507 case ShellCompletion: 507 case ShellCompletion:
508 setCompletionMode( OGlobalSettings::CompletionShell ); break; 508 setCompletionMode( OGlobalSettings::CompletionShell ); break;
509 case PopupCompletion: 509 case PopupCompletion:
510 setCompletionMode( OGlobalSettings::CompletionPopup ); break; 510 setCompletionMode( OGlobalSettings::CompletionPopup ); break;
511 default: return; 511 default: return;
512 } 512 }
513 513
514 if ( oldMode != completionMode() ) 514 if ( oldMode != completionMode() )
515 { 515 {
516 if ( oldMode == OGlobalSettings::CompletionPopup && 516 if ( oldMode == OGlobalSettings::CompletionPopup &&
517 d->completionBox && d->completionBox->isVisible() ) 517 d->completionBox && d->completionBox->isVisible() )
518 d->completionBox->hide(); 518 d->completionBox->hide();
519 emit completionModeChanged( completionMode() ); 519 emit completionModeChanged( completionMode() );
520 } 520 }
521} 521}
522 522
523/*void OLineEdit::dropEvent(QDropEvent *e) 523/*void OLineEdit::dropEvent(QDropEvent *e)
524{ 524{
525 KURL::List urlList; 525 KURL::List urlList;
526 if( d->handleURLDrops && KURLDrag::decode( e, urlList ) ) 526 if( d->handleURLDrops && KURLDrag::decode( e, urlList ) )
527 { 527 {
528 QString dropText = text(); 528 QString dropText = text();
529 KURL::List::ConstIterator it; 529 KURL::List::ConstIterator it;
530 for( it = urlList.begin() ; it != urlList.end() ; ++it ) 530 for( it = urlList.begin() ; it != urlList.end() ; ++it )
531 { 531 {
532 if(!dropText.isEmpty()) 532 if(!dropText.isEmpty())
533 dropText+=' '; 533 dropText+=' ';
534 534
535 dropText += (*it).prettyURL(); 535 dropText += (*it).prettyURL();
536 } 536 }
537 537
538 validateAndSet( dropText, dropText.length(), 0, 0); 538 validateAndSet( dropText, dropText.length(), 0, 0);
539 539
540 e->accept(); 540 e->accept();
541 } 541 }
542 else 542 else
543 QLineEdit::dropEvent(e); 543 QLineEdit::dropEvent(e);
544}*/ 544}*/
545 545
546bool OLineEdit::eventFilter( QObject* o, QEvent* ev ) 546bool OLineEdit::eventFilter( QObject* o, QEvent* ev )
547{ 547{
548 if( o == this ) 548 if( o == this )
549 { 549 {
550 //OCursor::autoHideEventFilter( this, ev ); 550 //OCursor::autoHideEventFilter( this, ev );
551 if ( ev->type() == QEvent::AccelOverride ) 551 if ( ev->type() == QEvent::AccelOverride )
552 { 552 {
553 QKeyEvent *e = static_cast<QKeyEvent *>( ev ); 553 QKeyEvent *e = static_cast<QKeyEvent *>( ev );
554 // if (overrideAccel (e)) 554 // if (overrideAccel (e))
555 // { 555 // {
556 // e->accept(); 556 // e->accept();
557 // return true; 557 // return true;
558 // } 558 // }
559 } 559 }
560 else if( ev->type() == QEvent::KeyPress ) 560 else if( ev->type() == QEvent::KeyPress )
561 { 561 {
562 QKeyEvent *e = static_cast<QKeyEvent *>( ev ); 562 QKeyEvent *e = static_cast<QKeyEvent *>( ev );
563 563
564 if( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) 564 if( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter )
565 { 565 {
566 bool trap = d->completionBox && d->completionBox->isVisible(); 566 bool trap = d->completionBox && d->completionBox->isVisible();
567 567
568 // Qt will emit returnPressed() itself if we return false 568 // Qt will emit returnPressed() itself if we return false
569 if ( d->grabReturnKeyEvents || trap ) 569 if ( d->grabReturnKeyEvents || trap )
570 emit QLineEdit::returnPressed(); 570 emit QLineEdit::returnPressed();
571 571
572 emit returnPressed( displayText() ); 572 emit returnPressed( displayText() );
573 573
574 if ( trap ) 574 if ( trap )
575 d->completionBox->hide(); 575 d->completionBox->hide();
576 576
577 // Eat the event if the user asked for it, or if a completionbox was visible 577 // Eat the event if the user asked for it, or if a completionbox was visible
578 return d->grabReturnKeyEvents || trap; 578 return d->grabReturnKeyEvents || trap;
579 } 579 }
580 } 580 }
581 } 581 }
582 return QLineEdit::eventFilter( o, ev ); 582 return QLineEdit::eventFilter( o, ev );
583} 583}
584 584
585 585
586void OLineEdit::setURLDropsEnabled(bool enable) 586void OLineEdit::setURLDropsEnabled(bool enable)
587{ 587{
588 d->handleURLDrops=enable; 588 d->handleURLDrops=enable;
589} 589}
590 590
591bool OLineEdit::isURLDropsEnabled() const 591bool OLineEdit::isURLDropsEnabled() const
592{ 592{
593 return d->handleURLDrops; 593 return d->handleURLDrops;
594} 594}
595 595
596void OLineEdit::setTrapReturnKey( bool grab ) 596void OLineEdit::setTrapReturnKey( bool grab )
597{ 597{
598 d->grabReturnKeyEvents = grab; 598 d->grabReturnKeyEvents = grab;
599} 599}
600 600
601bool OLineEdit::trapReturnKey() const 601bool OLineEdit::trapReturnKey() const
602{ 602{
603 return d->grabReturnKeyEvents; 603 return d->grabReturnKeyEvents;
604} 604}
605 605
606/*void OLineEdit::setURL( const KURL& url ) 606/*void OLineEdit::setURL( const KURL& url )
607{ 607{
608 QLineEdit::setText( url.prettyURL() ); 608 QLineEdit::setText( url.prettyURL() );
609}*/ 609}*/
610 610
611void OLineEdit::makeCompletionBox() 611void OLineEdit::makeCompletionBox()
612{ 612{
613 if ( d->completionBox ) 613 if ( d->completionBox )
614 return; 614 return;
615 615
616 d->completionBox = new OCompletionBox( this, "completion box" ); 616 d->completionBox = new OCompletionBox( this, "completion box" );
617 if ( handleSignals() ) 617 if ( handleSignals() )
618 { 618 {
619 connect( d->completionBox, SIGNAL(highlighted(const QString&)), 619 connect( d->completionBox, SIGNAL(highlighted(const QString&)),
620 SLOT(setText(const QString&)) ); 620 SLOT(setText(const QString&)) );
621 connect( d->completionBox, SIGNAL(userCancelled(const QString&)), 621 connect( d->completionBox, SIGNAL(userCancelled(const QString&)),
622 SLOT(setText(const QString&)) ); 622 SLOT(setText(const QString&)) );
623 623
624 // Nice lil' hacklet ;) KComboBox doesn't know when the completionbox 624 // Nice lil' hacklet ;) KComboBox doesn't know when the completionbox
625 // is created (childEvent() is even more hacky, IMHO), so we simply 625 // is created (childEvent() is even more hacky, IMHO), so we simply
626 // forward the completionbox' activated signal from here. 626 // forward the completionbox' activated signal from here.
627 if ( parentWidget() && parentWidget()->inherits("KComboBox") ) 627 if ( parentWidget() && parentWidget()->inherits("KComboBox") )
628 connect( d->completionBox, SIGNAL( activated(const QString&)), 628 connect( d->completionBox, SIGNAL( activated(const QString&)),
629 parentWidget(), SIGNAL( activated(const QString&))); 629 parentWidget(), SIGNAL( activated(const QString&)));
630 } 630 }
631} 631}
632 632
633/*bool OLineEdit::overrideAccel (const QKeyEvent* e) 633/*bool OLineEdit::overrideAccel (const QKeyEvent* e)
634{ 634{
635 KShortcut scKey; 635 KShortcut scKey;
636 636
637 KKey key( e ); 637 KKey key( e );
638 KeyBindingMap keys = getKeyBindings(); 638 KeyBindingMap keys = getKeyBindings();
639 639
640 if (keys[TextCompletion].isNull()) 640 if (keys[TextCompletion].isNull())
641 scKey = KStdAccel::shortcut(KStdAccel::TextCompletion); 641 scKey = KStdAccel::shortcut(KStdAccel::TextCompletion);
642 else 642 else
643 scKey = keys[TextCompletion]; 643 scKey = keys[TextCompletion];
644 644
645 if (scKey.contains( key )) 645 if (scKey.contains( key ))
646 return true; 646 return true;
647 647
648 if (keys[NextCompletionMatch].isNull()) 648 if (keys[NextCompletionMatch].isNull())
649 scKey = KStdAccel::shortcut(KStdAccel::NextCompletion); 649 scKey = KStdAccel::shortcut(KStdAccel::NextCompletion);
650 else 650 else
651 scKey = keys[NextCompletionMatch]; 651 scKey = keys[NextCompletionMatch];
652 652
653 if (scKey.contains( key )) 653 if (scKey.contains( key ))
654 return true; 654 return true;
655 655
656 if (keys[PrevCompletionMatch].isNull()) 656 if (keys[PrevCompletionMatch].isNull())
657 scKey = KStdAccel::shortcut(KStdAccel::PrevCompletion); 657 scKey = KStdAccel::shortcut(KStdAccel::PrevCompletion);
658 else 658 else
659 scKey = keys[PrevCompletionMatch]; 659 scKey = keys[PrevCompletionMatch];
660 660
661 if (scKey.contains( key )) 661 if (scKey.contains( key ))
662 return true; 662 return true;
663 663
664 if (KStdAccel::deleteWordBack().contains( key )) 664 if (KStdAccel::deleteWordBack().contains( key ))
665 return true; 665 return true;
666 if (KStdAccel::deleteWordForward().contains( key )) 666 if (KStdAccel::deleteWordForward().contains( key ))
667 return true; 667 return true;
668 668
669 if (d->completionBox && d->completionBox->isVisible ()) 669 if (d->completionBox && d->completionBox->isVisible ())
670 if (e->key () == Key_Backtab) 670 if (e->key () == Key_Backtab)
671 return true; 671 return true;
672 672
673 return false; 673 return false;
674}*/ 674}*/
675 675
676void OLineEdit::setCompletedItems( const QStringList& items ) 676void OLineEdit::setCompletedItems( const QStringList& items )
677{ 677{
678 QString txt = text(); 678 QString txt = text();
679 if ( !items.isEmpty() && 679 if ( !items.isEmpty() &&
680 !(items.count() == 1 && txt == items.first()) ) 680 !(items.count() == 1 && txt == items.first()) )
681 { 681 {
682 if ( !d->completionBox ) 682 if ( !d->completionBox )
683 makeCompletionBox(); 683 makeCompletionBox();
684 684
685 if ( !txt.isEmpty() ) 685 if ( !txt.isEmpty() )
686 d->completionBox->setCancelledText( txt ); 686 d->completionBox->setCancelledText( txt );
687 d->completionBox->setItems( items ); 687 d->completionBox->setItems( items );
688 d->completionBox->popup(); 688 d->completionBox->popup();
689 } 689 }
690 else 690 else
691 { 691 {
692 if ( d->completionBox && d->completionBox->isVisible() ) 692 if ( d->completionBox && d->completionBox->isVisible() )
693 d->completionBox->hide(); 693 d->completionBox->hide();
694 } 694 }
695} 695}
696 696
697OCompletionBox * OLineEdit::completionBox( bool create ) 697OCompletionBox * OLineEdit::completionBox( bool create )
698{ 698{
699 if ( create ) 699 if ( create )
700 makeCompletionBox(); 700 makeCompletionBox();
701 701
702 return d->completionBox; 702 return d->completionBox;
703} 703}
704 704
705void OLineEdit::setCompletionObject( OCompletion* comp, bool hsig ) 705void OLineEdit::setCompletionObject( OCompletion* comp, bool hsig )
706{ 706{
707 OCompletion *oldComp = compObj(); 707 OCompletion *oldComp = compObj();
708 if ( oldComp && handleSignals() ) 708 if ( oldComp && handleSignals() )
709 disconnect( oldComp, SIGNAL( matches(const QStringList&)), 709 disconnect( oldComp, SIGNAL( matches(const QStringList&)),
710 this, SLOT( setCompletedItems(const QStringList&))); 710 this, SLOT( setCompletedItems(const QStringList&)));
711 711
712 if ( comp && hsig ) 712 if ( comp && hsig )
713 connect( comp, SIGNAL( matches(const QStringList&)), 713 connect( comp, SIGNAL( matches(const QStringList&)),
714 this, SLOT( setCompletedItems(const QStringList&))); 714 this, SLOT( setCompletedItems(const QStringList&)));
715 715
716 OCompletionBase::setCompletionObject( comp, hsig ); 716 OCompletionBase::setCompletionObject( comp, hsig );
717} 717}
718 718
719// QWidget::create() turns off mouse-Tracking which would break auto-hiding 719// QWidget::create() turns off mouse-Tracking which would break auto-hiding
720void OLineEdit::create( WId id, bool initializeWindow, bool destroyOldWindow ) 720void OLineEdit::create( WId id, bool initializeWindow, bool destroyOldWindow )
721{ 721{
722 QLineEdit::create( id, initializeWindow, destroyOldWindow ); 722 QLineEdit::create( id, initializeWindow, destroyOldWindow );
723 //OCursor::setAutoHideCursor( this, true, true ); 723 //OCursor::setAutoHideCursor( this, true, true );
724} 724}
725 725
726void OLineEdit::clear() 726void OLineEdit::clear()
727{ 727{
728 setText( QString::null ); 728 setText( QString::null );
729} 729}