mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 13:56:38 +00:00 
			
		
		
		
	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,9 +21,12 @@ CSMWorld::ModifyCommand::ModifyCommand (QAbstractItemModel& model, const QModelI | |||
|         // Replace proxy with actual model
 | ||||
|         mIndex = proxy->mapToSource (index); | ||||
|         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() | ||||
|  |  | |||
|  | @ -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))); | ||||
| 
 | ||||
|             switch (subColIndex) | ||||
|             if (mType == UniversalId::Type_CreatureLevelledList) | ||||
|             { | ||||
|                 case 0: | ||||
|                 switch (subColIndex) | ||||
|                 { | ||||
|                     if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList && | ||||
|                             record.get().mFlags == 0x01) | ||||
|                     { | ||||
|                         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 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 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 | ||||
|             { | ||||
|                 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 levelled items!"); | ||||
|                 } | ||||
|                 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))); | ||||
|             ESXRecordT leveled = record.get(); | ||||
| 
 | ||||
|             switch(subColIndex) | ||||
|             if (mType == UniversalId::Type_CreatureLevelledList) | ||||
|             { | ||||
|                 case 0: | ||||
|                 switch(subColIndex) | ||||
|                 { | ||||
|                     if (mType == CSMWorld::UniversalId::Type_CreatureLevelledList && | ||||
|                             value.toString().toStdString() == "All Levels") | ||||
|                     case 0: return; // return without saving
 | ||||
|                     case 1: | ||||
|                     { | ||||
|                         leveled.mFlags = 0x01; | ||||
|                         break; | ||||
|                         if(value.toBool()) | ||||
|                         { | ||||
|                             leveled.mFlags |= ESM::CreatureLevList::AllLevels; | ||||
|                             break; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             leveled.mFlags &= ~ESM::CreatureLevList::AllLevels; | ||||
|                             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; | ||||
|                     } | ||||
|                     else | ||||
|                         return; // return without saving
 | ||||
|                     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(value.toBool()) | ||||
|                         { | ||||
|                             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); | ||||
|  | @ -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