aboutsummaryrefslogtreecommitdiff
path: root/src/gui/guiVolumeChange.cpp
diff options
context:
space:
mode:
authorVitaliy <silverunicorn2011@yandex.ru>2017-11-09 01:56:20 +0300
committerLoïc Blot <nerzhul@users.noreply.github.com>2017-11-08 23:56:20 +0100
commit20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f (patch)
tree67378802190117d8271b3b6d489a92bcb16203b7 /src/gui/guiVolumeChange.cpp
parentfc9747eb4b7f75e59a28957bc50f7a78256b3d66 (diff)
downloadminetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.tar.gz
minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.tar.bz2
minetest-20a85d76d94c9c5c7fbe198c3d0e1fbee97a485f.zip
Move files to subdirectories (#6599)
* Move files around
Diffstat (limited to 'src/gui/guiVolumeChange.cpp')
-rw-r--r--src/gui/guiVolumeChange.cpp196
1 files changed, 196 insertions, 0 deletions
diff --git a/src/gui/guiVolumeChange.cpp b/src/gui/guiVolumeChange.cpp
new file mode 100644
index 000000000..8c462312b
--- /dev/null
+++ b/src/gui/guiVolumeChange.cpp
@@ -0,0 +1,196 @@
+/*
+Part of Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+Copyright (C) 2013 Ciaran Gultnieks <ciaran@ciarang.com>
+Copyright (C) 2013 RealBadAngel, Maciej Kasatkin <mk@realbadangel.pl>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+*/
+
+#include "guiVolumeChange.h"
+#include "debug.h"
+#include "serialization.h"
+#include <string>
+#include <IGUICheckBox.h>
+#include <IGUIButton.h>
+#include <IGUIScrollBar.h>
+#include <IGUIStaticText.h>
+#include <IGUIFont.h>
+#include "settings.h"
+
+#include "gettext.h"
+
+const int ID_soundText = 263;
+const int ID_soundExitButton = 264;
+const int ID_soundSlider = 265;
+const int ID_soundMuteButton = 266;
+
+GUIVolumeChange::GUIVolumeChange(gui::IGUIEnvironment* env,
+ gui::IGUIElement* parent, s32 id,
+ IMenuManager *menumgr
+):
+ GUIModalMenu(env, parent, id, menumgr)
+{
+}
+
+GUIVolumeChange::~GUIVolumeChange()
+{
+ removeChildren();
+}
+
+void GUIVolumeChange::removeChildren()
+{
+ if (gui::IGUIElement *e = getElementFromId(ID_soundText))
+ e->remove();
+
+ if (gui::IGUIElement *e = getElementFromId(ID_soundExitButton))
+ e->remove();
+
+ if (gui::IGUIElement *e = getElementFromId(ID_soundSlider))
+ e->remove();
+}
+
+void GUIVolumeChange::regenerateGui(v2u32 screensize)
+{
+ /*
+ Remove stuff
+ */
+ removeChildren();
+
+ /*
+ Calculate new sizes and positions
+ */
+ DesiredRect = core::rect<s32>(
+ screensize.X/2 - 380/2,
+ screensize.Y/2 - 200/2,
+ screensize.X/2 + 380/2,
+ screensize.Y/2 + 200/2
+ );
+ recalculateAbsolutePosition(false);
+
+ v2s32 size = DesiredRect.getSize();
+ int volume = (int)(g_settings->getFloat("sound_volume") * 100);
+
+ /*
+ Add stuff
+ */
+ {
+ core::rect<s32> rect(0, 0, 160, 20);
+ rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 70);
+
+ const wchar_t *text = wgettext("Sound Volume: ");
+ core::stringw volume_text = text;
+ delete [] text;
+
+ volume_text += core::stringw(volume) + core::stringw("%");
+ Environment->addStaticText(volume_text.c_str(), rect, false,
+ true, this, ID_soundText);
+ }
+ {
+ core::rect<s32> rect(0, 0, 80, 30);
+ rect = rect + v2s32(size.X/2-80/2, size.Y/2+55);
+ const wchar_t *text = wgettext("Exit");
+ Environment->addButton(rect, this, ID_soundExitButton,
+ text);
+ delete[] text;
+ }
+ {
+ core::rect<s32> rect(0, 0, 300, 20);
+ rect = rect + v2s32(size.X / 2 - 150, size.Y / 2);
+ gui::IGUIScrollBar *e = Environment->addScrollBar(true,
+ rect, this, ID_soundSlider);
+ e->setMax(100);
+ e->setPos(volume);
+ }
+ {
+ core::rect<s32> rect(0, 0, 160, 20);
+ rect = rect + v2s32(size.X / 2 - 80, size.Y / 2 - 35);
+ const wchar_t *text = wgettext("Muted");
+ Environment->addCheckBox(g_settings->getBool("mute_sound"), rect, this,
+ ID_soundMuteButton, text);
+ delete[] text;
+ }
+}
+
+void GUIVolumeChange::drawMenu()
+{
+ gui::IGUISkin* skin = Environment->getSkin();
+ if (!skin)
+ return;
+ video::IVideoDriver* driver = Environment->getVideoDriver();
+ video::SColor bgcolor(140, 0, 0, 0);
+ driver->draw2DRectangle(bgcolor, AbsoluteRect, &AbsoluteClippingRect);
+ gui::IGUIElement::draw();
+}
+
+bool GUIVolumeChange::OnEvent(const SEvent& event)
+{
+ if (event.EventType == EET_KEY_INPUT_EVENT) {
+ if (event.KeyInput.Key == KEY_ESCAPE && event.KeyInput.PressedDown) {
+ quitMenu();
+ return true;
+ }
+
+ if (event.KeyInput.Key == KEY_RETURN && event.KeyInput.PressedDown) {
+ quitMenu();
+ return true;
+ }
+ } else if (event.EventType == EET_GUI_EVENT) {
+ if (event.GUIEvent.EventType == gui::EGET_CHECKBOX_CHANGED) {
+ gui::IGUIElement *e = getElementFromId(ID_soundMuteButton);
+ if (e != NULL && e->getType() == gui::EGUIET_CHECK_BOX) {
+ g_settings->setBool("mute_sound", ((gui::IGUICheckBox*)e)->isChecked());
+ }
+
+ Environment->setFocus(this);
+ return true;
+ }
+
+ if (event.GUIEvent.EventType == gui::EGET_BUTTON_CLICKED) {
+ if (event.GUIEvent.Caller->getID() == ID_soundExitButton) {
+ quitMenu();
+ return true;
+ }
+ Environment->setFocus(this);
+ }
+
+ if (event.GUIEvent.EventType == gui::EGET_ELEMENT_FOCUS_LOST
+ && isVisible()) {
+ if (!canTakeFocus(event.GUIEvent.Element)) {
+ dstream << "GUIMainMenu: Not allowing focus change."
+ << std::endl;
+ // Returning true disables focus change
+ return true;
+ }
+ }
+ if (event.GUIEvent.EventType == gui::EGET_SCROLL_BAR_CHANGED) {
+ if (event.GUIEvent.Caller->getID() == ID_soundSlider) {
+ s32 pos = ((gui::IGUIScrollBar*)event.GUIEvent.Caller)->getPos();
+ g_settings->setFloat("sound_volume", (float) pos / 100);
+
+ gui::IGUIElement *e = getElementFromId(ID_soundText);
+ const wchar_t *text = wgettext("Sound Volume: ");
+ core::stringw volume_text = text;
+ delete [] text;
+
+ volume_text += core::stringw(pos) + core::stringw("%");
+ e->setText(volume_text.c_str());
+ return true;
+ }
+ }
+
+ }
+
+ return Parent ? Parent->OnEvent(event) : false;
+}
+