Maelstrom: Allow the XML to specify button actions that don't require hooking up special click handler functions.

https://github.com/libsdl-org/Maelstrom/commit/4df49476963e1aafabb61ce87db34921123439a0

From 4df49476963e1aafabb61ce87db34921123439a0 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 6 Oct 2012 00:29:27 -0700
Subject: [PATCH] Allow the XML to specify button actions that don't require
 hooking up special click handler functions.

---
 Data/UI_Classic/main.xml    |  66 +++----
 Data/UI_Classic/zap.xml     |   2 +-
 Maelstrom_Data.zip          | Bin 14373671 -> 14373821 bytes
 game/Maelstrom_Globals.h    |   1 -
 game/main.cpp               | 381 +++++++++++++++++-------------------
 game/main.h                 |  17 ++
 game/netplay.cpp            |   2 +-
 game/scores.cpp             |   6 +-
 game/scores.h               |   4 +-
 screenlib/UIBaseElement.cpp |   8 +
 screenlib/UIBaseElement.h   |   9 +
 screenlib/UIDialog.cpp      |  22 ---
 screenlib/UIDialog.h        |  17 --
 screenlib/UIElement.cpp     |  22 +++
 screenlib/UIElement.h       |   2 +
 screenlib/UIManager.cpp     |  12 ++
 screenlib/UIManager.h       |   1 +
 screenlib/UIPanel.cpp       |  16 ++
 screenlib/UIPanel.h         |   4 +
 19 files changed, 308 insertions(+), 284 deletions(-)

diff --git a/Data/UI_Classic/main.xml b/Data/UI_Classic/main.xml
index 4267102a..1ba5279f 100644
--- a/Data/UI_Classic/main.xml
+++ b/Data/UI_Classic/main.xml
@@ -44,7 +44,7 @@
 		<Label name="wave_0" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_header" x="-10" y="24"/>
 		</Label>
-		<Button name="play_0">
+		<Button name="play_0" action="play_0">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_0" x="-2"/>
 		</Button>
@@ -57,7 +57,7 @@
 		<Label name="wave_1" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_0" y="18"/>
 		</Label>
-		<Button name="play_1">
+		<Button name="play_1" action="play_1">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_1" x="-2"/>
 		</Button>
@@ -70,7 +70,7 @@
 		<Label name="wave_2" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_1" y="18"/>
 		</Label>
-		<Button name="play_2">
+		<Button name="play_2" action="play_2">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_2" x="-2"/>
 		</Button>
@@ -83,7 +83,7 @@
 		<Label name="wave_3" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_2" y="18"/>
 		</Label>
-		<Button name="play_3">
+		<Button name="play_3" action="play_3">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_3" x="-2"/>
 		</Button>
@@ -96,7 +96,7 @@
 		<Label name="wave_4" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_3" y="18"/>
 		</Label>
-		<Button name="play_4">
+		<Button name="play_4" action="play_4">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_4" x="-2"/>
 		</Button>
@@ -109,7 +109,7 @@
 		<Label name="wave_5" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_4" y="18"/>
 		</Label>
-		<Button name="play_5">
+		<Button name="play_5" action="play_5">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_5" x="-2"/>
 		</Button>
@@ -122,7 +122,7 @@
 		<Label name="wave_6" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_5" y="18"/>
 		</Label>
-		<Button name="play_6">
+		<Button name="play_6" action="play_6">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_6" x="-2"/>
 		</Button>
@@ -135,7 +135,7 @@
 		<Label name="wave_7" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_6" y="18"/>
 		</Label>
-		<Button name="play_7">
+		<Button name="play_7" action="play_7">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_7" x="-2"/>
 		</Button>
@@ -148,7 +148,7 @@
 		<Label name="wave_8" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_7" y="18"/>
 		</Label>
-		<Button name="play_8">
+		<Button name="play_8" action="play_8">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_8" x="-2"/>
 		</Button>
@@ -161,7 +161,7 @@
 		<Label name="wave_9" template="Medium">
 			<Anchor anchorFrom="TOPRIGHT" anchorTo="TOPRIGHT" anchor="wave_8" y="18"/>
 		</Label>
