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 }