mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:26:40 +00:00 
			
		
		
		
	Merge remote-tracking branch 'cc9cii/leveled-list-edit'
This commit is contained in:
		
						commit
						0bf28a6eab
					
				
					 6 changed files with 94 additions and 59 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,8 +21,11 @@ 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 " + 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());
 | 
					        setText ("Modify " + mModel->headerData (mIndex.column(), Qt::Horizontal, Qt::DisplayRole).toString());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,7 @@
 | 
				
			||||||
#define CSM_WOLRD_REFIDADAPTERIMP_H
 | 
					#define CSM_WOLRD_REFIDADAPTERIMP_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <map>
 | 
					#include <map>
 | 
				
			||||||
 | 
					#include <iostream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QVariant>
 | 
					#include <QVariant>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1829,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
 | 
				
			||||||
| 
						 | 
					@ -1876,31 +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)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (mType == UniversalId::Type_CreatureLevelledList)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                switch (subColIndex)
 | 
					                switch (subColIndex)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                case 0:
 | 
					                    case 0: return QVariant(); // don't allow checkbox editor to be created
 | 
				
			||||||
                {
 | 
					                    case 1: return record.get().mFlags & ESM::CreatureLevList::AllLevels;
 | 
				
			||||||
                    if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
 | 
					                    case 2: return static_cast<int> (record.get().mChanceNone);
 | 
				
			||||||
                            record.get().mFlags == 0x01)
 | 
					                    default:
 | 
				
			||||||
                    {
 | 
					                        throw std::runtime_error("Trying to access non-existing column in levelled creatues!");
 | 
				
			||||||
                        return QString("All Levels");
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                    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
 | 
					            else
 | 
				
			||||||
                        throw std::runtime_error("unknown leveled list type");
 | 
					            {
 | 
				
			||||||
                }
 | 
					                switch (subColIndex)
 | 
				
			||||||
                case 1: return static_cast<int> (record.get().mChanceNone);
 | 
					                {
 | 
				
			||||||
 | 
					                    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:
 | 
					                    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!");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1911,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();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            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)
 | 
					                switch(subColIndex)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    case 0:
 | 
					                    case 0:
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                    if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList &&
 | 
					                        if(value.toBool())
 | 
				
			||||||
                            value.toString().toStdString() == "All Levels")
 | 
					 | 
				
			||||||
                        {
 | 
					                        {
 | 
				
			||||||
                        leveled.mFlags = 0x01;
 | 
					                            leveled.mFlags |= ESM::ItemLevList::Each;
 | 
				
			||||||
                        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;
 | 
					 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        else
 | 
					                        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:
 | 
					                    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);
 | 
					            record.setModified (leveled);
 | 
				
			||||||
| 
						 | 
					@ -1946,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
 | 
				
			||||||
| 
						 | 
					@ -1955,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