File indexing completed on 2024-05-12 05:21:19
0001 /* 0002 This file is part of KOrganizer. 0003 0004 SPDX-FileCopyrightText: 2003, 2004 Cornelius Schumacher <schumacher@kde.org> 0005 SPDX-FileCopyrightText: 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com> 0006 SPDX-FileCopyrightText: 2009 Sebastian Sauer <sebsauer@kdab.net> 0007 0008 SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0 0009 */ 0010 0011 #pragma once 0012 0013 #include "calendarview.h" 0014 #include "views/collectionview/reparentingmodel.h" 0015 #include <Akonadi/Collection> 0016 0017 class AkonadiCollectionView; 0018 class ManageShowCollectionProperties; 0019 0020 namespace Akonadi 0021 { 0022 class EntityTreeView; 0023 class EntityTreeModel; 0024 class StandardCalendarActionManager; 0025 } 0026 0027 class QAction; 0028 class KJob; 0029 class QAbstractProxyModel; 0030 class QModelIndex; 0031 0032 /** 0033 * The factory for AkonadiCollectionView instances. 0034 */ 0035 class AkonadiCollectionViewFactory : public CalendarViewExtension::Factory 0036 { 0037 public: 0038 explicit AkonadiCollectionViewFactory(CalendarView *view); 0039 0040 CalendarView *view() const; 0041 AkonadiCollectionView *collectionView() const; 0042 0043 CalendarViewExtension *create(QWidget *) override; 0044 0045 private: 0046 CalendarView *mView = nullptr; 0047 AkonadiCollectionView *mAkonadiCollectionView = nullptr; 0048 }; 0049 0050 class NewNodeExpander; 0051 0052 /** 0053 * This class provides a view of calendar resources. 0054 */ 0055 class AkonadiCollectionView : public CalendarViewExtension 0056 { 0057 Q_OBJECT 0058 public: 0059 explicit AkonadiCollectionView(CalendarView *view, bool hasContextMenu = true, QWidget *parent = nullptr); 0060 ~AkonadiCollectionView() override; 0061 0062 Akonadi::EntityTreeView *view() const; 0063 0064 KCheckableProxyModel *collectionSelectionProxyModel() const; 0065 void setCollectionSelectionProxyModel(KCheckableProxyModel *); 0066 0067 [[nodiscard]] Akonadi::Collection selectedCollection() const; 0068 [[nodiscard]] Akonadi::Collection::List checkedCollections() const; 0069 [[nodiscard]] bool isChecked(const Akonadi::Collection &) const; 0070 [[nodiscard]] Akonadi::Collection currentCalendar() const; 0071 0072 Q_SIGNALS: 0073 void collectionEnabled(const Akonadi::Collection &); 0074 void collectionDisabled(const Akonadi::Collection &); 0075 0076 void resourcesChanged(bool enabled); 0077 void resourcesAddedRemoved(); 0078 void defaultResourceChanged(const Akonadi::Collection &); 0079 void colorsChanged(); 0080 0081 private Q_SLOTS: 0082 void updateView(); 0083 void updateMenu(); 0084 0085 void newCalendar(); 0086 void newCalendarDone(KJob *); 0087 0088 void deleteCalendar(); 0089 void deleteCalendarDone(KJob *); 0090 void rowsInserted(const QModelIndex &, int, int); 0091 void assignColor(); 0092 void setDefaultCalendar(); 0093 void onAction(const QModelIndex &index, int action); 0094 void slotServerSideSubscription(); 0095 0096 void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); 0097 0098 private: 0099 Akonadi::EntityTreeModel *entityTreeModel() const; 0100 0101 CalendarView *mCalendarView = nullptr; 0102 Akonadi::StandardCalendarActionManager *mActionManager = nullptr; 0103 Akonadi::EntityTreeView *mCollectionView = nullptr; 0104 QAbstractProxyModel *mBaseModel = nullptr; 0105 KCheckableProxyModel *mSelectionProxyModel = nullptr; 0106 QAction *mAssignColor = nullptr; 0107 QAction *mDefaultCalendar = nullptr; 0108 QAction *mServerSideSubscription = nullptr; 0109 bool mNotSendAddRemoveSignal = false; 0110 bool mWasDefaultCalendar = false; 0111 const bool mHasContextMenu; 0112 NewNodeExpander *mNewNodeExpander = nullptr; 0113 ManageShowCollectionProperties *mManagerShowCollectionProperties = nullptr; 0114 };