forked from teamnwah/openmw-tes3coop
Fixed levelled lists flags - now bit masks represented by tick boxes in the dialogue subview.
This commit is contained in:
parent
7f2bd01f79
commit
b04aeb6aad
6 changed files with 93 additions and 73 deletions
|
@ -222,7 +222,6 @@ namespace CSMWorld
|
||||||
{ ColumnId_HitSound, "Hit Sound" },
|
{ ColumnId_HitSound, "Hit Sound" },
|
||||||
{ ColumnId_AreaSound, "Area Sound" },
|
{ ColumnId_AreaSound, "Area Sound" },
|
||||||
{ ColumnId_BoltSound, "Bolt Sound" },
|
{ ColumnId_BoltSound, "Bolt Sound" },
|
||||||
{ ColumnId_OriginalCell, "Original Cell" },
|
|
||||||
|
|
||||||
{ ColumnId_PathgridPoints, "Points" },
|
{ ColumnId_PathgridPoints, "Points" },
|
||||||
{ ColumnId_PathgridIndex, "Index" },
|
{ ColumnId_PathgridIndex, "Index" },
|
||||||
|
@ -267,13 +266,15 @@ namespace CSMWorld
|
||||||
{ ColumnId_LevelledList,"Levelled List" },
|
{ ColumnId_LevelledList,"Levelled List" },
|
||||||
{ ColumnId_LevelledItemId,"Item ID" },
|
{ ColumnId_LevelledItemId,"Item ID" },
|
||||||
{ ColumnId_LevelledItemLevel,"Level" },
|
{ ColumnId_LevelledItemLevel,"Level" },
|
||||||
{ ColumnId_LevelledItemType, "Type" },
|
{ ColumnId_LevelledItemType, "Calculate all levels <= player" },
|
||||||
|
{ ColumnId_LevelledItemTypeEach, "Select a new item each instance" },
|
||||||
{ ColumnId_LevelledItemChanceNone, "Chance None" },
|
{ ColumnId_LevelledItemChanceNone, "Chance None" },
|
||||||
|
|
||||||
{ ColumnId_PowerList, "Powers" },
|
{ ColumnId_PowerList, "Powers" },
|
||||||
{ ColumnId_SkillImpact, "Skills" },
|
{ ColumnId_SkillImpact, "Skills" },
|
||||||
|
|
||||||
{ ColumnId_InfoList, "Info List" },
|
{ ColumnId_InfoList, "Info List" },
|
||||||
|
{ ColumnId_OriginalCell, "Original Cell" },
|
||||||
|
|
||||||
{ ColumnId_UseValue1, "Use value 1" },
|
{ ColumnId_UseValue1, "Use value 1" },
|
||||||
{ ColumnId_UseValue2, "Use value 2" },
|
{ ColumnId_UseValue2, "Use value 2" },
|
||||||
|
|
|
@ -257,14 +257,15 @@ namespace CSMWorld
|
||||||
ColumnId_LevelledItemId = 234,
|
ColumnId_LevelledItemId = 234,
|
||||||
ColumnId_LevelledItemLevel = 235,
|
ColumnId_LevelledItemLevel = 235,
|
||||||
ColumnId_LevelledItemType = 236,
|
ColumnId_LevelledItemType = 236,
|
||||||
ColumnId_LevelledItemChanceNone = 237,
|
ColumnId_LevelledItemTypeEach = 237,
|
||||||
|
ColumnId_LevelledItemChanceNone = 238,
|
||||||
|
|
||||||
ColumnId_PowerList = 238,
|
ColumnId_PowerList = 239,
|
||||||
ColumnId_SkillImpact = 239, // impact from magic effects
|
ColumnId_SkillImpact = 240, // impact from magic effects
|
||||||
|
|
||||||
ColumnId_InfoList = 240,
|
ColumnId_InfoList = 241,
|
||||||
|
|
||||||
ColumnId_OriginalCell = 241,
|
ColumnId_OriginalCell = 242,
|
||||||
|
|
||||||
// Allocated to a separate value range, so we don't get a collision should we ever need
|
// Allocated to a separate value range, so we don't get a collision should we ever need
|
||||||
// to extend the number of use values.
|
// to extend the number of use values.
|
||||||
|
|
|
@ -21,9 +21,12 @@ CSMWorld::ModifyCommand::ModifyCommand (QAbstractItemModel& model, const QModelI
|
||||||
// Replace proxy with actual model
|
// Replace proxy with actual model
|
||||||
mIndex = proxy->mapToSource (index);
|
mIndex = proxy->mapToSource (index);
|
||||||
mModel = proxy->sourceModel();
|
mModel = proxy->sourceModel();
|
||||||
}
|
|
||||||
|
|
||||||
setText ("Modify " + mModel->headerData (mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString());
|
setText ("Modify " + dynamic_cast<CSMWorld::IdTree*>(mModel)->nestedHeaderData (
|
||||||
|
mIndex.parent().column(), mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
setText ("Modify " + mModel->headerData (mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSMWorld::ModifyCommand::redo()
|
void CSMWorld::ModifyCommand::redo()
|
||||||
|
|
|
@ -1830,10 +1830,10 @@ namespace CSMWorld
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// for non-tables
|
||||||
template <typename ESXRecordT>
|
template <typename ESXRecordT>
|
||||||
class NestedListLevListRefIdAdapter : public NestedRefIdAdapterBase
|
class NestedListLevListRefIdAdapter : public NestedRefIdAdapterBase
|
||||||
{
|
{
|
||||||
|
|
||||||
UniversalId::Type mType;
|
UniversalId::Type mType;
|
||||||
|
|
||||||
// not implemented
|
// not implemented
|
||||||
|
@ -1877,45 +1877,27 @@ namespace CSMWorld
|
||||||
const Record<ESXRecordT>& record =
|
const Record<ESXRecordT>& record =
|
||||||
static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
|
static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
|
||||||
|
|
||||||
switch (subColIndex)
|
if (mType == UniversalId::Type_CreatureLevelledList)
|
||||||
{
|
{
|
||||||
case 0:
|
switch (subColIndex)
|
||||||
{
|
{
|
||||||
if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
|
case 0: return QVariant(); // don't allow checkbox editor to be created
|
||||||
record.get().mFlags == 0x01)
|
case 1: return record.get().mFlags & ESM::CreatureLevList::AllLevels;
|
||||||
{
|
case 2: return static_cast<int> (record.get().mChanceNone);
|
||||||
return QString("All Levels");
|
default:
|
||||||
}
|
throw std::runtime_error("Trying to access non-existing column in levelled creatues!");
|
||||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
}
|
||||||
record.get().mFlags == 0x01)
|
}
|
||||||
{
|
else
|
||||||
return QString("Each");
|
{
|
||||||
}
|
switch (subColIndex)
|
||||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
{
|
||||||
record.get().mFlags == 0x02)
|
case 0: return record.get().mFlags & ESM::ItemLevList::Each;
|
||||||
{
|
case 1: return record.get().mFlags & ESM::ItemLevList::AllLevels;
|
||||||
return QString("All Levels");
|
case 2: return static_cast<int> (record.get().mChanceNone);
|
||||||
}
|
default:
|
||||||
else if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
|
throw std::runtime_error("Trying to access non-existing column in levelled items!");
|
||||||
record.get().mFlags == 0x00)
|
|
||||||
{
|
|
||||||
std::cerr << "Unknown creature leveled list type: " << record.get().mFlags
|
|
||||||
<< ", Using \"All Levels\""<< std::endl;
|
|
||||||
return QString("All Levels");
|
|
||||||
}
|
|
||||||
else if (mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
|
||||||
record.get().mFlags == 0x00)
|
|
||||||
{
|
|
||||||
std::cerr << "Unknown item leveled list type: " << record.get().mFlags
|
|
||||||
<< ", Using \"Each\""<< std::endl;
|
|
||||||
return QString("Each");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
throw std::runtime_error("unknown leveled list type");
|
|
||||||
}
|
}
|
||||||
case 1: return static_cast<int> (record.get().mChanceNone);
|
|
||||||
default:
|
|
||||||
throw std::runtime_error("Trying to access non-existing column in the nested table!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1926,34 +1908,63 @@ namespace CSMWorld
|
||||||
static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
|
static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
|
||||||
ESXRecordT leveled = record.get();
|
ESXRecordT leveled = record.get();
|
||||||
|
|
||||||
switch(subColIndex)
|
if (mType == UniversalId::Type_CreatureLevelledList)
|
||||||
{
|
{
|
||||||
case 0:
|
switch(subColIndex)
|
||||||
{
|
{
|
||||||
if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
|
case 0: return; // return without saving
|
||||||
value.toString().toStdString() == "All Levels")
|
case 1:
|
||||||
{
|
{
|
||||||
leveled.mFlags = 0x01;
|
if(value.toBool())
|
||||||
break;
|
{
|
||||||
|
leveled.mFlags |= ESM::CreatureLevList::AllLevels;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
leveled.mFlags &= ~ESM::CreatureLevList::AllLevels;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
case 2: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
|
||||||
value.toString().toStdString() == "Each")
|
default:
|
||||||
{
|
throw std::runtime_error("Trying to set non-existing column in levelled creatures!");
|
||||||
leveled.mFlags = 0x01;
|
}
|
||||||
break;
|
}
|
||||||
}
|
else
|
||||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
{
|
||||||
value.toString().toStdString() == "All Levels")
|
switch(subColIndex)
|
||||||
{
|
{
|
||||||
leveled.mFlags = 0x02;
|
case 0:
|
||||||
break;
|
{
|
||||||
}
|
if(value.toBool())
|
||||||
else
|
{
|
||||||
return; // return without saving
|
leveled.mFlags |= ESM::ItemLevList::Each;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
leveled.mFlags &= ~ESM::ItemLevList::Each;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
if(value.toBool())
|
||||||
|
{
|
||||||
|
leveled.mFlags |= ESM::ItemLevList::AllLevels;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
leveled.mFlags &= ~ESM::ItemLevList::AllLevels;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 2: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
|
||||||
|
default:
|
||||||
|
throw std::runtime_error("Trying to set non-existing column in levelled items!");
|
||||||
}
|
}
|
||||||
case 1: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); break;
|
|
||||||
default:
|
|
||||||
throw std::runtime_error("Trying to access non-existing column in the nested table!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
record.setModified (leveled);
|
record.setModified (leveled);
|
||||||
|
@ -1961,7 +1972,7 @@ namespace CSMWorld
|
||||||
|
|
||||||
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
|
virtual int getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
|
||||||
{
|
{
|
||||||
return 2;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
|
virtual int getNestedRowsCount(const RefIdColumn *column, const RefIdData& data, int index) const
|
||||||
|
@ -1970,6 +1981,7 @@ namespace CSMWorld
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// for tables
|
||||||
template <typename ESXRecordT>
|
template <typename ESXRecordT>
|
||||||
class NestedLevListRefIdAdapter : public NestedRefIdAdapterBase
|
class NestedLevListRefIdAdapter : public NestedRefIdAdapterBase
|
||||||
{
|
{
|
||||||
|
|
|
@ -514,7 +514,9 @@ CSMWorld::RefIdCollection::RefIdCollection()
|
||||||
new NestedListLevListRefIdAdapter<ESM::ItemLevList> (UniversalId::Type_ItemLevelledList)));
|
new NestedListLevListRefIdAdapter<ESM::ItemLevList> (UniversalId::Type_ItemLevelledList)));
|
||||||
mNestedAdapters.push_back (std::make_pair(&mColumns.back(), nestedListLevListMap));
|
mNestedAdapters.push_back (std::make_pair(&mColumns.back(), nestedListLevListMap));
|
||||||
mColumns.back().addColumn(
|
mColumns.back().addColumn(
|
||||||
new RefIdColumn (Columns::ColumnId_LevelledItemType, CSMWorld::ColumnBase::Display_String));
|
new RefIdColumn (Columns::ColumnId_LevelledItemTypeEach, CSMWorld::ColumnBase::Display_Boolean));
|
||||||
|
mColumns.back().addColumn(
|
||||||
|
new RefIdColumn (Columns::ColumnId_LevelledItemType, CSMWorld::ColumnBase::Display_Boolean));
|
||||||
mColumns.back().addColumn(
|
mColumns.back().addColumn(
|
||||||
new RefIdColumn (Columns::ColumnId_LevelledItemChanceNone, CSMWorld::ColumnBase::Display_Integer));
|
new RefIdColumn (Columns::ColumnId_LevelledItemChanceNone, CSMWorld::ColumnBase::Display_Integer));
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
#include "../../model/world/record.hpp"
|
#include "../../model/world/record.hpp"
|
||||||
#include "../../model/world/tablemimedata.hpp"
|
#include "../../model/world/tablemimedata.hpp"
|
||||||
#include "../../model/world/idtree.hpp"
|
#include "../../model/world/idtree.hpp"
|
||||||
#include "../../model/doc/document.hpp"
|
|
||||||
#include "../../model/world/commands.hpp"
|
#include "../../model/world/commands.hpp"
|
||||||
|
#include "../../model/doc/document.hpp"
|
||||||
|
|
||||||
#include "recordstatusdelegate.hpp"
|
#include "recordstatusdelegate.hpp"
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
@ -444,7 +444,8 @@ void CSVWorld::EditWidget::remake(int row)
|
||||||
if (mTable->hasChildren(mTable->index(row, i)) &&
|
if (mTable->hasChildren(mTable->index(row, i)) &&
|
||||||
!(flags & CSMWorld::ColumnBase::Flag_Dialogue_List))
|
!(flags & CSMWorld::ColumnBase::Flag_Dialogue_List))
|
||||||
{
|
{
|
||||||
mNestedModels.push_back(new CSMWorld::NestedTableProxyModel (mTable->index(row, i), display, dynamic_cast<CSMWorld::IdTree*>(mTable)));
|
mNestedModels.push_back(new CSMWorld::NestedTableProxyModel (
|
||||||
|
mTable->index(row, i), display, dynamic_cast<CSMWorld::IdTree*>(mTable)));
|
||||||
|
|
||||||
int idColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_Id);
|
int idColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_Id);
|
||||||
int typeColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_RecordType);
|
int typeColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_RecordType);
|
||||||
|
|
Loading…
Reference in a new issue