mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-04 04:26:42 +00:00 
			
		
		
		
	Merge remote-tracking branch 'cc9cii/windows-save-fix' into openmw-29
This commit is contained in:
		
						commit
						b0ae5b8ab7
					
				
					 15 changed files with 509 additions and 49 deletions
				
			
		| 
						 | 
					@ -26,6 +26,7 @@ namespace CSMWorld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        enum Display
 | 
					        enum Display
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					            Display_None, //Do not use
 | 
				
			||||||
            Display_String,
 | 
					            Display_String,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //CONCRETE TYPES STARTS HERE
 | 
					            //CONCRETE TYPES STARTS HERE
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,6 +64,7 @@ std::vector< CSMWorld::UniversalId > CSMWorld::TableMimeData::getData() const
 | 
				
			||||||
    return mUniversalId;
 | 
					    return mUniversalId;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool CSMWorld::TableMimeData::holdsType (CSMWorld::UniversalId::Type type) const
 | 
					bool CSMWorld::TableMimeData::holdsType (CSMWorld::UniversalId::Type type) const
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    for (std::vector<UniversalId>::const_iterator it = mUniversalId.begin(); it != mUniversalId.end(); ++it)
 | 
					    for (std::vector<UniversalId>::const_iterator it = mUniversalId.begin(); it != mUniversalId.end(); ++it)
 | 
				
			||||||
