1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
/*
Copyright (c) 2016 Michael Bohlender <michael.bohlender@kdemail.net>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#pragma once
#include <QObject>
#include <QString>
#include <QStringList>
#include <QVariant>
#include <QQmlEngine>
#include <QAbstractItemModel>
#include <sink/applicationdomaintype.h>
#include <actions/context.h>
#include <actions/action.h>
namespace KMime {
class Message;
}
class ComposerContext : public Kube::Context {
Q_OBJECT
KUBE_CONTEXT_PROPERTY(QString, To, to)
KUBE_CONTEXT_PROPERTY(QString, Cc, cc)
KUBE_CONTEXT_PROPERTY(QString, Bcc, bcc)
KUBE_CONTEXT_PROPERTY(QString, From, from)
KUBE_CONTEXT_PROPERTY(QString, Subject, subject)
KUBE_CONTEXT_PROPERTY(QString, Body, body)
};
class Completer : public QObject {
Q_OBJECT
Q_PROPERTY (QAbstractItemModel* model READ model CONSTANT)
Q_PROPERTY (QString searchString WRITE setSearchString READ searchString)
public:
Completer(QAbstractItemModel *model) : mModel{model}
{
QQmlEngine::setObjectOwnership(mModel, QQmlEngine::CppOwnership);
}
QAbstractItemModel *model() { return mModel; }
virtual void setSearchString(const QString &s) { mSearchString = s; }
QString searchString() const { return mSearchString; }
private:
QAbstractItemModel *mModel = nullptr;
QString mSearchString;
};
/**
* Exposes a model and maintains a current index selection.
*/
class Selector : public QObject {
Q_OBJECT
Q_PROPERTY (int currentIndex READ currentIndex WRITE setCurrentIndex)
Q_PROPERTY (QAbstractItemModel* model READ model CONSTANT)
public:
Selector(QAbstractItemModel *model) : mModel{model}
{
QQmlEngine::setObjectOwnership(mModel, QQmlEngine::CppOwnership);
}
virtual QAbstractItemModel *model() { return mModel; }
void setCurrentIndex(int i) {
mCurrentIndex = i;
Q_ASSERT(mModel);
setCurrent(mModel->index(mCurrentIndex, 0));
}
int currentIndex() { return mCurrentIndex; }
virtual void setCurrent(const QModelIndex &) = 0;
private:
QAbstractItemModel *mModel = nullptr;
int mCurrentIndex = 0;
};
class ComposerController : public QObject
{
Q_OBJECT
Q_PROPERTY (Kube::Context* mailContext READ mailContext CONSTANT)
Q_PROPERTY (Completer* recipientCompleter READ recipientCompleter CONSTANT)
Q_PROPERTY (Selector* identitySelector READ identitySelector CONSTANT)
Q_PROPERTY (Kube::Action* sendAction READ sendAction)
Q_PROPERTY (Kube::Action* saveAsDraftAction READ saveAsDraftAction)
public:
explicit ComposerController(QObject *parent = Q_NULLPTR);
Kube::Context* mailContext();
Completer *recipientCompleter() const;
Selector *identitySelector() const;
Q_INVOKABLE void loadMessage(const QVariant &draft, bool loadAsDraft);
Kube::Action* sendAction();
Kube::Action* saveAsDraftAction();
public slots:
void clear();
signals:
void done();
private:
Kube::ActionHandler *messageHandler();
void recordForAutocompletion(const QByteArray &addrSpec, const QByteArray &displayName);
void setMessage(const QSharedPointer<KMime::Message> &msg);
ComposerContext mContext;
};
|