initial commit, lordsawar source, slightly modified
[lordsawar] / src / gui / hero-levels-dialog.cpp
1 //  Copyright (C) 2007 Ole Laursen
2 //  Copyright (C) 2007, 2008, 2009 Ben Asselstine
3 //
4 //  This program is free software; you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation; either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU Library General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program; if not, write to the Free Software
16 //  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 
17 //  02110-1301, USA.
18
19 #include <config.h>
20
21 #include <gtkmm.h>
22 #include <sigc++/functors/mem_fun.h>
23
24 #include "hero-levels-dialog.h"
25
26 #include "glade-helpers.h"
27 #include "image-helpers.h"
28 #include "ucompose.hpp"
29 #include "defs.h"
30 #include "playerlist.h"
31 #include "player.h"
32 #include "army.h"
33 #include "armysetlist.h"
34 #include "stack.h"
35 #include "hero.h"
36 #include "GraphicsCache.h"
37
38 void HeroLevelsDialog::init(Player *theplayer)
39 {
40     player = theplayer;
41     
42     Glib::RefPtr<Gtk::Builder> xml
43         = Gtk::Builder::create_from_file(get_glade_path()
44                                     + "/hero-levels-dialog.ui");
45
46     xml->get_widget("dialog", dialog);
47     decorate(dialog);
48     window_closed.connect(sigc::mem_fun(dialog, &Gtk::Dialog::hide));
49
50     heroes_list = Gtk::ListStore::create(heroes_columns);
51     xml->get_widget("treeview", heroes_treeview);
52     heroes_treeview->set_model(heroes_list);
53     heroes_treeview->append_column("", heroes_columns.image);
54     heroes_treeview->append_column(_("Hero"), heroes_columns.name);
55     heroes_treeview->append_column(_("Level"), heroes_columns.level);
56     heroes_treeview->append_column(_("Exp"), heroes_columns.exp);
57     heroes_treeview->append_column(_("Needs"), heroes_columns.needs);
58     heroes_treeview->append_column(_("Str"), heroes_columns.str);
59     heroes_treeview->append_column(_("Move"), heroes_columns.move);
60     heroes_treeview->set_headers_visible(true);
61 }
62
63 HeroLevelsDialog::HeroLevelsDialog(std::list<Hero*> heroes)
64 {
65   init ((*heroes.front()).getOwner());
66           
67   for (std::list<Hero*>::iterator it = heroes.begin(); it != heroes.end(); it++)
68     addHero(*it);
69 }
70
71 HeroLevelsDialog::HeroLevelsDialog(Player *theplayer)
72 {
73
74   init (theplayer);
75   std::list<Hero*> heroes = theplayer->getHeroes();
76   for (std::list<Hero*>::iterator it = heroes.begin(); it != heroes.end(); it++)
77     addHero(*it);
78 }
79
80 HeroLevelsDialog::~HeroLevelsDialog()
81 {
82   delete dialog;
83 }
84 void HeroLevelsDialog::set_parent_window(Gtk::Window &parent)
85 {
86     dialog->set_transient_for(parent);
87     //dialog->set_position(Gtk::WIN_POS_CENTER_ON_PARENT);
88 }
89
90 void HeroLevelsDialog::hide()
91 {
92   dialog->hide();
93 }
94
95 void HeroLevelsDialog::run()
96 {
97     static int width = -1;
98     static int height = -1;
99
100     if (width != -1 && height != -1)
101         dialog->set_default_size(width, height);
102     
103     dialog->show();
104     dialog->run();
105
106     dialog->get_size(width, height);
107
108 }
109
110 void HeroLevelsDialog::addHero(Hero *h)
111 {
112     GraphicsCache *gc = GraphicsCache::getInstance();
113     Gtk::TreeIter i = heroes_list->append();
114     (*i)[heroes_columns.name] = h->getName();
115     (*i)[heroes_columns.image] = gc->getArmyPic(player->getArmyset(),
116                                                 h->getTypeId(), player, NULL)->to_pixbuf();
117     (*i)[heroes_columns.level] = String::ucompose(_("%1"), h->getLevel());
118     (*i)[heroes_columns.exp] = (guint32)h->getXP();
119     (*i)[heroes_columns.needs] = (guint32)h->getXpNeededForNextLevel();
120     (*i)[heroes_columns.str] = h->getStat(Army::STRENGTH, true);
121     (*i)[heroes_columns.move] = h->getStat(Army::MOVES, true);
122 }