| 
						 | 
					@ -121,165 +122,325 @@ bool CSMWorld::TableMimeData::fromDocument (const CSMDoc::Document& document) co
 | 
				
			||||||
    return &document == &mDocument;
 | 
					    return &document == &mDocument;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CSMWorld::UniversalId::Type CSMWorld::TableMimeData::convertEnums (CSMWorld::ColumnBase::Display type) const
 | 
					CSMWorld::UniversalId::Type CSMWorld::TableMimeData::convertEnums (CSMWorld::ColumnBase::Display type)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    switch (type)
 | 
					    switch (type)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Race:
 | 
					        case CSMWorld::ColumnBase::Display_Race:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Race;
 | 
					            return CSMWorld::UniversalId::Type_Race;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Skill:
 | 
					        case CSMWorld::ColumnBase::Display_Skill:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Skill;
 | 
					            return CSMWorld::UniversalId::Type_Skill;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Class:
 | 
					        case CSMWorld::ColumnBase::Display_Class:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Class;
 | 
					            return CSMWorld::UniversalId::Type_Class;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Faction:
 | 
					        case CSMWorld::ColumnBase::Display_Faction:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Faction;
 | 
					            return CSMWorld::UniversalId::Type_Faction;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Sound:
 | 
					        case CSMWorld::ColumnBase::Display_Sound:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Sound;
 | 
					            return CSMWorld::UniversalId::Type_Sound;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Region:
 | 
					        case CSMWorld::ColumnBase::Display_Region:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Region;
 | 
					            return CSMWorld::UniversalId::Type_Region;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Birthsign:
 | 
					        case CSMWorld::ColumnBase::Display_Birthsign:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Birthsign;
 | 
					            return CSMWorld::UniversalId::Type_Birthsign;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Spell:
 | 
					        case CSMWorld::ColumnBase::Display_Spell:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Spell;
 | 
					            return CSMWorld::UniversalId::Type_Spell;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Cell:
 | 
					        case CSMWorld::ColumnBase::Display_Cell:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Cell;
 | 
					            return CSMWorld::UniversalId::Type_Cell;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Referenceable:
 | 
					        case CSMWorld::ColumnBase::Display_Referenceable:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Referenceable;
 | 
					            return CSMWorld::UniversalId::Type_Referenceable;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Activator:
 | 
					        case CSMWorld::ColumnBase::Display_Activator:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Activator;
 | 
					            return CSMWorld::UniversalId::Type_Activator;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Potion:
 | 
					        case CSMWorld::ColumnBase::Display_Potion:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Potion;
 | 
					            return CSMWorld::UniversalId::Type_Potion;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Apparatus:
 | 
					        case CSMWorld::ColumnBase::Display_Apparatus:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Apparatus;
 | 
					            return CSMWorld::UniversalId::Type_Apparatus;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Armor:
 | 
					        case CSMWorld::ColumnBase::Display_Armor:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Armor;
 | 
					            return CSMWorld::UniversalId::Type_Armor;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Book:
 | 
					        case CSMWorld::ColumnBase::Display_Book:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Book;
 | 
					            return CSMWorld::UniversalId::Type_Book;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Clothing:
 | 
					        case CSMWorld::ColumnBase::Display_Clothing:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Clothing;
 | 
					            return CSMWorld::UniversalId::Type_Clothing;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Container:
 | 
					        case CSMWorld::ColumnBase::Display_Container:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Container;
 | 
					            return CSMWorld::UniversalId::Type_Container;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Creature:
 | 
					        case CSMWorld::ColumnBase::Display_Creature:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Creature;
 | 
					            return CSMWorld::UniversalId::Type_Creature;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Door:
 | 
					        case CSMWorld::ColumnBase::Display_Door:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Door;
 | 
					            return CSMWorld::UniversalId::Type_Door;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Ingredient:
 | 
					        case CSMWorld::ColumnBase::Display_Ingredient:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Ingredient;
 | 
					            return CSMWorld::UniversalId::Type_Ingredient;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_CreatureLevelledList:
 | 
					        case CSMWorld::ColumnBase::Display_CreatureLevelledList:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_CreatureLevelledList;
 | 
					            return CSMWorld::UniversalId::Type_CreatureLevelledList;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_ItemLevelledList:
 | 
					        case CSMWorld::ColumnBase::Display_ItemLevelledList:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_ItemLevelledList;
 | 
					            return CSMWorld::UniversalId::Type_ItemLevelledList;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Light:
 | 
					        case CSMWorld::ColumnBase::Display_Light:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Light;
 | 
					            return CSMWorld::UniversalId::Type_Light;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Lockpick:
 | 
					        case CSMWorld::ColumnBase::Display_Lockpick:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Lockpick;
 | 
					            return CSMWorld::UniversalId::Type_Lockpick;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Miscellaneous:
 | 
					        case CSMWorld::ColumnBase::Display_Miscellaneous:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Miscellaneous;
 | 
					            return CSMWorld::UniversalId::Type_Miscellaneous;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Npc:
 | 
					        case CSMWorld::ColumnBase::Display_Npc:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Npc;
 | 
					            return CSMWorld::UniversalId::Type_Npc;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Probe:
 | 
					        case CSMWorld::ColumnBase::Display_Probe:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Probe;
 | 
					            return CSMWorld::UniversalId::Type_Probe;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Repair:
 | 
					        case CSMWorld::ColumnBase::Display_Repair:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Repair;
 | 
					            return CSMWorld::UniversalId::Type_Repair;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Static:
 | 
					        case CSMWorld::ColumnBase::Display_Static:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Static;
 | 
					            return CSMWorld::UniversalId::Type_Static;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Weapon:
 | 
					        case CSMWorld::ColumnBase::Display_Weapon:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Weapon;
 | 
					            return CSMWorld::UniversalId::Type_Weapon;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Reference:
 | 
					        case CSMWorld::ColumnBase::Display_Reference:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Reference;
 | 
					            return CSMWorld::UniversalId::Type_Reference;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Filter:
 | 
					        case CSMWorld::ColumnBase::Display_Filter:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Filter;
 | 
					            return CSMWorld::UniversalId::Type_Filter;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Topic:
 | 
					        case CSMWorld::ColumnBase::Display_Topic:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Topic;
 | 
					            return CSMWorld::UniversalId::Type_Topic;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Journal:
 | 
					        case CSMWorld::ColumnBase::Display_Journal:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Journal;
 | 
					            return CSMWorld::UniversalId::Type_Journal;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_TopicInfo:
 | 
					        case CSMWorld::ColumnBase::Display_TopicInfo:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_TopicInfo;
 | 
					            return CSMWorld::UniversalId::Type_TopicInfo;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_JournalInfo:
 | 
					        case CSMWorld::ColumnBase::Display_JournalInfo:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_JournalInfo;
 | 
					            return CSMWorld::UniversalId::Type_JournalInfo;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Scene:
 | 
					        case CSMWorld::ColumnBase::Display_Scene:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Scene;
 | 
					            return CSMWorld::UniversalId::Type_Scene;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        case CSMWorld::ColumnBase::Display_Script:
 | 
					        case CSMWorld::ColumnBase::Display_Script:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_Script;
 | 
					            return CSMWorld::UniversalId::Type_Script;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        default:
 | 
					        default:
 | 
				
			||||||
            return CSMWorld::UniversalId::Type_None;
 | 
					            return CSMWorld::UniversalId::Type_None;
 | 
				
			||||||
            break;
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CSMWorld::ColumnBase::Display CSMWorld::TableMimeData::convertEnums (CSMWorld::UniversalId::Type type)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    switch (type)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Race:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Race;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Skill:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Skill;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Class:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Class;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Faction:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Faction;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Sound:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Sound;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Region:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Region;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Birthsign:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Birthsign;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Spell:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Spell;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Cell:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Cell;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Referenceable:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Referenceable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Activator:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Activator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Potion:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Potion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Apparatus:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Apparatus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Armor:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Armor;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Book:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Book;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Clothing:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Clothing;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Container:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Container;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Creature:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Creature;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Door:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Door;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Ingredient:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Ingredient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_CreatureLevelledList:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_CreatureLevelledList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_ItemLevelledList:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_ItemLevelledList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Light:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Light;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Lockpick:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Lockpick;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Miscellaneous:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Miscellaneous;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Npc:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Npc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Probe:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Probe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Repair:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Repair;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Static:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Static;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Weapon:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Weapon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Reference:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Reference;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Filter:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Filter;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Topic:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Topic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Journal:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Journal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_TopicInfo:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_TopicInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_JournalInfo:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_JournalInfo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Scene:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Scene;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case CSMWorld::UniversalId::Type_Script:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_Script;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            return CSMWorld::ColumnBase::Display_None;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
// kate: indent-mode cstyle; indent-width 4; replace-tabs on; 
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,12 +50,14 @@ namespace CSMWorld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            UniversalId returnMatching(CSMWorld::ColumnBase::Display type) const;
 | 
					            UniversalId returnMatching(CSMWorld::ColumnBase::Display type) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            static CSMWorld::UniversalId::Type convertEnums(CSMWorld::ColumnBase::Display type);
 | 
				
			||||||
 | 
					            static CSMWorld::ColumnBase::Display convertEnums(CSMWorld::UniversalId::Type type);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private:
 | 
					        private:
 | 
				
			||||||
            std::vector<UniversalId> mUniversalId;
 | 
					            std::vector<UniversalId> mUniversalId;
 | 
				
			||||||
            QStringList mObjectsFormats;
 | 
					            QStringList mObjectsFormats;
 | 
				
			||||||
            const CSMDoc::Document& mDocument;
 | 
					            const CSMDoc::Document& mDocument;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            CSMWorld::UniversalId::Type convertEnums(CSMWorld::ColumnBase::Display type) const;
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif // TABLEMIMEDATA_H
 | 
					#endif // TABLEMIMEDATA_H
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,8 @@
 | 
				
			||||||
