00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
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& , 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
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
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
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
00126
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
00190
00191 } else {
00192
00193
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 }
00206