File indexing completed on 2024-06-23 05:08:09

0001 /*
0002   This file is part of KOrganizer.
0003 
0004   SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at>
0005 
0006   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #pragma once
0010 
0011 #include <QStyledItemDelegate>
0012 
0013 class QPainter;
0014 class QSize;
0015 class QStyleOptionViewItem;
0016 class QTextDocument;
0017 
0018 /**
0019   This delegate is responsible for displaying progress bars for the completion
0020   status of indivitual todos. It also provides a slider to change the completion
0021   status of the todo when in editing mode.
0022 
0023   @author Thomas Thrainer
0024 */
0025 class TodoCompleteDelegate : public QStyledItemDelegate
0026 {
0027     Q_OBJECT
0028 public:
0029     explicit TodoCompleteDelegate(QObject *parent = nullptr);
0030 
0031     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0032     QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0033 
0034     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0035     void setEditorData(QWidget *editor, const QModelIndex &index) const override;
0036     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
0037     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0038 
0039 private:
0040     void initStyleOptionProgressBar(QStyleOptionProgressBar *option, const QModelIndex &index) const;
0041 };
0042 
0043 class TodoCompleteSlider : public QSlider
0044 {
0045     Q_OBJECT
0046 
0047 public:
0048     explicit TodoCompleteSlider(QWidget *parent);
0049 
0050 private Q_SLOTS:
0051     void updateTip(int value);
0052 };
0053 
0054 /**
0055   This delegate is responsible for displaying the priority of todos.
0056   It also provides a combo box to change the priority of the todo
0057   when in editing mode.
0058 
0059   @author Thomas Thrainer
0060  */
0061 class TodoPriorityDelegate : public QStyledItemDelegate
0062 {
0063     Q_OBJECT
0064 public:
0065     explicit TodoPriorityDelegate(QObject *parent = nullptr);
0066 
0067     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0068     void setEditorData(QWidget *editor, const QModelIndex &index) const override;
0069     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
0070     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0071 };
0072 
0073 /**
0074   This delegate is responsible for displaying the due date of todos.
0075   It also provides a combo box to change the due date of the todo
0076   when in editing mode.
0077 
0078   @author Thomas Thrainer
0079  */
0080 class TodoDueDateDelegate : public QStyledItemDelegate
0081 {
0082     Q_OBJECT
0083 public:
0084     explicit TodoDueDateDelegate(QObject *parent = nullptr);
0085 
0086     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0087     void setEditorData(QWidget *editor, const QModelIndex &index) const override;
0088     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
0089     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0090 };
0091 
0092 /**
0093   This delegate is responsible for displaying the categories of todos.
0094   It also provides a combo box to change the categories of the todo
0095   when in editing mode.
0096 
0097   @author Thomas Thrainer
0098  */
0099 class TodoCategoriesDelegate : public QStyledItemDelegate
0100 {
0101     Q_OBJECT
0102 public:
0103     explicit TodoCategoriesDelegate(QObject *parent = nullptr);
0104 
0105     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0106     void setEditorData(QWidget *editor, const QModelIndex &index) const override;
0107     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override;
0108     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0109 };
0110 
0111 /**
0112   This delegate is responsible for displaying possible rich text elements
0113   of a todo. That's the summary and the description.
0114 
0115   @author Thomas Thrainer
0116  */
0117 class TodoRichTextDelegate : public QStyledItemDelegate
0118 {
0119     Q_OBJECT
0120 public:
0121     explicit TodoRichTextDelegate(QObject *parent = nullptr);
0122 
0123     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0124     QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
0125 
0126 private:
0127     QTextDocument *m_textDoc = nullptr;
0128 };