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 }