wesnoth/src/gui/dialogs/advanced_graphics_options.cpp
Charles Dang 11b941ab58 GUI2: removed CVideo argument from tdialog::preshow
In all but three cases, this argument was unused. In those remaining cases,
the argument could be replaced by twindow::video().
2016-03-15 02:15:28 +11:00

106 lines
3.2 KiB
C++

/*
Copyright (C) 2014 - 2016 by Chris Beck <render787@gmail.com>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#define GETTEXT_DOMAIN "wesnoth-lib"
#include "gui/dialogs/advanced_graphics_options.hpp"
#include "desktop/notifications.hpp"
#include "gui/auxiliary/find_widget.tpp"
#include "gui/dialogs/message.hpp"
#include "gui/widgets/button.hpp"
#include "gui/widgets/label.hpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/toggle_button.hpp"
#include "gui/widgets/window.hpp"
#include "image.hpp"
#include "preferences.hpp"
#include "formula_string_utils.hpp"
#include <boost/bind.hpp>
#include <boost/foreach.hpp>
#include <boost/assign/list_of.hpp>
#include "gettext.hpp"
namespace gui2
{
REGISTER_DIALOG(advanced_graphics_options)
const std::vector<std::string> tadvanced_graphics_options::scale_cases = boost::assign::list_of("zoom")("hex");
tadvanced_graphics_options::SCALING_ALGORITHM tadvanced_graphics_options::get_scale_pref(const std::string& pref_id)
{
SCALING_ALGORITHM algo = SCALING_ALGORITHM::LINEAR;
try {
algo = SCALING_ALGORITHM::string_to_enum(preferences::get(pref_id));
} catch (bad_enum_cast &) {
preferences::set(pref_id, algo.to_string());
}
// algo is now synced with preference, and default value of linear if something went wrong
return algo;
}
void tadvanced_graphics_options::setup_scale_case(const std::string & case_id, twindow & window)
{
std::string pref_id = "scale_" + case_id;
tgroup<SCALING_ALGORITHM>& group = groups_[case_id];
for (size_t x = 0; x < SCALING_ALGORITHM::count; ++x) {
SCALING_ALGORITHM scale = SCALING_ALGORITHM::from_int(x);
ttoggle_button* button = &find_widget<ttoggle_button>(&window, pref_id + "_" + scale.to_string(), false);
group.add_member(button, scale);
}
group.set_member_states(get_scale_pref(pref_id));
}
void tadvanced_graphics_options::update_scale_case(const std::string & case_id)
{
std::string pref_id = "scale_" + case_id;
SCALING_ALGORITHM new_val = groups_[case_id].get_active_member_value();
if(new_val != get_scale_pref(pref_id)) {
image::flush_cache();
}
preferences::set(pref_id, new_val.to_string());
}
tadvanced_graphics_options::tadvanced_graphics_options()
{
}
void tadvanced_graphics_options::pre_show(twindow& window)
{
BOOST_FOREACH(const std::string & i, scale_cases) {
setup_scale_case(i, window);
}
/*
tbutton * defaults;
defaults = &find_widget<tbutton>(&window,"revert_to_defaults", false);
connect_signal_mouse_left_click(*defaults, boost::bind(&revert_to_default_pref_values, boost::ref(window)));
*/
}
void tadvanced_graphics_options::post_show(twindow& /*window*/)
{
if(get_retval() == twindow::OK) {
BOOST_FOREACH(const std::string & i, scale_cases) {
update_scale_case(i);
}
image::update_from_preferences();
}
}
} // end namespace gui2