diff options
author | Sandro Knauß <sknauss@kde.org> | 2016-10-18 17:45:06 +0200 |
---|---|---|
committer | Sandro Knauß <sknauss@kde.org> | 2016-10-18 17:45:06 +0200 |
commit | 6db3df1d512866da62241107aeebd27bd4e83237 (patch) | |
tree | ff663fbea4842b913f365d60594f952b4bc99536 | |
parent | d708e1310cc8e65fab078eb6b5b4a325de462a24 (diff) | |
download | kube-6db3df1d512866da62241107aeebd27bd4e83237.tar.gz kube-6db3df1d512866da62241107aeebd27bd4e83237.zip |
add content level
-rw-r--r-- | framework/domain/messageparser_new.cpp | 71 |
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: | |||
47 | private: | 51 | private: |
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 | ||
53 | NewModelPrivate::NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser) | 58 | NewModelPrivate::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 | |||
83 | QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Part> &part) | 89 | QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Part> &part) |
84 | { | 90 | { |
91 | return getVar(part.get()); | ||
92 | } | ||
93 | |||
94 | QSharedPointer<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 | ||
104 | QSharedPointer<QVariant> NewModelPrivate::getVar(const std::shared_ptr<Content> &content) | ||
105 | { | ||
106 | return getVar(content.get()); | ||
107 | } | ||
108 | |||
109 | QSharedPointer<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 | |||
93 | int NewModelPrivate::getPos(Signature *signature) | 119 | int 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 | ||
158 | int 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 | |||
132 | NewModel::NewModel(std::shared_ptr<Parser> parser) | 170 | NewModel::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; |