From ba8c196534f110e14e13915b299f9f658b875357 Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Wed, 3 Oct 2012 23:46:10 +0300
Subject: Add sound effects for open/close windows.

---
 data/sfx/system/CMakeLists.txt |   2 ++
 data/sfx/system/Makefile.am    |   2 ++
 data/sfx/system/book.ogg       | Bin 0 -> 6180 bytes
 data/sfx/system/page.ogg       | Bin 0 -> 6667 bytes
 src/defaults.cpp               |   2 ++
 src/gui/botcheckerwindow.cpp   |   1 +
 src/gui/buydialog.cpp          |   1 +
 src/gui/buyselldialog.cpp      |   1 +
 src/gui/chatwindow.cpp         |   1 +
 src/gui/debugwindow.cpp        |   1 +
 src/gui/didyouknowwindow.cpp   |   1 +
 src/gui/equipmentwindow.cpp    |   2 +-
 src/gui/helpwindow.cpp         |   1 +
 src/gui/inventorywindow.cpp    |   1 +
 src/gui/killstats.cpp          |   2 +-
 src/gui/minimap.cpp            |   1 +
 src/gui/npcdialog.cpp          |   1 +
 src/gui/npcpostdialog.cpp      |   1 +
 src/gui/outfitwindow.cpp       |   1 +
 src/gui/questswindow.cpp       |   1 +
 src/gui/quitdialog.cpp         |   4 ++++
 src/gui/selldialog.cpp         |   1 +
 src/gui/setup.cpp              |   1 +
 src/gui/setup_audio.cpp        |   6 ++++++
 src/gui/shopwindow.cpp         |   6 +-----
 src/gui/shortcutwindow.cpp     |   2 ++
 src/gui/skilldialog.cpp        |   1 +
 src/gui/socialwindow.cpp       |   1 +
 src/gui/statuswindow.cpp       |   1 +
 src/gui/tradewindow.cpp        |   1 +
 src/gui/whoisonline.cpp        |   1 +
 src/gui/widgets/window.cpp     |   9 +++++++++
 src/gui/widgets/window.h       |   4 ++++
 src/sound.h                    |   2 ++
 34 files changed, 56 insertions(+), 7 deletions(-)
 create mode 100644 data/sfx/system/book.ogg
 create mode 100644 data/sfx/system/page.ogg

diff --git a/data/sfx/system/CMakeLists.txt b/data/sfx/system/CMakeLists.txt
index 0fa325a45..e08346ffc 100644
--- a/data/sfx/system/CMakeLists.txt
+++ b/data/sfx/system/CMakeLists.txt
@@ -1,5 +1,6 @@
 SET (FILES
     attention.ogg
+    book.ogg
     chat1.ogg
     chat2.ogg
     complete.ogg
@@ -12,6 +13,7 @@ SET (FILES
     newmessage.ogg
     offline.ogg
     online.ogg
+    page.ogg
     reminder.ogg
     send.ogg
     start.ogg
diff --git a/data/sfx/system/Makefile.am b/data/sfx/system/Makefile.am
index d46934461..bf36b7042 100644
--- a/data/sfx/system/Makefile.am
+++ b/data/sfx/system/Makefile.am
@@ -2,6 +2,7 @@ systemdir = $(pkgdatadir)/data/sfx/system
 
 system_DATA =				\
 	attention.ogg \
+	book.ogg \
 	chat1.ogg \
 	chat2.ogg \
 	complete.ogg \
@@ -14,6 +15,7 @@ system_DATA =				\
 	notify.ogg \
 	offline.ogg \
 	online.ogg \
+	page.ogg \
 	reminder.ogg \
 	send.ogg \
 	start.ogg \
diff --git a/data/sfx/system/book.ogg b/data/sfx/system/book.ogg
new file mode 100644
index 000000000..fcc5802a9
Binary files /dev/null and b/data/sfx/system/book.ogg differ
diff --git a/data/sfx/system/page.ogg b/data/sfx/system/page.ogg
new file mode 100644
index 000000000..91cb01d00
Binary files /dev/null and b/data/sfx/system/page.ogg differ
diff --git a/src/defaults.cpp b/src/defaults.cpp
index 770c61ee0..fd6feeee9 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -241,6 +241,8 @@ DefaultsData* getConfigDefaults()
     AddDEF("soundinfo", "notify");
     AddDEF("soundrequest", "attention");
     AddDEF("soundguild", "newmessage");
+    AddDEF("soundshowwindow", "page");
+    AddDEF("soundhidewindow", "book");
     AddDEF("autohideButtons", true);
     AddDEF("autohideChat", false);
     AddDEF("downloadProxy", "");
diff --git a/src/gui/botcheckerwindow.cpp b/src/gui/botcheckerwindow.cpp
index c01925c05..63721c242 100644
--- a/src/gui/botcheckerwindow.cpp
+++ b/src/gui/botcheckerwindow.cpp
@@ -334,6 +334,7 @@ BotCheckerWindow::BotCheckerWindow():
     setWidth(w);
     setHeight(h);
     loadWindowState();
+    enableVisibleSound(true);
 
     config.addListener("enableBotCheker", this);
     mEnabled = config.getBoolValue("enableBotCheker");
diff --git a/src/gui/buydialog.cpp b/src/gui/buydialog.cpp
index 9eba7796b..e30da6702 100644
--- a/src/gui/buydialog.cpp
+++ b/src/gui/buydialog.cpp
@@ -145,6 +145,7 @@ void BuyDialog::init()
 
     center();
     loadWindowState();
+    enableVisibleSound(true);
 
     instances.push_back(this);
     setVisible(true);
diff --git a/src/gui/buyselldialog.cpp b/src/gui/buyselldialog.cpp
index 31a1aa315..e0cdf2f31 100644
--- a/src/gui/buyselldialog.cpp
+++ b/src/gui/buyselldialog.cpp
@@ -84,6 +84,7 @@ void BuySellDialog::init()
     center();
     setDefaultSize();
     loadWindowState();
+    enableVisibleSound(true);
 
     instances.push_back(this);
     setVisible(true);
diff --git a/src/gui/chatwindow.cpp b/src/gui/chatwindow.cpp
index 43d0f9634..190961839 100644
--- a/src/gui/chatwindow.cpp
+++ b/src/gui/chatwindow.cpp
@@ -229,6 +229,7 @@ ChatWindow::ChatWindow():
 
     mAutoHide = config.getBoolValue("autohideChat");
     mShowBattleEvents = config.getBoolValue("showBattleEvents");
+    enableVisibleSound(true);
 }
 
 ChatWindow::~ChatWindow()
diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp
index 673edc914..0fe1e7d2b 100644
--- a/src/gui/debugwindow.cpp
+++ b/src/gui/debugwindow.cpp
@@ -75,6 +75,7 @@ DebugWindow::DebugWindow():
     mTargetWidget->resize(getWidth(), getHeight());
     mNetWidget->resize(getWidth(), getHeight());
     loadWindowState();
+    enableVisibleSound(true);
 }
 
 DebugWindow::~DebugWindow()
diff --git a/src/gui/didyouknowwindow.cpp b/src/gui/didyouknowwindow.cpp
index 24965848e..fb90d0576 100644
--- a/src/gui/didyouknowwindow.cpp
+++ b/src/gui/didyouknowwindow.cpp
@@ -87,6 +87,7 @@ DidYouKnowWindow::DidYouKnowWindow():
     layout.setRowHeight(0, Layout::AUTO_SET);
 
     loadWindowState();
+    enableVisibleSound(true);
 }
 
 void DidYouKnowWindow::action(const gcn::ActionEvent &event)
diff --git a/src/gui/equipmentwindow.cpp b/src/gui/equipmentwindow.cpp
index d8e79e0c1..b40a73afd 100644
--- a/src/gui/equipmentwindow.cpp
+++ b/src/gui/equipmentwindow.cpp
@@ -108,7 +108,7 @@ EquipmentWindow::EquipmentWindow(Equipment *const equipment,
     mSlotHighlightedBackground = rect.grid[1];
     add(mPlayerBox);
     add(mUnequip);
-
+    enableVisibleSound(true);
 }
 
 EquipmentWindow::~EquipmentWindow()
diff --git a/src/gui/helpwindow.cpp b/src/gui/helpwindow.cpp
index 6dbb6ec09..62be2fd1a 100644
--- a/src/gui/helpwindow.cpp
+++ b/src/gui/helpwindow.cpp
@@ -77,6 +77,7 @@ HelpWindow::HelpWindow():
 
     loadWindowState();
     loadTags();
+    enableVisibleSound(true);
 }
 
 void HelpWindow::action(const gcn::ActionEvent &event)
diff --git a/src/gui/inventorywindow.cpp b/src/gui/inventorywindow.cpp
index 6faa4e5d1..ffa1f29d8 100644
--- a/src/gui/inventorywindow.cpp
+++ b/src/gui/inventorywindow.cpp
@@ -238,6 +238,7 @@ InventoryWindow::InventoryWindow(Inventory *const inventory):
     }
 
     loadWindowState();
+    enableVisibleSound(true);
     slotsChanged(mInventory);
 
     widgetResized(nullptr);
diff --git a/src/gui/killstats.cpp b/src/gui/killstats.cpp
index 3ce85db33..d26b3bf84 100644
--- a/src/gui/killstats.cpp
+++ b/src/gui/killstats.cpp
@@ -132,7 +132,7 @@ KillStats::KillStats():
     place(5, 14, mResetButton).setPadding(0);
 
     loadWindowState();
-
+    enableVisibleSound(true);
 }
 
 KillStats::~KillStats()
diff --git a/src/gui/minimap.cpp b/src/gui/minimap.cpp
index a93e0a422..b773976c3 100644
--- a/src/gui/minimap.cpp
+++ b/src/gui/minimap.cpp
@@ -70,6 +70,7 @@ Minimap::Minimap():
 
     loadWindowState();
     setVisible(mShow, isSticky());
+    enableVisibleSound(true);
 }
 
 Minimap::~Minimap()
diff --git a/src/gui/npcdialog.cpp b/src/gui/npcdialog.cpp
index 57501a35f..4298d8b68 100644
--- a/src/gui/npcdialog.cpp
+++ b/src/gui/npcdialog.cpp
@@ -160,6 +160,7 @@ NpcDialog::NpcDialog(const int npcId) :
     instances.push_back(this);
     setVisible(true);
     requestFocus();
+    enableVisibleSound(true);
 
     config.addListener("logNpcInGui", this);
 }
diff --git a/src/gui/npcpostdialog.cpp b/src/gui/npcpostdialog.cpp
index 7871ba09c..846788204 100644
--- a/src/gui/npcpostdialog.cpp
+++ b/src/gui/npcpostdialog.cpp
@@ -82,6 +82,7 @@ NpcPostDialog::NpcPostDialog(const int npcId):
 
     instances.push_back(this);
     setVisible(true);
+    enableVisibleSound(true);
 }
 
 NpcPostDialog::~NpcPostDialog()
diff --git a/src/gui/outfitwindow.cpp b/src/gui/outfitwindow.cpp
index 8afc92b43..21ef7e2cb 100644
--- a/src/gui/outfitwindow.cpp
+++ b/src/gui/outfitwindow.cpp
@@ -116,6 +116,7 @@ OutfitWindow::OutfitWindow():
 
     loadWindowState();
 
+    enableVisibleSound(true);
     load();
 }
 
diff --git a/src/gui/questswindow.cpp b/src/gui/questswindow.cpp
index c9e05cd14..3407ba891 100644
--- a/src/gui/questswindow.cpp
+++ b/src/gui/questswindow.cpp
@@ -133,6 +133,7 @@ QuestsWindow::QuestsWindow() :
     layout.setRowHeight(0, Layout::AUTO_SET);
 
     loadWindowState();
+    enableVisibleSound(true);
     loadXml();
 }
 
diff --git a/src/gui/quitdialog.cpp b/src/gui/quitdialog.cpp
index f8f37bdec..8e3bc4d25 100644
--- a/src/gui/quitdialog.cpp
+++ b/src/gui/quitdialog.cpp
@@ -26,6 +26,7 @@
 #include "game.h"
 #include "keydata.h"
 #include "keyevent.h"
+#include "sound.h"
 
 #include "gui/chatwindow.h"
 #include "gui/npcdialog.h"
@@ -96,12 +97,15 @@ QuitDialog::QuitDialog(QuitDialog **const pointerToMe):
     reflowLayout(200, 0);
     setLocationRelativeTo(getParent());
     setVisible(true);
+    sound.playGuiSound(SOUND_SHOW_WINDOW);
+//    enableVisibleSound(true);
     requestModalFocus();
     mOkButton->requestFocus();
 }
 
 QuitDialog::~QuitDialog()
 {
+    sound.playGuiSound(SOUND_HIDE_WINDOW);
     if (mMyPointer)
         *mMyPointer = nullptr;
     // Optional widgets, so delete them by hand.
diff --git a/src/gui/selldialog.cpp b/src/gui/selldialog.cpp
index 777c60c10..06b622930 100644
--- a/src/gui/selldialog.cpp
+++ b/src/gui/selldialog.cpp
@@ -131,6 +131,7 @@ void SellDialog::init()
 
     instances.push_back(this);
     setVisible(true);
+    enableVisibleSound(true);
 }
 
 SellDialog::~SellDialog()
diff --git a/src/gui/setup.cpp b/src/gui/setup.cpp
index 51c8eb9f8..ddcf13d77 100644
--- a/src/gui/setup.cpp
+++ b/src/gui/setup.cpp
@@ -132,6 +132,7 @@ Setup::Setup():
     center();
 
     setInGame(false);
+    enableVisibleSound(true);
 }
 
 Setup::~Setup()
diff --git a/src/gui/setup_audio.cpp b/src/gui/setup_audio.cpp
index 1faeca28a..ccd304c84 100644
--- a/src/gui/setup_audio.cpp
+++ b/src/gui/setup_audio.cpp
@@ -118,6 +118,12 @@ Setup_Audio::Setup_Audio() :
     new SetupItemSound(_("Trade request sound"), "",
         "soundtrade", this, "soundtradeEvent", mSoundModel);
 
+    new SetupItemSound(_("Show window sound"), "",
+        "soundshowwindow", this, "soundshowwindowEvent", mSoundModel);
+
+    new SetupItemSound(_("Hide window sound"), "",
+        "soundhidewindow", this, "soundhidewindowEvent", mSoundModel);
+
     new SetupItemLabel(_("Other"), "", this);
 
     new SetupItemCheckBox(_("Enable mumble voice chat"), "",
diff --git a/src/gui/shopwindow.cpp b/src/gui/shopwindow.cpp
index 016ad2d26..9b32d0a38 100644
--- a/src/gui/shopwindow.cpp
+++ b/src/gui/shopwindow.cpp
@@ -114,25 +114,20 @@ ShopWindow::ShopWindow():
     setMinHeight(230);
     setDefaultSize(380, 300, ImageRect::CENTER);
 
-
     mAnnounceCounter[BUY] = 0;
     mAnnounceCounter[SELL] = 0;
 
     loadList();
 
-
     mBuyShopItemList->setPriceCheck(false);
     mSellShopItemList->setPriceCheck(false);
 
     mBuyScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
     mSellScrollArea->setHorizontalScrollPolicy(gcn::ScrollArea::SHOW_NEVER);
 
-
     mBuyShopItemList->addSelectionListener(this);
     mSellShopItemList->addSelectionListener(this);
 
-
-
     ContainerPlacer placer;
     placer = getPlacer(0, 0);
 
@@ -170,6 +165,7 @@ ShopWindow::ShopWindow():
 
     instances.push_back(this);
     setVisible(false);
+    enableVisibleSound(true);
 
     updateButtonsAndLabels();
 }
diff --git a/src/gui/shortcutwindow.cpp b/src/gui/shortcutwindow.cpp
index 846bbb497..bc8cd5fc1 100644
--- a/src/gui/shortcutwindow.cpp
+++ b/src/gui/shortcutwindow.cpp
@@ -98,6 +98,7 @@ ShortcutWindow::ShortcutWindow(const std::string &title,
     layout.setMargin(0);
 
     loadWindowState();
+    enableVisibleSound(true);
 }
 
 ShortcutWindow::ShortcutWindow(const std::string &title, std::string skinFile,
@@ -134,6 +135,7 @@ ShortcutWindow::ShortcutWindow(const std::string &title, std::string skinFile,
     layout.setMargin(0);
 
     loadWindowState();
+    enableVisibleSound(true);
 }
 
 ShortcutWindow::~ShortcutWindow()
diff --git a/src/gui/skilldialog.cpp b/src/gui/skilldialog.cpp
index 0c79d0bd6..e3316486f 100644
--- a/src/gui/skilldialog.cpp
+++ b/src/gui/skilldialog.cpp
@@ -245,6 +245,7 @@ SkillDialog::SkillDialog() :
 
     setLocationRelativeTo(getParent());
     loadWindowState();
+    enableVisibleSound(true);
 }
 
 SkillDialog::~SkillDialog()
diff --git a/src/gui/socialwindow.cpp b/src/gui/socialwindow.cpp
index 549b2bcc4..1b1d0e6e8 100644
--- a/src/gui/socialwindow.cpp
+++ b/src/gui/socialwindow.cpp
@@ -1277,6 +1277,7 @@ SocialWindow::SocialWindow() :
     if (player_node && player_node->getGuild())
         addTab(player_node->getGuild());
 
