1
0
forked from 0ad/0ad

Make hotkeys and top panel fully moddable by splitting up the xml file. Allow entire directories to be loaded via an 'include' to provide extra moddability (modders don't have to edit any files, they can just add new ones).

This was SVN commit r15380.
This commit is contained in:
sanderd17 2014-06-17 13:03:55 +00:00
parent 8c547a3fad
commit 02fd235bbd
19 changed files with 506 additions and 500 deletions

View File

@ -1,78 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<objects>
<object name="diplomacyDialogPanel"
size="50%-300 50%-200 50%+300 50%+150"
type="image"
hidden="true"
sprite="ModernDialog"
>
<object type="text" style="TitleText" size="50%-96 -16 50%+96 16">
<translatableAttribute id="caption">Diplomacy</translatableAttribute>
<object name="diplomacyDialogPanel"
size="50%-300 50%-200 50%+300 50%+150"
type="image"
hidden="true"
sprite="ModernDialog"
>
<object type="text" style="TitleText" size="50%-96 -16 50%+96 16">
<translatableAttribute id="caption">Diplomacy</translatableAttribute>
</object>
<object name="diplomacyHeader" size="32 32 100%-32 64">
<object name="diplomacyHeaderName" size="0 0 150 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Name</translatableAttribute>
</object>
<object name="diplomacyHeader" size="32 32 100%-32 64">
<object name="diplomacyHeaderName" size="0 0 150 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Name</translatableAttribute>
</object>
<object name="diplomacyHeaderCiv" size="150 0 250 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Civilization</translatableAttribute>
</object>
<object name="diplomacyHeaderTeam" size="250 0 300 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Team</translatableAttribute>
</object>
<object name="diplomacyHeaderTheirs" size="300 0 360 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Theirs</translatableAttribute>
</object>
<object name="diplomacyHeaderAlly" size="100%-180 0 100%-160 100%" type="text" style="chatPanel" tooltip_style="sessionToolTipBold">
<translatableAttribute id="caption">A</translatableAttribute>
<translatableAttribute id="tooltip">Ally</translatableAttribute>
</object>
<object name="diplomacyHeaderNeutral" size="100%-160 0 100%-140 100%" type="text" style="chatPanel" tooltip_style="sessionToolTipBold">
<translatableAttribute id="caption">N</translatableAttribute>
<translatableAttribute id="tooltip">Neutral</translatableAttribute>
</object>
<object name="diplomacyHeaderEnemy" size="100%-140 0 100%-120 100%" type="text" style="chatPanel" tooltip_style="sessionToolTipBold">
<translatableAttribute id="caption">E</translatableAttribute>
<translatableAttribute id="tooltip">Enemy</translatableAttribute>
</object>
<object name="diplomacyHeaderTribute" size="100%-110 0 100% 100%" type="text" style="chatPanel">
<translatableAttribute id="caption">Tribute</translatableAttribute>
</object>
<object name="diplomacyHeaderCiv" size="150 0 250 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Civilization</translatableAttribute>
</object>
<object size="32 64 100%-32 384">
<repeat count="16">
<object name="diplomacyPlayer[n]" size="0 0 100% 20" type="image" hidden="false">
<object name="diplomacyPlayerName[n]" size="0 0 150 100%" type="text" style="chatPanel" ghost="true"/>
<object name="diplomacyPlayerCiv[n]" size="150 0 250 100%" type="text" style="chatPanel" ghost="true"/>
<object name="diplomacyPlayerTeam[n]" size="250 0 300 100%" type="text" style="chatPanel" ghost="true"/>
<object name="diplomacyPlayerTheirs[n]" size="300 0 360 100%" type="text" style="chatPanel" ghost="true"/>
<!-- Diplomatic stance - selection -->
<object name="diplomacyPlayerAlly[n]" size="100%-180 0 100%-160 100%" type="button" style="StoneButton" hidden="true"/>
<object name="diplomacyPlayerNeutral[n]" size="100%-160 0 100%-140 100%" type="button" style="StoneButton" hidden="true"/>
<object name="diplomacyPlayerEnemy[n]" size="100%-140 0 100%-120 100%" type="button" style="StoneButton" hidden="true"/>
<!-- Tribute -->
<object name="diplomacyPlayerTributeFood[n]" size="100%-110 0 100%-90 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeFoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/food.png" ghost="true"/>
</object>
<object name="diplomacyPlayerTributeWood[n]" size="100%-90 0 100%-70 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeWoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/wood.png" ghost="true"/>
</object>
<object name="diplomacyPlayerTributeStone[n]" size="100%-70 0 100%-50 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeStoneImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/stone.png" ghost="true"/>
</object>
<object name="diplomacyPlayerTributeMetal[n]" size="100%-50 0 100%-30 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeMetalImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/metal.png" ghost="true"/>
</object>
</object>
</repeat>
<object name="diplomacyHeaderTeam" size="250 0 300 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Team</translatableAttribute>
</object>
<object size="50%-64 100%-50 50%+64 100%-22" type="button" style="StoneButton">
<translatableAttribute id="caption">Close</translatableAttribute>
<action on="Press">closeDiplomacy();</action>
<object name="diplomacyHeaderTheirs" size="300 0 360 100%" type="text" style="chatPanel" ghost="true">
<translatableAttribute id="caption">Theirs</translatableAttribute>
</object>
<object name="diplomacyHeaderAlly" size="100%-180 0 100%-160 100%" type="text" style="chatPanel" tooltip_style="sessionToolTipBold">
<translatableAttribute id="caption">A</translatableAttribute>
<translatableAttribute id="tooltip">Ally</translatableAttribute>
</object>
<object name="diplomacyHeaderNeutral" size="100%-160 0 100%-140 100%" type="text" style="chatPanel" tooltip_style="sessionToolTipBold">
<translatableAttribute id="caption">N</translatableAttribute>
<translatableAttribute id="tooltip">Neutral</translatableAttribute>
</object>
<object name="diplomacyHeaderEnemy" size="100%-140 0 100%-120 100%" type="text" style="chatPanel" tooltip_style="sessionToolTipBold">
<translatableAttribute id="caption">E</translatableAttribute>
<translatableAttribute id="tooltip">Enemy</translatableAttribute>
</object>
<object name="diplomacyHeaderTribute" size="100%-110 0 100% 100%" type="text" style="chatPanel">
<translatableAttribute id="caption">Tribute</translatableAttribute>
</object>
</object>
</objects>
<object size="32 64 100%-32 384">
<repeat count="16">
<object name="diplomacyPlayer[n]" size="0 0 100% 20" type="image" hidden="false">
<object name="diplomacyPlayerName[n]" size="0 0 150 100%" type="text" style="chatPanel" ghost="true"/>
<object name="diplomacyPlayerCiv[n]" size="150 0 250 100%" type="text" style="chatPanel" ghost="true"/>
<object name="diplomacyPlayerTeam[n]" size="250 0 300 100%" type="text" style="chatPanel" ghost="true"/>
<object name="diplomacyPlayerTheirs[n]" size="300 0 360 100%" type="text" style="chatPanel" ghost="true"/>
<!-- Diplomatic stance - selection -->
<object name="diplomacyPlayerAlly[n]" size="100%-180 0 100%-160 100%" type="button" style="StoneButton" hidden="true"/>
<object name="diplomacyPlayerNeutral[n]" size="100%-160 0 100%-140 100%" type="button" style="StoneButton" hidden="true"/>
<object name="diplomacyPlayerEnemy[n]" size="100%-140 0 100%-120 100%" type="button" style="StoneButton" hidden="true"/>
<!-- Tribute -->
<object name="diplomacyPlayerTributeFood[n]" size="100%-110 0 100%-90 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeFoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/food.png" ghost="true"/>
</object>
<object name="diplomacyPlayerTributeWood[n]" size="100%-90 0 100%-70 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeWoodImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/wood.png" ghost="true"/>
</object>
<object name="diplomacyPlayerTributeStone[n]" size="100%-70 0 100%-50 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeStoneImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/stone.png" ghost="true"/>
</object>
<object name="diplomacyPlayerTributeMetal[n]" size="100%-50 0 100%-30 100%" type="button" style="iconButton" tooltip_style="sessionToolTipBold" hidden="true">
<object name="diplomacyPlayerTributeMetalImage[n]" type="image" size="0 0 100% 100%" sprite="stretched:session/icons/resources/metal.png" ghost="true"/>
</object>
</object>
</repeat>
</object>
<object size="50%-64 100%-50 50%+64 100%-22" type="button" style="StoneButton">
<translatableAttribute id="caption">Close</translatableAttribute>
<action on="Press">closeDiplomacy();</action>
</object>
</object>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<object>
<!-- camera.follow mode - follow the first unit in the selection -->
<object hotkey="camera.follow">
<action on="Press">setCameraFollow(g_Selection.toList()[0]);</action>
</object>
<!-- Camera jumping - press a hotkey to mark a position and another hotkey to jump back there -->
<object hotkey="camera.jump.1">
<action on="Press">jumpCamera(1);</action>
</object>
<object hotkey="camera.jump.2">
<action on="Press">jumpCamera(2);</action>
</object>
<object hotkey="camera.jump.3">
<action on="Press">jumpCamera(3);</action>
</object>
<object hotkey="camera.jump.4">
<action on="Press">jumpCamera(4);</action>
</object>
<object hotkey="camera.jump.5">
<action on="Press">jumpCamera(5);</action>
</object>
<object hotkey="camera.jump.6">
<action on="Press">jumpCamera(6);</action>
</object>
<object hotkey="camera.jump.7">
<action on="Press">jumpCamera(7);</action>
</object>
<object hotkey="camera.jump.8">
<action on="Press">jumpCamera(8);</action>
</object>
<object hotkey="camera.jump.9">
<action on="Press">jumpCamera(9);</action>
</object>
<object hotkey="camera.jump.10">
<action on="Press">jumpCamera(10);</action>
</object>
<object hotkey="camera.jump.set.1">
<action on="Press">setJumpCamera(1);</action>
</object>
<object hotkey="camera.jump.set.2">
<action on="Press">setJumpCamera(2);</action>
</object>
<object hotkey="camera.jump.set.3">
<action on="Press">setJumpCamera(3);</action>
</object>
<object hotkey="camera.jump.set.4">
<action on="Press">setJumpCamera(4);</action>
</object>
<object hotkey="camera.jump.set.5">
<action on="Press">setJumpCamera(5);</action>
</object>
<object hotkey="camera.jump.set.6">
<action on="Press">setJumpCamera(6);</action>
</object>
<object hotkey="camera.jump.set.7">
<action on="Press">setJumpCamera(7);</action>
</object>
<object hotkey="camera.jump.set.8">
<action on="Press">setJumpCamera(8);</action>
</object>
<object hotkey="camera.jump.set.9">
<action on="Press">setJumpCamera(9);</action>
</object>
<object hotkey="camera.jump.set.10">
<action on="Press">setJumpCamera(10);</action>
</object>
</object>

View File

@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<object>
<object hotkey="leave">
<action on="Press">closeOpenDialogs();</action>
</object>
<!-- Chat: Depending on the current state, it either opens message window or closes message window / posts message -->
<object hotkey="chat">
<action on="Press">toggleChatWindow();</action>
</object>
<!-- Team Chat: Does the same as the above, but sets the window up to only send messages to teammates. -->
<object hotkey="teamchat">
<action on="Press">toggleChatWindow(true);</action>
</object>
<!-- Menu -->
<object hotkey="menu.toggle">
<action on="Press">openMenu();</action>
</object>
<!-- Unit silhouettes -->
<object hotkey="silhouettes">
<action on="Press">
var newSetting = !Engine.Renderer_GetSilhouettesEnabled();
Engine.Renderer_SetSilhouettesEnabled(newSetting);
</action>
</object>
<!-- Sky -->
<object hotkey="showsky">
<action on="Press">
var newSetting = !Engine.Renderer_GetShowSkyEnabled();
Engine.Renderer_SetShowSkyEnabled(newSetting);
</action>
</object>
<!-- Pause -->
<object hotkey="pause">
<action on="Press">togglePause();</action>
</object>
<!-- Quicksave/load -->
<object hotkey="quicksave">
<action on="Press">Engine.QuickSave();</action>
</object>
<object hotkey="quickload">
<action on="Press">Engine.QuickLoad();</action>
</object>
<!-- Delete button Hotkey (For some reason it won't work when the console is visible -->
<object hotkey="session.kill">
<action on="Press">performCommand(g_Selection.toList()[0], "delete");</action>
</object>
<!-- Stop the selected units -->
<object hotkey="session.stop">
<action on="Press">stopUnits(g_Selection.toList());</action>
</object>
<!-- Find idle warrior - TODO: Potentially move this to own UI button? -->
<object hotkey="selection.idlewarrior">
<action on="Press">findIdleUnit(["Hero", "Champion", "CitizenSoldier", "Siege", "Warship", "Dog"]);</action>
</object>
<!-- Unselect any selected entities -->
<object hotkey="selection.cancel">
<action on="Press">clearSelection()</action>
</object>
</object>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<object>
<!-- queue first unit in the training queue -->
<object hotkey="session.queueunit.1">
<action on="Press">addTrainingByPosition(0);</action>
</object>
<!-- queue 2nd unit in the training queue -->
<object hotkey="session.queueunit.2">
<action on="Press">addTrainingByPosition(1);</action>
</object>
<!-- queue 3rd unit in the training queue -->
<object hotkey="session.queueunit.3">
<action on="Press">addTrainingByPosition(2);</action>
</object>
<!-- queue 4th unit in the training queue -->
<object hotkey="session.queueunit.4">
<action on="Press">addTrainingByPosition(3);</action>
</object>
<!-- queue 5th unit in the training queue -->
<object hotkey="session.queueunit.5">
<action on="Press">addTrainingByPosition(4);</action>
</object>
<!-- queue 6th unit in the training queue -->
<object hotkey="session.queueunit.6">
<action on="Press">addTrainingByPosition(5);</action>
</object>
<!-- queue 7th unit in the training queue -->
<object hotkey="session.queueunit.7">
<action on="Press">addTrainingByPosition(6);</action>
</object>
</object>

View File

@ -28,194 +28,8 @@
<!-- HOTKEYS (For some reason, they won't work properly unless outside menu) -->
<!-- ================================ ================================ -->
<object hotkey="leave">
<action on="Press">closeOpenDialogs();</action>
</object>
<!-- Chat: Depending on the current state, it either opens message window or closes message window / posts message -->
<object hotkey="chat">
<action on="Press">toggleChatWindow();</action>
</object>
<!-- Team Chat: Does the same as the above, but sets the window up to only send messages to teammates. -->
<object hotkey="teamchat">
<action on="Press">toggleChatWindow(true);</action>
</object>
<!-- Menu -->
<object hotkey="menu.toggle">
<action on="Press">openMenu();</action>
</object>
<!-- Unit silhouettes -->
<object hotkey="silhouettes">
<action on="Press">
var newSetting = !Engine.Renderer_GetSilhouettesEnabled();
Engine.Renderer_SetSilhouettesEnabled(newSetting);
</action>
</object>
<!-- Sky -->
<object hotkey="showsky">
<action on="Press">
var newSetting = !Engine.Renderer_GetShowSkyEnabled();
Engine.Renderer_SetShowSkyEnabled(newSetting);
</action>
</object>
<!-- Pause -->
<object hotkey="pause">
<action on="Press">togglePause();</action>
</object>
<!-- Quicksave/load -->
<object hotkey="quicksave">
<action on="Press">Engine.QuickSave();</action>
</object>
<object hotkey="quickload">
<action on="Press">Engine.QuickLoad();</action>
</object>
<!-- Delete button Hotkey (For some reason it won't work when the console is visible -->
<object hotkey="session.kill">
<action on="Press">performCommand(g_Selection.toList()[0], "delete");</action>
</object>
<!-- camera.follow mode - follow the first unit in the selection -->
<object hotkey="camera.follow">
<action on="Press">setCameraFollow(g_Selection.toList()[0]);</action>
</object>
<!-- Camera jumping - press a hotkey to mark a position and another hotkey to jump back there -->
<object hotkey="camera.jump.1">
<action on="Press">jumpCamera(1);</action>
</object>
<object hotkey="camera.jump.2">
<action on="Press">jumpCamera(2);</action>
</object>
<object hotkey="camera.jump.3">
<action on="Press">jumpCamera(3);</action>
</object>
<object hotkey="camera.jump.4">
<action on="Press">jumpCamera(4);</action>
</object>
<object hotkey="camera.jump.5">
<action on="Press">jumpCamera(5);</action>
</object>
<object hotkey="camera.jump.6">
<action on="Press">jumpCamera(6);</action>
</object>
<object hotkey="camera.jump.7">
<action on="Press">jumpCamera(7);</action>
</object>
<object hotkey="camera.jump.8">
<action on="Press">jumpCamera(8);</action>
</object>
<object hotkey="camera.jump.9">
<action on="Press">jumpCamera(9);</action>
</object>
<object hotkey="camera.jump.10">
<action on="Press">jumpCamera(10);</action>
</object>
<object hotkey="camera.jump.set.1">
<action on="Press">setJumpCamera(1);</action>
</object>
<object hotkey="camera.jump.set.2">
<action on="Press">setJumpCamera(2);</action>
</object>
<object hotkey="camera.jump.set.3">
<action on="Press">setJumpCamera(3);</action>
</object>
<object hotkey="camera.jump.set.4">
<action on="Press">setJumpCamera(4);</action>
</object>
<object hotkey="camera.jump.set.5">
<action on="Press">setJumpCamera(5);</action>
</object>
<object hotkey="camera.jump.set.6">
<action on="Press">setJumpCamera(6);</action>
</object>
<object hotkey="camera.jump.set.7">
<action on="Press">setJumpCamera(7);</action>
</object>
<object hotkey="camera.jump.set.8">
<action on="Press">setJumpCamera(8);</action>
</object>
<object hotkey="camera.jump.set.9">
<action on="Press">setJumpCamera(9);</action>
</object>
<object hotkey="camera.jump.set.10">
<action on="Press">setJumpCamera(10);</action>
</object>
<!-- Stop the selected units -->
<object hotkey="session.stop">
<action on="Press">stopUnits(g_Selection.toList());</action>
</object>
<!-- queue first unit in the training queue -->
<object hotkey="session.queueunit.1">
<action on="Press">addTrainingByPosition(0);</action>
</object>
<!-- queue 2nd unit in the training queue -->
<object hotkey="session.queueunit.2">
<action on="Press">addTrainingByPosition(1);</action>
</object>
<!-- queue 3rd unit in the training queue -->
<object hotkey="session.queueunit.3">
<action on="Press">addTrainingByPosition(2);</action>
</object>
<!-- queue 4th unit in the training queue -->
<object hotkey="session.queueunit.4">
<action on="Press">addTrainingByPosition(3);</action>
</object>
<!-- queue 5th unit in the training queue -->
<object hotkey="session.queueunit.5">
<action on="Press">addTrainingByPosition(4);</action>
</object>
<!-- queue 6th unit in the training queue -->
<object hotkey="session.queueunit.6">
<action on="Press">addTrainingByPosition(5);</action>
</object>
<!-- queue 7th unit in the training queue -->
<object hotkey="session.queueunit.7">
<action on="Press">addTrainingByPosition(6);</action>
</object>
<!-- Find idle warrior - TODO: Potentially move this to own UI button? -->
<object hotkey="selection.idlewarrior">
<action on="Press">findIdleUnit(["Hero", "Champion", "CitizenSoldier", "Siege", "Warship", "Dog"]);</action>
</object>
<!-- Unselect any selected entities -->
<object hotkey="selection.cancel">
<action on="Press">clearSelection()</action>
</object>
<!-- hotkeys are in a separate directory -->
<include directory="gui/session/hotkeys/"/>
<!-- ================================ ================================ -->
<!-- Developer / Debug items -->
@ -410,223 +224,12 @@
<!-- ================================ ================================ -->
<!-- Trade Window -->
<!-- ================================ ================================ -->
<object name="tradeDialogPanel"
size="50%-250 50%-130 50%+250 50%+100"
type="image"
hidden="true"
sprite="ModernDialog"
>
<object type="text" style="TitleText" size="50%-96 -16 50%+96 16">
<translatableAttribute id="caption">Trade</translatableAttribute>
</object>
<!-- Trading goods -->
<object name="tradeGoods" size="20 50 100%-20 82">
<object name="tradeHeader" size="0 0 180 100%" type="text" style="ModernLabelText" text_align="left" ghost="true">
<translatableAttribute id="caption">Trading goods selection:</translatableAttribute>
</object>
<object size="180 0 100% 100%">
<repeat count="4">
<object name="tradeResource[n]" size="0 0 58 32">
<object name="tradeResourceButton[n]" size="4 0 36 100%" type="button" style="StoneButton">
<object name="tradeResourceIcon[n]" type="image" ghost="true"/>
<object name="tradeResourceSelection[n]" type="image" sprite="stretched:session/icons/corners.png" ghost="true"/>
<object name="tradeResourceText[n]" type="text" style="ModernLabelText" ghost="true"/>
</object>
<object name="tradeArrowUp[n]" size="36 0 52 50%" type="button" style="iconButton">
<object type="image" ghost="true" sprite="wheatArrowUp"/>
</object>
<object name="tradeArrowDn[n]" size="36 50% 52 100%" type="button" style="iconButton">
<object type="image" ghost="true" sprite="wheatArrowDn"/>
</object>
</object>
</repeat>
<object name="tradeHelp" size="100%-24 4 100% 28" enabled="false" type="button" style="StoneButton" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">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%).</translatableAttribute>
<object size="20% 15% 80% 75%" type="image" ghost="true" sprite="iconInfoWhite"/>
</object>
</object>
</object>
<object name="tradeStatistics" size="20 90 100%-20 168">
<object name="landTraders" size="0 0 100% 50%" type="text" style="ModernLabelText" text_align="left" ghost="true" />
<object name="shipTraders" size="0 50% 100% 100%" type="text" style="ModernLabelText" text_align="left" ghost="true" />
</object>
<object size="50%-64 100%-50 50%+64 100%-22" type="button" style="StoneButton">
<translatableAttribute id="caption">Close</translatableAttribute>
<action on="Press">closeTrade();</action>
</object>
</object>
<include file="gui/session/trade_window.xml"/>
<!-- ================================ ================================ -->
<!-- Top Panel -->
<!-- ================================ ================================ -->
<object name="topPanel"
type="image"
sprite="topPanel"
size="-3 0 100%+3 36"
>
<!-- ================================ ================================ -->
<!-- Player resource bar -->
<!-- ================================ ================================ -->
<object
size="10 0 45% 100%"
>
<!-- Food -->
<object name="food" size="0 0 90 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Food</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/food.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceFood"/>
</object>
<!-- Wood -->
<object name="wood" size="90 0 180 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Wood</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/wood.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceWood"/>
</object>
<!-- Stone -->
<object name="stone" size="180 0 270 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Stone</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/stone.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceStone"/>
</object>
<!-- Metal -->
<object name="metal" size="270 0 360 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Metal</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/metal.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceMetal"/>
</object>
<!-- Population -->
<object name="population" size="360 0 450 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Population (current / limit)</translatableAttribute>
<object size="0 -4 40 34" type="image" sprite="stretched:session/icons/resources/population.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourcePop"/>
</object>
</object>
<!-- ================================ ================================ -->
<!-- Civ Icon -->
<!-- ================================ ================================ -->
<object size="50%-48 -26 50%+48 70" name="civIcon" type="image" tooltip_style="sessionToolTipBold"/>
<!-- Switch the view perspective to another player's (largely for AI development) -->
<object size="50%+50 5 50%+150 100%-5" name="viewPlayer" type="dropdown" hidden="true" style="ModernDropDown" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Choose player to view</translatableAttribute>
<action on="SelectionChange">selectViewPlayer(this.selected);</action>
</object>
<!-- ================================ ================================ -->
<!-- Phase -->
<!-- ================================ ================================ -->
<!--<object size="50%+50 4 50%+300 100%-2" name="PhaseTitleBar" type="text" font="sans-bold-stroke-14" textcolor="white"> Death Match :: Village Phase</object>-->
<!-- ================================ ================================ -->
<!-- Observer Mode Warning -->
<!-- ================================ ================================ -->
<object size="50 4 50% 100%-2" name="observerText" type="text" style="ModernLabelText" text_align="left" hidden="true">
<translatableAttribute id="caption">Observer Mode (experimental)</translatableAttribute>
</object>
<!-- ================================ ================================ -->
<!-- ALPHA LABELS (alpha, build time, revision) -->
<!-- ================================ ================================ -->
<!-- Displays Alpha name and number -->
<object size="50%+48 0 100%-226 100%" name="alphaLabel" type="text" style="ModernLabelText" text_valign="top" ghost="true">
<!-- IMPORTANT: remember to update pregame/mainmenu.xml in sync with this: -->
<translatableAttribute id="caption">ALPHA XVI : Patañjali</translatableAttribute>
<!-- Displays build date and revision number-->
<object size="50%-128 0 50%+128 100%-2" name="buildTimeLabel" type="text" style="BuildNameText" ghost="true">
<action on="Load">this.caption = getBuildString()</action>
</object>
</object>
<!-- ================================ ================================ -->
<!-- Game Speed Button -->
<!-- ================================ ================================ -->
<object type="button"
name="gameSpeedButton"
size="100%-258 4 100%-230 32"
style="iconButton"
tooltip_style="sessionToolTip"
>
<translatableAttribute id="tooltip">Game speed</translatableAttribute>
<object size="5 5 100%-5 100%-5" type="image" sprite="stretched:session/icons/resources/time_small.png" ghost="true"/>
<action on="Press">
toggleGameSpeed();
</action>
</object>
<object size="100%-380 40 100%-230 65" name="gameSpeed" type="dropdown" buffer_zone="5" style="ModernDropDown" hidden="true" tooltip_style="sessionToolTip">
<translatableAttribute id="tooltip">Choose game speed</translatableAttribute>
</object>
<!-- ================================ ================================ -->
<!-- Diplomacy Button -->
<!-- ================================ ================================ -->
<object type="button"
name="diplomacyButton1"
size="100%-226 4 100%-198 32"
style="iconButton"
tooltip_style="sessionToolTip"
>
<translatableAttribute id="tooltip">Diplomacy</translatableAttribute>
<!-- TODO make the button less ugly -->
<object size="0 0 100% 100%" name="diplomacyButtonImage" type="image" sprite="stretched:session/icons/diplomacy.png" ghost="true"/>
<action on="Press">
toggleDiplomacy();
</action>
</object>
<!-- ================================ ================================ -->
<!-- Trade Button -->
<!-- ================================ ================================ -->
<object type="button"
name="tradeButton1"
size="100%-194 4 100%-166 32"
style="iconButton"
tooltip_style="sessionToolTip"
>
<!-- TODO make the button less ugly -->
<object size="0 0 100% 100%" name="tradeButtonImage" type="image" sprite="stretched:session/icons/economics.png" ghost="true"/>
<translatableAttribute id="tooltip">Trade</translatableAttribute>
<action on="Press">
toggleTrade();
</action>
</object>
<!-- ================================ ================================ -->
<!-- Menu Button -->
<!-- ================================ ================================ -->
<object type="button"
name="menuButton"
size="100%-164 4 100%-8 32"
style="StoneButtonFancy"
tooltip_style="sessionToolTip"
z="70"
>
<!-- This object covers up the text on the menu
buttons as they slide by so that you don't see
them on top of the main menu button -->
<object size="0 -4 100% 0" type="image" sprite="horizontalThinBorder" ghost="true"/>
<object size="50%-32 50%-16 50%+32 50%+16" type="image" sprite="menuButton" ghost="true">
<translatableAttribute id="caption">MENU</translatableAttribute>
</object>
<action on="Press">
toggleMenu();
</action>
</object> <!-- END OF MENU BUTTON -->
</object> <!-- END OF TOP PANEL -->
<include file="gui/session/top_panel.xml"/>
<!-- ================================ ================================ -->
<!-- Menu -->

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="topPanel"
type="image"
sprite="topPanel"
size="-3 0 100%+3 36"
>
<!-- most elements are defined in this directory -->
<include directory="gui/session/top_panel/"/>
<!-- ================================ ================================ -->
<!-- Some development features -->
<!-- ================================ ================================ -->
<!-- ================================ ================================ -->
<!-- Switch the view perspective to another player's (largely for AI development) -->
<!-- ================================ ================================ -->
<object size="50%+50 5 50%+150 100%-5" name="viewPlayer" type="dropdown" hidden="true" style="ModernDropDown" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Choose player to view</translatableAttribute>
<action on="SelectionChange">selectViewPlayer(this.selected);</action>
</object>
<!-- ================================ ================================ -->
<!-- Observer Mode Warning -->
<!-- ================================ ================================ -->
<object size="50 4 50% 100%-2" name="observerText" type="text" style="ModernLabelText" text_align="left" hidden="true">
<translatableAttribute id="caption">Observer Mode (experimental)</translatableAttribute>
</object>
</object>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<object type="button"
name="diplomacyButton1"
size="100%-226 4 100%-198 32"
style="iconButton"
tooltip_style="sessionToolTip"
>
<translatableAttribute id="tooltip">Diplomacy</translatableAttribute>
<!-- TODO make the button less ugly -->
<object size="0 0 100% 100%" name="diplomacyButtonImage" type="image" sprite="stretched:session/icons/diplomacy.png" ghost="true"/>
<action on="Press">
toggleDiplomacy();
</action>
</object>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<object>
<object type="button"
name="gameSpeedButton"
size="100%-258 4 100%-230 32"
style="iconButton"
tooltip_style="sessionToolTip"
>
<translatableAttribute id="tooltip">Game speed</translatableAttribute>
<object size="5 5 100%-5 100%-5" type="image" sprite="stretched:session/icons/resources/time_small.png" ghost="true"/>
<action on="Press">
toggleGameSpeed();
</action>
</object>
<object size="100%-380 40 100%-230 65" name="gameSpeed" type="dropdown" buffer_zone="5" style="ModernDropDown" hidden="true" tooltip_style="sessionToolTip">
<translatableAttribute id="tooltip">Choose game speed</translatableAttribute>
</object>
</object>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<object type="button"
name="menuButton"
size="100%-164 4 100%-8 32"
style="StoneButtonFancy"
tooltip_style="sessionToolTip"
z="70"
>
<!-- This object covers up the text on the menu
buttons as they slide by so that you don't see
them on top of the main menu button -->
<object size="0 -4 100% 0" type="image" sprite="horizontalThinBorder" ghost="true"/>
<object size="50%-32 50%-16 50%+32 50%+16" type="image" sprite="menuButton" ghost="true">
<translatableAttribute id="caption">MENU</translatableAttribute>
</object>
<action on="Press">
toggleMenu();
</action>
</object>

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<object type="button"
name="tradeButton1"
size="100%-194 4 100%-166 32"
style="iconButton"
tooltip_style="sessionToolTip"
>
<!-- TODO make the button less ugly -->
<object size="0 0 100% 100%" name="tradeButtonImage" type="image" sprite="stretched:session/icons/economics.png" ghost="true"/>
<translatableAttribute id="tooltip">Trade</translatableAttribute>
<action on="Press">
toggleTrade();
</action>
</object>

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<object size="50%-48 -26 50%+48 70" name="civIcon" type="image" tooltip_style="sessionToolTipBold"/>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<object size="50%+48 0 100%-226 100%" name="alphaLabel" type="text" style="ModernLabelText" text_valign="top" ghost="true">
<!-- IMPORTANT: remember to update pregame/mainmenu.xml in sync with this: -->
<translatableAttribute id="caption">ALPHA XVI : Patañjali</translatableAttribute>
<!-- Displays build date and revision number-->
<object size="50%-128 0 50%+128 100%-2" name="buildTimeLabel" type="text" style="BuildNameText" ghost="true">
<action on="Load">this.caption = getBuildString()</action>
</object>
</object>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="food" size="10 0 100 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Food</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/food.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceFood"/>
</object>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="metal" size="280 0 370 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Metal</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/metal.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceMetal"/>
</object>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="population" size="370 0 460 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Population (current / limit)</translatableAttribute>
<object size="0 -4 40 34" type="image" sprite="stretched:session/icons/resources/population.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourcePop"/>
</object>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="stone" size="190 0 280 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Stone</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/stone.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceStone"/>
</object>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="wood" size="100 0 190 100%" type="image" style="resourceCounter" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">Wood</translatableAttribute>
<object size="0 -4 40 36" type="image" sprite="stretched:session/icons/resources/wood.png" ghost="true"/>
<object size="32 0 100% 100%-2" type="text" style="resourceText" name="resourceWood"/>
</object>

View File

@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<object name="tradeDialogPanel"
size="50%-250 50%-130 50%+250 50%+100"
type="image"
hidden="true"
sprite="ModernDialog"
>
<object type="text" style="TitleText" size="50%-96 -16 50%+96 16">
<translatableAttribute id="caption">Trade</translatableAttribute>
</object>
<!-- Trading goods -->
<object name="tradeGoods" size="20 50 100%-20 82">
<object name="tradeHeader" size="0 0 180 100%" type="text" style="ModernLabelText" text_align="left" ghost="true">
<translatableAttribute id="caption">Trading goods selection:</translatableAttribute>
</object>
<object size="180 0 100% 100%">
<repeat count="4">
<object name="tradeResource[n]" size="0 0 58 32">
<object name="tradeResourceButton[n]" size="4 0 36 100%" type="button" style="StoneButton">
<object name="tradeResourceIcon[n]" type="image" ghost="true"/>
<object name="tradeResourceSelection[n]" type="image" sprite="stretched:session/icons/corners.png" ghost="true"/>
<object name="tradeResourceText[n]" type="text" style="ModernLabelText" ghost="true"/>
</object>
<object name="tradeArrowUp[n]" size="36 0 52 50%" type="button" style="iconButton">
<object type="image" ghost="true" sprite="wheatArrowUp"/>
</object>
<object name="tradeArrowDn[n]" size="36 50% 52 100%" type="button" style="iconButton">
<object type="image" ghost="true" sprite="wheatArrowDn"/>
</object>
</object>
</repeat>
<object name="tradeHelp" size="100%-24 4 100% 28" enabled="false" type="button" style="StoneButton" tooltip_style="sessionToolTipBold">
<translatableAttribute id="tooltip">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%).</translatableAttribute>
<object size="20% 15% 80% 75%" type="image" ghost="true" sprite="iconInfoWhite"/>
</object>
</object>
</object>
<object name="tradeStatistics" size="20 90 100%-20 168">
<object name="landTraders" size="0 0 100% 50%" type="text" style="ModernLabelText" text_align="left" ghost="true" />
<object name="shipTraders" size="0 50% 100% 100%" type="text" style="ModernLabelText" text_align="left" ghost="true" />
</object>
<object size="50%-64 100%-50 50%+64 100%-22" type="button" style="StoneButton">
<translatableAttribute id="caption">Close</translatableAttribute>
<action on="Press">closeTrade();</action>
</object>
</object>

View File

@ -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());
}
}
}