-rw-r--r-- | libopie2/qt3/opieui/ocombobox.cpp | 5 | ||||
-rw-r--r-- | libopie2/qt3/opieui/oeditlistbox.cpp | 5 |
2 files changed, 7 insertions, 3 deletions
diff --git a/libopie2/qt3/opieui/ocombobox.cpp b/libopie2/qt3/opieui/ocombobox.cpp index a1dd5f5..8dbda8f 100644 --- a/libopie2/qt3/opieui/ocombobox.cpp +++ b/libopie2/qt3/opieui/ocombobox.cpp | |||
@@ -1,666 +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 | ||
50 | class OComboBox::OComboBoxPrivate | 50 | class OComboBox::OComboBoxPrivate |
51 | { | 51 | { |
52 | public: | 52 | public: |
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 | ||
68 | OComboBox::OComboBox( QWidget *parent, const char *name ) | 68 | OComboBox::OComboBox( QWidget *parent, const char *name ) |
69 | : QComboBox( parent, name ) | 69 | : QComboBox( parent, name ) |
70 | { | 70 | { |
71 | init(); | 71 | init(); |
72 | } | 72 | } |
73 | 73 | ||
74 | OComboBox::OComboBox( bool rw, QWidget *parent, const char *name ) | 74 | OComboBox::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 | ||
86 | OComboBox::~OComboBox() | 86 | OComboBox::~OComboBox() |
87 | { | 87 | { |
88 | delete d; | 88 | delete d; |
89 | } | 89 | } |
90 | 90 | ||
91 | void OComboBox::init() | 91 | void 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 | ||
116 | bool OComboBox::contains( const QString& _text ) const | 116 | bool 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 | ||
128 | void OComboBox::setAutoCompletion( bool autocomplete ) | 128 | void 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 | ||
145 | void OComboBox::setContextMenuEnabled( bool showMenu ) | 145 | void 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 | /* |
155 | void OComboBox::setURLDropsEnabled( bool enable ) | 155 | void 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 | ||
161 | bool OComboBox::isURLDropsEnabled() const | 161 | bool 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 | ||
167 | void OComboBox::setCompletedText( const QString& text, bool marked ) | 167 | void 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 | ||
173 | void OComboBox::setCompletedText( const QString& text ) | 173 | void 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 | ||
179 | void OComboBox::makeCompletion( const QString& text ) | 179 | void 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 | ||
196 | void OComboBox::rotateText( OCompletionBase::KeyBindingType type ) | 196 | void 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 | ||
202 | bool OComboBox::eventFilter( QObject* o, QEvent* ev ) | 202 | bool 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 | ||
260 | void OComboBox::setTrapReturnKey( bool grab ) | 260 | void OComboBox::setTrapReturnKey( bool grab ) |
261 | { | 261 | { |
262 | m_trapReturnKey = grab; | 262 | m_trapReturnKey = grab; |
263 | } | 263 | } |
264 | 264 | ||
265 | bool OComboBox::trapReturnKey() const | 265 | bool OComboBox::trapReturnKey() const |
266 | { | 266 | { |
267 | return m_trapReturnKey; | 267 | return m_trapReturnKey; |
268 | } | 268 | } |
269 | 269 | ||
270 | /* | 270 | /* |
271 | void OComboBox::setEditURL( const OURL& url ) | 271 | void OComboBox::setEditURL( const OURL& url ) |
272 | { | 272 | { |
273 | QComboBox::setEditText( url.prettyURL() ); | 273 | QComboBox::setEditText( url.prettyURL() ); |
274 | } | 274 | } |
275 | 275 | ||
276 | void OComboBox::insertURL( const OURL& url, int index ) | 276 | void 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 | ||
281 | void OComboBox::insertURL( const QPixmap& pixmap, const OURL& url, int index ) | 281 | void 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 | ||
286 | void OComboBox::changeURL( const OURL& url, int index ) | 286 | void 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 | ||
291 | void OComboBox::changeURL( const QPixmap& pixmap, const OURL& url, int index ) | 291 | void 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 | ||
298 | void OComboBox::setCompletedItems( const QStringList& items ) | 298 | void 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 | ||
305 | OCompletionBox * OComboBox::completionBox( bool create ) | 305 | OCompletionBox * 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 |
313 | void OComboBox::create( WId id, bool initializeWindow, bool destroyOldWindow ) | 313 | void 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 | ||
319 | void OComboBox::setLineEdit( OLineEdit *edit ) | 319 | void OComboBox::setLineEdit( OLineEdit *edit ) |
320 | { | 320 | { |
321 | #if QT_VERSION > 290 | 321 | #if QT_VERSION > 290 |
322 | QComboBox::setLineEdit( edit ); | 322 | QComboBox::setLineEdit( edit ); |
323 | d->olineEdit = dynamic_cast<OLineEdit*>( edit ); | 323 | if ( !edit->inherits( "OLineEdit" ) ) |
324 | d->olineEdit = 0; | ||
325 | else | ||
326 | d->olineEdit = static_cast<OLineEdit*>( edit ); | ||
324 | setDelegate( d->olineEdit ); | 327 | setDelegate( d->olineEdit ); |
325 | 328 | ||
326 | // forward some signals. We only emit returnPressed() ourselves. | 329 | // forward some signals. We only emit returnPressed() ourselves. |
327 | if ( d->olineEdit ) { | 330 | if ( d->olineEdit ) { |
328 | connect( d->olineEdit, SIGNAL( completion( const QString& )), | 331 | connect( d->olineEdit, SIGNAL( completion( const QString& )), |
329 | SIGNAL( completion( const QString& )) ); | 332 | SIGNAL( completion( const QString& )) ); |
330 | connect( d->olineEdit, SIGNAL( substringCompletion( const QString& )), | 333 | connect( d->olineEdit, SIGNAL( substringCompletion( const QString& )), |
331 | SIGNAL( substringCompletion( const QString& )) ); | 334 | SIGNAL( substringCompletion( const QString& )) ); |
332 | connect( d->olineEdit, | 335 | connect( d->olineEdit, |
333 | SIGNAL( textRotation( OCompletionBase::KeyBindingType )), | 336 | SIGNAL( textRotation( OCompletionBase::KeyBindingType )), |
334 | SIGNAL( textRotation( OCompletionBase::KeyBindingType )) ); | 337 | SIGNAL( textRotation( OCompletionBase::KeyBindingType )) ); |
335 | connect( d->olineEdit, | 338 | connect( d->olineEdit, |
336 | SIGNAL( completionModeChanged( OGlobalSettings::Completion )), | 339 | SIGNAL( completionModeChanged( OGlobalSettings::Completion )), |
337 | SIGNAL( completionModeChanged( OGlobalSettings::Completion))); | 340 | SIGNAL( completionModeChanged( OGlobalSettings::Completion))); |
338 | 341 | ||
339 | connect( d->olineEdit, | 342 | connect( d->olineEdit, |
340 | SIGNAL( aboutToShowContextMenu( QPopupMenu * )), | 343 | SIGNAL( aboutToShowContextMenu( QPopupMenu * )), |
341 | SIGNAL( aboutToShowContextMenu( QPopupMenu * )) ); | 344 | SIGNAL( aboutToShowContextMenu( QPopupMenu * )) ); |
342 | } | 345 | } |
343 | #else | 346 | #else |
344 | #warning OComboBox is not fully functional with Qt2 | 347 | #warning OComboBox is not fully functional with Qt2 |
345 | #endif | 348 | #endif |
346 | } | 349 | } |
347 | 350 | ||
348 | // Temporary functions until QT3 appears. - Seth Chaiklin 20 may 2001 | 351 | // Temporary functions until QT3 appears. - Seth Chaiklin 20 may 2001 |
349 | void OComboBox::deleteWordForward() | 352 | void OComboBox::deleteWordForward() |
350 | { | 353 | { |
351 | lineEdit()->cursorWordForward(TRUE); | 354 | lineEdit()->cursorWordForward(TRUE); |
352 | #if QT_VERSION > 290 | 355 | #if QT_VERSION > 290 |
353 | if ( lineEdit()->hasSelectedText() ) | 356 | if ( lineEdit()->hasSelectedText() ) |
354 | #else | 357 | #else |
355 | if ( lineEdit()->hasMarkedText() ) | 358 | if ( lineEdit()->hasMarkedText() ) |
356 | #endif | 359 | #endif |
357 | { | 360 | { |
358 | lineEdit()->del(); | 361 | lineEdit()->del(); |
359 | } | 362 | } |
360 | } | 363 | } |
361 | 364 | ||
362 | void OComboBox::deleteWordBack() | 365 | void OComboBox::deleteWordBack() |
363 | { | 366 | { |
364 | lineEdit()->cursorWordBackward(TRUE); | 367 | lineEdit()->cursorWordBackward(TRUE); |
365 | #if QT_VERSION > 290 | 368 | #if QT_VERSION > 290 |
366 | if ( lineEdit()->hasSelectedText() ) | 369 | if ( lineEdit()->hasSelectedText() ) |
367 | #else | 370 | #else |
368 | if ( lineEdit()->hasMarkedText() ) | 371 | if ( lineEdit()->hasMarkedText() ) |
369 | #endif | 372 | #endif |
370 | { | 373 | { |
371 | lineEdit()->del(); | 374 | lineEdit()->del(); |
372 | } | 375 | } |
373 | } | 376 | } |
374 | 377 | ||
375 | void OComboBox::setCurrentItem( const QString& item, bool insert, int index ) | 378 | void OComboBox::setCurrentItem( const QString& item, bool insert, int index ) |
376 | { | 379 | { |
377 | int sel = -1; | 380 | int sel = -1; |
378 | for (int i = 0; i < count(); ++i) | 381 | for (int i = 0; i < count(); ++i) |
379 | if (text(i) == item) | 382 | if (text(i) == item) |
380 | { | 383 | { |
381 | sel = i; | 384 | sel = i; |
382 | break; | 385 | break; |
383 | } | 386 | } |
384 | if (sel == -1 && insert) | 387 | if (sel == -1 && insert) |
385 | { | 388 | { |
386 | insertItem(item, index); | 389 | insertItem(item, index); |
387 | if (index >= 0) | 390 | if (index >= 0) |
388 | sel = index; | 391 | sel = index; |
389 | else | 392 | else |
390 | sel = count() - 1; | 393 | sel = count() - 1; |
391 | } | 394 | } |
392 | setCurrentItem(sel); | 395 | setCurrentItem(sel); |
393 | } | 396 | } |
394 | 397 | ||
395 | void OComboBox::setCurrentItem(int index) | 398 | void OComboBox::setCurrentItem(int index) |
396 | { | 399 | { |
397 | QComboBox::setCurrentItem(index); | 400 | QComboBox::setCurrentItem(index); |
398 | } | 401 | } |
399 | 402 | ||
400 | 403 | ||
401 | /*====================================================================================== | 404 | /*====================================================================================== |
402 | * OHistoryCombo | 405 | * OHistoryCombo |
403 | *======================================================================================*/ | 406 | *======================================================================================*/ |
404 | 407 | ||
405 | // we are always read-write | 408 | // we are always read-write |
406 | OHistoryCombo::OHistoryCombo( QWidget *parent, const char *name ) | 409 | OHistoryCombo::OHistoryCombo( QWidget *parent, const char *name ) |
407 | : OComboBox( true, parent, name ) | 410 | : OComboBox( true, parent, name ) |
408 | { | 411 | { |
409 | init( true ); // using completion | 412 | init( true ); // using completion |
410 | } | 413 | } |
411 | 414 | ||
412 | // we are always read-write | 415 | // we are always read-write |
413 | OHistoryCombo::OHistoryCombo( bool useCompletion, | 416 | OHistoryCombo::OHistoryCombo( bool useCompletion, |
414 | QWidget *parent, const char *name ) | 417 | QWidget *parent, const char *name ) |
415 | : OComboBox( true, parent, name ) | 418 | : OComboBox( true, parent, name ) |
416 | { | 419 | { |
417 | init( useCompletion ); | 420 | init( useCompletion ); |
418 | } | 421 | } |
419 | 422 | ||
420 | void OHistoryCombo::init( bool useCompletion ) | 423 | void OHistoryCombo::init( bool useCompletion ) |
421 | { | 424 | { |
422 | if ( useCompletion ) | 425 | if ( useCompletion ) |
423 | completionObject()->setOrder( OCompletion::Weighted ); | 426 | completionObject()->setOrder( OCompletion::Weighted ); |
424 | 427 | ||
425 | setInsertionPolicy( NoInsertion ); | 428 | setInsertionPolicy( NoInsertion ); |
426 | myIterateIndex = -1; | 429 | myIterateIndex = -1; |
427 | myRotated = false; | 430 | myRotated = false; |
428 | myPixProvider = 0L; | 431 | myPixProvider = 0L; |
429 | 432 | ||
430 | connect( this, SIGNAL(aboutToShowContextMenu(QPopupMenu*)), | 433 | connect( this, SIGNAL(aboutToShowContextMenu(QPopupMenu*)), |
431 | SLOT(addContextMenuItems(QPopupMenu*)) ); | 434 | SLOT(addContextMenuItems(QPopupMenu*)) ); |
432 | connect( this, SIGNAL( activated(int) ), SLOT( slotReset() )); | 435 | connect( this, SIGNAL( activated(int) ), SLOT( slotReset() )); |
433 | connect( this, SIGNAL( returnPressed(const QString&) ), SLOT(slotReset())); | 436 | connect( this, SIGNAL( returnPressed(const QString&) ), SLOT(slotReset())); |
434 | } | 437 | } |
435 | 438 | ||
436 | OHistoryCombo::~OHistoryCombo() | 439 | OHistoryCombo::~OHistoryCombo() |
437 | { | 440 | { |
438 | delete myPixProvider; | 441 | delete myPixProvider; |
439 | } | 442 | } |
440 | 443 | ||
441 | void OHistoryCombo::setHistoryItems( QStringList items, | 444 | void OHistoryCombo::setHistoryItems( QStringList items, |
442 | bool setCompletionList ) | 445 | bool setCompletionList ) |
443 | { | 446 | { |
444 | OComboBox::clear(); | 447 | OComboBox::clear(); |
445 | 448 | ||
446 | // limit to maxCount() | 449 | // limit to maxCount() |
447 | while ( (int) items.count() > maxCount() && !items.isEmpty() ) | 450 | while ( (int) items.count() > maxCount() && !items.isEmpty() ) |
448 | items.remove( items.begin() ); | 451 | items.remove( items.begin() ); |
449 | 452 | ||
450 | insertItems( items ); | 453 | insertItems( items ); |
451 | 454 | ||
452 | if ( setCompletionList && useCompletion() ) { | 455 | if ( setCompletionList && useCompletion() ) { |
453 | // we don't have any weighting information here ;( | 456 | // we don't have any weighting information here ;( |
454 | OCompletion *comp = completionObject(); | 457 | OCompletion *comp = completionObject(); |
455 | comp->setOrder( OCompletion::Insertion ); | 458 | comp->setOrder( OCompletion::Insertion ); |
456 | comp->setItems( items ); | 459 | comp->setItems( items ); |
457 | comp->setOrder( OCompletion::Weighted ); | 460 | comp->setOrder( OCompletion::Weighted ); |
458 | } | 461 | } |
459 | 462 | ||
460 | clearEdit(); | 463 | clearEdit(); |
461 | } | 464 | } |
462 | 465 | ||
463 | QStringList OHistoryCombo::historyItems() const | 466 | QStringList OHistoryCombo::historyItems() const |
464 | { | 467 | { |
465 | QStringList list; | 468 | QStringList list; |
466 | for ( int i = 0; i < count(); i++ ) | 469 | for ( int i = 0; i < count(); i++ ) |
467 | list.append( text( i ) ); | 470 | list.append( text( i ) ); |
468 | 471 | ||
469 | return list; | 472 | return list; |
470 | } | 473 | } |
471 | 474 | ||
472 | void OHistoryCombo::clearHistory() | 475 | void OHistoryCombo::clearHistory() |
473 | { | 476 | { |
474 | OComboBox::clear(); | 477 | OComboBox::clear(); |
475 | if ( useCompletion() ) | 478 | if ( useCompletion() ) |
476 | completionObject()->clear(); | 479 | completionObject()->clear(); |
477 | } | 480 | } |
478 | 481 | ||
479 | void OHistoryCombo::addContextMenuItems( QPopupMenu* menu ) | 482 | void OHistoryCombo::addContextMenuItems( QPopupMenu* menu ) |
480 | { | 483 | { |
481 | if ( menu &&!lineEdit()->text().isEmpty()) | 484 | if ( menu &&!lineEdit()->text().isEmpty()) |
482 | { | 485 | { |
483 | menu->insertSeparator(); | 486 | menu->insertSeparator(); |
484 | menu->insertItem( tr("Empty Contents"), this, SLOT( slotClear())); | 487 | menu->insertItem( tr("Empty Contents"), this, SLOT( slotClear())); |
485 | } | 488 | } |
486 | } | 489 | } |
487 | 490 | ||
488 | void OHistoryCombo::addToHistory( const QString& item ) | 491 | void OHistoryCombo::addToHistory( const QString& item ) |
489 | { | 492 | { |
490 | if ( item.isEmpty() || (count() > 0 && item == text(0) )) | 493 | if ( item.isEmpty() || (count() > 0 && item == text(0) )) |
491 | return; | 494 | return; |
492 | 495 | ||
493 | // remove all existing items before adding | 496 | // remove all existing items before adding |
494 | if ( !duplicatesEnabled() ) { | 497 | if ( !duplicatesEnabled() ) { |
495 | for ( int i = 0; i < count(); i++ ) { | 498 | for ( int i = 0; i < count(); i++ ) { |
496 | if ( text( i ) == item ) | 499 | if ( text( i ) == item ) |
497 | removeItem( i ); | 500 | removeItem( i ); |
498 | } | 501 | } |
499 | } | 502 | } |
500 | 503 | ||
501 | // now add the item | 504 | // now add the item |
502 | if ( myPixProvider ) | 505 | if ( myPixProvider ) |
503 | //insertItem( myPixProvider->pixmapFor(item, KIcon::SizeSmall), item, 0); | 506 | //insertItem( myPixProvider->pixmapFor(item, KIcon::SizeSmall), item, 0); |
504 | insertItem( myPixProvider->pixmapFor(item, 16), item, 0); | 507 | insertItem( myPixProvider->pixmapFor(item, 16), item, 0); |
505 | else | 508 | else |
506 | insertItem( item, 0 ); | 509 | insertItem( item, 0 ); |
507 | 510 | ||
508 | int last; | 511 | int last; |
509 | QString rmItem; | 512 | QString rmItem; |
510 | 513 | ||
511 | bool useComp = useCompletion(); | 514 | bool useComp = useCompletion(); |
512 | while ( count() > maxCount() && count() > 0 ) { | 515 | while ( count() > maxCount() && count() > 0 ) { |
513 | // 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() |
514 | // remove the removed item from the completionObject if it isn't | 517 | // remove the removed item from the completionObject if it isn't |
515 | // anymore available at all in the combobox. | 518 | // anymore available at all in the combobox. |
516 | last = count() - 1; | 519 | last = count() - 1; |
517 | rmItem = text( last ); | 520 | rmItem = text( last ); |
518 | removeItem( last ); | 521 | removeItem( last ); |
519 | if ( useComp && !contains( rmItem ) ) | 522 | if ( useComp && !contains( rmItem ) ) |
520 | completionObject()->removeItem( rmItem ); | 523 | completionObject()->removeItem( rmItem ); |
521 | } | 524 | } |
522 | 525 | ||
523 | if ( useComp ) | 526 | if ( useComp ) |
524 | completionObject()->addItem( item ); | 527 | completionObject()->addItem( item ); |
525 | } | 528 | } |
526 | 529 | ||
527 | bool OHistoryCombo::removeFromHistory( const QString& item ) | 530 | bool OHistoryCombo::removeFromHistory( const QString& item ) |
528 | { | 531 | { |
529 | if ( item.isEmpty() ) | 532 | if ( item.isEmpty() ) |
530 | return false; | 533 | return false; |
531 | 534 | ||
532 | bool removed = false; | 535 | bool removed = false; |
533 | QString temp = currentText(); | 536 | QString temp = currentText(); |
534 | for ( int i = 0; i < count(); i++ ) { | 537 | for ( int i = 0; i < count(); i++ ) { |
535 | while ( item == text( i ) ) { | 538 | while ( item == text( i ) ) { |
536 | removed = true; | 539 | removed = true; |
537 | removeItem( i ); | 540 | removeItem( i ); |
538 | } | 541 | } |
539 | } | 542 | } |
540 | 543 | ||
541 | if ( removed && useCompletion() ) | 544 | if ( removed && useCompletion() ) |
542 | completionObject()->removeItem( item ); | 545 | completionObject()->removeItem( item ); |
543 | 546 | ||
544 | setEditText( temp ); | 547 | setEditText( temp ); |
545 | return removed; | 548 | return removed; |
546 | } | 549 | } |
547 | 550 | ||
548 | void OHistoryCombo::keyPressEvent( QKeyEvent *e ) | 551 | void OHistoryCombo::keyPressEvent( QKeyEvent *e ) |
549 | { | 552 | { |
550 | // save the current text in the lineedit | 553 | // save the current text in the lineedit |
551 | if ( myIterateIndex == -1 ) | 554 | if ( myIterateIndex == -1 ) |
552 | myText = currentText(); | 555 | myText = currentText(); |
553 | 556 | ||
554 | // going up in the history, rotating when reaching QListBox::count() | 557 | // going up in the history, rotating when reaching QListBox::count() |
555 | //if ( OStdAccel::isEqual( e, OStdAccel::rotateUp() ) ) { | 558 | //if ( OStdAccel::isEqual( e, OStdAccel::rotateUp() ) ) { |
556 | if ( e->key() == Qt::Key_Up ) { | 559 | if ( e->key() == Qt::Key_Up ) { |
557 | myIterateIndex++; | 560 | myIterateIndex++; |
558 | 561 | ||
559 | // skip duplicates/empty items | 562 | // skip duplicates/empty items |
560 | while ( myIterateIndex < count()-1 && | 563 | while ( myIterateIndex < count()-1 && |
561 | (currentText() == text( myIterateIndex ) || | 564 | (currentText() == text( myIterateIndex ) || |
562 | text( myIterateIndex ).isEmpty()) ) | 565 | text( myIterateIndex ).isEmpty()) ) |
563 | myIterateIndex++; | 566 | myIterateIndex++; |
564 | 567 | ||
565 | if ( myIterateIndex >= count() ) { | 568 | if ( myIterateIndex >= count() ) { |
566 | myRotated = true; | 569 | myRotated = true; |
567 | myIterateIndex = -1; | 570 | myIterateIndex = -1; |
568 | 571 | ||
569 | // 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 |
570 | if ( myText == text(0) ) | 573 | if ( myText == text(0) ) |
571 | myIterateIndex = 0; | 574 | myIterateIndex = 0; |
572 | 575 | ||
573 | setEditText( myText ); | 576 | setEditText( myText ); |
574 | } | 577 | } |
575 | else | 578 | else |
576 | setEditText( text( myIterateIndex )); | 579 | setEditText( text( myIterateIndex )); |
577 | } | 580 | } |
578 | 581 | ||
579 | 582 | ||
580 | // 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 |
581 | // the text that was in the lineedit before Up was called. | 584 | // the text that was in the lineedit before Up was called. |
582 | //else if ( OStdAccel::isEqual( e, OStdAccel::rotateDown() ) ) { | 585 | //else if ( OStdAccel::isEqual( e, OStdAccel::rotateDown() ) ) { |
583 | else if ( e->key() == Qt::Key_Down ) { | 586 | else if ( e->key() == Qt::Key_Down ) { |
584 | myIterateIndex--; | 587 | myIterateIndex--; |
585 | 588 | ||
586 | // skip duplicates/empty items | 589 | // skip duplicates/empty items |
587 | while ( myIterateIndex >= 0 && | 590 | while ( myIterateIndex >= 0 && |
588 | (currentText() == text( myIterateIndex ) || | 591 | (currentText() == text( myIterateIndex ) || |
589 | text( myIterateIndex ).isEmpty()) ) | 592 | text( myIterateIndex ).isEmpty()) ) |
590 | myIterateIndex--; | 593 | myIterateIndex--; |
591 | 594 | ||
592 | 595 | ||
593 | if ( myIterateIndex < 0 ) { | 596 | if ( myIterateIndex < 0 ) { |
594 | if ( myRotated && myIterateIndex == -2 ) { | 597 | if ( myRotated && myIterateIndex == -2 ) { |
595 | myRotated = false; | 598 | myRotated = false; |
596 | myIterateIndex = count() - 1; | 599 | myIterateIndex = count() - 1; |
597 | setEditText( text(myIterateIndex) ); | 600 | setEditText( text(myIterateIndex) ); |
598 | } | 601 | } |
599 | else { // bottom of history | 602 | else { // bottom of history |
600 | if ( myIterateIndex == -2 ) { | 603 | if ( myIterateIndex == -2 ) { |
601 | qDebug( "ONotifyClient is not implemented yet." ); | 604 | qDebug( "ONotifyClient is not implemented yet." ); |
602 | //ONotifyClient::event( ONotifyClient::notification, | 605 | //ONotifyClient::event( ONotifyClient::notification, |
603 | // i18n("No further item in the history.")); | 606 | // i18n("No further item in the history.")); |
604 | } | 607 | } |
605 | 608 | ||
606 | myIterateIndex = -1; | 609 | myIterateIndex = -1; |
607 | if ( currentText() != myText ) | 610 | if ( currentText() != myText ) |
608 | setEditText( myText ); | 611 | setEditText( myText ); |
609 | } | 612 | } |
610 | } | 613 | } |
611 | else | 614 | else |
612 | setEditText( text( myIterateIndex )); | 615 | setEditText( text( myIterateIndex )); |
613 | } | 616 | } |
614 | 617 | ||
615 | else | 618 | else |
616 | OComboBox::keyPressEvent( e ); | 619 | OComboBox::keyPressEvent( e ); |
617 | } | 620 | } |
618 | 621 | ||
619 | void OHistoryCombo::slotReset() | 622 | void OHistoryCombo::slotReset() |
620 | { | 623 | { |
621 | myIterateIndex = -1; | 624 | myIterateIndex = -1; |
622 | myRotated = false; | 625 | myRotated = false; |
623 | } | 626 | } |
624 | 627 | ||
625 | 628 | ||
626 | void OHistoryCombo::setPixmapProvider( OPixmapProvider *prov ) | 629 | void OHistoryCombo::setPixmapProvider( OPixmapProvider *prov ) |
627 | { | 630 | { |
628 | if ( myPixProvider == prov ) | 631 | if ( myPixProvider == prov ) |
629 | return; | 632 | return; |
630 | 633 | ||
631 | delete myPixProvider; | 634 | delete myPixProvider; |
632 | myPixProvider = prov; | 635 | myPixProvider = prov; |
633 | 636 | ||
634 | // re-insert all the items with/without pixmap | 637 | // re-insert all the items with/without pixmap |
635 | // 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 |
636 | // when using an editable combobox (what we do) | 639 | // when using an editable combobox (what we do) |
637 | if ( count() > 0 ) { | 640 | if ( count() > 0 ) { |
638 | QStringList items( historyItems() ); | 641 | QStringList items( historyItems() ); |
639 | clear(); | 642 | clear(); |
640 | insertItems( items ); | 643 | insertItems( items ); |
641 | } | 644 | } |
642 | } | 645 | } |
643 | 646 | ||
644 | void OHistoryCombo::insertItems( const QStringList& items ) | 647 | void OHistoryCombo::insertItems( const QStringList& items ) |
645 | { | 648 | { |
646 | QStringList::ConstIterator it = items.begin(); | 649 | QStringList::ConstIterator it = items.begin(); |
647 | QString item; | 650 | QString item; |
648 | while ( it != items.end() ) { | 651 | while ( it != items.end() ) { |
649 | item = *it; | 652 | item = *it; |
650 | if ( !item.isEmpty() ) { // only insert non-empty items | 653 | if ( !item.isEmpty() ) { // only insert non-empty items |
651 | if ( myPixProvider ) | 654 | if ( myPixProvider ) |
652 | // insertItem( myPixProvider->pixmapFor(item, OIcon::SizeSmall), item ); | 655 | // insertItem( myPixProvider->pixmapFor(item, OIcon::SizeSmall), item ); |
653 | insertItem( myPixProvider->pixmapFor(item, 16), item ); | 656 | insertItem( myPixProvider->pixmapFor(item, 16), item ); |
654 | else | 657 | else |
655 | insertItem( item ); | 658 | insertItem( item ); |
656 | } | 659 | } |
657 | ++it; | 660 | ++it; |
658 | } | 661 | } |
659 | } | 662 | } |
660 | 663 | ||
661 | void OHistoryCombo::slotClear() | 664 | void OHistoryCombo::slotClear() |
662 | { | 665 | { |
663 | clearHistory(); | 666 | clearHistory(); |
664 | emit cleared(); | 667 | emit cleared(); |
665 | } | 668 | } |
666 | 669 | ||
diff --git a/libopie2/qt3/opieui/oeditlistbox.cpp b/libopie2/qt3/opieui/oeditlistbox.cpp index 3c53552..0e95274 100644 --- a/libopie2/qt3/opieui/oeditlistbox.cpp +++ b/libopie2/qt3/opieui/oeditlistbox.cpp | |||
@@ -1,416 +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 | ||
46 | class OEditListBoxPrivate | 46 | class OEditListBoxPrivate |
47 | { | 47 | { |
48 | public: | 48 | public: |
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 | ||
57 | OEditListBox::OEditListBox(QWidget *parent, const char *name, | 57 | OEditListBox::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 | ||
64 | OEditListBox::OEditListBox(const QString& title, QWidget *parent, | 64 | OEditListBox::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 | ||
71 | OEditListBox::OEditListBox(const QString& title, const CustomEditor& custom, | 71 | OEditListBox::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 | ||
80 | OEditListBox::~OEditListBox() | 80 | OEditListBox::~OEditListBox() |
81 | { | 81 | { |
82 | delete d; | 82 | delete d; |
83 | d=0; | 83 | d=0; |
84 | } | 84 | } |
85 | 85 | ||
86 | void OEditListBox::init( bool checkAtEntering, int buttons, | 86 | void 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 | ||
166 | void OEditListBox::typedSomething(const QString& text) | 166 | void 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 > 290 |
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 | ||
206 | void OEditListBox::moveItemUp() | 206 | void 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 | ||
229 | void OEditListBox::moveItemDown() | 229 | void 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 | ||
252 | void OEditListBox::addItem() | 252 | void 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 > 290 |
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 | ||
300 | int OEditListBox::currentItem() const | 300 | int 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 > 290 |
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 | ||
311 | void OEditListBox::removeItem() | 311 | void 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 | ||
331 | void OEditListBox::enableMoveButtons(int index) | 331 | void 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 | ||
367 | void OEditListBox::clear() | 367 | void 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 | ||
374 | void OEditListBox::insertStringList(const QStringList& list, int index) | 374 | void 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 | ||
379 | void OEditListBox::insertStrList(const QStrList* list, int index) | 379 | void 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 | ||
384 | void OEditListBox::insertStrList(const QStrList& list, int index) | 384 | void 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 | ||
389 | void OEditListBox::insertStrList(const char ** list, int numStrings, int index) | 389 | void 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 | ||
394 | QStringList OEditListBox::items() const | 394 | QStringList 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 | ||
403 | void OEditListBox::virtual_hook( int, void* ) | 403 | void 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 | ||
411 | OEditListBox::CustomEditor::CustomEditor( OComboBox *combo ) | 411 | OEditListBox::CustomEditor::CustomEditor( OComboBox *combo ) |
412 | { | 412 | { |
413 | m_representationWidget = combo; | 413 | m_representationWidget = combo; |
414 | m_lineEdit = dynamic_cast<OLineEdit*>( combo->lineEdit() ); | 414 | assert( combo->lineEdit()->inherits( "OLineEdit" ) ); |
415 | assert( m_lineEdit ); | 415 | m_lineEdit = static_cast<OLineEdit*>( combo->lineEdit() ); |
416 | |||
416 | } | 417 | } |