styleditemdelegate.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #ifndef STYLEDITEMDELEGATE_H
  2. #define STYLEDITEMDELEGATE_H
  3. #include <QStyledItemDelegate>
  4. #include <QSharedPointer>
  5. #include <QBrush>
  6. #include <QList>
  7. #include <core/global.h>
  8. class QTextDocument;
  9. namespace vnotex
  10. {
  11. class ListWidget;
  12. class TreeWidget;
  13. class SimpleSegmentHighlighter;
  14. class StyledItemDelegateInterface
  15. {
  16. public:
  17. virtual ~StyledItemDelegateInterface() = default;
  18. };
  19. class StyledItemDelegateListWidget : public StyledItemDelegateInterface
  20. {
  21. public:
  22. explicit StyledItemDelegateListWidget(const ListWidget *p_listWidget);
  23. };
  24. class StyledItemDelegateTreeWidget : public StyledItemDelegateInterface
  25. {
  26. public:
  27. explicit StyledItemDelegateTreeWidget(const TreeWidget *p_treeWidget);
  28. };
  29. // Template is not supported with QObject.
  30. class StyledItemDelegate : public QStyledItemDelegate
  31. {
  32. Q_OBJECT
  33. public:
  34. enum DelegateFlag
  35. {
  36. None = 0,
  37. Highlights = 0x1
  38. };
  39. Q_DECLARE_FLAGS(DelegateFlags, DelegateFlag);
  40. StyledItemDelegate(const QSharedPointer<StyledItemDelegateInterface> &p_interface,
  41. DelegateFlags p_flags = DelegateFlag::None,
  42. QObject *p_parent = nullptr);
  43. void paint(QPainter *p_painter,
  44. const QStyleOptionViewItem &p_option,
  45. const QModelIndex &p_index) const Q_DECL_OVERRIDE;
  46. QSize sizeHint(const QStyleOptionViewItem &p_option, const QModelIndex &p_index) const Q_DECL_OVERRIDE;
  47. static QBrush s_highlightForeground;
  48. static QBrush s_highlightBackground;
  49. private:
  50. void initialize();
  51. void paintWithHighlights(QPainter *p_painter,
  52. const QStyleOptionViewItem &p_option,
  53. const QModelIndex &p_index,
  54. const QList<Segment> &p_segments) const;
  55. QSharedPointer<StyledItemDelegateInterface> m_interface;
  56. DelegateFlags m_flags = DelegateFlag::None;
  57. QTextDocument *m_document = nullptr;
  58. SimpleSegmentHighlighter *m_highlighter = nullptr;
  59. };
  60. }
  61. Q_DECLARE_OPERATORS_FOR_FLAGS(vnotex::StyledItemDelegate::DelegateFlags)
  62. #endif // STYLEDITEMDELEGATE_H