From 30450e2efae00712c84adc496f2b535512027c26 Mon Sep 17 00:00:00 2001 From: Don Allingham Date: Thu, 11 Aug 2005 17:19:03 +0000 Subject: [PATCH] PersonNavView changes svn: r5052 --- ChangeLog | 9 ++++ src/DbState.py | 2 +- src/PageView.py | 116 +++++++++++++++++++++++++++++++++++++++++++++ src/PedView.py | 83 +++++++++----------------------- src/PersonView.py | 108 ++--------------------------------------- src/ViewManager.py | 5 +- 6 files changed, 156 insertions(+), 167 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1c4de818a..85f345e46 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2005-08-11 Don Allingham + * src/DbState.py: handle self.index == -1 + * src/PageView.py: Provide PersonNavPage to handle page views + that to person navigation + * src/PedView.py: Derive from PersonNavPage + * src/PersonView.py: Derive from PersonNavPage + * src/ViewManager.py: Call new change_page to make sure history + buttons are correct for the view. + 2005-08-11 Martin Hawlisch * src/PedView.py: More work on it. * src/MapView.py: New View showing locations on a map. Early unfinished version. diff --git a/src/DbState.py b/src/DbState.py index 6a18080f4..3c277c16c 100644 --- a/src/DbState.py +++ b/src/DbState.py @@ -112,7 +112,7 @@ class History(GrampsDBCallback.GrampsDBCallback): return self.index+1 == len(self.history) def at_front(self): - return self.index == 0 + return self.index <= 0 def prune(self): if not self.at_end(): diff --git a/src/PageView.py b/src/PageView.py index 974e544ab..35d188de0 100644 --- a/src/PageView.py +++ b/src/PageView.py @@ -101,4 +101,120 @@ class PageView: def add_action_group(self,group): self.additional_action_groups.append(group) + def change_page(self): + pass + +class PersonNavView(PageView): + def __init__(self,title,dbstate,uistate): + PageView.__init__(self,title,dbstate,uistate) + def navigation_type(self): + return NAVIGATION_PERSON + + def define_actions(self): + # add the Forward action group to handle the Forward button + + self.fwd_action = gtk.ActionGroup(self.title + '/Forward') + self.fwd_action.add_actions([ + ('Forward',gtk.STOCK_GO_FORWARD,"_Forward", None, None, self.fwd_clicked) + ]) + + # add the Backward action group to handle the Forward button + self.back_action = gtk.ActionGroup(self.title + '/Backward') + self.back_action.add_actions([ + ('Back',gtk.STOCK_GO_BACK,"_Back", None, None, self.back_clicked) + ]) + + self.add_action_group(self.back_action) + self.add_action_group(self.fwd_action) + + def disable_action_group(self): + """ + Normally, this would not be overridden from the base class. However, + in this case, we have additional action groups that need to be + handled correctly. + """ + PageView.disable_action_group(self) + + self.fwd_action.set_visible(False) + self.back_action.set_visible(False) + + def enable_action_group(self,obj): + """ + Normally, this would not be overridden from the base class. However, + in this case, we have additional action groups that need to be + handled correctly. + """ + PageView.enable_action_group(self,obj) + + self.fwd_action.set_visible(True) + self.back_action.set_visible(True) + hobj = self.uistate.phistory + self.fwd_action.set_sensitive(not hobj.at_end()) + self.back_action.set_sensitive(not hobj.at_front()) + + def home(self,obj): + defperson = self.dbstate.db.get_default_person() + if defperson: + self.dbstate.change_active_person(defperson) + + def fwd_clicked(self,obj,step=1): + hobj = self.uistate.phistory + hobj.lock = True + if not hobj.at_end(): + try: + handle = hobj.forward() + self.dbstate.active = self.dbstate.db.get_person_from_handle(handle) + self.uistate.modify_statusbar() + self.dbstate.change_active_handle(handle) + hobj.mhistory.append(hobj.history[hobj.index]) + #self.redraw_histmenu() + self.fwd_action.set_sensitive(not hobj.at_end()) + self.back_action.set_sensitive(True) + except: + hobj.clear() + self.fwd_action.set_sensitive(False) + self.back_action.set_sensitive(False) + else: + self.fwd_action.set_sensitive(False) + self.back_action.set_sensitive(True) + hobj.lock = False + + def back_clicked(self,obj,step=1): + hobj = self.uistate.phistory + hobj.lock = True + if not hobj.at_front(): + try: + handle = hobj.back() + self.active = self.dbstate.db.get_person_from_handle(handle) + self.uistate.modify_statusbar() + self.dbstate.change_active_handle(handle) + hobj.mhistory.append(hobj.history[hobj.index]) +# self.redraw_histmenu() + self.back_action.set_sensitive(not hobj.at_front()) + self.fwd_action.set_sensitive(True) + except: + hobj.clear() + self.fwd_action.set_sensitive(False) + self.back_action.set_sensitive(False) + else: + self.back_action.set_sensitive(False) + self.fwd_action.set_sensitive(True) + hobj.lock = False + + def handle_history(self, handle): + """ + Updates the person history information + """ + hobj = self.uistate.phistory + if handle and not hobj.lock: + hobj.push(handle) + #self.redraw_histmenu() + self.fwd_action.set_sensitive(not hobj.at_end()) + self.back_action.set_sensitive(not hobj.at_front()) + + def change_page(self): + hobj = self.uistate.phistory + print hobj.at_end(), hobj.at_front() + self.fwd_action.set_sensitive(not hobj.at_end()) + self.back_action.set_sensitive(not hobj.at_front()) diff --git a/src/PedView.py b/src/PedView.py index 3c964b08f..578f05b57 100644 --- a/src/PedView.py +++ b/src/PedView.py @@ -67,19 +67,15 @@ _CREM = _('crem.') # PedigreeView # #------------------------------------------------------------------------- -class PedView(PageView.PageView): +class PedView(PageView.PersonNavView): def __init__(self,dbstate,uistate): print "PedView.__init__" - PageView.PageView.__init__(self,'Pedigree View',dbstate,uistate) + PageView.PersonNavView.__init__(self,'Pedigree View',dbstate,uistate) dbstate.connect('database-changed',self.change_db) dbstate.connect('active-changed',self.goto_active_person) self.force_size = 0 # Automatic resize - def navigation_type(self): - print "PedView.navigation_type" - return PageView.NAVIGATION_PERSON - def init_parent_signals_cb(self, widget, event): print "PedView.init_parent_signals_cb" self.notebook.disconnect(self.bootstrap_handler) @@ -96,54 +92,6 @@ class PedView(PageView.PageView): # for PyGtk < 2.4 self.notebook.append_page(frame,gtk.Label("")) - def define_actions(self): - print "PedView.define_actions" - self.add_action('Forward',gtk.STOCK_GO_FORWARD,"_Forward", callback=self.fwd_clicked) - self.add_action('Back', gtk.STOCK_GO_BACK, "_Back", callback=self.back_clicked) - self.add_action('HomePerson', gtk.STOCK_HOME, "_Home", callback=self.home) - - # add the Forward action group to handle the Forward button - self.fwd_action = gtk.ActionGroup(self.title + '/Forward') - self.fwd_action.add_actions([ - ('Forward',gtk.STOCK_GO_FORWARD,"_Forward", None, None, self.fwd_clicked) - ]) - - # add the Backward action group to handle the Forward button - self.back_action = gtk.ActionGroup(self.title + '/Backward') - self.back_action.add_actions([ - ('Back',gtk.STOCK_GO_BACK,"_Back", None, None, self.back_clicked) - ]) - - self.add_action_group(self.back_action) - self.add_action_group(self.fwd_action) - - def disable_action_group(self): - print "PedView.disable_action_group" - """ - Normally, this would not be overridden from the base class. However, - in this case, we have additional action groups that need to be - handled correctly. - """ - PageView.PageView.disable_action_group(self) - - self.fwd_action.set_visible(False) - self.back_action.set_visible(False) - - def enable_action_group(self,obj): - print "PedView.enable_action_group" - """ - Normally, this would not be overridden from the base class. However, - in this case, we have additional action groups that need to be - handled correctly. - """ - PageView.PageView.enable_action_group(self,obj) - - self.fwd_action.set_visible(True) - self.back_action.set_visible(True) - hobj = self.uistate.phistory - self.fwd_action.set_sensitive(not hobj.at_end()) - self.back_action.set_sensitive(not hobj.at_front()) - def get_stock(self): """ Returns the name of the stock icon to use for the display. @@ -211,6 +159,23 @@ class PedView(PageView.PageView): ''' + def define_actions(self): + """ + Required define_actions function for PageView. Builds the action + group information required. We extend beyond the normal here, + since we want to have more than one action group for the PersonView. + Most PageViews really won't care about this. + + Special action groups for Forward and Back are created to allow the + handling of navigation buttons. Forward and Back allow the user to + advance or retreat throughout the history, and we want to have these + be able to toggle these when you are at the end of the history or + at the beginning of the history. + """ + + PageView.PersonNavView.define_actions(self) + self.add_action('HomePerson',gtk.STOCK_HOME, "_Home", callback=self.home) + def change_db(self,db): print "PedView.change_db" """ @@ -230,16 +195,12 @@ class PedView(PageView.PageView): def goto_active_person(self,handle=None): print "PedView.goto_active_person" if handle: - self.rebuild_trees(self.db.get_person_from_handle(handle)) + person = self.db.get_person_from_handle(handle) + self.rebuild_trees(person) + self.handle_history(person.handle) else: self.rebuild_trees(None) - def fwd_clicked(self,obj,step=1): - pass - - def back_clicked(self,obj,step=1): - pass - def person_updated_cb(self,handle_list): print "PedView.person_updated_cb" self.rebuild_trees(self.dbstate.active) diff --git a/src/PersonView.py b/src/PersonView.py index 7a11fb51e..ed7899c2f 100644 --- a/src/PersonView.py +++ b/src/PersonView.py @@ -67,17 +67,14 @@ column_names = [ ] -class PersonView(PageView.PageView): +class PersonView(PageView.PersonNavView): def __init__(self,dbstate,uistate): - PageView.PageView.__init__(self,'Person View',dbstate,uistate) + PageView.PersonNavView.__init__(self,'Person View',dbstate,uistate) self.inactive = False dbstate.connect('database-changed',self.change_db) dbstate.connect('active-changed',self.goto_active_person) - def navigation_type(self): - return PageView.NAVIGATION_PERSON - def define_actions(self): """ Required define_actions function for PageView. Builds the action @@ -92,6 +89,8 @@ class PersonView(PageView.PageView): at the beginning of the history. """ + PageView.PersonNavView.define_actions(self) + self.add_action('Add', gtk.STOCK_ADD, "_Add", callback=self.add) self.add_action('Edit', gtk.STOCK_EDIT, "_Edit", callback=self.edit) self.add_action('Remove', gtk.STOCK_REMOVE,"_Remove",callback=self.remove) @@ -99,46 +98,6 @@ class PersonView(PageView.PageView): self.add_toggle_action('Filter', None, '_Filter', callback=self.filter_toggle) - # add the Forward action group to handle the Forward button - self.fwd_action = gtk.ActionGroup(self.title + '/Forward') - self.fwd_action.add_actions([ - ('Forward',gtk.STOCK_GO_FORWARD,"_Forward", None, None, self.fwd_clicked) - ]) - - # add the Backward action group to handle the Forward button - self.back_action = gtk.ActionGroup(self.title + '/Backward') - self.back_action.add_actions([ - ('Back',gtk.STOCK_GO_BACK,"_Back", None, None, self.back_clicked) - ]) - - self.add_action_group(self.back_action) - self.add_action_group(self.fwd_action) - - def disable_action_group(self): - """ - Normally, this would not be overridden from the base class. However, - in this case, we have additional action groups that need to be - handled correctly. - """ - PageView.PageView.disable_action_group(self) - - self.fwd_action.set_visible(False) - self.back_action.set_visible(False) - - def enable_action_group(self,obj): - """ - Normally, this would not be overridden from the base class. However, - in this case, we have additional action groups that need to be - handled correctly. - """ - PageView.PageView.enable_action_group(self,obj) - - self.fwd_action.set_visible(True) - self.back_action.set_visible(True) - hobj = self.uistate.phistory - self.fwd_action.set_sensitive(not hobj.at_end()) - self.back_action.set_sensitive(not hobj.at_front()) - def get_stock(self): """ Returns the name of the stock icon to use for the display. @@ -315,17 +274,6 @@ class PersonView(PageView.PageView): # update history self.handle_history(p.handle) - - def handle_history(self, handle): - """ - Updates the person history information - """ - hobj = self.uistate.phistory - if handle and not hobj.lock: - hobj.push(handle) - #self.redraw_histmenu() - self.fwd_action.set_sensitive(not hobj.at_end()) - self.back_action.set_sensitive(not hobj.at_front()) def setup_filter(self): """ @@ -823,51 +771,3 @@ class PersonView(PageView.PageView): if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: self.build_fwdhistmenu(event) - def fwd_clicked(self,obj,step=1): - hobj = self.uistate.phistory - hobj.lock = True - if not hobj.at_end(): - try: - handle = hobj.forward() - self.dbstate.active = self.dbstate.db.get_person_from_handle(handle) - self.uistate.modify_statusbar() - self.dbstate.change_active_handle(handle) - hobj.mhistory.append(hobj.history[hobj.index]) - #self.redraw_histmenu() - self.fwd_action.set_sensitive(not hobj.at_end()) - self.back_action.set_sensitive(True) - except: - hobj.clear() - self.fwd_action.set_sensitive(False) - self.back_action.set_sensitive(False) - else: - self.fwd_action.set_sensitive(False) - self.back_action.set_sensitive(True) - hobj.lock = False - - def back_clicked(self,obj,step=1): - hobj = self.uistate.phistory - hobj.lock = True - if not hobj.at_front(): - try: - handle = hobj.back() - self.active = self.dbstate.db.get_person_from_handle(handle) - self.uistate.modify_statusbar() - self.dbstate.change_active_handle(handle) - hobj.mhistory.append(hobj.history[hobj.index]) -# self.redraw_histmenu() - self.back_action.set_sensitive(not hobj.at_front()) - self.fwd_action.set_sensitive(True) - except: - hobj.clear() - self.fwd_action.set_sensitive(False) - self.back_action.set_sensitive(False) - else: - self.back_action.set_sensitive(False) - self.fwd_action.set_sensitive(True) - hobj.lock = False - - def home(self,obj): - defperson = self.dbstate.db.get_default_person() - if defperson: - self.dbstate.change_active_person(defperson) diff --git a/src/ViewManager.py b/src/ViewManager.py index c6e87995d..ebc6a3974 100644 --- a/src/ViewManager.py +++ b/src/ViewManager.py @@ -288,6 +288,7 @@ class ViewManager: hbox.show_all() # create notebook page and add to notebook + page.define_actions() page_display = page.get_display() page_display.show_all() self.notebook.append_page(page_display,hbox) @@ -323,7 +324,7 @@ class ViewManager: nav_type = self.navigation_type[self.active_page.navigation_type()] if nav_type[0] != None: nav_type[0].enable() - + groups = self.active_page.get_actions() for grp in groups: @@ -333,6 +334,8 @@ class ViewManager: mergeid = self.uimanager.add_ui_from_string(ui) self.merge_ids.append(mergeid) + self.active_page.change_page() + def on_open_activate(self,obj): choose = gtk.FileChooserDialog(_('GRAMPS: Open database'),