1 /*
2 
3   SPDX-FileCopyrightText: 2009-2021 Laurent Montel <montel@kde.org>
4 
5   SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #pragma once
9 
10 #include "mailcommon_export.h"
11 
12 #include <Akonadi/Collection>
13 
14 #include <QDialog>
15 
16 #include <QAbstractItemView>
17 
18 class KJob;
19 
20 namespace MailCommon
21 {
22 /**
23  * A dialog that lets the user select a folder.
24  * TODO: Move most of this to Akonadi::CollectionDialog
25  */
26 class MAILCOMMON_EXPORT FolderSelectionDialog : public QDialog
27 {
28     Q_OBJECT
29 
30 public:
31     enum SelectionFolderOption {
32         None = 0,
33         EnableCheck = 1,
34         ShowUnreadCount = 2,
35         HideVirtualFolder = 4,
36         NotAllowToCreateNewFolder = 8,
37         HideOutboxFolder = 16,
38         NotUseGlobalSettings = 64
39     };
40     Q_DECLARE_FLAGS(SelectionFolderOptions, SelectionFolderOption)
41 
42     FolderSelectionDialog(QWidget *parent, FolderSelectionDialog::SelectionFolderOptions options);
43     ~FolderSelectionDialog() override;
44 
45     void setSelectionMode(QAbstractItemView::SelectionMode mode);
46     Q_REQUIRED_RESULT QAbstractItemView::SelectionMode selectionMode() const;
47 
48     Q_REQUIRED_RESULT Akonadi::Collection selectedCollection() const;
49     void setSelectedCollection(const Akonadi::Collection &collection);
50 
51     Q_REQUIRED_RESULT Akonadi::Collection::List selectedCollections() const;
52 
53 private Q_SLOTS:
54     void slotSelectionChanged();
55     void slotAddChildFolder();
56     void collectionCreationResult(KJob *);
57     void rowsInserted(const QModelIndex &col, int, int);
58     void slotDoubleClick(const QModelIndex &);
59     void slotFolderTreeWidgetContextMenuRequested(const QPoint &);
60 
61 protected:
62     void focusTreeView();
63     void readConfig();
64     void writeConfig();
65     bool canCreateCollection(Akonadi::Collection &parentCol);
66 
67     void hideEvent(QHideEvent *) override;
68 
69     void showEvent(QShowEvent *) override;
70 
71 private:
72     class FolderSelectionDialogPrivate;
73     std::unique_ptr<FolderSelectionDialogPrivate> const d;
74 };
75 }
76 
77