File indexing completed on 2024-06-23 05:08:10
0001 /* 0002 This file is part of KOrganizer. 0003 0004 SPDX-FileCopyrightText: 2000, 2001, 2003 Cornelius Schumacher <schumacher@kde.org> 0005 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> 0006 SPDX-FileCopyrightText: 2005 Rafal Rzepecki <divide@users.sourceforge.net> 0007 SPDX-FileCopyrightText: 2008 Thomas Thrainer <tom_t@gmx.at> 0008 0009 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0010 */ 0011 #pragma once 0012 0013 #include "eventview.h" 0014 #include <Akonadi/IncidenceChanger> 0015 0016 #include <QPointer> 0017 #include <akonadi/collectioncalendar.h> 0018 0019 class KJob; 0020 class TodoCategoriesDelegate; 0021 class TodoViewQuickAddLine; 0022 class TodoViewQuickSearch; 0023 class TodoViewSortFilterProxyModel; 0024 class TodoViewView; 0025 0026 namespace Akonadi 0027 { 0028 class ETMViewStateSaver; 0029 } 0030 0031 class QItemSelection; 0032 class QMenu; 0033 class QModelIndex; 0034 class QToolButton; 0035 class QTimer; 0036 class KConfig; 0037 class KDatePickerPopup; 0038 namespace EventViews 0039 { 0040 0041 class CalendarFilterModel; 0042 0043 /** 0044 * This class provides a view for Todo items. 0045 0046 * @short View for Todo components. 0047 * @author Cornelius Schumacher <schumacher@kde.org>, Reinhold Kainhofer <reinhold@kainhofer.com> 0048 * @see EventView 0049 */ 0050 class EVENTVIEWS_EXPORT TodoView : public EventViews::EventView 0051 { 0052 Q_OBJECT 0053 friend class ModelStack; 0054 0055 public: 0056 TodoView(const EventViews::PrefsPtr &preferences, bool sidebarView, QWidget *parent); 0057 ~TodoView() override; 0058 0059 void setModel(QAbstractItemModel *model) override; 0060 void addCalendar(const Akonadi::CollectionCalendar::Ptr &calendar) override; 0061 void removeCalendar(const Akonadi::CollectionCalendar::Ptr &calendar) override; 0062 0063 [[nodiscard]] Akonadi::Item::List selectedIncidences() const override; 0064 [[nodiscard]] KCalendarCore::DateList selectedIncidenceDates() const override; 0065 [[nodiscard]] int currentDateCount() const override 0066 { 0067 return 0; 0068 } 0069 0070 void setDocumentId(const QString &) 0071 { 0072 } 0073 0074 void saveLayout(KConfig *config, const QString &group) const; 0075 0076 void restoreLayout(KConfig *config, const QString &group, bool minimalDefaults); 0077 0078 /** documentation in baseview.h */ 0079 void getHighlightMode(bool &highlightEvents, bool &highlightTodos, bool &highlightJournals); 0080 0081 [[nodiscard]] bool usesFullWindow(); 0082 0083 [[nodiscard]] bool supportsDateRangeSelection() const 0084 { 0085 return false; 0086 } 0087 0088 public Q_SLOTS: 0089 void setIncidenceChanger(Akonadi::IncidenceChanger *changer) override; 0090 void showDates(const QDate &start, const QDate &end, const QDate &preferredMonth = QDate()) override; 0091 void showIncidences(const Akonadi::Item::List &incidenceList, const QDate &date) override; 0092 void updateView() override; 0093 virtual void changeIncidenceDisplay(const Akonadi::Item &incidence, Akonadi::IncidenceChanger::ChangeType changeType); 0094 void updateConfig() override; 0095 void clearSelection() override; 0096 void expandIndex(const QModelIndex &index); 0097 void restoreViewState(); 0098 void saveViewState(); 0099 0100 void createNote(); 0101 void createEvent(); 0102 0103 protected Q_SLOTS: 0104 void resizeEvent(QResizeEvent *) override; 0105 void addQuickTodo(Qt::KeyboardModifiers modifier); 0106 0107 void contextMenu(QPoint pos); 0108 0109 void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); 0110 0111 // slots used by popup-menus 0112 void showTodo(); 0113 void editTodo(); 0114 void deleteTodo(); 0115 void newTodo(); 0116 void newSubTodo(); 0117 void copyTodoToDate(QDate date); 0118 0119 private Q_SLOTS: 0120 EVENTVIEWS_NO_EXPORT void scheduleResizeColumns(); 0121 EVENTVIEWS_NO_EXPORT void resizeColumns(); 0122 EVENTVIEWS_NO_EXPORT void itemDoubleClicked(const QModelIndex &index); 0123 EVENTVIEWS_NO_EXPORT void setNewDate(QDate date); 0124 EVENTVIEWS_NO_EXPORT void setStartDate(QDate date); 0125 EVENTVIEWS_NO_EXPORT void setNewPercentage(QAction *action); 0126 EVENTVIEWS_NO_EXPORT void setNewPriority(QAction *action); 0127 EVENTVIEWS_NO_EXPORT void changedCategories(QAction *action); 0128 EVENTVIEWS_NO_EXPORT void setFullView(bool fullView); 0129 0130 EVENTVIEWS_NO_EXPORT void setFlatView(bool flatView, bool notifyOtherViews = true); 0131 0132 EVENTVIEWS_NO_EXPORT void onRowsInserted(const QModelIndex &parent, int start, int end); 0133 EVENTVIEWS_NO_EXPORT void onTagsFetched(KJob *); 0134 0135 Q_SIGNALS: 0136 void purgeCompletedSignal(); 0137 void unSubTodoSignal(); 0138 void unAllSubTodoSignal(); 0139 void configChanged(); 0140 void fullViewChanged(bool enabled); 0141 void printPreviewTodo(); 0142 void printTodo(); 0143 0144 void createNote(const Akonadi::Item &item); 0145 void createEvent(const Akonadi::Item &item); 0146 0147 private: 0148 EVENTVIEWS_NO_EXPORT QMenu *createCategoryPopupMenu(); 0149 EVENTVIEWS_NO_EXPORT QString stateSaverGroup() const; 0150 0151 /** Creates a new todo with the given text as summary under the given parent */ 0152 void addTodo(const QString &summary, const Akonadi::Item &parentItem, const QStringList &categories = QStringList()); 0153 0154 TodoViewView *mView = nullptr; 0155 TodoViewSortFilterProxyModel *mProxyModel = nullptr; 0156 TodoCategoriesDelegate *mCategoriesDelegate = nullptr; 0157 std::unique_ptr<CalendarFilterModel> mCalendarFilterModel; 0158 0159 TodoViewQuickSearch *mQuickSearch = nullptr; 0160 TodoViewQuickAddLine *mQuickAdd = nullptr; 0161 QToolButton *mFullViewButton = nullptr; 0162 QToolButton *mFlatViewButton = nullptr; 0163 0164 QMenu *mItemPopupMenu = nullptr; 0165 KDatePickerPopup *mCopyPopupMenu = nullptr; 0166 KDatePickerPopup *mMovePopupMenu = nullptr; 0167 QMenu *mPriorityPopupMenu = nullptr; 0168 QMenu *mPercentageCompletedPopupMenu = nullptr; 0169 QList<QAction *> mItemPopupMenuItemOnlyEntries; 0170 QList<QAction *> mItemPopupMenuReadWriteEntries; 0171 0172 QAction *mMakeTodoIndependent = nullptr; 0173 QAction *mMakeSubtodosIndependent = nullptr; 0174 0175 QPointer<Akonadi::ETMViewStateSaver> mTreeStateRestorer; 0176 0177 QMap<QAction *, int> mPercentage; 0178 QMap<QAction *, int> mPriority; 0179 bool mSidebarView; 0180 bool mResizeColumnsScheduled; 0181 QTimer *mResizeColumnsTimer = nullptr; 0182 }; 0183 }