1 // Copyright (C) 2007, 2008, 2009 Ben Asselstine
3 // This program is free software; you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation; either version 3 of the License, or
6 // (at your option) any later version.
8 // This program is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU Library General Public License for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with this program; if not, write to the Free Software
15 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 #include <sigc++/functors/mem_fun.h>
23 #include "game-options-dialog.h"
25 #include "glade-helpers.h"
26 #include "input-helpers.h"
27 #include "ucompose.hpp"
30 #include "Configuration.h"
31 #include "GameScenarioOptions.h"
33 GameOptionsDialog::GameOptionsDialog(bool readonly)
35 Glib::RefPtr<Gtk::Builder> xml
36 = Gtk::Builder::create_from_file(get_glade_path()
37 + "/game-options-dialog.ui");
39 xml->get_widget("dialog", dialog);
41 window_closed.connect(sigc::mem_fun(dialog, &Gtk::Dialog::hide));
42 dialog->set_icon_from_file(File::getMiscFile("various/castle_icon.png"));
44 d_readonly = readonly;
45 xml->get_widget("difficultoptionstable", difficultoptionstable);
46 xml->get_widget("notdifficultoptionstable", notdifficultoptionstable);
47 xml->get_widget("view_enemies_checkbutton", view_enemies_checkbutton);
48 xml->get_widget("view_production_checkbutton", view_production_checkbutton);
49 xml->get_widget("quests_combobox", quests_combobox);
50 xml->get_widget("hidden_map_checkbutton", hidden_map_checkbutton);
51 xml->get_widget("neutral_combobox", neutral_cities_combobox);
52 xml->get_widget("razing_combobox", razing_cities_combobox);
53 xml->get_widget("diplomacy_checkbutton", diplomacy_checkbutton);
54 xml->get_widget("military_advisor_checkbutton",
55 military_advisor_checkbutton);
56 xml->get_widget("quick_start_combobox", quick_start_combobox);
57 xml->get_widget("cusp_of_war_checkbutton", cusp_of_war_checkbutton);
58 xml->get_widget("intense_combat_checkbutton", intense_combat_checkbutton);
59 xml->get_widget("random_turns_checkbutton", random_turns_checkbutton);
63 GameOptionsDialog::~GameOptionsDialog()
68 void GameOptionsDialog::fill_in_options()
70 neutral_cities_combobox->set_active(GameParameters::AVERAGE);
71 razing_cities_combobox->set_active(GameParameters::ALWAYS);
73 view_enemies_checkbutton->set_active(GameScenarioOptions::s_see_opponents_stacks);
74 view_production_checkbutton->set_active(GameScenarioOptions::s_see_opponents_production);
75 quests_combobox->set_active(int(GameScenarioOptions::s_play_with_quests));
76 hidden_map_checkbutton->set_active(GameScenarioOptions::s_hidden_map);
77 neutral_cities_combobox->set_active(int(GameScenarioOptions::s_neutral_cities));
78 razing_cities_combobox->set_active(int(GameScenarioOptions::s_razing_cities));
79 diplomacy_checkbutton->set_active(GameScenarioOptions::s_diplomacy);
80 military_advisor_checkbutton->set_active(GameScenarioOptions::s_military_advisor);
81 quick_start_combobox->set_active(Configuration::s_quick_start);
82 cusp_of_war_checkbutton->set_active(GameScenarioOptions::s_cusp_of_war);
83 cusp_of_war_checkbutton->set_sensitive(diplomacy_checkbutton->get_active());
84 intense_combat_checkbutton->set_active(GameScenarioOptions::s_intense_combat);
85 random_turns_checkbutton->set_active(GameScenarioOptions::s_random_turns);
88 difficultoptionstable->set_sensitive(false);
89 notdifficultoptionstable->set_sensitive(false);
92 void GameOptionsDialog::set_parent_window(Gtk::Window &parent)
94 dialog->set_transient_for(parent);
95 //dialog->set_position(Gtk::WIN_POS_CENTER_ON_PARENT);
98 void GameOptionsDialog::hide()
103 bool GameOptionsDialog::run()
105 std::list<sigc::connection> connections;
108 connections.push_back
109 (view_enemies_checkbutton->signal_clicked().connect
111 (this, &GameOptionsDialog::on_view_enemies_checkbutton_clicked)));
112 connections.push_back
113 (view_production_checkbutton->signal_clicked().connect
115 (this, &GameOptionsDialog::on_view_production_checkbutton_clicked)));
116 connections.push_back
117 (quests_combobox->signal_changed().connect
119 (this, &GameOptionsDialog::on_quests_combobox_changed)));
120 connections.push_back
121 (hidden_map_checkbutton->signal_clicked().connect
123 (this, &GameOptionsDialog::on_hidden_map_checkbutton_clicked)));
124 connections.push_back
125 (neutral_cities_combobox->signal_changed().connect
127 (this, &GameOptionsDialog::on_neutral_cities_combobox_changed)));
128 connections.push_back
129 (razing_cities_combobox->signal_changed().connect
131 (this, &GameOptionsDialog::on_razing_cities_combobox_changed)));
132 connections.push_back
133 (diplomacy_checkbutton->signal_clicked().connect
135 (this, &GameOptionsDialog::on_diplomacy_checkbutton_clicked)));
136 connections.push_back
137 (cusp_of_war_checkbutton->signal_clicked().connect
139 (this, &GameOptionsDialog::on_cusp_of_war_checkbutton_clicked)));
140 connections.push_back
141 (random_turns_checkbutton->signal_clicked().connect
143 (this, &GameOptionsDialog::on_random_turns_checkbutton_clicked)));
144 connections.push_back
145 (quick_start_combobox->signal_changed().connect
147 (this, &GameOptionsDialog::on_quick_start_combobox_changed)));
148 connections.push_back
149 (intense_combat_checkbutton->signal_clicked().connect
151 (this, &GameOptionsDialog::on_intense_combat_checkbutton_clicked)));
152 connections.push_back
153 (military_advisor_checkbutton->signal_clicked().connect
155 (this, &GameOptionsDialog::on_military_advisor_checkbutton_clicked)));
159 std::list<sigc::connection>::iterator it = connections.begin();
160 for (; it != connections.end(); it++)
164 g.see_opponents_stacks = view_enemies_checkbutton->get_active();
165 GameScenarioOptions::s_see_opponents_stacks = g.see_opponents_stacks;
166 g.see_opponents_production = view_production_checkbutton->get_active();
167 GameScenarioOptions::s_see_opponents_production = g.see_opponents_production;
168 g.play_with_quests = GameParameters::QuestPolicy (
169 quests_combobox->get_active_row_number());
170 GameScenarioOptions::s_play_with_quests = g.play_with_quests;
172 g.hidden_map = hidden_map_checkbutton->get_active();
173 GameScenarioOptions::s_hidden_map = g.hidden_map;
175 g.neutral_cities = GameParameters::NeutralCities (
176 neutral_cities_combobox->get_active_row_number());
177 GameScenarioOptions::s_neutral_cities = g.neutral_cities;
178 g.razing_cities = GameParameters::RazingCities (
179 razing_cities_combobox->get_active_row_number());
180 GameScenarioOptions::s_razing_cities = g.razing_cities;
182 g.diplomacy = diplomacy_checkbutton->get_active();
183 GameScenarioOptions::s_diplomacy = g.diplomacy;
184 g.random_turns = random_turns_checkbutton->get_active();
185 GameScenarioOptions::s_random_turns = g.random_turns;
186 g.quick_start = GameParameters::QuickStartPolicy(
187 quick_start_combobox->get_active_row_number());
188 Configuration::s_quick_start = g.quick_start;
189 g.cusp_of_war = cusp_of_war_checkbutton->get_active();
190 GameScenarioOptions::s_cusp_of_war = g.cusp_of_war;
191 g.intense_combat = intense_combat_checkbutton->get_active();
192 GameScenarioOptions::s_intense_combat = g.intense_combat;
193 g.military_advisor = military_advisor_checkbutton->get_active();
194 GameScenarioOptions::s_military_advisor = g.military_advisor;
195 //save it all to Configuration too
196 Configuration::s_see_opponents_stacks =
197 GameScenarioOptions::s_see_opponents_stacks;
198 Configuration::s_see_opponents_production =
199 GameScenarioOptions::s_see_opponents_production;
200 Configuration::s_play_with_quests = GameScenarioOptions::s_play_with_quests;
201 Configuration::s_hidden_map = GameScenarioOptions::s_hidden_map;
202 Configuration::s_neutral_cities = GameScenarioOptions::s_neutral_cities;
203 Configuration::s_razing_cities = GameScenarioOptions::s_razing_cities;
204 Configuration::s_diplomacy = GameScenarioOptions::s_diplomacy;
205 Configuration::s_random_turns = GameScenarioOptions::s_random_turns;
206 Configuration::s_cusp_of_war = GameScenarioOptions::s_cusp_of_war;
207 Configuration::s_intense_combat = GameScenarioOptions::s_intense_combat;
208 Configuration::s_military_advisor = GameScenarioOptions::s_military_advisor;
209 Configuration::saveConfigurationFile(Configuration::configuration_file_path);
214 void GameOptionsDialog::on_view_enemies_checkbutton_clicked()
216 GameScenarioOptions::s_see_opponents_stacks =
217 view_enemies_checkbutton->get_active();
218 difficulty_option_changed.emit();
220 void GameOptionsDialog::on_view_production_checkbutton_clicked()
222 GameScenarioOptions::s_see_opponents_production =
223 view_production_checkbutton->get_active();
224 difficulty_option_changed.emit();
226 void GameOptionsDialog::on_quests_combobox_changed()
228 GameScenarioOptions::s_play_with_quests = GameParameters::QuestPolicy
229 (quests_combobox->get_active_row_number());
230 difficulty_option_changed.emit();
232 void GameOptionsDialog::on_hidden_map_checkbutton_clicked()
234 GameScenarioOptions::s_hidden_map = hidden_map_checkbutton->get_active();
235 difficulty_option_changed.emit();
237 void GameOptionsDialog::on_neutral_cities_combobox_changed()
239 GameScenarioOptions::s_neutral_cities = GameParameters::NeutralCities
240 (neutral_cities_combobox->get_active_row_number());
241 difficulty_option_changed.emit();
243 void GameOptionsDialog::on_razing_cities_combobox_changed()
245 GameScenarioOptions::s_razing_cities = GameParameters::RazingCities
246 (razing_cities_combobox->get_active_row_number());
247 difficulty_option_changed.emit();
249 void GameOptionsDialog::on_diplomacy_checkbutton_clicked()
251 if (diplomacy_checkbutton->get_active() == true)
252 cusp_of_war_checkbutton->set_sensitive(true);
254 cusp_of_war_checkbutton->set_sensitive(false);
255 GameScenarioOptions::s_diplomacy = diplomacy_checkbutton->get_active();
256 difficulty_option_changed.emit();
258 void GameOptionsDialog::on_cusp_of_war_checkbutton_clicked()
260 GameScenarioOptions::s_cusp_of_war = cusp_of_war_checkbutton->get_active();
261 difficulty_option_changed.emit();
263 void GameOptionsDialog::on_random_turns_checkbutton_clicked()
265 GameScenarioOptions::s_random_turns = random_turns_checkbutton->get_active();
267 void GameOptionsDialog::on_quick_start_combobox_changed()
269 Configuration::s_quick_start = GameParameters::QuickStartPolicy
270 (quick_start_combobox->get_active_row_number());
271 difficulty_option_changed.emit();
273 void GameOptionsDialog::on_intense_combat_checkbutton_clicked()
275 GameScenarioOptions::s_intense_combat = intense_combat_checkbutton->get_active();
277 void GameOptionsDialog::on_military_advisor_checkbutton_clicked()
279 GameScenarioOptions::s_military_advisor =
280 military_advisor_checkbutton->get_active();