mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-19 20:23:54 +00:00
added topic and journal tables
This commit is contained in:
parent
ebf7732912
commit
adf3a41a83
10 changed files with 136 additions and 19 deletions
|
@ -141,6 +141,12 @@ CSMWorld::Data::Data() : mRefs (mCells)
|
||||||
mSpells.addColumn (new FlagColumn<ESM::Spell> (Columns::ColumnId_StarterSpell, 0x2));
|
mSpells.addColumn (new FlagColumn<ESM::Spell> (Columns::ColumnId_StarterSpell, 0x2));
|
||||||
mSpells.addColumn (new FlagColumn<ESM::Spell> (Columns::ColumnId_AlwaysSucceeds, 0x4));
|
mSpells.addColumn (new FlagColumn<ESM::Spell> (Columns::ColumnId_AlwaysSucceeds, 0x4));
|
||||||
|
|
||||||
|
mTopics.addColumn (new StringIdColumn<ESM::Dialogue>);
|
||||||
|
mTopics.addColumn (new RecordStateColumn<ESM::Dialogue>);
|
||||||
|
|
||||||
|
mJournals.addColumn (new StringIdColumn<ESM::Dialogue>);
|
||||||
|
mJournals.addColumn (new RecordStateColumn<ESM::Dialogue>);
|
||||||
|
|
||||||
mCells.addColumn (new StringIdColumn<Cell>);
|
mCells.addColumn (new StringIdColumn<Cell>);
|
||||||
mCells.addColumn (new RecordStateColumn<Cell>);
|
mCells.addColumn (new RecordStateColumn<Cell>);
|
||||||
mCells.addColumn (new FixedRecordTypeColumn<Cell> (UniversalId::Type_Cell));
|
mCells.addColumn (new FixedRecordTypeColumn<Cell> (UniversalId::Type_Cell));
|
||||||
|
@ -196,6 +202,8 @@ CSMWorld::Data::Data() : mRefs (mCells)
|
||||||
addModel (new IdTable (&mRegions), UniversalId::Type_Regions, UniversalId::Type_Region);
|
addModel (new IdTable (&mRegions), UniversalId::Type_Regions, UniversalId::Type_Region);
|
||||||
addModel (new IdTable (&mBirthsigns), UniversalId::Type_Birthsigns, UniversalId::Type_Birthsign);
|
addModel (new IdTable (&mBirthsigns), UniversalId::Type_Birthsigns, UniversalId::Type_Birthsign);
|
||||||
addModel (new IdTable (&mSpells), UniversalId::Type_Spells, UniversalId::Type_Spell);
|
addModel (new IdTable (&mSpells), UniversalId::Type_Spells, UniversalId::Type_Spell);
|
||||||
|
addModel (new IdTable (&mTopics), UniversalId::Type_Topics, UniversalId::Type_Topic);
|
||||||
|
addModel (new IdTable (&mJournals), UniversalId::Type_Journals, UniversalId::Type_Journal);
|
||||||
addModel (new IdTable (&mCells), UniversalId::Type_Cells, UniversalId::Type_Cell);
|
addModel (new IdTable (&mCells), UniversalId::Type_Cells, UniversalId::Type_Cell);
|
||||||
addModel (new IdTable (&mReferenceables), UniversalId::Type_Referenceables,
|
addModel (new IdTable (&mReferenceables), UniversalId::Type_Referenceables,
|
||||||
UniversalId::Type_Referenceable);
|
UniversalId::Type_Referenceable);
|
||||||
|
@ -319,6 +327,28 @@ CSMWorld::IdCollection<ESM::Spell>& CSMWorld::Data::getSpells()
|
||||||
return mSpells;
|
return mSpells;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const CSMWorld::IdCollection<ESM::Dialogue>& CSMWorld::Data::getTopcis() const
|
||||||
|
{
|
||||||
|
return mTopics;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSMWorld::IdCollection<ESM::Dialogue>& CSMWorld::Data::getTopcis()
|
||||||
|
{
|
||||||
|
return mTopics;
|
||||||
|
}
|
||||||
|
|
||||||
|
const CSMWorld::IdCollection<ESM::Dialogue>& CSMWorld::Data::getJournals() const
|
||||||
|
{
|
||||||
|
return mJournals;
|
||||||
|
}
|
||||||
|
|
||||||
|
CSMWorld::IdCollection<ESM::Dialogue>& CSMWorld::Data::getJournals()
|
||||||
|
{
|
||||||
|
return mJournals;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const CSMWorld::IdCollection<CSMWorld::Cell>& CSMWorld::Data::getCells() const
|
const CSMWorld::IdCollection<CSMWorld::Cell>& CSMWorld::Data::getCells() const
|
||||||
{
|
{
|
||||||
return mCells;
|
return mCells;
|
||||||
|
@ -447,6 +477,30 @@ void CSMWorld::Data::loadFile (const boost::filesystem::path& path, bool base)
|
||||||
case ESM::REC_STAT: mReferenceables.load (reader, base, UniversalId::Type_Static); break;
|
case ESM::REC_STAT: mReferenceables.load (reader, base, UniversalId::Type_Static); break;
|
||||||
case ESM::REC_WEAP: mReferenceables.load (reader, base, UniversalId::Type_Weapon); break;
|
case ESM::REC_WEAP: mReferenceables.load (reader, base, UniversalId::Type_Weapon); break;
|
||||||
|
|
||||||
|
case ESM::REC_DIAL:
|
||||||
|
{
|
||||||
|
std::string id = reader.getHNOString ("NAME");
|
||||||
|
|
||||||
|
ESM::Dialogue record;
|
||||||
|
record.mId = id;
|
||||||
|
record.load (reader);
|
||||||
|
|
||||||
|
if (record.mType==ESM::Dialogue::Journal)
|
||||||
|
{
|
||||||
|
mJournals.load (record, base);
|
||||||
|
}
|
||||||
|
else if (record.mType==ESM::Dialogue::Deleted)
|
||||||
|
{
|
||||||
|
/// \todo handle deleted records
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mTopics.load (record, base);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
/// \todo throw an exception instead, once all records are implemented
|
/// \todo throw an exception instead, once all records are implemented
|
||||||
|
@ -469,6 +523,8 @@ bool CSMWorld::Data::hasId (const std::string& id) const
|
||||||
getRegions().searchId (id)!=-1 ||
|
getRegions().searchId (id)!=-1 ||
|
||||||
getBirthsigns().searchId (id)!=-1 ||
|
getBirthsigns().searchId (id)!=-1 ||
|
||||||
getSpells().searchId (id)!=-1 ||
|
getSpells().searchId (id)!=-1 ||
|
||||||
|
getTopcis().searchId (id)!=-1 ||
|
||||||
|
getJournals().searchId (id)!=-1 ||
|
||||||
getCells().searchId (id)!=-1 ||
|
getCells().searchId (id)!=-1 ||
|
||||||
getReferenceables().searchId (id)!=-1;
|
getReferenceables().searchId (id)!=-1;
|
||||||
}
|
}
|
||||||
|
@ -487,6 +543,8 @@ std::vector<std::string> CSMWorld::Data::getIds (bool listDeleted) const
|
||||||
appendIds (ids, mRegions, listDeleted);
|
appendIds (ids, mRegions, listDeleted);
|
||||||
appendIds (ids, mBirthsigns, listDeleted);
|
appendIds (ids, mBirthsigns, listDeleted);
|
||||||
appendIds (ids, mSpells, listDeleted);
|
appendIds (ids, mSpells, listDeleted);
|
||||||
|
appendIds (ids, mTopics, listDeleted);
|
||||||
|
appendIds (ids, mJournals, listDeleted);
|
||||||
appendIds (ids, mCells, listDeleted);
|
appendIds (ids, mCells, listDeleted);
|
||||||
appendIds (ids, mReferenceables, listDeleted);
|
appendIds (ids, mReferenceables, listDeleted);
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <components/esm/loadregn.hpp>
|
#include <components/esm/loadregn.hpp>
|
||||||
#include <components/esm/loadbsgn.hpp>
|
#include <components/esm/loadbsgn.hpp>
|
||||||
#include <components/esm/loadspel.hpp>
|
#include <components/esm/loadspel.hpp>
|
||||||
|
#include <components/esm/loaddial.hpp>
|
||||||
|
|
||||||
#include "../filter/filter.hpp"
|
#include "../filter/filter.hpp"
|
||||||
|
|
||||||
|
@ -48,6 +49,8 @@ namespace CSMWorld
|
||||||
IdCollection<ESM::Region> mRegions;
|
IdCollection<ESM::Region> mRegions;
|
||||||
IdCollection<ESM::BirthSign> mBirthsigns;
|
IdCollection<ESM::BirthSign> mBirthsigns;
|
||||||
IdCollection<ESM::Spell> mSpells;
|
IdCollection<ESM::Spell> mSpells;
|
||||||
|
IdCollection<ESM::Dialogue> mTopics;
|
||||||
|
IdCollection<ESM::Dialogue> mJournals;
|
||||||
IdCollection<Cell> mCells;
|
IdCollection<Cell> mCells;
|
||||||
RefIdCollection mReferenceables;
|
RefIdCollection mReferenceables;
|
||||||
RefCollection mRefs;
|
RefCollection mRefs;
|
||||||
|
@ -116,6 +119,14 @@ namespace CSMWorld
|
||||||
|
|
||||||
IdCollection<ESM::Spell>& getSpells();
|
IdCollection<ESM::Spell>& getSpells();
|
||||||
|
|
||||||
|
const IdCollection<ESM::Dialogue>& getTopcis() const;
|
||||||
|
|
||||||
|
IdCollection<ESM::Dialogue>& getTopcis();
|
||||||
|
|
||||||
|
const IdCollection<ESM::Dialogue>& getJournals() const;
|
||||||
|
|
||||||
|
IdCollection<ESM::Dialogue>& getJournals();
|
||||||
|
|
||||||
const IdCollection<Cell>& getCells() const;
|
const IdCollection<Cell>& getCells() const;
|
||||||
|
|
||||||
IdCollection<Cell>& getCells();
|
IdCollection<Cell>& getCells();
|
||||||
|
|
|
@ -15,6 +15,8 @@ namespace CSMWorld
|
||||||
public:
|
public:
|
||||||
|
|
||||||
void load (ESM::ESMReader& reader, bool base);
|
void load (ESM::ESMReader& reader, bool base);
|
||||||
|
|
||||||
|
void load (const ESXRecordT& record, bool base);
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename ESXRecordT, typename IdAccessorT>
|
template<typename ESXRecordT, typename IdAccessorT>
|
||||||
|
@ -53,29 +55,35 @@ namespace CSMWorld
|
||||||
IdAccessorT().getId (record) = id;
|
IdAccessorT().getId (record) = id;
|
||||||
record.load (reader);
|
record.load (reader);
|
||||||
|
|
||||||
int index = this->searchId (IdAccessorT().getId (record));
|
load (record, base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (index==-1)
|
template<typename ESXRecordT, typename IdAccessorT>
|
||||||
{
|
void IdCollection<ESXRecordT, IdAccessorT>::load (const ESXRecordT& record, bool base)
|
||||||
// new record
|
{
|
||||||
Record<ESXRecordT> record2;
|
int index = this->searchId (IdAccessorT().getId (record));
|
||||||
record2.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly;
|
|
||||||
(base ? record2.mBase : record2.mModified) = record;
|
|
||||||
|
|
||||||
this->appendRecord (record2);
|
if (index==-1)
|
||||||
}
|
{
|
||||||
|
// new record
|
||||||
|
Record<ESXRecordT> record2;
|
||||||
|
record2.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly;
|
||||||
|
(base ? record2.mBase : record2.mModified) = record;
|
||||||
|
|
||||||
|
this->appendRecord (record2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// old record
|
||||||
|
Record<ESXRecordT> record2 = Collection<ESXRecordT, IdAccessorT>::getRecord (index);
|
||||||
|
|
||||||
|
if (base)
|
||||||
|
record2.mBase = record;
|
||||||
else
|
else
|
||||||
{
|
record2.setModified (record);
|
||||||
// old record
|
|
||||||
Record<ESXRecordT> record2 = Collection<ESXRecordT, IdAccessorT>::getRecord (index);
|
|
||||||
|
|
||||||
if (base)
|
this->setRecord (index, record2);
|
||||||
record2.mBase = record;
|
|
||||||
else
|
|
||||||
record2.setModified (record);
|
|
||||||
|
|
||||||
this->setRecord (index, record2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,8 @@ namespace
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Regions, "Regions", 0 },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Regions, "Regions", 0 },
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Birthsigns, "Birthsigns", 0 },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Birthsigns, "Birthsigns", 0 },
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Spells, "Spells", 0 },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Spells, "Spells", 0 },
|
||||||
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Topics, "Topics", 0 },
|
||||||
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Journals, "Journals", 0 },
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Cells, "Cells", 0 },
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Cells, "Cells", 0 },
|
||||||
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Referenceables,
|
{ CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Referenceables,
|
||||||
"Referenceables", 0 },
|
"Referenceables", 0 },
|
||||||
|
@ -54,6 +56,8 @@ namespace
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Region, "Region", ":./land.png" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Region, "Region", ":./land.png" },
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Birthsign, "Birthsign", ":./birthsign.png" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Birthsign, "Birthsign", ":./birthsign.png" },
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Spell, "Spell", ":./spell.png" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Spell, "Spell", ":./spell.png" },
|
||||||
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Topic, "Topic", 0 },
|
||||||
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Journal, "Journal", 0 },
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Cell, "Cell", ":./cell.png" },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Cell, "Cell", ":./cell.png" },
|
||||||
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Referenceable, "Referenceables", 0 },
|
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Referenceable, "Referenceables", 0 },
|
||||||
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Activator, "Activator", ":./activator.png" },
|
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Activator, "Activator", ":./activator.png" },
|
||||||
|
|
|
@ -87,6 +87,10 @@ namespace CSMWorld
|
||||||
Type_RegionMap,
|
Type_RegionMap,
|
||||||
Type_Filter,
|
Type_Filter,
|
||||||
Type_Filters,
|
Type_Filters,
|
||||||
|
Type_Topics,
|
||||||
|
Type_Topic,
|
||||||
|
Type_Journals,
|
||||||
|
Type_Journal,
|
||||||
Type_Scene
|
Type_Scene
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -163,6 +163,14 @@ void CSVDoc::View::setupMechanicsMenu()
|
||||||
QAction *spells = new QAction (tr ("Spells"), this);
|
QAction *spells = new QAction (tr ("Spells"), this);
|
||||||
connect (spells, SIGNAL (triggered()), this, SLOT (addSpellsSubView()));
|
connect (spells, SIGNAL (triggered()), this, SLOT (addSpellsSubView()));
|
||||||
mechanics->addAction (spells);
|
mechanics->addAction (spells);
|
||||||
|
|
||||||
|
QAction *topics = new QAction (tr ("Topics"), this);
|
||||||
|
connect (topics, SIGNAL (triggered()), this, SLOT (addTopicsSubView()));
|
||||||
|
mechanics->addAction (topics);
|
||||||
|
|
||||||
|
QAction *journals = new QAction (tr ("Journals"), this);
|
||||||
|
connect (journals, SIGNAL (triggered()), this, SLOT (addJournalsSubView()));
|
||||||
|
mechanics->addAction (journals);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVDoc::View::setupAssetsMenu()
|
void CSVDoc::View::setupAssetsMenu()
|
||||||
|
@ -412,6 +420,16 @@ void CSVDoc::View::addSceneSubView()
|
||||||
addSubView (CSMWorld::UniversalId::Type_Scene);
|
addSubView (CSMWorld::UniversalId::Type_Scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSVDoc::View::addTopicsSubView()
|
||||||
|
{
|
||||||
|
addSubView (CSMWorld::UniversalId::Type_Topics);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSVDoc::View::addJournalsSubView()
|
||||||
|
{
|
||||||
|
addSubView (CSMWorld::UniversalId::Type_Journals);
|
||||||
|
}
|
||||||
|
|
||||||
void CSVDoc::View::abortOperation (int type)
|
void CSVDoc::View::abortOperation (int type)
|
||||||
{
|
{
|
||||||
mDocument->abortOperation (type);
|
mDocument->abortOperation (type);
|
||||||
|
|
|
@ -166,6 +166,10 @@ namespace CSVDoc
|
||||||
|
|
||||||
void addSceneSubView();
|
void addSceneSubView();
|
||||||
|
|
||||||
|
void addTopicsSubView();
|
||||||
|
|
||||||
|
void addJournalsSubView();
|
||||||
|
|
||||||
void toggleShowStatusBar (bool show);
|
void toggleShowStatusBar (bool show);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,8 @@ void CSVWorld::addSubViewFactories (CSVDoc::SubViewFactoryManager& manager)
|
||||||
CSMWorld::UniversalId::Type_Regions,
|
CSMWorld::UniversalId::Type_Regions,
|
||||||
CSMWorld::UniversalId::Type_Birthsigns,
|
CSMWorld::UniversalId::Type_Birthsigns,
|
||||||
CSMWorld::UniversalId::Type_Spells,
|
CSMWorld::UniversalId::Type_Spells,
|
||||||
|
CSMWorld::UniversalId::Type_Topics,
|
||||||
|
CSMWorld::UniversalId::Type_Journals,
|
||||||
|
|
||||||
CSMWorld::UniversalId::Type_None // end marker
|
CSMWorld::UniversalId::Type_None // end marker
|
||||||
};
|
};
|
||||||
|
|
|
@ -36,4 +36,9 @@ void Dialogue::save(ESMWriter &esm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Dialogue::blank()
|
||||||
|
{
|
||||||
|
mInfo.clear();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,9 @@ struct Dialogue
|
||||||
|
|
||||||
void load(ESMReader &esm);
|
void load(ESMReader &esm);
|
||||||
void save(ESMWriter &esm);
|
void save(ESMWriter &esm);
|
||||||
|
|
||||||
|
void blank();
|
||||||
|
///< Set record to default state (does not touch the ID and does not change the type).
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue