Maelstrom: A more flexible way of determining whether a panel should save data when it's hidden.

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

From ef617ae637108eb47d4d73d0e6981817df8013a1 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 5 Nov 2011 00:32:55 -0400
Subject: [PATCH] A more flexible way of determining whether a panel should
 save data when it's hidden.

---
 screenlib/UIDialog.cpp | 9 ++++++++-
 screenlib/UIDialog.h   | 1 +
 screenlib/UIPanel.cpp  | 4 ++--
 screenlib/UIPanel.h    | 6 ++----
 4 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/screenlib/UIDialog.cpp b/screenlib/UIDialog.cpp
index 49028f4e..cc66f8b4 100644
--- a/screenlib/UIDialog.cpp
+++ b/screenlib/UIDialog.cpp
@@ -50,13 +50,20 @@ UIDialog::Show()
 void
 UIDialog::Hide()
 {
-	UIPanel::Hide(m_status > 0);
+	UIPanel::Hide();
 
 	if (m_handleDone) {
 		m_handleDone(this, m_status);
 	}
 }
 
+bool
+UIDialog::ShouldSaveData()
+{
+	// FIXME: Is this the behavior we want?
+	return (m_status > 0);
+}
+
 bool
 UIDialog::HandleEvent(const SDL_Event &event)
 {
diff --git a/screenlib/UIDialog.h b/screenlib/UIDialog.h
index db2fbf60..2d4c2b7f 100644
--- a/screenlib/UIDialog.h
+++ b/screenlib/UIDialog.h
@@ -66,6 +66,7 @@ DECLARE_TYPESAFE_CLASS(UIPanel)
 
 	override void Show();
 	override void Hide();
+	override bool ShouldSaveData();
 	override bool HandleEvent(const SDL_Event &event);
 
 protected:
diff --git a/screenlib/UIPanel.cpp b/screenlib/UIPanel.cpp
index 0db30d0a..c911b714 100644
--- a/screenlib/UIPanel.cpp
+++ b/screenlib/UIPanel.cpp
@@ -103,7 +103,7 @@ UIPanel::Show()
 }
 
 void
-UIPanel::Hide(bool saveData)
+UIPanel::Hide()
 {
 	if (m_leaveSound) {
 		m_ui->PlaySound(m_leaveSound);
@@ -112,7 +112,7 @@ UIPanel::Hide(bool saveData)
 	UIBaseElement::Hide();
 
 	// Save data to preferences
-	if (saveData) {
+	if (ShouldSaveData()) {
 		SaveData(GetUI()->GetPrefs());
 	}
 
diff --git a/screenlib/UIPanel.h b/screenlib/UIPanel.h
index 8509c212..8a5d27bb 100644
--- a/screenlib/UIPanel.h
+++ b/screenlib/UIPanel.h
@@ -69,10 +69,8 @@ DECLARE_TYPESAFE_CLASS(UIBaseElement)
 	void SetPanelDelegate(UIPanelDelegate *delegate, bool autodelete = true);
 
 	override void Show();
-	override void Hide() {
-		Hide(true);
-	}
-	void Hide(bool saveData);
+	override void Hide();
+	virtual bool ShouldSaveData() { return true; }
 
 	void HideAll();