diff --git a/binaries/data/mods/public/gui/page_session_new.xml b/binaries/data/mods/public/gui/page_session_new.xml
index a3ee3cb3a1..b89f45a0c7 100644
--- a/binaries/data/mods/public/gui/page_session_new.xml
+++ b/binaries/data/mods/public/gui/page_session_new.xml
@@ -4,6 +4,8 @@
common/styles.xml
common/sprite1.xml
common/init.xml
+ session_new/sprites.xml
+ session_new/styles.xml
session_new/session.xml
common/global.xml
diff --git a/binaries/data/mods/public/gui/session_new/session.js b/binaries/data/mods/public/gui/session_new/session.js
index 7c588f425d..3c4f8cbc85 100644
--- a/binaries/data/mods/public/gui/session_new/session.js
+++ b/binaries/data/mods/public/gui/session_new/session.js
@@ -7,47 +7,61 @@ function onSimulationUpdate()
{
updateDebug();
- updateBuildButton();
+ updateUnitDisplay();
}
function updateDebug()
{
var debug = getGUIObjectByName("debug");
var simState = Engine.GuiInterfaceCall("GetSimulationState");
- var text = "Simulation:\n" + uneval(simState);
- text += "\n\n";
- for (var ent in g_Selection)
- {
- var entState = Engine.GuiInterfaceCall("GetEntityState", ent);
- text += "Entity "+ent+":\n" + uneval(entState);
- text += "\n\n";
- text += "Template:\n" + uneval(Engine.GuiInterfaceCall("GetTemplateData", entState.template));
- }
+ var text = uneval(simState);
debug.caption = text;
}
-function updateBuildButton()
+function updateUnitDisplay()
{
+ var detailsPanel = getGUIObjectByName("unitDetails");
+ var commandsPanel = getGUIObjectByName("unitCommands");
+
var selection = getEntitySelection();
- if (selection.length)
+ if (selection.length == 0)
{
- var entity = Engine.GuiInterfaceCall("GetEntityState", selection[0]);
- if (entity.buildEntities && entity.buildEntities.length)
- {
- var ent = entity.buildEntities[0];
- var template = Engine.GuiInterfaceCall("GetTemplateData", ent);
-
- var name;
- if (template.name.specific && template.name.generic)
- name = template.name.specific + " (" + template.name.generic + ")";
- else
- name = template.name.specific || template.name.generic;
-
- getGUIObjectByName("testBuild").caption = "Construct "+name;
- getGUIObjectByName("testBuild").onpress = function() { testBuild(ent) };
- getGUIObjectByName("testBuild").hidden = false;
- return;
- }
+ detailsPanel.hidden = true;
+ commandsPanel.hidden = true;
+ return;
}
- getGUIObjectByName("testBuild").hidden = true;
+
+ var entState = Engine.GuiInterfaceCall("GetEntityState", selection[0]);
+ var template = Engine.GuiInterfaceCall("GetTemplateData", entState.template);
+
+ detailsPanel.hidden = false;
+ detailsPanel.caption = uneval(entState)+"\n\n"+uneval(template);
+
+ commandsPanel.hidden = false;
+
+ var i = 0;
+ for each (var build in entState.buildEntities)
+ {
+ var button = getGUIObjectByName("cButton"+i);
+ var icon = getGUIObjectByName("cIcon"+i);
+
+ var template = Engine.GuiInterfaceCall("GetTemplateData", build);
+
+ var name;
+ if (template.name.specific && template.name.generic)
+ name = template.name.specific + " (" + template.name.generic + ")";
+ else
+ name = template.name.specific || template.name.generic || "???";
+
+ button.hidden = false;
+ button.tooltip = "Construct " + name;
+ button.onpress = (function(b) { return function() { testBuild(b) } })(build);
+ // (need nested functions to get the closure right)
+
+ icon.sprite = "snPortraitSheetHele";
+ icon.cell_id = template.name.icon_cell;
+ ++i;
+ }
+ for (; i < 8; ++i)
+ getGUIObjectByName("cButton"+i).hidden = true;
}
diff --git a/binaries/data/mods/public/gui/session_new/session.xml b/binaries/data/mods/public/gui/session_new/session.xml
index 626fb31398..00cf2fb3c6 100644
--- a/binaries/data/mods/public/gui/session_new/session.xml
+++ b/binaries/data/mods/public/gui/session_new/session.xml
@@ -39,15 +39,6 @@
this.hidden = !this.hidden;
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
- [default debug text]
diff --git a/binaries/data/mods/public/gui/session_new/sprites.xml b/binaries/data/mods/public/gui/session_new/sprites.xml
new file mode 100644
index 0000000000..3ad149cb65
--- /dev/null
+++ b/binaries/data/mods/public/gui/session_new/sprites.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/binaries/data/mods/public/gui/session_new/styles.xml b/binaries/data/mods/public/gui/session_new/styles.xml
new file mode 100644
index 0000000000..196a8b7198
--- /dev/null
+++ b/binaries/data/mods/public/gui/session_new/styles.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js
index 55afebba2c..515d3219b0 100644
--- a/binaries/data/mods/public/simulation/components/GuiInterface.js
+++ b/binaries/data/mods/public/simulation/components/GuiInterface.js
@@ -58,7 +58,8 @@ GuiInterface.prototype.GetTemplateData = function(player, name)
{
ret.name = {
"specific": template.Identity.SpecificName,
- "generic": template.Identity.GenericName
+ "generic": template.Identity.GenericName,
+ "icon_cell": template.Identity.IconCell
};
}
diff --git a/source/gui/GUIutil.cpp b/source/gui/GUIutil.cpp
index 5afdec0462..00f62ecf70 100644
--- a/source/gui/GUIutil.cpp
+++ b/source/gui/GUIutil.cpp
@@ -341,6 +341,18 @@ PSRETURN GUI::GetSetting(const IGUIObject *pObject, const CStr& Setting, T &V
return ret;
}
+// Helper function for SetSetting
+template
+bool IsBoolTrue(const T&)
+{
+ return false;
+}
+template <>
+bool IsBoolTrue(const bool& v)
+{
+ return v;
+}
+
template
PSRETURN GUI::SetSetting(IGUIObject *pObject, const CStr& Setting,
const T &Value, const bool& SkipMessage)
@@ -375,8 +387,8 @@ PSRETURN GUI::SetSetting(IGUIObject *pObject, const CStr& Setting,
if (Setting == "hidden")
{
// Hiding an object requires us to reset it and all children
- QueryResetting(pObject);
- //RecurseObject(0, pObject, IGUIObject::ResetStates);
+ if (IsBoolTrue(Value))
+ QueryResetting(pObject);
}
if (!SkipMessage)
diff --git a/source/gui/GUIutil.h b/source/gui/GUIutil.h
index 44642ca866..6cbe0e24c7 100644
--- a/source/gui/GUIutil.h
+++ b/source/gui/GUIutil.h
@@ -201,7 +201,6 @@ public:
const CGUISpriteInstance& prim,
const CGUISpriteInstance& sec)
{
- // CStr() == empty string, null
return (prim.IsEmpty() ? sec : prim);
}
@@ -223,14 +222,14 @@ public:
* Sets a value by setting and object name using a real
* datatype as input.
*
- * This is just a wrapper for _mem_ParseString() which really
+ * This is just a wrapper for __ParseString() which really
* works the magic.
*
* @param Value The value in string form, like "0 0 100% 100%"
* @param tOutput Parsed value of type T
* @return True at success.
*
- * @see _mem_ParseString()
+ * @see __ParseString()
*/
static bool ParseString(const CStr& Value, T &tOutput)
{
diff --git a/source/gui/IGUIObject.cpp b/source/gui/IGUIObject.cpp
index 153ed61054..4c3445830e 100644
--- a/source/gui/IGUIObject.cpp
+++ b/source/gui/IGUIObject.cpp
@@ -64,9 +64,6 @@ IGUIObject::IGUIObject() :
for (int i=0; i<6; i++)
m_LastClickTime[i]=0;
- bool hidden=true;
-
- GUI::GetSetting(this, "hidden", hidden);
}
IGUIObject::~IGUIObject()