1
// Copyright (C) 2008, 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 2 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
20
#include <libglademm/xml.h>
21
#include <sigc++/functors/mem_fun.h>
23
#include "reward-dialog.h"
25
#include "glade-helpers.h"
26
#include "../ucompose.hpp"
28
#include "../reward.h"
32
#include "../GameMap.h"
33
#include "select-item-dialog.h"
34
#include "select-army-dialog.h"
35
#include "select-hidden-ruin-dialog.h"
37
RewardDialog::RewardDialog(Player *player, bool hidden_ruins, Reward *r)
40
d_hidden_ruins = hidden_ruins;
46
Glib::RefPtr<Gnome::Glade::Xml> xml
47
= Gnome::Glade::Xml::create(get_glade_path()
48
+ "/reward-dialog.glade");
51
xml->get_widget("dialog", d);
54
xml->get_widget("gold_hbox", gold_hbox);
55
xml->get_widget("gold_radiobutton", gold_radiobutton);
56
gold_radiobutton->signal_toggled().connect
57
(sigc::mem_fun(*this, &RewardDialog::on_gold_toggled));
58
xml->get_widget("item_hbox", item_hbox);
59
xml->get_widget("item_radiobutton", item_radiobutton);
60
item_radiobutton->signal_toggled().connect
61
(sigc::mem_fun(*this, &RewardDialog::on_item_toggled));
62
xml->get_widget("allies_hbox", allies_hbox);
63
xml->get_widget("allies_radiobutton", allies_radiobutton);
64
allies_radiobutton->signal_toggled().connect
65
(sigc::mem_fun(*this, &RewardDialog::on_allies_toggled));
66
xml->get_widget("map_hbox", map_hbox);
67
xml->get_widget("map_radiobutton", map_radiobutton);
68
map_radiobutton->signal_toggled().connect
69
(sigc::mem_fun(*this, &RewardDialog::on_map_toggled));
70
xml->get_widget("hidden_ruin_hbox", hidden_ruin_hbox);
71
xml->get_widget("hidden_ruin_radiobutton", hidden_ruin_radiobutton);
72
hidden_ruin_radiobutton->signal_toggled().connect
73
(sigc::mem_fun(*this, &RewardDialog::on_hidden_ruin_toggled));
74
xml->get_widget("gold_spinbutton", gold_spinbutton);
75
xml->get_widget("randomize_gold_button", randomize_gold_button);
76
randomize_gold_button->signal_clicked().connect
77
(sigc::mem_fun(*this, &RewardDialog::on_randomize_gold_clicked));
79
xml->get_widget("item_button", item_button);
80
item_button->signal_clicked().connect
81
(sigc::mem_fun(*this, &RewardDialog::on_item_clicked));
82
xml->get_widget("clear_item_button", clear_item_button);
83
clear_item_button->signal_clicked().connect
84
(sigc::mem_fun(*this, &RewardDialog::on_clear_item_clicked));
85
xml->get_widget("randomize_item_button", randomize_item_button);
86
randomize_item_button->signal_clicked().connect
87
(sigc::mem_fun(*this, &RewardDialog::on_randomize_item_clicked));
90
xml->get_widget("num_allies_spinbutton", num_allies_spinbutton);
91
xml->get_widget("ally_button", ally_button);
92
ally_button->signal_clicked().connect
93
(sigc::mem_fun(*this, &RewardDialog::on_ally_clicked));
94
xml->get_widget("clear_ally_button", clear_ally_button);
95
clear_ally_button->signal_clicked().connect
96
(sigc::mem_fun(*this, &RewardDialog::on_clear_ally_clicked));
97
xml->get_widget("randomize_allies_button", randomize_allies_button);
98
randomize_allies_button->signal_clicked().connect
99
(sigc::mem_fun(*this, &RewardDialog::on_randomize_allies_clicked));
102
xml->get_widget("map_x_spinbutton", map_x_spinbutton);
103
xml->get_widget("map_y_spinbutton", map_y_spinbutton);
104
xml->get_widget("map_width_spinbutton", map_width_spinbutton);
105
xml->get_widget("map_height_spinbutton", map_height_spinbutton);
106
xml->get_widget("randomize_map_button", randomize_map_button);
107
randomize_map_button->signal_clicked().connect
108
(sigc::mem_fun(*this, &RewardDialog::on_randomize_map_clicked));
109
map_x_spinbutton->set_range (0, GameMap::getInstance()->getWidth() - 1);
110
map_y_spinbutton->set_range (0, GameMap::getInstance()->getHeight() - 1);
111
map_width_spinbutton->set_range (1, GameMap::getInstance()->getWidth());
112
map_height_spinbutton->set_range (1, GameMap::getInstance()->getHeight());
114
xml->get_widget("hidden_ruin_button", hidden_ruin_button);
115
hidden_ruin_button->signal_clicked().connect
116
(sigc::mem_fun(*this, &RewardDialog::on_hidden_ruin_clicked));
117
xml->get_widget("clear_hidden_ruin_button", clear_hidden_ruin_button);
118
clear_hidden_ruin_button->signal_clicked().connect
119
(sigc::mem_fun(*this, &RewardDialog::on_clear_hidden_ruin_clicked));
120
xml->get_widget("randomize_hidden_ruin_button", randomize_hidden_ruin_button);
121
randomize_hidden_ruin_button->signal_clicked().connect
122
(sigc::mem_fun(*this, &RewardDialog::on_randomize_hidden_ruin_clicked));
123
set_hidden_ruin_name();
124
hidden_ruin_radiobutton->set_sensitive(hidden_ruins);
128
if (r->getType() == Reward::ITEM)
130
reward = new Reward_Item(*static_cast<Reward_Item*>(r));
131
item = static_cast<Reward_Item*>(reward)->getItem();
133
else if (r->getType() == Reward::ALLIES)
135
reward = new Reward_Allies(*static_cast<Reward_Allies*>(r));
136
ally = new Army(*static_cast<Reward_Allies*>(reward)->getArmy());
138
else if (r->getType() == Reward::RUIN)
140
reward = new Reward_Ruin(*static_cast<Reward_Ruin*>(r));
141
hidden_ruin = new Ruin(*static_cast<Reward_Ruin*>(reward)->getRuin());
143
else if (r->getType() == Reward::MAP)
144
reward = new Reward_Map(*static_cast<Reward_Map*>(r));
145
else if (r->getType() == Reward::GOLD)
146
reward = new Reward_Gold(*static_cast<Reward_Gold*>(r));
150
fill_in_reward_info();
153
void RewardDialog::fill_in_reward_info()
155
if (reward->getType() == Reward::GOLD)
157
Reward_Gold *r = static_cast<Reward_Gold*>(reward);
158
gold_spinbutton->set_value(r->getGold());
159
gold_radiobutton->set_active(true);
161
else if (reward->getType() == Reward::ITEM)
164
item_radiobutton->set_active(true);
166
else if (reward->getType() == Reward::ALLIES)
168
Reward_Allies *r = static_cast<Reward_Allies*>(reward);
169
num_allies_spinbutton->set_value(r->getNoOfAllies());
171
allies_radiobutton->set_active(true);
173
else if (reward->getType() == Reward::MAP)
175
Reward_Map *r = static_cast<Reward_Map*>(reward);
176
map_x_spinbutton->set_value(r->getPos().x);
177
map_y_spinbutton->set_value(r->getPos().y);
178
map_width_spinbutton->set_value(r->getWidth());
179
map_height_spinbutton->set_value(r->getHeight());
180
map_radiobutton->set_active(true);
182
else if (reward->getType() == Reward::RUIN)
184
set_hidden_ruin_name();
185
hidden_ruin_radiobutton->set_active(true);
188
//reward holds a reward
191
void RewardDialog::set_parent_window(Gtk::Window &parent)
193
dialog->set_transient_for(parent);
194
//dialog->set_position(Gtk::WIN_POS_CENTER_ON_PARENT);
197
void RewardDialog::run()
200
int response = dialog->run();
202
if (response == 0) // accepted
204
if (gold_radiobutton->get_active() == true)
205
reward = new Reward_Gold(gold_spinbutton->get_value_as_int());
206
else if (item_radiobutton->get_active() == true && item)
207
reward = new Reward_Item(item);
208
else if (allies_radiobutton->get_active() == true && ally)
209
reward = new Reward_Allies(ally,
210
num_allies_spinbutton->get_value_as_int());
211
else if (map_radiobutton->get_active() == true)
212
reward = new Reward_Map
213
(Vector<int>(map_x_spinbutton->get_value_as_int(),
214
map_y_spinbutton->get_value_as_int()), "",
215
map_height_spinbutton->get_value_as_int(),
216
map_width_spinbutton->get_value_as_int());
217
else if (hidden_ruin_radiobutton->get_active() == true && hidden_ruin)
218
reward = new Reward_Ruin(hidden_ruin);
231
reward->setName(reward->getDescription());
244
void RewardDialog::on_gold_toggled()
246
gold_hbox->set_sensitive(true);
247
item_hbox->set_sensitive(false);
248
allies_hbox->set_sensitive(false);
249
map_hbox->set_sensitive(false);
250
hidden_ruin_hbox->set_sensitive(false);
253
void RewardDialog::on_item_toggled()
255
gold_hbox->set_sensitive(false);
256
item_hbox->set_sensitive(true);
257
allies_hbox->set_sensitive(false);
258
map_hbox->set_sensitive(false);
259
hidden_ruin_hbox->set_sensitive(false);
262
void RewardDialog::on_allies_toggled()
264
gold_hbox->set_sensitive(false);
265
item_hbox->set_sensitive(false);
266
allies_hbox->set_sensitive(true);
267
map_hbox->set_sensitive(false);
268
hidden_ruin_hbox->set_sensitive(false);
271
void RewardDialog::on_map_toggled()
273
gold_hbox->set_sensitive(false);
274
item_hbox->set_sensitive(false);
275
allies_hbox->set_sensitive(false);
276
map_hbox->set_sensitive(true);
277
hidden_ruin_hbox->set_sensitive(false);
280
void RewardDialog::on_hidden_ruin_toggled()
282
gold_hbox->set_sensitive(false);
283
item_hbox->set_sensitive(false);
284
allies_hbox->set_sensitive(false);
285
map_hbox->set_sensitive(false);
286
hidden_ruin_hbox->set_sensitive(true);
289
void RewardDialog::on_randomize_gold_clicked()
291
gold_spinbutton->set_value(Reward_Gold::getRandomGoldPieces());
294
void RewardDialog::on_item_clicked()
298
if (d.get_selected_item())
300
on_clear_item_clicked();
301
item = new Item(*(d.get_selected_item()));
306
void RewardDialog::on_clear_item_clicked()
316
void RewardDialog::on_randomize_item_clicked()
318
on_clear_item_clicked();
319
item = Reward_Item::getRandomItem();
323
void RewardDialog::set_item_name()
327
name = item->getName();
331
item_button->set_label(name);
334
void RewardDialog::on_ally_clicked()
336
SelectArmyDialog d(d_player, false, true);
338
if (d.get_selected_army())
340
on_clear_ally_clicked();
341
ally = new Army(*(d.get_selected_army()));
346
void RewardDialog::on_clear_ally_clicked()
356
void RewardDialog::on_randomize_allies_clicked()
358
const Army *a = Reward_Allies::randomArmyAlly();
362
on_clear_ally_clicked();
364
num_allies_spinbutton->set_value(Reward_Allies::getRandomAmountOfAllies());
369
void RewardDialog::set_ally_name()
373
name = ally->getName();
377
ally_button->set_label(name);
380
void RewardDialog::on_randomize_map_clicked()
382
int x, y, width, height;
383
Reward_Map::getRandomMap(&x, &y, &width, &height);
384
map_x_spinbutton->set_value(x);
385
map_y_spinbutton->set_value(y);
386
map_width_spinbutton->set_value(width);
387
map_height_spinbutton->set_value(height);
390
void RewardDialog::on_hidden_ruin_clicked()
392
SelectHiddenRuinDialog d;
394
if (d.get_selected_hidden_ruin())
396
on_clear_hidden_ruin_clicked();
397
hidden_ruin = new Ruin(*(d.get_selected_hidden_ruin()));
398
set_hidden_ruin_name();
402
void RewardDialog::on_clear_hidden_ruin_clicked()
409
set_hidden_ruin_name();
412
void RewardDialog::on_randomize_hidden_ruin_clicked()
414
Ruin *ruin = Reward_Ruin::getRandomHiddenRuin();
417
on_clear_hidden_ruin_clicked();
418
hidden_ruin = new Ruin(*ruin);
419
set_hidden_ruin_name();
423
void RewardDialog::set_hidden_ruin_name()
427
name = hidden_ruin->getName();
431
hidden_ruin_button->set_label(name);