Maelstrom: Added replay buttons for the entire high score list

https://github.com/libsdl-org/Maelstrom/commit/c42010080f11984f6ec18a91694fd5aad94478ac

From c42010080f11984f6ec18a91694fd5aad94478ac Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Mon, 21 Nov 2011 01:44:00 -0500
Subject: [PATCH] Added replay buttons for the entire high score list

---
 Maelstrom_Data.zip | Bin 754398 -> 754504 bytes
 game/main.cpp      |  65 +++++++++++++++++++++------------------------
 2 files changed, 30 insertions(+), 35 deletions(-)

diff --git a/Maelstrom_Data.zip b/Maelstrom_Data.zip
index b88ee628256a41cc03a561f3b7ffaff4d190c7e6..1c0ce6eeae75fa1dccd21025346b0dd790fdd838 100644
GIT binary patch
delta 1835
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
C(o;MD

delta 1683
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

diff --git a/game/main.cpp b/game/main.cpp
index 0c1da86c..3c947c3c 100644
--- a/game/main.cpp
+++ b/game/main.cpp
@@ -185,6 +185,21 @@ static void RunScreenshot(void*)
 	screen->ScreenDump("ScoreDump", 64, 48, 298, 384);
 }
 
+class RunReplayCallback : public UIClickCallback
+{
+public:
+	RunReplayCallback(int index) : m_index(index) { }
+
+	virtual void operator()() {
+		const char *file = hScores[m_index].file;
+		if (file) {
+			RunReplayGame(file);
+		}
+	}
+private:
+	int m_index;
+};
+
 class SetVolumeCallback : public UIClickCallback
 {
 public:
@@ -354,6 +369,8 @@ int MaelstromMain(int argc, char *argv[])
 bool
 MainPanelDelegate::OnLoad()
 {
+	char name[128];
+	int i;
 	UIElement *label;
 	UIElementButton *button;
 
@@ -413,43 +430,21 @@ MainPanelDelegate::OnLoad()
 		button->SetClickCallback(RunScreenshot);
 	}
 
-	button = m_panel->GetElement<UIElementButton>("SetVolume0");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(0));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume1");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(1));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume2");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(2));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume3");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(3));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume4");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(4));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume5");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(5));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume6");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(6));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume7");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(7));
-	}
-	button = m_panel->GetElement<UIElementButton>("SetVolume8");
-	if (button) {
-		button->SetClickCallback(new SetVolumeCallback(8));
+	for (i = 0; i < 9; ++i) {
+		SDL_snprintf(name, sizeof(name), "SetVolume%d", i);
+		button = m_panel->GetElement<UIElementButton>(name);
+		if (button) {
+			button->SetClickCallback(new SetVolumeCallback(i));
+		}
 	}
 
+	for (i = 0; i < NUM_SCORES; ++i) {
+		SDL_snprintf(name, sizeof(name), "play_%d", i);
+		button = m_panel->GetElement<UIElementButton>(name);
+		if (button) {
+			button->SetClickCallback(new RunReplayCallback(i));
+		}
+	}
 	button = m_panel->GetElement<UIElementButton>("play_last");
 	if (button) {
 		button->SetClickCallback(RunLastReplay);