1 /* 2 SPDX-License-Identifier: GPL-2.0-or-later 3 4 SPDX-FileCopyrightText: 2006-2009 Eike Hein <hein@kde.org> 5 */ 6 7 // FIXME KF5 Port: ViewTree TODO: Close buttons, DND, separator painting. 8 9 #ifndef VIEWTREE_H 10 #define VIEWTREE_H 11 12 #include <QStyledItemDelegate> 13 #include <QTreeView> 14 #include <QPointer> 15 16 class ChatWindow; 17 class ViewTree; 18 19 class ViewTreeDelegate : public QStyledItemDelegate 20 { 21 Q_OBJECT 22 23 public: 24 explicit ViewTreeDelegate(ViewTree *parent = nullptr); 25 ~ViewTreeDelegate() override; 26 27 QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const override; 28 QSize preferredSizeHint(const QModelIndex& index) const; 29 30 void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; 31 32 private: 33 ViewTree* m_view; 34 35 Q_DISABLE_COPY(ViewTreeDelegate) 36 }; 37 38 class ViewTree : public QTreeView 39 { 40 Q_OBJECT 41 42 public: 43 explicit ViewTree(QWidget *parent); 44 ~ViewTree() override; 45 46 void setModel(QAbstractItemModel *model) override; 47 48 bool dropIndicatorOnItem() const; 49 50 public Q_SLOTS: 51 void updateAppearance(); 52 void selectView(const QModelIndex &index); 53 54 Q_SIGNALS: 55 void sizeChanged(); 56 void showView(ChatWindow* view); 57 void closeView(ChatWindow* view); 58 void showViewContextMenu(QWidget* widget, const QPoint& point); 59 60 protected: 61 bool event(QEvent* event) override; 62 void paintEvent(QPaintEvent* event) override; 63 void drawRow(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; 64 void resizeEvent(QResizeEvent* event) override; 65 void mousePressEvent(QMouseEvent* event) override; 66 void mouseReleaseEvent(QMouseEvent* event) override; 67 void mouseMoveEvent(QMouseEvent *event) override; 68 void dragEnterEvent(QDragEnterEvent *event) override; 69 void dragMoveEvent(QDragMoveEvent *event) override; 70 void contextMenuEvent(QContextMenuEvent* event) override; 71 void wheelEvent(QWheelEvent* event) override; 72 void keyPressEvent(QKeyEvent* event) override; 73 74 private Q_SLOTS: 75 void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected) override; 76 77 private: 78 QPointer<ChatWindow> m_pressedView; 79 80 QPoint m_pressPos; 81 82 int m_accumulatedWheelDelta; 83 bool m_lastWheelDeltaDirection; 84 85 Q_DISABLE_COPY(ViewTree) 86 }; 87 88 #endif 89