File indexing completed on 2024-06-16 04:51:12
0001 /* 0002 This file is part of KOrganizer. 0003 0004 SPDX-FileCopyrightText: 2001 Cornelius Schumacher <schumacher@kde.org> 0005 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> 0006 SPDX-FileCopyrightText: 2007 Mike McQuaid <mike@mikemcquaid.com> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0009 */ 0010 0011 #pragma once 0012 0013 #include <Akonadi/CollectionCalendar> 0014 #include <Akonadi/IncidenceChanger> 0015 #include <Akonadi/Item> 0016 0017 #include <QDate> 0018 #include <QFrame> 0019 0020 class QTextBrowser; 0021 class QPushButton; 0022 0023 namespace EventViews 0024 { 0025 class JournalFrame : public QFrame 0026 { 0027 Q_OBJECT 0028 public: 0029 using List = QList<JournalFrame *>; 0030 0031 JournalFrame(const Akonadi::Item &journal, const Akonadi::CollectionCalendar::Ptr &calendar, QWidget *parent); 0032 0033 ~JournalFrame() override; 0034 bool eventFilter(QObject *, QEvent *) override; 0035 0036 void setJournal(const Akonadi::Item &journal); 0037 [[nodiscard]] Akonadi::Item journal() const 0038 { 0039 return mJournal; 0040 } 0041 0042 void setCalendar(const Akonadi::CollectionCalendar::Ptr &); 0043 [[nodiscard]] QDate date() const 0044 { 0045 return mDate; 0046 } 0047 0048 void clear(); 0049 void readJournal(const Akonadi::Item &journal); 0050 0051 protected Q_SLOTS: 0052 void setDirty(); 0053 void deleteItem(); 0054 void editItem(); 0055 void printJournal(); 0056 void printPreviewJournal(); 0057 0058 public Q_SLOTS: 0059 void setIncidenceChanger(Akonadi::IncidenceChanger *changer) 0060 { 0061 mChanger = changer; 0062 } 0063 0064 void setDate(QDate date); 0065 0066 Q_SIGNALS: 0067 void printJournal(const KCalendarCore::Journal::Ptr &, bool preview); 0068 void deleteIncidence(const Akonadi::Item &); 0069 void editIncidence(const Akonadi::Item &); 0070 void incidenceSelected(const Akonadi::Item &, const QDate &); 0071 0072 private: 0073 Akonadi::Item mJournal; 0074 Akonadi::CollectionCalendar::Ptr mCalendar; 0075 QDate mDate; 0076 0077 QTextBrowser *mBrowser = nullptr; 0078 QPushButton *mEditButton = nullptr; 0079 QPushButton *mDeleteButton = nullptr; 0080 QPushButton *mPrintButton = nullptr; 0081 QPushButton *mPrintPreviewButton = nullptr; 0082 0083 bool mDirty; 0084 bool mWriteInProgress; 0085 Akonadi::IncidenceChanger *mChanger = nullptr; 0086 }; 0087 0088 class JournalDateView : public QWidget 0089 { 0090 Q_OBJECT 0091 public: 0092 using List = QList<JournalDateView *>; 0093 0094 JournalDateView(const Akonadi::CollectionCalendar::Ptr &, QWidget *parent); 0095 ~JournalDateView() override; 0096 0097 void addJournal(const Akonadi::Item &journal); 0098 Akonadi::Item::List journals() const; 0099 0100 void setDate(QDate date); 0101 QDate date() const 0102 { 0103 return mDate; 0104 } 0105 0106 void clear(); 0107 0108 Q_SIGNALS: 0109 void setIncidenceChangerSignal(Akonadi::IncidenceChanger *changer); 0110 void setDateSignal(const QDate &); 0111 void flushEntries(); 0112 void editIncidence(const Akonadi::Item &journal); 0113 void deleteIncidence(const Akonadi::Item &journal); 0114 void newJournal(const QDate &); 0115 void incidenceSelected(const Akonadi::Item &, const QDate &); 0116 void printJournal(const KCalendarCore::Journal::Ptr &, bool preview); 0117 0118 public Q_SLOTS: 0119 void emitNewJournal(); 0120 void setIncidenceChanger(Akonadi::IncidenceChanger *changer); 0121 void journalEdited(const Akonadi::Item &); 0122 void journalDeleted(const Akonadi::Item &); 0123 0124 private: 0125 Akonadi::CollectionCalendar::Ptr mCalendar; 0126 QDate mDate; 0127 QMap<Akonadi::Item::Id, JournalFrame *> mEntries; 0128 0129 Akonadi::IncidenceChanger *mChanger = nullptr; 0130 }; 0131 }