From 75b5513c6c4d6f59eced88b4e60deae43ad218fb Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Tue, 17 Jun 2014 22:02:20 +0200 Subject: [PATCH] Column is responsible for telling that it can nest columns now. --- apps/opencs/model/world/columnbase.cpp | 11 ++++++++--- apps/opencs/model/world/columnbase.hpp | 11 +++++++---- apps/opencs/model/world/idtable.cpp | 4 +--- apps/opencs/model/world/refidcollection.cpp | 6 +++--- apps/opencs/model/world/refidcollection.hpp | 4 ++-- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/apps/opencs/model/world/columnbase.cpp b/apps/opencs/model/world/columnbase.cpp index f6363fe2eb..e81943843a 100644 --- a/apps/opencs/model/world/columnbase.cpp +++ b/apps/opencs/model/world/columnbase.cpp @@ -3,8 +3,8 @@ #include "columns.hpp" -CSMWorld::ColumnBase::ColumnBase (int columnId, Display displayType, int flags) -: mColumnId (columnId), mDisplayType (displayType), mFlags (flags) +CSMWorld::ColumnBase::ColumnBase (int columnId, Display displayType, int flags, bool canNest) + : mColumnId (columnId), mDisplayType (displayType), mFlags (flags), mCanNest(canNest) {} CSMWorld::ColumnBase::~ColumnBase() {} @@ -22,4 +22,9 @@ std::string CSMWorld::ColumnBase::getTitle() const int CSMWorld::ColumnBase::getId() const { return mColumnId; -} \ No newline at end of file +} + +bool CSMWorld::ColumnBase::canHaveNestedColumns() const +{ + return mCanNest; +} diff --git a/apps/opencs/model/world/columnbase.hpp b/apps/opencs/model/world/columnbase.hpp index c8670a03b8..9761b95aa0 100644 --- a/apps/opencs/model/world/columnbase.hpp +++ b/apps/opencs/model/world/columnbase.hpp @@ -91,14 +91,15 @@ namespace CSMWorld Display_QuestStatusType, Display_Gender, - Display_Nested + Display_NestedItemList }; int mColumnId; int mFlags; Display mDisplayType; + const bool mCanNest; - ColumnBase (int columnId, Display displayType, int flag); + ColumnBase (int columnId, Display displayType, int flag, bool canNest = false); virtual ~ColumnBase(); @@ -110,6 +111,8 @@ namespace CSMWorld virtual std::string getTitle() const; virtual int getId() const; + + bool canHaveNestedColumns() const; }; template @@ -117,8 +120,8 @@ namespace CSMWorld { int mFlags; - Column (int columnId, Display displayType, int flags = Flag_Table | Flag_Dialogue) - : ColumnBase (columnId, displayType, flags) {} + Column (int columnId, Display displayType, int flags = Flag_Table | Flag_Dialogue, bool canNest = false) + : ColumnBase (columnId, displayType, flags, canNest) {} virtual QVariant get (const Record& record) const = 0; diff --git a/apps/opencs/model/world/idtable.cpp b/apps/opencs/model/world/idtable.cpp index 49d23bed46..6aba322c14 100644 --- a/apps/opencs/model/world/idtable.cpp +++ b/apps/opencs/model/world/idtable.cpp @@ -1,7 +1,5 @@ #include "idtable.hpp" -#include - #include "collectionbase.hpp" #include "columnbase.hpp" @@ -295,7 +293,7 @@ std::pair< int, int > CSMWorld::IdTable::unfoldIndexAdress (unsigned int id) con bool CSMWorld::IdTable::hasChildren(const QModelIndex& index) const { return (index.isValid() && - CSMWorld::ColumnBase::Display_Nested == static_cast (headerData (index.column(), Qt::Horizontal, CSMWorld::ColumnBase::Role_Display).toInt()) && index.internalId() == 0 && + mIdCollection->getColumn (index.column()).canHaveNestedColumns() && index.data().isValid()); } diff --git a/apps/opencs/model/world/refidcollection.cpp b/apps/opencs/model/world/refidcollection.cpp index 9366633993..a8fac216bc 100644 --- a/apps/opencs/model/world/refidcollection.cpp +++ b/apps/opencs/model/world/refidcollection.cpp @@ -12,8 +12,8 @@ #include "columns.hpp" CSMWorld::RefIdColumn::RefIdColumn (int columnId, Display displayType, int flag, - bool editable, bool userEditable) -: ColumnBase (columnId, displayType, flag), mEditable (editable), mUserEditable (userEditable) + bool editable, bool userEditable, bool canNest) + : ColumnBase (columnId, displayType, flag, canNest), mEditable (editable), mUserEditable (userEditable) {} bool CSMWorld::RefIdColumn::isEditable() const @@ -166,7 +166,7 @@ CSMWorld::RefIdCollection::RefIdCollection() mColumns.push_back (RefIdColumn (Columns::ColumnId_Respawn, ColumnBase::Display_Boolean)); const RefIdColumn *respawn = &mColumns.back(); - mColumns.push_back(RefIdColumn (Columns::ColumnId_ContainerContent, ColumnBase::Display_Nested, ColumnBase::Flag_Dialogue, false, false)); + mColumns.push_back(RefIdColumn (Columns::ColumnId_ContainerContent, ColumnBase::Display_NestedItemList, ColumnBase::Flag_Dialogue, true, true, true)); const RefIdColumn *content = &mColumns.back(); CreatureColumns creatureColumns (actorsColumns); diff --git a/apps/opencs/model/world/refidcollection.hpp b/apps/opencs/model/world/refidcollection.hpp index cb0baa45be..fec621ac1d 100644 --- a/apps/opencs/model/world/refidcollection.hpp +++ b/apps/opencs/model/world/refidcollection.hpp @@ -26,8 +26,8 @@ namespace CSMWorld public: RefIdColumn (int columnId, Display displayType, - int flag = Flag_Table | Flag_Dialogue, bool editable = true, - bool userEditable = true); + int flag = Flag_Table | Flag_Dialogue, bool editable = true, + bool userEditable = true, bool canNest = false); virtual bool isEditable() const;