1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2015 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt3Support module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 or version 3 as published by the Free 20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and 21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the 22 ** following information to ensure the GNU Lesser General Public License 23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and 24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 25 ** 26 ** As a special exception, The Qt Company gives you certain additional 27 ** rights. These rights are described in The Qt Company LGPL Exception 28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 29 ** 30 ** GNU General Public License Usage 31 ** Alternatively, this file may be used under the terms of the GNU 32 ** General Public License version 3.0 as published by the Free Software 33 ** Foundation and appearing in the file LICENSE.GPL included in the 34 ** packaging of this file. Please review the following information to 35 ** ensure the GNU General Public License version 3.0 requirements will be 36 ** met: http://www.gnu.org/copyleft/gpl.html. 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 #ifndef Q3LISTVIEW_H 43 #define Q3LISTVIEW_H 44 45 #include <Qt3Support/q3scrollview.h> 46 47 QT_BEGIN_HEADER 48 49 QT_BEGIN_NAMESPACE 50 51 QT_MODULE(Qt3SupportLight) 52 53 #ifndef QT_NO_LISTVIEW 54 55 class QPixmap; 56 class QFont; 57 class Q3Header; 58 class QIcon; 59 60 class Q3ListView; 61 struct Q3ListViewPrivate; 62 struct Q3CheckListItemPrivate; 63 class Q3ListViewItemIterator; 64 struct Q3ListViewItemIteratorPrivate; 65 class Q3DragObject; 66 class QMimeSource; 67 class QLineEdit; 68 class Q3ListViewToolTip; 69 70 class Q_COMPAT_EXPORT Q3ListViewItem 71 { 72 friend class Q3ListViewItemIterator; 73 friend class Q3ListViewToolTip; 74 75 public: 76 Q3ListViewItem(Q3ListView * parent); 77 Q3ListViewItem(Q3ListViewItem * parent); 78 Q3ListViewItem(Q3ListView * parent, Q3ListViewItem * after); 79 Q3ListViewItem(Q3ListViewItem * parent, Q3ListViewItem * after); 80 81 Q3ListViewItem(Q3ListView * parent, 82 const QString&, const QString& = QString(), 83 const QString& = QString(), const QString& = QString(), 84 const QString& = QString(), const QString& = QString(), 85 const QString& = QString(), const QString& = QString()); 86 Q3ListViewItem(Q3ListViewItem * parent, 87 const QString&, const QString& = QString(), 88 const QString& = QString(), const QString& = QString(), 89 const QString& = QString(), const QString& = QString(), 90 const QString& = QString(), const QString& = QString()); 91 92 Q3ListViewItem(Q3ListView * parent, Q3ListViewItem * after, 93 const QString&, const QString& = QString(), 94 const QString& = QString(), const QString& = QString(), 95 const QString& = QString(), const QString& = QString(), 96 const QString& = QString(), const QString& = QString()); 97 Q3ListViewItem(Q3ListViewItem * parent, Q3ListViewItem * after, 98 const QString&, const QString& = QString(), 99 const QString& = QString(), const QString& = QString(), 100 const QString& = QString(), const QString& = QString(), 101 const QString& = QString(), const QString& = QString()); 102 virtual ~Q3ListViewItem(); 103 104 virtual void insertItem(Q3ListViewItem *); 105 virtual void takeItem(Q3ListViewItem *); removeItem(Q3ListViewItem * item)106 virtual void removeItem(Q3ListViewItem *item) { takeItem(item); } 107 108 int height() const; 109 virtual void invalidateHeight(); 110 int totalHeight() const; 111 virtual int width(const QFontMetrics&, 112 const Q3ListView*, int column) const; 113 void widthChanged(int column=-1) const; 114 int depth() const; 115 116 virtual void setText(int, const QString &); 117 virtual QString text(int) const; 118 119 virtual void setPixmap(int, const QPixmap &); 120 virtual const QPixmap * pixmap(int) const; 121 122 virtual QString key(int, bool) const; 123 virtual int compare(Q3ListViewItem *i, int col, bool) const; 124 virtual void sortChildItems(int, bool); 125 childCount()126 int childCount() const { return nChildren; } 127 isOpen()128 bool isOpen() const { return open; } 129 virtual void setOpen(bool); 130 virtual void setup(); 131 132 virtual void setSelected(bool); isSelected()133 bool isSelected() const { return selected; } 134 135 virtual void paintCell(QPainter *, const QColorGroup & cg, 136 int column, int width, int alignment); 137 virtual void paintBranches(QPainter * p, const QColorGroup & cg, int w, int y, int h); 138 virtual void paintFocus(QPainter *, const QColorGroup & cg, const QRect & r); 139 140 Q3ListViewItem * firstChild() const; nextSibling()141 Q3ListViewItem * nextSibling() const { return siblingItem; } 142 Q3ListViewItem * parent() const; 143 144 Q3ListViewItem * itemAbove() const; 145 Q3ListViewItem * itemBelow() const; 146 147 int itemPos() const; 148 149 Q3ListView *listView() const; 150 151 virtual void setSelectable(bool enable); isSelectable()152 bool isSelectable() const { return selectable && enabled; } 153 154 virtual void setExpandable(bool); isExpandable()155 bool isExpandable() const { return expandable; } 156 157 void repaint() const; 158 159 virtual void sort(); 160 void moveItem(Q3ListViewItem *after); 161 162 virtual void setDragEnabled(bool allow); 163 virtual void setDropEnabled(bool allow); 164 bool dragEnabled() const; 165 bool dropEnabled() const; 166 virtual bool acceptDrop(const QMimeSource *mime) const; 167 168 void setVisible(bool b); 169 bool isVisible() const; 170 171 virtual void setRenameEnabled(int col, bool b); 172 bool renameEnabled(int col) const; 173 virtual void startRename(int col); 174 175 virtual void setEnabled(bool b); 176 bool isEnabled() const; 177 178 virtual int rtti() const; 179 enum { RTTI = 0 }; 180 181 virtual void setMultiLinesEnabled(bool b); 182 bool multiLinesEnabled() const; 183 184 protected: 185 virtual void enforceSortOrder() const; 186 virtual void setHeight(int); 187 virtual void activate(); 188 189 bool activatedPos(QPoint &); 190 #ifndef QT_NO_DRAGANDDROP 191 virtual void dropped(QDropEvent *e); 192 #endif 193 virtual void dragEntered(); 194 virtual void dragLeft(); 195 virtual void okRename(int col); 196 virtual void cancelRename(int col); 197 198 void ignoreDoubleClick(); 199 200 private: 201 void init(); 202 void moveToJustAfter(Q3ListViewItem *); 203 void enforceSortOrderBackToRoot(); 204 void removeRenameBox(); 205 206 int ownHeight; 207 int maybeTotalHeight; 208 int nChildren; 209 210 uint lsc: 14; 211 uint lso: 1; 212 uint open : 1; 213 uint selected : 1; 214 uint selectable: 1; 215 uint configured: 1; 216 uint expandable: 1; 217 uint is_root: 1; 218 uint allow_drag : 1; 219 uint allow_drop : 1; 220 uint visible : 1; 221 uint enabled : 1; 222 uint mlenabled : 1; 223 224 Q3ListViewItem * parentItem; 225 Q3ListViewItem * siblingItem; 226 Q3ListViewItem * childItem; 227 QLineEdit *renameBox; 228 int renameCol; 229 230 void * columns; 231 232 friend class Q3ListView; 233 }; 234 235 class Q3CheckListItem; 236 237 class Q_COMPAT_EXPORT Q3ListView : public Q3ScrollView 238 { 239 friend class Q3ListViewItemIterator; 240 friend class Q3ListViewItem; 241 friend class Q3CheckListItem; 242 friend class Q3ListViewToolTip; 243 244 Q_OBJECT 245 Q_ENUMS(SelectionMode ResizeMode RenameAction) 246 Q_PROPERTY(int columns READ columns) 247 Q_PROPERTY(bool multiSelection READ isMultiSelection WRITE setMultiSelection DESIGNABLE false) 248 Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) 249 Q_PROPERTY(int childCount READ childCount) 250 Q_PROPERTY(bool allColumnsShowFocus READ allColumnsShowFocus WRITE setAllColumnsShowFocus) 251 Q_PROPERTY(bool showSortIndicator READ showSortIndicator WRITE setShowSortIndicator) 252 Q_PROPERTY(int itemMargin READ itemMargin WRITE setItemMargin) 253 Q_PROPERTY(bool rootIsDecorated READ rootIsDecorated WRITE setRootIsDecorated) 254 Q_PROPERTY(bool showToolTips READ showToolTips WRITE setShowToolTips) 255 Q_PROPERTY(ResizeMode resizeMode READ resizeMode WRITE setResizeMode) 256 Q_PROPERTY(int treeStepSize READ treeStepSize WRITE setTreeStepSize) 257 Q_PROPERTY(RenameAction defaultRenameAction READ defaultRenameAction WRITE setDefaultRenameAction) 258 259 public: 260 Q3ListView(QWidget* parent=0, const char* name=0, Qt::WindowFlags f = 0); 261 ~Q3ListView(); 262 263 int treeStepSize() const; 264 virtual void setTreeStepSize(int); 265 266 virtual void insertItem(Q3ListViewItem *); 267 virtual void takeItem(Q3ListViewItem *); removeItem(Q3ListViewItem * item)268 virtual void removeItem(Q3ListViewItem *item) { takeItem(item); } 269 270 Q3Header * header() const; 271 272 virtual int addColumn(const QString &label, int size = -1); 273 virtual int addColumn(const QIcon& icon, const QString &label, int size = -1); 274 virtual void removeColumn(int index); 275 virtual void setColumnText(int column, const QString &label); 276 virtual void setColumnText(int column, const QIcon& icon, const QString &label); 277 QString columnText(int column) const; 278 virtual void setColumnWidth(int column, int width); 279 int columnWidth(int column) const; 280 enum WidthMode { Manual, Maximum }; 281 virtual void setColumnWidthMode(int column, WidthMode); 282 WidthMode columnWidthMode(int column) const; 283 int columns() const; 284 285 virtual void setColumnAlignment(int, int); 286 int columnAlignment(int) const; 287 288 void show(); 289 290 QVariant inputMethodQuery(Qt::InputMethodQuery query) const; 291 Q3ListViewItem * itemAt(const QPoint & screenPos) const; 292 QRect itemRect(const Q3ListViewItem *) const; 293 int itemPos(const Q3ListViewItem *); 294 295 void ensureItemVisible(const Q3ListViewItem *); 296 297 void repaintItem(const Q3ListViewItem *) const; 298 299 virtual void setMultiSelection(bool enable); 300 bool isMultiSelection() const; 301 302 enum SelectionMode { Single, Multi, Extended, NoSelection }; 303 void setSelectionMode(SelectionMode mode); 304 SelectionMode selectionMode() const; 305 306 virtual void clearSelection(); 307 virtual void setSelected(Q3ListViewItem *, bool); 308 void setSelectionAnchor(Q3ListViewItem *); 309 bool isSelected(const Q3ListViewItem *) const; 310 Q3ListViewItem * selectedItem() const; 311 virtual void setOpen(Q3ListViewItem *, bool); 312 bool isOpen(const Q3ListViewItem *) const; 313 314 virtual void setCurrentItem(Q3ListViewItem *); 315 Q3ListViewItem * currentItem() const; 316 317 Q3ListViewItem * firstChild() const; 318 Q3ListViewItem * lastItem() const; 319 320 int childCount() const; 321 322 virtual void setAllColumnsShowFocus(bool); 323 bool allColumnsShowFocus() const; 324 325 virtual void setItemMargin(int); 326 int itemMargin() const; 327 328 virtual void setRootIsDecorated(bool); 329 bool rootIsDecorated() const; 330 331 virtual void setSorting(int column, bool ascending = true); 332 int sortColumn() const; 333 void setSortColumn(int column); 334 Qt::SortOrder sortOrder() const; 335 void setSortOrder(Qt::SortOrder order); 336 virtual void sort(); 337 338 bool eventFilter(QObject * o, QEvent *); 339 340 QSize sizeHint() const; 341 QSize minimumSizeHint() const; 342 343 virtual void setShowSortIndicator(bool show); 344 bool showSortIndicator() const; 345 virtual void setShowToolTips(bool b); 346 bool showToolTips() const; 347 348 enum ResizeMode { NoColumn, AllColumns, LastColumn }; 349 virtual void setResizeMode(ResizeMode m); 350 ResizeMode resizeMode() const; 351 352 enum StringComparisonMode { 353 CaseSensitive = 0x00001, // 0 0001 354 BeginsWith = 0x00002, // 0 0010 355 EndsWith = 0x00004, // 0 0100 356 Contains = 0x00008, // 0 1000 357 ExactMatch = 0x00010 // 1 0000 358 }; 359 typedef uint ComparisonFlags; 360 Q3ListViewItem * findItem(const QString& text, int column, 361 ComparisonFlags = ExactMatch | Qt::CaseSensitive ) const; 362 363 enum RenameAction { Accept, Reject }; 364 virtual void setDefaultRenameAction(RenameAction a); 365 RenameAction defaultRenameAction() const; 366 bool isRenaming() const; 367 368 void hideColumn(int column); 369 370 public Q_SLOTS: 371 virtual void clear(); 372 virtual void invertSelection(); 373 virtual void selectAll(bool select); 374 void triggerUpdate(); 375 void setContentsPos(int x, int y); 376 void adjustColumn(int col); 377 378 Q_SIGNALS: 379 void selectionChanged(); 380 void selectionChanged(Q3ListViewItem *); 381 void currentChanged(Q3ListViewItem *); 382 void clicked(Q3ListViewItem *); 383 void clicked(Q3ListViewItem *, const QPoint &, int); 384 void pressed(Q3ListViewItem *); 385 void pressed(Q3ListViewItem *, const QPoint &, int); 386 387 void doubleClicked(Q3ListViewItem *); 388 void doubleClicked(Q3ListViewItem *, const QPoint&, int); 389 void returnPressed(Q3ListViewItem *); 390 void spacePressed(Q3ListViewItem *); 391 void rightButtonClicked(Q3ListViewItem *, const QPoint&, int); 392 void rightButtonPressed(Q3ListViewItem *, const QPoint&, int); 393 void mouseButtonPressed(int, Q3ListViewItem *, const QPoint& , int); 394 void mouseButtonClicked(int, Q3ListViewItem *, const QPoint&, int); 395 396 void contextMenuRequested(Q3ListViewItem *, const QPoint &, int); 397 398 void onItem(Q3ListViewItem *item); 399 void onViewport(); 400 401 void expanded(Q3ListViewItem *item); 402 void collapsed(Q3ListViewItem *item); 403 #ifndef QT_NO_DRAGANDDROP 404 void dropped(QDropEvent *e); 405 #endif 406 void itemRenamed(Q3ListViewItem *item, int col, const QString &); 407 void itemRenamed(Q3ListViewItem *item, int col ); 408 409 protected: 410 void contentsMousePressEvent(QMouseEvent * e); 411 void contentsMouseReleaseEvent(QMouseEvent * e); 412 void contentsMouseMoveEvent(QMouseEvent * e); 413 void contentsMouseDoubleClickEvent(QMouseEvent * e); 414 void contentsContextMenuEvent(QContextMenuEvent * e); 415 #ifndef QT_NO_DRAGANDDROP 416 void contentsDragEnterEvent(QDragEnterEvent *e); 417 void contentsDragMoveEvent(QDragMoveEvent *e); 418 void contentsDragLeaveEvent(QDragLeaveEvent *e); 419 void contentsDropEvent(QDropEvent *e); 420 virtual Q3DragObject *dragObject(); 421 virtual void startDrag(); 422 #endif 423 424 void focusInEvent(QFocusEvent * e); 425 void focusOutEvent(QFocusEvent * e); 426 427 void keyPressEvent(QKeyEvent *e); 428 429 void resizeEvent(QResizeEvent *e); 430 void viewportResizeEvent(QResizeEvent *e); 431 432 void showEvent(QShowEvent *); 433 434 void drawContentsOffset(QPainter *, int ox, int oy, 435 int cx, int cy, int cw, int ch); 436 437 virtual void paintEmptyArea(QPainter *, const QRect &); 438 void changeEvent(QEvent *); 439 440 protected Q_SLOTS: 441 void updateContents(); 442 void doAutoScroll(); 443 444 private Q_SLOTS: 445 void changeSortColumn(int); 446 void handleIndexChange(); 447 void updateDirtyItems(); 448 void makeVisible(); 449 void handleSizeChange(int, int, int); 450 void startRename(); 451 void openFocusItem(); 452 453 private: 454 Q_DISABLE_COPY(Q3ListView) 455 456 void contentsMousePressEventEx(QMouseEvent * e); 457 void contentsMouseReleaseEventEx(QMouseEvent * e); 458 void init(); 459 void updateGeometries(); 460 void buildDrawableList() const; 461 void reconfigureItems(); 462 void widthChanged(const Q3ListViewItem*, int c); 463 void handleItemChange(Q3ListViewItem *old, bool shift, bool control); 464 void selectRange(Q3ListViewItem *from, Q3ListViewItem *to, bool invert, bool includeFirst, bool clearSel = false); 465 bool selectRange(Q3ListViewItem *newItem, Q3ListViewItem *oldItem, Q3ListViewItem *anchorItem); 466 bool clearRange(Q3ListViewItem *from, Q3ListViewItem *to, bool includeFirst = true); 467 void doAutoScroll(const QPoint &cursorPos); 468 469 Q3ListViewPrivate *d; 470 }; 471 472 473 class Q_COMPAT_EXPORT Q3CheckListItem : public Q3ListViewItem 474 { 475 public: 476 enum Type { RadioButton, 477 CheckBox, 478 Controller, 479 RadioButtonController=Controller, 480 CheckBoxController }; 481 482 enum ToggleState { Off, NoChange, On }; 483 484 Q3CheckListItem(Q3CheckListItem *parent, const QString &text, 485 Type = RadioButtonController); 486 Q3CheckListItem(Q3CheckListItem *parent, Q3ListViewItem *after, 487 const QString &text, Type = RadioButtonController); 488 Q3CheckListItem(Q3ListViewItem *parent, const QString &text, 489 Type = RadioButtonController); 490 Q3CheckListItem(Q3ListViewItem *parent, Q3ListViewItem *after, 491 const QString &text, Type = RadioButtonController); 492 Q3CheckListItem(Q3ListView *parent, const QString &text, 493 Type = RadioButtonController); 494 Q3CheckListItem(Q3ListView *parent, Q3ListViewItem *after, 495 const QString &text, Type = RadioButtonController); 496 Q3CheckListItem(Q3ListViewItem *parent, const QString &text, 497 const QPixmap &); 498 Q3CheckListItem(Q3ListView *parent, const QString &text, 499 const QPixmap &); 500 ~Q3CheckListItem(); 501 502 void paintCell(QPainter *, const QColorGroup & cg, 503 int column, int width, int alignment); 504 virtual void paintFocus(QPainter *, const QColorGroup &cg, 505 const QRect & r); 506 int width(const QFontMetrics&, const Q3ListView*, int column) const; 507 void setup(); 508 509 virtual void setOn(bool); isOn()510 bool isOn() const { return on; } type()511 Type type() const { return myType; } text()512 QString text() const { return Q3ListViewItem::text(0); } text(int n)513 QString text(int n) const { return Q3ListViewItem::text(n); } 514 515 void setTristate(bool); 516 bool isTristate() const; 517 ToggleState state() const; 518 void setState(ToggleState s); 519 520 int rtti() const; 521 enum { RTTI = 1 }; 522 523 protected: 524 void activate(); 525 void turnOffChild(); 526 virtual void stateChange(bool); 527 528 private: 529 void init(); 530 ToggleState internalState() const; 531 void setStoredState(ToggleState newState, Q3CheckListItem *key); 532 ToggleState storedState(Q3CheckListItem *key) const; 533 void stateChange(ToggleState s); 534 void restoreState(Q3CheckListItem *key, int depth = 0); 535 void updateController(bool update = true , bool store = false); 536 void updateStoredState(Q3CheckListItem *key); 537 void setState(ToggleState s, bool update, bool store); 538 void setCurrentState(ToggleState s); 539 540 Type myType; 541 bool on; 542 Q3CheckListItemPrivate *d; 543 }; 544 545 class Q_COMPAT_EXPORT Q3ListViewItemIterator 546 { 547 friend struct Q3ListViewPrivate; 548 friend class Q3ListView; 549 friend class Q3ListViewItem; 550 551 public: 552 enum IteratorFlag { 553 Visible = 0x00000001, 554 Invisible = 0x00000002, 555 Selected = 0x00000004, 556 Unselected = 0x00000008, 557 Selectable = 0x00000010, 558 NotSelectable = 0x00000020, 559 DragEnabled = 0x00000040, 560 DragDisabled = 0x00000080, 561 DropEnabled = 0x00000100, 562 DropDisabled = 0x00000200, 563 Expandable = 0x00000400, 564 NotExpandable = 0x00000800, 565 Checked = 0x00001000, 566 NotChecked = 0x00002000 567 }; 568 569 Q3ListViewItemIterator(); 570 Q3ListViewItemIterator(Q3ListViewItem *item); 571 Q3ListViewItemIterator(Q3ListViewItem *item, int iteratorFlags); 572 573 Q3ListViewItemIterator(const Q3ListViewItemIterator &it); 574 Q3ListViewItemIterator(Q3ListView *lv); 575 Q3ListViewItemIterator(Q3ListView *lv, int iteratorFlags); 576 577 Q3ListViewItemIterator &operator=(const Q3ListViewItemIterator &it); 578 579 ~Q3ListViewItemIterator(); 580 581 Q3ListViewItemIterator &operator++(); 582 const Q3ListViewItemIterator operator++(int); 583 Q3ListViewItemIterator &operator+=(int j); 584 585 Q3ListViewItemIterator &operator--(); 586 const Q3ListViewItemIterator operator--(int); 587 Q3ListViewItemIterator &operator-=(int j); 588 589 Q3ListViewItem* operator*(); 590 Q3ListViewItem *current() const; 591 592 private: 593 Q3ListViewItem *curr; 594 Q3ListView *listView; 595 int flags; 596 597 void currentRemoved(); 598 bool matchesFlags(const Q3ListViewItem*) const; 599 bool testPair(Q3ListViewItemIterator::IteratorFlag, Q3ListViewItemIterator::IteratorFlag, bool) const; 600 bool isChecked(const Q3ListViewItem*) const; 601 }; 602 603 #endif // QT_NO_LISTVIEW 604 605 QT_END_NAMESPACE 606 607 QT_END_HEADER 608 609 #endif // Q3LISTVIEW_H 610