-		<Button name="play_9">
+		<Button name="play_9" action="play_9">
 			<Size w="290" h="16"/>
 			<Anchor anchorFrom="LEFT" anchorTo="LEFT" anchor="name_9" x="-2"/>
 		</Button>
@@ -172,7 +172,7 @@
 		<Label name="last_score" template="LargeWhite">
 			<Anchor anchorFrom="LEFT" anchorTo="RIGHT" anchor="last_score_label"/>
 		</Label>
-		<Button name="play_last" image="play">
+		<Button name="play_last" image="play" action="play_last">
 			<Size w="326" h="22"/>
 			<ImageArea>
 				<Anchor anchorFrom="LEFT" anchorTo="LEFT"/>
@@ -181,49 +181,49 @@
 		</Button>
 
 		<!-- Instructions -->
-		<Button name="PlayButton" template="MenuButton" hotkey="P" text="P" clickSound="114">
+		<Button name="PlayButton" template="MenuButton" hotkey="P" text="P" action="play" clickSound="114">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPRIGHT" anchor="vertical_divider" x="9" y="10"/>
 		</Button>
 		<Label template="SmallYellow" text=" Start playing Maelstrom">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="PlayButton" x="3" y="21"/>
 		</Label>
-		<Button name="MultiplayerButton" template="MenuButton" hotkey="M" text="M" clickSound="114">
+		<Button name="MultiplayerButton" template="MenuButton" hotkey="M" text="M" action="multiplayer" clickSound="114">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="PlayButton" y="34"/>
 		</Button>
 		<Label template="SmallYellow" text=" Start a multiplayer game">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="MultiplayerButton" x="3" y="21"/>
 		</Label>
-		<Button name="ControlsButton" template="MenuButton" hotkey="C" text="C" clickSound="119">
+		<Button name="ControlsButton" template="MenuButton" hotkey="C" text="C" action="show_controls" clickSound="119">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="MultiplayerButton" y="34"/>
 		</Button>
 		<Label template="SmallYellow" text=" Configure the game controls">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="ControlsButton" x="3" y="21"/>
 		</Label>
-		<Button name="ZapButton" template="MenuButton" hotkey="Z" text="Z" clickSound="107">
+		<Button name="ZapButton" template="MenuButton" hotkey="Z" text="Z" action="show_zap" clickSound="107">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ControlsButton" y="34"/>
 		</Button>
 		<Label template="SmallYellow" text=" Zap the high scores">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="ZapButton" x="3" y="21"/>
 		</Label>
-		<Button name="AboutButton" template="MenuButton" hotkey="A" text="A" clickSound="122">
+		<Button name="AboutButton" template="MenuButton" hotkey="A" text="A" action="show_about_story" clickSound="122">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="ZapButton" y="34"/>
 		</Button>
 		<Label template="SmallYellow" text=" About Maelstrom...">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="AboutButton" x="3" y="21"/>
 		</Label>
-		<Button name="QuitButton" template="MenuButton" hotkey="Q" text="Q" clickSound="106">
+		<Button name="QuitButton" template="MenuButton" hotkey="Q" text="Q" action="quit" clickSound="106">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="AboutButton" y="34"/>
 		</Button>
 		<Label template="SmallYellow" text=" Quit Maelstrom">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="QuitButton" x="3" y="21"/>
 		</Label>
-		<Button name="VolumeDownButton" template="MenuButton" hotkey="0" text="0">
+		<Button name="VolumeDownButton" template="MenuButton" hotkey="0" text="0" action="volume_down">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="QuitButton" y="34"/>
 		</Button>
 		<Label template="SmallYellow" text="-">
 			<Anchor anchorFrom="BOTTOMLEFT" anchorTo="TOPRIGHT" anchor="VolumeDownButton" x="3" y="21"/>
 		</Label>
-		<Button name="VolumeUpButton" template="MenuButton" hotkey="8" text="8">
+		<Button name="VolumeUpButton" template="MenuButton" hotkey="8" text="8" action="volume_up">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" anchor="VolumeDownButton" x="40"/>
 		</Button>
 		<Label template="SmallYellow" text=" Set Sound Volume">
@@ -231,19 +231,19 @@
 		</Label>
 
 		<!-- Hidden action buttons -->
