Changed main screen to use gtktreeview isntead of a table of buttons.
[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']
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
42         model = self.create_model()
43         treeview.set_model(model)
44
45         self.add_columns_to_treeview(treeview)
46
47         pannable_area.add(treeview)
48
49         win.add(pannable_area);
50     
51         win.show_all()
52
53     def create_model(self):
54         lstore = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING)
55
56         #get icon and name and put in a liststore
57
58         # temporary hard-coding until we can fetch the data with eveapi
59         # something like:
60         # char list = self.controller.get_characters()
61         char_list = [("Character 1", "avatar.png"), ("Character 2", "avatar.png")]
62
63         for name, icon in char_list:
64             liter = lstore.append()
65             lstore.set(liter, 1, name, 0, self.set_pix(icon))
66
67         return lstore
68
69     def set_pix(self, filename):
70         pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
71         return pixbuf
72
73     def add_columns_to_treeview(self, treeview):
74         #Column 0 for the treeview
75         renderer = gtk.CellRendererPixbuf()
76         column = gtk.TreeViewColumn()
77         column.pack_start(renderer, True)
78         column.add_attribute(renderer, "pixbuf", 0)
79         treeview.append_column(column)
80
81         #Column 1 for the treeview
82         renderer = gtk.CellRendererText()
83         column = gtk.TreeViewColumn('title', renderer, text=1)
84         column.set_property("expand", True)
85         treeview.append_column(column)
86  
87   
88     def settings_clicked(self, button, window):
89    
90         dialog = gtk.Dialog()
91     
92         #get the vbox to pack all the settings into
93         vbox = dialog.vbox
94     
95         dialog.set_transient_for(window)
96         dialog.set_title("Settings")
97
98         uidLabel = gtk.Label("User ID:")
99         uidLabel.set_justify(gtk.JUSTIFY_LEFT)
100         vbox.add(uidLabel)
101         
102         uidEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
103         uidEntry.set_placeholder("User ID")
104         uidEntry.set_text(self.controller.get_uid())
105         uidEntry.set_property('is_focus', False)
106         
107         vbox.add(uidEntry)
108
109         apiLabel = gtk.Label("API key:")
110         apiLabel.set_justify(gtk.JUSTIFY_LEFT)
111         vbox.add(apiLabel)
112         
113         apiEntry = hildon.Entry(gtk.HILDON_SIZE_FINGER_HEIGHT)
114         apiEntry.set_placeholder("API Key")
115         apiEntry.set_text(self.controller.get_api_key())
116         apiEntry.set_property('is_focus', False)
117
118         vbox.add(apiEntry)
119     
120        
121         ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
122         help_button = dialog.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP)
123
124
125         dialog.show_all()
126         result = dialog.run()
127         if result == gtk.RESPONSE_OK:
128             self.controller.set_api_key(apiEntry.get_text())
129             self.controller.set_uid(uidEntry.get_text())
130         
131         dialog.destroy()
132
133         return result
134
135     def about_clicked(self, button):
136     
137         dialog = gtk.AboutDialog()
138         dialog.set_website(self.about_website)
139         dialog.set_website_label(self.about_website)
140         dialog.set_name(self.about_name)
141         dialog.set_authors(self.about_authors)
142         dialog.set_comments(self.about_text)
143         dialog.set_version(self.app_version)
144         dialog.run()
145         dialog.destroy()
146
147     def refresh_clicked(self, button, window):
148         pass
149   
150
151     def create_menu(self, window):
152     
153         menu = hildon.AppMenu()
154
155         for command in self.menu_items:
156             # Create menu entries
157             button = hildon.GtkButton(gtk.HILDON_SIZE_AUTO)
158             button.set_label(command)
159
160             if command == "About":
161                 button.connect("clicked", self.about_clicked)
162             elif command == "Settings":
163                 button.connect("clicked", self.settings_clicked, window)
164             elif command == "Refresh":
165                 button.connect("clicked", self.refresh_clicked, window)
166             else:
167                 assert False, command
168
169             # Add entry to the view menu
170             menu.append(button)
171         
172         menu.show_all()
173
174         return menu
175
176 if __name__ == "__main__":
177     main()
178