gramps/src/DisplayTabs/_PersonEventEmbedList.py
Benny Malengier a77d4fd3ae Add my copyright :-)
svn: r12813
2009-07-16 22:02:09 +00:00

182 lines
6.5 KiB
Python

#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2006 Donald N. Allingham
# Copyright (C) 2009 B. Malengier
#
# 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$
#-------------------------------------------------------------------------
#
# python
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GRAMPS classes
#
#-------------------------------------------------------------------------
import gen.lib
from BasicUtils import name_displayer
from _EventEmbedList import EventEmbedList
from _EventRefModel import EventRefModel
_std_types = [
gen.lib.EventType(gen.lib.EventType.BIRTH),
gen.lib.EventType(gen.lib.EventType.DEATH),
]
#-------------------------------------------------------------------------
#
# PersonEventEmbedList
#
#-------------------------------------------------------------------------
class PersonEventEmbedList(EventEmbedList):
_WORKNAME = _("Personal Events")
_FAMNAME = _("With %(namepartner)s (%(famid)s)")
_UNKNOWNNAME = _("<Unknown>")
_MSG = {
'add' : _('Add a new personal event'),
'del' : _('Remove the selected personal event'),
'edit' : _('Edit the selected personal event or edit family'),
'share' : _('Share an existing event'),
'up' : _('Move the selected event upwards or change family order'),
'down' : _('Move the selected event downwards or change family order'),
}
def __init__(self, dbstate, uistate, track, obj):
EventEmbedList.__init__(self, dbstate, uistate, track, obj,
build_model=EventRefModel )
def get_data(self):
if not self._data or self.changed:
self._data = [self.obj.get_event_ref_list()]
self._groups = [(self.obj.get_handle(), self._WORKNAME)]
# own family events
family_handle_list = self.obj.get_family_handle_list()
if family_handle_list:
for family_handle in family_handle_list:
family = self.dbstate.db.get_family_from_handle(family_handle)
father_handle = family.get_father_handle()
mother_handle = family.get_mother_handle()
if self.obj.get_handle() == father_handle:
handlepartner = mother_handle
else:
handlepartner = father_handle
if handlepartner:
partner = self.dbstate.db.get_person_from_handle(
handlepartner)
groupname = name_displayer.display(partner)
else:
groupname = self._UNKNOWNNAME
self._data.append(family.get_event_ref_list())
self._groups.append((family_handle, self._FAMNAME % {
'namepartner': groupname,
'famid': family.get_gramps_id()
}))
self.changed = False
return self._data
def default_role(self):
return gen.lib.EventRoleType(gen.lib.EventRoleType.PRIMARY)
def default_type(self):
type_list = []
# combine return info into a single flat sequence
event = None
for event_ref in self.get_data()[0]:
event = self.dbstate.db.get_event_from_handle(event_ref.ref)
type_list.append(event.get_type())
for etype in _std_types:
if etype not in type_list:
return gen.lib.EventType(etype)
return gen.lib.EventType(gen.lib.EventType.BIRTH)
def get_ref_editor(self):
from Editors import EditEventRef
return EditEventRef
def editnotworkgroup(self, key):
"""
Edit non native event in own editor
"""
from Editors import EditFamily
family = self.dbstate.db.get_family_from_handle(key)
try:
EditFamily(self.dbstate, self.uistate, [], family)
except Errors.WindowActiveError:
pass
def _non_native_change(self):
"""
handle change request of non native data
"""
from QuestionDialog import WarningDialog
WarningDialog(
_("Cannot change Family"),
_("You cannot change Family events in the Person Editor")
)
def _move_up_group(self, groupindex):
"""
move up pressed on the group
If on a family group, allow to reorder the order of families
as connected to this person.
"""
ref = self.get_selected()
if not ref or ref[1]:
return
if ref[0] == 1:
#cannot move up, already first family
return
#change family list and rebuild the tabpage
index = ref[0] - 1
flist = self.obj.get_family_handle_list()
handle = flist.pop(index)
flist.insert(index-1, handle)
self.changed = True
self.rebuild()
def _move_down_group(self, groupindex):
"""
move down pressed on the group
If on a family group, allow to reorder the order of families
as connected to this person.
"""
ref = self.get_selected()
if not ref or ref[1]:
return
if ref[0] == len(self._groups)-1:
#cannot move down, already last family
return
#change family list and rebuild the tabpage
index = ref[0] -1
flist = self.obj.get_family_handle_list()
handle = flist.pop(index)
flist.insert(index+1, handle)
self.changed = True
self.rebuild()