Added Ry's character portrait/name code to Diablo UI.
[mevemon] / ui / diablo / ui.py
1
2 # Based on Ry's Fremantle Python code. --danny
3
4 import sys
5
6 import gtk
7 import hildon
8 import gobject
9
10 class mEveMonUI():
11
12     about_name = 'mEveMon'
13     about_text = ('Mobile character monitor for EVE Online')
14     about_authors = ['Ryan Campbell','Danny Campbell']
15     about_website = 'http://example.site.org'
16     app_version = '0.1'
17
18     menu_items = ("Settings", "About", "Refresh")
19
20     def __init__(self, controller):
21         self.controller = controller
22    
23         gtk.set_application_name("mEveMon")
24     
25         # create the main window, changing from StackableWindow() --danny
26         win = hildon.Window()
27         win.connect("destroy", self.controller.quit)
28
29         # Create menu
30         menu = self.create_menu(win)
31         # Attach menu to the window, changed from set_app_menu() --danny
32         win.set_menu(menu)
33
34         # will probably need to refer to http://maemo.org/community/maemo-developers/gtktreeview_issue/ for sample code again when we make these clickable --danny
35         model = self.create_model()
36         treeview = gtk.TreeView( model = model )
37         treeview.set_model(model)
38         self.add_columns_to_treeview(treeview)
39
40         win.add(treeview)
41         win.show_all()
42   
43     def create_model(self):
44         lstore = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING)
45
46         #get icon and name and put in a liststore
47
48         # temporary hard-coding until we can fetch the data with eveapi
49         # something like:
50         # char list = self.controller.get_characters()
51         char_list = [("Character 1", "avatar.png"), ("Character 2", "avatar.png")]
52
53         for name, icon in char_list:
54             liter = lstore.append()
55             lstore.set(liter, 1, name, 0, self.set_pix(icon))
56
57         return lstore
58
59     def set_pix(self, filename):
60         pixbuf = gtk.gdk.pixbuf_new_from_file(filename)
61         return pixbuf
62
63     def add_columns_to_treeview(self, treeview):
64         #Column 0 for the treeview
65         renderer = gtk.CellRendererPixbuf()
66         column = gtk.TreeViewColumn()
67         column.pack_start(renderer, True)
68         column.add_attribute(renderer, "pixbuf", 0)
69         treeview.append_column(column)
70
71         #Column 1 for the treeview
72         renderer = gtk.CellRendererText()
73         column = gtk.TreeViewColumn('title', renderer, text=1)
74         column.set_property("expand", True)
75         treeview.append_column(column)
76  
77
78     def settings_clicked(self, button, window):
79    
80         dialog = gtk.Dialog()
81     
82         #get the vbox to pack all the settings into
83         vbox = dialog.vbox
84     
85         dialog.set_transient_for(window)
86         dialog.set_title("Settings")
87
88         uidLabel = gtk.Label("User ID:")
89         uidLabel.set_justify(gtk.JUSTIFY_LEFT)
90         vbox.add(uidLabel)
91         
92         # had to remove placeholder stuff --danny
93         uidEntry = gtk.Entry()
94         uidEntry.set_text(self.controller.get_uid())
95         uidEntry.set_property('is_focus', False)
96         
97         vbox.add(uidEntry)
98
99         apiLabel = gtk.Label("API key:")
100         apiLabel.set_justify(gtk.JUSTIFY_LEFT)
101         vbox.add(apiLabel)
102         
103         # had to remove placeholder stuff --danny
104         apiEntry = gtk.Entry()
105         apiEntry.set_text(self.controller.get_api_key())
106         apiEntry.set_property('is_focus', False)
107
108         vbox.add(apiEntry)
109            
110         ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK)
111         help_button = dialog.add_button(gtk.STOCK_HELP, gtk.RESPONSE_HELP)
112
113
114         dialog.show_all()
115         result = dialog.run()
116
117         if result == gtk.RESPONSE_OK:
118             self.controller.set_api_key(apiEntry.get_text())
119             self.controller.set_uid(uidEntry.get_text())
120         
121         dialog.destroy()
122
123         return result
124
125     def about_clicked(self, button):
126     
127         dialog = gtk.AboutDialog()
128         dialog.set_website(self.about_website)
129         dialog.set_website_label(self.about_website)
130         dialog.set_name(self.about_name)
131         dialog.set_authors(self.about_authors)
132         dialog.set_comments(self.about_text)
133         dialog.set_version(self.app_version)
134         dialog.run()
135         dialog.destroy()
136
137     def refresh_clicked(self, button, window):
138         pass
139   
140
141     def create_menu(self, window):
142     
143         # changed from hildon.AppMenu --danny
144         menu = gtk.Menu()
145
146         for command in self.menu_items:
147             # Create menu entries, changed from hildon.GtkButton() --danny
148             button = gtk.MenuItem( command )
149
150             if command == "About":
151                 button.connect("activate", self.about_clicked)
152             elif command == "Settings":
153                 button.connect("activate", self.settings_clicked, window)
154             elif command == "Refresh":
155                 button.connect("activate", self.refresh_clicked, window)
156             else:
157                 assert False, command
158
159             # Add entry to the view menu
160             menu.append(button)
161         
162         menu.show_all()
163
164         return menu
165
166 if __name__ == "__main__":
167     main()
168