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_AreaSound, "Area Sound" },
|
||||
{ ColumnId_BoltSound, "Bolt Sound" },
|
||||
{ ColumnId_OriginalCell, "Original Cell" },
|
||||
|
||||
{ ColumnId_PathgridPoints, "Points" },
|
||||
{ ColumnId_PathgridIndex, "Index" },
|
||||
|
@ -267,13 +266,15 @@ namespace CSMWorld
|
|||
{ ColumnId_LevelledList,"Levelled List" },
|
||||
{ ColumnId_LevelledItemId,"Item ID" },
|
||||
{ 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_PowerList, "Powers" },
|
||||
{ ColumnId_SkillImpact, "Skills" },
|
||||
|
||||
{ ColumnId_InfoList, "Info List" },
|
||||
{ ColumnId_OriginalCell, "Original Cell" },
|
||||
|
||||
{ ColumnId_UseValue1, "Use value 1" },
|
||||
{ ColumnId_UseValue2, "Use value 2" },
|
||||
|
|
|
@ -257,14 +257,15 @@ namespace CSMWorld
|
|||
ColumnId_LevelledItemId = 234,
|
||||
ColumnId_LevelledItemLevel = 235,
|
||||
ColumnId_LevelledItemType = 236,
|
||||
ColumnId_LevelledItemChanceNone = 237,
|
||||
ColumnId_LevelledItemTypeEach = 237,
|
||||
ColumnId_LevelledItemChanceNone = 238,
|
||||
|
||||
ColumnId_PowerList = 238,
|
||||
ColumnId_SkillImpact = 239, // impact from magic effects
|
||||
ColumnId_PowerList = 239,
|
||||
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
|
||||
// to extend the number of use values.
|
||||
|
|
|
@ -21,8 +21,11 @@ CSMWorld::ModifyCommand::ModifyCommand (QAbstractItemModel& model, const QModelI
|
|||
// Replace proxy with actual model
|
||||
mIndex = proxy->mapToSource (index);
|
||||
mModel = proxy->sourceModel();
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
|
||||
|
|
|
@ -1830,10 +1830,10 @@ namespace CSMWorld
|
|||
}
|
||||
|
||||
|
||||
// for non-tables
|
||||
template <typename ESXRecordT>
|
||||
class NestedListLevListRefIdAdapter : public NestedRefIdAdapterBase
|
||||
{
|
||||
|
||||
UniversalId::Type mType;
|
||||
|
||||
// not implemented
|
||||
|
@ -1877,45 +1877,27 @@ namespace CSMWorld
|
|||
const Record<ESXRecordT>& record =
|
||||
static_cast<const Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (index, mType)));
|
||||
|
||||
if (mType == UniversalId::Type_CreatureLevelledList)
|
||||
{
|
||||
switch (subColIndex)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
|
||||
record.get().mFlags == 0x01)
|
||||
{
|
||||
return QString("All Levels");
|
||||
case 0: return QVariant(); // don't allow checkbox editor to be created
|
||||
case 1: return record.get().mFlags & ESM::CreatureLevList::AllLevels;
|
||||
case 2: return static_cast<int> (record.get().mChanceNone);
|
||||
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)
|
||||
{
|
||||
return QString("Each");
|
||||
}
|
||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
||||
record.get().mFlags == 0x02)
|
||||
{
|
||||
return QString("All Levels");
|
||||
}
|
||||
else if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
|
||||
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);
|
||||
{
|
||||
switch (subColIndex)
|
||||
{
|
||||
case 0: return record.get().mFlags & ESM::ItemLevList::Each;
|
||||
case 1: return record.get().mFlags & ESM::ItemLevList::AllLevels;
|
||||
case 2: return static_cast<int> (record.get().mChanceNone);
|
||||
default:
|
||||
throw std::runtime_error("Trying to access non-existing column in the nested table!");
|
||||
throw std::runtime_error("Trying to access non-existing column in levelled items!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1926,34 +1908,63 @@ namespace CSMWorld
|
|||
static_cast<Record<ESXRecordT>&> (data.getRecord (RefIdData::LocalIndex (row, mType)));
|
||||
ESXRecordT leveled = record.get();
|
||||
|
||||
if (mType == UniversalId::Type_CreatureLevelledList)
|
||||
{
|
||||
switch(subColIndex)
|
||||
{
|
||||
case 0: return; // return without saving
|
||||
case 1:
|
||||
{
|
||||
if(value.toBool())
|
||||
{
|
||||
leveled.mFlags |= ESM::CreatureLevList::AllLevels;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
leveled.mFlags &= ~ESM::CreatureLevList::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 creatures!");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(subColIndex)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
|
||||
value.toString().toStdString() == "All Levels")
|
||||
if(value.toBool())
|
||||
{
|
||||
leveled.mFlags = 0x01;
|
||||
break;
|
||||
}
|
||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
||||
value.toString().toStdString() == "Each")
|
||||
{
|
||||
leveled.mFlags = 0x01;
|
||||
break;
|
||||
}
|
||||
else if(mType == CSMWorld::UniversalId::Type_ItemLevelledList &&
|
||||
value.toString().toStdString() == "All Levels")
|
||||
{
|
||||
leveled.mFlags = 0x02;
|
||||
leveled.mFlags |= ESM::ItemLevList::Each;
|
||||
break;
|
||||
}
|
||||
else
|
||||
return; // return without saving
|
||||
{
|
||||
leveled.mFlags &= ~ESM::ItemLevList::Each;
|
||||
break;
|
||||
}
|
||||
case 1: leveled.mChanceNone = static_cast<unsigned char>(value.toInt()); 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 access non-existing column in the nested table!");
|
||||
throw std::runtime_error("Trying to set non-existing column in levelled items!");
|
||||
}
|
||||
}
|
||||
|
||||
record.setModified (leveled);
|
||||
|
@ -1961,7 +1972,7 @@ namespace CSMWorld
|
|||
|
||||
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
|
||||
|
@ -1970,6 +1981,7 @@ namespace CSMWorld
|
|||
}
|
||||
};
|
||||
|
||||
// for tables
|
||||
template <typename ESXRecordT>
|
||||
class NestedLevListRefIdAdapter : public NestedRefIdAdapterBase
|
||||
{
|
||||
|
|
|
@ -514,7 +514,9 @@ CSMWorld::RefIdCollection::RefIdCollection()
|
|||
new NestedListLevListRefIdAdapter<ESM::ItemLevList> (UniversalId::Type_ItemLevelledList)));
|
||||
mNestedAdapters.push_back (std::make_pair(&mColumns.back(), nestedListLevListMap));
|
||||
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(
|
||||
new RefIdColumn (Columns::ColumnId_LevelledItemChanceNone, CSMWorld::ColumnBase::Display_Integer));
|
||||
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
#include "../../model/world/record.hpp"
|
||||
#include "../../model/world/tablemimedata.hpp"
|
||||
#include "../../model/world/idtree.hpp"
|
||||
#include "../../model/doc/document.hpp"
|
||||
#include "../../model/world/commands.hpp"
|
||||
#include "../../model/doc/document.hpp"
|
||||
|
||||
#include "recordstatusdelegate.hpp"
|
||||
#include "util.hpp"
|
||||
|
@ -444,7 +444,8 @@ void CSVWorld::EditWidget::remake(int row)
|
|||
if (mTable->hasChildren(mTable->index(row, i)) &&
|
||||
!(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 typeColumn = mTable->findColumnIndex (CSMWorld::Columns::ColumnId_RecordType);
|
||||
|
|
Loading…
Reference in a new issue