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 };