-		<Button name="ToggleFullscreen" template="HotkeyOnly" hotkey="ALT-Return"/>
-		<Button name="Cheat" template="HotkeyOnly" hotkey="L" clickSound="124"/>
-		<Button name="Special" template="HotkeyOnly" hotkey="X" clickSound="128"/>
-		<Button name="Screenshot" template="HotkeyOnly" hotkey="F3"/>
-		<Button name="SetVolume0" template="HotkeyOnly" hotkey="0"/>
-		<Button name="SetVolume1" template="HotkeyOnly" hotkey="1"/>
-		<Button name="SetVolume2" template="HotkeyOnly" hotkey="2"/>
-		<Button name="SetVolume3" template="HotkeyOnly" hotkey="3"/>
-		<Button name="SetVolume4" template="HotkeyOnly" hotkey="4"/>
-		<Button name="SetVolume5" template="HotkeyOnly" hotkey="5"/>
-		<Button name="SetVolume6" template="HotkeyOnly" hotkey="6"/>
-		<Button name="SetVolume7" template="HotkeyOnly" hotkey="7"/>
-		<Button name="SetVolume8" template="HotkeyOnly" hotkey="8"/>
+		<Button name="ToggleFullscreen" template="HotkeyOnly" hotkey="ALT-Return" action="toggle_fullscreen"/>
+		<Button name="Screenshot" template="HotkeyOnly" hotkey="F3" action="screenshot"/>
+		<Button name="Cheat" template="HotkeyOnly" hotkey="L" action="cheat" clickSound="124"/>
+		<Button name="Special" template="HotkeyOnly" hotkey="X" action="show_dawn" clickSound="128"/>
+		<Button name="SetVolume0" template="HotkeyOnly" hotkey="0" action="setvolume0"/>
+		<Button name="SetVolume1" template="HotkeyOnly" hotkey="1" action="setvolume1"/>
+		<Button name="SetVolume2" template="HotkeyOnly" hotkey="2" action="setvolume2"/>
+		<Button name="SetVolume3" template="HotkeyOnly" hotkey="3" action="setvolume3"/>
+		<Button name="SetVolume4" template="HotkeyOnly" hotkey="4" action="setvolume4"/>
+		<Button name="SetVolume5" template="HotkeyOnly" hotkey="5" action="setvolume5"/>
+		<Button name="SetVolume6" template="HotkeyOnly" hotkey="6" action="setvolume6"/>
+		<Button name="SetVolume7" template="HotkeyOnly" hotkey="7" action="setvolume7"/>
+		<Button name="SetVolume8" template="HotkeyOnly" hotkey="8" action="setvolume8"/>
 
 		<!-- Credits -->
 		<Label template="SmallYellow" text="Port to SDL by Sam Lantinga">
@@ -266,7 +266,7 @@
 		</Label>
 
 		<!-- Kid mode -->
-		<Checkbox name="KidMode" image="kidmode" checkedImage="kidmode-selected" bindValue="Cheat.KidMode">
+		<Checkbox name="KidMode" image="kidmode" checkedImage="kidmode-selected" bindValue="Cheat.KidMode" action="toggle_kidmode">
 			<Anchor anchorFrom="TOP" anchorTo="TOP" anchor="vertical_divider" x="196"/>
 		</Checkbox>
 	</Elements>
diff --git a/Data/UI_Classic/zap.xml b/Data/UI_Classic/zap.xml
index 4fcb3cd0..867834d5 100644
--- a/Data/UI_Classic/zap.xml
+++ b/Data/UI_Classic/zap.xml
@@ -5,7 +5,7 @@
 		<Title id="102">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="4" y="4"/>
 		</Title>
-		<DialogButton name="clearButton" text="Clear" id="1">
+		<DialogButton name="clearButton" text="Clear" action="zap">
 			<Anchor anchorFrom="TOPLEFT" anchorTo="TOPLEFT" x="99" y="74"/>
 		</DialogButton>
 		<DialogButton text="Cancel" default="true">
diff --git a/Maelstrom_Data.zip b/Maelstrom_Data.zip
index a7ebaecf7f17f3da578578023c7484ff635b30d3..6db5a815c54f1e1e77b056c4e5708a9fadc6ebe6 100644
GIT binary patch
delta 43319
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

(Patch may be truncated, please check the link at the top of this post.)