diff --git a/CHANGELOG.md b/CHANGELOG.md
index 44cb90afd0..2ae2a38a4a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -119,6 +119,7 @@
Bug #4622: Recharging enchanted items with Soul Gems does not award experience if it fails
Bug #4628: NPC record reputation, disposition and faction rank should have unsigned char type
Bug #4633: Sneaking stance affects speed even if the actor is not able to crouch
+ Feature #912: Editor: Add missing icons to UniversalId tables
Feature #1645: Casting effects from objects
Feature #2606: Editor: Implemented (optional) case sensitive global search
Feature #3083: Play animation when NPC is casting spell via script
diff --git a/apps/opencs/model/prefs/state.cpp b/apps/opencs/model/prefs/state.cpp
index a704fb825d..b6a55ea862 100644
--- a/apps/opencs/model/prefs/state.cpp
+++ b/apps/opencs/model/prefs/state.cpp
@@ -305,6 +305,7 @@ void CSMPrefs::State::declare()
declareShortcut ("document-assets-videos", "Open Video Asset List", QKeySequence());
declareShortcut ("document-debug-run", "Run Debug", QKeySequence());
declareShortcut ("document-debug-shutdown", "Stop Debug", QKeySequence());
+ declareShortcut ("document-debug-profiles", "Debug Profiles", QKeySequence());
declareShortcut ("document-debug-runlog", "Open Run Log", QKeySequence());
declareSubcategory ("Table");
diff --git a/apps/opencs/model/world/universalid.cpp b/apps/opencs/model/world/universalid.cpp
index 8d7a7761e4..6f9eeb24fd 100644
--- a/apps/opencs/model/world/universalid.cpp
+++ b/apps/opencs/model/world/universalid.cpp
@@ -18,47 +18,60 @@ namespace
static const TypeData sNoArg[] =
{
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, "-", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Globals, "Global Variables", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Gmsts, "Game Settings", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Skills, "Skills", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Classes, "Classes", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Factions, "Factions", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Races, "Races", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Sounds, "Sounds", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Scripts, "Scripts", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Regions, "Regions", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Birthsigns, "Birthsigns", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Spells, "Spells", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Topics, "Topics", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Journals, "Journals", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_TopicInfos, "Topic Infos", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_JournalInfos, "Journal Infos", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Cells, "Cells", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Enchantments, "Enchantments", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_BodyParts, "Body Parts", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Referenceables,
- "Objects", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_References,
- "Instances", 0 },
- { CSMWorld::UniversalId::Class_NonRecord, CSMWorld::UniversalId::Type_RegionMap,
- "Region Map", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Filters, "Filters", 0 },
- { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Meshes, "Meshes", 0 },
- { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Icons, "Icons", 0 },
- { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Musics, "Music Files", 0 },
- { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_SoundsRes, "Sound Files", 0 },
- { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Textures, "Textures", 0 },
- { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Videos, "Videos", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_DebugProfiles, "Debug Profiles", 0 },
- { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_RunLog, "Run Log", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_SoundGens, "Sound Generators", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_MagicEffects, "Magic Effects", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Lands, "Lands", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_LandTextures, "LandTextures", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Pathgrids, "Pathgrids", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_StartScripts, "Start Scripts", 0 },
- { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_MetaDatas, "Meta Data Table", 0 },
-
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Globals, "Global Variables", ":./global-variable.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Gmsts, "Game Settings", ":./gmst.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Skills, "Skills", ":./skill.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Classes, "Classes", ":./class.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Factions, "Factions", ":./faction.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Races, "Races", ":./race.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Sounds, "Sounds", ":./sound.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Scripts, "Scripts", ":./script.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Regions, "Regions", ":./region.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Birthsigns, "Birthsigns", ":./birthsign.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Spells, "Spells", ":./spell.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Topics, "Topics", ":./dialogue-topics.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Journals, "Journals", ":./journal-topics.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_TopicInfos, "Topic Infos", ":./dialogue-topic-infos.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_JournalInfos, "Journal Infos", ":./journal-topic-infos.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Cells, "Cells", ":./cell.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Enchantments, "Enchantments", ":./enchantment.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_BodyParts, "Body Parts", ":./body-part.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Referenceables, "Objects", ":./object.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_References, "Instances", ":./instance.png" },
+ { CSMWorld::UniversalId::Class_NonRecord, CSMWorld::UniversalId::Type_RegionMap, "Region Map", ":./region-map.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Filters, "Filters", ":./filter.png" },
+ { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Meshes, "Meshes", ":./resources-mesh" },
+ { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Icons, "Icons", ":./resources-icon" },
+ { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Musics, "Music Files", ":./resources-music" },
+ { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_SoundsRes, "Sound Files", ":resources-sound" },
+ { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Textures, "Textures", ":./resources-texture" },
+ { CSMWorld::UniversalId::Class_ResourceList, CSMWorld::UniversalId::Type_Videos, "Videos", ":./resources-video" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_DebugProfiles, "Debug Profiles", ":./debug-profile.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_RunLog, "Run Log", ":./run-log.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_RunGame, "Run OpenMW", ":./run-openmw.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_StopGame, "Stop OpenMW", ":./stop-openmw.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_SoundGens, "Sound Generators", ":./sound-generator.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_MagicEffects, "Magic Effects", ":./magic-effect.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Lands, "Lands", ":./land-heightmap.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_LandTextures, "Land Textures", ":./land-texture.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_Pathgrids, "Pathgrids", ":./pathgrid.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_StartScripts, "Start Scripts", ":./start-script.png" },
+ { CSMWorld::UniversalId::Class_RecordList, CSMWorld::UniversalId::Type_MetaDatas, "Metadata", ":./metadata.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Redo, "Redo", ":./menu-redo.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Undo, "Undo", ":./menu-undo.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Preferences, "Preferences", ":./menu-preferences.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Reload, "Reload", ":./menu-reload.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_NewWindow, "New View", ":./menu-new-window.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_StatusBar, "Toggle Status Bar", ":./menu-status-bar.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_NewGame, "New Game", ":./menu-new-game.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_NewAddon, "New Addon", ":./menu-new-addon.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Open, "Open", ":./menu-open.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Save, "Save", ":./menu-save.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Verify, "Verify", ":./menu-verify.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Merge, "Merge", ":./menu-merge.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_ErrorLog, "Error Log", ":./error-log.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Close, "Close", ":./menu-close.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Exit, "Exit", ":./menu-exit.png" },
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0, 0 } // end marker
};
@@ -81,7 +94,7 @@ namespace
{ CSMWorld::UniversalId::Class_SubRecord, CSMWorld::UniversalId::Type_JournalInfo, "JournalInfo", ":./journal-topic-infos.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Cell, "Cell", ":./cell.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Cell_Missing, "Cell", ":./cell.png" },
- { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Referenceable, "Object", 0 },
+ { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Referenceable, "Object", ":./object.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Activator, "Activator", ":./activator.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Potion, "Potion", ":./potion.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Apparatus, "Apparatus", ":./apparatus.png" },
@@ -93,9 +106,9 @@ namespace
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Door, "Door", ":./door.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Ingredient, "Ingredient", ":./ingredient.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_CreatureLevelledList,
- "Creature Levelled List", ":./leveled-creature.png" },
+ "Creature Levelled List", ":./levelled-creature.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_ItemLevelledList,
- "Item Levelled List", ":./leveled-item.png" },
+ "Item Levelled List", ":./levelled-item.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Light, "Light", ":./light.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Lockpick, "Lockpick", ":./lockpick.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Miscellaneous,
@@ -105,35 +118,35 @@ namespace
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Repair, "Repair", ":./repair.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Static, "Static", ":./static.png" },
{ CSMWorld::UniversalId::Class_RefRecord, CSMWorld::UniversalId::Type_Weapon, "Weapon", ":./weapon.png" },
- { CSMWorld::UniversalId::Class_SubRecord, CSMWorld::UniversalId::Type_Reference, "Instance", 0 },
+ { CSMWorld::UniversalId::Class_SubRecord, CSMWorld::UniversalId::Type_Reference, "Instance", ":./instance.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Filter, "Filter", ":./filter.png" },
- { CSMWorld::UniversalId::Class_Collection, CSMWorld::UniversalId::Type_Scene, "Scene", 0 },
- { CSMWorld::UniversalId::Class_Collection, CSMWorld::UniversalId::Type_Preview, "Preview", 0 },
+ { CSMWorld::UniversalId::Class_Collection, CSMWorld::UniversalId::Type_Scene, "Scene", ":./scene.png" },
+ { CSMWorld::UniversalId::Class_Collection, CSMWorld::UniversalId::Type_Preview, "Preview", ":./record-preview.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Enchantment, "Enchantment", ":./enchantment.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_BodyPart, "Body Part", ":./body-part.png" },
- { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Mesh, "Mesh", ":resources-mesh"},
- { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Icon, "Icon", ":resources-icon"},
- { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Music, "Music", ":resources-music" },
- { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_SoundRes, "Sound File", ":resources-sound" },
- { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Texture, "Texture", ":resources-texture"},
- { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Video, "Video", ":resources-video"},
- { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_DebugProfile, "Debug Profile", 0 },
+ { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Mesh, "Mesh", ":./resources-mesh"},
+ { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Icon, "Icon", ":./resources-icon"},
+ { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Music, "Music", ":./resources-music" },
+ { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_SoundRes, "Sound File", ":./resources-sound" },
+ { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Texture, "Texture", ":./resources-texture" },
+ { CSMWorld::UniversalId::Class_Resource, CSMWorld::UniversalId::Type_Video, "Video", ":./resources-video" },
+ { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_DebugProfile, "Debug Profile", ":./debug-profile.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_SoundGen, "Sound Generator", ":./sound-generator.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_MagicEffect, "Magic Effect", ":./magic-effect.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Land, "Land", ":./land-heightmap.png" },
- { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_LandTexture, "LandTexture", ":./land-texture.png" },
+ { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_LandTexture, "Land Texture", ":./land-texture.png" },
{ CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_Pathgrid, "Pathgrid", ":./pathgrid.png" },
- { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_StartScript, "Start Script", 0 },
- { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_MetaData, "Meta Data", 0 },
+ { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_StartScript, "Start Script", ":./start-script.png" },
+ { CSMWorld::UniversalId::Class_Record, CSMWorld::UniversalId::Type_MetaData, "Metadata", ":./metadata.png" },
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0, 0 } // end marker
};
static const TypeData sIndexArg[] =
{
- { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_VerificationResults, "Verification Results", 0 },
- { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_LoadErrorLog, "Load Error Log", 0 },
- { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Search, "Global Search", 0 },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_VerificationResults, "Verification Results", ":./menu-verify.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_LoadErrorLog, "Load Error Log", ":./error-log.png" },
+ { CSMWorld::UniversalId::Class_Transient, CSMWorld::UniversalId::Type_Search, "Global Search", ":./menu-search.png" },
{ CSMWorld::UniversalId::Class_None, CSMWorld::UniversalId::Type_None, 0, 0 } // end marker
};
}
diff --git a/apps/opencs/model/world/universalid.hpp b/apps/opencs/model/world/universalid.hpp
index accd1b78da..aa5276ba71 100644
--- a/apps/opencs/model/world/universalid.hpp
+++ b/apps/opencs/model/world/universalid.hpp
@@ -137,10 +137,27 @@ namespace CSMWorld
Type_Search,
Type_MetaDatas,
Type_MetaData,
- Type_RunLog
+ Type_RunLog,
+ Type_RunGame,
+ Type_StopGame,
+ Type_Undo,
+ Type_Redo,
+ Type_Preferences,
+ Type_NewWindow,
+ Type_StatusBar,
+ Type_NewGame,
+ Type_NewAddon,
+ Type_Open,
+ Type_Save,
+ Type_Verify,
+ Type_Merge,
+ Type_ErrorLog,
+ Type_Close,
+ Type_Exit,
+ Type_Reload
};
- enum { NumberOfTypes = Type_RunLog+1 };
+ enum { NumberOfTypes = Type_Reload+1 };
private:
diff --git a/apps/opencs/view/doc/view.cpp b/apps/opencs/view/doc/view.cpp
index 3ebefd69a6..97aaac4d79 100644
--- a/apps/opencs/view/doc/view.cpp
+++ b/apps/opencs/view/doc/view.cpp
@@ -47,58 +47,40 @@ void CSVDoc::View::setupFileMenu()
{
QMenu *file = menuBar()->addMenu (tr ("File"));
- QAction *newGame = new QAction (tr ("New Game"), this);
+ QAction* newGame = createMenuEntry(CSMWorld::UniversalId::Type_NewGame, file, "document-file-newgame");
connect (newGame, SIGNAL (triggered()), this, SIGNAL (newGameRequest()));
- setupShortcut("document-file-newgame", newGame);
- file->addAction (newGame);
-
- QAction *newAddon = new QAction (tr ("New Addon"), this);
+ QAction* newAddon = createMenuEntry(CSMWorld::UniversalId::Type_NewAddon, file, "document-file-newaddon");
connect (newAddon, SIGNAL (triggered()), this, SIGNAL (newAddonRequest()));
- setupShortcut("document-file-newaddon", newAddon);
- file->addAction (newAddon);
- QAction *open = new QAction (tr ("Open"), this);
+ QAction* open = createMenuEntry(CSMWorld::UniversalId::Type_Open, file, "document-file-open");
connect (open, SIGNAL (triggered()), this, SIGNAL (loadDocumentRequest()));
- setupShortcut("document-file-open", open);
- file->addAction (open);
- mSave = new QAction (tr ("Save"), this);
- connect (mSave, SIGNAL (triggered()), this, SLOT (save()));
- setupShortcut("document-file-save", mSave);
- file->addAction (mSave);
+ QAction* save = createMenuEntry(CSMWorld::UniversalId::Type_Save, file, "document-file-save");
+ connect (save, SIGNAL (triggered()), this, SLOT (save()));
+ mSave = save;
- mVerify = new QAction (tr ("Verify"), this);
- connect (mVerify, SIGNAL (triggered()), this, SLOT (verify()));
- setupShortcut("document-file-verify", mVerify);
- file->addAction (mVerify);
+ QAction* verify = createMenuEntry(CSMWorld::UniversalId::Type_Verify, file, "document-file-verify");
+ connect (verify, SIGNAL (triggered()), this, SLOT (verify()));
+ mVerify = verify;
- mMerge = new QAction (tr ("Merge"), this);
- connect (mMerge, SIGNAL (triggered()), this, SLOT (merge()));
- setupShortcut("document-file-merge", mMerge);
- file->addAction (mMerge);
+ QAction* merge = createMenuEntry(CSMWorld::UniversalId::Type_Merge, file, "document-file-merge");
+ connect (merge, SIGNAL (triggered()), this, SLOT (merge()));
+ mMerge = merge;
- QAction *loadErrors = new QAction (tr ("Open Load Error Log"), this);
+ QAction* loadErrors = createMenuEntry(CSMWorld::UniversalId::Type_ErrorLog, file, "document-file-errorlog");
connect (loadErrors, SIGNAL (triggered()), this, SLOT (loadErrorLog()));
- setupShortcut("document-file-errorlog", loadErrors);
- file->addAction (loadErrors);
- QAction *meta = new QAction (tr ("Meta Data"), this);
+ QAction* meta = createMenuEntry(CSMWorld::UniversalId::Type_MetaDatas, file, "document-file-metadata");
connect (meta, SIGNAL (triggered()), this, SLOT (addMetaDataSubView()));
- setupShortcut("document-file-metadata", meta);
- file->addAction (meta);
- QAction *close = new QAction (tr ("Close Document"), this);
+ QAction* close = createMenuEntry(CSMWorld::UniversalId::Type_Close, file, "document-file-close");
connect (close, SIGNAL (triggered()), this, SLOT (close()));
- setupShortcut("document-file-close", close);
- file->addAction(close);
- QAction *exit = new QAction (tr ("Exit Application"), this);
+ QAction* exit = createMenuEntry(CSMWorld::UniversalId::Type_Exit, file, "document-file-exit");
connect (exit, SIGNAL (triggered()), this, SLOT (exit()));
- connect (this, SIGNAL(exitApplicationRequest(CSVDoc::View *)), &mViewManager, SLOT(exitApplication(CSVDoc::View *)));
- setupShortcut("document-file-exit", exit);
- file->addAction(exit);
+ connect (this, SIGNAL(exitApplicationRequest(CSVDoc::View *)), &mViewManager, SLOT(exitApplication(CSVDoc::View *)));
}
namespace
@@ -130,251 +112,180 @@ void CSVDoc::View::setupEditMenu()
mUndo = mDocument->getUndoStack().createUndoAction (this, tr("Undo"));
setupShortcut("document-edit-undo", mUndo);
connect(mUndo, SIGNAL (changed ()), this, SLOT (undoActionChanged ()));
+ std::string iconName = CSMWorld::UniversalId (CSMWorld::UniversalId::Type_Undo).getIcon();
+ if (!iconName.empty() && iconName != ":placeholder")
+ mUndo->setIcon(QIcon(QString::fromStdString(iconName)));
+
edit->addAction (mUndo);
mRedo = mDocument->getUndoStack().createRedoAction (this, tr("Redo"));
connect(mRedo, SIGNAL (changed ()), this, SLOT (redoActionChanged ()));
setupShortcut("document-edit-redo", mRedo);
+ iconName = CSMWorld::UniversalId (CSMWorld::UniversalId::Type_Redo).getIcon();
+ if (!iconName.empty() && iconName != ":placeholder")
+ mRedo->setIcon(QIcon(QString::fromStdString(iconName)));
+
edit->addAction (mRedo);
- QAction *userSettings = new QAction (tr ("Preferences"), this);
+ QAction* userSettings = createMenuEntry(CSMWorld::UniversalId::Type_Preferences, edit, "document-edit-preferences");
connect (userSettings, SIGNAL (triggered()), this, SIGNAL (editSettingsRequest()));
- setupShortcut("document-edit-preferences", userSettings);
- edit->addAction (userSettings);
- QAction *search = new QAction (tr ("Search"), this);
+ QAction* search = createMenuEntry(CSMWorld::UniversalId::Type_Search, edit, "document-edit-search");
connect (search, SIGNAL (triggered()), this, SLOT (addSearchSubView()));
- setupShortcut("document-edit-search", search);
- edit->addAction (search);
}
void CSVDoc::View::setupViewMenu()
{
QMenu *view = menuBar()->addMenu (tr ("View"));
- QAction *newWindow = new QAction (tr ("New View"), this);
+ QAction *newWindow = createMenuEntry(CSMWorld::UniversalId::Type_NewWindow, view, "document-view-newview");
connect (newWindow, SIGNAL (triggered()), this, SLOT (newView()));
- setupShortcut("document-view-newview", newWindow);
- view->addAction (newWindow);
- mShowStatusBar = new QAction (tr ("Toggle Status Bar"), this);
- mShowStatusBar->setCheckable (true);
+ mShowStatusBar = createMenuEntry(CSMWorld::UniversalId::Type_StatusBar, view, "document-view-statusbar");
connect (mShowStatusBar, SIGNAL (toggled (bool)), this, SLOT (toggleShowStatusBar (bool)));
- setupShortcut("document-view-statusbar", mShowStatusBar);
-
+ mShowStatusBar->setCheckable (true);
mShowStatusBar->setChecked (CSMPrefs::get()["Windows"]["show-statusbar"].isTrue());
view->addAction (mShowStatusBar);
- QAction *filters = new QAction (tr ("Filters"), this);
+ QAction *filters = createMenuEntry(CSMWorld::UniversalId::Type_Filters, view, "document-mechanics-filters");
connect (filters, SIGNAL (triggered()), this, SLOT (addFiltersSubView()));
- setupShortcut("document-view-filters", filters);
- view->addAction (filters);
}
void CSVDoc::View::setupWorldMenu()
{
QMenu *world = menuBar()->addMenu (tr ("World"));
- QAction *regions = new QAction (tr ("Regions"), this);
+ QAction* regions = createMenuEntry(CSMWorld::UniversalId::Type_Regions, world, "document-world-regions");
connect (regions, SIGNAL (triggered()), this, SLOT (addRegionsSubView()));
- setupShortcut("document-world-regions", regions);
- world->addAction (regions);
- QAction *cells = new QAction (tr ("Cells"), this);
+ QAction* cells = createMenuEntry(CSMWorld::UniversalId::Type_Cells, world, "document-world-cells");
connect (cells, SIGNAL (triggered()), this, SLOT (addCellsSubView()));
- setupShortcut("document-world-cells", cells);
- world->addAction (cells);
- QAction *referenceables = new QAction (tr ("Objects"), this);
+ QAction* referenceables = createMenuEntry(CSMWorld::UniversalId::Type_Referenceables, world, "document-world-referencables");
connect (referenceables, SIGNAL (triggered()), this, SLOT (addReferenceablesSubView()));
- setupShortcut("document-world-referencables", referenceables);
- world->addAction (referenceables);
- QAction *references = new QAction (tr ("Instances"), this);
+ QAction* references = createMenuEntry(CSMWorld::UniversalId::Type_References, world, "document-world-references");
connect (references, SIGNAL (triggered()), this, SLOT (addReferencesSubView()));
- setupShortcut("document-world-references", references);
- world->addAction (references);
- QAction *lands = new QAction (tr ("Lands"), this);
+ QAction *lands = createMenuEntry(CSMWorld::UniversalId::Type_Lands, world, "document-world-lands");
connect (lands, SIGNAL (triggered()), this, SLOT (addLandsSubView()));
- setupShortcut("document-world-lands", lands);
- world->addAction (lands);
- QAction *landTextures = new QAction (tr ("Land Textures"), this);
+ QAction *landTextures = createMenuEntry(CSMWorld::UniversalId::Type_LandTextures, world, "document-world-landtextures");
connect (landTextures, SIGNAL (triggered()), this, SLOT (addLandTexturesSubView()));
- setupShortcut("document-world-landtextures", landTextures);
- world->addAction (landTextures);
- QAction *grid = new QAction (tr ("Pathgrid"), this);
+ QAction *grid = createMenuEntry(CSMWorld::UniversalId::Type_Pathgrids, world, "document-world-pathgrid");
connect (grid, SIGNAL (triggered()), this, SLOT (addPathgridSubView()));
- setupShortcut("document-world-pathgrid", grid);
- world->addAction (grid);
world->addSeparator(); // items that don't represent single record lists follow here
- QAction *regionMap = new QAction (tr ("Region Map"), this);
+ QAction *regionMap = createMenuEntry(CSMWorld::UniversalId::Type_RegionMap, world, "document-world-regionmap");
connect (regionMap, SIGNAL (triggered()), this, SLOT (addRegionMapSubView()));
- setupShortcut("document-world-regionmap", regionMap);
- world->addAction (regionMap);
}
void CSVDoc::View::setupMechanicsMenu()
{
QMenu *mechanics = menuBar()->addMenu (tr ("Mechanics"));
- QAction *globals = new QAction (tr ("Globals"), this);
+ QAction* globals = createMenuEntry(CSMWorld::UniversalId::Type_Globals, mechanics, "document-mechanics-globals");
connect (globals, SIGNAL (triggered()), this, SLOT (addGlobalsSubView()));
- setupShortcut("document-mechanics-globals", globals);
- mechanics->addAction (globals);
- QAction *gmsts = new QAction (tr ("Game Settings"), this);
+ QAction* gmsts = createMenuEntry(CSMWorld::UniversalId::Type_Gmsts, mechanics, "document-mechanics-gamesettings");
connect (gmsts, SIGNAL (triggered()), this, SLOT (addGmstsSubView()));
- setupShortcut("document-mechanics-gamesettings", gmsts);
- mechanics->addAction (gmsts);
- QAction *scripts = new QAction (tr ("Scripts"), this);
+ QAction* scripts = createMenuEntry(CSMWorld::UniversalId::Type_Scripts, mechanics, "document-mechanics-scripts");
connect (scripts, SIGNAL (triggered()), this, SLOT (addScriptsSubView()));
- setupShortcut("document-mechanics-scripts", scripts);
- mechanics->addAction (scripts);
- QAction *spells = new QAction (tr ("Spells"), this);
+ QAction* spells = createMenuEntry(CSMWorld::UniversalId::Type_Spells, mechanics, "document-mechanics-spells");
connect (spells, SIGNAL (triggered()), this, SLOT (addSpellsSubView()));
- setupShortcut("document-mechanics-spells", spells);
- mechanics->addAction (spells);
- QAction *enchantments = new QAction (tr ("Enchantments"), this);
+ QAction* enchantments = createMenuEntry(CSMWorld::UniversalId::Type_Enchantments, mechanics, "document-mechanics-enchantments");
connect (enchantments, SIGNAL (triggered()), this, SLOT (addEnchantmentsSubView()));
- setupShortcut("document-mechanics-enchantments", enchantments);
- mechanics->addAction (enchantments);
- QAction *effects = new QAction (tr ("Magic Effects"), this);
- connect (effects, SIGNAL (triggered()), this, SLOT (addMagicEffectsSubView()));
- setupShortcut("document-mechanics-magiceffects", effects);
- mechanics->addAction (effects);
+ QAction* magicEffects = createMenuEntry(CSMWorld::UniversalId::Type_MagicEffects, mechanics, "document-mechanics-magiceffects");
+ connect (magicEffects, SIGNAL (triggered()), this, SLOT (addMagicEffectsSubView()));
- QAction *startScripts = new QAction (tr ("Start Scripts"), this);
+ QAction* startScripts = createMenuEntry(CSMWorld::UniversalId::Type_StartScripts, mechanics, "document-mechanics-startscripts");
connect (startScripts, SIGNAL (triggered()), this, SLOT (addStartScriptsSubView()));
- setupShortcut("document-mechanics-startscripts", startScripts);
- mechanics->addAction (startScripts);
}
void CSVDoc::View::setupCharacterMenu()
{
QMenu *characters = menuBar()->addMenu (tr ("Characters"));
- QAction *skills = new QAction (tr ("Skills"), this);
+ QAction* skills = createMenuEntry(CSMWorld::UniversalId::Type_Skills, characters, "document-character-skills");
connect (skills, SIGNAL (triggered()), this, SLOT (addSkillsSubView()));
- setupShortcut("document-character-skills", skills);
- characters->addAction (skills);
- QAction *classes = new QAction (tr ("Classes"), this);
+ QAction* classes = createMenuEntry(CSMWorld::UniversalId::Type_Classes, characters, "document-character-classes");
connect (classes, SIGNAL (triggered()), this, SLOT (addClassesSubView()));
- setupShortcut("document-character-classes", classes);
- characters->addAction (classes);
- QAction *factions = new QAction (tr ("Factions"), this);
+ QAction* factions = createMenuEntry(CSMWorld::UniversalId::Type_Faction, characters, "document-character-factions");
connect (factions, SIGNAL (triggered()), this, SLOT (addFactionsSubView()));
- setupShortcut("document-character-factions", factions);
- characters->addAction (factions);
- QAction *races = new QAction (tr ("Races"), this);
+ QAction* races = createMenuEntry(CSMWorld::UniversalId::Type_Races, characters, "document-character-races");
connect (races, SIGNAL (triggered()), this, SLOT (addRacesSubView()));
- setupShortcut("document-character-races", races);
- characters->addAction (races);
- QAction *birthsigns = new QAction (tr ("Birthsigns"), this);
+ QAction* birthsigns = createMenuEntry(CSMWorld::UniversalId::Type_Birthsigns, characters, "document-character-birthsigns");
connect (birthsigns, SIGNAL (triggered()), this, SLOT (addBirthsignsSubView()));
- setupShortcut("document-character-birthsigns", birthsigns);
- characters->addAction (birthsigns);
- QAction *topics = new QAction (tr ("Topics"), this);
+ QAction* topics = createMenuEntry(CSMWorld::UniversalId::Type_Topics, characters, "document-character-topics");
connect (topics, SIGNAL (triggered()), this, SLOT (addTopicsSubView()));
- setupShortcut("document-character-topics", topics);
- characters->addAction (topics);
- QAction *journals = new QAction (tr ("Journals"), this);
+ QAction* journals = createMenuEntry(CSMWorld::UniversalId::Type_Journals, characters, "document-character-journals");
connect (journals, SIGNAL (triggered()), this, SLOT (addJournalsSubView()));
- setupShortcut("document-character-journals", journals);
- characters->addAction (journals);
- QAction *topicInfos = new QAction (tr ("Topic Infos"), this);
+ QAction* topicInfos = createMenuEntry(CSMWorld::UniversalId::Type_TopicInfos, characters, "document-character-topicinfos");
connect (topicInfos, SIGNAL (triggered()), this, SLOT (addTopicInfosSubView()));
- setupShortcut("document-character-topicinfos", topicInfos);
- characters->addAction (topicInfos);
- QAction *journalInfos = new QAction (tr ("Journal Infos"), this);
+ QAction* journalInfos = createMenuEntry(CSMWorld::UniversalId::Type_JournalInfos, characters, "document-character-journalinfos");
connect (journalInfos, SIGNAL (triggered()), this, SLOT (addJournalInfosSubView()));
- setupShortcut("document-character-journalinfos", journalInfos);
- characters->addAction (journalInfos);
- QAction *bodyParts = new QAction (tr ("Body Parts"), this);
+ QAction* bodyParts = createMenuEntry(CSMWorld::UniversalId::Type_BodyParts, characters, "document-character-bodyparts");
connect (bodyParts, SIGNAL (triggered()), this, SLOT (addBodyPartsSubView()));
- setupShortcut("document-character-bodyparts", bodyParts);
- characters->addAction (bodyParts);
}
void CSVDoc::View::setupAssetsMenu()
{
QMenu *assets = menuBar()->addMenu (tr ("Assets"));
- QAction *reload = new QAction (tr ("Reload"), this);
+ QAction* reload = createMenuEntry(CSMWorld::UniversalId::Type_Reload, assets, "document-assets-reload");
connect (reload, SIGNAL (triggered()), &mDocument->getData(), SLOT (assetsChanged()));
- setupShortcut("document-assets-reload", reload);
- assets->addAction (reload);
assets->addSeparator();
- QAction *sounds = new QAction (tr ("Sounds"), this);
+ QAction* sounds = createMenuEntry(CSMWorld::UniversalId::Type_Sounds, assets, "document-assets-sounds");
connect (sounds, SIGNAL (triggered()), this, SLOT (addSoundsSubView()));
- setupShortcut("document-assets-sounds", sounds);
- assets->addAction (sounds);
- QAction *soundGens = new QAction (tr ("Sound Generators"), this);
+ QAction* soundGens = createMenuEntry(CSMWorld::UniversalId::Type_SoundGens, assets, "document-assets-soundgens");
connect (soundGens, SIGNAL (triggered()), this, SLOT (addSoundGensSubView()));
- setupShortcut("document-assets-soundgens", soundGens);
- assets->addAction (soundGens);
assets->addSeparator(); // resources follow here
- QAction *meshes = new QAction (tr ("Meshes"), this);
+ QAction* meshes = createMenuEntry(CSMWorld::UniversalId::Type_Meshes, assets, "document-assets-meshes");
connect (meshes, SIGNAL (triggered()), this, SLOT (addMeshesSubView()));
- setupShortcut("document-assets-meshes", meshes);
- assets->addAction (meshes);
- QAction *icons = new QAction (tr ("Icons"), this);
+ QAction* icons = createMenuEntry(CSMWorld::UniversalId::Type_Icons, assets, "document-assets-icons");
connect (icons, SIGNAL (triggered()), this, SLOT (addIconsSubView()));
- setupShortcut("document-assets-icons", icons);
- assets->addAction (icons);
- QAction *musics = new QAction (tr ("Music"), this);
+ QAction* musics = createMenuEntry(CSMWorld::UniversalId::Type_Musics, assets, "document-assets-musics");
connect (musics, SIGNAL (triggered()), this, SLOT (addMusicsSubView()));
- setupShortcut("document-assets-music", musics);
- assets->addAction (musics);
- QAction *soundsRes = new QAction (tr ("Sound Files"), this);
- connect (soundsRes, SIGNAL (triggered()), this, SLOT (addSoundsResSubView()));
- setupShortcut("document-assets-soundres", soundsRes);
- assets->addAction (soundsRes);
+ QAction* soundFiles = createMenuEntry(CSMWorld::UniversalId::Type_SoundsRes, assets, "document-assets-soundres");
+ connect (soundFiles, SIGNAL (triggered()), this, SLOT (addSoundsResSubView()));
- QAction *textures = new QAction (tr ("Textures"), this);
+ QAction* textures = createMenuEntry(CSMWorld::UniversalId::Type_Textures, assets, "document-assets-textures");
connect (textures, SIGNAL (triggered()), this, SLOT (addTexturesSubView()));
- setupShortcut("document-assets-textures", textures);
- assets->addAction (textures);
- QAction *videos = new QAction (tr ("Videos"), this);
+ QAction* videos = createMenuEntry(CSMWorld::UniversalId::Type_Videos, assets, "document-assets-videos");
connect (videos, SIGNAL (triggered()), this, SLOT (addVideosSubView()));
- setupShortcut("document-assets-videos", videos);
- assets->addAction (videos);
}
void CSVDoc::View::setupDebugMenu()
{
QMenu *debug = menuBar()->addMenu (tr ("Debug"));
- QAction *profiles = new QAction (tr ("Debug Profiles"), this);
+ QAction* profiles = createMenuEntry(CSMWorld::UniversalId::Type_DebugProfiles, debug, "document-debug-profiles");
connect (profiles, SIGNAL (triggered()), this, SLOT (addDebugProfilesSubView()));
- debug->addAction (profiles);
debug->addSeparator();
@@ -387,18 +298,31 @@ void CSVDoc::View::setupDebugMenu()
QAction *runDebug = debug->addMenu (mGlobalDebugProfileMenu);
runDebug->setText (tr ("Run OpenMW"));
-
setupShortcut("document-debug-run", runDebug);
+ std::string iconName = CSMWorld::UniversalId (CSMWorld::UniversalId::Type_RunGame).getIcon();
+ if (!iconName.empty() && iconName != ":placeholder")
+ runDebug->setIcon(QIcon(QString::fromStdString(iconName)));
- mStopDebug = new QAction (tr ("Shutdown OpenMW"), this);
- connect (mStopDebug, SIGNAL (triggered()), this, SLOT (stop()));
- setupShortcut("document-debug-shutdown", mStopDebug);
- debug->addAction (mStopDebug);
+ QAction* stopDebug = createMenuEntry(CSMWorld::UniversalId::Type_StopGame, debug, "document-debug-shutdown");
+ connect (stopDebug, SIGNAL (triggered()), this, SLOT (stop()));
+ mStopDebug = stopDebug;
- QAction *runLog = new QAction (tr ("Open Run Log"), this);
+ QAction* runLog = createMenuEntry(CSMWorld::UniversalId::Type_RunLog, debug, "document-debug-runlog");
connect (runLog, SIGNAL (triggered()), this, SLOT (addRunLogSubView()));
- setupShortcut("document-debug-runlog", runLog);
- debug->addAction (runLog);
+}
+
+QAction* CSVDoc::View::createMenuEntry(CSMWorld::UniversalId::Type type, QMenu* menu, const char* shortcutName)
+{
+ const std::string title = CSMWorld::UniversalId (type).getTypeName();
+ QAction *entry = new QAction(QString::fromStdString(title), this);
+ setupShortcut(shortcutName, entry);
+ const std::string iconName = CSMWorld::UniversalId (type).getIcon();
+ if (!iconName.empty() && iconName != ":placeholder")
+ entry->setIcon(QIcon(QString::fromStdString(iconName)));
+
+ menu->addAction (entry);
+
+ return entry;
}
void CSVDoc::View::setupUi()
diff --git a/apps/opencs/view/doc/view.hpp b/apps/opencs/view/doc/view.hpp
index 5418b7720a..e767777d76 100644
--- a/apps/opencs/view/doc/view.hpp
+++ b/apps/opencs/view/doc/view.hpp
@@ -66,6 +66,8 @@ namespace CSVDoc
void closeEvent (QCloseEvent *event);
+ QAction* createMenuEntry(CSMWorld::UniversalId::Type type, QMenu* menu, const char* shortcutName);
+
void setupFileMenu();
void setupEditMenu();
diff --git a/files/opencs/cell.png b/files/opencs/cell.png
index 9127dd5e5c..4c3fbe2515 100644
Binary files a/files/opencs/cell.png and b/files/opencs/cell.png differ
diff --git a/files/opencs/debug-profile.png b/files/opencs/debug-profile.png
new file mode 100644
index 0000000000..ddb01da437
Binary files /dev/null and b/files/opencs/debug-profile.png differ
diff --git a/files/opencs/edit-undo.png b/files/opencs/edit-undo.png
deleted file mode 100644
index 8b0fef9a83..0000000000
Binary files a/files/opencs/edit-undo.png and /dev/null differ
diff --git a/files/opencs/error-log.png b/files/opencs/error-log.png
new file mode 100644
index 0000000000..df698d1453
Binary files /dev/null and b/files/opencs/error-log.png differ
diff --git a/files/opencs/Info.png b/files/opencs/info.png
similarity index 100%
rename from files/opencs/Info.png
rename to files/opencs/info.png
diff --git a/files/opencs/instance.png b/files/opencs/instance.png
new file mode 100644
index 0000000000..ce63e64ed6
Binary files /dev/null and b/files/opencs/instance.png differ
diff --git a/files/opencs/leveled-creature.png b/files/opencs/levelled-creature.png
similarity index 100%
rename from files/opencs/leveled-creature.png
rename to files/opencs/levelled-creature.png
diff --git a/files/opencs/leveled-item.png b/files/opencs/levelled-item.png
similarity index 100%
rename from files/opencs/leveled-item.png
rename to files/opencs/levelled-item.png
diff --git a/files/opencs/magic-effect.png b/files/opencs/magic-effect.png
index 4901724c59..44b682bf4f 100644
Binary files a/files/opencs/magic-effect.png and b/files/opencs/magic-effect.png differ
diff --git a/files/opencs/menu-close.png b/files/opencs/menu-close.png
new file mode 100644
index 0000000000..81bc986775
Binary files /dev/null and b/files/opencs/menu-close.png differ
diff --git a/files/opencs/menu-exit.png b/files/opencs/menu-exit.png
new file mode 100644
index 0000000000..f583536fb6
Binary files /dev/null and b/files/opencs/menu-exit.png differ
diff --git a/files/opencs/menu-merge.png b/files/opencs/menu-merge.png
new file mode 100644
index 0000000000..c76288ae16
Binary files /dev/null and b/files/opencs/menu-merge.png differ
diff --git a/files/opencs/menu-new-addon.png b/files/opencs/menu-new-addon.png
new file mode 100644
index 0000000000..df137b2b20
Binary files /dev/null and b/files/opencs/menu-new-addon.png differ
diff --git a/files/opencs/menu-new-game.png b/files/opencs/menu-new-game.png
new file mode 100644
index 0000000000..701daf34b1
Binary files /dev/null and b/files/opencs/menu-new-game.png differ
diff --git a/files/opencs/menu-new-window.png b/files/opencs/menu-new-window.png
new file mode 100644
index 0000000000..4a42da0d12
Binary files /dev/null and b/files/opencs/menu-new-window.png differ
diff --git a/files/opencs/menu-open.png b/files/opencs/menu-open.png
new file mode 100644
index 0000000000..3766e17549
Binary files /dev/null and b/files/opencs/menu-open.png differ
diff --git a/files/opencs/menu-preferences.png b/files/opencs/menu-preferences.png
new file mode 100644
index 0000000000..4644297ad0
Binary files /dev/null and b/files/opencs/menu-preferences.png differ
diff --git a/files/opencs/menu-redo.png b/files/opencs/menu-redo.png
new file mode 100644
index 0000000000..0cd0eedcae
Binary files /dev/null and b/files/opencs/menu-redo.png differ
diff --git a/files/opencs/menu-reload.png b/files/opencs/menu-reload.png
new file mode 100644
index 0000000000..2b780598c4
Binary files /dev/null and b/files/opencs/menu-reload.png differ
diff --git a/files/opencs/menu-save.png b/files/opencs/menu-save.png
new file mode 100644
index 0000000000..4be88765be
Binary files /dev/null and b/files/opencs/menu-save.png differ
diff --git a/files/opencs/menu-search.png b/files/opencs/menu-search.png
new file mode 100644
index 0000000000..1ec63f0e82
Binary files /dev/null and b/files/opencs/menu-search.png differ
diff --git a/files/opencs/menu-status-bar.png b/files/opencs/menu-status-bar.png
new file mode 100644
index 0000000000..dfb72b1e13
Binary files /dev/null and b/files/opencs/menu-status-bar.png differ
diff --git a/files/opencs/menu-undo.png b/files/opencs/menu-undo.png
new file mode 100644
index 0000000000..bd177ce65a
Binary files /dev/null and b/files/opencs/menu-undo.png differ
diff --git a/files/opencs/menu-verify.png b/files/opencs/menu-verify.png
new file mode 100644
index 0000000000..a7878ebb3f
Binary files /dev/null and b/files/opencs/menu-verify.png differ
diff --git a/files/opencs/metadata.png b/files/opencs/metadata.png
new file mode 100644
index 0000000000..34c78ffd61
Binary files /dev/null and b/files/opencs/metadata.png differ
diff --git a/files/opencs/object.png b/files/opencs/object.png
new file mode 100644
index 0000000000..4f552151db
Binary files /dev/null and b/files/opencs/object.png differ
diff --git a/files/opencs/placeholder.png b/files/opencs/placeholder.png
index 1d3df3c47d..b9db9f1888 100644
Binary files a/files/opencs/placeholder.png and b/files/opencs/placeholder.png differ
diff --git a/files/opencs/region-map.png b/files/opencs/region-map.png
new file mode 100644
index 0000000000..7631847bee
Binary files /dev/null and b/files/opencs/region-map.png differ
diff --git a/files/opencs/region.png b/files/opencs/region.png
index a100892437..2ebaeb0285 100644
Binary files a/files/opencs/region.png and b/files/opencs/region.png differ
diff --git a/files/opencs/resources.qrc b/files/opencs/resources.qrc
index 0afd855f92..93b47dbdda 100644
--- a/files/opencs/resources.qrc
+++ b/files/opencs/resources.qrc
@@ -15,6 +15,7 @@
clothing.png
container.png
creature.png
+ debug-profile.png
dialogue-info.png
dialogue-journal.png
dialogue-regular.png
@@ -27,34 +28,60 @@
journal-topics.png
door.png
enchantment.png
+ error-log.png
faction.png
filter.png
global-variable.png
gmst.png
- Info.png
+ info.png
ingredient.png
+ instance.png
land-heightmap.png
land-texture.png
- leveled-creature.png
- leveled-item.png
+ levelled-creature.png
+ levelled-item.png
light.png
lockpick.png
magic-effect.png
magicrabbit.png
map.png
+ probe.png
+ menu-close.png
+ menu-exit.png
+ menu-new-addon.png
+ menu-new-game.png
+ menu-new-window.png
+ menu-merge.png
+ menu-open.png
+ menu-preferences.png
+ menu-reload.png
+ menu-redo.png
+ menu-save.png
+ menu-search.png
+ menu-status-bar.png
+ menu-undo.png
+ menu-verify.png
+ metadata.png
miscellaneous.png
list-modified.png
npc.png
+ object.png
pathgrid.png
potion.png
- probe.png
race.png
random-item.png
random.png
list-removed.png
+ region.png
+ region-map.png
repair.png
+ run-log.png
+ run-openmw.png
+ scene.png
script.png
skill.png
+ start-script.png
+ stop-openmw.png
sound-generator.png
sound.png
spell.png
@@ -64,7 +91,6 @@
record-next.png
record-previous.png
record-delete.png
- record-revert.png
record-preview.png
record-clone.png
record-add.png
diff --git a/files/opencs/run-log.png b/files/opencs/run-log.png
new file mode 100644
index 0000000000..463ead176d
Binary files /dev/null and b/files/opencs/run-log.png differ
diff --git a/files/opencs/run-openmw.png b/files/opencs/run-openmw.png
new file mode 100644
index 0000000000..1033d62baa
Binary files /dev/null and b/files/opencs/run-openmw.png differ
diff --git a/files/opencs/scene.png b/files/opencs/scene.png
new file mode 100644
index 0000000000..a9fc03f769
Binary files /dev/null and b/files/opencs/scene.png differ
diff --git a/files/opencs/start-script.png b/files/opencs/start-script.png
new file mode 100644
index 0000000000..73ed157b9e
Binary files /dev/null and b/files/opencs/start-script.png differ
diff --git a/files/opencs/stop-openmw.png b/files/opencs/stop-openmw.png
new file mode 100644
index 0000000000..d8f8096724
Binary files /dev/null and b/files/opencs/stop-openmw.png differ