From 6db3df1d512866da62241107aeebd27bd4e83237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Knau=C3=9F?= Date: Tue, 18 Oct 2016 17:45:06 +0200 Subject: add content level --- framework/domain/messageparser_new.cpp | 71 +++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 2 deletions(-) (limited to 'framework/domain/messageparser_new.cpp') 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: QSharedPointer getVar(const std::shared_ptr &sig); QSharedPointer getVar(const std::shared_ptr &enc); QSharedPointer getVar(const std::shared_ptr &part); + QSharedPointer getVar(Part *part); + QSharedPointer getVar(const std::shared_ptr &content); + QSharedPointer getVar(Content *content); int getPos(Signature *sig); int getPos(Encryption *enc); int getPos(Part *part); + int getPos(Content *content); NewModel *q; QVector mParts; @@ -47,7 +51,8 @@ public: private: QMap, QSharedPointer> mSignatureMap; QMap, QSharedPointer> mEncryptionMap; - QMap, QSharedPointer> mPartMap; + QMap> mPartMap; + QMap> mCMap; }; NewModelPrivate::NewModelPrivate(NewModel *q_ptr, const std::shared_ptr &parser) @@ -80,16 +85,37 @@ QSharedPointer NewModelPrivate::getVar(const std::shared_ptr NewModelPrivate::getVar(const std::shared_ptr &part) +{ + return getVar(part.get()); +} + +QSharedPointer NewModelPrivate::getVar(Part *part) { if (!mPartMap.contains(part)) { auto var = new QVariant(); - var->setValue(part.get()); + var->setValue(part); mPartMap.insert(part, QSharedPointer(var)); } return mPartMap.value(part); } +QSharedPointer NewModelPrivate::getVar(const std::shared_ptr &content) +{ + return getVar(content.get()); +} + +QSharedPointer NewModelPrivate::getVar(Content *content) +{ + if (!mCMap.contains(content)) { + auto var = new QVariant(); + var->setValue(content); + mCMap.insert(content, QSharedPointer(var)); + } + return mCMap.value(content); +} + int NewModelPrivate::getPos(Signature *signature) { const auto first = mParts.first(); @@ -129,6 +155,18 @@ int NewModelPrivate::getPos(Part *part) return i; } +int NewModelPrivate::getPos(Content *content) +{ + int i = 0; + foreach(const auto &c, content->parent()->content()) { + if (c.get() == content) { + break; + } + i++; + } + return i; +} + NewModel::NewModel(std::shared_ptr parser) : d(std::unique_ptr(new NewModelPrivate(this, parser))) { @@ -198,6 +236,13 @@ QModelIndex NewModel::index(int row, int column, const QModelIndex &parent) cons } else if (data->userType() == qMetaTypeId()) { const auto encryption = data->value(); encpos = d->getPos(encryption) + 1; + } else if (data->userType() == qMetaTypeId()) { + const auto part = data->value(); + if (row < part->content().size()) { + auto c = part->content().at(row); + return createIndex(row, column, d->getVar(c).data()); + } + return QModelIndex(); } if (encpos > -1 && encpos < first->encryptions().size()) { @@ -258,6 +303,14 @@ QVariant NewModel::data(const QModelIndex &index, int role) const case ContentsRole: return QVariant::fromValue(d->mContentMap.value(part).get()); } + } else if (data->userType() == qMetaTypeId()) { + const auto content = data->value(); + int i = d->getPos(content); + switch(role) { + case Qt::DisplayRole: + case TypeRole: + return QStringLiteral("Content%1").arg(i); + } } } return QVariant(); @@ -312,6 +365,17 @@ QModelIndex NewModel::parent(const QModelIndex &index) const return createIndex(0, 0, d->getVar(sig).data()); } return QModelIndex(); + } else if (data->userType() == qMetaTypeId()) { + const auto content = data->value(); + const auto parent = content->parent(); + if (!parent) { + return QModelIndex(); + } + int pos = d->getPos(parent); + if (pos < 0 || pos >= d->mParts.size()) { + return QModelIndex(); + } + return createIndex(pos, 0, d->getVar(parent).data()); } return QModelIndex(); } @@ -356,6 +420,9 @@ int NewModel::rowCount(const QModelIndex &parent) const } return d->mParts.size(); + } else if (data->userType() == qMetaTypeId()) { + const auto part = data->value(); + return part->content().size(); } } return 0; -- cgit v1.2.3