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