summaryrefslogtreecommitdiffabout
path: root/microkde
Unidiff
Diffstat (limited to 'microkde') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kdeui/klistview.cpp5
-rw-r--r--microkde/kdeui/klistview.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/microkde/kdeui/klistview.cpp b/microkde/kdeui/klistview.cpp
index 154cd02..31e2053 100644
--- a/microkde/kdeui/klistview.cpp
+++ b/microkde/kdeui/klistview.cpp
@@ -1,2229 +1,2230 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org> 2 Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org>
3 Copyright (C) 2000 Charles Samuels <charles@kde.org> 3 Copyright (C) 2000 Charles Samuels <charles@kde.org>
4 Copyright (C) 2000 Peter Putzer 4 Copyright (C) 2000 Peter Putzer
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation. 8 License version 2 as published by the Free Software Foundation.
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#include <qdragobject.h> 21#include <qdragobject.h>
22#include <qtimer.h> 22#include <qtimer.h>
23#include <qheader.h> 23#include <qheader.h>
24#include <qcursor.h> 24#include <qcursor.h>
25#include <qtooltip.h> 25#include <qtooltip.h>
26#include <qstyle.h> 26#include <qstyle.h>
27#include <qpainter.h> 27#include <qpainter.h>
28 28
29#include <kglobalsettings.h> 29#include <kglobalsettings.h>
30#include <kconfig.h> 30#include <kconfig.h>
31#include <kconfigbase.h> 31#include <kconfigbase.h>
32//US #include <kcursor.h> 32//US #include <kcursor.h>
33#include <kapplication.h> 33#include <kapplication.h>
34//US #include <kipc.h> 34//US #include <kipc.h>
35#include <kdebug.h> 35#include <kdebug.h>
36#ifdef _WIN32_ 36#ifdef _WIN32_
37#define Q_WS_QWS 37#define Q_WS_QWS
38#endif 38#endif
39#ifndef _WIN32_ 39#ifndef _WIN32_
40#define private public 40#define private public
41#include <qlistview.h> 41#include <qlistview.h>
42#undef private 42#undef private
43#endif 43#endif
44#include "klistview.h" 44#include "klistview.h"
45//US #include "klistviewlineedit.h" 45//US #include "klistviewlineedit.h"
46#ifndef DESKTOP_VERSION 46#ifndef DESKTOP_VERSION
47#include <qpe/qpeapplication.h> 47#include <qpe/qpeapplication.h>
48#endif 48#endif
49 49
50// /*US 50// /*US
51class KListView::Tooltip : public QToolTip 51class KListView::Tooltip : public QToolTip
52{ 52{
53public: 53public:
54 Tooltip (KListView* parent, QToolTipGroup* group = 0L); 54 Tooltip (KListView* parent, QToolTipGroup* group = 0L);
55 virtual ~Tooltip () {} 55 virtual ~Tooltip () {}
56 56
57protected: 57protected:
58 // */ 58 // */
59 /** 59 /**
60 * Reimplemented from QToolTip for internal reasons. 60 * Reimplemented from QToolTip for internal reasons.
61 */ 61 */
62 // /*US 62 // /*US
63 virtual void maybeTip (const QPoint&); 63 virtual void maybeTip (const QPoint&);
64 64
65private: 65private:
66 KListView* mParent; 66 KListView* mParent;
67}; 67};
68 68
69KListView::Tooltip::Tooltip (KListView* parent, QToolTipGroup* group) 69KListView::Tooltip::Tooltip (KListView* parent, QToolTipGroup* group)
70 : QToolTip (parent, group), 70 : QToolTip (parent, group),
71 mParent (parent) 71 mParent (parent)
72{ 72{
73} 73}
74 74
75void KListView::Tooltip::maybeTip (const QPoint&) 75void KListView::Tooltip::maybeTip (const QPoint&)
76{ 76{
77 // FIXME 77 // FIXME
78} 78}
79// */ 79// */
80 80
81class KListView::KListViewPrivate 81class KListView::KListViewPrivate
82{ 82{
83public: 83public:
84 KListViewPrivate (KListView* listview) 84 KListViewPrivate (KListView* listview)
85 : pCurrentItem (0L), 85 : pCurrentItem (0L),
86 autoSelectDelay(1), 86 autoSelectDelay(1),
87//US dragDelay (KGlobalSettings::dndEventDelay()), 87//US dragDelay (KGlobalSettings::dndEventDelay()),
88 88
89 dragDelay (10), 89 dragDelay (10),
90//US editor (new KListViewLineEdit (listview)), 90//US editor (new KListViewLineEdit (listview)),
91 cursorInExecuteArea(false), 91 cursorInExecuteArea(false),
92 bUseSingle(false), 92 bUseSingle(false),
93 bChangeCursorOverItem(false), 93 bChangeCursorOverItem(false),
94 itemsMovable (true), 94 itemsMovable (true),
95 selectedBySimpleMove(false), 95 selectedBySimpleMove(false),
96 selectedUsingMouse(false), 96 selectedUsingMouse(false),
97 itemsRenameable (false), 97 itemsRenameable (false),
98 validDrag (false), 98 validDrag (false),
99 dragEnabled (false), 99 dragEnabled (false),
100 autoOpen (true), 100 autoOpen (true),
101 dropVisualizer (true), 101 dropVisualizer (true),
102 dropHighlighter (false), 102 dropHighlighter (false),
103 createChildren (true), 103 createChildren (true),
104 pressedOnSelected (false), 104 pressedOnSelected (false),
105 wasShiftEvent (false), 105 wasShiftEvent (false),
106 fullWidth (false), 106 fullWidth (false),
107 sortAscending(true), 107 sortAscending(true),
108 tabRename(true), 108 tabRename(true),
109 sortColumn(0), 109 sortColumn(0),
110 selectionDirection(0), 110 selectionDirection(0),
111 tooltipColumn (0), 111 tooltipColumn (0),
112 selectionMode (Single), 112 selectionMode (Single),
113 contextMenuKey ( Qt::Key_Menu ),//KGlobalSettings::contextMenuKey()), 113 contextMenuKey ( Qt::Key_Menu ),//KGlobalSettings::contextMenuKey()),
114 showContextMenusOnPress (true),//showContextMenusOnPress (KGlobalSettings::showContextMenusOnPress()), 114 showContextMenusOnPress (true),//showContextMenusOnPress (KGlobalSettings::showContextMenusOnPress()),
115 mDropVisualizerWidth (4) 115 mDropVisualizerWidth (4)
116 { 116 {
117 renameable += 0; 117 renameable += 0;
118//US connect(editor, SIGNAL(done(QListViewItem*,int)), listview, SLOT(doneEditing(QListViewItem*,int))); 118//US connect(editor, SIGNAL(done(QListViewItem*,int)), listview, SLOT(doneEditing(QListViewItem*,int)));
119 } 119 }
120 120
121 ~KListViewPrivate () 121 ~KListViewPrivate ()
122 { 122 {
123//US delete editor; 123//US delete editor;
124 } 124 }
125 125
126 QListViewItem* pCurrentItem; 126 QListViewItem* pCurrentItem;
127 127
128 QTimer autoSelect; 128 QTimer autoSelect;
129 int autoSelectDelay; 129 int autoSelectDelay;
130 130
131 QTimer dragExpand; 131 QTimer dragExpand;
132 QListViewItem* dragOverItem; 132 QListViewItem* dragOverItem;
133 QPoint dragOverPoint; 133 QPoint dragOverPoint;
134 134
135 QPoint startDragPos; 135 QPoint startDragPos;
136 int dragDelay; 136 int dragDelay;
137 137
138//US KListViewLineEdit *editor; 138//US KListViewLineEdit *editor;
139 QValueList<int> renameable; 139 QValueList<int> renameable;
140 140
141 bool cursorInExecuteArea:1; 141 bool cursorInExecuteArea:1;
142 bool bUseSingle:1; 142 bool bUseSingle:1;
143 bool bChangeCursorOverItem:1; 143 bool bChangeCursorOverItem:1;
144 bool itemsMovable:1; 144 bool itemsMovable:1;
145 bool selectedBySimpleMove : 1; 145 bool selectedBySimpleMove : 1;
146 bool selectedUsingMouse:1; 146 bool selectedUsingMouse:1;
147 bool itemsRenameable:1; 147 bool itemsRenameable:1;
148 bool validDrag:1; 148 bool validDrag:1;
149 bool dragEnabled:1; 149 bool dragEnabled:1;
150 bool autoOpen:1; 150 bool autoOpen:1;
151 bool dropVisualizer:1; 151 bool dropVisualizer:1;
152 bool dropHighlighter:1; 152 bool dropHighlighter:1;
153 bool createChildren:1; 153 bool createChildren:1;
154 bool pressedOnSelected:1; 154 bool pressedOnSelected:1;
155 bool wasShiftEvent:1; 155 bool wasShiftEvent:1;
156 bool fullWidth:1; 156 bool fullWidth:1;
157 bool sortAscending:1; 157 bool sortAscending:1;
158 bool tabRename:1; 158 bool tabRename:1;
159 159
160 int sortColumn; 160 int sortColumn;
161 161
162 //+1 means downwards (y increases, -1 means upwards, 0 means not selected), aleXXX 162 //+1 means downwards (y increases, -1 means upwards, 0 means not selected), aleXXX
163 int selectionDirection; 163 int selectionDirection;
164 int tooltipColumn; 164 int tooltipColumn;
165 165
166 SelectionModeExt selectionMode; 166 SelectionModeExt selectionMode;
167 int contextMenuKey; 167 int contextMenuKey;
168 bool showContextMenusOnPress; 168 bool showContextMenusOnPress;
169 169
170 QRect mOldDropVisualizer; 170 QRect mOldDropVisualizer;
171 int mDropVisualizerWidth; 171 int mDropVisualizerWidth;
172 QRect mOldDropHighlighter; 172 QRect mOldDropHighlighter;
173 QListViewItem *afterItemDrop; 173 QListViewItem *afterItemDrop;
174 QListViewItem *parentItemDrop; 174 QListViewItem *parentItemDrop;
175 175
176 QColor alternateBackground; 176 QColor alternateBackground;
177}; 177};
178 178
179/*US 179/*US
180KListViewLineEdit::KListViewLineEdit(KListView *parent) 180KListViewLineEdit::KListViewLineEdit(KListView *parent)
181 : KLineEdit(parent->viewport()), item(0), col(0), p(parent) 181 : KLineEdit(parent->viewport()), item(0), col(0), p(parent)
182{ 182{
183 setFrame( false ); 183 setFrame( false );
184 hide(); 184 hide();
185 connect( parent, SIGNAL( selectionChanged() ), SLOT( slotSelectionChanged() )); 185 connect( parent, SIGNAL( selectionChanged() ), SLOT( slotSelectionChanged() ));
186} 186}
187 187
188KListViewLineEdit::~KListViewLineEdit() 188KListViewLineEdit::~KListViewLineEdit()
189{ 189{
190} 190}
191 191
192void KListViewLineEdit::load(QListViewItem *i, int c) 192void KListViewLineEdit::load(QListViewItem *i, int c)
193{ 193{
194 item=i; 194 item=i;
195 col=c; 195 col=c;
196 196
197 QRect rect(p->itemRect(i)); 197 QRect rect(p->itemRect(i));
198 setText(item->text(c)); 198 setText(item->text(c));
199 199
200 int fieldX = rect.x() - 1; 200 int fieldX = rect.x() - 1;
201 int fieldW = p->columnWidth(col) + 2; 201 int fieldW = p->columnWidth(col) + 2;
202 202
203 int pos = p->header()->mapToIndex(col); 203 int pos = p->header()->mapToIndex(col);
204 for ( int index = 0; index < pos; index++ ) 204 for ( int index = 0; index < pos; index++ )
205 fieldX += p->columnWidth( p->header()->mapToSection( index )); 205 fieldX += p->columnWidth( p->header()->mapToSection( index ));
206 206
207 if ( col == 0 ) { 207 if ( col == 0 ) {
208 int d = i->depth() + (p->rootIsDecorated() ? 1 : 0); 208 int d = i->depth() + (p->rootIsDecorated() ? 1 : 0);
209 d *= p->treeStepSize(); 209 d *= p->treeStepSize();
210 fieldX += d; 210 fieldX += d;
211 fieldW -= d; 211 fieldW -= d;
212 } 212 }
213 213
214 if ( i->pixmap( col ) ) {// add width of pixmap 214 if ( i->pixmap( col ) ) {// add width of pixmap
215 int d = i->pixmap( col )->width(); 215 int d = i->pixmap( col )->width();
216 fieldX += d; 216 fieldX += d;
217 fieldW -= d; 217 fieldW -= d;
218 } 218 }
219 219
220 setGeometry(fieldX, rect.y() - 1, fieldW, rect.height() + 2); 220 setGeometry(fieldX, rect.y() - 1, fieldW, rect.height() + 2);
221 show(); 221 show();
222 setFocus(); 222 setFocus();
223} 223}
224*/ 224*/
225 /*Helper functions to for 225 /*Helper functions to for
226 *tabOrderedRename functionality. 226 *tabOrderedRename functionality.
227 */ 227 */
228 228
229static int nextCol (KListView *pl, QListViewItem *pi, int start, int dir) 229static int nextCol (KListView *pl, QListViewItem *pi, int start, int dir)
230{ 230{
231 if (pi) 231 if (pi)
232 { 232 {
233 //Find the next renameable column in the current row 233 //Find the next renameable column in the current row
234 for (; ((dir == +1) ? (start < pl->columns()) : (start >= 0)); start += dir) 234 for (; ((dir == +1) ? (start < pl->columns()) : (start >= 0)); start += dir)
235 if (pl->isRenameable(start)) 235 if (pl->isRenameable(start))
236 return start; 236 return start;
237 } 237 }
238 238
239 return -1; 239 return -1;
240} 240}
241 241
242static QListViewItem *prevItem (QListViewItem *pi) 242static QListViewItem *prevItem (QListViewItem *pi)
243{ 243{
244 QListViewItem *pa = pi->itemAbove(); 244 QListViewItem *pa = pi->itemAbove();
245 245
246 /*Does what the QListViewItem::previousSibling() 246 /*Does what the QListViewItem::previousSibling()
247 *of my dreams would do. 247 *of my dreams would do.
248 */ 248 */
249 if (pa && pa->parent() == pi->parent()) 249 if (pa && pa->parent() == pi->parent())
250 return pa; 250 return pa;
251 251
252 return NULL; 252 return NULL;
253} 253}
254 254
255static QListViewItem *lastQChild (QListViewItem *pi) 255static QListViewItem *lastQChild (QListViewItem *pi)
256{ 256{
257 if (pi) 257 if (pi)
258 { 258 {
259 /*Since there's no QListViewItem::lastChild(). 259 /*Since there's no QListViewItem::lastChild().
260 *This finds the last sibling for the given 260 *This finds the last sibling for the given
261 *item. 261 *item.
262 */ 262 */
263 for (QListViewItem *pt = pi->nextSibling(); pt; pt = pt->nextSibling()) 263 for (QListViewItem *pt = pi->nextSibling(); pt; pt = pt->nextSibling())
264 pi = pt; 264 pi = pt;
265 } 265 }
266 266
267 return pi; 267 return pi;
268} 268}
269/*US 269/*US
270void KListViewLineEdit::selectNextCell (QListViewItem *pitem, int column, bool forward) 270void KListViewLineEdit::selectNextCell (QListViewItem *pitem, int column, bool forward)
271{ 271{
272 const int ncols = p->columns(); 272 const int ncols = p->columns();
273 const int dir = forward ? +1 : -1; 273 const int dir = forward ? +1 : -1;
274 const int restart = forward ? 0 : (ncols - 1); 274 const int restart = forward ? 0 : (ncols - 1);
275 QListViewItem *top = (pitem && pitem->parent()) 275 QListViewItem *top = (pitem && pitem->parent())
276 ? pitem->parent()->firstChild() 276 ? pitem->parent()->firstChild()
277 : p->firstChild(); 277 : p->firstChild();
278 QListViewItem *pi = pitem; 278 QListViewItem *pi = pitem;
279 279
280 terminate(); //Save current changes 280 terminate(); //Save current changes
281 281
282 do 282 do
283 { 283 {
284*/ 284*/
285 /*Check the rest of the current row for an editable column, 285 /*Check the rest of the current row for an editable column,
286 *if that fails, check the entire next/previous row. The 286 *if that fails, check the entire next/previous row. The
287 *last case goes back to the first item in the current branch 287 *last case goes back to the first item in the current branch
288 *or the last item in the current branch depending on the 288 *or the last item in the current branch depending on the
289 *direction. 289 *direction.
290 */ 290 */
291/*US 291/*US
292 if ((column = nextCol(p, pi, column + dir, dir)) != -1 || 292 if ((column = nextCol(p, pi, column + dir, dir)) != -1 ||
293 (column = nextCol(p, (pi = (forward ? pi->nextSibling() : prevItem(pi))), restart, dir)) != -1 || 293 (column = nextCol(p, (pi = (forward ? pi->nextSibling() : prevItem(pi))), restart, dir)) != -1 ||
294 (column = nextCol(p, (pi = (forward ? top : lastQChild(pitem))), restart, dir)) != -1) 294 (column = nextCol(p, (pi = (forward ? top : lastQChild(pitem))), restart, dir)) != -1)
295 { 295 {
296 if (pi) 296 if (pi)
297 { 297 {
298 p->setCurrentItem(pi); //Calls terminate 298 p->setCurrentItem(pi); //Calls terminate
299 p->rename(pi, column); 299 p->rename(pi, column);
300*/ 300*/
301 /*Some listviews may override rename() to 301 /*Some listviews may override rename() to
302 *prevent certain items from being renamed, 302 *prevent certain items from being renamed,
303 *if this is done, [m_]item will be NULL 303 *if this is done, [m_]item will be NULL
304 *after the rename() call... try again. 304 *after the rename() call... try again.
305 */ 305 */
306/*US 306/*US
307 if (!item) 307 if (!item)
308 continue; 308 continue;
309 309
310 break; 310 break;
311 } 311 }
312 } 312 }
313 } 313 }
314 while (pi && !item); 314 while (pi && !item);
315} 315}
316*/ 316*/
317 317
318/*US 318/*US
319#ifdef KeyPress 319#ifdef KeyPress
320#undef KeyPress 320#undef KeyPress
321#endif 321#endif
322 322
323bool KListViewLineEdit::event (QEvent *pe) 323bool KListViewLineEdit::event (QEvent *pe)
324{ 324{
325 if (pe->type() == QEvent::KeyPress) 325 if (pe->type() == QEvent::KeyPress)
326 { 326 {
327 QKeyEvent *k = (QKeyEvent *) pe; 327 QKeyEvent *k = (QKeyEvent *) pe;
328 328
329 if ((k->key() == Qt::Key_Backtab || k->key() == Qt::Key_Tab) && 329 if ((k->key() == Qt::Key_Backtab || k->key() == Qt::Key_Tab) &&
330 p->tabOrderedRenaming() && p->itemsRenameable() && 330 p->tabOrderedRenaming() && p->itemsRenameable() &&
331 !(k->state() & ControlButton || k->state() & AltButton)) 331 !(k->state() & ControlButton || k->state() & AltButton))
332 { 332 {
333 selectNextCell(item, col, 333 selectNextCell(item, col,
334 (k->key() == Key_Tab && !(k->state() & ShiftButton))); 334 (k->key() == Key_Tab && !(k->state() & ShiftButton)));
335 return true; 335 return true;
336 } 336 }
337 } 337 }
338 338
339 return KLineEdit::event(pe); 339 return KLineEdit::event(pe);
340} 340}
341 341
342void KListViewLineEdit::keyPressEvent(QKeyEvent *e) 342void KListViewLineEdit::keyPressEvent(QKeyEvent *e)
343{ 343{
344 if(e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter ) 344 if(e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter )
345 terminate(true); 345 terminate(true);
346 else if(e->key() == Qt::Key_Escape) 346 else if(e->key() == Qt::Key_Escape)
347 terminate(false); 347 terminate(false);
348 else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Up) 348 else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Up)
349 { 349 {
350 terminate(true); 350 terminate(true);
351 KLineEdit::keyPressEvent(e); 351 KLineEdit::keyPressEvent(e);
352 } 352 }
353 else 353 else
354 KLineEdit::keyPressEvent(e); 354 KLineEdit::keyPressEvent(e);
355} 355}
356 356
357void KListViewLineEdit::terminate() 357void KListViewLineEdit::terminate()
358{ 358{
359 terminate(true); 359 terminate(true);
360} 360}
361 361
362void KListViewLineEdit::terminate(bool commit) 362void KListViewLineEdit::terminate(bool commit)
363{ 363{
364 if ( item ) 364 if ( item )
365 { 365 {
366 //kdDebug() << "KListViewLineEdit::terminate " << commit << endl; 366 //kdDebug() << "KListViewLineEdit::terminate " << commit << endl;
367 if (commit) 367 if (commit)
368 item->setText(col, text()); 368 item->setText(col, text());
369 int c=col; 369 int c=col;
370 QListViewItem *i=item; 370 QListViewItem *i=item;
371 col=0; 371 col=0;
372 item=0; 372 item=0;
373 hide(); // will call focusOutEvent, that's why we set item=0 before 373 hide(); // will call focusOutEvent, that's why we set item=0 before
374 emit done(i,c); 374 emit done(i,c);
375 } 375 }
376} 376}
377 377
378void KListViewLineEdit::focusOutEvent(QFocusEvent *ev) 378void KListViewLineEdit::focusOutEvent(QFocusEvent *ev)
379{ 379{
380 QFocusEvent * focusEv = static_cast<QFocusEvent*>(ev); 380 QFocusEvent * focusEv = static_cast<QFocusEvent*>(ev);
381 // Don't let a RMB close the editor 381 // Don't let a RMB close the editor
382 if (focusEv->reason() != QFocusEvent::Popup && focusEv->reason() != QFocusEvent::ActiveWindow) 382 if (focusEv->reason() != QFocusEvent::Popup && focusEv->reason() != QFocusEvent::ActiveWindow)
383 terminate(true); 383 terminate(true);
384} 384}
385 385
386void KListViewLineEdit::paintEvent( QPaintEvent *e ) 386void KListViewLineEdit::paintEvent( QPaintEvent *e )
387{ 387{
388 KLineEdit::paintEvent( e ); 388 KLineEdit::paintEvent( e );
389 389
390 if ( !frame() ) { 390 if ( !frame() ) {
391 QPainter p( this ); 391 QPainter p( this );
392 p.setClipRegion( e->region() ); 392 p.setClipRegion( e->region() );
393 p.drawRect( rect() ); 393 p.drawRect( rect() );
394 } 394 }
395} 395}
396 396
397// selection changed -> terminate. As our "item" can be already deleted, 397// selection changed -> terminate. As our "item" can be already deleted,
398// we can't call terminate(false), because that would emit done() with 398// we can't call terminate(false), because that would emit done() with
399// a dangling pointer to "item". 399// a dangling pointer to "item".
400void KListViewLineEdit::slotSelectionChanged() 400void KListViewLineEdit::slotSelectionChanged()
401{ 401{
402 item = 0; 402 item = 0;
403 col = 0; 403 col = 0;
404 hide(); 404 hide();
405} 405}
406*/ 406*/
407 407
408KListView::KListView( QWidget *parent, const char *name ) 408KListView::KListView( QWidget *parent, const char *name ,bool emulateRightMouse )
409 : QListView( parent, name ), 409 : QListView( parent, name ),
410 d (new KListViewPrivate (this)) 410 d (new KListViewPrivate (this))
411{ 411{
412#ifndef DESKTOP_VERSION 412#ifndef DESKTOP_VERSION
413 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 413 if ( emulateRightMouse )
414 QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
414#endif 415#endif
415//US setDragAutoScroll(true); 416//US setDragAutoScroll(true);
416 417
417 connect( this, SIGNAL( onViewport() ), 418 connect( this, SIGNAL( onViewport() ),
418 this, SLOT( slotOnViewport() ) ); 419 this, SLOT( slotOnViewport() ) );
419 connect( this, SIGNAL( onItem( QListViewItem * ) ), 420 connect( this, SIGNAL( onItem( QListViewItem * ) ),
420 this, SLOT( slotOnItem( QListViewItem * ) ) ); 421 this, SLOT( slotOnItem( QListViewItem * ) ) );
421 422
422 connect (this, SIGNAL(contentsMoving(int,int)), 423 connect (this, SIGNAL(contentsMoving(int,int)),
423 this, SLOT(cleanDropVisualizer())); 424 this, SLOT(cleanDropVisualizer()));
424 connect (this, SIGNAL(contentsMoving(int,int)), 425 connect (this, SIGNAL(contentsMoving(int,int)),
425 this, SLOT(cleanItemHighlighter())); 426 this, SLOT(cleanItemHighlighter()));
426 427
427/*US 428/*US
428 slotSettingsChanged(KApplication::SETTINGS_MOUSE); 429 slotSettingsChanged(KApplication::SETTINGS_MOUSE);
429 430
430 if (kapp) 431 if (kapp)
431 { 432 {
432 connect( kapp, SIGNAL( settingsChanged(int) ), SLOT( slotSettingsChanged(int) ) ); 433 connect( kapp, SIGNAL( settingsChanged(int) ), SLOT( slotSettingsChanged(int) ) );
433 kapp->addKipcEventMask( KIPC::SettingsChanged ); 434 kapp->addKipcEventMask( KIPC::SettingsChanged );
434 } 435 }
435*/ 436*/
436 slotSettingsChanged(1); //US do this to initialize the connections 437 slotSettingsChanged(1); //US do this to initialize the connections
437 438
438 439
439 connect(&d->autoSelect, SIGNAL( timeout() ), 440 connect(&d->autoSelect, SIGNAL( timeout() ),
440 this, SLOT( slotAutoSelect() ) ); 441 this, SLOT( slotAutoSelect() ) );
441 connect(&d->dragExpand, SIGNAL( timeout() ), 442 connect(&d->dragExpand, SIGNAL( timeout() ),
442 this, SLOT( slotDragExpand() ) ); 443 this, SLOT( slotDragExpand() ) );
443 444
444 // context menu handling 445 // context menu handling
445 if (d->showContextMenusOnPress) 446 if (d->showContextMenusOnPress)
446 { 447 {
447 connect (this, SIGNAL (rightButtonPressed (QListViewItem*, const QPoint&, int)), 448 connect (this, SIGNAL (rightButtonPressed (QListViewItem*, const QPoint&, int)),
448 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int))); 449 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int)));
449 } 450 }
450 else 451 else
451 { 452 {
452 connect (this, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint&, int)), 453 connect (this, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint&, int)),
453 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int))); 454 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int)));
454 } 455 }
455 456
456 connect (this, SIGNAL (menuShortCutPressed (KListView*, QListViewItem*)), 457 connect (this, SIGNAL (menuShortCutPressed (KListView*, QListViewItem*)),
457 this, SLOT (emitContextMenu (KListView*, QListViewItem*))); 458 this, SLOT (emitContextMenu (KListView*, QListViewItem*)));
458 459
459 460
460 //qDebug("KListView::KListView make alternate color configurable"); 461 //qDebug("KListView::KListView make alternate color configurable");
461//US d->alternateBackground = KGlobalSettings::alternateBackgroundColor(); 462//US d->alternateBackground = KGlobalSettings::alternateBackgroundColor();
462 d->alternateBackground = QColor(240, 240, 240); 463 d->alternateBackground = QColor(240, 240, 240);
463} 464}
464 465
465 466
466 467
467KListView::~KListView() 468KListView::~KListView()
468{ 469{
469 delete d; 470 delete d;
470} 471}
471 472
472bool KListView::isExecuteArea( const QPoint& point ) 473bool KListView::isExecuteArea( const QPoint& point )
473{ 474{
474 if ( itemAt( point ) ) 475 if ( itemAt( point ) )
475 return isExecuteArea( point.x() ); 476 return isExecuteArea( point.x() );
476 477
477 return false; 478 return false;
478} 479}
479 480
480bool KListView::isExecuteArea( int x ) 481bool KListView::isExecuteArea( int x )
481{ 482{
482 if( allColumnsShowFocus() ) 483 if( allColumnsShowFocus() )
483 return true; 484 return true;
484 else { 485 else {
485 int offset = 0; 486 int offset = 0;
486 int width = columnWidth( 0 ); 487 int width = columnWidth( 0 );
487 int pos = header()->mapToIndex( 0 ); 488 int pos = header()->mapToIndex( 0 );
488 489
489 for ( int index = 0; index < pos; index++ ) 490 for ( int index = 0; index < pos; index++ )
490 offset += columnWidth( header()->mapToSection( index ) ); 491 offset += columnWidth( header()->mapToSection( index ) );
491 492
492 x += contentsX(); // in case of a horizontal scrollbar 493 x += contentsX(); // in case of a horizontal scrollbar
493 return ( x > offset && x < ( offset + width ) ); 494 return ( x > offset && x < ( offset + width ) );
494 } 495 }
495} 496}
496 497
497void KListView::slotOnItem( QListViewItem *item ) 498void KListView::slotOnItem( QListViewItem *item )
498{ 499{
499 QPoint vp = viewport()->mapFromGlobal( QCursor::pos() ); 500 QPoint vp = viewport()->mapFromGlobal( QCursor::pos() );
500 if ( item && isExecuteArea( vp.x() ) && (d->autoSelectDelay > -1) && d->bUseSingle ) { 501 if ( item && isExecuteArea( vp.x() ) && (d->autoSelectDelay > -1) && d->bUseSingle ) {
501 d->autoSelect.start( d->autoSelectDelay, true ); 502 d->autoSelect.start( d->autoSelectDelay, true );
502 d->pCurrentItem = item; 503 d->pCurrentItem = item;
503 } 504 }
504} 505}
505 506
506void KListView::slotOnViewport() 507void KListView::slotOnViewport()
507{ 508{
508 if ( d->bChangeCursorOverItem ) 509 if ( d->bChangeCursorOverItem )
509 viewport()->unsetCursor(); 510 viewport()->unsetCursor();
510 511
511 d->autoSelect.stop(); 512 d->autoSelect.stop();
512 d->pCurrentItem = 0L; 513 d->pCurrentItem = 0L;
513} 514}
514 515
515void KListView::slotSettingsChanged(int category) 516void KListView::slotSettingsChanged(int category)
516{ 517{
517 //qDebug("KListView::slotSettingsChanged has to be verified"); 518 //qDebug("KListView::slotSettingsChanged has to be verified");
518 519
519 520
520 switch (category) 521 switch (category)
521 { 522 {
522 //US I create my private category (=1) to set the settings 523 //US I create my private category (=1) to set the settings
523 case 1: 524 case 1:
524 d->dragDelay = 2; 525 d->dragDelay = 2;
525 //US set explicitly d->bUseSingle = KGlobalSettings::singleClick(); 526 //US set explicitly d->bUseSingle = KGlobalSettings::singleClick();
526 // qDebug("KListView::slotSettingsChanged: single%i", d->bUseSingle); 527 // qDebug("KListView::slotSettingsChanged: single%i", d->bUseSingle);
527 528
528 disconnect(this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)), 529 disconnect(this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)),
529 this, SLOT (slotMouseButtonClicked (int, QListViewItem*, const QPoint &, int))); 530 this, SLOT (slotMouseButtonClicked (int, QListViewItem*, const QPoint &, int)));
530 531
531 if( d->bUseSingle ) 532 if( d->bUseSingle )
532 connect (this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)), 533 connect (this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)),
533 this, SLOT (slotMouseButtonClicked( int, QListViewItem*, const QPoint &, int))); 534 this, SLOT (slotMouseButtonClicked( int, QListViewItem*, const QPoint &, int)));
534 535
535 //US d->bChangeCursorOverItem = KGlobalSettings::changeCursorOverIcon(); 536 //US d->bChangeCursorOverItem = KGlobalSettings::changeCursorOverIcon();
536 //US d->autoSelectDelay = KGlobalSettings::autoSelectDelay(); 537 //US d->autoSelectDelay = KGlobalSettings::autoSelectDelay();
537 538
538 if( !d->bUseSingle || !d->bChangeCursorOverItem ) 539 if( !d->bUseSingle || !d->bChangeCursorOverItem )
539 viewport()->unsetCursor(); 540 viewport()->unsetCursor();
540 541
541 break; 542 break;
542 543
543 /*US 544 /*US
544 case KApplication::SETTINGS_MOUSE: 545 case KApplication::SETTINGS_MOUSE:
545 d->dragDelay = KGlobalSettings::dndEventDelay(); 546 d->dragDelay = KGlobalSettings::dndEventDelay();
546 d->bUseSingle = KGlobalSettings::singleClick(); 547 d->bUseSingle = KGlobalSettings::singleClick();
547 548
548 disconnect(this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)), 549 disconnect(this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)),
549 this, SLOT (slotMouseButtonClicked (int, QListViewItem*, const QPoint &, int))); 550 this, SLOT (slotMouseButtonClicked (int, QListViewItem*, const QPoint &, int)));
550 551
551 if( d->bUseSingle ) 552 if( d->bUseSingle )
552 connect (this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)), 553 connect (this, SIGNAL (mouseButtonClicked (int, QListViewItem*, const QPoint &, int)),
553 this, SLOT (slotMouseButtonClicked( int, QListViewItem*, const QPoint &, int))); 554 this, SLOT (slotMouseButtonClicked( int, QListViewItem*, const QPoint &, int)));
554 555
555 d->bChangeCursorOverItem = KGlobalSettings::changeCursorOverIcon(); 556 d->bChangeCursorOverItem = KGlobalSettings::changeCursorOverIcon();
556 d->autoSelectDelay = KGlobalSettings::autoSelectDelay(); 557 d->autoSelectDelay = KGlobalSettings::autoSelectDelay();
557 558
558 if( !d->bUseSingle || !d->bChangeCursorOverItem ) 559 if( !d->bUseSingle || !d->bChangeCursorOverItem )
559 viewport()->unsetCursor(); 560 viewport()->unsetCursor();
560 561
561 break; 562 break;
562 case KApplication::SETTINGS_POPUPMENU: 563 case KApplication::SETTINGS_POPUPMENU:
563 d->contextMenuKey = KGlobalSettings::contextMenuKey (); 564 d->contextMenuKey = KGlobalSettings::contextMenuKey ();
564 d->showContextMenusOnPress = KGlobalSettings::showContextMenusOnPress (); 565 d->showContextMenusOnPress = KGlobalSettings::showContextMenusOnPress ();
565 566
566 if (d->showContextMenusOnPress) 567 if (d->showContextMenusOnPress)
567 { 568 {
568 disconnect (0L, 0L, this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int))); 569 disconnect (0L, 0L, this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int)));
569 570
570 connect(this, SIGNAL (rightButtonPressed (QListViewItem*, const QPoint&, int)), 571 connect(this, SIGNAL (rightButtonPressed (QListViewItem*, const QPoint&, int)),
571 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int))); 572 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int)));
572 } 573 }
573 else 574 else
574 { 575 {
575 disconnect (0L, 0L, this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int))); 576 disconnect (0L, 0L, this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int)));
576 577
577 connect(this, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint&, int)), 578 connect(this, SIGNAL (rightButtonClicked (QListViewItem*, const QPoint&, int)),
578 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int))); 579 this, SLOT (emitContextMenu (QListViewItem*, const QPoint&, int)));
579 } 580 }
580 break; 581 break;
581 */ 582 */
582 583
583 default: 584 default:
584 break; 585 break;
585 } 586 }
586 587
587} 588}
588 589
589void KListView::slotAutoSelect() 590void KListView::slotAutoSelect()
590{ 591{
591 // check that the item still exists 592 // check that the item still exists
592 if( itemIndex( d->pCurrentItem ) == -1 ) 593 if( itemIndex( d->pCurrentItem ) == -1 )
593 return; 594 return;
594 595
595 if (!isActiveWindow()) 596 if (!isActiveWindow())
596 { 597 {
597 d->autoSelect.stop(); 598 d->autoSelect.stop();
598 return; 599 return;
599 } 600 }
600 601
601 //Give this widget the keyboard focus. 602 //Give this widget the keyboard focus.
602 if( !hasFocus() ) 603 if( !hasFocus() )
603 setFocus(); 604 setFocus();
604 605
605 QListViewItem* previousItem = currentItem(); 606 QListViewItem* previousItem = currentItem();
606 setCurrentItem( d->pCurrentItem ); 607 setCurrentItem( d->pCurrentItem );
607 608
608#if 0 609#if 0
609#ifndef Q_WS_QWS 610#ifndef Q_WS_QWS
610 // FIXME(E): Implement for Qt Embedded 611 // FIXME(E): Implement for Qt Embedded
611 if( d->pCurrentItem ) { 612 if( d->pCurrentItem ) {
612 //Shift pressed? 613 //Shift pressed?
613 if( (keybstate & ShiftMask) ) { 614 if( (keybstate & ShiftMask) ) {
614 bool block = signalsBlocked(); 615 bool block = signalsBlocked();
615 blockSignals( true ); 616 blockSignals( true );
616 617
617 //No Ctrl? Then clear before! 618 //No Ctrl? Then clear before!
618 if( !(keybstate & ControlMask) ) 619 if( !(keybstate & ControlMask) )
619 clearSelection(); 620 clearSelection();
620 621
621 bool select = !d->pCurrentItem->isSelected(); 622 bool select = !d->pCurrentItem->isSelected();
622 bool update = viewport()->isUpdatesEnabled(); 623 bool update = viewport()->isUpdatesEnabled();
623 viewport()->setUpdatesEnabled( false ); 624 viewport()->setUpdatesEnabled( false );
624 625
625 bool down = previousItem->itemPos() < d->pCurrentItem->itemPos(); 626 bool down = previousItem->itemPos() < d->pCurrentItem->itemPos();
626 QListViewItemIterator lit( down ? previousItem : d->pCurrentItem ); 627 QListViewItemIterator lit( down ? previousItem : d->pCurrentItem );
627 for ( ; lit.current(); ++lit ) { 628 for ( ; lit.current(); ++lit ) {
628 if ( down && lit.current() == d->pCurrentItem ) { 629 if ( down && lit.current() == d->pCurrentItem ) {
629 d->pCurrentItem->setSelected( select ); 630 d->pCurrentItem->setSelected( select );
630 break; 631 break;
631 } 632 }
632 if ( !down && lit.current() == previousItem ) { 633 if ( !down && lit.current() == previousItem ) {
633 previousItem->setSelected( select ); 634 previousItem->setSelected( select );
634 break; 635 break;
635 } 636 }
636 lit.current()->setSelected( select ); 637 lit.current()->setSelected( select );
637 } 638 }
638 639
639 blockSignals( block ); 640 blockSignals( block );
640 viewport()->setUpdatesEnabled( update ); 641 viewport()->setUpdatesEnabled( update );
641 triggerUpdate(); 642 triggerUpdate();
642 643
643 emit selectionChanged(); 644 emit selectionChanged();
644 645
645 if( selectionMode() == QListView::Single ) 646 if( selectionMode() == QListView::Single )
646 emit selectionChanged( d->pCurrentItem ); 647 emit selectionChanged( d->pCurrentItem );
647 } 648 }
648 else if( (keybstate & ControlMask) ) 649 else if( (keybstate & ControlMask) )
649 setSelected( d->pCurrentItem, !d->pCurrentItem->isSelected() ); 650 setSelected( d->pCurrentItem, !d->pCurrentItem->isSelected() );
650 else { 651 else {
651 bool block = signalsBlocked(); 652 bool block = signalsBlocked();
652 blockSignals( true ); 653 blockSignals( true );
653 654
654 if( !d->pCurrentItem->isSelected() ) 655 if( !d->pCurrentItem->isSelected() )
655 clearSelection(); 656 clearSelection();
656 657
657 blockSignals( block ); 658 blockSignals( block );
658 659
659 setSelected( d->pCurrentItem, true ); 660 setSelected( d->pCurrentItem, true );
660 } 661 }
661 } 662 }
662 else 663 else
663 kdDebug() << "KListView::slotAutoSelect: Thats not supposed to happen!!!!" << endl; 664 kdDebug() << "KListView::slotAutoSelect: Thats not supposed to happen!!!!" << endl;
664#endif 665#endif
665#endif 666#endif
666} 667}
667 668
668void KListView::slotHeaderChanged() 669void KListView::slotHeaderChanged()
669{ 670{
670 if (d->fullWidth && columns()) 671 if (d->fullWidth && columns())
671 { 672 {
672 int w = 0; 673 int w = 0;
673 for (int i = 0; i < columns() - 1; ++i) w += columnWidth(i); 674 for (int i = 0; i < columns() - 1; ++i) w += columnWidth(i);
674 setColumnWidth( columns() - 1, viewport()->width() - w - 1 ); 675 setColumnWidth( columns() - 1, viewport()->width() - w - 1 );
675 } 676 }
676} 677}
677 678
678void KListView::emitExecute( int buttonstate, QListViewItem *item, const QPoint &pos, int c) 679void KListView::emitExecute( int buttonstate, QListViewItem *item, const QPoint &pos, int c)
679{ 680{
680 // qDebug("KListView::emitExecute buttonstate=%i", buttonstate); 681 // qDebug("KListView::emitExecute buttonstate=%i", buttonstate);
681 if( isExecuteArea( viewport()->mapFromGlobal(pos) ) ) { 682 if( isExecuteArea( viewport()->mapFromGlobal(pos) ) ) {
682 683
683 // Double click mode ? 684 // Double click mode ?
684 if ( !d->bUseSingle ) 685 if ( !d->bUseSingle )
685 { 686 {
686 emit executed( item ); 687 emit executed( item );
687 emit executed( item, pos, c ); 688 emit executed( item, pos, c );
688 } 689 }
689 else 690 else
690 { 691 {
691 //US special implementation for embedded systems 692 //US special implementation for embedded systems
692 d->autoSelect.stop(); 693 d->autoSelect.stop();
693 694
694 //Dont emit executed if in SC mode and Shift or Ctrl are pressed 695 //Dont emit executed if in SC mode and Shift or Ctrl are pressed
695 if( !( (buttonstate==ShiftButton) || (buttonstate==ControlButton) )) { 696 if( !( (buttonstate==ShiftButton) || (buttonstate==ControlButton) )) {
696 // if( !( ((keybstate & ShiftMask) || (keybstate & ControlMask)) ) ) { 697 // if( !( ((keybstate & ShiftMask) || (keybstate & ControlMask)) ) ) {
697 698
698 emit executed( item ); 699 emit executed( item );
699 emit executed( item, pos, c ); 700 emit executed( item, pos, c );
700 } 701 }
701 } 702 }
702 } 703 }
703} 704}
704 705
705void KListView::focusInEvent( QFocusEvent *fe ) 706void KListView::focusInEvent( QFocusEvent *fe )
706{ 707{
707 // kdDebug()<<"KListView::focusInEvent()"<<endl; 708 // kdDebug()<<"KListView::focusInEvent()"<<endl;
708 QListView::focusInEvent( fe ); 709 QListView::focusInEvent( fe );
709 if ((d->selectedBySimpleMove) 710 if ((d->selectedBySimpleMove)
710 && (d->selectionMode == FileManager) 711 && (d->selectionMode == FileManager)
711 && (fe->reason()!=QFocusEvent::Popup) 712 && (fe->reason()!=QFocusEvent::Popup)
712 && (fe->reason()!=QFocusEvent::ActiveWindow) 713 && (fe->reason()!=QFocusEvent::ActiveWindow)
713 && (currentItem()!=0)) 714 && (currentItem()!=0))
714 { 715 {
715 currentItem()->setSelected(true); 716 currentItem()->setSelected(true);
716 currentItem()->repaint(); 717 currentItem()->repaint();
717 emit selectionChanged(); 718 emit selectionChanged();
718 }; 719 };
719} 720}
720 721
721void KListView::focusOutEvent( QFocusEvent *fe ) 722void KListView::focusOutEvent( QFocusEvent *fe )
722{ 723{
723 cleanDropVisualizer(); 724 cleanDropVisualizer();
724 cleanItemHighlighter(); 725 cleanItemHighlighter();
725 726
726 d->autoSelect.stop(); 727 d->autoSelect.stop();
727 728
728 if ((d->selectedBySimpleMove) 729 if ((d->selectedBySimpleMove)
729 && (d->selectionMode == FileManager) 730 && (d->selectionMode == FileManager)
730 && (fe->reason()!=QFocusEvent::Popup) 731 && (fe->reason()!=QFocusEvent::Popup)
731 && (fe->reason()!=QFocusEvent::ActiveWindow) 732 && (fe->reason()!=QFocusEvent::ActiveWindow)
732 && (currentItem()!=0) 733 && (currentItem()!=0)
733/*US && (!d->editor->isVisible()) */ 734/*US && (!d->editor->isVisible()) */
734 ) 735 )
735 { 736 {
736 currentItem()->setSelected(false); 737 currentItem()->setSelected(false);
737 currentItem()->repaint(); 738 currentItem()->repaint();
738 emit selectionChanged(); 739 emit selectionChanged();
739 }; 740 };
740 741
741 QListView::focusOutEvent( fe ); 742 QListView::focusOutEvent( fe );
742} 743}
743 744
744void KListView::leaveEvent( QEvent *e ) 745void KListView::leaveEvent( QEvent *e )
745{ 746{
746 d->autoSelect.stop(); 747 d->autoSelect.stop();
747 748
748 QListView::leaveEvent( e ); 749 QListView::leaveEvent( e );
749} 750}
750 751
751bool KListView::event( QEvent *e ) 752bool KListView::event( QEvent *e )
752{ 753{
753 if (e->type() == QEvent::ApplicationPaletteChange) { 754 if (e->type() == QEvent::ApplicationPaletteChange) {
754 //qDebug("KListView::event make alternate color configurable"); 755 //qDebug("KListView::event make alternate color configurable");
755//US d->alternateBackground=KGlobalSettings::alternateBackgroundColor(); 756//US d->alternateBackground=KGlobalSettings::alternateBackgroundColor();
756 d->alternateBackground = QColor(240, 240, 240); 757 d->alternateBackground = QColor(240, 240, 240);
757 } 758 }
758 759
759 return QListView::event(e); 760 return QListView::event(e);
760} 761}
761 762
762void KListView::contentsMousePressEvent( QMouseEvent *e ) 763void KListView::contentsMousePressEvent( QMouseEvent *e )
763{ 764{
764 //qDebug("KListView::contentsMousePressEvent"); 765 //qDebug("KListView::contentsMousePressEvent");
765 if( (selectionModeExt() == Extended) && (e->state() & ShiftButton) && !(e->state() & ControlButton) ) 766 if( (selectionModeExt() == Extended) && (e->state() & ShiftButton) && !(e->state() & ControlButton) )
766 { 767 {
767 bool block = signalsBlocked(); 768 bool block = signalsBlocked();
768 blockSignals( true ); 769 blockSignals( true );
769 770
770 clearSelection(); 771 clearSelection();
771 772
772 blockSignals( block ); 773 blockSignals( block );
773 } 774 }
774 else if ((selectionModeExt()==FileManager) && (d->selectedBySimpleMove)) 775 else if ((selectionModeExt()==FileManager) && (d->selectedBySimpleMove))
775 { 776 {
776 d->selectedBySimpleMove=false; 777 d->selectedBySimpleMove=false;
777 d->selectedUsingMouse=true; 778 d->selectedUsingMouse=true;
778 if (currentItem()!=0) 779 if (currentItem()!=0)
779 { 780 {
780 currentItem()->setSelected(false); 781 currentItem()->setSelected(false);
781 currentItem()->repaint(); 782 currentItem()->repaint();
782// emit selectionChanged(); 783// emit selectionChanged();
783 }; 784 };
784 }; 785 };
785 786
786 QPoint p( contentsToViewport( e->pos() ) ); 787 QPoint p( contentsToViewport( e->pos() ) );
787 QListViewItem *at = itemAt (p); 788 QListViewItem *at = itemAt (p);
788 789
789 // true if the root decoration of the item "at" was clicked (i.e. the +/- sign) 790 // true if the root decoration of the item "at" was clicked (i.e. the +/- sign)
790 bool rootDecoClicked = at 791 bool rootDecoClicked = at
791 && ( p.x() <= header()->cellPos( header()->mapToActual( 0 ) ) + 792 && ( p.x() <= header()->cellPos( header()->mapToActual( 0 ) ) +
792 treeStepSize() * ( at->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() ) 793 treeStepSize() * ( at->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() )
793 && ( p.x() >= header()->cellPos( header()->mapToActual( 0 ) ) ); 794 && ( p.x() >= header()->cellPos( header()->mapToActual( 0 ) ) );
794 795
795 if (e->button() == LeftButton && !rootDecoClicked) 796 if (e->button() == LeftButton && !rootDecoClicked)
796 { 797 {
797 //Start a drag 798 //Start a drag
798 d->startDragPos = e->pos(); 799 d->startDragPos = e->pos();
799 800
800 if (at) 801 if (at)
801 { 802 {
802 d->validDrag = true; 803 d->validDrag = true;
803 d->pressedOnSelected = at->isSelected(); 804 d->pressedOnSelected = at->isSelected();
804 } 805 }
805 } 806 }
806 807
807 QListView::contentsMousePressEvent( e ); 808 QListView::contentsMousePressEvent( e );
808} 809}
809 810
810void KListView::contentsMouseMoveEvent( QMouseEvent *e ) 811void KListView::contentsMouseMoveEvent( QMouseEvent *e )
811{ 812{
812 if (!dragEnabled() || d->startDragPos.isNull() || !d->validDrag) { 813 if (!dragEnabled() || d->startDragPos.isNull() || !d->validDrag) {
813 QListView::contentsMouseMoveEvent (e); 814 QListView::contentsMouseMoveEvent (e);
814 return; 815 return;
815 } 816 }
816 817
817 QPoint vp = contentsToViewport(e->pos()); 818 QPoint vp = contentsToViewport(e->pos());
818 QListViewItem *item = itemAt( vp ); 819 QListViewItem *item = itemAt( vp );
819 820
820 //do we process cursor changes at all? 821 //do we process cursor changes at all?
821 if ( item && d->bChangeCursorOverItem && d->bUseSingle ) 822 if ( item && d->bChangeCursorOverItem && d->bUseSingle )
822 { 823 {
823 //Cursor moved on a new item or in/out the execute area 824 //Cursor moved on a new item or in/out the execute area
824 if( (item != d->pCurrentItem) || 825 if( (item != d->pCurrentItem) ||
825 (isExecuteArea(vp) != d->cursorInExecuteArea) ) 826 (isExecuteArea(vp) != d->cursorInExecuteArea) )
826 { 827 {
827 d->cursorInExecuteArea = isExecuteArea(vp); 828 d->cursorInExecuteArea = isExecuteArea(vp);
828 //qDebug("KListView::contentsMouseMoveEvent drag&drop not supported yet"); 829 //qDebug("KListView::contentsMouseMoveEvent drag&drop not supported yet");
829/*US 830/*US
830 if( d->cursorInExecuteArea ) //cursor moved in execute area 831 if( d->cursorInExecuteArea ) //cursor moved in execute area
831 viewport()->setCursor( KCursor::handCursor() ); 832 viewport()->setCursor( KCursor::handCursor() );
832 else //cursor moved out of execute area 833 else //cursor moved out of execute area
833 viewport()->unsetCursor(); 834 viewport()->unsetCursor();
834*/ 835*/
835 } 836 }
836 } 837 }
837 838
838 bool dragOn = dragEnabled(); 839 bool dragOn = dragEnabled();
839 QPoint newPos = e->pos(); 840 QPoint newPos = e->pos();
840 if (dragOn && d->validDrag && 841 if (dragOn && d->validDrag &&
841 (newPos.x() > d->startDragPos.x()+d->dragDelay || 842 (newPos.x() > d->startDragPos.x()+d->dragDelay ||
842 newPos.x() < d->startDragPos.x()-d->dragDelay || 843 newPos.x() < d->startDragPos.x()-d->dragDelay ||
843 newPos.y() > d->startDragPos.y()+d->dragDelay || 844 newPos.y() > d->startDragPos.y()+d->dragDelay ||
844 newPos.y() < d->startDragPos.y()-d->dragDelay)) 845 newPos.y() < d->startDragPos.y()-d->dragDelay))
845 //(d->startDragPos - e->pos()).manhattanLength() > QApplication::startDragDistance()) 846 //(d->startDragPos - e->pos()).manhattanLength() > QApplication::startDragDistance())
846 { 847 {
847 QListView::contentsMouseReleaseEvent( 0 ); 848 QListView::contentsMouseReleaseEvent( 0 );
848 startDrag(); 849 startDrag();
849 d->startDragPos = QPoint(); 850 d->startDragPos = QPoint();
850 d->validDrag = false; 851 d->validDrag = false;
851 } 852 }
852} 853}
853 854
854void KListView::contentsMouseReleaseEvent( QMouseEvent *e ) 855void KListView::contentsMouseReleaseEvent( QMouseEvent *e )
855{ 856{
856 if (e->button() == LeftButton) 857 if (e->button() == LeftButton)
857 { 858 {
858 // If the row was already selected, maybe we want to start an in-place editing 859 // If the row was already selected, maybe we want to start an in-place editing
859 if ( d->pressedOnSelected && itemsRenameable() ) 860 if ( d->pressedOnSelected && itemsRenameable() )
860 { 861 {
861 QPoint p( contentsToViewport( e->pos() ) ); 862 QPoint p( contentsToViewport( e->pos() ) );
862 QListViewItem *at = itemAt (p); 863 QListViewItem *at = itemAt (p);
863 if ( at ) 864 if ( at )
864 { 865 {
865 // true if the root decoration of the item "at" was clicked (i.e. the +/- sign) 866 // true if the root decoration of the item "at" was clicked (i.e. the +/- sign)
866 bool rootDecoClicked = 867 bool rootDecoClicked =
867 ( p.x() <= header()->cellPos( header()->mapToActual( 0 ) ) + 868 ( p.x() <= header()->cellPos( header()->mapToActual( 0 ) ) +
868 treeStepSize() * ( at->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() ) 869 treeStepSize() * ( at->depth() + ( rootIsDecorated() ? 1 : 0) ) + itemMargin() )
869 && ( p.x() >= header()->cellPos( header()->mapToActual( 0 ) ) ); 870 && ( p.x() >= header()->cellPos( header()->mapToActual( 0 ) ) );
870 871
871 if (!rootDecoClicked) 872 if (!rootDecoClicked)
872 { 873 {
873 int col = header()->mapToLogical( header()->cellAt( p.x() ) ); 874 int col = header()->mapToLogical( header()->cellAt( p.x() ) );
874 if ( d->renameable.contains(col) ) 875 if ( d->renameable.contains(col) )
875 rename(at, col); 876 rename(at, col);
876 } 877 }
877 } 878 }
878 } 879 }
879 880
880 d->pressedOnSelected = false; 881 d->pressedOnSelected = false;
881 d->validDrag = false; 882 d->validDrag = false;
882 d->startDragPos = QPoint(); 883 d->startDragPos = QPoint();
883 } 884 }
884 QListView::contentsMouseReleaseEvent( e ); 885 QListView::contentsMouseReleaseEvent( e );
885} 886}
886 887
887void KListView::contentsMouseDoubleClickEvent ( QMouseEvent *e ) 888void KListView::contentsMouseDoubleClickEvent ( QMouseEvent *e )
888{ 889{
889 //qDebug("KListView::contentsMouseDoubleClickEvent"); 890 //qDebug("KListView::contentsMouseDoubleClickEvent");
890 // We don't want to call the parent method because it does setOpen, 891 // We don't want to call the parent method because it does setOpen,
891 // whereas we don't do it in single click mode... (David) 892 // whereas we don't do it in single click mode... (David)
892 //QListView::contentsMouseDoubleClickEvent( e ); 893 //QListView::contentsMouseDoubleClickEvent( e );
893 894
894 QPoint vp = contentsToViewport(e->pos()); 895 QPoint vp = contentsToViewport(e->pos());
895 QListViewItem *item = itemAt( vp ); 896 QListViewItem *item = itemAt( vp );
896 emit QListView::doubleClicked( item ); // we do it now 897 emit QListView::doubleClicked( item ); // we do it now
897 898
898 int col = item ? header()->mapToLogical( header()->cellAt( vp.x() ) ) : -1; 899 int col = item ? header()->mapToLogical( header()->cellAt( vp.x() ) ) : -1;
899 900
900 if( item ) { 901 if( item ) {
901 //qDebug("KListView::contentsMouseDoubleClickEvent: emit doubleClicked"); 902 //qDebug("KListView::contentsMouseDoubleClickEvent: emit doubleClicked");
902 903
903 emit doubleClicked( item, e->globalPos(), col ); 904 emit doubleClicked( item, e->globalPos(), col );
904 905
905 if( (e->button() == LeftButton) && !d->bUseSingle ) { 906 if( (e->button() == LeftButton) && !d->bUseSingle ) {
906 //qDebug("KListView::contentsMouseDoubleClickEvent: emitExecute"); 907 //qDebug("KListView::contentsMouseDoubleClickEvent: emitExecute");
907 908
908 emitExecute( e->button(), item, e->globalPos(), col); 909 emitExecute( e->button(), item, e->globalPos(), col);
909 } 910 }
910 } 911 }
911} 912}
912 913
913void KListView::slotMouseButtonClicked( int btn, QListViewItem *item, const QPoint &pos, int c ) 914void KListView::slotMouseButtonClicked( int btn, QListViewItem *item, const QPoint &pos, int c )
914{ 915{
915 //qDebug("KListView::slotMouseButtonClicked"); 916 //qDebug("KListView::slotMouseButtonClicked");
916 917
917 if( (btn == LeftButton) && item ) { 918 if( (btn == LeftButton) && item ) {
918 //qDebug("KListView::slotMouseButtonClicked: emitExecute"); 919 //qDebug("KListView::slotMouseButtonClicked: emitExecute");
919 920
920 emitExecute(btn, item, pos, c); 921 emitExecute(btn, item, pos, c);
921 } 922 }
922} 923}
923 924
924void KListView::contentsDropEvent(QDropEvent* e) 925void KListView::contentsDropEvent(QDropEvent* e)
925{ 926{
926qDebug("KListView::contentsDropEvent drag&drop not supported yet"); 927qDebug("KListView::contentsDropEvent drag&drop not supported yet");
927/*US 928/*US
928 cleanDropVisualizer(); 929 cleanDropVisualizer();
929 cleanItemHighlighter(); 930 cleanItemHighlighter();
930 d->dragExpand.stop(); 931 d->dragExpand.stop();
931 932
932 if (acceptDrag (e)) 933 if (acceptDrag (e))
933 { 934 {
934 e->acceptAction(); 935 e->acceptAction();
935 QListViewItem *afterme; 936 QListViewItem *afterme;
936 QListViewItem *parent; 937 QListViewItem *parent;
937 findDrop(e->pos(), parent, afterme); 938 findDrop(e->pos(), parent, afterme);
938 939
939 if (e->source() == viewport() && itemsMovable()) 940 if (e->source() == viewport() && itemsMovable())
940 movableDropEvent(parent, afterme); 941 movableDropEvent(parent, afterme);
941 else 942 else
942 { 943 {
943 944
944 emit dropped(e, afterme); 945 emit dropped(e, afterme);
945 emit dropped(this, e, afterme); 946 emit dropped(this, e, afterme);
946 emit dropped(e, parent, afterme); 947 emit dropped(e, parent, afterme);
947 emit dropped(this, e, parent, afterme); 948 emit dropped(this, e, parent, afterme);
948 949
949 } 950 }
950 } 951 }
951*/ 952*/
952 953
953} 954}
954 955
955void KListView::movableDropEvent (QListViewItem* parent, QListViewItem* afterme) 956void KListView::movableDropEvent (QListViewItem* parent, QListViewItem* afterme)
956{ 957{
957 QPtrList<QListViewItem> items, afterFirsts, afterNows; 958 QPtrList<QListViewItem> items, afterFirsts, afterNows;
958 QListViewItem *current=currentItem(); 959 QListViewItem *current=currentItem();
959 bool hasMoved=false; 960 bool hasMoved=false;
960 for (QListViewItem *i = firstChild(), *iNext=0; i != 0; i = iNext) 961 for (QListViewItem *i = firstChild(), *iNext=0; i != 0; i = iNext)
961 { 962 {
962 iNext=i->itemBelow(); 963 iNext=i->itemBelow();
963 if (!i->isSelected()) 964 if (!i->isSelected())
964 continue; 965 continue;
965 966
966 // don't drop an item after itself, or else 967 // don't drop an item after itself, or else
967 // it moves to the top of the list 968 // it moves to the top of the list
968 if (i==afterme) 969 if (i==afterme)
969 continue; 970 continue;
970 971
971 i->setSelected(false); 972 i->setSelected(false);
972 973
973 QListViewItem *afterFirst = i->itemAbove(); 974 QListViewItem *afterFirst = i->itemAbove();
974 975
975 if (!hasMoved) 976 if (!hasMoved)
976 { 977 {
977 emit aboutToMove(); 978 emit aboutToMove();
978 hasMoved=true; 979 hasMoved=true;
979 } 980 }
980 981
981 moveItem(i, parent, afterme); 982 moveItem(i, parent, afterme);
982 983
983 // ###### This should include the new parent !!! -> KDE 3.0 984 // ###### This should include the new parent !!! -> KDE 3.0
984 // If you need this right now, have a look at keditbookmarks. 985 // If you need this right now, have a look at keditbookmarks.
985 emit moved(i, afterFirst, afterme); 986 emit moved(i, afterFirst, afterme);
986 987
987 items.append (i); 988 items.append (i);
988 afterFirsts.append (afterFirst); 989 afterFirsts.append (afterFirst);
989 afterNows.append (afterme); 990 afterNows.append (afterme);
990 991
991 afterme = i; 992 afterme = i;
992 } 993 }
993 clearSelection(); 994 clearSelection();
994 for (QListViewItem *i=items.first(); i != 0; i=items.next() ) 995 for (QListViewItem *i=items.first(); i != 0; i=items.next() )
995 i->setSelected(true); 996 i->setSelected(true);
996 if (current) 997 if (current)
997 setCurrentItem(current); 998 setCurrentItem(current);
998 999
999 emit moved(items,afterFirsts,afterNows); 1000 emit moved(items,afterFirsts,afterNows);
1000 1001
1001 if (firstChild()) 1002 if (firstChild())
1002 emit moved(); 1003 emit moved();
1003} 1004}
1004 1005
1005void KListView::contentsDragMoveEvent(QDragMoveEvent *event) 1006void KListView::contentsDragMoveEvent(QDragMoveEvent *event)
1006{ 1007{
1007 qDebug("KListView::contentsDropEvent drag&drop not supported yet"); 1008 qDebug("KListView::contentsDropEvent drag&drop not supported yet");
1008/*US 1009/*US
1009 if (acceptDrag(event)) 1010 if (acceptDrag(event))
1010 { 1011 {
1011 event->acceptAction(); 1012 event->acceptAction();
1012 //Clean up the view 1013 //Clean up the view
1013 1014
1014 findDrop(event->pos(), d->parentItemDrop, d->afterItemDrop); 1015 findDrop(event->pos(), d->parentItemDrop, d->afterItemDrop);
1015 QPoint vp = contentsToViewport( event->pos() ); 1016 QPoint vp = contentsToViewport( event->pos() );
1016 QListViewItem *item = isExecuteArea( vp ) ? itemAt( vp ) : 0L; 1017 QListViewItem *item = isExecuteArea( vp ) ? itemAt( vp ) : 0L;
1017 1018
1018 if ( item != d->dragOverItem ) 1019 if ( item != d->dragOverItem )
1019 { 1020 {
1020 d->dragExpand.stop(); 1021 d->dragExpand.stop();
1021 d->dragOverItem = item; 1022 d->dragOverItem = item;
1022 d->dragOverPoint = vp; 1023 d->dragOverPoint = vp;
1023 if ( d->dragOverItem && d->dragOverItem->isExpandable() && !d->dragOverItem->isOpen() ) 1024 if ( d->dragOverItem && d->dragOverItem->isExpandable() && !d->dragOverItem->isOpen() )
1024 d->dragExpand.start( QApplication::startDragTime(), true ); 1025 d->dragExpand.start( QApplication::startDragTime(), true );
1025 } 1026 }
1026 if (dropVisualizer()) 1027 if (dropVisualizer())
1027 { 1028 {
1028 QRect tmpRect = drawDropVisualizer(0, d->parentItemDrop, d->afterItemDrop); 1029 QRect tmpRect = drawDropVisualizer(0, d->parentItemDrop, d->afterItemDrop);
1029 if (tmpRect != d->mOldDropVisualizer) 1030 if (tmpRect != d->mOldDropVisualizer)
1030 { 1031 {
1031 cleanDropVisualizer(); 1032 cleanDropVisualizer();
1032 d->mOldDropVisualizer=tmpRect; 1033 d->mOldDropVisualizer=tmpRect;
1033 viewport()->repaint(tmpRect); 1034 viewport()->repaint(tmpRect);
1034 } 1035 }
1035 } 1036 }
1036 if (dropHighlighter()) 1037 if (dropHighlighter())
1037 { 1038 {
1038 QRect tmpRect = drawItemHighlighter(0, d->afterItemDrop); 1039 QRect tmpRect = drawItemHighlighter(0, d->afterItemDrop);
1039 if (tmpRect != d->mOldDropHighlighter) 1040 if (tmpRect != d->mOldDropHighlighter)
1040 { 1041 {
1041 cleanItemHighlighter(); 1042 cleanItemHighlighter();
1042 d->mOldDropHighlighter=tmpRect; 1043 d->mOldDropHighlighter=tmpRect;
1043 viewport()->repaint(tmpRect); 1044 viewport()->repaint(tmpRect);
1044 } 1045 }
1045 } 1046 }
1046 } 1047 }
1047 else 1048 else
1048 event->ignore(); 1049 event->ignore();
1049*/ 1050*/
1050} 1051}
1051 1052
1052void KListView::slotDragExpand() 1053void KListView::slotDragExpand()
1053{ 1054{
1054 if ( itemAt( d->dragOverPoint ) == d->dragOverItem ) 1055 if ( itemAt( d->dragOverPoint ) == d->dragOverItem )
1055 d->dragOverItem->setOpen( true ); 1056 d->dragOverItem->setOpen( true );
1056} 1057}
1057 1058
1058void KListView::contentsDragLeaveEvent (QDragLeaveEvent*) 1059void KListView::contentsDragLeaveEvent (QDragLeaveEvent*)
1059{ 1060{
1060 d->dragExpand.stop(); 1061 d->dragExpand.stop();
1061 cleanDropVisualizer(); 1062 cleanDropVisualizer();
1062 cleanItemHighlighter(); 1063 cleanItemHighlighter();
1063} 1064}
1064 1065
1065void KListView::cleanDropVisualizer() 1066void KListView::cleanDropVisualizer()
1066{ 1067{
1067 if (d->mOldDropVisualizer.isValid()) 1068 if (d->mOldDropVisualizer.isValid())
1068 { 1069 {
1069 QRect rect=d->mOldDropVisualizer; 1070 QRect rect=d->mOldDropVisualizer;
1070 d->mOldDropVisualizer = QRect(); 1071 d->mOldDropVisualizer = QRect();
1071 viewport()->repaint(rect, true); 1072 viewport()->repaint(rect, true);
1072 } 1073 }
1073} 1074}
1074 1075
1075int KListView::depthToPixels( int depth ) 1076int KListView::depthToPixels( int depth )
1076{ 1077{
1077 return treeStepSize() * ( depth + (rootIsDecorated() ? 1 : 0) ) + itemMargin(); 1078 return treeStepSize() * ( depth + (rootIsDecorated() ? 1 : 0) ) + itemMargin();
1078} 1079}
1079 1080
1080void KListView::findDrop(const QPoint &pos, QListViewItem *&parent, QListViewItem *&after) 1081void KListView::findDrop(const QPoint &pos, QListViewItem *&parent, QListViewItem *&after)
1081{ 1082{
1082 QPoint p (contentsToViewport(pos)); 1083 QPoint p (contentsToViewport(pos));
1083 1084
1084 // Get the position to put it in 1085 // Get the position to put it in
1085 QListViewItem *atpos = itemAt(p); 1086 QListViewItem *atpos = itemAt(p);
1086 1087
1087 QListViewItem *above; 1088 QListViewItem *above;
1088 if (!atpos) // put it at the end 1089 if (!atpos) // put it at the end
1089 above = lastItem(); 1090 above = lastItem();
1090 else 1091 else
1091 { 1092 {
1092 // Get the closest item before us ('atpos' or the one above, if any) 1093 // Get the closest item before us ('atpos' or the one above, if any)
1093 if (p.y() - itemRect(atpos).topLeft().y() < (atpos->height()/2)) 1094 if (p.y() - itemRect(atpos).topLeft().y() < (atpos->height()/2))
1094 above = atpos->itemAbove(); 1095 above = atpos->itemAbove();
1095 else 1096 else
1096 above = atpos; 1097 above = atpos;
1097 } 1098 }
1098 1099
1099 if (above) 1100 if (above)
1100 { 1101 {
1101 // Now, we know we want to go after "above". But as a child or as a sibling ? 1102 // Now, we know we want to go after "above". But as a child or as a sibling ?
1102 // We have to ask the "above" item if it accepts children. 1103 // We have to ask the "above" item if it accepts children.
1103 if (above->isExpandable()) 1104 if (above->isExpandable())
1104 { 1105 {
1105 // The mouse is sufficiently on the right ? - doesn't matter if 'above' has visible children 1106 // The mouse is sufficiently on the right ? - doesn't matter if 'above' has visible children
1106 if (p.x() >= depthToPixels( above->depth() + 1 ) || 1107 if (p.x() >= depthToPixels( above->depth() + 1 ) ||
1107 (above->isOpen() && above->childCount() > 0) ) 1108 (above->isOpen() && above->childCount() > 0) )
1108 { 1109 {
1109 parent = above; 1110 parent = above;
1110 after = 0L; 1111 after = 0L;
1111 return; 1112 return;
1112 } 1113 }
1113 } 1114 }
1114 1115
1115 // Ok, there's one more level of complexity. We may want to become a new 1116 // Ok, there's one more level of complexity. We may want to become a new
1116 // sibling, but of an upper-level group, rather than the "above" item 1117 // sibling, but of an upper-level group, rather than the "above" item
1117 QListViewItem * betterAbove = above->parent(); 1118 QListViewItem * betterAbove = above->parent();
1118 QListViewItem * last = above; 1119 QListViewItem * last = above;
1119 while ( betterAbove ) 1120 while ( betterAbove )
1120 { 1121 {
1121 // We are allowed to become a sibling of "betterAbove" only if we are 1122 // We are allowed to become a sibling of "betterAbove" only if we are
1122 // after its last child 1123 // after its last child
1123 if ( last->nextSibling() == 0 ) 1124 if ( last->nextSibling() == 0 )
1124 { 1125 {
1125 if (p.x() < depthToPixels ( betterAbove->depth() + 1 )) 1126 if (p.x() < depthToPixels ( betterAbove->depth() + 1 ))
1126 above = betterAbove; // store this one, but don't stop yet, there may be a better one 1127 above = betterAbove; // store this one, but don't stop yet, there may be a better one
1127 else 1128 else
1128 break; // not enough on the left, so stop 1129 break; // not enough on the left, so stop
1129 last = betterAbove; 1130 last = betterAbove;
1130 betterAbove = betterAbove->parent(); // up one level 1131 betterAbove = betterAbove->parent(); // up one level
1131 } else 1132 } else
1132 break; // we're among the child of betterAbove, not after the last one 1133 break; // we're among the child of betterAbove, not after the last one
1133 } 1134 }
1134 } 1135 }
1135 // set as sibling 1136 // set as sibling
1136 after = above; 1137 after = above;
1137 parent = after ? after->parent() : 0L ; 1138 parent = after ? after->parent() : 0L ;
1138} 1139}
1139 1140
1140QListViewItem* KListView::lastChild () const 1141QListViewItem* KListView::lastChild () const
1141{ 1142{
1142 QListViewItem* lastchild = firstChild(); 1143 QListViewItem* lastchild = firstChild();
1143 1144
1144 if (lastchild) 1145 if (lastchild)
1145 for (; lastchild->nextSibling(); lastchild = lastchild->nextSibling()); 1146 for (; lastchild->nextSibling(); lastchild = lastchild->nextSibling());
1146 1147
1147 return lastchild; 1148 return lastchild;
1148} 1149}
1149 1150
1150QListViewItem *KListView::lastItem() const 1151QListViewItem *KListView::lastItem() const
1151{ 1152{
1152 QListViewItem* last = lastChild(); 1153 QListViewItem* last = lastChild();
1153 1154
1154 for (QListViewItemIterator it (last); it.current(); ++it) 1155 for (QListViewItemIterator it (last); it.current(); ++it)
1155 last = it.current(); 1156 last = it.current();
1156 1157
1157 return last; 1158 return last;
1158} 1159}
1159 1160
1160KLineEdit *KListView::renameLineEdit() const 1161KLineEdit *KListView::renameLineEdit() const
1161{ 1162{
1162//US return d->editor; 1163//US return d->editor;
1163qDebug("KListView::renameLineEdit returns 0. Might crash"); 1164qDebug("KListView::renameLineEdit returns 0. Might crash");
1164return 0; 1165return 0;
1165} 1166}
1166 1167
1167void KListView::startDrag() 1168void KListView::startDrag()
1168{ 1169{
1169qDebug("KListView::startDrag drag&drop not supported yet."); 1170qDebug("KListView::startDrag drag&drop not supported yet.");
1170/*US 1171/*US
1171 QDragObject *drag = dragObject(); 1172 QDragObject *drag = dragObject();
1172 1173
1173 if (!drag) 1174 if (!drag)
1174 return; 1175 return;
1175 1176
1176 if (drag->drag() && drag->target() != viewport()) 1177 if (drag->drag() && drag->target() != viewport())
1177 emit moved(); 1178 emit moved();
1178*/ 1179*/
1179} 1180}
1180 1181
1181QDragObject *KListView::dragObject() 1182QDragObject *KListView::dragObject()
1182{ 1183{
1183 if (!currentItem()) 1184 if (!currentItem())
1184 return 0; 1185 return 0;
1185 1186
1186 return new QStoredDrag("application/x-qlistviewitem", viewport()); 1187 return new QStoredDrag("application/x-qlistviewitem", viewport());
1187} 1188}
1188 1189
1189void KListView::setItemsMovable(bool b) 1190void KListView::setItemsMovable(bool b)
1190{ 1191{
1191 d->itemsMovable=b; 1192 d->itemsMovable=b;
1192} 1193}
1193 1194
1194bool KListView::itemsMovable() const 1195bool KListView::itemsMovable() const
1195{ 1196{
1196 return d->itemsMovable; 1197 return d->itemsMovable;
1197} 1198}
1198 1199
1199void KListView::setItemsRenameable(bool b) 1200void KListView::setItemsRenameable(bool b)
1200{ 1201{
1201 d->itemsRenameable=b; 1202 d->itemsRenameable=b;
1202} 1203}
1203 1204
1204bool KListView::itemsRenameable() const 1205bool KListView::itemsRenameable() const
1205{ 1206{
1206 return d->itemsRenameable; 1207 return d->itemsRenameable;
1207} 1208}
1208 1209
1209 1210
1210void KListView::setDragEnabled(bool b) 1211void KListView::setDragEnabled(bool b)
1211{ 1212{
1212 d->dragEnabled=b; 1213 d->dragEnabled=b;
1213} 1214}
1214 1215
1215bool KListView::dragEnabled() const 1216bool KListView::dragEnabled() const
1216{ 1217{
1217 return d->dragEnabled; 1218 return d->dragEnabled;
1218} 1219}
1219 1220
1220void KListView::setAutoOpen(bool b) 1221void KListView::setAutoOpen(bool b)
1221{ 1222{
1222 d->autoOpen=b; 1223 d->autoOpen=b;
1223} 1224}
1224 1225
1225bool KListView::autoOpen() const 1226bool KListView::autoOpen() const
1226{ 1227{
1227 return d->autoOpen; 1228 return d->autoOpen;
1228} 1229}
1229 1230
1230bool KListView::dropVisualizer() const 1231bool KListView::dropVisualizer() const
1231{ 1232{
1232 return d->dropVisualizer; 1233 return d->dropVisualizer;
1233} 1234}
1234 1235
1235void KListView::setDropVisualizer(bool b) 1236void KListView::setDropVisualizer(bool b)
1236{ 1237{
1237 d->dropVisualizer=b; 1238 d->dropVisualizer=b;
1238} 1239}
1239 1240
1240QPtrList<QListViewItem> KListView::selectedItems() const 1241QPtrList<QListViewItem> KListView::selectedItems() const
1241{ 1242{
1242 QPtrList<QListViewItem> list; 1243 QPtrList<QListViewItem> list;
1243 for (QListViewItem *i=firstChild(); i!=0; i=i->itemBelow()) 1244 for (QListViewItem *i=firstChild(); i!=0; i=i->itemBelow())
1244 if (i->isSelected()) list.append(i); 1245 if (i->isSelected()) list.append(i);
1245 return list; 1246 return list;
1246} 1247}
1247 1248
1248 1249
1249void KListView::moveItem(QListViewItem *item, QListViewItem *parent, QListViewItem *after) 1250void KListView::moveItem(QListViewItem *item, QListViewItem *parent, QListViewItem *after)
1250{ 1251{
1251 // sanity check - don't move a item into it's own child structure 1252 // sanity check - don't move a item into it's own child structure
1252 QListViewItem *i = parent; 1253 QListViewItem *i = parent;
1253 while(i) 1254 while(i)
1254 { 1255 {
1255 if(i == item) 1256 if(i == item)
1256 return; 1257 return;
1257 i = i->parent(); 1258 i = i->parent();
1258 } 1259 }
1259 1260
1260 // Basically reimplementing the QListViewItem(QListViewItem*, QListViewItem*) constructor 1261 // Basically reimplementing the QListViewItem(QListViewItem*, QListViewItem*) constructor
1261 // in here, without ever deleting the item. 1262 // in here, without ever deleting the item.
1262 if (item->parent()) 1263 if (item->parent())
1263 item->parent()->takeItem(item); 1264 item->parent()->takeItem(item);
1264 else 1265 else
1265 takeItem(item); 1266 takeItem(item);
1266 1267
1267 if (parent) 1268 if (parent)
1268 parent->insertItem(item); 1269 parent->insertItem(item);
1269 else 1270 else
1270 insertItem(item); 1271 insertItem(item);
1271 1272
1272 if (after) 1273 if (after)
1273 ;//item->moveToJustAfter(after); 1274 ;//item->moveToJustAfter(after);
1274} 1275}
1275 1276
1276void KListView::contentsDragEnterEvent(QDragEnterEvent *event) 1277void KListView::contentsDragEnterEvent(QDragEnterEvent *event)
1277{ 1278{
1278qDebug("KListView::contentsDragEnterEvent drag&drop not supported yet."); 1279qDebug("KListView::contentsDragEnterEvent drag&drop not supported yet.");
1279/*US 1280/*US
1280 if (acceptDrag (event)) 1281 if (acceptDrag (event))
1281 event->accept(); 1282 event->accept();
1282*/ 1283*/
1283} 1284}
1284 1285
1285void KListView::setDropVisualizerWidth (int w) 1286void KListView::setDropVisualizerWidth (int w)
1286{ 1287{
1287 d->mDropVisualizerWidth = w > 0 ? w : 1; 1288 d->mDropVisualizerWidth = w > 0 ? w : 1;
1288} 1289}
1289 1290
1290QRect KListView::drawDropVisualizer(QPainter *p, QListViewItem *parent, 1291QRect KListView::drawDropVisualizer(QPainter *p, QListViewItem *parent,
1291 QListViewItem *after) 1292 QListViewItem *after)
1292{ 1293{
1293 QRect insertmarker; 1294 QRect insertmarker;
1294 1295
1295 if (!after && !parent) 1296 if (!after && !parent)
1296 insertmarker = QRect (0, 0, viewport()->width(), d->mDropVisualizerWidth/2); 1297 insertmarker = QRect (0, 0, viewport()->width(), d->mDropVisualizerWidth/2);
1297 else 1298 else
1298 { 1299 {
1299 int level = 0; 1300 int level = 0;
1300 if (after) 1301 if (after)
1301 { 1302 {
1302 QListViewItem* it = 0L; 1303 QListViewItem* it = 0L;
1303 if (after->isOpen()) 1304 if (after->isOpen())
1304 { 1305 {
1305 // Look for the last child (recursively) 1306 // Look for the last child (recursively)
1306 it = after->firstChild(); 1307 it = after->firstChild();
1307 if (it) 1308 if (it)
1308 while (it->nextSibling() || it->firstChild()) 1309 while (it->nextSibling() || it->firstChild())
1309 if ( it->nextSibling() ) 1310 if ( it->nextSibling() )
1310 it = it->nextSibling(); 1311 it = it->nextSibling();
1311 else 1312 else
1312 it = it->firstChild(); 1313 it = it->firstChild();
1313 } 1314 }
1314 1315
1315 insertmarker = itemRect (it ? it : after); 1316 insertmarker = itemRect (it ? it : after);
1316 level = after->depth(); 1317 level = after->depth();
1317 } 1318 }
1318 else if (parent) 1319 else if (parent)
1319 { 1320 {
1320 insertmarker = itemRect (parent); 1321 insertmarker = itemRect (parent);
1321 level = parent->depth() + 1; 1322 level = parent->depth() + 1;
1322 } 1323 }
1323 insertmarker.setLeft( treeStepSize() * ( level + (rootIsDecorated() ? 1 : 0) ) + itemMargin() ); 1324 insertmarker.setLeft( treeStepSize() * ( level + (rootIsDecorated() ? 1 : 0) ) + itemMargin() );
1324 insertmarker.setRight (viewport()->width()); 1325 insertmarker.setRight (viewport()->width());
1325 insertmarker.setTop (insertmarker.bottom() - d->mDropVisualizerWidth/2 + 1); 1326 insertmarker.setTop (insertmarker.bottom() - d->mDropVisualizerWidth/2 + 1);
1326 insertmarker.setBottom (insertmarker.bottom() + d->mDropVisualizerWidth/2); 1327 insertmarker.setBottom (insertmarker.bottom() + d->mDropVisualizerWidth/2);
1327 } 1328 }
1328 1329
1329 // This is not used anymore, at least by KListView itself (see viewportPaintEvent) 1330 // This is not used anymore, at least by KListView itself (see viewportPaintEvent)
1330 // Remove for KDE 3.0. 1331 // Remove for KDE 3.0.
1331 if (p) 1332 if (p)
1332 p->fillRect(insertmarker, Dense4Pattern); 1333 p->fillRect(insertmarker, Dense4Pattern);
1333 1334
1334 return insertmarker; 1335 return insertmarker;
1335} 1336}
1336 1337
1337QRect KListView::drawItemHighlighter(QPainter *painter, QListViewItem *item) 1338QRect KListView::drawItemHighlighter(QPainter *painter, QListViewItem *item)
1338{ 1339{
1339 QRect r; 1340 QRect r;
1340 1341
1341 if (item) 1342 if (item)
1342 { 1343 {
1343 r = itemRect(item); 1344 r = itemRect(item);
1344 r.setLeft(r.left()+(item->depth()+1)*treeStepSize()); 1345 r.setLeft(r.left()+(item->depth()+1)*treeStepSize());
1345 if (painter) { 1346 if (painter) {
1346//US style().drawPrimitive(QStyle::PE_FocusRect, painter, r, colorGroup(), 1347//US style().drawPrimitive(QStyle::PE_FocusRect, painter, r, colorGroup(),
1347//US QStyle::Style_FocusAtBorder, colorGroup().highlight()); 1348//US QStyle::Style_FocusAtBorder, colorGroup().highlight());
1348 const QColor* pHighl = &(colorGroup().highlight()); 1349 const QColor* pHighl = &(colorGroup().highlight());
1349 //LR style().drawFocusRect(painter, r, colorGroup(), pHighl, true); 1350 //LR style().drawFocusRect(painter, r, colorGroup(), pHighl, true);
1350 1351
1351qDebug("KListView::drawItemHighlighter has to be verified"); 1352qDebug("KListView::drawItemHighlighter has to be verified");
1352 1353
1353 } 1354 }
1354 1355
1355 } 1356 }
1356 1357
1357 return r; 1358 return r;
1358} 1359}
1359 1360
1360void KListView::cleanItemHighlighter () 1361void KListView::cleanItemHighlighter ()
1361{ 1362{
1362 if (d->mOldDropHighlighter.isValid()) 1363 if (d->mOldDropHighlighter.isValid())
1363 { 1364 {
1364 QRect rect=d->mOldDropHighlighter; 1365 QRect rect=d->mOldDropHighlighter;
1365 d->mOldDropHighlighter = QRect(); 1366 d->mOldDropHighlighter = QRect();
1366 viewport()->repaint(rect, true); 1367 viewport()->repaint(rect, true);
1367 } 1368 }
1368} 1369}
1369 1370
1370void KListView::rename(QListViewItem *item, int c) 1371void KListView::rename(QListViewItem *item, int c)
1371{ 1372{
1372 if (d->renameable.contains(c)) 1373 if (d->renameable.contains(c))
1373 { 1374 {
1374 ensureItemVisible(item); 1375 ensureItemVisible(item);
1375//US d->editor->load(item,c); 1376//US d->editor->load(item,c);
1376qDebug("KListView::rename has to be verified"); 1377qDebug("KListView::rename has to be verified");
1377 1378
1378 } 1379 }
1379} 1380}
1380 1381
1381bool KListView::isRenameable (int col) const 1382bool KListView::isRenameable (int col) const
1382{ 1383{
1383 return d->renameable.contains(col); 1384 return d->renameable.contains(col);
1384} 1385}
1385 1386
1386void KListView::setRenameable (int col, bool yesno) 1387void KListView::setRenameable (int col, bool yesno)
1387{ 1388{
1388 if (col>=header()->count()) return; 1389 if (col>=header()->count()) return;
1389 1390
1390 d->renameable.remove(col); 1391 d->renameable.remove(col);
1391 if (yesno && d->renameable.find(col)==d->renameable.end()) 1392 if (yesno && d->renameable.find(col)==d->renameable.end())
1392 d->renameable+=col; 1393 d->renameable+=col;
1393 else if (!yesno && d->renameable.find(col)!=d->renameable.end()) 1394 else if (!yesno && d->renameable.find(col)!=d->renameable.end())
1394 d->renameable.remove(col); 1395 d->renameable.remove(col);
1395} 1396}
1396 1397
1397void KListView::doneEditing(QListViewItem *item, int row) 1398void KListView::doneEditing(QListViewItem *item, int row)
1398{ 1399{
1399 emit itemRenamed(item, item->text(row), row); 1400 emit itemRenamed(item, item->text(row), row);
1400 emit itemRenamed(item); 1401 emit itemRenamed(item);
1401} 1402}
1402 1403
1403bool KListView::acceptDrag(QDropEvent* e) const 1404bool KListView::acceptDrag(QDropEvent* e) const
1404{ 1405{
1405qDebug("KListView::acceptDrag drag&drop not supported yet"); 1406qDebug("KListView::acceptDrag drag&drop not supported yet");
1406//US return acceptDrops() && itemsMovable() && (e->source()==viewport()); 1407//US return acceptDrops() && itemsMovable() && (e->source()==viewport());
1407return false; 1408return false;
1408} 1409}
1409 1410
1410void KListView::setCreateChildren(bool b) 1411void KListView::setCreateChildren(bool b)
1411{ 1412{
1412 d->createChildren=b; 1413 d->createChildren=b;
1413} 1414}
1414 1415
1415bool KListView::createChildren() const 1416bool KListView::createChildren() const
1416{ 1417{
1417 return d->createChildren; 1418 return d->createChildren;
1418} 1419}
1419 1420
1420 1421
1421int KListView::tooltipColumn() const 1422int KListView::tooltipColumn() const
1422{ 1423{
1423 return d->tooltipColumn; 1424 return d->tooltipColumn;
1424} 1425}
1425 1426
1426void KListView::setTooltipColumn(int column) 1427void KListView::setTooltipColumn(int column)
1427{ 1428{
1428 d->tooltipColumn=column; 1429 d->tooltipColumn=column;
1429} 1430}
1430 1431
1431void KListView::setDropHighlighter(bool b) 1432void KListView::setDropHighlighter(bool b)
1432{ 1433{
1433 d->dropHighlighter=b; 1434 d->dropHighlighter=b;
1434} 1435}
1435 1436
1436bool KListView::dropHighlighter() const 1437bool KListView::dropHighlighter() const
1437{ 1438{
1438 return d->dropHighlighter; 1439 return d->dropHighlighter;
1439} 1440}
1440 1441
1441bool KListView::showTooltip(QListViewItem *item, const QPoint &, int column) const 1442bool KListView::showTooltip(QListViewItem *item, const QPoint &, int column) const
1442{ 1443{
1443 return ((tooltip(item, column).length()>0) && (column==tooltipColumn())); 1444 return ((tooltip(item, column).length()>0) && (column==tooltipColumn()));
1444} 1445}
1445 1446
1446QString KListView::tooltip(QListViewItem *item, int column) const 1447QString KListView::tooltip(QListViewItem *item, int column) const
1447{ 1448{
1448 return item->text(column); 1449 return item->text(column);
1449} 1450}
1450 1451
1451void KListView::setTabOrderedRenaming(bool b) 1452void KListView::setTabOrderedRenaming(bool b)
1452{ 1453{
1453 d->tabRename = b; 1454 d->tabRename = b;
1454} 1455}
1455 1456
1456bool KListView::tabOrderedRenaming() const 1457bool KListView::tabOrderedRenaming() const
1457{ 1458{
1458 return d->tabRename; 1459 return d->tabRename;
1459} 1460}
1460 1461
1461void KListView::keyPressEvent (QKeyEvent* e) 1462void KListView::keyPressEvent (QKeyEvent* e)
1462{ 1463{
1463 //don't we need a contextMenuModifier too ? (aleXXX) 1464 //don't we need a contextMenuModifier too ? (aleXXX)
1464 if (e->key() == d->contextMenuKey) 1465 if (e->key() == d->contextMenuKey)
1465 { 1466 {
1466 emit menuShortCutPressed (this, currentItem()); 1467 emit menuShortCutPressed (this, currentItem());
1467 return; 1468 return;
1468 } 1469 }
1469 if (e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace) 1470 if (e->key() == Qt::Key_Delete || e->key() == Qt::Key_Backspace)
1470 { 1471 {
1471 emit signalDelete ( ); 1472 emit signalDelete ( );
1472 return; 1473 return;
1473 } 1474 }
1474 1475
1475 if (d->selectionMode != FileManager) 1476 if (d->selectionMode != FileManager)
1476 QListView::keyPressEvent (e); 1477 QListView::keyPressEvent (e);
1477 else 1478 else
1478 fileManagerKeyPressEvent (e); 1479 fileManagerKeyPressEvent (e);
1479} 1480}
1480 1481
1481void KListView::activateAutomaticSelection() 1482void KListView::activateAutomaticSelection()
1482{ 1483{
1483 d->selectedBySimpleMove=true; 1484 d->selectedBySimpleMove=true;
1484 d->selectedUsingMouse=false; 1485 d->selectedUsingMouse=false;
1485 if (currentItem()!=0) 1486 if (currentItem()!=0)
1486 { 1487 {
1487 selectAll(false); 1488 selectAll(false);
1488 currentItem()->setSelected(true); 1489 currentItem()->setSelected(true);
1489 currentItem()->repaint(); 1490 currentItem()->repaint();
1490 emit selectionChanged(); 1491 emit selectionChanged();
1491 }; 1492 };
1492} 1493}
1493 1494
1494void KListView::deactivateAutomaticSelection() 1495void KListView::deactivateAutomaticSelection()
1495{ 1496{
1496 d->selectedBySimpleMove=false; 1497 d->selectedBySimpleMove=false;
1497} 1498}
1498 1499
1499bool KListView::automaticSelection() const 1500bool KListView::automaticSelection() const
1500{ 1501{
1501 return d->selectedBySimpleMove; 1502 return d->selectedBySimpleMove;
1502} 1503}
1503 1504
1504void KListView::fileManagerKeyPressEvent (QKeyEvent* e) 1505void KListView::fileManagerKeyPressEvent (QKeyEvent* e)
1505{ 1506{
1506 //don't care whether it's on the keypad or not 1507 //don't care whether it's on the keypad or not
1507 int e_state=(e->state() & ~Keypad); 1508 int e_state=(e->state() & ~Keypad);
1508 1509
1509 int oldSelectionDirection(d->selectionDirection); 1510 int oldSelectionDirection(d->selectionDirection);
1510 1511
1511 if ((e->key()!=Key_Shift) && (e->key()!=Key_Control) 1512 if ((e->key()!=Key_Shift) && (e->key()!=Key_Control)
1512 && (e->key()!=Key_Meta) && (e->key()!=Key_Alt)) 1513 && (e->key()!=Key_Meta) && (e->key()!=Key_Alt))
1513 { 1514 {
1514 if ((e_state==ShiftButton) && (!d->wasShiftEvent) && (!d->selectedBySimpleMove)) 1515 if ((e_state==ShiftButton) && (!d->wasShiftEvent) && (!d->selectedBySimpleMove))
1515 selectAll(FALSE); 1516 selectAll(FALSE);
1516 d->selectionDirection=0; 1517 d->selectionDirection=0;
1517 d->wasShiftEvent = (e_state == ShiftButton); 1518 d->wasShiftEvent = (e_state == ShiftButton);
1518 }; 1519 };
1519 1520
1520 //d->wasShiftEvent = (e_state == ShiftButton); 1521 //d->wasShiftEvent = (e_state == ShiftButton);
1521 1522
1522 1523
1523 QListViewItem* item = currentItem(); 1524 QListViewItem* item = currentItem();
1524 if (item==0) return; 1525 if (item==0) return;
1525 1526
1526 QListViewItem* repaintItem1 = item; 1527 QListViewItem* repaintItem1 = item;
1527 QListViewItem* repaintItem2 = 0L; 1528 QListViewItem* repaintItem2 = 0L;
1528 QListViewItem* visItem = 0L; 1529 QListViewItem* visItem = 0L;
1529 1530
1530 QListViewItem* nextItem = 0L; 1531 QListViewItem* nextItem = 0L;
1531 int items = 0; 1532 int items = 0;
1532 1533
1533 bool shiftOrCtrl((e_state==ControlButton) || (e_state==ShiftButton)); 1534 bool shiftOrCtrl((e_state==ControlButton) || (e_state==ShiftButton));
1534 int selectedItems(0); 1535 int selectedItems(0);
1535 for (QListViewItem *tmpItem=firstChild(); tmpItem!=0; tmpItem=tmpItem->nextSibling()) 1536 for (QListViewItem *tmpItem=firstChild(); tmpItem!=0; tmpItem=tmpItem->nextSibling())
1536 if (tmpItem->isSelected()) selectedItems++; 1537 if (tmpItem->isSelected()) selectedItems++;
1537 1538
1538 if (((selectedItems==0) || ((selectedItems==1) && (d->selectedUsingMouse))) 1539 if (((selectedItems==0) || ((selectedItems==1) && (d->selectedUsingMouse)))
1539 && (e_state==NoButton) 1540 && (e_state==NoButton)
1540 && ((e->key()==Key_Down) 1541 && ((e->key()==Key_Down)
1541 || (e->key()==Key_Up) 1542 || (e->key()==Key_Up)
1542 || (e->key()==Key_Next) 1543 || (e->key()==Key_Next)
1543 || (e->key()==Key_Prior) 1544 || (e->key()==Key_Prior)
1544 || (e->key()==Key_Home) 1545 || (e->key()==Key_Home)
1545 || (e->key()==Key_End))) 1546 || (e->key()==Key_End)))
1546 { 1547 {
1547 d->selectedBySimpleMove=true; 1548 d->selectedBySimpleMove=true;
1548 d->selectedUsingMouse=false; 1549 d->selectedUsingMouse=false;
1549 } 1550 }
1550 else if (selectedItems>1) 1551 else if (selectedItems>1)
1551 d->selectedBySimpleMove=false; 1552 d->selectedBySimpleMove=false;
1552 1553
1553 bool emitSelectionChanged(false); 1554 bool emitSelectionChanged(false);
1554 1555
1555 switch (e->key()) 1556 switch (e->key())
1556 { 1557 {
1557 case Key_Escape: 1558 case Key_Escape:
1558 selectAll(FALSE); 1559 selectAll(FALSE);
1559 emitSelectionChanged=TRUE; 1560 emitSelectionChanged=TRUE;
1560 break; 1561 break;
1561 1562
1562 case Key_Space: 1563 case Key_Space:
1563 //toggle selection of current item 1564 //toggle selection of current item
1564 if (d->selectedBySimpleMove) 1565 if (d->selectedBySimpleMove)
1565 d->selectedBySimpleMove=false; 1566 d->selectedBySimpleMove=false;
1566 item->setSelected(!item->isSelected()); 1567 item->setSelected(!item->isSelected());
1567 emitSelectionChanged=TRUE; 1568 emitSelectionChanged=TRUE;
1568 break; 1569 break;
1569 1570
1570 case Key_Insert: 1571 case Key_Insert:
1571 //toggle selection of current item and move to the next item 1572 //toggle selection of current item and move to the next item
1572 if (d->selectedBySimpleMove) 1573 if (d->selectedBySimpleMove)
1573 { 1574 {
1574 d->selectedBySimpleMove=false; 1575 d->selectedBySimpleMove=false;
1575 if (!item->isSelected()) item->setSelected(TRUE); 1576 if (!item->isSelected()) item->setSelected(TRUE);
1576 } 1577 }
1577 else 1578 else
1578 { 1579 {
1579 item->setSelected(!item->isSelected()); 1580 item->setSelected(!item->isSelected());
1580 }; 1581 };
1581 1582
1582 nextItem=item->itemBelow(); 1583 nextItem=item->itemBelow();
1583 1584
1584 if (nextItem!=0) 1585 if (nextItem!=0)
1585 { 1586 {
1586 repaintItem2=nextItem; 1587 repaintItem2=nextItem;
1587 visItem=nextItem; 1588 visItem=nextItem;
1588 setCurrentItem(nextItem); 1589 setCurrentItem(nextItem);
1589 }; 1590 };
1590 d->selectionDirection=1; 1591 d->selectionDirection=1;
1591 emitSelectionChanged=TRUE; 1592 emitSelectionChanged=TRUE;
1592 break; 1593 break;
1593 1594
1594 case Key_Down: 1595 case Key_Down:
1595 nextItem=item->itemBelow(); 1596 nextItem=item->itemBelow();
1596 //toggle selection of current item and move to the next item 1597 //toggle selection of current item and move to the next item
1597 if (shiftOrCtrl) 1598 if (shiftOrCtrl)
1598 { 1599 {
1599 d->selectionDirection=1; 1600 d->selectionDirection=1;
1600 if (d->selectedBySimpleMove) 1601 if (d->selectedBySimpleMove)
1601 d->selectedBySimpleMove=false; 1602 d->selectedBySimpleMove=false;
1602 else 1603 else
1603 { 1604 {
1604 if (oldSelectionDirection!=-1) 1605 if (oldSelectionDirection!=-1)
1605 { 1606 {
1606 item->setSelected(!item->isSelected()); 1607 item->setSelected(!item->isSelected());
1607 emitSelectionChanged=TRUE; 1608 emitSelectionChanged=TRUE;
1608 }; 1609 };
1609 }; 1610 };
1610 } 1611 }
1611 else if ((d->selectedBySimpleMove) && (nextItem!=0)) 1612 else if ((d->selectedBySimpleMove) && (nextItem!=0))
1612 { 1613 {
1613 item->setSelected(false); 1614 item->setSelected(false);
1614 emitSelectionChanged=TRUE; 1615 emitSelectionChanged=TRUE;
1615 }; 1616 };
1616 1617
1617 if (nextItem!=0) 1618 if (nextItem!=0)
1618 { 1619 {
1619 if (d->selectedBySimpleMove) 1620 if (d->selectedBySimpleMove)
1620 nextItem->setSelected(true); 1621 nextItem->setSelected(true);
1621 repaintItem2=nextItem; 1622 repaintItem2=nextItem;
1622 visItem=nextItem; 1623 visItem=nextItem;
1623 setCurrentItem(nextItem); 1624 setCurrentItem(nextItem);
1624 }; 1625 };
1625 break; 1626 break;
1626 1627
1627 case Key_Up: 1628 case Key_Up:
1628 nextItem=item->itemAbove(); 1629 nextItem=item->itemAbove();
1629 d->selectionDirection=-1; 1630 d->selectionDirection=-1;
1630 //move to the prev. item and toggle selection of this one 1631 //move to the prev. item and toggle selection of this one
1631 // => No, can't select the last item, with this. For symmetry, let's 1632 // => No, can't select the last item, with this. For symmetry, let's
1632 // toggle selection and THEN move up, just like we do in down (David) 1633 // toggle selection and THEN move up, just like we do in down (David)
1633 if (shiftOrCtrl) 1634 if (shiftOrCtrl)
1634 { 1635 {
1635 if (d->selectedBySimpleMove) 1636 if (d->selectedBySimpleMove)
1636 d->selectedBySimpleMove=false; 1637 d->selectedBySimpleMove=false;
1637 else 1638 else
1638 { 1639 {
1639 if (oldSelectionDirection!=1) 1640 if (oldSelectionDirection!=1)
1640 { 1641 {
1641 item->setSelected(!item->isSelected()); 1642 item->setSelected(!item->isSelected());
1642 emitSelectionChanged=TRUE; 1643 emitSelectionChanged=TRUE;
1643 }; 1644 };
1644 } 1645 }
1645 } 1646 }
1646 else if ((d->selectedBySimpleMove) && (nextItem!=0)) 1647 else if ((d->selectedBySimpleMove) && (nextItem!=0))
1647 { 1648 {
1648 item->setSelected(false); 1649 item->setSelected(false);
1649 emitSelectionChanged=TRUE; 1650 emitSelectionChanged=TRUE;
1650 }; 1651 };
1651 1652
1652 if (nextItem!=0) 1653 if (nextItem!=0)
1653 { 1654 {
1654 if (d->selectedBySimpleMove) 1655 if (d->selectedBySimpleMove)
1655 nextItem->setSelected(true); 1656 nextItem->setSelected(true);
1656 repaintItem2=nextItem; 1657 repaintItem2=nextItem;
1657 visItem=nextItem; 1658 visItem=nextItem;
1658 setCurrentItem(nextItem); 1659 setCurrentItem(nextItem);
1659 }; 1660 };
1660 break; 1661 break;
1661 1662
1662 case Key_End: 1663 case Key_End:
1663 //move to the last item and toggle selection of all items inbetween 1664 //move to the last item and toggle selection of all items inbetween
1664 nextItem=item; 1665 nextItem=item;
1665 if (d->selectedBySimpleMove) 1666 if (d->selectedBySimpleMove)
1666 item->setSelected(false); 1667 item->setSelected(false);
1667 if (shiftOrCtrl) 1668 if (shiftOrCtrl)
1668 d->selectedBySimpleMove=false; 1669 d->selectedBySimpleMove=false;
1669 1670
1670 while(nextItem!=0) 1671 while(nextItem!=0)
1671 { 1672 {
1672 if (shiftOrCtrl) 1673 if (shiftOrCtrl)
1673 nextItem->setSelected(!nextItem->isSelected()); 1674 nextItem->setSelected(!nextItem->isSelected());
1674 if (nextItem->itemBelow()==0) 1675 if (nextItem->itemBelow()==0)
1675 { 1676 {
1676 if (d->selectedBySimpleMove) 1677 if (d->selectedBySimpleMove)
1677 nextItem->setSelected(true); 1678 nextItem->setSelected(true);
1678 repaintItem2=nextItem; 1679 repaintItem2=nextItem;
1679 visItem=nextItem; 1680 visItem=nextItem;
1680 setCurrentItem(nextItem); 1681 setCurrentItem(nextItem);
1681 } 1682 }
1682 nextItem=nextItem->itemBelow(); 1683 nextItem=nextItem->itemBelow();
1683 } 1684 }
1684 emitSelectionChanged=TRUE; 1685 emitSelectionChanged=TRUE;
1685 break; 1686 break;
1686 1687
1687 case Key_Home: 1688 case Key_Home:
1688 // move to the first item and toggle selection of all items inbetween 1689 // move to the first item and toggle selection of all items inbetween
1689 nextItem = firstChild(); 1690 nextItem = firstChild();
1690 visItem = nextItem; 1691 visItem = nextItem;
1691 repaintItem2 = visItem; 1692 repaintItem2 = visItem;
1692 if (d->selectedBySimpleMove) 1693 if (d->selectedBySimpleMove)
1693 item->setSelected(false); 1694 item->setSelected(false);
1694 if (shiftOrCtrl) 1695 if (shiftOrCtrl)
1695 { 1696 {
1696 d->selectedBySimpleMove=false; 1697 d->selectedBySimpleMove=false;
1697 1698
1698 while ( nextItem != item ) 1699 while ( nextItem != item )
1699 { 1700 {
1700 nextItem->setSelected( !nextItem->isSelected() ); 1701 nextItem->setSelected( !nextItem->isSelected() );
1701 nextItem = nextItem->itemBelow(); 1702 nextItem = nextItem->itemBelow();
1702 } 1703 }
1703 item->setSelected( !item->isSelected() ); 1704 item->setSelected( !item->isSelected() );
1704 } 1705 }
1705 setCurrentItem( firstChild() ); 1706 setCurrentItem( firstChild() );
1706 emitSelectionChanged=TRUE; 1707 emitSelectionChanged=TRUE;
1707 break; 1708 break;
1708 1709
1709 case Key_Next: 1710 case Key_Next:
1710 items=visibleHeight()/item->height(); 1711 items=visibleHeight()/item->height();
1711 nextItem=item; 1712 nextItem=item;
1712 if (d->selectedBySimpleMove) 1713 if (d->selectedBySimpleMove)
1713 item->setSelected(false); 1714 item->setSelected(false);
1714 if (shiftOrCtrl) 1715 if (shiftOrCtrl)
1715 { 1716 {
1716 d->selectedBySimpleMove=false; 1717 d->selectedBySimpleMove=false;
1717 d->selectionDirection=1; 1718 d->selectionDirection=1;
1718 }; 1719 };
1719 1720
1720 for (int i=0; i<items; i++) 1721 for (int i=0; i<items; i++)
1721 { 1722 {
1722 if (shiftOrCtrl) 1723 if (shiftOrCtrl)
1723 nextItem->setSelected(!nextItem->isSelected()); 1724 nextItem->setSelected(!nextItem->isSelected());
1724 //the end 1725 //the end
1725 if ((i==items-1) || (nextItem->itemBelow()==0)) 1726 if ((i==items-1) || (nextItem->itemBelow()==0))
1726 1727
1727 { 1728 {
1728 if (shiftOrCtrl) 1729 if (shiftOrCtrl)
1729 nextItem->setSelected(!nextItem->isSelected()); 1730 nextItem->setSelected(!nextItem->isSelected());
1730 if (d->selectedBySimpleMove) 1731 if (d->selectedBySimpleMove)
1731 nextItem->setSelected(true); 1732 nextItem->setSelected(true);
1732 ensureItemVisible(nextItem); 1733 ensureItemVisible(nextItem);
1733 setCurrentItem(nextItem); 1734 setCurrentItem(nextItem);
1734 update(); 1735 update();
1735 if ((shiftOrCtrl) || (d->selectedBySimpleMove)) 1736 if ((shiftOrCtrl) || (d->selectedBySimpleMove))
1736 { 1737 {
1737 emit selectionChanged(); 1738 emit selectionChanged();
1738 } 1739 }
1739 return; 1740 return;
1740 } 1741 }
1741 nextItem=nextItem->itemBelow(); 1742 nextItem=nextItem->itemBelow();
1742 } 1743 }
1743 break; 1744 break;
1744 1745
1745 case Key_Prior: 1746 case Key_Prior:
1746 items=visibleHeight()/item->height(); 1747 items=visibleHeight()/item->height();
1747 nextItem=item; 1748 nextItem=item;
1748 if (d->selectedBySimpleMove) 1749 if (d->selectedBySimpleMove)
1749 item->setSelected(false); 1750 item->setSelected(false);
1750 if (shiftOrCtrl) 1751 if (shiftOrCtrl)
1751 { 1752 {
1752 d->selectionDirection=-1; 1753 d->selectionDirection=-1;
1753 d->selectedBySimpleMove=false; 1754 d->selectedBySimpleMove=false;
1754 }; 1755 };
1755 1756
1756 for (int i=0; i<items; i++) 1757 for (int i=0; i<items; i++)
1757 { 1758 {
1758 if ((nextItem!=item) &&(shiftOrCtrl)) 1759 if ((nextItem!=item) &&(shiftOrCtrl))
1759 nextItem->setSelected(!nextItem->isSelected()); 1760 nextItem->setSelected(!nextItem->isSelected());
1760 //the end 1761 //the end
1761 if ((i==items-1) || (nextItem->itemAbove()==0)) 1762 if ((i==items-1) || (nextItem->itemAbove()==0))
1762 1763
1763 { 1764 {
1764 if (d->selectedBySimpleMove) 1765 if (d->selectedBySimpleMove)
1765 nextItem->setSelected(true); 1766 nextItem->setSelected(true);
1766 ensureItemVisible(nextItem); 1767 ensureItemVisible(nextItem);
1767 setCurrentItem(nextItem); 1768 setCurrentItem(nextItem);
1768 update(); 1769 update();
1769 if ((shiftOrCtrl) || (d->selectedBySimpleMove)) 1770 if ((shiftOrCtrl) || (d->selectedBySimpleMove))
1770 { 1771 {
1771 emit selectionChanged(); 1772 emit selectionChanged();
1772 } 1773 }
1773 return; 1774 return;
1774 } 1775 }
1775 nextItem=nextItem->itemAbove(); 1776 nextItem=nextItem->itemAbove();
1776 } 1777 }
1777 break; 1778 break;
1778 1779
1779 case Key_Minus: 1780 case Key_Minus:
1780 if ( item->isOpen() ) 1781 if ( item->isOpen() )
1781 setOpen( item, FALSE ); 1782 setOpen( item, FALSE );
1782 break; 1783 break;
1783 case Key_Plus: 1784 case Key_Plus:
1784 if ( !item->isOpen() && (item->isExpandable() || item->childCount()) ) 1785 if ( !item->isOpen() && (item->isExpandable() || item->childCount()) )
1785 setOpen( item, TRUE ); 1786 setOpen( item, TRUE );
1786 break; 1787 break;
1787 default: 1788 default:
1788 bool realKey = ((e->key()!=Key_Shift) && (e->key()!=Key_Control) 1789 bool realKey = ((e->key()!=Key_Shift) && (e->key()!=Key_Control)
1789 && (e->key()!=Key_Meta) && (e->key()!=Key_Alt)); 1790 && (e->key()!=Key_Meta) && (e->key()!=Key_Alt));
1790 1791
1791 bool selectCurrentItem = (d->selectedBySimpleMove) && (item->isSelected()); 1792 bool selectCurrentItem = (d->selectedBySimpleMove) && (item->isSelected());
1792 if (realKey && selectCurrentItem) 1793 if (realKey && selectCurrentItem)
1793 item->setSelected(false); 1794 item->setSelected(false);
1794 //this is mainly for the "goto filename beginning with pressed char" feature (aleXXX) 1795 //this is mainly for the "goto filename beginning with pressed char" feature (aleXXX)
1795 QListView::SelectionMode oldSelectionMode = selectionMode(); 1796 QListView::SelectionMode oldSelectionMode = selectionMode();
1796 setSelectionMode (QListView::Multi); 1797 setSelectionMode (QListView::Multi);
1797 QListView::keyPressEvent (e); 1798 QListView::keyPressEvent (e);
1798 setSelectionMode (oldSelectionMode); 1799 setSelectionMode (oldSelectionMode);
1799 if (realKey && selectCurrentItem) 1800 if (realKey && selectCurrentItem)
1800 { 1801 {
1801 currentItem()->setSelected(true); 1802 currentItem()->setSelected(true);
1802 emitSelectionChanged=TRUE; 1803 emitSelectionChanged=TRUE;
1803 } 1804 }
1804 repaintItem2=currentItem(); 1805 repaintItem2=currentItem();
1805 if (realKey) 1806 if (realKey)
1806 visItem=currentItem(); 1807 visItem=currentItem();
1807 break; 1808 break;
1808 } 1809 }
1809 1810
1810 if (visItem) 1811 if (visItem)
1811 ensureItemVisible(visItem); 1812 ensureItemVisible(visItem);
1812 1813
1813 QRect ir; 1814 QRect ir;
1814 if (repaintItem1) 1815 if (repaintItem1)
1815 ir = ir.unite( itemRect(repaintItem1) ); 1816 ir = ir.unite( itemRect(repaintItem1) );
1816 if (repaintItem2) 1817 if (repaintItem2)
1817 ir = ir.unite( itemRect(repaintItem2) ); 1818 ir = ir.unite( itemRect(repaintItem2) );
1818 1819
1819 if ( !ir.isEmpty() ) 1820 if ( !ir.isEmpty() )
1820 { // rectangle to be repainted 1821 { // rectangle to be repainted
1821 if ( ir.x() < 0 ) 1822 if ( ir.x() < 0 )
1822 ir.moveBy( -ir.x(), 0 ); 1823 ir.moveBy( -ir.x(), 0 );
1823 viewport()->repaint( ir, FALSE ); 1824 viewport()->repaint( ir, FALSE );
1824 } 1825 }
1825 /*if (repaintItem1) 1826 /*if (repaintItem1)
1826 repaintItem1->repaint(); 1827 repaintItem1->repaint();
1827 if (repaintItem2) 1828 if (repaintItem2)
1828 repaintItem2->repaint();*/ 1829 repaintItem2->repaint();*/
1829 update(); 1830 update();
1830 if (emitSelectionChanged) 1831 if (emitSelectionChanged)
1831 emit selectionChanged(); 1832 emit selectionChanged();
1832} 1833}
1833 1834
1834void KListView::setSelectionModeExt (SelectionModeExt mode) 1835void KListView::setSelectionModeExt (SelectionModeExt mode)
1835{ 1836{
1836 d->selectionMode = mode; 1837 d->selectionMode = mode;
1837 1838
1838 switch (mode) 1839 switch (mode)
1839 { 1840 {
1840 case Single: 1841 case Single:
1841 case Multi: 1842 case Multi:
1842 case Extended: 1843 case Extended:
1843 case NoSelection: 1844 case NoSelection:
1844 setSelectionMode (static_cast<QListView::SelectionMode>(static_cast<int>(mode))); 1845 setSelectionMode (static_cast<QListView::SelectionMode>(static_cast<int>(mode)));
1845 break; 1846 break;
1846 1847
1847 case FileManager: 1848 case FileManager:
1848 setSelectionMode (QListView::Extended); 1849 setSelectionMode (QListView::Extended);
1849 break; 1850 break;
1850 1851
1851 default: 1852 default:
1852 kdWarning () << "Warning: illegal selection mode " << int(mode) << " set!" << endl; 1853 kdWarning () << "Warning: illegal selection mode " << int(mode) << " set!" << endl;
1853 break; 1854 break;
1854 } 1855 }
1855} 1856}
1856 1857
1857KListView::SelectionModeExt KListView::selectionModeExt () const 1858KListView::SelectionModeExt KListView::selectionModeExt () const
1858{ 1859{
1859 return d->selectionMode; 1860 return d->selectionMode;
1860} 1861}
1861 1862
1862int KListView::itemIndex( const QListViewItem *item ) const 1863int KListView::itemIndex( const QListViewItem *item ) const
1863{ 1864{
1864 if ( !item ) 1865 if ( !item )
1865 return -1; 1866 return -1;
1866 1867
1867 if ( item == firstChild() ) 1868 if ( item == firstChild() )
1868 return 0; 1869 return 0;
1869 else { 1870 else {
1870 QListViewItemIterator it(firstChild()); 1871 QListViewItemIterator it(firstChild());
1871 uint j = 0; 1872 uint j = 0;
1872 for (; it.current() && it.current() != item; ++it, ++j ); 1873 for (; it.current() && it.current() != item; ++it, ++j );
1873 1874
1874 if( !it.current() ) 1875 if( !it.current() )
1875 return -1; 1876 return -1;
1876 1877
1877 return j; 1878 return j;
1878 } 1879 }
1879} 1880}
1880 1881
1881QListViewItem* KListView::itemAtIndex(int index) 1882QListViewItem* KListView::itemAtIndex(int index)
1882{ 1883{
1883 if (index<0) 1884 if (index<0)
1884 return 0; 1885 return 0;
1885 1886
1886 int j(0); 1887 int j(0);
1887 for (QListViewItemIterator it=firstChild(); it.current(); it++) 1888 for (QListViewItemIterator it=firstChild(); it.current(); it++)
1888 { 1889 {
1889 if (j==index) 1890 if (j==index)
1890 return it.current(); 1891 return it.current();
1891 j++; 1892 j++;
1892 }; 1893 };
1893 return 0; 1894 return 0;
1894} 1895}
1895 1896
1896 1897
1897void KListView::emitContextMenu (KListView*, QListViewItem* i) 1898void KListView::emitContextMenu (KListView*, QListViewItem* i)
1898{ 1899{
1899 QPoint p; 1900 QPoint p;
1900 // qDebug("KListView::emitContextMenu "); 1901 // qDebug("KListView::emitContextMenu ");
1901 1902
1902 if (i) 1903 if (i)
1903 p = viewport()->mapToGlobal(itemRect(i).center()); 1904 p = viewport()->mapToGlobal(itemRect(i).center());
1904 else 1905 else
1905 p = mapToGlobal(rect().center()); 1906 p = mapToGlobal(rect().center());
1906 1907
1907 emit contextMenu (this, i, p); 1908 emit contextMenu (this, i, p);
1908} 1909}
1909 1910
1910void KListView::emitContextMenu (QListViewItem* i, const QPoint& p, int col) 1911void KListView::emitContextMenu (QListViewItem* i, const QPoint& p, int col)
1911{ 1912{
1912 QListViewItem* item = i; 1913 QListViewItem* item = i;
1913 int c = col; 1914 int c = col;
1914 // do not trust the values for QListViewItem* i and int col; 1915 // do not trust the values for QListViewItem* i and int col;
1915 // qDebug("KListView::emitContextMenu col"); 1916 // qDebug("KListView::emitContextMenu col");
1916 if ( col == -1 ) { 1917 if ( col == -1 ) {
1917 QPoint pp = viewport()->mapFromGlobal(p); 1918 QPoint pp = viewport()->mapFromGlobal(p);
1918 item = itemAt( pp); 1919 item = itemAt( pp);
1919 c = header()->sectionAt(pp.x() ); 1920 c = header()->sectionAt(pp.x() );
1920 } 1921 }
1921 emit contextRequest( item, p, c ); 1922 emit contextRequest( item, p, c );
1922 emit contextMenu (this, item, p); 1923 emit contextMenu (this, item, p);
1923} 1924}
1924 1925
1925void KListView::setAcceptDrops (bool val) 1926void KListView::setAcceptDrops (bool val)
1926{ 1927{
1927 QListView::setAcceptDrops (val); 1928 QListView::setAcceptDrops (val);
1928 viewport()->setAcceptDrops (val); 1929 viewport()->setAcceptDrops (val);
1929} 1930}
1930 1931
1931int KListView::dropVisualizerWidth () const 1932int KListView::dropVisualizerWidth () const
1932{ 1933{
1933 return d->mDropVisualizerWidth; 1934 return d->mDropVisualizerWidth;
1934} 1935}
1935 1936
1936 1937
1937void KListView::viewportPaintEvent(QPaintEvent *e) 1938void KListView::viewportPaintEvent(QPaintEvent *e)
1938{ 1939{
1939 QListView::viewportPaintEvent(e); 1940 QListView::viewportPaintEvent(e);
1940 1941
1941 if (d->mOldDropVisualizer.isValid() && e->rect().intersects(d->mOldDropVisualizer)) 1942 if (d->mOldDropVisualizer.isValid() && e->rect().intersects(d->mOldDropVisualizer))
1942 { 1943 {
1943 QPainter painter(viewport()); 1944 QPainter painter(viewport());
1944 1945
1945 // This is where we actually draw the drop-visualizer 1946 // This is where we actually draw the drop-visualizer
1946 painter.fillRect(d->mOldDropVisualizer, Dense4Pattern); 1947 painter.fillRect(d->mOldDropVisualizer, Dense4Pattern);
1947 } 1948 }
1948 if (d->mOldDropHighlighter.isValid() && e->rect().intersects(d->mOldDropHighlighter)) 1949 if (d->mOldDropHighlighter.isValid() && e->rect().intersects(d->mOldDropHighlighter))
1949 { 1950 {
1950 QPainter painter(viewport()); 1951 QPainter painter(viewport());
1951 1952
1952qDebug("KListView::viewportPaintEvent has to be verified"); 1953qDebug("KListView::viewportPaintEvent has to be verified");
1953 1954
1954 // This is where we actually draw the drop-highlighter 1955 // This is where we actually draw the drop-highlighter
1955//US style().drawPrimitive(QStyle::PE_FocusRect, &painter, d->mOldDropHighlighter, colorGroup(), 1956//US style().drawPrimitive(QStyle::PE_FocusRect, &painter, d->mOldDropHighlighter, colorGroup(),
1956//US QStyle::Style_FocusAtBorder); 1957//US QStyle::Style_FocusAtBorder);
1957 1958
1958//LR style().drawFocusRect(&painter, d->mOldDropHighlighter, colorGroup(), (const QColor*)0, true); 1959//LR style().drawFocusRect(&painter, d->mOldDropHighlighter, colorGroup(), (const QColor*)0, true);
1959 1960
1960 1961
1961 } 1962 }
1962} 1963}
1963 1964
1964void KListView::setFullWidth() 1965void KListView::setFullWidth()
1965{ 1966{
1966 setFullWidth(true); 1967 setFullWidth(true);
1967} 1968}
1968 1969
1969void KListView::setFullWidth(bool fullWidth) 1970void KListView::setFullWidth(bool fullWidth)
1970{ 1971{
1971 d->fullWidth = fullWidth; 1972 d->fullWidth = fullWidth;
1972//US header()->setStretchEnabled(fullWidth, columns()-1); 1973//US header()->setStretchEnabled(fullWidth, columns()-1);
1973} 1974}
1974 1975
1975bool KListView::fullWidth() const 1976bool KListView::fullWidth() const
1976{ 1977{
1977 return d->fullWidth; 1978 return d->fullWidth;
1978} 1979}
1979 1980
1980int KListView::addColumn(const QString& label, int width) 1981int KListView::addColumn(const QString& label, int width)
1981{ 1982{
1982 int result = QListView::addColumn(label, width); 1983 int result = QListView::addColumn(label, width);
1983 if (d->fullWidth) { 1984 if (d->fullWidth) {
1984//US header()->setStretchEnabled(false, columns()-2); 1985//US header()->setStretchEnabled(false, columns()-2);
1985//US header()->setStretchEnabled(true, columns()-1); 1986//US header()->setStretchEnabled(true, columns()-1);
1986 } 1987 }
1987 return result; 1988 return result;
1988} 1989}
1989 1990
1990int KListView::addColumn(const QIconSet& iconset, const QString& label, int width) 1991int KListView::addColumn(const QIconSet& iconset, const QString& label, int width)
1991{ 1992{
1992 int result = QListView::addColumn(iconset, label, width); 1993 int result = QListView::addColumn(iconset, label, width);
1993 if (d->fullWidth) { 1994 if (d->fullWidth) {
1994//US header()->setStretchEnabled(false, columns()-2); 1995//US header()->setStretchEnabled(false, columns()-2);
1995//US header()->setStretchEnabled(true, columns()-1); 1996//US header()->setStretchEnabled(true, columns()-1);
1996 } 1997 }
1997 return result; 1998 return result;
1998} 1999}
1999 2000
2000void KListView::removeColumn(int index) 2001void KListView::removeColumn(int index)
2001{ 2002{
2002 QListView::removeColumn(index); 2003 QListView::removeColumn(index);
2003//US if (d->fullWidth && index == columns()) header()->setStretchEnabled(true, columns()-1); 2004//US if (d->fullWidth && index == columns()) header()->setStretchEnabled(true, columns()-1);
2004} 2005}
2005 2006
2006void KListView::viewportResizeEvent(QResizeEvent* e) 2007void KListView::viewportResizeEvent(QResizeEvent* e)
2007{ 2008{
2008 QListView::viewportResizeEvent(e); 2009 QListView::viewportResizeEvent(e);
2009} 2010}
2010 2011
2011const QColor &KListView::alternateBackground() const 2012const QColor &KListView::alternateBackground() const
2012{ 2013{
2013 return d->alternateBackground; 2014 return d->alternateBackground;
2014} 2015}
2015 2016
2016void KListView::setAlternateBackground(const QColor &c) 2017void KListView::setAlternateBackground(const QColor &c)
2017{ 2018{
2018 d->alternateBackground = c; 2019 d->alternateBackground = c;
2019 repaint(); 2020 repaint();
2020} 2021}
2021 2022
2022void KListView::saveLayout(KConfig *config, const QString &group) const 2023void KListView::saveLayout(KConfig *config, const QString &group) const
2023{ 2024{
2024 KConfigGroupSaver saver(config, group); 2025 KConfigGroupSaver saver(config, group);
2025 QStringList widths, order; 2026 QStringList widths, order;
2026 for (int i = 0; i < columns(); ++i) 2027 for (int i = 0; i < columns(); ++i)
2027 { 2028 {
2028 widths << QString::number(columnWidth(i)); 2029 widths << QString::number(columnWidth(i));
2029 order << QString::number(header()->mapToIndex(i)); 2030 order << QString::number(header()->mapToIndex(i));
2030 } 2031 }
2031 config->writeEntry("ColumnWidths", widths); 2032 config->writeEntry("ColumnWidths", widths);
2032 config->writeEntry("ColumnOrder", order); 2033 config->writeEntry("ColumnOrder", order);
2033 config->writeEntry("SortColumn", d->sortColumn); 2034 config->writeEntry("SortColumn", d->sortColumn);
2034 config->writeEntry("SortAscending", d->sortAscending); 2035 config->writeEntry("SortAscending", d->sortAscending);
2035} 2036}
2036 2037
2037void KListView::restoreLayout(KConfig *config, const QString &group) 2038void KListView::restoreLayout(KConfig *config, const QString &group)
2038{ 2039{
2039 KConfigGroupSaver saver(config, group); 2040 KConfigGroupSaver saver(config, group);
2040 QStringList cols = config->readListEntry("ColumnWidths"); 2041 QStringList cols = config->readListEntry("ColumnWidths");
2041 int i = 0; 2042 int i = 0;
2042 for (QStringList::ConstIterator it = cols.begin(); it != cols.end(); ++it) 2043 for (QStringList::ConstIterator it = cols.begin(); it != cols.end(); ++it)
2043 setColumnWidth(i++, (*it).toInt()); 2044 setColumnWidth(i++, (*it).toInt());
2044 2045
2045 cols = config->readListEntry("ColumnOrder"); 2046 cols = config->readListEntry("ColumnOrder");
2046 i = 0; 2047 i = 0;
2047 for (QStringList::ConstIterator it = cols.begin(); it != cols.end(); ++it) 2048 for (QStringList::ConstIterator it = cols.begin(); it != cols.end(); ++it)
2048 header()->moveSection(i++, (*it).toInt()); 2049 header()->moveSection(i++, (*it).toInt());
2049 2050
2050/*US I changed the following code, because hasKey is not available. 2051/*US I changed the following code, because hasKey is not available.
2051!!! check if my version is correct 2052!!! check if my version is correct
2052 if (config->hasKey("SortColumn")) 2053 if (config->hasKey("SortColumn"))
2053 setSorting(config->readNumEntry("SortColumn"), config->readBoolEntry("SortAscending", true)); 2054 setSorting(config->readNumEntry("SortColumn"), config->readBoolEntry("SortAscending", true));
2054*/ 2055*/
2055 QStringList langLst = config->readListEntry( "SortColumn" ); 2056 QStringList langLst = config->readListEntry( "SortColumn" );
2056 if (!langLst.isEmpty()) 2057 if (!langLst.isEmpty())
2057 setSorting(config->readNumEntry("SortColumn"), config->readBoolEntry("SortAscending", true)); 2058 setSorting(config->readNumEntry("SortColumn"), config->readBoolEntry("SortAscending", true));
2058} 2059}
2059 2060
2060void KListView::setSorting(int column, bool ascending) 2061void KListView::setSorting(int column, bool ascending)
2061{ 2062{
2062 d->sortColumn = column; 2063 d->sortColumn = column;
2063 d->sortAscending = ascending; 2064 d->sortAscending = ascending;
2064 QListView::setSorting(column, ascending); 2065 QListView::setSorting(column, ascending);
2065} 2066}
2066 2067
2067int KListView::columnSorted(void) const 2068int KListView::columnSorted(void) const
2068{ 2069{
2069 return d->sortColumn; 2070 return d->sortColumn;
2070} 2071}
2071 2072
2072bool KListView::ascendingSort(void) const 2073bool KListView::ascendingSort(void) const
2073{ 2074{
2074 return d->sortAscending; 2075 return d->sortAscending;
2075} 2076}
2076 2077
2077KListViewItem::KListViewItem(QListView *parent) 2078KListViewItem::KListViewItem(QListView *parent)
2078 : QListViewItem(parent) 2079 : QListViewItem(parent)
2079{ 2080{
2080 init(); 2081 init();
2081} 2082}
2082 2083
2083KListViewItem::KListViewItem(QListViewItem *parent) 2084KListViewItem::KListViewItem(QListViewItem *parent)
2084 : QListViewItem(parent) 2085 : QListViewItem(parent)
2085{ 2086{
2086 init(); 2087 init();
2087} 2088}
2088 2089
2089KListViewItem::KListViewItem(QListView *parent, QListViewItem *after) 2090KListViewItem::KListViewItem(QListView *parent, QListViewItem *after)
2090 : QListViewItem(parent, after) 2091 : QListViewItem(parent, after)
2091{ 2092{
2092 init(); 2093 init();
2093} 2094}
2094 2095
2095KListViewItem::KListViewItem(QListViewItem *parent, QListViewItem *after) 2096KListViewItem::KListViewItem(QListViewItem *parent, QListViewItem *after)
2096 : QListViewItem(parent, after) 2097 : QListViewItem(parent, after)
2097{ 2098{
2098 init(); 2099 init();
2099} 2100}
2100 2101
2101KListViewItem::KListViewItem(QListView *parent, 2102KListViewItem::KListViewItem(QListView *parent,
2102 QString label1, QString label2, QString label3, QString label4, 2103 QString label1, QString label2, QString label3, QString label4,
2103 QString label5, QString label6, QString label7, QString label8) 2104 QString label5, QString label6, QString label7, QString label8)
2104 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) 2105 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8)
2105{ 2106{
2106 init(); 2107 init();
2107} 2108}
2108 2109
2109KListViewItem::KListViewItem(QListViewItem *parent, 2110KListViewItem::KListViewItem(QListViewItem *parent,
2110 QString label1, QString label2, QString label3, QString label4, 2111 QString label1, QString label2, QString label3, QString label4,
2111 QString label5, QString label6, QString label7, QString label8) 2112 QString label5, QString label6, QString label7, QString label8)
2112 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8) 2113 : QListViewItem(parent, label1, label2, label3, label4, label5, label6, label7, label8)
2113{ 2114{
2114 init(); 2115 init();
2115} 2116}
2116 2117
2117KListViewItem::KListViewItem(QListView *parent, QListViewItem *after, 2118KListViewItem::KListViewItem(QListView *parent, QListViewItem *after,
2118 QString label1, QString label2, QString label3, QString label4, 2119 QString label1, QString label2, QString label3, QString label4,
2119 QString label5, QString label6, QString label7, QString label8) 2120 QString label5, QString label6, QString label7, QString label8)
2120 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) 2121 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8)
2121{ 2122{
2122 init(); 2123 init();
2123} 2124}
2124 2125
2125KListViewItem::KListViewItem(QListViewItem *parent, QListViewItem *after, 2126KListViewItem::KListViewItem(QListViewItem *parent, QListViewItem *after,
2126 QString label1, QString label2, QString label3, QString label4, 2127 QString label1, QString label2, QString label3, QString label4,
2127 QString label5, QString label6, QString label7, QString label8) 2128 QString label5, QString label6, QString label7, QString label8)
2128 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8) 2129 : QListViewItem(parent, after, label1, label2, label3, label4, label5, label6, label7, label8)
2129{ 2130{
2130 init(); 2131 init();
2131} 2132}
2132 2133
2133KListViewItem::~KListViewItem() 2134KListViewItem::~KListViewItem()
2134{ 2135{
2135} 2136}
2136 2137
2137void KListViewItem::init() 2138void KListViewItem::init()
2138{ 2139{
2139 m_known = false; 2140 m_known = false;
2140} 2141}
2141 2142
2142const QColor &KListViewItem::backgroundColor() 2143const QColor &KListViewItem::backgroundColor()
2143{ 2144{
2144 if (isAlternate()) 2145 if (isAlternate())
2145 return static_cast< KListView* >(listView())->alternateBackground(); 2146 return static_cast< KListView* >(listView())->alternateBackground();
2146 return listView()->viewport()->colorGroup().base(); 2147 return listView()->viewport()->colorGroup().base();
2147} 2148}
2148 2149
2149bool KListViewItem::isAlternate() 2150bool KListViewItem::isAlternate()
2150{ 2151{
2151 KListView *lv = static_cast<KListView *>(listView()); 2152 KListView *lv = static_cast<KListView *>(listView());
2152 if (lv && lv->alternateBackground().isValid()) 2153 if (lv && lv->alternateBackground().isValid())
2153 { 2154 {
2154 KListViewItem *above = 0; 2155 KListViewItem *above = 0;
2155//US above = dynamic_cast<KListViewItem *>(itemAbove()); 2156//US above = dynamic_cast<KListViewItem *>(itemAbove());
2156 above = (KListViewItem *)(itemAbove()); 2157 above = (KListViewItem *)(itemAbove());
2157 m_known = above ? above->m_known : true; 2158 m_known = above ? above->m_known : true;
2158 if (m_known) 2159 if (m_known)
2159 { 2160 {
2160 m_odd = above ? !above->m_odd : false; 2161 m_odd = above ? !above->m_odd : false;
2161 } 2162 }
2162 else 2163 else
2163 { 2164 {
2164 KListViewItem *item; 2165 KListViewItem *item;
2165 bool previous = true; 2166 bool previous = true;
2166 if (parent()) 2167 if (parent())
2167 { 2168 {
2168//US item = dynamic_cast<KListViewItem *>(parent()); 2169//US item = dynamic_cast<KListViewItem *>(parent());
2169 item = (KListViewItem *)(parent()); 2170 item = (KListViewItem *)(parent());
2170 if (item) 2171 if (item)
2171 previous = item->m_odd; 2172 previous = item->m_odd;
2172//US item = dynamic_cast<KListViewItem *>(parent()->firstChild()); 2173//US item = dynamic_cast<KListViewItem *>(parent()->firstChild());
2173 item = (KListViewItem *)(parent()->firstChild()); 2174 item = (KListViewItem *)(parent()->firstChild());
2174 } 2175 }
2175 else 2176 else
2176 { 2177 {
2177//US item = dynamic_cast<KListViewItem *>(lv->firstChild()); 2178//US item = dynamic_cast<KListViewItem *>(lv->firstChild());
2178 item = (KListViewItem *)(lv->firstChild()); 2179 item = (KListViewItem *)(lv->firstChild());
2179 } 2180 }
2180 2181
2181 while(item) 2182 while(item)
2182 { 2183 {
2183 item->m_odd = previous = !previous; 2184 item->m_odd = previous = !previous;
2184 item->m_known = true; 2185 item->m_known = true;
2185//US item = dynamic_cast<KListViewItem *>(item->nextSibling()); 2186//US item = dynamic_cast<KListViewItem *>(item->nextSibling());
2186 item = (KListViewItem *)(item->nextSibling()); 2187 item = (KListViewItem *)(item->nextSibling());
2187 } 2188 }
2188 } 2189 }
2189 return m_odd; 2190 return m_odd;
2190 } 2191 }
2191 return false; 2192 return false;
2192} 2193}
2193 2194
2194void KListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) 2195void KListViewItem::paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment)
2195{ 2196{
2196 QColorGroup _cg = cg; 2197 QColorGroup _cg = cg;
2197 const QPixmap *pm = listView()->viewport()->backgroundPixmap(); 2198 const QPixmap *pm = listView()->viewport()->backgroundPixmap();
2198 if (pm && !pm->isNull()) 2199 if (pm && !pm->isNull())
2199 { 2200 {
2200 _cg.setBrush(QColorGroup::Base, QBrush(backgroundColor(), *pm)); 2201 _cg.setBrush(QColorGroup::Base, QBrush(backgroundColor(), *pm));
2201 QPoint o = p->brushOrigin(); 2202 QPoint o = p->brushOrigin();
2202 p->setBrushOrigin( o.x()-listView()->contentsX(), o.y()-listView()->contentsY() ); 2203 p->setBrushOrigin( o.x()-listView()->contentsX(), o.y()-listView()->contentsY() );
2203 } 2204 }
2204 else if (isAlternate()) { 2205 else if (isAlternate()) {
2205//US if (listView()->viewport()->backgroundMode()==Qt::FixedColor) 2206//US if (listView()->viewport()->backgroundMode()==Qt::FixedColor)
2206 if (listView()->viewport()->backgroundMode()==QWidget::PaletteBackground) 2207 if (listView()->viewport()->backgroundMode()==QWidget::PaletteBackground)
2207 _cg.setColor(QColorGroup::Background, static_cast< KListView* >(listView())->alternateBackground()); 2208 _cg.setColor(QColorGroup::Background, static_cast< KListView* >(listView())->alternateBackground());
2208 else 2209 else
2209 _cg.setColor(QColorGroup::Base, static_cast< KListView* >(listView())->alternateBackground()); 2210 _cg.setColor(QColorGroup::Base, static_cast< KListView* >(listView())->alternateBackground());
2210 } 2211 }
2211 QListViewItem::paintCell(p, _cg, column, width, alignment); 2212 QListViewItem::paintCell(p, _cg, column, width, alignment);
2212} 2213}
2213 2214
2214//US we do not have a "global KDE" variable to setup singleClick functionality 2215//US we do not have a "global KDE" variable to setup singleClick functionality
2215void KListView::setSingleClick(bool s) 2216void KListView::setSingleClick(bool s)
2216{ 2217{
2217 d->bUseSingle = s; 2218 d->bUseSingle = s;
2218 slotSettingsChanged(1); 2219 slotSettingsChanged(1);
2219 // qDebug("KListView::setSingleClick: single %i", d->bUseSingle); 2220 // qDebug("KListView::setSingleClick: single %i", d->bUseSingle);
2220} 2221}
2221 2222
2222 2223
2223void KListView::virtual_hook( int, void* ) 2224void KListView::virtual_hook( int, void* )
2224{ /*BASE::virtual_hook( id, data );*/ } 2225{ /*BASE::virtual_hook( id, data );*/ }
2225 2226
2226//US #include "klistview.moc" 2227//US #include "klistview.moc"
2227//US #include "klistviewlineedit.moc" 2228//US #include "klistviewlineedit.moc"
2228 2229
2229// vim: ts=2 sw=2 et 2230// vim: ts=2 sw=2 et
diff --git a/microkde/kdeui/klistview.h b/microkde/kdeui/klistview.h
index d559ce7..0058416 100644
--- a/microkde/kdeui/klistview.h
+++ b/microkde/kdeui/klistview.h
@@ -1,1039 +1,1039 @@
1/* This file is part of the KDE libraries 1/* This file is part of the KDE libraries
2 Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org> 2 Copyright (C) 2000 Reginald Stadlbauer <reggie@kde.org>
3 Copyright (C) 2000 Charles Samuels <charles@kde.org> 3 Copyright (C) 2000 Charles Samuels <charles@kde.org>
4 Copyright (C) 2000 Peter Putzer <putzer@kde.org> 4 Copyright (C) 2000 Peter Putzer <putzer@kde.org>
5 5
6 This library is free software; you can redistribute it and/or 6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public 7 modify it under the terms of the GNU Library General Public
8 License version 2 as published by the Free Software Foundation. 8 License version 2 as published by the Free Software Foundation.
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#ifndef KLISTVIEW_H 20#ifndef KLISTVIEW_H
21#define KLISTVIEW_H 21#define KLISTVIEW_H
22 22
23#include <qlistview.h> 23#include <qlistview.h>
24 24
25#include <qptrlist.h> 25#include <qptrlist.h>
26 26
27//US 27//US
28class QDropEvent; 28class QDropEvent;
29class QDragLeaveEvent; 29class QDragLeaveEvent;
30class QDragMoveEvent; 30class QDragMoveEvent;
31class QDragEnterEvent; 31class QDragEnterEvent;
32 32
33class QDragObject; 33class QDragObject;
34class KConfig; 34class KConfig;
35class KLineEdit; 35class KLineEdit;
36/** 36/**
37 * This Widget extends the functionality of QListView to honor the system 37 * This Widget extends the functionality of QListView to honor the system
38 * wide settings for Single Click/Double Click mode, AutoSelection and 38 * wide settings for Single Click/Double Click mode, AutoSelection and
39 * ChangeCursorOverLink (TM). 39 * ChangeCursorOverLink (TM).
40 * 40 *
41 * There is a new signal executed(). It gets connected to either 41 * There is a new signal executed(). It gets connected to either
42 * @ref QListView::clicked() or @ref QListView::doubleClicked() depending on the KDE 42 * @ref QListView::clicked() or @ref QListView::doubleClicked() depending on the KDE
43 * wide Single Click/Double Click settings. It is strongly recommended that 43 * wide Single Click/Double Click settings. It is strongly recommended that
44 * you use this signal instead of the above mentioned. This way you dont 44 * you use this signal instead of the above mentioned. This way you dont
45 * need to care about the current settings. 45 * need to care about the current settings.
46 * If you want to get informed when the user selects something connect to the 46 * If you want to get informed when the user selects something connect to the
47 * QListView::selectionChanged() signal. 47 * QListView::selectionChanged() signal.
48 * 48 *
49 * Drag-and-Drop is supported with the signal @ref #dropped(), just @ref #setAcceptDrops(true) 49 * Drag-and-Drop is supported with the signal @ref #dropped(), just @ref #setAcceptDrops(true)
50 * and connect it to a suitable slot. 50 * and connect it to a suitable slot.
51 * To see where you are dropping, @ref setDropVisualizer(true). 51 * To see where you are dropping, @ref setDropVisualizer(true).
52 * And also you'll need @ref acceptDrag(QDropEvent*) 52 * And also you'll need @ref acceptDrag(QDropEvent*)
53 * 53 *
54 * KListView is drag-enabled, too: to benefit from that you've got derive from it. 54 * KListView is drag-enabled, too: to benefit from that you've got derive from it.
55 * Reimplement @ref dragObject() and (possibly) @ref startDrag(), 55 * Reimplement @ref dragObject() and (possibly) @ref startDrag(),
56 * and @ref setDragEnabled(true). 56 * and @ref setDragEnabled(true).
57 * 57 *
58 * @version $Id$ 58 * @version $Id$
59 */ 59 */
60class KListView : public QListView 60class KListView : public QListView
61{ 61{
62 Q_OBJECT 62 Q_OBJECT
63 Q_ENUMS( SelectionModeExt ) 63 Q_ENUMS( SelectionModeExt )
64 Q_PROPERTY( bool fullWidth READ fullWidth WRITE setFullWidth ) 64 Q_PROPERTY( bool fullWidth READ fullWidth WRITE setFullWidth )
65 Q_PROPERTY( bool itemsMovable READ itemsMovable WRITE setItemsMovable ) 65 Q_PROPERTY( bool itemsMovable READ itemsMovable WRITE setItemsMovable )
66 Q_PROPERTY( bool itemsRenameable READ itemsRenameable WRITE setItemsRenameable ) 66 Q_PROPERTY( bool itemsRenameable READ itemsRenameable WRITE setItemsRenameable )
67 Q_PROPERTY( bool dragEnabled READ dragEnabled WRITE setDragEnabled ) 67 Q_PROPERTY( bool dragEnabled READ dragEnabled WRITE setDragEnabled )
68 Q_PROPERTY( bool autoOpen READ autoOpen WRITE setAutoOpen ) 68 Q_PROPERTY( bool autoOpen READ autoOpen WRITE setAutoOpen )
69 Q_PROPERTY( bool dropVisualizer READ dropVisualizer WRITE setDropVisualizer ) 69 Q_PROPERTY( bool dropVisualizer READ dropVisualizer WRITE setDropVisualizer )
70//US Q_PROPERTY( int tooltipColumn READ tooltipColumn WRITE setTooltipColumn ) 70//US Q_PROPERTY( int tooltipColumn READ tooltipColumn WRITE setTooltipColumn )
71 Q_PROPERTY( int dropVisualizerWidth READ dropVisualizerWidth WRITE setDropVisualizerWidth ) 71 Q_PROPERTY( int dropVisualizerWidth READ dropVisualizerWidth WRITE setDropVisualizerWidth )
72 Q_PROPERTY( QColor alternateBackground READ alternateBackground WRITE setAlternateBackground ) 72 Q_PROPERTY( QColor alternateBackground READ alternateBackground WRITE setAlternateBackground )
73 73
74 Q_OVERRIDE( SelectionModeExt selectionMode READ selectionModeExt WRITE setSelectionModeExt ) 74 Q_OVERRIDE( SelectionModeExt selectionMode READ selectionModeExt WRITE setSelectionModeExt )
75 75
76public: 76public:
77 /** 77 /**
78 * Possible selection modes. 78 * Possible selection modes.
79 * 79 *
80 * The first four correspond directly to QListView::SelectionMode, while 80 * The first four correspond directly to QListView::SelectionMode, while
81 * the FileManager selection mode is defined as follows: 81 * the FileManager selection mode is defined as follows:
82 * @li home: move to the first 82 * @li home: move to the first
83 * @li end: move to the last 83 * @li end: move to the last
84 * @li PgUp/PgDn: move one page up/down 84 * @li PgUp/PgDn: move one page up/down
85 * @li up/down: move one item up/down 85 * @li up/down: move one item up/down
86 * @li insert: toggle selection of current and move to the next 86 * @li insert: toggle selection of current and move to the next
87 * @li space: toggle selection of the current 87 * @li space: toggle selection of the current
88 * @li CTRL+up: move to the previous item and toggle selection of this one 88 * @li CTRL+up: move to the previous item and toggle selection of this one
89 * @li CTRL+down: toggle selection of the current item and move to the next 89 * @li CTRL+down: toggle selection of the current item and move to the next
90 * @li CTRL+end: toggle selection from (including) the current 90 * @li CTRL+end: toggle selection from (including) the current
91 * item to (including) the last item 91 * item to (including) the last item
92 * @li CTRL+home: toggle selection from (including) the current 92 * @li CTRL+home: toggle selection from (including) the current
93 * item to the (including) the first item 93 * item to the (including) the first item
94 * @li CTRL+PgDn: toggle selection from (including) the current 94 * @li CTRL+PgDn: toggle selection from (including) the current
95 * item to (excluding) the item one page down 95 * item to (excluding) the item one page down
96 * @li CTRL+PgUp: toggle selection from (excluding) the current 96 * @li CTRL+PgUp: toggle selection from (excluding) the current
97 * item to (including) the item one page up 97 * item to (including) the item one page up
98 * 98 *
99 * The combinations work the same with SHIFT instead of CTRL, except 99 * The combinations work the same with SHIFT instead of CTRL, except
100 * that if you start selecting something using SHIFT everything selected 100 * that if you start selecting something using SHIFT everything selected
101 * before will be deselected first. 101 * before will be deselected first.
102 * 102 *
103 * Additionally the current item is always selected automatically when 103 * Additionally the current item is always selected automatically when
104 * navigating using the keyboard, except other items were selected explicitely. 104 * navigating using the keyboard, except other items were selected explicitely.
105 * 105 *
106 * This way e.g. SHIFT+up/PgUp then SHIFT+down/PgDn leaves no item selected 106 * This way e.g. SHIFT+up/PgUp then SHIFT+down/PgDn leaves no item selected
107 */ 107 */
108 enum SelectionModeExt { 108 enum SelectionModeExt {
109 Single = QListView::Single, 109 Single = QListView::Single,
110 Multi = QListView::Multi, 110 Multi = QListView::Multi,
111 Extended = QListView::Extended, 111 Extended = QListView::Extended,
112 NoSelection = QListView::NoSelection, 112 NoSelection = QListView::NoSelection,
113 FileManager 113 FileManager
114 }; 114 };
115 void repaintContents( bool erase = true ) 115 void repaintContents( bool erase = true )
116 { 116 {
117 QScrollView::repaintContents( contentsX(), contentsY(), 117 QScrollView::repaintContents( contentsX(), contentsY(),
118 visibleWidth(), visibleHeight(), erase ); 118 visibleWidth(), visibleHeight(), erase );
119 }; 119 };
120 /** 120 /**
121 * Constructor. 121 * Constructor.
122 * 122 *
123 * The parameters @p parent and @p name are handled by 123 * The parameters @p parent and @p name are handled by
124 * @ref QListView, as usual. 124 * @ref QListView, as usual.
125 */ 125 */
126 KListView (QWidget *parent = 0, const char *name = 0); 126 KListView (QWidget *parent = 0, const char *name = 0, bool emulateRightMouse = true );
127 127
128 /** 128 /**
129 * Destructor. 129 * Destructor.
130 */ 130 */
131 virtual ~KListView(); 131 virtual ~KListView();
132 132
133 /** 133 /**
134 * Reimplemented for internal reasons. 134 * Reimplemented for internal reasons.
135 * Further reimplementations should call this function or else 135 * Further reimplementations should call this function or else
136 * some features may not work correctly. 136 * some features may not work correctly.
137 * 137 *
138 * The API is unaffected. 138 * The API is unaffected.
139 */ 139 */
140 virtual void setAcceptDrops (bool); 140 virtual void setAcceptDrops (bool);
141 141
142 /** 142 /**
143 * This function determines whether the given coordinates are within the 143 * This function determines whether the given coordinates are within the
144 * execute area. The execute area is the part of a @ref QListViewItem where mouse 144 * execute area. The execute area is the part of a @ref QListViewItem where mouse
145 * clicks or double clicks respectively generate a @ref #executed() signal. 145 * clicks or double clicks respectively generate a @ref #executed() signal.
146 * Depending on @ref QListView::allColumnsShowFocus() this is either the 146 * Depending on @ref QListView::allColumnsShowFocus() this is either the
147 * whole item or only the first column. 147 * whole item or only the first column.
148 * @return true if point is inside execute area of an item, false in all 148 * @return true if point is inside execute area of an item, false in all
149 * other cases including the case that it is over the viewport. 149 * other cases including the case that it is over the viewport.
150 */ 150 */
151 virtual bool isExecuteArea( const QPoint& point ); 151 virtual bool isExecuteArea( const QPoint& point );
152 152
153 /** 153 /**
154 * Same thing, but from an x coordinate only. This only checks if x is in 154 * Same thing, but from an x coordinate only. This only checks if x is in
155 * the first column (if all columns don't show focus), without testing if 155 * the first column (if all columns don't show focus), without testing if
156 * the y coordinate is over an item or not. 156 * the y coordinate is over an item or not.
157 */ 157 */
158 bool isExecuteArea( int x ); 158 bool isExecuteArea( int x );
159 159
160 /** 160 /**
161 * @return a list containing the currently selected items. 161 * @return a list containing the currently selected items.
162 */ 162 */
163 QPtrList<QListViewItem> selectedItems() const; // ### BIC: KDE 4: use an implicitly shared class! (QValueList?) 163 QPtrList<QListViewItem> selectedItems() const; // ### BIC: KDE 4: use an implicitly shared class! (QValueList?)
164 164
165 /** 165 /**
166 * Arbitrarily move @p item to @p parent, positioned immediately after item @p after. 166 * Arbitrarily move @p item to @p parent, positioned immediately after item @p after.
167 */ 167 */
168 void moveItem(QListViewItem *item, QListViewItem *parent, QListViewItem *after); 168 void moveItem(QListViewItem *item, QListViewItem *parent, QListViewItem *after);
169 169
170 /** 170 /**
171 * @return the last item (not child!) of this listview. 171 * @return the last item (not child!) of this listview.
172 * 172 *
173 * @see lastChild() 173 * @see lastChild()
174 */ 174 */
175 QListViewItem *lastItem() const; 175 QListViewItem *lastItem() const;
176 176
177 /** 177 /**
178 * @return the last child of this listview. 178 * @return the last child of this listview.
179 * 179 *
180 * @see lastItem() 180 * @see lastItem()
181 */ 181 */
182 QListViewItem* lastChild () const; 182 QListViewItem* lastChild () const;
183 183
184 /** 184 /**
185 * @return the lineedit used for inline renaming. 185 * @return the lineedit used for inline renaming.
186 * Use that to setup a @ref KCompletion or @ref QValidator for the lineedit 186 * Use that to setup a @ref KCompletion or @ref QValidator for the lineedit
187 * 187 *
188 * @since 3.2 188 * @since 3.2
189 */ 189 */
190 KLineEdit* renameLineEdit() const; 190 KLineEdit* renameLineEdit() const;
191 191
192 /** 192 /**
193 * @returns if it is legal to move items in the list view. True by default. 193 * @returns if it is legal to move items in the list view. True by default.
194 * 194 *
195 * @see #setDragEnabled() 195 * @see #setDragEnabled()
196 * @see #setItemsMovable() 196 * @see #setItemsMovable()
197 */ 197 */
198 bool itemsMovable() const; 198 bool itemsMovable() const;
199 199
200 /** 200 /**
201 * @return whether inplace-renaming has been enabled. False by default. 201 * @return whether inplace-renaming has been enabled. False by default.
202 * 202 *
203 * @see #setItemsRenameable() 203 * @see #setItemsRenameable()
204 */ 204 */
205 bool itemsRenameable() const; 205 bool itemsRenameable() const;
206 206
207 /** 207 /**
208 * @return whether dragging is enabled. False by default. 208 * @return whether dragging is enabled. False by default.
209 * 209 *
210 * @see #setDragEnabled() 210 * @see #setDragEnabled()
211 */ 211 */
212 bool dragEnabled() const; 212 bool dragEnabled() const;
213 213
214 /** 214 /**
215 * @return true if AutoOpen is enabled (not implemented currently). 215 * @return true if AutoOpen is enabled (not implemented currently).
216 * 216 *
217 * @see #setAutoOpen() 217 * @see #setAutoOpen()
218 */ 218 */
219 bool autoOpen() const; 219 bool autoOpen() const;
220 220
221 /** 221 /**
222 * @return true if @p column is renamable. 222 * @return true if @p column is renamable.
223 * 223 *
224 * @see #setRenameable() 224 * @see #setRenameable()
225 */ 225 */
226 bool isRenameable (int column) const; 226 bool isRenameable (int column) const;
227 227
228 /** 228 /**
229 * @return true if drawing of the drop-visualizer has been enabled. True by default. 229 * @return true if drawing of the drop-visualizer has been enabled. True by default.
230 * 230 *
231 * @see #setDropVisualizer() 231 * @see #setDropVisualizer()
232 */ 232 */
233 bool dropVisualizer() const; 233 bool dropVisualizer() const;
234 234
235 /** 235 /**
236 * @return the column for which tooltips are displayed (or -1 if none set). 236 * @return the column for which tooltips are displayed (or -1 if none set).
237 * 237 *
238 * @see #setTooltipColumn() 238 * @see #setTooltipColumn()
239 */ 239 */
240 int tooltipColumn() const; 240 int tooltipColumn() const;
241 241
242 /** 242 /**
243 * For future expansions. 243 * For future expansions.
244 * 244 *
245 * Do not use. 245 * Do not use.
246 * @deprecated 246 * @deprecated
247 */ 247 */
248 bool createChildren() const; 248 bool createChildren() const;
249 249
250 /** 250 /**
251 * @return true if drawing of the drop-highlighter has been enabled. False by default. 251 * @return true if drawing of the drop-highlighter has been enabled. False by default.
252 * 252 *
253 * @see #setDropHighlighter() 253 * @see #setDropHighlighter()
254 */ 254 */
255 bool dropHighlighter() const; 255 bool dropHighlighter() const;
256 256
257 /** 257 /**
258 * The dropVisualizerWidth defaults to 4. 258 * The dropVisualizerWidth defaults to 4.
259 * 259 *
260 * @see #setDropVisualizerWidth() 260 * @see #setDropVisualizerWidth()
261 * @return the current width of the drop-visualizer. 261 * @return the current width of the drop-visualizer.
262 */ 262 */
263 int dropVisualizerWidth () const; 263 int dropVisualizerWidth () const;
264 264
265 /** 265 /**
266 * @return the "extended" selection mode of this listview. 266 * @return the "extended" selection mode of this listview.
267 * 267 *
268 * @see SelectionModeExt 268 * @see SelectionModeExt
269 * @see setSelectionModeExt 269 * @see setSelectionModeExt
270 */ 270 */
271 SelectionModeExt selectionModeExt () const; 271 SelectionModeExt selectionModeExt () const;
272 272
273 /** 273 /**
274 * Returns the index of @p item within the item tree or -1 if 274 * Returns the index of @p item within the item tree or -1 if
275 * @p item doesn't exist in this list view. This function takes 275 * @p item doesn't exist in this list view. This function takes
276 * all items into account not only the visible ones. 276 * all items into account not only the visible ones.
277 */ 277 */
278 int itemIndex( const QListViewItem *item ) const; 278 int itemIndex( const QListViewItem *item ) const;
279 279
280 /** 280 /**
281 * Returns the item of @p index within the item tree or 0 if 281 * Returns the item of @p index within the item tree or 0 if
282 * @p index doesn't exist in this list view. This function takes 282 * @p index doesn't exist in this list view. This function takes
283 * all items into account not only the visible ones. 283 * all items into account not only the visible ones.
284 */ 284 */
285 QListViewItem* itemAtIndex(int index); 285 QListViewItem* itemAtIndex(int index);
286 286
287 /** 287 /**
288 * @deprecated 288 * @deprecated
289 * @see #setFullWidth() 289 * @see #setFullWidth()
290 */ 290 */
291 void setFullWidth(); 291 void setFullWidth();
292 292
293 /** 293 /**
294 * Let the last column fit exactly all the available width. 294 * Let the last column fit exactly all the available width.
295 * 295 *
296 * @see #fullWidth() 296 * @see #fullWidth()
297 */ 297 */
298 void setFullWidth(bool fullWidth); 298 void setFullWidth(bool fullWidth);
299 299
300 /** 300 /**
301 * Returns whether the last column is set to fit the available width. 301 * Returns whether the last column is set to fit the available width.
302 * 302 *
303 * @see #setFullWidth() 303 * @see #setFullWidth()
304 */ 304 */
305 bool fullWidth() const; 305 bool fullWidth() const;
306 306
307 /** 307 /**
308 * Reimplemented for full width support 308 * Reimplemented for full width support
309 * 309 *
310 * @see #removeColumn() 310 * @see #removeColumn()
311 */ 311 */
312 virtual int addColumn(const QString& label, int width = -1); 312 virtual int addColumn(const QString& label, int width = -1);
313 /** 313 /**
314 * Reimplemented for full width support 314 * Reimplemented for full width support
315 */ 315 */
316 virtual int addColumn(const QIconSet& iconset, const QString& label, int width = -1); 316 virtual int addColumn(const QIconSet& iconset, const QString& label, int width = -1);
317 /** 317 /**
318 * Reimplemented for full width support 318 * Reimplemented for full width support
319 * 319 *
320 * @see #addColumn() 320 * @see #addColumn()
321 */ 321 */
322 virtual void removeColumn(int index); 322 virtual void removeColumn(int index);
323 323
324 /** 324 /**
325 * sets the alternate background background color. 325 * sets the alternate background background color.
326 * This only has an effect if the items are KListViewItems 326 * This only has an effect if the items are KListViewItems
327 * 327 *
328 * @param c the color to use for every other item. Set to an invalid 328 * @param c the color to use for every other item. Set to an invalid
329 * colour to disable alternate colours. 329 * colour to disable alternate colours.
330 * 330 *
331 * @see #alternateBackground() 331 * @see #alternateBackground()
332 **/ 332 **/
333 void setAlternateBackground(const QColor &c); 333 void setAlternateBackground(const QColor &c);
334 /** 334 /**
335 * @return the alternate background color 335 * @return the alternate background color
336 * 336 *
337 * @see #setAlternateBackground() 337 * @see #setAlternateBackground()
338 */ 338 */
339 const QColor &alternateBackground() const; 339 const QColor &alternateBackground() const;
340 340
341 /** 341 /**
342 * Saves the list view's layout (column widtsh, column order, sort column) 342 * Saves the list view's layout (column widtsh, column order, sort column)
343 * to a KConfig group 343 * to a KConfig group
344 * 344 *
345 * @param config the @ref KConfig object to write to 345 * @param config the @ref KConfig object to write to
346 * @param group the config group to use 346 * @param group the config group to use
347 */ 347 */
348 void saveLayout(KConfig *config, const QString &group) const; 348 void saveLayout(KConfig *config, const QString &group) const;
349 /** 349 /**
350 * Reads the list view's layout from a KConfig group as stored with 350 * Reads the list view's layout from a KConfig group as stored with
351 * @ref #saveLayout 351 * @ref #saveLayout
352 * 352 *
353 * @param config the @ref KConfig object to read from 353 * @param config the @ref KConfig object to read from
354 * @param group the config group to use 354 * @param group the config group to use
355 */ 355 */
356 void restoreLayout(KConfig *config, const QString &group); 356 void restoreLayout(KConfig *config, const QString &group);
357 /** 357 /**
358 * Reimplemented to remember the current sort column and order. 358 * Reimplemented to remember the current sort column and order.
359 * @param column is the column to be sorted, or -1 to sort in order of 359 * @param column is the column to be sorted, or -1 to sort in order of
360 * insertion 360 * insertion
361 * @param whether to sort ascending (or descending) 361 * @param whether to sort ascending (or descending)
362 */ 362 */
363 virtual void setSorting(int column, bool ascending = true); 363 virtual void setSorting(int column, bool ascending = true);
364 364
365 /** 365 /**
366 * @return the currently sorted column, or -1 if none is sorted 366 * @return the currently sorted column, or -1 if none is sorted
367 */ 367 */
368 int columnSorted(void) const; 368 int columnSorted(void) const;
369 369
370 /** 370 /**
371 * @return whether the current sort is ascending (or descending) 371 * @return whether the current sort is ascending (or descending)
372 */ 372 */
373 bool ascendingSort(void) const; 373 bool ascendingSort(void) const;
374 374
375 //US we do not have a "global KDE" variable to setup singleClick functionality 375 //US we do not have a "global KDE" variable to setup singleClick functionality
376 void setSingleClick(bool s); 376 void setSingleClick(bool s);
377 377
378 378
379signals: 379signals:
380 380
381 /** 381 /**
382 * This signal is emitted whenever the user executes an listview item. 382 * This signal is emitted whenever the user executes an listview item.
383 * That means depending on the KDE wide Single Click/Double Click 383 * That means depending on the KDE wide Single Click/Double Click
384 * setting the user clicked or double clicked on that item. 384 * setting the user clicked or double clicked on that item.
385 * @param item is the pointer to the executed listview item. 385 * @param item is the pointer to the executed listview item.
386 * 386 *
387 * Note that you may not delete any @ref QListViewItem objects in slots 387 * Note that you may not delete any @ref QListViewItem objects in slots
388 * connected to this signal. 388 * connected to this signal.
389 */ 389 */
390 void executed( QListViewItem *item ); 390 void executed( QListViewItem *item );
391 391
392 /** 392 /**
393 * This signal is emitted whenever the user executes an listview item. 393 * This signal is emitted whenever the user executes an listview item.
394 * That means depending on the KDE wide Single Click/Double Click 394 * That means depending on the KDE wide Single Click/Double Click
395 * setting the user clicked or double clicked on that item. 395 * setting the user clicked or double clicked on that item.
396 * @param item is the pointer to the executed listview item. 396 * @param item is the pointer to the executed listview item.
397 * @param pos is the position where the user has clicked 397 * @param pos is the position where the user has clicked
398 * @param c is the column into which the user clicked. 398 * @param c is the column into which the user clicked.
399 * 399 *
400 * Note that you may not delete any @ref QListViewItem objects in slots 400 * Note that you may not delete any @ref QListViewItem objects in slots
401 * connected to this signal. 401 * connected to this signal.
402 */ 402 */
403 void executed( QListViewItem *item, const QPoint &pos, int c ); 403 void executed( QListViewItem *item, const QPoint &pos, int c );
404 404
405 /** 405 /**
406 * This signal gets emitted whenever the user double clicks into the 406 * This signal gets emitted whenever the user double clicks into the
407 * listview. 407 * listview.
408 * @param item is the pointer to the clicked listview item. 408 * @param item is the pointer to the clicked listview item.
409 * @param pos is the position where the user has clicked, and 409 * @param pos is the position where the user has clicked, and
410 * @param c is the column into which the user clicked. 410 * @param c is the column into which the user clicked.
411 * 411 *
412 * Note that you may not delete any @ref QListViewItem objects in slots 412 * Note that you may not delete any @ref QListViewItem objects in slots
413 * connected to this signal. 413 * connected to this signal.
414 * 414 *
415 * This signal is more or less here for the sake of completeness. 415 * This signal is more or less here for the sake of completeness.
416 * You should normally not need to use this. In most cases its better 416 * You should normally not need to use this. In most cases its better
417 * to use @ref #executed() instead. 417 * to use @ref #executed() instead.
418 */ 418 */
419 void doubleClicked( QListViewItem *item, const QPoint &pos, int c ); 419 void doubleClicked( QListViewItem *item, const QPoint &pos, int c );
420 void contextRequest( QListViewItem *item, const QPoint &pos, int c ); 420 void contextRequest( QListViewItem *item, const QPoint &pos, int c );
421 421
422 /** 422 /**
423 * This signal gets emitted whenever something acceptable is 423 * This signal gets emitted whenever something acceptable is
424 * dropped onto the listview. 424 * dropped onto the listview.
425 * 425 *
426 * @param e is the drop event itself (it has already been accepted) 426 * @param e is the drop event itself (it has already been accepted)
427 * @param after is the item after which the drop occured (or 0L, if 427 * @param after is the item after which the drop occured (or 0L, if
428 * the drop was above all items) 428 * the drop was above all items)
429 * 429 *
430 * @see #acceptDrop() 430 * @see #acceptDrop()
431 */ 431 */
432 void dropped (QDropEvent * e, QListViewItem *after); 432 void dropped (QDropEvent * e, QListViewItem *after);
433 433
434 /** 434 /**
435 * This signal gets emitted whenever something acceptable is 435 * This signal gets emitted whenever something acceptable is
436 * dropped onto the listview. 436 * dropped onto the listview.
437 * 437 *
438 * This is an overloaded version of the above (provided to simplify 438 * This is an overloaded version of the above (provided to simplify
439 * processing drops outside of the class). 439 * processing drops outside of the class).
440 * 440 *
441 * @param list is the listview 441 * @param list is the listview
442 * @param e is the drop event itself (it has already been accepted) 442 * @param e is the drop event itself (it has already been accepted)
443 * @param after is the item after which the drop occured (or 0L, if 443 * @param after is the item after which the drop occured (or 0L, if
444 * the drop was above all items 444 * the drop was above all items
445 */ 445 */
446 void dropped (KListView* list, QDropEvent* e, QListViewItem* after); 446 void dropped (KListView* list, QDropEvent* e, QListViewItem* after);
447 447
448 /** 448 /**
449 * This signal gets emitted whenever something acceptable is 449 * This signal gets emitted whenever something acceptable is
450 * dropped onto the listview. 450 * dropped onto the listview.
451 * 451 *
452 * This function also provides a parent, in the event that your listview 452 * This function also provides a parent, in the event that your listview
453 * is a tree 453 * is a tree
454 * @param list is the listview 454 * @param list is the listview
455 * @param e is the drop event itself (it has already been accepted) 455 * @param e is the drop event itself (it has already been accepted)
456 * @param parent the item that is to be the parent of the new item 456 * @param parent the item that is to be the parent of the new item
457 * @param after is the item after which the drop occured (or 0L, if 457 * @param after is the item after which the drop occured (or 0L, if
458 * the drop was above all items 458 * the drop was above all items
459 */ 459 */
460 void dropped (KListView* list, QDropEvent* e, QListViewItem* parent, QListViewItem* after); 460 void dropped (KListView* list, QDropEvent* e, QListViewItem* parent, QListViewItem* after);
461 461
462 /** 462 /**
463 * This signal gets emitted whenever something acceptable is 463 * This signal gets emitted whenever something acceptable is
464 * dropped onto the listview. 464 * dropped onto the listview.
465 * 465 *
466 * This function also provides a parent, in the event that your listview 466 * This function also provides a parent, in the event that your listview
467 * is a tree 467 * is a tree
468 * @param e is the drop event itself (it has already been accepted) 468 * @param e is the drop event itself (it has already been accepted)
469 * @param parent the item that is to be the parent of the new item 469 * @param parent the item that is to be the parent of the new item
470 * @param after is the item after which the drop occured (or 0L, if 470 * @param after is the item after which the drop occured (or 0L, if
471 * the drop was above all items 471 * the drop was above all items
472 */ 472 */
473 void dropped (QDropEvent* e, QListViewItem* parent, QListViewItem* after); 473 void dropped (QDropEvent* e, QListViewItem* parent, QListViewItem* after);
474 474
475 /** 475 /**
476 * This signal is emitted when ever the user moves an item in the list via 476 * This signal is emitted when ever the user moves an item in the list via
477 * DnD. 477 * DnD.
478 * If more than one item is moved at the same time, this signal is only emitted 478 * If more than one item is moved at the same time, this signal is only emitted
479 * once. 479 * once.
480 */ 480 */
481 void moved(); 481 void moved();
482 482
483 /** 483 /**
484 * Connect to this signal if you want to do some preprocessing before 484 * Connect to this signal if you want to do some preprocessing before
485 * a move is made, for example, to disable sorting 485 * a move is made, for example, to disable sorting
486 * 486 *
487 * This is sent only once per each groups of moves. That is, for each 487 * This is sent only once per each groups of moves. That is, for each
488 * drop that is a move this will be emitted once, before KListView calls 488 * drop that is a move this will be emitted once, before KListView calls
489 * @see moveItem() 489 * @see moveItem()
490 */ 490 */
491 void aboutToMove(); 491 void aboutToMove();
492 492
493 /** 493 /**
494 * This signal is emitted when ever the user moves an item in the list via 494 * This signal is emitted when ever the user moves an item in the list via
495 * DnD. 495 * DnD.
496 * If more than one item is moved at the same time, @p afterFirst and 496 * If more than one item is moved at the same time, @p afterFirst and
497 * @p afterNow will reflect what was true before the move. 497 * @p afterNow will reflect what was true before the move.
498 * This differs from @ref moved(), so be careful. All the items will have been 498 * This differs from @ref moved(), so be careful. All the items will have been
499 * moved before @ref moved() is emitted, which is not true in this method. // FIXME 499 * moved before @ref moved() is emitted, which is not true in this method. // FIXME
500 * @param item the item that was moved 500 * @param item the item that was moved
501 * @param afterFirst the item that parameter item was in before the move, in the list 501 * @param afterFirst the item that parameter item was in before the move, in the list
502 * @param afterNow the item it's currently after. 502 * @param afterNow the item it's currently after.
503 */ 503 */
504 void moved (QListViewItem *item, QListViewItem *afterFirst, QListViewItem *afterNow); 504 void moved (QListViewItem *item, QListViewItem *afterFirst, QListViewItem *afterNow);
505 505
506 506
507 /** 507 /**
508 * This signal is emitted after all the items have been moved. It reports info for 508 * This signal is emitted after all the items have been moved. It reports info for
509 * each and every item moved, in order. The first element in @p items associates 509 * each and every item moved, in order. The first element in @p items associates
510 * with the first of afterFirst and afterNow. 510 * with the first of afterFirst and afterNow.
511 */ 511 */
512 void moved(QPtrList<QListViewItem> &items, QPtrList<QListViewItem> &afterFirst, QPtrList<QListViewItem> &afterNow); 512 void moved(QPtrList<QListViewItem> &items, QPtrList<QListViewItem> &afterFirst, QPtrList<QListViewItem> &afterNow);
513 513
514 /** 514 /**
515 * This signal gets emitted when an item is renamed via in-place renaming. 515 * This signal gets emitted when an item is renamed via in-place renaming.
516 * 516 *
517 * @param item is the renamed item. 517 * @param item is the renamed item.
518 * @param str is the new value of column @p col. 518 * @param str is the new value of column @p col.
519 * @param col is the renamed column. 519 * @param col is the renamed column.
520 */ 520 */
521 void itemRenamed(QListViewItem* item, const QString &str, int col); 521 void itemRenamed(QListViewItem* item, const QString &str, int col);
522 522
523 /** 523 /**
524 * Same as above, but without the extra information. 524 * Same as above, but without the extra information.
525 */ 525 */
526 void itemRenamed(QListViewItem* item); 526 void itemRenamed(QListViewItem* item);
527 void signalDelete(); 527 void signalDelete();
528 528
529 /** 529 /**
530 * This signal is emitted when the shortcut key for popup-menus is pressed. 530 * This signal is emitted when the shortcut key for popup-menus is pressed.
531 * 531 *
532 * Normally you should not use this, just connect a slot to signal 532 * Normally you should not use this, just connect a slot to signal
533 * @ref contextMenu (KListView*, QListViewItem*, const QPoint&) to correctly 533 * @ref contextMenu (KListView*, QListViewItem*, const QPoint&) to correctly
534 * handle showing context menus regardless of settings. 534 * handle showing context menus regardless of settings.
535 * 535 *
536 * @param list is this listview. 536 * @param list is this listview.
537 * @param item is the @ref currentItem() at the time the key was pressed. May be 0L. 537 * @param item is the @ref currentItem() at the time the key was pressed. May be 0L.
538 */ 538 */
539 void menuShortCutPressed (KListView* list, QListViewItem* item); 539 void menuShortCutPressed (KListView* list, QListViewItem* item);
540 540
541 /** 541 /**
542 * This signal is emitted whenever a context-menu should be shown for item @p i. 542 * This signal is emitted whenever a context-menu should be shown for item @p i.
543 * It automatically adjusts for all settings involved (Menu key, showMenuOnPress/Click). 543 * It automatically adjusts for all settings involved (Menu key, showMenuOnPress/Click).
544 * 544 *
545 * @param l is this listview. 545 * @param l is this listview.
546 * @param i is the item for which the menu should be shown. May be 0L. 546 * @param i is the item for which the menu should be shown. May be 0L.
547 * @param p is the point at which the menu should be shown. 547 * @param p is the point at which the menu should be shown.
548 */ 548 */
549 void contextMenu (KListView* l, QListViewItem* i, const QPoint& p); 549 void contextMenu (KListView* l, QListViewItem* i, const QPoint& p);
550 550
551public slots: 551public slots:
552 /** 552 /**
553 * Rename column @p c of @p item. 553 * Rename column @p c of @p item.
554 */ 554 */
555 virtual void rename(QListViewItem *item, int c); 555 virtual void rename(QListViewItem *item, int c);
556 556
557 /** 557 /**
558 * By default, if you called setItemsRenameable(true), 558 * By default, if you called setItemsRenameable(true),
559 * only the first column is renameable. 559 * only the first column is renameable.
560 * Use this function to enable the feature on other columns. 560 * Use this function to enable the feature on other columns.
561 * 561 *
562 * If you want more intelligent (dynamic) selection, 562 * If you want more intelligent (dynamic) selection,
563 * you'll have to derive from KListView, 563 * you'll have to derive from KListView,
564 * and override @ref rename() and call only call it 564 * and override @ref rename() and call only call it
565 * if you want the item to be renamed. 565 * if you want the item to be renamed.
566 */ 566 */
567 void setRenameable (int column, bool yesno=true); 567 void setRenameable (int column, bool yesno=true);
568 568
569 /** 569 /**
570 * Set whether items in the list view can be moved. 570 * Set whether items in the list view can be moved.
571 * It is enabled by default. 571 * It is enabled by default.
572 * 572 *
573 * @see itemsMovable() 573 * @see itemsMovable()
574 */ 574 */
575 virtual void setItemsMovable(bool b); 575 virtual void setItemsMovable(bool b);
576 576
577 /** 577 /**
578 * Enables inplace-renaming of items. 578 * Enables inplace-renaming of items.
579 * It is disabled by default. 579 * It is disabled by default.
580 * 580 *
581 * @see itemsRenameable() 581 * @see itemsRenameable()
582 * @see setRenameable() 582 * @see setRenameable()
583 */ 583 */
584 virtual void setItemsRenameable(bool b); 584 virtual void setItemsRenameable(bool b);
585 585
586 /** 586 /**
587 * Enable/Disable the dragging of items. 587 * Enable/Disable the dragging of items.
588 * It is disabled by default. 588 * It is disabled by default.
589 */ 589 */
590 virtual void setDragEnabled(bool b); 590 virtual void setDragEnabled(bool b);
591 591
592 /** 592 /**
593 * Enable/Disable AutoOpen (not implemented currently). 593 * Enable/Disable AutoOpen (not implemented currently).
594 */ 594 */
595 virtual void setAutoOpen(bool b); 595 virtual void setAutoOpen(bool b);
596 596
597 /** 597 /**
598 * Enable/Disable the drawing of a drop-visualizer 598 * Enable/Disable the drawing of a drop-visualizer
599 * (a bar that shows where a dropped item would be inserted). 599 * (a bar that shows where a dropped item would be inserted).
600 * It is enabled by default, if dragging is enabled 600 * It is enabled by default, if dragging is enabled
601 */ 601 */
602 virtual void setDropVisualizer(bool b); 602 virtual void setDropVisualizer(bool b);
603 603
604 /** 604 /**
605 * Set the width of the (default) drop-visualizer. 605 * Set the width of the (default) drop-visualizer.
606 * If you don't call this method, the width is set to 4. 606 * If you don't call this method, the width is set to 4.
607 */ 607 */
608 void setDropVisualizerWidth (int w); 608 void setDropVisualizerWidth (int w);
609 609
610 /** 610 /**
611 * Set which column should be used for automatic tooltips. 611 * Set which column should be used for automatic tooltips.
612 * 612 *
613 * @param column is the column for which tooltips will be shown. 613 * @param column is the column for which tooltips will be shown.
614 * Set -1 to disable this feature. 614 * Set -1 to disable this feature.
615 */ 615 */
616 virtual void setTooltipColumn(int column); 616 virtual void setTooltipColumn(int column);
617 617
618 /** 618 /**
619 * Enable/Disable the drawing of a drop-highlighter 619 * Enable/Disable the drawing of a drop-highlighter
620 * (a rectangle around the item under the mouse cursor). 620 * (a rectangle around the item under the mouse cursor).
621 * It is disabled by default. 621 * It is disabled by default.
622 */ 622 */
623 virtual void setDropHighlighter(bool b); 623 virtual void setDropHighlighter(bool b);
624 624
625 /** 625 /**
626 * For future expansions. 626 * For future expansions.
627 * 627 *
628 * Do not use. 628 * Do not use.
629 * @deprecated 629 * @deprecated
630 */ 630 */
631 virtual void setCreateChildren(bool b); 631 virtual void setCreateChildren(bool b);
632 632
633 /** 633 /**
634 * Set the selection mode. 634 * Set the selection mode.
635 * 635 *
636 * A different name was chosen to avoid API-clashes with @ref QListView::setSelectionMode(). 636 * A different name was chosen to avoid API-clashes with @ref QListView::setSelectionMode().
637 */ 637 */
638 void setSelectionModeExt (SelectionModeExt mode); 638 void setSelectionModeExt (SelectionModeExt mode);
639 639
640 /** 640 /**
641 * Enable/disable tabbing between editable cells 641 * Enable/disable tabbing between editable cells
642 * @since 3.1 642 * @since 3.1
643 */ 643 */
644 void setTabOrderedRenaming(bool b); 644 void setTabOrderedRenaming(bool b);
645 645
646 /** 646 /**
647 * Returns whether tab ordered renaming is enabled 647 * Returns whether tab ordered renaming is enabled
648 * @since 3.1 648 * @since 3.1
649 */ 649 */
650 bool tabOrderedRenaming() const; 650 bool tabOrderedRenaming() const;
651 651
652protected: 652protected:
653 /** 653 /**
654 * Determine whether a drop on position @p p would count as 654 * Determine whether a drop on position @p p would count as
655 * being above or below the QRect @p rect. 655 * being above or below the QRect @p rect.
656 * 656 *
657 * @param rect is the rectangle we examine. 657 * @param rect is the rectangle we examine.
658 * @param p is the point located in the rectangle, p is assumed to be in 658 * @param p is the point located in the rectangle, p is assumed to be in
659 * viewport coordinates. 659 * viewport coordinates.
660 */ 660 */
661 inline bool below (const QRect& rect, const QPoint& p) 661 inline bool below (const QRect& rect, const QPoint& p)
662 { 662 {
663 return (p.y() > (rect.top() + (rect.bottom() - rect.top())/2)); 663 return (p.y() > (rect.top() + (rect.bottom() - rect.top())/2));
664 } 664 }
665 665
666 /** 666 /**
667 * An overloaded version of below(const QRect&, const QPoint&). 667 * An overloaded version of below(const QRect&, const QPoint&).
668 * 668 *
669 * It differs from the above only in what arguments it takes. 669 * It differs from the above only in what arguments it takes.
670 * 670 *
671 * @param i the item whose rect() is passed to the above function. 671 * @param i the item whose rect() is passed to the above function.
672 * @param p is translated from contents coordinates to viewport coordinates 672 * @param p is translated from contents coordinates to viewport coordinates
673 * before being passed to the above function. 673 * before being passed to the above function.
674 */ 674 */
675 inline bool below (QListViewItem* i, const QPoint& p) 675 inline bool below (QListViewItem* i, const QPoint& p)
676 { 676 {
677 return below (itemRect(i), contentsToViewport(p)); 677 return below (itemRect(i), contentsToViewport(p));
678 } 678 }
679 679
680 /** 680 /**
681 * Reimplemented to reload the alternate background in palette changes. 681 * Reimplemented to reload the alternate background in palette changes.
682 * @internal 682 * @internal
683 */ 683 */
684 virtual bool event( QEvent * ); 684 virtual bool event( QEvent * );
685 685
686 /** 686 /**
687 * Emit signal @ref #executed. 687 * Emit signal @ref #executed.
688 * @internal 688 * @internal
689 */ 689 */
690 //US I added buttonstate to pass the current keyboard status 690 //US I added buttonstate to pass the current keyboard status
691 void emitExecute( int buttonstate, QListViewItem *item, const QPoint &pos, int c); 691 void emitExecute( int buttonstate, QListViewItem *item, const QPoint &pos, int c);
692 692
693 /** 693 /**
694 * Reimplemented for internal reasons. 694 * Reimplemented for internal reasons.
695 * Further reimplementations should call this function or else 695 * Further reimplementations should call this function or else
696 * some features may not work correctly. 696 * some features may not work correctly.
697 * 697 *
698 * The API is unaffected. 698 * The API is unaffected.
699 */ 699 */
700 virtual void focusInEvent(QFocusEvent* fe); 700 virtual void focusInEvent(QFocusEvent* fe);
701 701
702 /** 702 /**
703 * Reimplemented for internal reasons. 703 * Reimplemented for internal reasons.
704 * Further reimplementations should call this function or else 704 * Further reimplementations should call this function or else
705 * some features may not work correctly. 705 * some features may not work correctly.
706 * 706 *
707 * The API is unaffected. 707 * The API is unaffected.
708 */ 708 */
709 virtual void focusOutEvent( QFocusEvent *fe ); 709 virtual void focusOutEvent( QFocusEvent *fe );
710 710
711 /** 711 /**
712 * Reimplemented for internal reasons. 712 * Reimplemented for internal reasons.
713 * Further reimplementations should call this function or else 713 * Further reimplementations should call this function or else
714 * some features may not work correctly. 714 * some features may not work correctly.
715 * 715 *
716 * The API is unaffected. 716 * The API is unaffected.
717 */ 717 */
718 virtual void leaveEvent( QEvent *e ); 718 virtual void leaveEvent( QEvent *e );
719 719
720 /** 720 /**
721 * @return the tooltip for @p column of @p item. 721 * @return the tooltip for @p column of @p item.
722 */ 722 */
723 virtual QString tooltip(QListViewItem* item, int column) const; 723 virtual QString tooltip(QListViewItem* item, int column) const;
724 724
725 /** 725 /**
726 * @return whether the tooltip for @p column of @p item shall be shown at point @p pos. 726 * @return whether the tooltip for @p column of @p item shall be shown at point @p pos.
727 */ 727 */
728 virtual bool showTooltip(QListViewItem *item, const QPoint &pos, int column) const; 728 virtual bool showTooltip(QListViewItem *item, const QPoint &pos, int column) const;
729 729
730 /** 730 /**
731 * Reimplemented for internal reasons. 731 * Reimplemented for internal reasons.
732 * Further reimplementations should call this function or else 732 * Further reimplementations should call this function or else
733 * some features may not work correctly. 733 * some features may not work correctly.
734 * 734 *
735 * The API is unaffected. 735 * The API is unaffected.
736 */ 736 */
737 virtual void contentsDragMoveEvent (QDragMoveEvent *event); 737 virtual void contentsDragMoveEvent (QDragMoveEvent *event);
738 738
739 /** 739 /**
740 * Reimplemented for internal reasons. 740 * Reimplemented for internal reasons.
741 * Further reimplementations should call this function or else 741 * Further reimplementations should call this function or else
742 * some features may not work correctly. 742 * some features may not work correctly.
743 * 743 *
744 * The API is unaffected. 744 * The API is unaffected.
745 */ 745 */
746 virtual void contentsMousePressEvent( QMouseEvent *e ); 746 virtual void contentsMousePressEvent( QMouseEvent *e );
747 747
748 /** 748 /**
749 * Reimplemented for internal reasons. 749 * Reimplemented for internal reasons.
750 * Further reimplementations should call this function or else 750 * Further reimplementations should call this function or else
751 * some features may not work correctly. 751 * some features may not work correctly.
752 * 752 *
753 * The API is unaffected. 753 * The API is unaffected.
754 */ 754 */
755 virtual void contentsMouseMoveEvent( QMouseEvent *e ); 755 virtual void contentsMouseMoveEvent( QMouseEvent *e );
756 756
757 /** 757 /**
758 * Reimplemented for internal reasons. 758 * Reimplemented for internal reasons.
759 * Further reimplementations should call this function or else 759 * Further reimplementations should call this function or else
760 * some features may not work correctly. 760 * some features may not work correctly.
761 * 761 *
762 * The API is unaffected. 762 * The API is unaffected.
763 */ 763 */
764 virtual void contentsMouseDoubleClickEvent ( QMouseEvent *e ); 764 virtual void contentsMouseDoubleClickEvent ( QMouseEvent *e );
765 765
766 /** 766 /**
767 * Reimplemented for internal reasons. 767 * Reimplemented for internal reasons.
768 * Further reimplementations should call this function or else 768 * Further reimplementations should call this function or else
769 * some features may not work correctly. 769 * some features may not work correctly.
770 * 770 *
771 * The API is unaffected. 771 * The API is unaffected.
772 */ 772 */
773 virtual void contentsDragLeaveEvent (QDragLeaveEvent *event); 773 virtual void contentsDragLeaveEvent (QDragLeaveEvent *event);
774 774
775 /** 775 /**
776 * Reimplemented for internal reasons. 776 * Reimplemented for internal reasons.
777 * Further reimplementations should call this function or else 777 * Further reimplementations should call this function or else
778 * some features may not work correctly. 778 * some features may not work correctly.
779 * 779 *
780 * The API is unaffected. 780 * The API is unaffected.
781 */ 781 */
782 virtual void contentsMouseReleaseEvent (QMouseEvent*); 782 virtual void contentsMouseReleaseEvent (QMouseEvent*);
783 783
784 /** 784 /**
785 * Reimplemented for internal reasons. 785 * Reimplemented for internal reasons.
786 * Further reimplementations should call this function or else 786 * Further reimplementations should call this function or else
787 * some features may not work correctly. 787 * some features may not work correctly.
788 * 788 *
789 * The API is unaffected. 789 * The API is unaffected.
790 */ 790 */
791 virtual void contentsDropEvent (QDropEvent*); 791 virtual void contentsDropEvent (QDropEvent*);
792 792
793 /** 793 /**
794 * Reimplemented for internal reasons. 794 * Reimplemented for internal reasons.
795 * Further reimplementations should call this function or else 795 * Further reimplementations should call this function or else
796 * some features may not work correctly. 796 * some features may not work correctly.
797 * 797 *
798 * The API is unaffected. 798 * The API is unaffected.
799 */ 799 */
800 virtual void contentsDragEnterEvent (QDragEnterEvent *); 800 virtual void contentsDragEnterEvent (QDragEnterEvent *);
801 801
802 /** 802 /**
803 * @return a dragobject encoding the current selection. 803 * @return a dragobject encoding the current selection.
804 * 804 *
805 * @see setDragEnabled() 805 * @see setDragEnabled()
806 */ 806 */
807 virtual QDragObject *dragObject(); 807 virtual QDragObject *dragObject();
808 808
809 /** 809 /**
810 * @return true if the @p event provides some acceptable 810 * @return true if the @p event provides some acceptable
811 * format. 811 * format.
812 * A common mistake is to forget the "const" in your reimplementation 812 * A common mistake is to forget the "const" in your reimplementation
813 */ 813 */
814 virtual bool acceptDrag (QDropEvent* event) const; 814 virtual bool acceptDrag (QDropEvent* event) const;
815 815
816 /** 816 /**
817 * Paint the drag line. If painter is null, don't try to :) 817 * Paint the drag line. If painter is null, don't try to :)
818 * 818 *
819 * If after == 0 then the marker should be drawn at the top. 819 * If after == 0 then the marker should be drawn at the top.
820 * 820 *
821 * @return the rectangle that you painted to. 821 * @return the rectangle that you painted to.
822 */ 822 */
823 virtual QRect drawDropVisualizer (QPainter *p, QListViewItem *parent, QListViewItem *after); 823 virtual QRect drawDropVisualizer (QPainter *p, QListViewItem *parent, QListViewItem *after);
824 824
825 /** 825 /**
826 * Paint the drag rectangle. If painter is null, don't try to :) 826 * Paint the drag rectangle. If painter is null, don't try to :)
827 * 827 *
828 * 828 *
829 * @return the rectangle that you painted to. 829 * @return the rectangle that you painted to.
830 */ 830 */
831 virtual QRect drawItemHighlighter(QPainter *painter, QListViewItem *item); 831 virtual QRect drawItemHighlighter(QPainter *painter, QListViewItem *item);
832 832
833 /** 833 /**
834 * This method calls @ref dragObject() and starts the drag. 834 * This method calls @ref dragObject() and starts the drag.
835 * 835 *
836 * Reimplement it to do fancy stuff like setting a pixmap or 836 * Reimplement it to do fancy stuff like setting a pixmap or
837 * using a non-default DragMode 837 * using a non-default DragMode
838 */ 838 */
839 virtual void startDrag(); 839 virtual void startDrag();
840 840
841 /** 841 /**
842 * Reimplemented for internal reasons. 842 * Reimplemented for internal reasons.
843 * Further reimplementations should call this function or else 843 * Further reimplementations should call this function or else
844 * some features may not work correctly. 844 * some features may not work correctly.
845 * 845 *
846 * The API is unaffected. 846 * The API is unaffected.
847 */ 847 */
848 virtual void keyPressEvent (QKeyEvent*); 848 virtual void keyPressEvent (QKeyEvent*);
849 849
850 /** 850 /**
851 * Reimplemented for internal reasons. 851 * Reimplemented for internal reasons.
852 * Further reimplementations should call this function or else 852 * Further reimplementations should call this function or else
853 * some features may not work correctly. 853 * some features may not work correctly.
854 * 854 *
855 * The API is unaffected. 855 * The API is unaffected.
856 */ 856 */
857 virtual void viewportPaintEvent(QPaintEvent*); 857 virtual void viewportPaintEvent(QPaintEvent*);
858 858
859 /** 859 /**
860 * In FileManager selection mode: explicitely activate the mode 860 * In FileManager selection mode: explicitely activate the mode
861 * in which the current item is automatically selected. 861 * in which the current item is automatically selected.
862 */ 862 */
863 void activateAutomaticSelection(); 863 void activateAutomaticSelection();
864 /** 864 /**
865 * In FileManager selection mode: explicitely deactivate the mode 865 * In FileManager selection mode: explicitely deactivate the mode
866 * in which the current item is automatically selected. 866 * in which the current item is automatically selected.
867 */ 867 */
868 void deactivateAutomaticSelection(); 868 void deactivateAutomaticSelection();
869 /** 869 /**
870 * In FileManager selection mode: return whether it is currently in the mode 870 * In FileManager selection mode: return whether it is currently in the mode
871 * where the current item is selected automatically. 871 * where the current item is selected automatically.
872 * Returns false if items were selected explicitely, e.g. using the mouse. 872 * Returns false if items were selected explicitely, e.g. using the mouse.
873 */ 873 */
874 bool automaticSelection() const; 874 bool automaticSelection() const;
875 875
876 /** 876 /**
877 * Reimplemented for setFullWidth() 877 * Reimplemented for setFullWidth()
878 */ 878 */
879 virtual void viewportResizeEvent(QResizeEvent* e); 879 virtual void viewportResizeEvent(QResizeEvent* e);
880 880
881protected slots: 881protected slots:
882 /** 882 /**
883 * Update internal settings whenever the global ones change. 883 * Update internal settings whenever the global ones change.
884 * @internal 884 * @internal
885 */ 885 */
886 void slotSettingsChanged(int); 886 void slotSettingsChanged(int);
887 887
888 void slotMouseButtonClicked( int btn, QListViewItem *item, const QPoint &pos, int c ); 888 void slotMouseButtonClicked( int btn, QListViewItem *item, const QPoint &pos, int c );
889 void doneEditing(QListViewItem *item, int row); 889 void doneEditing(QListViewItem *item, int row);
890 890
891 /** 891 /**
892 * Repaint the rect where I was drawing the drop line. 892 * Repaint the rect where I was drawing the drop line.
893 */ 893 */
894 void cleanDropVisualizer(); 894 void cleanDropVisualizer();
895 895
896 /** 896 /**
897 * Repaint the rect where I was drawing the drop rectangle. 897 * Repaint the rect where I was drawing the drop rectangle.
898 */ 898 */
899 void cleanItemHighlighter(); 899 void cleanItemHighlighter();
900 900
901 /** 901 /**
902 * Emit the @ref contextMenu signal. This slot is for mouse actions. 902 * Emit the @ref contextMenu signal. This slot is for mouse actions.
903 */ 903 */
904 void emitContextMenu (QListViewItem*, const QPoint&, int); 904 void emitContextMenu (QListViewItem*, const QPoint&, int);
905 905
906 /** 906 /**
907 * Emit the @ref #contextMenu signal. This slot is for key presses. 907 * Emit the @ref #contextMenu signal. This slot is for key presses.
908 */ 908 */
909 void emitContextMenu (KListView*, QListViewItem*); 909 void emitContextMenu (KListView*, QListViewItem*);
910 910
911 /** 911 /**
912 * Accessory slot for AutoSelect 912 * Accessory slot for AutoSelect
913 * @internal 913 * @internal
914 */ 914 */
915 void slotOnItem( QListViewItem *item ); 915 void slotOnItem( QListViewItem *item );
916 916
917 /** 917 /**
918 * Accessory slot for AutoSelect/ChangeCursorOverItem 918 * Accessory slot for AutoSelect/ChangeCursorOverItem
919 * @internal 919 * @internal
920 */ 920 */
921 void slotOnViewport(); 921 void slotOnViewport();
922 922
923 /** 923 /**
924 * Process AutoSelection. 924 * Process AutoSelection.
925 * @internal 925 * @internal
926 */ 926 */
927 void slotAutoSelect(); 927 void slotAutoSelect();
928 928
929 void slotDragExpand(); 929 void slotDragExpand();
930 930
931 /** 931 /**
932 * Reacts to header changes in full width mode 932 * Reacts to header changes in full width mode
933 * @internal 933 * @internal
934 */ 934 */
935 void slotHeaderChanged(); 935 void slotHeaderChanged();
936 936
937protected: 937protected:
938 /** 938 /**
939 * Handle dropEvent when itemsMovable() is set to true. 939 * Handle dropEvent when itemsMovable() is set to true.
940 */ 940 */
941 virtual void movableDropEvent (QListViewItem* parent, QListViewItem* afterme); 941 virtual void movableDropEvent (QListViewItem* parent, QListViewItem* afterme);
942 942
943 /** 943 /**
944 * Where is the nearest QListViewItem that I'm going to drop? 944 * Where is the nearest QListViewItem that I'm going to drop?
945 * 945 *
946 * FIXME KDE 4.0: Make this method const so it can be called from an 946 * FIXME KDE 4.0: Make this method const so it can be called from an
947 * acceptDrag method without ugly casts 947 * acceptDrag method without ugly casts
948 */ 948 */
949 virtual void findDrop(const QPoint &pos, QListViewItem *&parent, QListViewItem *&after); 949 virtual void findDrop(const QPoint &pos, QListViewItem *&parent, QListViewItem *&after);
950 950
951 /** 951 /**
952 * A special keyPressEvent (for FileManager selection mode). 952 * A special keyPressEvent (for FileManager selection mode).
953 */ 953 */
954 void fileManagerKeyPressEvent (QKeyEvent*); 954 void fileManagerKeyPressEvent (QKeyEvent*);
955 955
956 /** 956 /**
957 * Convert the depth of an item into its indentation in pixels 957 * Convert the depth of an item into its indentation in pixels
958 */ 958 */
959 int depthToPixels( int depth ); 959 int depthToPixels( int depth );
960 960
961private: 961private:
962 class Tooltip; 962 class Tooltip;
963protected: 963protected:
964 virtual void virtual_hook( int id, void* data ); 964 virtual void virtual_hook( int id, void* data );
965private: 965private:
966 class KListViewPrivate; 966 class KListViewPrivate;
967 KListViewPrivate *d; 967 KListViewPrivate *d;
968}; 968};
969 969
970/** 970/**
971 * A listview item with support for alternate background colours. It is 971 * A listview item with support for alternate background colours. It is
972 * a drop-in replacement for @ref QListViewItem 972 * a drop-in replacement for @ref QListViewItem
973 * 973 *
974 * @short listview item with alternate background colour support 974 * @short listview item with alternate background colour support
975 */ 975 */
976class KListViewItem : public QListViewItem 976class KListViewItem : public QListViewItem
977{ 977{
978public: 978public:
979 /** 979 /**
980 * constructors. The semantics remain as in @ref QListViewItem. 980 * constructors. The semantics remain as in @ref QListViewItem.
981 * Although they accept a @ref QListViewItem as parent, please 981 * Although they accept a @ref QListViewItem as parent, please
982 * don't mix KListViewItem (or subclasses) with QListViewItem 982 * don't mix KListViewItem (or subclasses) with QListViewItem
983 * (or subclasses). 983 * (or subclasses).
984 */ 984 */
985 KListViewItem(QListView *parent); 985 KListViewItem(QListView *parent);
986 KListViewItem(QListViewItem *parent); 986 KListViewItem(QListViewItem *parent);
987 KListViewItem(QListView *parent, QListViewItem *after); 987 KListViewItem(QListView *parent, QListViewItem *after);
988 KListViewItem(QListViewItem *parent, QListViewItem *after); 988 KListViewItem(QListViewItem *parent, QListViewItem *after);
989 989
990 KListViewItem(QListView *parent, 990 KListViewItem(QListView *parent,
991 QString, QString = QString::null, 991 QString, QString = QString::null,
992 QString = QString::null, QString = QString::null, 992 QString = QString::null, QString = QString::null,
993 QString = QString::null, QString = QString::null, 993 QString = QString::null, QString = QString::null,
994 QString = QString::null, QString = QString::null); 994 QString = QString::null, QString = QString::null);
995 995
996 KListViewItem(QListViewItem *parent, 996 KListViewItem(QListViewItem *parent,
997 QString, QString = QString::null, 997 QString, QString = QString::null,
998 QString = QString::null, QString = QString::null, 998 QString = QString::null, QString = QString::null,
999 QString = QString::null, QString = QString::null, 999 QString = QString::null, QString = QString::null,
1000 QString = QString::null, QString = QString::null); 1000 QString = QString::null, QString = QString::null);
1001 1001
1002 KListViewItem(QListView *parent, QListViewItem *after, 1002 KListViewItem(QListView *parent, QListViewItem *after,
1003 QString, QString = QString::null, 1003 QString, QString = QString::null,
1004 QString = QString::null, QString = QString::null, 1004 QString = QString::null, QString = QString::null,
1005 QString = QString::null, QString = QString::null, 1005 QString = QString::null, QString = QString::null,
1006 QString = QString::null, QString = QString::null); 1006 QString = QString::null, QString = QString::null);
1007 1007
1008 KListViewItem(QListViewItem *parent, QListViewItem *after, 1008 KListViewItem(QListViewItem *parent, QListViewItem *after,
1009 QString, QString = QString::null, 1009 QString, QString = QString::null,
1010 QString = QString::null, QString = QString::null, 1010 QString = QString::null, QString = QString::null,
1011 QString = QString::null, QString = QString::null, 1011 QString = QString::null, QString = QString::null,
1012 QString = QString::null, QString = QString::null); 1012 QString = QString::null, QString = QString::null);
1013 1013
1014 virtual ~KListViewItem(); 1014 virtual ~KListViewItem();
1015 1015
1016 /** 1016 /**
1017 * retuns true if this item is to be drawn with the alternate background 1017 * retuns true if this item is to be drawn with the alternate background
1018 */ 1018 */
1019 bool isAlternate(); 1019 bool isAlternate();
1020 /** 1020 /**
1021 * returns the background colour for this item 1021 * returns the background colour for this item
1022 */ 1022 */
1023 const QColor &backgroundColor(); 1023 const QColor &backgroundColor();
1024 1024
1025 virtual void paintCell(QPainter *p, const QColorGroup &cg, 1025 virtual void paintCell(QPainter *p, const QColorGroup &cg,
1026 int column, int width, int alignment); 1026 int column, int width, int alignment);
1027 1027
1028private: 1028private:
1029 void init(); 1029 void init();
1030 1030
1031private: 1031private:
1032 uint m_odd : 1; 1032 uint m_odd : 1;
1033 uint m_known : 1; 1033 uint m_known : 1;
1034 uint m_unused : 30; 1034 uint m_unused : 30;
1035}; 1035};
1036 1036
1037#endif 1037#endif
1038 1038
1039// vim: ts=2 sw=2 et 1039// vim: ts=2 sw=2 et