c52d4c4e2ceee926c457654a0809af9f0c50c337
[mevemon] / ui / fremantle / ui.py
1
2 # Based on C code from:
3 # "Hildon Tutorial" version 2009-04-28
4 # Example 3.1, "Example of a Hildon application menu"
5
6 import sys
7
8 import gtk
9 import hildon
10 import gobject
11
12 class mEveMonUI():
13
14     about_name = 'mEveMon'
15     about_text = ('Mobile character monitor for EVE Online')
16     about_authors = ['Ryan Campbell', 'Danny Campbell']
17     about_website = 'http://example.site.org'
18     app_version = '0.1'
19
20     menu_items = ("Settings", "About", "Refresh")
21
22     def __init__(self, controller):
23         self.controller = controller
24    
25         gtk.set_application_name("mEveMon")
26     
27         #create the main window
28         win = hildon.StackableWindow()
29         win.connect("destroy", self.controller.quit)
30
31         # Create menu
32         menu = self.create_menu(win)
33         # Attach menu to the window
34         win.set_app_menu(menu)
35
36         pannable_area = hildon.PannableArea()
37
38         # gtk.HILDON_UI_MODE_NORMAL -> not selection in the treeview
39         # gtk.HILDON_UI_MODE_EDIT -> selection in the treeview
40         treeview = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL)
41         treeview.connect('row-activated', self.build_window)
42
43         self.char_model = self.create_char_model()
44         treeview.set_model(self.char_model)
45
46         self.add_columns_to_treeview(treeview)
47
48         pannable_area.add(treeview)
49
50         win.add(pannable_area);
51         
52         win.show_all()
53
54     def build_window(self, treeview, path, view_column):
55         print "triggered treeview"
56         print treeview
57         print path
58         print view_column
59
60     
61     def create_char_model(self):
62         lstore = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING)
63
64         #get icon and name and put in a liststore
65         self.fill_char_model(lstore)
66
67         return lstore
68
69
70     def fill_char_model(self, lstore):
71         char_list = self.controller.get_characters()
72
73         for name, icon in char_list:
74             liter = lstore.append()
75             lstore.set(liter, 1, name, 0, self.set_pix(icon))
76     
77
78     def update_model(self, lstore):
79         lstore.clear()
80         self.fill_char_model(lstore)
81
82
83     def set_pix(self, filename):
84         pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
85         return pixbuf
86
87     
88     def add_columns_to_treeview(self, treeview):
89         #Column 0 for the treeview
90         renderer = gtk.CellRendererPixbuf()
91         column = gtk.TreeViewColumn()
92         column.pack_start(renderer, True)
93         column.add_attribute(renderer, "pixbuf", 0)
94         treeview.append_column(column)
95
96         #Column 1 for the treeview
97         renderer = gtk.CellRendererText()
98         column = gtk.TreeViewColumn('title', renderer, text=1)
99         column.set_property("expand", True)
100         treeview.append_column(column)
101  
102   
103     def settings_clicked(self, button, window):
104         dialog = gtk.Dialog()
105     
106         #get the vbox to pack all the settings into
107         vbox = dialog.vbox
108     
109         dialog.set_transient_for(window)
110         dialog.set_title("Settings")
111
112         uidLabel = gtk.Label("User ID:")
113         uidLabel.set_justify(gtk.JUSTIFY_LEFT)
114         vbox.add(uidLabel)
115         
116         uidEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
117         uidEntry.set_placeholder("User ID")
118         uidEntry.set_text(self.controller.get_uid())
119         uidEntry.set_property('is_focus', False)
120         
121         vbox.add(uidEntry)
122
123         apiLabel = gtk.Label("API key:")
124         apiLabel.set_justify(gtk.JUSTIFY_LEFT)
125         vbox.add(apiLabel)
126         
127         apiEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
128         apiEntry.set_placeholder("API Key")
129         apiEntry.set_text(self.controller.get_api_key())
130         apiEntry.set_property('is_focus', False)
131
132         vbox.add(apiEntry)
133        
134         ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
135         help_button = dialog.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP)
136
137         dialog.show_all()
138         result = dialog.run()
139         if result == gtk.RESPONSE_OK:
140             self.controller.set_api_key(apiEntry.get_text())
141             self.controller.set_uid(uidEntry.get_text())
142             self.update_model(self.char_model)
143         
144         dialog.destroy()
145
146         return result
147
148     
149     def about_clicked(self, button):
150         dialog = gtk.AboutDialog()
151         dialog.set_website(self.about_website)
152         dialog.set_website_label(self.about_website)
153         dialog.set_name(self.about_name)
154         dialog.set_authors(self.about_authors)
155         dialog.set_comments(self.about_text)
156         dialog.set_version(self.app_version)
157         dialog.run()
158         dialog.destroy()
159
160     
161     def refresh_clicked(self, button, window):
162         self.update_model(self.char_model)
163
164     
165     def create_menu(self, window): 
166         menu = hildon.AppMenu()
167
168         for command in self.menu_items:
169             # Create menu entries
170             button = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
171             button.set_label(command)
172
173             if command == "About":
174                 button.connect("clicked", self.about_clicked)
175             elif command == "Settings":
176                 button.connect("clicked", self.settings_clicked, window)
177             elif command == "Refresh":
178                 button.connect("clicked", self.refresh_clicked, window)
179             else:
180                 assert False, command
181
182             # Add entry to the view menu
183             menu.append(button)
184         
185         menu.show_all()
186
187         return menu
188
189
190 if __name__ == "__main__":
191     main()
192