gui/dialogs/mp_create_game.cpp

Go to the documentation of this file.
00001 /* $Id: mp_create_game.cpp 54051 2012-04-30 21:52:38Z brilliand $ */
00002 /*
00003    Copyright (C) 2008 - 2012 by Mark de Wever <koraq@xs4all.nl>
00004    Part of the Battle for Wesnoth Project http://www.wesnoth.org/
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 2 of the License, or
00009    (at your option) any later version.
00010    This program is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY.
00012 
00013    See the COPYING file for more details.
00014 */
00015 
00016 #define GETTEXT_DOMAIN "wesnoth-lib"
00017 
00018 #include "gui/dialogs/mp_create_game.hpp"
00019 
00020 #include "foreach.hpp"
00021 #include "game_preferences.hpp"
00022 #include "gettext.hpp"
00023 #include "gui/dialogs/field.hpp"
00024 #include "gui/dialogs/helper.hpp"
00025 #include "gui/widgets/integer_selector.hpp"
00026 #ifdef GUI2_EXPERIMENTAL_LISTBOX
00027 #include "gui/widgets/list.hpp"
00028 #else
00029 #include "gui/widgets/listbox.hpp"
00030 #endif
00031 #include "gui/widgets/minimap.hpp"
00032 #include "gui/widgets/settings.hpp"
00033 #include "../../settings.hpp"
00034 
00035 #ifdef GUI2_EXPERIMENTAL_LISTBOX
00036 #include <boost/bind.hpp>
00037 #endif
00038 namespace gui2 {
00039 
00040 REGISTER_DIALOG(mp_create_game)
00041 
00042 tmp_create_game::tmp_create_game(const config& cfg) :
00043     cfg_(cfg),
00044     scenario_(NULL),
00045     use_map_settings_(register_bool("use_map_settings",
00046         true,
00047         preferences::use_map_settings,
00048         preferences::set_use_map_settings,
00049         dialog_callback<tmp_create_game, &tmp_create_game::update_map_settings>)),
00050     fog_(register_bool("fog",
00051             true,
00052             preferences::fog,
00053             preferences::set_fog)),
00054     shroud_(register_bool("shroud",
00055             true,
00056             preferences::shroud,
00057             preferences::set_shroud)),
00058     start_time_(register_bool("random_start_time",
00059             true,
00060             preferences::random_start_time,
00061             preferences::set_random_start_time)),
00062 
00063     turns_(register_integer("turn_count",
00064         true,
00065         preferences::turns ,
00066         preferences::set_turns)),
00067     gold_(register_integer("village_gold",
00068         true,
00069         preferences::village_gold ,
00070         preferences::set_village_gold)),
00071     support_(register_integer("village_support",
00072         false,
00073         preferences::village_support ,
00074         preferences::set_village_support)),
00075     experience_(register_integer("experience_modifier",
00076         true,
00077         preferences::xp_modifier ,
00078         preferences::set_xp_modifier))
00079 {
00080 }
00081 
00082 void tmp_create_game::pre_show(CVideo& /*video*/, twindow& window)
00083 {
00084     find_widget<tminimap>(&window, "minimap", false).set_config(&cfg_);
00085 
00086     tlistbox& list = find_widget<tlistbox>(&window, "map_list", false);
00087 #ifdef GUI2_EXPERIMENTAL_LISTBOX
00088     connect_signal_notify_modified(list, boost::bind(
00089                   &tmp_create_game::update_map
00090                 , *this
00091                 , boost::ref(window)));
00092 #else
00093     list.set_callback_value_change(
00094             dialog_callback<tmp_create_game, &tmp_create_game::update_map>);
00095 #endif
00096 
00097     // Load option (might turn it into a button later).
00098     string_map item;
00099     item.insert(std::make_pair("label", _("Load Game")));
00100     item.insert(std::make_pair("tooltip", _("Load Game...")));
00101     list.add_row(item);
00102 
00103     // User maps
00104 /*  FIXME implement user maps
00105     std::vector<std::string> maps;
00106     get_files_in_dir(get_user_data_dir() + "/editor/maps", &maps, NULL, FILE_NAME_ONLY);
00107 
00108     foreach(const std::string& map, maps) {
00109         std::map<std::string, t_string> item;
00110         item.insert(std::make_pair("label", map));
00111         list->add_row(item);
00112     }
00113 */
00114 
00115     // Standard maps
00116     int i = 0;
00117     foreach (const config &map, cfg_.child_range("multiplayer"))
00118     {
00119         if (map["allow_new_game"].to_bool(true)) {
00120             string_map item;
00121             item.insert(std::make_pair("label", map["name"].str()));
00122             item.insert(std::make_pair("tooltip", map["name"].str()));
00123             list.add_row(item);
00124 
00125             // This hack is needed since the next item is too wide to fit.
00126             // and the scrollbar can't truncate text yet.
00127             if(++i == 46) {
00128                 break;
00129             }
00130         }
00131     }
00132 
00133     update_map_settings(window);
00134 }
00135 
00136 void tmp_create_game::post_show(twindow& window)
00137 {
00138     if(get_retval() == twindow::OK) {
00139         find_widget<tlistbox>(&window, "map_list", false);
00140     }
00141 }
00142 
00143 void tmp_create_game::update_map(twindow& window)
00144 {
00145     tminimap& minimap = find_widget<tminimap>(&window, "minimap", false);
00146 
00147     const int index = find_widget<tlistbox>(
00148             &window, "map_list", false).get_selected_row() - 1;
00149 
00150     if(index >= 0) {
00151         config::const_child_itors children = cfg_.child_range("multiplayer");
00152         std::advance(children.first, index);
00153         scenario_ = &*children.first;
00154         minimap.set_map_data((*scenario_)["map_data"]);
00155     } else {
00156         minimap.set_map_data("");
00157         scenario_ = NULL;
00158     }
00159 
00160     update_map_settings(window);
00161 }
00162 
00163 void tmp_create_game::update_map_settings(twindow& window)
00164 {
00165     const bool use_map_settings = use_map_settings_->get_widget_value(window);
00166 
00167     fog_->widget_set_enabled(window, !use_map_settings, false);
00168     shroud_->widget_set_enabled(window, !use_map_settings, false);
00169     start_time_->widget_set_enabled(window, !use_map_settings, false);
00170 
00171     turns_->widget_set_enabled(window, !use_map_settings, false);
00172     gold_->widget_set_enabled(window, !use_map_settings, false);
00173     support_->widget_set_enabled(window, !use_map_settings, false);
00174     experience_->widget_set_enabled(window, !use_map_settings, false);
00175 
00176     if(use_map_settings) {
00177         if(scenario_) {
00178             const config &side = scenario_->child("side");
00179 
00180             fog_->set_widget_value(window, side["fog"].to_bool(true));
00181             shroud_->set_widget_value(window, side["shroud"].to_bool(false));
00182             start_time_->set_widget_value(window, (*scenario_)["random_start_time"].to_bool(true));
00183 
00184             turns_->set_widget_value(window, ::settings::get_turns((*scenario_)["turns"]));
00185             gold_->set_widget_value(window, ::settings::get_village_gold(side["village_gold"]));
00186             support_->set_widget_value(window, ::settings::get_village_support(side["village_support"]));
00187             experience_->set_widget_value(window, ::settings::get_xp_modifier((*scenario_)["experience_modifier"]));
00188         }
00189         // No scenario selected just leave the state unchanged for now.
00190 
00191     } else {
00192 
00193         // Fixme we should store the value and reuse it later...
00194         fog_->set_widget_value(window, preferences::fog());
00195         shroud_->set_widget_value(window, preferences::shroud());
00196         start_time_->set_widget_value(window, preferences::random_start_time());
00197 
00198         turns_->set_widget_value(window, preferences::turns());
00199         gold_->set_widget_value(window, preferences::village_gold());
00200         support_->set_widget_value(window, preferences::village_support());
00201         experience_->set_widget_value(window, preferences::xp_modifier());
00202     }
00203 }
00204 
00205 } // namespace gui2
00206 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated by doxygen 1.7.1 on Fri May 25 2012 01:02:58 for The Battle for Wesnoth
Gna! | Forum | Wiki | CIA | devdocs