X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=package%2Fsrc%2Fui%2Ffremantle%2Fgui.py;h=eff19ebdcfffb836b7344c4ba5518260484a5eb6;hb=ccf1c442fe0ef0721110a089b0007351b451a397;hp=77abf2f68fc50850633602317bcf4ee7acccc30d;hpb=636f160cda0e5d579fd1279fde0e8afc0cb3790b;p=mevemon diff --git a/package/src/ui/fremantle/gui.py b/package/src/ui/fremantle/gui.py index 77abf2f..eff19eb 100644 --- a/package/src/ui/fremantle/gui.py +++ b/package/src/ui/fremantle/gui.py @@ -22,15 +22,21 @@ import gtk import hildon import gobject +import glib + +import validation + from ui import models class BaseUI(): about_name = 'mEveMon' about_text = ('Mobile character monitor for EVE Online') - about_authors = ['Ryan Campbell', 'Danny Campbell'] + about_authors = ['Ryan Campbell ', + 'Danny Campbell '] + about_website = 'http://mevemon.garage.maemo.org' - app_version = '0.2' + app_version = '0.4' menu_items = ("Settings", "About", "Refresh") @@ -53,7 +59,7 @@ class BaseUI(): # Add entry to the view menu menu.append(button) - + menu.show_all() return menu @@ -72,15 +78,16 @@ class BaseUI(): vbox = gtk.VBox(False, 1) - acctsLabel = gtk.Label("Accounts:") - acctsLabel.set_justify(gtk.JUSTIFY_LEFT) + #acctsLabel = gtk.Label("Accounts:") + #acctsLabel.set_justify(gtk.JUSTIFY_LEFT) - vbox.pack_start(acctsLabel, False, False, 1) + #vbox.pack_start(acctsLabel, False, False, 1) self.accounts_model = models.AccountsModel(self.controller) accounts_treeview = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL) accounts_treeview.set_model(self.accounts_model) + accounts_treeview.set_headers_visible(True) self.add_columns_to_accounts(accounts_treeview) vbox.pack_start(accounts_treeview, False, False, 1) @@ -101,9 +108,9 @@ class BaseUI(): while(result != gtk.RESPONSE_DELETE_EVENT): if result == RESPONSE_NEW: self.new_account_clicked(window) - elif result == RESPONSE_EDIT: - # get the selected treeview item and pop up the account_box - self.edit_account(accounts_treeview) + #elif result == RESPONSE_EDIT: + # # get the selected treeview item and pop up the account_box + # self.edit_account(accounts_treeview) elif result == RESPONSE_DELETE: # get the selected treeview item, and delete the gconf keys self.delete_account(accounts_treeview) @@ -139,10 +146,16 @@ class BaseUI(): def add_columns_to_accounts(self, treeview): #Column 0 for the treeview renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn('Account ID', renderer, text=0) + column = gtk.TreeViewColumn('User ID', renderer, + text=models.AccountsModel.C_UID) column.set_property("expand", True) treeview.append_column(column) + #Column 2 (characters) for the treeview + column = gtk.TreeViewColumn('Characters', renderer, + markup=models.AccountsModel.C_CHARS) + column.set_property("expand", True) + treeview.append_column(column) def new_account_clicked(self, window): dialog = gtk.Dialog() @@ -176,17 +189,35 @@ class BaseUI(): ok_button = dialog.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) dialog.show_all() + result = dialog.run() - if result == gtk.RESPONSE_OK: - self.controller.add_account(uidEntry.get_text(), apiEntry.get_text()) - self.accounts_model.get_accounts() - + valid_credentials = False + + while not valid_credentials: + if result == gtk.RESPONSE_OK: + uid = uidEntry.get_text() + api_key = apiEntry.get_text() + + try: + validation.uid(uid) + validation.api_key(api_key) + except validation.ValidationError, e: + self.report_error(e.message) + result = dialog.run() + else: + valid_credentials = True + self.controller.add_account(uid, api_key) + self.accounts_model.get_accounts() + else: + break + dialog.destroy() - return result + + def report_error(self, error): + hildon.hildon_banner_show_information(self.win, '', error) - def about_clicked(self, button): dialog = gtk.AboutDialog() dialog.set_website(self.about_website) @@ -207,6 +238,8 @@ class BaseUI(): box.pack_start(label, False, False, padding) + return label + class mEveMonUI(BaseUI): @@ -215,15 +248,15 @@ class mEveMonUI(BaseUI): gtk.set_application_name("mEveMon") #create the main window - win = hildon.StackableWindow() - win.connect("destroy", self.controller.quit) - win.show_all() - hildon.hildon_gtk_window_set_progress_indicator(win, 1) + self.win = hildon.StackableWindow() + self.win.connect("destroy", self.controller.quit) + self.win.show_all() + hildon.hildon_gtk_window_set_progress_indicator(self.win, 1) # Create menu - menu = self.create_menu(win) + menu = self.create_menu(self.win) # Attach menu to the window - win.set_app_menu(menu) + self.win.set_app_menu(menu) pannable_area = hildon.PannableArea() @@ -241,11 +274,11 @@ class mEveMonUI(BaseUI): pannable_area.add(treeview) - win.add(pannable_area); + self.win.add(pannable_area); - win.show_all() + self.win.show_all() - hildon.hildon_gtk_window_set_progress_indicator(win, 0) + hildon.hildon_gtk_window_set_progress_indicator(self.win, 0) def add_columns_to_treeview(self, treeview): @@ -253,12 +286,14 @@ class mEveMonUI(BaseUI): renderer = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn() column.pack_start(renderer, True) - column.add_attribute(renderer, "pixbuf", 0) + column.add_attribute(renderer, "pixbuf", + models.CharacterListModel.C_PORTRAIT) treeview.append_column(column) #Column 1 for the treeview renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn('Character Name', renderer, text=1) + column = gtk.TreeViewColumn('Character Name', renderer, + text=models.CharacterListModel.C_NAME) column.set_property("expand", True) treeview.append_column(column) @@ -270,7 +305,8 @@ class mEveMonUI(BaseUI): class CharacterSheetUI(BaseUI): - + UPDATE_INTERVAL = 1 + def __init__(self, controller): self.controller = controller self.sheet = None @@ -281,16 +317,16 @@ class CharacterSheetUI(BaseUI): def build_window(self, treeview, path, view_column): # TODO: this is a really long and ugly function, split it up somehow - win = hildon.StackableWindow() - win.show_all() - hildon.hildon_gtk_window_set_progress_indicator(win, 1) + self.win = hildon.StackableWindow() + #win.show_all() + hildon.hildon_gtk_window_set_progress_indicator(self.win, 1) # Create menu # NOTE: we probably want a window-specific menu for this page, but the # main appmenu works for now - menu = self.create_menu(win) + menu = self.create_menu(self.win) # Attach menu to the window - win.set_app_menu(menu) + self.win.set_app_menu(menu) pannable_area = hildon.PannableArea() @@ -299,25 +335,22 @@ class CharacterSheetUI(BaseUI): # column 0 is the portrait, column 1 is name char_name = model.get_value(miter, 1) - uid = model.get_value(miter, 2) + self.uid = model.get_value(miter, 2) self.char_id = self.controller.char_name2id(char_name) - self.sheet = self.controller.get_char_sheet(uid, self.char_id) + self.sheet = self.controller.get_char_sheet(self.uid, self.char_id) - win.set_title(char_name) + self.win.set_title(char_name) hbox = gtk.HBox(False, 0) info_vbox = gtk.VBox(False, 0) - stats_vbox = gtk.VBox(False, 0) portrait = gtk.Image() portrait.set_from_file(self.controller.get_portrait(char_name, 256)) - portrait.show() hbox.pack_start(portrait, False, False, 10) hbox.pack_start(info_vbox, False, False, 5) - hbox.pack_start(stats_vbox, False, False, 15) vbox = gtk.VBox(False, 0) pannable_area.add_with_viewport(vbox) @@ -326,10 +359,33 @@ class CharacterSheetUI(BaseUI): self.fill_info(info_vbox) - self.fill_stats(stats_vbox) + self.fill_stats(info_vbox) + + separator = gtk.HSeparator() + vbox.pack_start(separator, False, False, 5) self.add_label("Skill in Training:", vbox, align="normal") - skill = self.controller.get_skill_in_training(uid, self.char_id) + + self.display_skill_in_training(vbox) + + separator = gtk.HSeparator() + vbox.pack_start(separator, False, False, 0) + + self.add_label("Skills:", vbox, align="normal") + + skills_treeview = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL) + self.skills_model = models.CharacterSkillsModel(self.controller, self.char_id) + skills_treeview.set_model(self.skills_model) + self.add_columns_to_skills_view(skills_treeview) + vbox.pack_start(skills_treeview, False, False, 1) + + self.win.add(pannable_area) + self.win.show_all() + + hildon.hildon_gtk_window_set_progress_indicator(self.win, 0) + + def display_skill_in_training(self, vbox): + skill = self.controller.get_skill_in_training(self.uid, self.char_id) if skill.skillInTraining: @@ -344,72 +400,91 @@ class CharacterSheetUI(BaseUI): self.add_label("%s (Level %d)" % (skill_name, skill.trainingToLevel), vbox, align="normal") - self.add_label("start time: %s\t\tend time: %s" %(time.ctime(skill.trainingStartTime), + self.add_label("start time: %s\t\tend time: %s" + %(time.ctime(skill.trainingStartTime), time.ctime(skill.trainingEndTime)), vbox, align="normal") + progressbar = gtk.ProgressBar() + fraction_completed = (time.time() - skill.trainingStartTime) / \ + (skill.trainingEndTime - skill.trainingStartTime) + progressbar.set_fraction(fraction_completed) + align = gtk.Alignment(0.5, 0.5, 0.5, 0) + vbox.pack_start(align, False, False, 5) + align.add(progressbar) else: - self.add_label("No skills are currently being trained", vbox, align="normal") - - self.add_label("Skills:", vbox, align="normal") - - win.show_all() - - skills_treeview = hildon.GtkTreeView(gtk.HILDON_UI_MODE_NORMAL) - self.skills_model = models.CharacterSkillsModel(self.controller, self.char_id) - skills_treeview.set_model(self.skills_model) - self.add_columns_to_skills_view(skills_treeview) - vbox.pack_start(skills_treeview, False, False, 1) + self.add_label("No skills are currently being trained", + vbox, align="normal") - win.add(pannable_area) - win.show_all() - hildon.hildon_gtk_window_set_progress_indicator(win, 0) def fill_info(self, box): self.add_label("%s" % self.sheet.name, box) - self.add_label("%s %s %s" % (self.sheet.gender, self.sheet.race, self.sheet.bloodLine), box) + self.add_label("%s %s %s" % (self.sheet.gender, + self.sheet.race, self.sheet.bloodLine), box) self.add_label("", box, markup=False) self.add_label("Corp: %s" % self.sheet.corporationName, box) self.add_label("Balance: %s ISK" % self.sheet.balance, box) + self.live_sp_val = self.controller.get_sp(self.uid, self.char_id) + self.live_sp = self.add_label("Total SP: %s" % + self.live_sp_val, box) + + self.spps = self.controller.get_spps(self.uid, self.char_id)[0] + glib.timeout_add_seconds(self.UPDATE_INTERVAL, self.update_live_sp) def fill_stats(self, box): - self.add_label("", box, markup=False) - self.add_label("", box, markup=False) - self.add_label("", box, markup=False) - self.add_label("Intelligence: %d" % self.sheet.attributes.intelligence, box) - self.add_label("Memory:\t%d" % self.sheet.attributes.memory, box) - self.add_label("Charisma:\t%d" % self.sheet.attributes.charisma, box) - self.add_label("Perception:\t%d" % self.sheet.attributes.perception, box) - self.add_label("Willpower:\t%d" % self.sheet.attributes.willpower, box) + + atr = self.sheet.attributes + + self.add_label("I: %d M: %d C: %d " \ + "P: %d W: %d" % (atr.intelligence, + atr.memory, atr.charisma, atr.perception, atr.willpower), box) def add_columns_to_skills_view(self, treeview): #Column 0 for the treeview renderer = gtk.CellRendererText() - column = gtk.TreeViewColumn('Skill Name', renderer, markup=0) + column = gtk.TreeViewColumn('Skill Name', renderer, + markup=models.CharacterSkillsModel.C_NAME) column.set_property("expand", True) treeview.append_column(column) #Column 1 for the treeview - column = gtk.TreeViewColumn('Rank', renderer, markup=1) + column = gtk.TreeViewColumn('Rank', renderer, + markup=models.CharacterSkillsModel.C_RANK) column.set_property("expand", True) treeview.append_column(column) - column = gtk.TreeViewColumn('Points', renderer, markup=2) + column = gtk.TreeViewColumn('Points', renderer, + markup=models.CharacterSkillsModel.C_SKILLPOINTS) column.set_property("expand", True) treeview.append_column(column) - - column = gtk.TreeViewColumn('Level', renderer, markup=3) + column = gtk.TreeViewColumn('Level', renderer, + markup=models.CharacterSkillsModel.C_LEVEL) column.set_property("expand", True) treeview.append_column(column) - def refresh_clicked(self, button, window): - hildon.hildon_gtk_window_set_progress_indicator(window, 1) + def refresh_clicked(self, button): + hildon.hildon_gtk_window_set_progress_indicator(self.win, 1) self.skills_model.get_skills() - hildon.hildon_gtk_window_set_progress_indicator(window, 0) + hildon.hildon_gtk_window_set_progress_indicator(self.win, 0) + + + def update_live_sp(self): + # we don't want to keep the timer running in the background + # when this callback returns False, the timer destorys itself + if not self.win.get_is_topmost(): + return False + + self.live_sp_val = self.live_sp_val + self.spps * self.UPDATE_INTERVAL + self.live_sp.set_label("Total SP: %d" % + self.live_sp_val) + + return True + if __name__ == "__main__": main() +