File indexing completed on 2025-03-09 04:51:38

0001 /*
0002   This file is part of KOrganizer.
0003 
0004   SPDX-FileCopyrightText: 2007 Volker Krause <vkrause@kde.org>
0005 
0006   SPDX-License-Identifier: GPL-2.0-or-later
0007 */
0008 
0009 #pragma once
0010 
0011 #include "koeventview.h"
0012 
0013 #include <EventViews/ConfigDialogInterface>
0014 
0015 #include <QDialog>
0016 
0017 #include <QAbstractItemModel>
0018 
0019 #include <memory>
0020 
0021 namespace KOrg
0022 {
0023 class CalendarViewBase;
0024 class MultiAgendaViewPrivate;
0025 
0026 /**
0027   Shows one agenda for every resource side-by-side.
0028 */
0029 class MultiAgendaView : public KOEventView
0030 {
0031     Q_OBJECT
0032 public:
0033     explicit MultiAgendaView(CalendarViewBase *calendarView, QWidget *parent = nullptr);
0034     ~MultiAgendaView() override;
0035 
0036     void setModel(QAbstractItemModel *model) override;
0037 
0038     [[nodiscard]] Akonadi::Item::List selectedIncidences() override;
0039     [[nodiscard]] KCalendarCore::DateList selectedIncidenceDates() override;
0040     [[nodiscard]] int currentDateCount() const override;
0041     [[nodiscard]] int maxDatesHint() const override;
0042 
0043     [[nodiscard]] bool eventDurationHint(QDateTime &startDt, QDateTime &endDt, bool &allDay) override;
0044 
0045     void setCollectionSelectionProxyModel(KCheckableProxyModel *model);
0046 
0047     /**
0048      * reimplemented from KOrg::BaseView
0049      */
0050     [[nodiscard]] bool hasConfigurationDialog() const override;
0051 
0052     /**
0053      * reimplemented from KOrg::BaseView
0054      */
0055     void showConfigurationDialog(QWidget *parent) override;
0056 
0057     void setChanges(EventViews::EventView::Changes changes) override;
0058 
0059     KCheckableProxyModel *takeCustomCollectionSelectionProxyModel();
0060     void setCustomCollectionSelectionProxyModel(KCheckableProxyModel *model);
0061 
0062     void restoreConfig(const KConfigGroup &configGroup) override;
0063     void saveConfig(KConfigGroup &configGroup) override;
0064 
0065     void setDateRange(const QDateTime &start, const QDateTime &end, const QDate &preferredMonth = QDate()) override;
0066 
0067     [[nodiscard]] Akonadi::Collection::Id collectionId() const override;
0068 
0069 public Q_SLOTS:
0070     void showDates(const QDate &start, const QDate &end, const QDate &preferredMonth = QDate()) override;
0071     void showIncidences(const Akonadi::Item::List &incidenceList, const QDate &date) override;
0072     void updateView() override;
0073     void changeIncidenceDisplay(const Akonadi::Item &, Akonadi::IncidenceChanger::ChangeType) override;
0074     void updateConfig() override;
0075 
0076     void setIncidenceChanger(Akonadi::IncidenceChanger *changer) override;
0077 
0078     void calendarAdded(const Akonadi::CollectionCalendar::Ptr &calendar) override;
0079     void calendarRemoved(const Akonadi::CollectionCalendar::Ptr &calendar) override;
0080 
0081 private:
0082     std::unique_ptr<MultiAgendaViewPrivate> const d;
0083 };
0084 
0085 class MultiAgendaViewConfigDialogPrivate;
0086 
0087 class MultiAgendaViewConfigDialog : public QDialog, public EventViews::ConfigDialogInterface
0088 {
0089     Q_OBJECT
0090 public:
0091     explicit MultiAgendaViewConfigDialog(QAbstractItemModel *baseModel, QWidget *parent = nullptr);
0092     ~MultiAgendaViewConfigDialog() override;
0093 
0094     bool useCustomColumns() const override;
0095     void setUseCustomColumns(bool);
0096 
0097     int numberOfColumns() const override;
0098     void setNumberOfColumns(int n);
0099 
0100     QString columnTitle(int column) const override;
0101     void setColumnTitle(int column, const QString &title);
0102     KCheckableProxyModel *takeSelectionModel(int column) override;
0103     void setSelectionModel(int column, KCheckableProxyModel *model);
0104 
0105 public Q_SLOTS:
0106     /**
0107      * reimplemented from QDialog
0108      */
0109     void accept() override;
0110 
0111 private Q_SLOTS:
0112     void useCustomToggled(bool);
0113     void numberOfColumnsChanged(int);
0114     void currentChanged(const QModelIndex &index);
0115     void titleEdited(const QString &text);
0116 
0117 private:
0118     std::unique_ptr<MultiAgendaViewConfigDialogPrivate> const d;
0119 };
0120 }