# Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2009 Nick Hall # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # $Id$ """ Place Tree View """ #------------------------------------------------------------------------- # # Gramps modules # #------------------------------------------------------------------------- from gui.views.placebaseview import PlaceBaseView from gui.views.treemodels import PlaceTreeModel import gen.lib import Errors from gui.editors import EditPlace #------------------------------------------------------------------------- # # Internationalization # #------------------------------------------------------------------------- from gettext import gettext as _ #------------------------------------------------------------------------- # # PlaceTreeView # #------------------------------------------------------------------------- class PlaceTreeView(PlaceBaseView): """ A hierarchical view of the top three levels of places. """ def __init__(self, dbstate, uistate): PlaceBaseView.__init__(self, dbstate, uistate, _('Tree'), PlaceTreeModel) def get_viewtype_stock(self): """ Override the default icon. Set for hierarchical view. """ return 'gramps-tree-group' def define_actions(self): """ Define actions for the popup menu specific to the tree view. """ PlaceBaseView.define_actions(self) self._add_action('OpenBranch', None, _("Expand Rows"), callback=self.open_branch) self._add_action('CloseBranch', None, _("Collapse Rows"), callback=self.close_branch) self._add_action('OpenAllNodes', None, _("Expand all Nodes"), callback=self.open_all_nodes) self._add_action('CloseAllNodes', None, _("Collapse all Nodes"), callback=self.close_all_nodes) def ui_definition(self): """ A user interface definition including tree specific actions. """ return ''' ''' def add(self, obj): """ Add a new place. Attempt to get the top three levels of hierarchy from the currently selected row. """ place = gen.lib.Place() model, pathlist = self.selection.get_selected_rows() level1 = level2 = level3 = u"" if len(pathlist) == 1: path = pathlist[0] if len(path) == 1: level1 = model.on_get_iter(path)[0] elif len(path) == 2: level2 = model.on_get_iter(path)[0] level1 = model.on_get_iter(path)[1] elif len(path) == 3: node = model.on_get_iter(path) level3 = node[0] level2 = node[1] level1 = model.on_iter_parent(node)[1] else: node = model.on_iter_parent(model.on_get_iter(path)) level3 = node[0] level2 = node[1] level1 = model.on_iter_parent(node)[1] try: place.get_main_location().set_country(level1) place.get_main_location().set_state(level2) place.get_main_location().set_county(level3) EditPlace(self.dbstate, self.uistate, [], place) except Errors.WindowActiveError: pass def open_branch(self, obj): """ Expand the selected branches and all children. """ self.uistate.status_text(_("Updating display...")) self.uistate.set_busy_cursor(True) selected = self.selection.get_selected_rows() for path in selected[1]: self.list.expand_row(path, True) self.uistate.set_busy_cursor(False) self.uistate.modify_statusbar(self.dbstate) def close_branch(self, obj): """ Collapse the selected branches. """ selected = self.selection.get_selected_rows() for path in selected[1]: self.list.collapse_row(path) def open_all_nodes(self, obj): """ Expand the entire tree. """ self.uistate.status_text(_("Updating display...")) self.uistate.set_busy_cursor(True) self.list.expand_all() self.uistate.set_busy_cursor(False) self.uistate.modify_statusbar(self.dbstate) def close_all_nodes(self, obj): """ Collapse the entire tree. """ self.list.collapse_all()