#include "editwidget.hpp"
 | 
					#include "editwidget.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QAbstractItemModel>
 | 
					#include <QAbstractItemModel>
 | 
				
			||||||
 | 
					#include <QString>
 | 
				
			||||||
 | 
					#include <QApplication>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../../model/world/data.hpp"
 | 
					#include "../../model/world/data.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -56,3 +58,146 @@ void CSVFilter::EditWidget::filterRowsInserted (const QModelIndex& parent, int s
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    textChanged (text());
 | 
					    textChanged (text());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CSVFilter::EditWidget::createFilterRequest (std::vector< std::pair< std::string, std::vector< std::string > > >& filterSource,
 | 
				
			||||||
 | 
					        Qt::DropAction action)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const unsigned count = filterSource.size();
 | 
				
			||||||
 | 
					    bool multipleElements = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (count) //setting multipleElements;
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        case 0: //empty
 | 
				
			||||||
 | 
					            return; //nothing to do here
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case 1: //only single
 | 
				
			||||||
 | 
					            multipleElements = false;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            multipleElements = true;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Qt::KeyboardModifiers key = QApplication::keyboardModifiers();
 | 
				
			||||||
 | 
					    QString oldContent (text());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool replaceMode = false;
 | 
				
			||||||
 | 
					    std::string orAnd;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (key) //setting replaceMode and string used to glue expressions
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        case Qt::ShiftModifier:
 | 
				
			||||||
 | 
					            orAnd = "!or(";
 | 
				
			||||||
 | 
					            replaceMode = false;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        case Qt::ControlModifier:
 | 
				
			||||||
 | 
					            orAnd = "!and(";
 | 
				
			||||||
 | 
					            replaceMode = false;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        default:
 | 
				
			||||||
 | 
					            replaceMode = true;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (oldContent.isEmpty() || !oldContent.contains (QRegExp ("^!.*$", Qt::CaseInsensitive))) //if line edit is empty or it does not contain one shot filter go into replace mode
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        replaceMode = true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!replaceMode)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        oldContent.remove ('!');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    std::stringstream ss;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (multipleElements)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (replaceMode)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ss<<"!or(";
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            ss << orAnd << oldContent.toStdString() << ',';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        for (unsigned i = 0; i < count; ++i)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ss<<generateFilter (filterSource[i]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (i+1 != count)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                ss<<", ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ss<<')';
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        if (!replaceMode)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ss << orAnd << oldContent.toStdString() <<',';
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					            ss<<'!';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ss << generateFilter (filterSource[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!replaceMode)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ss<<')';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (ss.str().length() >4)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        clear();
 | 
				
			||||||
 | 
					        insert (QString::fromUtf8(ss.str().c_str()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::string CSVFilter::EditWidget::generateFilter (std::pair< std::string, std::vector< std::string > >& seekedString) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const unsigned columns = seekedString.second.size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bool multipleColumns = false;
 | 
				
			||||||
 | 
					    switch (columns)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					    case 0: //empty
 | 
				
			||||||
 | 
					        return ""; //no column to filter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    case 1: //one column to look for
 | 
				
			||||||
 | 
					        multipleColumns = false;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    default:
 | 
				
			||||||
 | 
					        multipleColumns = true;
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    std::stringstream ss;
 | 
				
			||||||
 | 
					    if (multipleColumns)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        ss<<"or(";
 | 
				
			||||||
 | 
					        for (unsigned i = 0; i < columns; ++i)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            ss<<"string("<<'"'<<seekedString.second[i]<<'"'<<','<<'"'<<seekedString.first<<'"'<<')';
 | 
				
			||||||
 | 
					            if (i+1 != columns)
 | 
				
			||||||
 | 
					                ss<<',';
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        ss<<')';
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        ss<<"string"<<'('<<'"'<<seekedString.second[0]<<"\","<<'"'<<seekedString.first<<"\")";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ss.str();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CSVFilter::EditWidget::useFilterRequest (const std::string& idOfFilter)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    clear();
 | 
				
			||||||
 | 
					    insert(QString::fromUtf8(idOfFilter.c_str()));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QLineEdit>
 | 
					#include <QLineEdit>
 | 
				
			||||||
#include <QPalette>
 | 
					#include <QPalette>
 | 
				
			||||||
 | 
					#include <qt4/QtCore/qnamespace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../../model/filter/parser.hpp"
 | 
					#include "../../model/filter/parser.hpp"
 | 
				
			||||||
#include "../../model/filter/node.hpp"
 | 
					#include "../../model/filter/node.hpp"
 | 
				
			||||||
| 
						 | 
					@ -33,6 +34,9 @@ namespace CSVFilter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void filterChanged (boost::shared_ptr<CSMFilter::Node> filter);
 | 
					            void filterChanged (boost::shared_ptr<CSMFilter::Node> filter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					            std::string generateFilter(std::pair<std::string, std::vector<std::string> >& seekedString) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private slots:
 | 
					        private slots:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void textChanged (const QString& text);
 | 
					            void textChanged (const QString& text);
 | 
				
			||||||
| 
						 | 
					@ -42,6 +46,11 @@ namespace CSVFilter
 | 
				
			||||||
            void filterRowsRemoved (const QModelIndex& parent, int start, int end);
 | 
					            void filterRowsRemoved (const QModelIndex& parent, int start, int end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void filterRowsInserted (const QModelIndex& parent, int start, int end);
 | 
					            void filterRowsInserted (const QModelIndex& parent, int start, int end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >& filterSource,
 | 
				
			||||||
 | 
					                                     Qt::DropAction action);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void useFilterRequest(const std::string& idOfFilter);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,9 +2,12 @@
 | 
				
			||||||
#include "filterbox.hpp"
 | 
					#include "filterbox.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QHBoxLayout>
 | 
					#include <QHBoxLayout>
 | 
				
			||||||
 | 
					#include <QDragEnterEvent>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "recordfilterbox.hpp"
 | 
					#include "recordfilterbox.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <apps/opencs/model/world/tablemimedata.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CSVFilter::FilterBox::FilterBox (CSMWorld::Data& data, QWidget *parent)
 | 
					CSVFilter::FilterBox::FilterBox (CSMWorld::Data& data, QWidget *parent)
 | 
				
			||||||
: QWidget (parent)
 | 
					: QWidget (parent)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -21,4 +24,27 @@ CSVFilter::FilterBox::FilterBox (CSMWorld::Data& data, QWidget *parent)
 | 
				
			||||||
    connect (recordFilterBox,
 | 
					    connect (recordFilterBox,
 | 
				
			||||||
        SIGNAL (filterChanged (boost::shared_ptr<CSMFilter::Node>)),
 | 
					        SIGNAL (filterChanged (boost::shared_ptr<CSMFilter::Node>)),
 | 
				
			||||||
        this, SIGNAL (recordFilterChanged (boost::shared_ptr<CSMFilter::Node>)));
 | 
					        this, SIGNAL (recordFilterChanged (boost::shared_ptr<CSMFilter::Node>)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(this, SIGNAL(createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >&, Qt::DropAction)),
 | 
				
			||||||
 | 
					            recordFilterBox, SIGNAL(createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >&, Qt::DropAction)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(this, SIGNAL(useFilterRequest(const std::string&)), recordFilterBox, SIGNAL(useFilterRequest(const std::string&)));
 | 
				
			||||||
 | 
					    setAcceptDrops(true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CSVFilter::FilterBox::dropEvent (QDropEvent* event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<CSMWorld::UniversalId> data = dynamic_cast<const CSMWorld::TableMimeData*> (event->mimeData())->getData();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    emit recordDropped(data, event->proposedAction());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CSVFilter::FilterBox::dragEnterEvent (QDragEnterEvent* event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    event->acceptProposedAction();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CSVFilter::FilterBox::dragMoveEvent (QDragMoveEvent* event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    event->accept();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,13 @@
 | 
				
			||||||
#ifndef CSV_FILTER_FILTERBOX_H
 | 
					#ifndef CSV_FILTER_FILTERBOX_H
 | 
				
			||||||
#define CSV_FILTER_FILTERBOX_H
 | 
					#define CSV_FILTER_FILTERBOX_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QWidget>
 | 
					#include <QWidget>
 | 
				
			||||||
 | 
					#include <qt4/QtCore/qnamespace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../../model/filter/node.hpp"
 | 
					#include "../../model/filter/node.hpp"
 | 
				
			||||||
 | 
					#include "../../model/world/universalid.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace CSMWorld
 | 
					namespace CSMWorld
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -16,6 +20,12 @@ namespace CSVFilter
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
            Q_OBJECT
 | 
					            Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void dragEnterEvent (QDragEnterEvent* event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void dropEvent (QDropEvent* event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void dragMoveEvent(QDragMoveEvent *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public:
 | 
					        public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            FilterBox (CSMWorld::Data& data, QWidget *parent = 0);
 | 
					            FilterBox (CSMWorld::Data& data, QWidget *parent = 0);
 | 
				
			||||||
| 
						 | 
					@ -23,8 +33,13 @@ namespace CSVFilter
 | 
				
			||||||
        signals:
 | 
					        signals:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void recordFilterChanged (boost::shared_ptr<CSMFilter::Node> filter);
 | 
					            void recordFilterChanged (boost::shared_ptr<CSMFilter::Node> filter);
 | 
				
			||||||
 | 
					            void recordDropped (std::vector<CSMWorld::UniversalId>& types, Qt::DropAction action);
 | 
				
			||||||
 | 
					            void createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >& filterSource, 
 | 
				
			||||||
 | 
					                                     Qt::DropAction action);
 | 
				
			||||||
 | 
					            void useFilterRequest(const std::string& idOfFilter);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,4 +24,9 @@ CSVFilter::RecordFilterBox::RecordFilterBox (CSMWorld::Data& data, QWidget *pare
 | 
				
			||||||
    connect (
 | 
					    connect (
 | 
				
			||||||
        editWidget, SIGNAL (filterChanged (boost::shared_ptr<CSMFilter::Node>)),
 | 
					        editWidget, SIGNAL (filterChanged (boost::shared_ptr<CSMFilter::Node>)),
 | 
				
			||||||
        this, SIGNAL (filterChanged (boost::shared_ptr<CSMFilter::Node>)));
 | 
					        this, SIGNAL (filterChanged (boost::shared_ptr<CSMFilter::Node>)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(this, SIGNAL(createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >&, Qt::DropAction)),
 | 
				
			||||||
 | 
					            editWidget, SLOT(createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >&, Qt::DropAction)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(this, SIGNAL(useFilterRequest(const std::string&)), editWidget, SLOT(useFilterRequest(const std::string&)));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@
 | 
				
			||||||
#include <boost/shared_ptr.hpp>
 | 
					#include <boost/shared_ptr.hpp>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QWidget>
 | 
					#include <QWidget>
 | 
				
			||||||
 | 
					#include <qt4/QtCore/qnamespace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QHBoxLayout>
 | 
					#include <QHBoxLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,6 +28,9 @@ namespace CSVFilter
 | 
				
			||||||
        signals:
 | 
					        signals:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void filterChanged (boost::shared_ptr<CSMFilter::Node> filter);
 | 
					            void filterChanged (boost::shared_ptr<CSMFilter::Node> filter);
 | 
				
			||||||
 | 
					            void createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >& filterSource,
 | 
				
			||||||
 | 
					                                     Qt::DropAction action);
 | 
				
			||||||
 | 
					            void useFilterRequest(const std::string& idOfFilter);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@
 | 
				
			||||||
#include <QHeaderView>
 | 
					#include <QHeaderView>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QAction>
 | 
					#include <QAction>
 | 
				
			||||||
 | 
					#include <QApplication>
 | 
				
			||||||
#include <QMenu>
 | 
					#include <QMenu>
 | 
				
			||||||
#include <QContextMenuEvent>
 | 
					#include <QContextMenuEvent>
 | 
				
			||||||
#include <QString>
 | 
					#include <QString>
 | 
				
			||||||
| 
						 | 
					@ -471,7 +472,20 @@ void CSVWorld::Table::mouseMoveEvent (QMouseEvent* event)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        drag->setMimeData (mime);
 | 
					        drag->setMimeData (mime);
 | 
				
			||||||
        drag->setPixmap (QString::fromStdString (mime->getIcon()));
 | 
					        drag->setPixmap (QString::fromStdString (mime->getIcon()));
 | 
				
			||||||
        drag->exec();
 | 
					
 | 
				
			||||||
 | 
					        Qt::DropActions action = Qt::IgnoreAction;
 | 
				
			||||||
 | 
					        switch (QApplication::keyboardModifiers())
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            case Qt::ControlModifier:
 | 
				
			||||||
 | 
					                action = Qt::CopyAction;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            case Qt::ShiftModifier:
 | 
				
			||||||
 | 
					                action = Qt::MoveAction;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        drag->exec(action);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -485,6 +499,11 @@ void CSVWorld::Table::dropEvent(QDropEvent *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    QModelIndex index = indexAt (event->pos());
 | 
					    QModelIndex index = indexAt (event->pos());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!index.isValid())
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const CSMWorld::TableMimeData* mime = dynamic_cast<const CSMWorld::TableMimeData*> (event->mimeData());
 | 
					    const CSMWorld::TableMimeData* mime = dynamic_cast<const CSMWorld::TableMimeData*> (event->mimeData());
 | 
				
			||||||
    if (mime->fromDocument (mDocument))
 | 
					    if (mime->fromDocument (mDocument))
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -496,7 +515,7 @@ void CSVWorld::Table::dropEvent(QDropEvent *event)
 | 
				
			||||||
            CSMWorld::UniversalId record (mime->returnMatching (display));
 | 
					            CSMWorld::UniversalId record (mime->returnMatching (display));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            std::auto_ptr<CSMWorld::ModifyCommand> command (new CSMWorld::ModifyCommand
 | 
					            std::auto_ptr<CSMWorld::ModifyCommand> command (new CSMWorld::ModifyCommand
 | 
				
			||||||
                    (*mProxyModel, index, QVariant (QString::fromStdString (record.getId()))));
 | 
					                    (*mProxyModel, index, QVariant (QString::fromUtf8 (record.getId().c_str()))));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            mUndoStack.push (command.release());
 | 
					            mUndoStack.push (command.release());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -507,3 +526,21 @@ void CSVWorld::Table::dragMoveEvent(QDragMoveEvent *event)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
        event->accept();
 | 
					        event->accept();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::vector<std::string> CSVWorld::Table::getColumnsWithDisplay(CSMWorld::ColumnBase::Display display) const
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    const int count = mModel->columnCount();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    std::vector<std::string> titles;
 | 
				
			||||||
 | 
					    for (int i = 0; i < count; ++i)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        CSMWorld::ColumnBase::Display columndisplay = static_cast<CSMWorld::ColumnBase::Display>
 | 
				
			||||||
 | 
					                                                     (mModel->headerData (i, Qt::Horizontal, CSMWorld::ColumnBase::Role_Display).toInt());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (display == columndisplay)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            titles.push_back(mModel->headerData (i, Qt::Horizontal).toString().toStdString());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return titles;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@
 | 
				
			||||||
#include <QtGui/qevent.h>
 | 
					#include <QtGui/qevent.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../../model/filter/node.hpp"
 | 
					#include "../../model/filter/node.hpp"
 | 
				
			||||||
 | 
					#include "../../model/world/columnbase.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace CSMDoc {
 | 
					namespace CSMDoc {
 | 
				
			||||||
    class Document;
 | 
					    class Document;
 | 
				
			||||||
| 
						 | 
					@ -63,10 +64,9 @@ namespace CSVWorld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void dragEnterEvent(QDragEnterEvent *event);
 | 
					            void dragEnterEvent(QDragEnterEvent *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void dropEvent(QDropEvent *event);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            void dragMoveEvent(QDragMoveEvent *event);
 | 
					            void dragMoveEvent(QDragMoveEvent *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            void dropEvent(QDropEvent *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public:
 | 
					        public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,6 +82,8 @@ namespace CSVWorld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void updateEditorSetting (const QString &settingName, const QString &settingValue);
 | 
					            void updateEditorSetting (const QString &settingName, const QString &settingValue);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            std::vector<std::string> getColumnsWithDisplay(CSMWorld::ColumnBase::Display display) const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        signals:
 | 
					        signals:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void editRequest (int row);
 | 
					            void editRequest (int row);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,8 +2,10 @@
 | 
				
			||||||
#include "tablesubview.hpp"
 | 
					#include "tablesubview.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <QVBoxLayout>
 | 
					#include <QVBoxLayout>
 | 
				
			||||||
 | 
					#include <QEvent>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../../model/doc/document.hpp"
 | 
					#include "../../model/doc/document.hpp"
 | 
				
			||||||
 | 
					#include "../../model/world/tablemimedata.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../filter/filterbox.hpp"
 | 
					#include "../filter/filterbox.hpp"
 | 
				
			||||||
#include "table.hpp"
 | 
					#include "table.hpp"
 | 
				
			||||||
| 
						 | 
					@ -43,6 +45,9 @@ CSVWorld::TableSubView::TableSubView (const CSMWorld::UniversalId& id, CSMDoc::D
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    mTable->tableSizeUpdate();
 | 
					    mTable->tableSizeUpdate();
 | 
				
			||||||
    mTable->selectionSizeUpdate();
 | 
					    mTable->selectionSizeUpdate();
 | 
				
			||||||
 | 
					    mTable->viewport()->installEventFilter(this);
 | 
				
			||||||
 | 
					    mBottom->installEventFilter(this);
 | 
				
			||||||
 | 
					    filterBox->installEventFilter(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (mBottom->canCreateAndDelete())
 | 
					    if (mBottom->canCreateAndDelete())
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -60,6 +65,14 @@ CSVWorld::TableSubView::TableSubView (const CSMWorld::UniversalId& id, CSMDoc::D
 | 
				
			||||||
    connect (filterBox,
 | 
					    connect (filterBox,
 | 
				
			||||||
        SIGNAL (recordFilterChanged (boost::shared_ptr<CSMFilter::Node>)),
 | 
					        SIGNAL (recordFilterChanged (boost::shared_ptr<CSMFilter::Node>)),
 | 
				
			||||||
        mTable, SLOT (recordFilterChanged (boost::shared_ptr<CSMFilter::Node>)));
 | 
					        mTable, SLOT (recordFilterChanged (boost::shared_ptr<CSMFilter::Node>)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(filterBox, SIGNAL(recordDropped(std::vector<CSMWorld::UniversalId>&, Qt::DropAction)),
 | 
				
			||||||
 | 
					        this, SLOT(createFilterRequest(std::vector<CSMWorld::UniversalId>&, Qt::DropAction)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(this, SIGNAL(useFilterRequest(const std::string&)), filterBox, SIGNAL(useFilterRequest(const std::string&)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    connect(this, SIGNAL(createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >&, Qt::DropAction)),
 | 
				
			||||||
 | 
					            filterBox, SIGNAL(createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >&, Qt::DropAction)));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CSVWorld::TableSubView::setEditLock (bool locked)
 | 
					void CSVWorld::TableSubView::setEditLock (bool locked)
 | 
				
			||||||
| 
						 | 
					@ -87,3 +100,33 @@ void CSVWorld::TableSubView::cloneRequest(const CSMWorld::UniversalId& toClone)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    emit cloneRequest(toClone.getId(), toClone.getType());
 | 
					    emit cloneRequest(toClone.getId(), toClone.getType());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void CSVWorld::TableSubView::createFilterRequest (std::vector< CSMWorld::UniversalId>& types, Qt::DropAction action)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    std::vector<std::pair<std::string, std::vector<std::string> > > filterSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for (std::vector<CSMWorld::UniversalId>::iterator it = types.begin(); it != types.end(); ++it)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        std::pair<std::string, std::vector<std::string> > pair(                         //splited long line
 | 
				
			||||||
 | 
					        std::make_pair(it->getId(), mTable->getColumnsWithDisplay(CSMWorld::TableMimeData::convertEnums(it->getType()))));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        filterSource.push_back(pair);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    emit createFilterRequest(filterSource, action);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool CSVWorld::TableSubView::eventFilter (QObject* object, QEvent* event)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if (event->type() == QEvent::Drop)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        QDropEvent* drop = dynamic_cast<QDropEvent*>(event);
 | 
				
			||||||
 | 
					        const CSMWorld::TableMimeData* data = dynamic_cast<const CSMWorld::TableMimeData*>(drop->mimeData());
 | 
				
			||||||
 | 
					        bool handled = data->holdsType(CSMWorld::UniversalId::Type_Filter);
 | 
				
			||||||
 | 
					        if (handled)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            emit useFilterRequest(data->returnMatching(CSMWorld::UniversalId::Type_Filter).getId());
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return handled;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../doc/subview.hpp"
 | 
					#include "../doc/subview.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <qt4/QtCore/qnamespace.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class QModelIndex;
 | 
					class QModelIndex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace CSMWorld
 | 
					namespace CSMWorld
 | 
				
			||||||
| 
						 | 
					@ -39,14 +41,22 @@ namespace CSVWorld
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            virtual void setStatusBar (bool show);
 | 
					            virtual void setStatusBar (bool show);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        protected:
 | 
				
			||||||
 | 
					            bool eventFilter(QObject* object, QEvent *event);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        signals:
 | 
					        signals:
 | 
				
			||||||
            void cloneRequest(const std::string&,
 | 
					            void cloneRequest(const std::string&,
 | 
				
			||||||
                              const CSMWorld::UniversalId::Type);
 | 
					                              const CSMWorld::UniversalId::Type);
 | 
				
			||||||
 | 
					            void createFilterRequest(std::vector<std::pair<std::string, std::vector<std::string> > >& filterSource,
 | 
				
			||||||
 | 
					                                     Qt::DropAction action);
 | 
				
			||||||
 | 
					            void useFilterRequest(const std::string& idOfFilter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        private slots:
 | 
					        private slots:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            void editRequest (int row);
 | 
					            void editRequest (int row);
 | 
				
			||||||
            void cloneRequest (const CSMWorld::UniversalId& toClone);
 | 
					            void cloneRequest (const CSMWorld::UniversalId& toClone);
 | 
				
			||||||
 | 
					            void createFilterRequest(std::vector< CSMWorld::UniversalId >& types,
 | 
				
			||||||
 | 
					                                     Qt::DropAction action);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,7 +176,7 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot
 | 
				
			||||||
    else
 | 
					    else
 | 
				
			||||||
        slot = mCharacterManager.getCurrentCharacter()->updateSlot (slot, profile);
 | 
					        slot = mCharacterManager.getCurrentCharacter()->updateSlot (slot, profile);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    std::ofstream stream (slot->mPath.string().c_str());
 | 
					    std::ofstream stream (slot->mPath.string().c_str(), std::ios::binary);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ESM::ESMWriter writer;
 | 
					    ESM::ESMWriter writer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,7 +120,7 @@ namespace ESM
 | 
				
			||||||
        mStream->seekp(rec.position);
 | 
					        mStream->seekp(rec.position);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mCounting = false;
 | 
					        mCounting = false;
 | 
				
			||||||
        write (reinterpret_cast<const char*> (&rec.size), sizeof(int));
 | 
					        write (reinterpret_cast<const char*> (&rec.size), sizeof(uint32_t));
 | 
				
			||||||
        mCounting = true;
 | 
					        mCounting = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        mStream->seekp(0, std::ios::end);
 | 
					        mStream->seekp(0, std::ios::end);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue