diff --git a/binaries/data/mods/public/gui/session/diplomacy_window.xml b/binaries/data/mods/public/gui/session/diplomacy_window.xml
index 01f60aa027..9dcc1ddf95 100644
--- a/binaries/data/mods/public/gui/session/diplomacy_window.xml
+++ b/binaries/data/mods/public/gui/session/diplomacy_window.xml
@@ -1,78 +1,76 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Close
+ closeDiplomacy();
+
+
diff --git a/binaries/data/mods/public/gui/session/hotkeys/camera.xml b/binaries/data/mods/public/gui/session/hotkeys/camera.xml
new file mode 100644
index 0000000000..a183c201c7
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/hotkeys/camera.xml
@@ -0,0 +1,88 @@
+
+
+
+
+ setCameraFollow(g_Selection.toList()[0]);
+
+
+
+
+ jumpCamera(1);
+
+
+
+ jumpCamera(2);
+
+
+
+ jumpCamera(3);
+
+
+
+ jumpCamera(4);
+
+
+
+ jumpCamera(5);
+
+
+
+ jumpCamera(6);
+
+
+
+ jumpCamera(7);
+
+
+
+ jumpCamera(8);
+
+
+
+ jumpCamera(9);
+
+
+
+ jumpCamera(10);
+
+
+
+ setJumpCamera(1);
+
+
+
+ setJumpCamera(2);
+
+
+
+ setJumpCamera(3);
+
+
+
+ setJumpCamera(4);
+
+
+
+ setJumpCamera(5);
+
+
+
+ setJumpCamera(6);
+
+
+
+ setJumpCamera(7);
+
+
+
+ setJumpCamera(8);
+
+
+
+ setJumpCamera(9);
+
+
+
+ setJumpCamera(10);
+
+
diff --git a/binaries/data/mods/public/gui/session/hotkeys/misc.xml b/binaries/data/mods/public/gui/session/hotkeys/misc.xml
new file mode 100644
index 0000000000..308667bb62
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/hotkeys/misc.xml
@@ -0,0 +1,70 @@
+
+
+
+ closeOpenDialogs();
+
+
+
+
+ toggleChatWindow();
+
+
+
+
+ toggleChatWindow(true);
+
+
+
+
+ openMenu();
+
+
+
+
+
+ var newSetting = !Engine.Renderer_GetSilhouettesEnabled();
+ Engine.Renderer_SetSilhouettesEnabled(newSetting);
+
+
+
+
+
+
+ var newSetting = !Engine.Renderer_GetShowSkyEnabled();
+ Engine.Renderer_SetShowSkyEnabled(newSetting);
+
+
+
+
+
+ togglePause();
+
+
+
+
+ Engine.QuickSave();
+
+
+ Engine.QuickLoad();
+
+
+
+
+ performCommand(g_Selection.toList()[0], "delete");
+
+
+
+
+ stopUnits(g_Selection.toList());
+
+
+
+
+ findIdleUnit(["Hero", "Champion", "CitizenSoldier", "Siege", "Warship", "Dog"]);
+
+
+
+
+ clearSelection()
+
+
diff --git a/binaries/data/mods/public/gui/session/hotkeys/training.xml b/binaries/data/mods/public/gui/session/hotkeys/training.xml
new file mode 100644
index 0000000000..76e995ab9d
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/hotkeys/training.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ addTrainingByPosition(0);
+
+
+
+
+ addTrainingByPosition(1);
+
+
+
+
+ addTrainingByPosition(2);
+
+
+
+
+ addTrainingByPosition(3);
+
+
+
+
+ addTrainingByPosition(4);
+
+
+
+
+ addTrainingByPosition(5);
+
+
+
+
+ addTrainingByPosition(6);
+
+
diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml
index 3e97c5b96b..b090eaccb3 100644
--- a/binaries/data/mods/public/gui/session/session.xml
+++ b/binaries/data/mods/public/gui/session/session.xml
@@ -28,194 +28,8 @@
-
- closeOpenDialogs();
-
-
-
-
- toggleChatWindow();
-
-
-
-
- toggleChatWindow(true);
-
-
-
-
- openMenu();
-
-
-
-
-
- var newSetting = !Engine.Renderer_GetSilhouettesEnabled();
- Engine.Renderer_SetSilhouettesEnabled(newSetting);
-
-
-
-
-
-
- var newSetting = !Engine.Renderer_GetShowSkyEnabled();
- Engine.Renderer_SetShowSkyEnabled(newSetting);
-
-
-
-
-
- togglePause();
-
-
-
-
- Engine.QuickSave();
-
-
- Engine.QuickLoad();
-
-
-
-
- performCommand(g_Selection.toList()[0], "delete");
-
-
-
-
- setCameraFollow(g_Selection.toList()[0]);
-
-
-
-
- jumpCamera(1);
-
-
-
- jumpCamera(2);
-
-
-
- jumpCamera(3);
-
-
-
- jumpCamera(4);
-
-
-
- jumpCamera(5);
-
-
-
- jumpCamera(6);
-
-
-
- jumpCamera(7);
-
-
-
- jumpCamera(8);
-
-
-
- jumpCamera(9);
-
-
-
- jumpCamera(10);
-
-
-
- setJumpCamera(1);
-
-
-
- setJumpCamera(2);
-
-
-
- setJumpCamera(3);
-
-
-
- setJumpCamera(4);
-
-
-
- setJumpCamera(5);
-
-
-
- setJumpCamera(6);
-
-
-
- setJumpCamera(7);
-
-
-
- setJumpCamera(8);
-
-
-
- setJumpCamera(9);
-
-
-
- setJumpCamera(10);
-
-
-
-
- stopUnits(g_Selection.toList());
-
-
-
-
- addTrainingByPosition(0);
-
-
-
-
- addTrainingByPosition(1);
-
-
-
-
- addTrainingByPosition(2);
-
-
-
-
- addTrainingByPosition(3);
-
-
-
-
- addTrainingByPosition(4);
-
-
-
-
- addTrainingByPosition(5);
-
-
-
-
- addTrainingByPosition(6);
-
-
-
-
- findIdleUnit(["Hero", "Champion", "CitizenSoldier", "Siege", "Warship", "Dog"]);
-
-
-
-
- clearSelection()
-
+
+
@@ -410,223 +224,12 @@
-
-
- Trade
-
-
-
-
-
- Trading goods selection:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Select one goods as origin of the changes, then use the arrows of the target goods to make the changes (using Shift to select will put the selected resource to 100%).
-
-
-
-
-
-
-
-
-
-
-
- Close
- closeTrade();
-
-
-
+
+
-
-
-
-
-
-
-
- Food
-
-
-
-
-
-
- Wood
-
-
-
-
-
-
- Stone
-
-
-
-
-
-
- Metal
-
-
-
-
-
-
- Population (current / limit)
-
-
-
-
-
-
-
-
-
-
-
-
- Choose player to view
- selectViewPlayer(this.selected);
-
-
-
-
-
-
-
-
-
-
-
- Observer Mode (experimental)
-
-
-
-
-
-
-
-
-
-
-
- ALPHA XVI : PataƱjali
-
-
-
- this.caption = getBuildString()
-
-
-
-
-
-
-
- Game speed
-
-
- toggleGameSpeed();
-
-
-
-
- Choose game speed
-
-
-
-
-
-
- Diplomacy
-
-
-
- toggleDiplomacy();
-
-
-
-
-
-
-
-
-
- Trade
-
- toggleTrade();
-
-
-
-
-
-
-
-
-
-
-
- MENU
-
-
- toggleMenu();
-
-
-
+
diff --git a/binaries/data/mods/public/gui/session/top_panel.xml b/binaries/data/mods/public/gui/session/top_panel.xml
new file mode 100644
index 0000000000..f66a8e83f6
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Choose player to view
+ selectViewPlayer(this.selected);
+
+
+
+
+
+
+ Observer Mode (experimental)
+
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/button_diplomacy.xml b/binaries/data/mods/public/gui/session/top_panel/button_diplomacy.xml
new file mode 100644
index 0000000000..c183d4f7ad
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/button_diplomacy.xml
@@ -0,0 +1,16 @@
+
+
+ Diplomacy
+
+
+
+ toggleDiplomacy();
+
+
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/button_game_speed.xml b/binaries/data/mods/public/gui/session/top_panel/button_game_speed.xml
new file mode 100644
index 0000000000..cc71a4b06f
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/button_game_speed.xml
@@ -0,0 +1,19 @@
+
+
+
+ Game speed
+
+
+ toggleGameSpeed();
+
+
+
+
+ Choose game speed
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/button_menu.xml b/binaries/data/mods/public/gui/session/top_panel/button_menu.xml
new file mode 100644
index 0000000000..e3a7681a78
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/button_menu.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ MENU
+
+
+ toggleMenu();
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/button_trade.xml b/binaries/data/mods/public/gui/session/top_panel/button_trade.xml
new file mode 100644
index 0000000000..ac5a25beed
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/button_trade.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ Trade
+
+ toggleTrade();
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/civ_icon.xml b/binaries/data/mods/public/gui/session/top_panel/civ_icon.xml
new file mode 100644
index 0000000000..f255cfa82e
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/civ_icon.xml
@@ -0,0 +1,2 @@
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/label.xml b/binaries/data/mods/public/gui/session/top_panel/label.xml
new file mode 100644
index 0000000000..0b7e0d372d
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/label.xml
@@ -0,0 +1,10 @@
+
+
+
+ ALPHA XVI : PataƱjali
+
+
+
+ this.caption = getBuildString()
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/resource_food.xml b/binaries/data/mods/public/gui/session/top_panel/resource_food.xml
new file mode 100644
index 0000000000..c3f49a4688
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/resource_food.xml
@@ -0,0 +1,6 @@
+
+
+ Food
+
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/resource_metal.xml b/binaries/data/mods/public/gui/session/top_panel/resource_metal.xml
new file mode 100644
index 0000000000..8dc01ecc93
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/resource_metal.xml
@@ -0,0 +1,6 @@
+
+
+ Metal
+
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/resource_population.xml b/binaries/data/mods/public/gui/session/top_panel/resource_population.xml
new file mode 100644
index 0000000000..976d35cbe2
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/resource_population.xml
@@ -0,0 +1,6 @@
+
+
+ Population (current / limit)
+
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/resource_stone.xml b/binaries/data/mods/public/gui/session/top_panel/resource_stone.xml
new file mode 100644
index 0000000000..37d08e39e9
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/resource_stone.xml
@@ -0,0 +1,6 @@
+
+
+ Stone
+
+
+
diff --git a/binaries/data/mods/public/gui/session/top_panel/resource_wood.xml b/binaries/data/mods/public/gui/session/top_panel/resource_wood.xml
new file mode 100644
index 0000000000..90558afb3b
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/top_panel/resource_wood.xml
@@ -0,0 +1,6 @@
+
+
+ Wood
+
+
+
diff --git a/binaries/data/mods/public/gui/session/trade_window.xml b/binaries/data/mods/public/gui/session/trade_window.xml
new file mode 100644
index 0000000000..fad956a01e
--- /dev/null
+++ b/binaries/data/mods/public/gui/session/trade_window.xml
@@ -0,0 +1,51 @@
+
+
+
+ Trade
+
+
+
+
+
+ Trading goods selection:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select one goods as origin of the changes, then use the arrows of the target goods to make the changes (using Shift to select will put the selected resource to 100%).
+
+
+
+
+
+
+
+
+
+
+
+ Close
+ closeTrade();
+
+
+
diff --git a/source/gui/CGUI.cpp b/source/gui/CGUI.cpp
index 73f9bcfcb9..be8af9c84e 100644
--- a/source/gui/CGUI.cpp
+++ b/source/gui/CGUI.cpp
@@ -1110,6 +1110,7 @@ void CGUI::Xeromyces_ReadObject(XMBElement Element, CXeromyces* pFile, IGUIObjec
ATTR(z);
ATTR(on);
ATTR(file);
+ ATTR(directory);
ATTR(id);
ATTR(context);
@@ -1340,39 +1341,57 @@ void CGUI::Xeromyces_ReadObject(XMBElement Element, CXeromyces* pFile, IGUIObjec
else if (element_name == elmt_include)
{
CStrW filename(child.GetAttributes().GetNamedItem(attr_file).FromUTF8());
- if (filename.empty())
+ CStrW directory(child.GetAttributes().GetNamedItem(attr_directory).FromUTF8());
+ if (!filename.empty())
{
- LOGERROR(L"GUI: 'include' XML element with empty 'file' XML attribute found. (object %hs)", object->GetPresentableName().c_str());
- continue;
- }
- Paths.insert(filename);
+ if (!directory.empty())
+ LOGWARNING(L"GUI: Include element found with file name (%ls) and directory name (%ls). Only the file will be processed.", filename.c_str(), directory.c_str());
- CXeromyces XeroChildren;
- if (XeroChildren.Load(g_VFS, filename) != PSRETURN_OK)
- {
- LOGERROR(L"GUI: Error reading included XML: '%ls'", filename.c_str());
- continue;
- }
+ Paths.insert(filename);
- XMBElement node = XeroChildren.GetRoot();
- if (node.GetNodeName() != XeroChildren.GetElementID("objects"))
- {
- LOGERROR(L"GUI: Error reading included XML: '%ls', root element must have the name 'objects'.", filename.c_str());
- continue;
- }
-
- XMBElementList include_children = node.GetChildNodes();
- // Call this function on the child
- for (int j = 0; j < include_children.Count; ++j)
- {
- XMBElement child2 = include_children.Item(j);
- if (child2.GetNodeName() != XeroChildren.GetElementID("object"))
+ CXeromyces XeroIncluded;
+ if (XeroIncluded.Load(g_VFS, filename) != PSRETURN_OK)
{
- LOGWARNING(L"GUI: Warning reading included XML: '%ls', all direct childs of an included XML must have the name 'object'.", filename.c_str());
+ LOGERROR(L"GUI: Error reading included XML: '%ls'", filename.c_str());
continue;
}
- Xeromyces_ReadObject(child2, &XeroChildren, object, NameSubst, Paths, nesting_depth+1);
+
+ XMBElement node = XeroIncluded.GetRoot();
+ if (node.GetNodeName() != XeroIncluded.GetElementID("object"))
+ {
+ LOGERROR(L"GUI: Error reading included XML: '%ls', root element must have be of type 'object'.", filename.c_str());
+ continue;
+ }
+ Xeromyces_ReadObject(node, &XeroIncluded, object, NameSubst, Paths, nesting_depth+1);
}
+ else if (!directory.empty())
+ {
+ VfsPaths pathnames;
+ vfs::GetPathnames(g_VFS, directory, L"*.xml", pathnames);
+ for (VfsPaths::iterator it = pathnames.begin(); it != pathnames.end(); ++it)
+ {
+ // as opposed to loading scripts, don't care if it's loaded before
+ // one might use the same parts of the GUI in different situations
+ Paths.insert(*it);
+ CXeromyces XeroIncluded;
+ if (XeroIncluded.Load(g_VFS, *it) != PSRETURN_OK)
+ {
+ LOGERROR(L"GUI: Error reading included XML: '%ls'", (*it).string().c_str());
+ continue;
+ }
+
+ XMBElement node = XeroIncluded.GetRoot();
+ if (node.GetNodeName() != XeroIncluded.GetElementID("object"))
+ {
+ LOGERROR(L"GUI: Error reading included XML: '%ls', root element must have be of type 'object'.", (*it).string().c_str());
+ continue;
+ }
+ Xeromyces_ReadObject(node, &XeroIncluded, object, NameSubst, Paths, nesting_depth+1);
+ }
+
+ }
+ else
+ LOGERROR(L"GUI: 'include' XML element must have valid 'file' or 'directory' attribute found. (object %hs)", object->GetPresentableName().c_str());
}
else
{
@@ -1486,7 +1505,7 @@ void CGUI::Xeromyces_ReadScript(XMBElement Element, CXeromyces* pFile, boost::un
}
catch (PSERROR_Scripting& e)
{
- LOGERROR(L"GUI: Error executing script %ls: %hs", directory.c_str(), e.what());
+ LOGERROR(L"GUI: Error executing script %ls: %hs", (*it).string().c_str(), e.what());
}
}
}