1 /*
2   This file is part of KOrganizer.
3 
4   SPDX-FileCopyrightText: 2001 Cornelius Schumacher <schumacher@kde.org>
5   SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
6   SPDX-FileCopyrightText: 2007 Mike McQuaid <mike@mikemcquaid.com>
7 
8   SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
9 */
10 
11 #pragma once
12 
13 #include <Akonadi/Calendar/ETMCalendar>
14 #include <Akonadi/Calendar/IncidenceChanger>
15 #include <Akonadi/Item>
16 
17 #include <QDate>
18 #include <QFrame>
19 
20 class QTextBrowser;
21 class QPushButton;
22 
23 namespace EventViews
24 {
25 class JournalFrame : public QFrame
26 {
27     Q_OBJECT
28 public:
29     using List = QList<JournalFrame *>;
30 
31     JournalFrame(const Akonadi::Item &journal, const Akonadi::ETMCalendar::Ptr &calendar, QWidget *parent);
32 
33     ~JournalFrame() override;
34     bool eventFilter(QObject *, QEvent *) override;
35 
36     void setJournal(const Akonadi::Item &journal);
journal()37     Q_REQUIRED_RESULT Akonadi::Item journal() const
38     {
39         return mJournal;
40     }
41 
42     void setCalendar(const Akonadi::ETMCalendar::Ptr &);
date()43     Q_REQUIRED_RESULT QDate date() const
44     {
45         return mDate;
46     }
47 
48     void clear();
49     void readJournal(const Akonadi::Item &journal);
50 
51 protected Q_SLOTS:
52     void setDirty();
53     void deleteItem();
54     void editItem();
55     void printJournal();
56     void printPreviewJournal();
57 
58 public Q_SLOTS:
setIncidenceChanger(Akonadi::IncidenceChanger * changer)59     void setIncidenceChanger(Akonadi::IncidenceChanger *changer)
60     {
61         mChanger = changer;
62     }
63 
64     void setDate(QDate date);
65 
66 Q_SIGNALS:
67     void printJournal(const KCalendarCore::Journal::Ptr &, bool preview);
68     void deleteIncidence(const Akonadi::Item &);
69     void editIncidence(const Akonadi::Item &);
70     void incidenceSelected(const Akonadi::Item &, const QDate &);
71 
72 private:
73     Akonadi::Item mJournal;
74     Akonadi::ETMCalendar::Ptr mCalendar;
75     QDate mDate;
76 
77     QTextBrowser *mBrowser = nullptr;
78     QPushButton *mEditButton = nullptr;
79     QPushButton *mDeleteButton = nullptr;
80     QPushButton *mPrintButton = nullptr;
81     QPushButton *mPrintPreviewButton = nullptr;
82 
83     bool mDirty;
84     bool mWriteInProgress;
85     Akonadi::IncidenceChanger *mChanger = nullptr;
86 };
87 
88 class JournalDateView : public QWidget
89 {
90     Q_OBJECT
91 public:
92     using List = QList<JournalDateView *>;
93 
94     JournalDateView(const Akonadi::ETMCalendar::Ptr &, QWidget *parent);
95     ~JournalDateView() override;
96 
97     void addJournal(const Akonadi::Item &journal);
98     Akonadi::Item::List journals() const;
99 
100     void setDate(QDate date);
date()101     QDate date() const
102     {
103         return mDate;
104     }
105 
106     void clear();
107 
108 Q_SIGNALS:
109     void setIncidenceChangerSignal(Akonadi::IncidenceChanger *changer);
110     void setDateSignal(const QDate &);
111     void flushEntries();
112     void editIncidence(const Akonadi::Item &journal);
113     void deleteIncidence(const Akonadi::Item &journal);
114     void newJournal(const QDate &);
115     void incidenceSelected(const Akonadi::Item &, const QDate &);
116     void printJournal(const KCalendarCore::Journal::Ptr &, bool preview);
117 
118 public Q_SLOTS:
119     void emitNewJournal();
120     void setIncidenceChanger(Akonadi::IncidenceChanger *changer);
121     void journalEdited(const Akonadi::Item &);
122     void journalDeleted(const Akonadi::Item &);
123 
124 private:
125     Akonadi::ETMCalendar::Ptr mCalendar;
126     QDate mDate;
127     QMap<Akonadi::Item::Id, JournalFrame *> mEntries;
128 
129     Akonadi::IncidenceChanger *mChanger = nullptr;
130 };
131 }
132 
133