summaryrefslogtreecommitdiffstats
path: root/framework
diff options
context:
space:
mode:
authorSandro Knauß <sknauss@kde.org>2016-10-18 17:45:06 +0200
committerSandro Knauß <sknauss@kde.org>2016-10-18 17:45:06 +0200
commit6db3df1d512866da62241107aeebd27bd4e83237 (patch)
treeff663fbea4842b913f365d60594f952b4bc99536 /framework
parentd708e1310cc8e65fab078eb6b5b4a325de462a24 (diff)
downloadkube-6db3df1d512866da62241107aeebd27bd4e83237.tar.gz
kube-6db3df1d512866da62241107aeebd27bd4e83237.zip
add content level
Diffstat (limited to 'framework')
-rw-r--r--framework/domain/messageparser_new.cpp71
1 files changed, 69 insertions, 2 deletions
diff --git a/framework/domain/messageparser_new.cpp b/framework/domain/messageparser_new.cpp
index ffe7550f..44cd6b6b 100644
--- a/framework/domain/messageparser_new.cpp
+++ b/framework/domain/messageparser_new.cpp
@@ -34,10 +34,14 @@ public:
34 QSharedPointer<QVariant> getVar(const std::shared_ptr<Signature> &sig); 34 QSharedPointer<QVariant> getVar(const std::shared_ptr<Signature> &sig);
35 QSharedPointer<QVariant> getVar(const std::shared_ptr<Encryption> &enc); 35 QSharedPointer<QVariant> getVar(const std::shared_ptr<Encryption> &enc);
36 QSharedPointer<QVariant> getVar(const std::shared_ptr<Part> &part); 36 QSharedPointer<QVariant> getVar(const std::shared_ptr<Part> &part);
37 QSharedPointer<QVariant> getVar(Part *part);
38 QSharedPointer<QVariant> getVar(const std::shared_ptr<Content> &content);
39 QSharedPointer<QVariant> getVar(Content *content);
37 40
38 int getPos(Signature *sig); 41 int getPos(Signature *sig);
39 int getPos(Encryption *enc); 42 int getPos(Encryption *enc);
40 int getPos(Part *part); 43 int getPos(Part *part);
44 int getPos(Content *content);
41 45
42 NewModel *q; 46 NewModel *q;
43 QVector<Part::Ptr> mParts; 47 QVector<Part::Ptr> mParts;
@@ -47,7 +51,8 @@ public:
47private: 51private:
48 QMap<std::shared_ptr<Signature>, QSharedPointer<QVariant>> mSignatureMap; 52 QMap<std::shared_ptr<Signature>, QSharedPointer<QVariant>> mSignatureMap;
49 QMap<std::shared_ptr<Encryption>, QSharedPointer<QVariant>> mEncryptionMap; 53 QMap<std::shared_ptr<Encryption>, QSharedPointer<QVariant>> mEncryptionMap;
50 QMap<std::shared_ptr<Part>, QSharedPointer<QVariant>> mPartMap; 54 QMap<Part *, QSharedPointer<QVariant>> mPartMap;
55 QMap<Content *, QSharedPointer<QVariant>> mCMap;
51}; 56};
52 57
53NewModelPrivate::NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser) 58NewModelPrivate::NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser)
@@ -80,16 +85,37 @@ QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Encryptio
80 return mEncryptionMap.value(enc); 85 return mEncryptionMap.value(enc);
81} 86}
82 87
88
83QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Part> &part) 89QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Part> &part)
84{ 90{
91 return getVar(part.get());
92}
93
94QSharedPointer<QVariant> NewModelPrivate::getVar(Part *part)
95{
85 if (!mPartMap.contains(part)) { 96 if (!mPartMap.contains(part)) {
86 auto var = new QVariant(); 97 auto var = new QVariant();
87 var->setValue(part.get()); 98 var->setValue(part);
88 mPartMap.insert(part, QSharedPointer<QVariant>(var)); 99 mPartMap.insert(part, QSharedPointer<QVariant>(var));
89 } 100 }
90 return mPartMap.value(part); 101 return mPartMap.value(part);
91} 102}
92 103
104QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Content> &content)
105{
106 return getVar(content.get());
107}
108
109QSharedPointer<QVariant> NewModelPrivate::getVar(Content *content)
110{
111 if (!mCMap.contains(content)) {
112 auto var = new QVariant();
113 var->setValue(content);
114 mCMap.insert(content, QSharedPointer<QVariant>(var));
115 }
116 return mCMap.value(content);
117}
118
93int NewModelPrivate::getPos(Signature *signature) 119int NewModelPrivate::getPos(Signature *signature)
94{ 120{
95 const auto first = mParts.first(); 121 const auto first = mParts.first();
@@ -129,6 +155,18 @@ int NewModelPrivate::getPos(Part *part)
129 return i; 155 return i;
130} 156}
131 157
158int NewModelPrivate::getPos(Content *content)
159{
160 int i = 0;
161 foreach(const auto &c, content->parent()->content()) {
162 if (c.get() == content) {
163 break;
164 }
165 i++;
166 }
167 return i;
168}
169
132NewModel::NewModel(std::shared_ptr<Parser> parser) 170NewModel::NewModel(std::shared_ptr<Parser> parser)
133 : d(std::unique_ptr<NewModelPrivate>(new NewModelPrivate(this, parser))) 171 : d(std::unique_ptr<NewModelPrivate>(new NewModelPrivate(this, parser)))
134{ 172{
@@ -198,6 +236,13 @@ QModelIndex NewModel::index(int row, int column, const QModelIndex &parent) cons
198 } else if (data->userType() == qMetaTypeId<Encryption *>()) { 236 } else if (data->userType() == qMetaTypeId<Encryption *>()) {
199 const auto encryption = data->value<Encryption *>(); 237 const auto encryption = data->value<Encryption *>();
200 encpos = d->getPos(encryption) + 1; 238 encpos = d->getPos(encryption) + 1;
239 } else if (data->userType() == qMetaTypeId<Part *>()) {
240 const auto part = data->value<Part *>();
241 if (row < part->content().size()) {
242 auto c = part->content().at(row);
243 return createIndex(row, column, d->getVar(c).data());
244 }
245 return QModelIndex();
201 } 246 }
202 247
203 if (encpos > -1 && encpos < first->encryptions().size()) { 248 if (encpos > -1 && encpos < first->encryptions().size()) {
@@ -258,6 +303,14 @@ QVariant NewModel::data(const QModelIndex &index, int role) const
258 case ContentsRole: 303 case ContentsRole:
259 return QVariant::fromValue<QAbstractItemModel *>(d->mContentMap.value(part).get()); 304 return QVariant::fromValue<QAbstractItemModel *>(d->mContentMap.value(part).get());
260 } 305 }
306 } else if (data->userType() == qMetaTypeId<Content *>()) {
307 const auto content = data->value<Content *>();
308 int i = d->getPos(content);
309 switch(role) {
310 case Qt::DisplayRole:
311 case TypeRole:
312 return QStringLiteral("Content%1").arg(i);
313 }
261 } 314 }
262 } 315 }
263 return QVariant(); 316 return QVariant();
@@ -312,6 +365,17 @@ QModelIndex NewModel::parent(const QModelIndex &index) const
312 return createIndex(0, 0, d->getVar(sig).data()); 365 return createIndex(0, 0, d->getVar(sig).data());
313 } 366 }
314 return QModelIndex(); 367 return QModelIndex();
368 } else if (data->userType() == qMetaTypeId<Content *>()) {
369 const auto content = data->value<Content *>();
370 const auto parent = content->parent();
371 if (!parent) {
372 return QModelIndex();
373 }
374 int pos = d->getPos(parent);
375 if (pos < 0 || pos >= d->mParts.size()) {
376 return QModelIndex();
377 }
378 return createIndex(pos, 0, d->getVar(parent).data());
315 } 379 }
316 return QModelIndex(); 380 return QModelIndex();
317} 381}
@@ -356,6 +420,9 @@ int NewModel::rowCount(const QModelIndex &parent) const
356 } 420 }
357 421
358 return d->mParts.size(); 422 return d->mParts.size();
423 } else if (data->userType() == qMetaTypeId<Part *>()) {
424 const auto part = data->value<Part *>();
425 return part->content().size();
359 } 426 }
360 } 427 }
361 return 0; 428 return 0;