Refactor Fremantule UI code and implement logging
[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 import validation
26 from ui.fremantle.menu import Menu
27
28 class mEveMonUI:
29     def __init__(self, controller):
30         self.controller = controller
31         gtk.set_application_name("mEveMon")
32
33     def run(self):
34         # create the main window
35         self.win = hildon.StackableWindow()
36         self.win.connect("destroy", self.controller.quit)
37         self.win.show_all()
38         hildon.hildon_gtk_window_set_progress_indicator(self.win, 1)
39
40         # Create menu
41         menu = Menu(self.win, self.controller)
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
77 class CharactersTreeView(hildon.GtkTreeView):
78     def __init__(self, mode, controller):
79         self.controller = controller
80         hildon.GtkTreeView.__init__(self, mode)
81
82         self.char_model = models.CharacterListModel(self.controller)
83         self.set_model(self.char_model)
84         self.add_columns()
85
86     def add_columns(self):
87         #Column 0 for the treeview
88         renderer = gtk.CellRendererPixbuf()
89         column = gtk.TreeViewColumn()
90         column.pack_start(renderer, True)
91         column.add_attribute(renderer, "pixbuf", 
92                 models.CharacterListModel.C_PORTRAIT)
93         self.append_column(column)
94
95         #Column 1 for the treeview
96         renderer = gtk.CellRendererText()
97         column = gtk.TreeViewColumn('Character Name', renderer, 
98                 text=models.CharacterListModel.C_NAME)
99         column.set_property("expand", True)
100         self.append_column(column)
101
102     def refresh():
103         self.char_model.get_characters()