diff --git a/apps/opencs/CMakeLists.txt b/apps/opencs/CMakeLists.txt index 66c446bae..ec4fb40d5 100644 --- a/apps/opencs/CMakeLists.txt +++ b/apps/opencs/CMakeLists.txt @@ -106,6 +106,10 @@ opencs_units_noqt (model/settings settingsitem ) +opencs_hdrs_noqt (model/filter + filter + ) + set (OPENCS_US ) diff --git a/apps/opencs/model/filter/filter.hpp b/apps/opencs/model/filter/filter.hpp new file mode 100644 index 000000000..bddc9cc2d --- /dev/null +++ b/apps/opencs/model/filter/filter.hpp @@ -0,0 +1,26 @@ +#ifndef CSM_FILTER_FILTER_H +#define CSM_FILTER_FILTER_H + +#include +#include + +#include + +namespace CSMFilter +{ + /// \brief Wrapper for Filter record + struct Filter : public ESM::Filter + { + enum scope + { + Global = 0, + Local = 1, + Session = 2, + Content = 3 + }; + + scope mScope; + }; +} + +#endif \ No newline at end of file diff --git a/apps/opencs/model/world/data.cpp b/apps/opencs/model/world/data.cpp index d54b3ac16..0cb28b911 100644 --- a/apps/opencs/model/world/data.cpp +++ b/apps/opencs/model/world/data.cpp @@ -147,6 +147,9 @@ CSMWorld::Data::Data() : mRefs (mCells) mRefs.addColumn (new KeyColumn); mRefs.addColumn (new TrapColumn); + mFilters.addColumn (new StringIdColumn); + mFilters.addColumn (new RecordStateColumn); + addModel (new IdTable (&mGlobals), UniversalId::Type_Globals, UniversalId::Type_Global); addModel (new IdTable (&mGmsts), UniversalId::Type_Gmsts, UniversalId::Type_Gmst); addModel (new IdTable (&mSkills), UniversalId::Type_Skills, UniversalId::Type_Skill); @@ -162,6 +165,7 @@ CSMWorld::Data::Data() : mRefs (mCells) addModel (new IdTable (&mReferenceables), UniversalId::Type_Referenceables, UniversalId::Type_Referenceable); addModel (new IdTable (&mRefs), UniversalId::Type_References, UniversalId::Type_Reference); + addModel (new IdTable (&mFilters), UniversalId::Type_Filters, UniversalId::Type_Filter); } CSMWorld::Data::~Data() diff --git a/apps/opencs/model/world/data.hpp b/apps/opencs/model/world/data.hpp index ca030d9b2..3eea897e6 100644 --- a/apps/opencs/model/world/data.hpp +++ b/apps/opencs/model/world/data.hpp @@ -18,6 +18,8 @@ #include #include +#include "../filter/filter.hpp" + #include "idcollection.hpp" #include "universalid.hpp" #include "cell.hpp" @@ -44,6 +46,7 @@ namespace CSMWorld IdCollection mCells; RefIdCollection mReferenceables; RefCollection mRefs; + IdCollection mFilters; std::vector mModels; std::map mModelIndex; diff --git a/apps/opencs/model/world/universalid.cpp b/apps/opencs/model/world/universalid.cpp index c66101950..ecd3fc4cd 100644 --- a/apps/opencs/model/world/universalid.cpp +++ b/apps/opencs/model/world/universalid.cpp @@ -35,6 +35,7 @@ namespace "References" }, { CSMWorld::UniversalId::Class_NonRecord, CSMWorld::UniversalId::Type_RegionMap, "Region Map" }, + { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Filters, "Filters" }, { CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker }; @@ -78,6 +79,7 @@ namespace { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Static, "Static" }, { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Weapon, "Weapon" }, { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Reference, "Reference" }, + { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Filter, "Reference" }, { CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0 } // end marker }; diff --git a/apps/opencs/model/world/universalid.hpp b/apps/opencs/model/world/universalid.hpp index 453da3ef3..4a736483e 100644 --- a/apps/opencs/model/world/universalid.hpp +++ b/apps/opencs/model/world/universalid.hpp @@ -82,7 +82,9 @@ namespace CSMWorld Type_Weapon, Type_References, Type_Reference, - Type_RegionMap + Type_RegionMap, + Type_Filter, + Type_Filters }; private: diff --git a/apps/opencs/view/doc/view.cpp b/apps/opencs/view/doc/view.cpp index 63fab56db..1317f525a 100644 --- a/apps/opencs/view/doc/view.cpp +++ b/apps/opencs/view/doc/view.cpp @@ -78,6 +78,10 @@ void CSVDoc::View::setupViewMenu() QAction *newWindow = new QAction (tr ("&New View"), this); connect (newWindow, SIGNAL (triggered()), this, SLOT (newView())); view->addAction (newWindow); + + QAction *filters = new QAction (tr ("Filters"), this); + connect (filters, SIGNAL (triggered()), this, SLOT (addFiltersSubView())); + view->addAction (filters); } void CSVDoc::View::setupWorldMenu() @@ -382,6 +386,11 @@ void CSVDoc::View::addRegionMapSubView() addSubView (CSMWorld::UniversalId::Type_RegionMap); } +void CSVDoc::View::addFiltersSubView() +{ + addSubView (CSMWorld::UniversalId::Type_Filters); +} + void CSVDoc::View::abortOperation (int type) { mDocument->abortOperation (type); diff --git a/apps/opencs/view/doc/view.hpp b/apps/opencs/view/doc/view.hpp index 4e6b216a1..203172df1 100644 --- a/apps/opencs/view/doc/view.hpp +++ b/apps/opencs/view/doc/view.hpp @@ -157,6 +157,8 @@ namespace CSVDoc void addRegionMapSubView(); + void addFiltersSubView(); + void showUserSettings(); }; } diff --git a/apps/opencs/view/world/subviews.cpp b/apps/opencs/view/world/subviews.cpp index 1c06ea2f6..be114dad2 100644 --- a/apps/opencs/view/world/subviews.cpp +++ b/apps/opencs/view/world/subviews.cpp @@ -30,6 +30,7 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager) CSMWorld::UniversalId::Type_Cells, CSMWorld::UniversalId::Type_Referenceables, CSMWorld::UniversalId::Type_References, + CSMWorld::UniversalId::Type_Filters, CSMWorld::UniversalId::Type_None // end marker };