add a 'clear cache' button in the settings
[mevemon] / package / src / ui / fremantle / gui.py
1 #
2 # mEveMon - A character monitor for EVE Online
3 # Copyright (c) 2010  Ryan and Danny Campbell, and the mEveMon Team
4 #
5 # mEveMon is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # mEveMon is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
17 #
18
19 import gtk
20 import hildon
21 import gobject
22
23 from ui.fremantle.characterSheet import CharacterSheetUI
24 import ui.models as models
25 from ui.fremantle.menu import Menu
26
27 class mEveMonUI:
28     def __init__(self, controller):
29         self.controller = controller
30         gtk.set_application_name("mEveMon")
31
32     def run(self):
33         # create the main window
34         self.win = hildon.StackableWindow()
35         self.win.connect("destroy", self.controller.quit)
36         self.win.show_all()
37         hildon.hildon_gtk_window_set_progress_indicator(self.win, 1)
38
39         # Create menu
40         menu = Menu(self.win, self.controller)
41         menu.set_refresh_cb(self.refresh_clicked)
42         # Attach menu to the window
43         self.win.set_app_menu(menu)
44
45         pannable_area = hildon.PannableArea()
46         
47         # gtk.HILDON_UI_MODE_NORMAL -> not selection in the treeview
48         # gtk.HILDON_UI_MODE_EDIT -> selection in the treeview
49         self.treeview = CharactersTreeView(gtk.HILDON_UI_MODE_NORMAL, self.controller)
50         self.treeview.connect('row-activated', self.do_charactersheet)
51
52         pannable_area.add(self.treeview)
53         self.win.add(pannable_area);
54         self.win.show_all()
55
56         hildon.hildon_gtk_window_set_progress_indicator(self.win, 0)
57
58     def refresh_clicked(self, button):
59         hildon.hildon_gtk_window_set_progress_indicator(self.win, 1)
60         self.treeview.refresh()
61         hildon.hildon_gtk_window_set_progress_indicator(self.win, 0)
62
63     def do_charactersheet(self, treeview, path, view_column):
64         model = treeview.get_model()
65         miter = model.get_iter(path)
66         
67         # column 0 is the portrait, column 1 is name
68         char_name = model.get_value(miter, 1)
69         uid = model.get_value(miter, 2)
70         
71         if uid:
72             CharacterSheetUI(self.controller, char_name, uid)
73         else:
74             pass
75     
76     def report_error(self, error):
77         hildon.hildon_banner_show_information(self.win.get_toplevel(), '', error)
78
79
80 class CharactersTreeView(hildon.GtkTreeView):
81     def __init__(self, mode, controller):
82         self.controller = controller
83         hildon.GtkTreeView.__init__(self, mode)
84
85         self.char_model = models.CharacterListModel(self.controller)
86         self.set_model(self.char_model)
87         self.add_columns()
88
89     def add_columns(self):
90         #Column 0 for the treeview
91         renderer = gtk.CellRendererPixbuf()
92         column = gtk.TreeViewColumn()
93         column.pack_start(renderer, True)
94         column.add_attribute(renderer, "pixbuf", 
95                 models.CharacterListModel.C_PORTRAIT)
96         self.append_column(column)
97
98         #Column 1 for the treeview
99         renderer = gtk.CellRendererText()
100         column = gtk.TreeViewColumn('Character Name', renderer, 
101                 text=models.CharacterListModel.C_NAME)
102         column.set_property("expand", True)
103         self.append_column(column)
104
105     def refresh(self):
106         self.char_model.get_characters()
107