1
/****************************************************************************
3
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
5
** This file is part of the Qt 3 compatibility classes of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
32
#include "Qt3Support/q3scrollview.h"
34
#ifndef QT_NO_LISTVIEW
43
struct Q3ListViewPrivate;
44
struct Q3CheckListItemPrivate;
45
class Q3ListViewItemIterator;
46
struct Q3ListViewItemIteratorPrivate;
50
class Q3ListViewToolTip;
52
class Q_COMPAT_EXPORT Q3ListViewItem
54
friend class Q3ListViewItemIterator;
55
friend class Q3ListViewToolTip;
58
Q3ListViewItem(Q3ListView * parent);
59
Q3ListViewItem(Q3ListViewItem * parent);
60
Q3ListViewItem(Q3ListView * parent, Q3ListViewItem * after);
61
Q3ListViewItem(Q3ListViewItem * parent, Q3ListViewItem * after);
63
Q3ListViewItem(Q3ListView * parent,
64
const QString&, const QString& = QString(),
65
const QString& = QString(), const QString& = QString(),
66
const QString& = QString(), const QString& = QString(),
67
const QString& = QString(), const QString& = QString());
68
Q3ListViewItem(Q3ListViewItem * parent,
69
const QString&, const QString& = QString(),
70
const QString& = QString(), const QString& = QString(),
71
const QString& = QString(), const QString& = QString(),
72
const QString& = QString(), const QString& = QString());
74
Q3ListViewItem(Q3ListView * parent, Q3ListViewItem * after,
75
const QString&, const QString& = QString(),
76
const QString& = QString(), const QString& = QString(),
77
const QString& = QString(), const QString& = QString(),
78
const QString& = QString(), const QString& = QString());
79
Q3ListViewItem(Q3ListViewItem * parent, Q3ListViewItem * after,
80
const QString&, const QString& = QString(),
81
const QString& = QString(), const QString& = QString(),
82
const QString& = QString(), const QString& = QString(),
83
const QString& = QString(), const QString& = QString());
84
virtual ~Q3ListViewItem();
86
virtual void insertItem(Q3ListViewItem *);
87
virtual void takeItem(Q3ListViewItem *);
88
virtual void removeItem(Q3ListViewItem *item) { takeItem(item); }
91
virtual void invalidateHeight();
92
int totalHeight() const;
93
virtual int width(const QFontMetrics&,
94
const Q3ListView*, int column) const;
95
void widthChanged(int column=-1) const;
98
virtual void setText(int, const QString &);
99
virtual QString text(int) const;
101
virtual void setPixmap(int, const QPixmap &);
102
virtual const QPixmap * pixmap(int) const;
104
virtual QString key(int, bool) const;
105
virtual int compare(Q3ListViewItem *i, int col, bool) const;
106
virtual void sortChildItems(int, bool);
108
int childCount() const { return nChildren; }
110
bool isOpen() const { return open; }
111
virtual void setOpen(bool);
112
virtual void setup();
114
virtual void setSelected(bool);
115
bool isSelected() const { return selected; }
117
virtual void paintCell(QPainter *, const QColorGroup & cg,
118
int column, int width, int alignment);
119
virtual void paintBranches(QPainter * p, const QColorGroup & cg, int w, int y, int h);
120
virtual void paintFocus(QPainter *, const QColorGroup & cg, const QRect & r);
122
Q3ListViewItem * firstChild() const;
123
Q3ListViewItem * nextSibling() const { return siblingItem; }
124
Q3ListViewItem * parent() const;
126
Q3ListViewItem * itemAbove() const;
127
Q3ListViewItem * itemBelow() const;
131
Q3ListView *listView() const;
133
virtual void setSelectable(bool enable);
134
bool isSelectable() const { return selectable && enabled; }
136
virtual void setExpandable(bool);
137
bool isExpandable() const { return expandable; }
139
void repaint() const;
142
void moveItem(Q3ListViewItem *after);
144
virtual void setDragEnabled(bool allow);
145
virtual void setDropEnabled(bool allow);
146
bool dragEnabled() const;
147
bool dropEnabled() const;
148
virtual bool acceptDrop(const QMimeSource *mime) const;
150
void setVisible(bool b);
151
bool isVisible() const;
153
virtual void setRenameEnabled(int col, bool b);
154
bool renameEnabled(int col) const;
155
virtual void startRename(int col);
157
virtual void setEnabled(bool b);
158
bool isEnabled() const;
160
virtual int rtti() const;
163
virtual void setMultiLinesEnabled(bool b);
164
bool multiLinesEnabled() const;
167
virtual void enforceSortOrder() const;
168
virtual void setHeight(int);
169
virtual void activate();
171
bool activatedPos(QPoint &);
172
#ifndef QT_NO_DRAGANDDROP
173
virtual void dropped(QDropEvent *e);
175
virtual void dragEntered();
176
virtual void dragLeft();
177
virtual void okRename(int col);
178
virtual void cancelRename(int col);
180
void ignoreDoubleClick();
184
void moveToJustAfter(Q3ListViewItem *);
185
void enforceSortOrderBackToRoot();
186
void removeRenameBox();
189
int maybeTotalHeight;
206
Q3ListViewItem * parentItem;
207
Q3ListViewItem * siblingItem;
208
Q3ListViewItem * childItem;
209
QLineEdit *renameBox;
214
friend class Q3ListView;
217
class Q3CheckListItem;
219
class Q_COMPAT_EXPORT Q3ListView : public Q3ScrollView
221
friend class Q3ListViewItemIterator;
222
friend class Q3ListViewItem;
223
friend class Q3CheckListItem;
224
friend class Q3ListViewToolTip;
227
Q_ENUMS(SelectionMode ResizeMode RenameAction)
228
Q_PROPERTY(int columns READ columns)
229
Q_PROPERTY(bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false)
230
Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
231
Q_PROPERTY(int childCount READ childCount)
232
Q_PROPERTY(bool allColumnsShowFocus READ allColumnsShowFocus WRITE setAllColumnsShowFocus)
233
Q_PROPERTY(bool showSortIndicator READ showSortIndicator WRITE setShowSortIndicator)
234
Q_PROPERTY(int itemMargin READ itemMargin WRITE setItemMargin)
235
Q_PROPERTY(bool rootIsDecorated READ rootIsDecorated WRITE setRootIsDecorated)
236
Q_PROPERTY(bool showToolTips READ showToolTips WRITE setShowToolTips)
237
Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode)
238
Q_PROPERTY(int treeStepSize READ treeStepSize WRITE setTreeStepSize)
239
Q_PROPERTY(RenameAction defaultRenameAction READ defaultRenameAction WRITE setDefaultRenameAction)
242
Q3ListView(QWidget* parent=0, const char* name=0, Qt::WFlags f = 0);
245
int treeStepSize() const;
246
virtual void setTreeStepSize(int);
248
virtual void insertItem(Q3ListViewItem *);
249
virtual void takeItem(Q3ListViewItem *);
250
virtual void removeItem(Q3ListViewItem *item) { takeItem(item); }
252
Q3Header * header() const;
254
virtual int addColumn(const QString &label, int size = -1);
255
virtual int addColumn(const QIcon& icon, const QString &label, int size = -1);
256
virtual void removeColumn(int index);
257
virtual void setColumnText(int column, const QString &label);
258
virtual void setColumnText(int column, const QIcon& icon, const QString &label);
259
QString columnText(int column) const;
260
virtual void setColumnWidth(int column, int width);
261
int columnWidth(int column) const;
262
enum WidthMode { Manual, Maximum };
263
virtual void setColumnWidthMode(int column, WidthMode);
264
WidthMode columnWidthMode(int column) const;
267
virtual void setColumnAlignment(int, int);
268
int columnAlignment(int) const;
272
QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
273
Q3ListViewItem * itemAt(const QPoint & screenPos) const;
274
QRect itemRect(const Q3ListViewItem *) const;
275
int itemPos(const Q3ListViewItem *);
277
void ensureItemVisible(const Q3ListViewItem *);
279
void repaintItem(const Q3ListViewItem *) const;
281
virtual void setMultiSelection(bool enable);
282
bool isMultiSelection() const;
284
enum SelectionMode { Single, Multi, Extended, NoSelection };
285
void setSelectionMode(SelectionMode mode);
286
SelectionMode selectionMode() const;
288
virtual void clearSelection();
289
virtual void setSelected(Q3ListViewItem *, bool);
290
void setSelectionAnchor(Q3ListViewItem *);
291
bool isSelected(const Q3ListViewItem *) const;
292
Q3ListViewItem * selectedItem() const;
293
virtual void setOpen(Q3ListViewItem *, bool);
294
bool isOpen(const Q3ListViewItem *) const;
296
virtual void setCurrentItem(Q3ListViewItem *);
297
Q3ListViewItem * currentItem() const;
299
Q3ListViewItem * firstChild() const;
300
Q3ListViewItem * lastItem() const;
302
int childCount() const;
304
virtual void setAllColumnsShowFocus(bool);
305
bool allColumnsShowFocus() const;
307
virtual void setItemMargin(int);
308
int itemMargin() const;
310
virtual void setRootIsDecorated(bool);
311
bool rootIsDecorated() const;
313
virtual void setSorting(int column, bool ascending = true);
314
int sortColumn() const;
315
void setSortColumn(int column);
316
Qt::SortOrder sortOrder() const;
317
void setSortOrder(Qt::SortOrder order);
320
bool eventFilter(QObject * o, QEvent *);
322
QSize sizeHint() const;
323
QSize minimumSizeHint() const;
325
virtual void setShowSortIndicator(bool show);
326
bool showSortIndicator() const;
327
virtual void setShowToolTips(bool b);
328
bool showToolTips() const;
330
enum ResizeMode { NoColumn, AllColumns, LastColumn };
331
virtual void setResizeMode(ResizeMode m);
332
ResizeMode resizeMode() const;
334
enum StringComparisonMode {
335
CaseSensitive = 0x00001, // 0 0001
336
BeginsWith = 0x00002, // 0 0010
337
EndsWith = 0x00004, // 0 0100
338
Contains = 0x00008, // 0 1000
339
ExactMatch = 0x00010 // 1 0000
341
typedef uint ComparisonFlags;
342
Q3ListViewItem * findItem(const QString& text, int column,
343
ComparisonFlags = ExactMatch | Qt::CaseSensitive ) const;
345
enum RenameAction { Accept, Reject };
346
virtual void setDefaultRenameAction(RenameAction a);
347
RenameAction defaultRenameAction() const;
348
bool isRenaming() const;
350
void hideColumn(int column);
353
virtual void clear();
354
virtual void invertSelection();
355
virtual void selectAll(bool select);
356
void triggerUpdate();
357
void setContentsPos(int x, int y);
358
void adjustColumn(int col);
361
void selectionChanged();
362
void selectionChanged(Q3ListViewItem *);
363
void currentChanged(Q3ListViewItem *);
364
void clicked(Q3ListViewItem *);
365
void clicked(Q3ListViewItem *, const QPoint &, int);
366
void pressed(Q3ListViewItem *);
367
void pressed(Q3ListViewItem *, const QPoint &, int);
369
void doubleClicked(Q3ListViewItem *);
370
void doubleClicked(Q3ListViewItem *, const QPoint&, int);
371
void returnPressed(Q3ListViewItem *);
372
void spacePressed(Q3ListViewItem *);
373
void rightButtonClicked(Q3ListViewItem *, const QPoint&, int);
374
void rightButtonPressed(Q3ListViewItem *, const QPoint&, int);
375
void mouseButtonPressed(int, Q3ListViewItem *, const QPoint& , int);
376
void mouseButtonClicked(int, Q3ListViewItem *, const QPoint&, int);
378
void contextMenuRequested(Q3ListViewItem *, const QPoint &, int);
380
void onItem(Q3ListViewItem *item);
383
void expanded(Q3ListViewItem *item);
384
void collapsed(Q3ListViewItem *item);
385
#ifndef QT_NO_DRAGANDDROP
386
void dropped(QDropEvent *e);
388
void itemRenamed(Q3ListViewItem *item, int col, const QString &);
389
void itemRenamed(Q3ListViewItem *item, int col );
392
void contentsMousePressEvent(QMouseEvent * e);
393
void contentsMouseReleaseEvent(QMouseEvent * e);
394
void contentsMouseMoveEvent(QMouseEvent * e);
395
void contentsMouseDoubleClickEvent(QMouseEvent * e);
396
void contentsContextMenuEvent(QContextMenuEvent * e);
397
#ifndef QT_NO_DRAGANDDROP
398
void contentsDragEnterEvent(QDragEnterEvent *e);
399
void contentsDragMoveEvent(QDragMoveEvent *e);
400
void contentsDragLeaveEvent(QDragLeaveEvent *e);
401
void contentsDropEvent(QDropEvent *e);
402
virtual Q3DragObject *dragObject();
403
virtual void startDrag();
406
void focusInEvent(QFocusEvent * e);
407
void focusOutEvent(QFocusEvent * e);
409
void keyPressEvent(QKeyEvent *e);
411
void resizeEvent(QResizeEvent *e);
412
void viewportResizeEvent(QResizeEvent *e);
414
void showEvent(QShowEvent *);
416
void drawContentsOffset(QPainter *, int ox, int oy,
417
int cx, int cy, int cw, int ch);
419
virtual void paintEmptyArea(QPainter *, const QRect &);
420
void changeEvent(QEvent *);
423
void updateContents();
427
void changeSortColumn(int);
428
void handleIndexChange();
429
void updateDirtyItems();
431
void handleSizeChange(int, int, int);
433
void openFocusItem();
436
Q_DISABLE_COPY(Q3ListView)
438
void contentsMousePressEventEx(QMouseEvent * e);
439
void contentsMouseReleaseEventEx(QMouseEvent * e);
441
void updateGeometries();
442
void buildDrawableList() const;
443
void reconfigureItems();
444
void widthChanged(const Q3ListViewItem*, int c);
445
void handleItemChange(Q3ListViewItem *old, bool shift, bool control);
446
void selectRange(Q3ListViewItem *from, Q3ListViewItem *to, bool invert, bool includeFirst, bool clearSel = false);
447
bool selectRange(Q3ListViewItem *newItem, Q3ListViewItem *oldItem, Q3ListViewItem *anchorItem);
448
bool clearRange(Q3ListViewItem *from, Q3ListViewItem *to, bool includeFirst = true);
449
void doAutoScroll(const QPoint &cursorPos);
451
Q3ListViewPrivate *d;
455
class Q_COMPAT_EXPORT Q3CheckListItem : public Q3ListViewItem
458
enum Type { RadioButton,
461
RadioButtonController=Controller,
462
CheckBoxController };
464
enum ToggleState { Off, NoChange, On };
466
Q3CheckListItem(Q3CheckListItem *parent, const QString &text,
467
Type = RadioButtonController);
468
Q3CheckListItem(Q3CheckListItem *parent, Q3ListViewItem *after,
469
const QString &text, Type = RadioButtonController);
470
Q3CheckListItem(Q3ListViewItem *parent, const QString &text,
471
Type = RadioButtonController);
472
Q3CheckListItem(Q3ListViewItem *parent, Q3ListViewItem *after,
473
const QString &text, Type = RadioButtonController);
474
Q3CheckListItem(Q3ListView *parent, const QString &text,
475
Type = RadioButtonController);
476
Q3CheckListItem(Q3ListView *parent, Q3ListViewItem *after,
477
const QString &text, Type = RadioButtonController);
478
Q3CheckListItem(Q3ListViewItem *parent, const QString &text,
480
Q3CheckListItem(Q3ListView *parent, const QString &text,
484
void paintCell(QPainter *, const QColorGroup & cg,
485
int column, int width, int alignment);
486
virtual void paintFocus(QPainter *, const QColorGroup &cg,
488
int width(const QFontMetrics&, const Q3ListView*, int column) const;
491
virtual void setOn(bool);
492
bool isOn() const { return on; }
493
Type type() const { return myType; }
494
QString text() const { return Q3ListViewItem::text(0); }
495
QString text(int n) const { return Q3ListViewItem::text(n); }
497
void setTristate(bool);
498
bool isTristate() const;
499
ToggleState state() const;
500
void setState(ToggleState s);
508
virtual void stateChange(bool);
512
ToggleState internalState() const;
513
void setStoredState(ToggleState newState, Q3CheckListItem *key);
514
ToggleState storedState(Q3CheckListItem *key) const;
515
void stateChange(ToggleState s);
516
void restoreState(Q3CheckListItem *key, int depth = 0);
517
void updateController(bool update = true , bool store = false);
518
void updateStoredState(Q3CheckListItem *key);
519
void setState(ToggleState s, bool update, bool store);
520
void setCurrentState(ToggleState s);
524
Q3CheckListItemPrivate *d;
527
class Q_COMPAT_EXPORT Q3ListViewItemIterator
529
friend struct Q3ListViewPrivate;
530
friend class Q3ListView;
531
friend class Q3ListViewItem;
535
Visible = 0x00000001,
536
Invisible = 0x00000002,
537
Selected = 0x00000004,
538
Unselected = 0x00000008,
539
Selectable = 0x00000010,
540
NotSelectable = 0x00000020,
541
DragEnabled = 0x00000040,
542
DragDisabled = 0x00000080,
543
DropEnabled = 0x00000100,
544
DropDisabled = 0x00000200,
545
Expandable = 0x00000400,
546
NotExpandable = 0x00000800,
547
Checked = 0x00001000,
548
NotChecked = 0x00002000
551
Q3ListViewItemIterator();
552
Q3ListViewItemIterator(Q3ListViewItem *item);
553
Q3ListViewItemIterator(Q3ListViewItem *item, int iteratorFlags);
555
Q3ListViewItemIterator(const Q3ListViewItemIterator &it);
556
Q3ListViewItemIterator(Q3ListView *lv);
557
Q3ListViewItemIterator(Q3ListView *lv, int iteratorFlags);
559
Q3ListViewItemIterator &operator=(const Q3ListViewItemIterator &it);
561
~Q3ListViewItemIterator();
563
Q3ListViewItemIterator &operator++();
564
const Q3ListViewItemIterator operator++(int);
565
Q3ListViewItemIterator &operator+=(int j);
567
Q3ListViewItemIterator &operator--();
568
const Q3ListViewItemIterator operator--(int);
569
Q3ListViewItemIterator &operator-=(int j);
571
Q3ListViewItem* operator*();
572
Q3ListViewItem *current() const;
575
Q3ListViewItem *curr;
576
Q3ListView *listView;
579
void currentRemoved();
580
bool matchesFlags(const Q3ListViewItem*) const;
581
bool testPair(Q3ListViewItemIterator::IteratorFlag, Q3ListViewItemIterator::IteratorFlag, bool) const;
582
bool isChecked(const Q3ListViewItem*) const;
585
#endif // QT_NO_LISTVIEW
587
#endif // Q3LISTVIEW_H