+    enableVisibleSound(true);
     updateButtons();
 }
 
diff --git a/src/gui/statuswindow.cpp b/src/gui/statuswindow.cpp
index 10a30f1b9..2a8c39240 100644
--- a/src/gui/statuswindow.cpp
+++ b/src/gui/statuswindow.cpp
@@ -253,6 +253,7 @@ StatusWindow::StatusWindow() :
     }
 
     loadWindowState();
+    enableVisibleSound(true);
 
     // Update bars
     updateHPBar(mHpBar, true);
diff --git a/src/gui/tradewindow.cpp b/src/gui/tradewindow.cpp
index b696bad39..054a0237f 100644
--- a/src/gui/tradewindow.cpp
+++ b/src/gui/tradewindow.cpp
@@ -135,6 +135,7 @@ TradeWindow::TradeWindow():
     layout.setColWidth(1, Layout::AUTO_SET);
 
     loadWindowState();
+    enableVisibleSound(true);
 
     reset();
 }
diff --git a/src/gui/whoisonline.cpp b/src/gui/whoisonline.cpp
index b522b8157..962a0993b 100644
--- a/src/gui/whoisonline.cpp
+++ b/src/gui/whoisonline.cpp
@@ -117,6 +117,7 @@ WhoIsOnline::WhoIsOnline():
     setLocationRelativeTo(getParent());
 
     loadWindowState();
+    enableVisibleSound(true);
 
     download();
 
diff --git a/src/gui/widgets/window.cpp b/src/gui/widgets/window.cpp
index 7680600ff..a975f2db1 100644
--- a/src/gui/widgets/window.cpp
+++ b/src/gui/widgets/window.cpp
@@ -26,6 +26,7 @@
 #include "configuration.h"
 #include "graphicsvertexes.h"
 #include "logger.h"
+#include "sound.h"
 
 #include "gui/gui.h"
 #include "gui/palette.h"
@@ -79,6 +80,7 @@ Window::Window(const std::string &caption, const bool modal,
     mGripPadding(2),
     mResizeHandles(-1),
     mRedraw(true),
+    mPlayVisibleSound(false),
     mCaptionFont(getFont())
 {
     logger->log("Window::Window(\"%s\")", caption.c_str());
@@ -504,6 +506,8 @@ void Window::setVisible(bool visible, bool forceSticky)
         gcn::Window::setVisible((!forceSticky && isSticky()) || visible);
     if (visible)
     {
+        if (mPlayVisibleSound)
+            sound.playGuiSound(SOUND_SHOW_WINDOW);
         if (gui)
         {
             gcn::MouseEvent *event = reinterpret_cast<gcn::MouseEvent*>(
@@ -521,6 +525,11 @@ void Window::setVisible(bool visible, bool forceSticky)
             }
         }
     }
+    else
+    {
+        if (mPlayVisibleSound)
+            sound.playGuiSound(SOUND_HIDE_WINDOW);
+    }
 }
 
 void Window::scheduleDelete()
diff --git a/src/gui/widgets/window.h b/src/gui/widgets/window.h
index c8b8fb080..6739b5186 100644
--- a/src/gui/widgets/window.h
+++ b/src/gui/widgets/window.h
@@ -405,6 +405,9 @@ class Window : public gcn::Window, private gcn::WidgetListener
         void setCaptionFont(gcn::Font *font)
         { mCaptionFont = font; }
 
+        void enableVisibleSound(bool b)
+        { mPlayVisibleSound = b; }
+
     protected:
         bool canMove() const;
 
@@ -488,6 +491,7 @@ class Window : public gcn::Window, private gcn::WidgetListener
         int mGripPadding;
         int mResizeHandles;
         bool mRedraw;
+        bool mPlayVisibleSound;
         gcn::Font *mCaptionFont;
 };
 
diff --git a/src/sound.h b/src/sound.h
index c3e5e469a..071b77597 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -41,6 +41,8 @@ static const std::string SOUND_WHISPER = "soundwhisper";
 static const std::string SOUND_HIGHLIGHT = "soundhighlight";
 static const std::string SOUND_GLOBAL = "soundglobal";
 static const std::string SOUND_GUILD = "soundguild";
+static const std::string SOUND_SHOW_WINDOW = "soundshowwindow";
+static const std::string SOUND_HIDE_WINDOW = "soundhidewindow";
 
 /** Sound engine
  *
-- 
cgit v1.2.3-70-g09d2