1 /*
2    SPDX-FileCopyrightText: 2013-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 #pragma once
7 
8 #include <Akonadi/Collection>
9 #include <QIdentityProxyModel>
10 #include <QModelIndex>
11 #include <QWidget>
12 class QSortFilterProxyModel;
13 namespace Akonadi
14 {
15 class EntityTreeModel;
16 class ChangeRecorder;
17 class CollectionRequester;
18 class EntityTreeView;
19 }
20 class KJob;
21 class QPushButton;
22 
23 class KNoteCollectionDisplayProxyModel : public QIdentityProxyModel
24 {
25     Q_OBJECT
26 public:
27     explicit KNoteCollectionDisplayProxyModel(QObject *parent = nullptr);
28 
29     QVariant data(const QModelIndex &index, int role) const override;
30 
31     bool setData(const QModelIndex &index, const QVariant &_data, int role) override;
32     Qt::ItemFlags flags(const QModelIndex &index) const override;
33 
34     QHash<Akonadi::Collection, bool> displayCollection() const;
35 
36 private:
37     QHash<Akonadi::Collection, bool> mDisplayCollection;
38 };
39 
40 class KNoteCollectionConfigWidget : public QWidget
41 {
42     Q_OBJECT
43 public:
44     explicit KNoteCollectionConfigWidget(QWidget *parent = nullptr);
45     ~KNoteCollectionConfigWidget() override;
46 
47     void updateCollectionsRecursive();
48 
49     void save();
50 Q_SIGNALS:
51     void emitChanged(bool);
52 
53 private Q_SLOTS:
54     void slotSelectAllCollections();
55     void slotUnselectAllCollections();
56     void slotCollectionsInserted();
57     void slotModifyJobDone(KJob *job);
58     void slotSetCollectionFilter(const QString &);
59     void slotDataChanged();
60     void slotRenameCollection();
61     void slotUpdateButtons();
62     void slotCollectionModifyFinished(KJob *);
63 
64 private:
65     void forceStatus(const QModelIndex &parent, bool status);
66     Akonadi::EntityTreeView *mFolderView = nullptr;
67     Akonadi::EntityTreeModel *mModel = nullptr;
68     Akonadi::ChangeRecorder *mChangeRecorder = nullptr;
69     QSortFilterProxyModel *mCollectionFilter = nullptr;
70     Akonadi::CollectionRequester *mDefaultSaveFolder = nullptr;
71     QPushButton *mRenameCollection = nullptr;
72     KNoteCollectionDisplayProxyModel *mDisplayNotifierProxyModel = nullptr;
73 };
74 
75