Begin moving 3rd-party plugins to external SVN: DataEntryGramplet removed
svn: r13476
This commit is contained in:
parent
0dc707ef7c
commit
0f61597985
@ -1,732 +0,0 @@
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 2007-2009 Douglas S. Blank <doug.blank@gmail.com>
|
||||
#
|
||||
# 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$
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from gen.plug import Gramplet
|
||||
from BasicUtils import name_displayer
|
||||
from ReportBase import ReportUtils
|
||||
import DateHandler
|
||||
import Errors
|
||||
import gen.lib
|
||||
from gettext import gettext as _
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
# Gramplet class
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
class DataEntryGramplet(Gramplet):
|
||||
NO_REL = 0
|
||||
AS_PARENT = 1
|
||||
AS_SPOUSE = 2
|
||||
AS_SIBLING = 3
|
||||
AS_CHILD = 4
|
||||
def init(self):
|
||||
self.de_column_width = 20
|
||||
import gtk
|
||||
rows = gtk.VBox()
|
||||
self.dirty = False
|
||||
self.dirty_person = None
|
||||
self.dirty_family = None
|
||||
self.de_widgets = {}
|
||||
for items in [("Active person", _("Active person"), None, True,
|
||||
[("Edit person", "", self.edit_person), ("Edit family", _("Family:"), self.edit_family)],
|
||||
False, 0),
|
||||
("APName", _("Surname, Given"), None, False, [], True, 0),
|
||||
("APGender", _("Gender"), [_("female"), _("male"), _("unknown")], False, [], True, 2),
|
||||
("APBirth", _("Birth"), None, False, [], True, 0),
|
||||
("APDeath", _("Death"), None, False, [], True, 0)
|
||||
]:
|
||||
pos, text, choices, readonly, callback, dirty, default = items
|
||||
row = self.make_row(pos, text, choices, readonly, callback, dirty, default)
|
||||
rows.pack_start(row, False)
|
||||
|
||||
# Save and Abandon
|
||||
row = gtk.HBox()
|
||||
button = gtk.Button(_("Save"))
|
||||
button.connect("clicked", self.save_data_edit)
|
||||
row.pack_start(button, True)
|
||||
button = gtk.Button(_("Abandon"))
|
||||
button.connect("clicked", self.abandon_data_edit)
|
||||
row.pack_start(button, True)
|
||||
rows.pack_start(row, False)
|
||||
|
||||
for items in [("New person", _("New person"), None, True, 0),
|
||||
("NPRelation", _("Add relation"),
|
||||
[_("No relation to active person"),
|
||||
_("Add as a Parent"),
|
||||
_("Add as a Spouse"),
|
||||
_("Add as a Sibling"),
|
||||
_("Add as a Child")],
|
||||
False, 0),
|
||||
("NPName", _("Surname, Given"), None, False, 0),
|
||||
("NPGender", _("Gender"), [_("female"), _("male"), _("unknown")], False, 2),
|
||||
("NPBirth", _("Birth"), None, False, 0),
|
||||
("NPDeath", _("Death"), None, False, 0)
|
||||
]:
|
||||
pos, text, choices, readonly, default = items
|
||||
row = self.make_row(pos, text, choices, readonly, default=default)
|
||||
rows.pack_start(row, False)
|
||||
|
||||
# Save, Abandon, Clear
|
||||
row = gtk.HBox()
|
||||
button = gtk.Button(_("Add"))
|
||||
button.connect("clicked", self.add_data_entry)
|
||||
row.pack_start(button, True)
|
||||
button = gtk.Button(_("Copy Active Data"))
|
||||
button.connect("clicked", self.copy_data_entry)
|
||||
row.pack_start(button, True)
|
||||
button = gtk.Button(_("Clear"))
|
||||
button.connect("clicked", self.clear_data_entry)
|
||||
row.pack_start(button, True)
|
||||
rows.pack_start(row, False)
|
||||
|
||||
self.gui.get_container_widget().remove(self.gui.textview)
|
||||
self.gui.get_container_widget().add_with_viewport(rows)
|
||||
rows.show_all()
|
||||
self.clear_data_entry(None)
|
||||
|
||||
def main(self): # return false finishes
|
||||
if self.dirty:
|
||||
return
|
||||
self.de_widgets["Active person:Edit family"].hide()
|
||||
self.de_widgets["Active person:Edit family:Label"].hide()
|
||||
active_person = self.dbstate.get_active_person()
|
||||
self.dirty_person = active_person
|
||||
self.dirty_family = None
|
||||
if active_person:
|
||||
self.de_widgets["Active person:Edit person"].show()
|
||||
self.de_widgets["Active person:Edit family"].hide()
|
||||
self.de_widgets["Active person:Edit family:Label"].hide()
|
||||
# Fill in current person edits:
|
||||
name = name_displayer.display(active_person)
|
||||
self.de_widgets["Active person"].set_text("<i>%s</i> " % name)
|
||||
self.de_widgets["Active person"].set_use_markup(True)
|
||||
# Name:
|
||||
name_obj = active_person.get_primary_name()
|
||||
if name_obj:
|
||||
self.de_widgets["APName"].set_text("%s, %s" %
|
||||
(name_obj.get_surname(), name_obj.get_first_name()))
|
||||
self.de_widgets["APGender"].set_active(active_person.get_gender()) # gender
|
||||
# Birth:
|
||||
birth = ReportUtils.get_birth_or_fallback(self.dbstate.db, active_person)
|
||||
birth_text = ""
|
||||
if birth:
|
||||
sdate = DateHandler.get_date(birth)
|
||||
birth_text += sdate + " "
|
||||
place_handle = birth.get_place_handle()
|
||||
if place_handle:
|
||||
place = self.dbstate.db.get_place_from_handle(place_handle)
|
||||
place_text = place.get_title()
|
||||
if place_text:
|
||||
birth_text += _("in") + " " + place_text
|
||||
|
||||
self.de_widgets["APBirth"].set_text(birth_text)
|
||||
# Death:
|
||||
death = ReportUtils.get_death_or_fallback(self.dbstate.db, active_person)
|
||||
death_text = ""
|
||||
if death:
|
||||
sdate = DateHandler.get_date(death)
|
||||
death_text += sdate + " "
|
||||
place_handle = death.get_place_handle()
|
||||
if place_handle:
|
||||
place = self.dbstate.db.get_place_from_handle(place_handle)
|
||||
place_text = place.get_title()
|
||||
if place_text:
|
||||
death_text += _("in") + " " + place_text
|
||||
self.de_widgets["APDeath"].set_text(death_text)
|
||||
family_list = active_person.get_family_handle_list()
|
||||
if len(family_list) > 0:
|
||||
self.dirty_family = self.dbstate.db.get_family_from_handle(family_list[0])
|
||||
self.de_widgets["Active person:Edit family"].show()
|
||||
self.de_widgets["Active person:Edit family:Label"].show()
|
||||
else:
|
||||
family_list = active_person.get_parent_family_handle_list()
|
||||
if len(family_list) > 0:
|
||||
self.dirty_family = self.dbstate.db.get_family_from_handle(family_list[0])
|
||||
self.de_widgets["Active person:Edit family"].show()
|
||||
self.de_widgets["Active person:Edit family:Label"].show()
|
||||
else:
|
||||
self.clear_data_edit(None)
|
||||
self.de_widgets["Active person:Edit person"].hide()
|
||||
self.de_widgets["Active person:Edit family"].hide()
|
||||
self.de_widgets["Active person:Edit family:Label"].hide()
|
||||
self.dirty = False
|
||||
|
||||
def make_row(self, pos, text, choices=None, readonly=False, callback_list=[],
|
||||
mark_dirty=False, default=0):
|
||||
import gtk
|
||||
# Data Entry: Active Person
|
||||
row = gtk.HBox()
|
||||
label = gtk.Label()
|
||||
if readonly:
|
||||
label.set_text("<b>%s</b>" % text)
|
||||
label.set_width_chars(self.de_column_width)
|
||||
label.set_use_markup(True)
|
||||
self.de_widgets[pos] = gtk.Label()
|
||||
self.de_widgets[pos].set_alignment(0.0, 0.5)
|
||||
self.de_widgets[pos].set_use_markup(True)
|
||||
label.set_alignment(0.0, 0.5)
|
||||
row.pack_start(label, False)
|
||||
row.pack_start(self.de_widgets[pos], False)
|
||||
else:
|
||||
label.set_text("%s: " % text)
|
||||
label.set_width_chars(self.de_column_width)
|
||||
label.set_alignment(1.0, 0.5)
|
||||
if choices is None:
|
||||
self.de_widgets[pos] = gtk.Entry()
|
||||
if mark_dirty:
|
||||
self.de_widgets[pos].connect("changed", self.mark_dirty)
|
||||
row.pack_start(label, False)
|
||||
row.pack_start(self.de_widgets[pos], True)
|
||||
else:
|
||||
eventBox = gtk.EventBox()
|
||||
self.de_widgets[pos] = gtk.combo_box_new_text()
|
||||
eventBox.add(self.de_widgets[pos])
|
||||
for add_type in choices:
|
||||
self.de_widgets[pos].append_text(add_type)
|
||||
self.de_widgets[pos].set_active(default)
|
||||
if mark_dirty:
|
||||
self.de_widgets[pos].connect("changed", self.mark_dirty)
|
||||
row.pack_start(label, False)
|
||||
row.pack_start(eventBox, True, True)
|
||||
for name, text, callback in callback_list:
|
||||
label = gtk.Label()
|
||||
label.set_text(text)
|
||||
self.de_widgets[pos + ":" + name + ":Label"] = label
|
||||
row.pack_start(label, False)
|
||||
icon = gtk.STOCK_EDIT
|
||||
size = gtk.ICON_SIZE_MENU
|
||||
button = gtk.Button()
|
||||
image = gtk.Image()
|
||||
image.set_from_stock(icon, size)
|
||||
button.add(image)
|
||||
button.set_relief(gtk.RELIEF_NONE)
|
||||
button.connect("clicked", callback)
|
||||
self.de_widgets[pos + ":" + name] = button
|
||||
row.pack_start(button, False)
|
||||
row.show_all()
|
||||
return row
|
||||
|
||||
def mark_dirty(self, obj):
|
||||
self.dirty = True
|
||||
|
||||
def abandon_data_edit(self, obj):
|
||||
self.dirty = False
|
||||
self.update()
|
||||
|
||||
def edit_callback(self, person):
|
||||
self.dirty = False
|
||||
self.update()
|
||||
|
||||
def edit_person(self, obj):
|
||||
from Editors import EditPerson
|
||||
try:
|
||||
EditPerson(self.gui.dbstate,
|
||||
self.gui.uistate, [],
|
||||
self.dirty_person,
|
||||
callback=self.edit_callback)
|
||||
except Errors.WindowActiveError:
|
||||
pass
|
||||
|
||||
def edit_family(self, obj):
|
||||
from Editors import EditFamily
|
||||
try:
|
||||
EditFamily(self.gui.dbstate,
|
||||
self.gui.uistate, [],
|
||||
self.dirty_family)
|
||||
except Errors.WindowActiveError:
|
||||
pass
|
||||
|
||||
def process_dateplace(self, text):
|
||||
if text == "": return None, None
|
||||
prep_in = _("in") # word or phrase that separates date from place
|
||||
text = text.strip()
|
||||
if (" %s " % prep_in) in text:
|
||||
date, place = text.split((" %s " % prep_in), 1)
|
||||
elif text.startswith("%s " % prep_in):
|
||||
date, place = text.split(("%s " % prep_in), 1)
|
||||
else:
|
||||
date, place = text, ""
|
||||
date = date.strip()
|
||||
place = place.strip()
|
||||
if date != "":
|
||||
date = DateHandler.parser.parse(date)
|
||||
else:
|
||||
date = None
|
||||
if place != "":
|
||||
newq, place = self.get_or_create_place(place)
|
||||
else:
|
||||
place = None
|
||||
return date, place
|
||||
|
||||
def get_or_create_place(self, place_name):
|
||||
if place_name == "": return (-1, None)
|
||||
for place in self.dbstate.db.iter_places():
|
||||
if place.get_title().strip() == place_name:
|
||||
return (0, place) # (old, object)
|
||||
place = gen.lib.Place()
|
||||
place.set_title(place_name)
|
||||
self.dbstate.db.add_place(place,self.trans)
|
||||
return (1, place) # (new, object)
|
||||
|
||||
def get_or_create_event(self, object, type, date, place):
|
||||
""" Add or find a type event on object """
|
||||
if date is place is None: return (-1, None)
|
||||
# first, see if it exists
|
||||
ref_list = object.get_event_ref_list()
|
||||
# look for a match, and possible correction
|
||||
for ref in ref_list:
|
||||
event = self.dbstate.db.get_event_from_handle(ref.ref)
|
||||
if event is not None:
|
||||
if int(event.get_type()) == type:
|
||||
# Match! Let's update
|
||||
if date:
|
||||
event.set_date_object(date)
|
||||
if place:
|
||||
event.set_place_handle(place.get_handle())
|
||||
self.dbstate.db.commit_event(event, self.trans)
|
||||
return (0, event)
|
||||
# else create it:
|
||||
event = gen.lib.Event()
|
||||
if type:
|
||||
event.set_type(gen.lib.EventType(type))
|
||||
if date:
|
||||
event.set_date_object(date)
|
||||
if place:
|
||||
event.set_place_handle(place.get_handle())
|
||||
self.dbstate.db.add_event(event, self.trans)
|
||||
return (1, event)
|
||||
|
||||
def make_event(self, type, date, place):
|
||||
if date is place is None: return None
|
||||
event = gen.lib.Event()
|
||||
event.set_type(gen.lib.EventType(type))
|
||||
if date:
|
||||
event.set_date_object(date)
|
||||
if place:
|
||||
event.set_place_handle(place.get_handle())
|
||||
self.dbstate.db.add_event(event, self.trans)
|
||||
return event
|
||||
|
||||
def make_person(self, firstname, surname, gender):
|
||||
person = gen.lib.Person()
|
||||
name = gen.lib.Name()
|
||||
name.set_type(gen.lib.NameType(gen.lib.NameType.BIRTH))
|
||||
name.set_first_name(firstname)
|
||||
name.set_surname(surname)
|
||||
person.set_primary_name(name)
|
||||
person.set_gender(gender)
|
||||
return person
|
||||
|
||||
def save_data_edit(self, obj):
|
||||
if self.dirty:
|
||||
# Save the edits ----------------------------------
|
||||
person = self.dirty_person
|
||||
# First, get the data:
|
||||
gender = self.de_widgets["APGender"].get_active()
|
||||
if "," in self.de_widgets["APName"].get_text():
|
||||
surname, firstname = self.de_widgets["APName"].get_text().split(",", 1)
|
||||
else:
|
||||
surname, firstname = self.de_widgets["APName"].get_text(), ""
|
||||
surname = surname.strip()
|
||||
firstname = firstname.strip()
|
||||
name = person.get_primary_name()
|
||||
# Now, edit it:
|
||||
self.trans = self.dbstate.db.transaction_begin()
|
||||
name.set_surname(surname)
|
||||
name.set_first_name(firstname)
|
||||
person.set_gender(gender)
|
||||
birthdate, birthplace = self.process_dateplace(self.de_widgets["APBirth"].get_text().strip())
|
||||
new, birthevent = self.get_or_create_event(person, gen.lib.EventType.BIRTH, birthdate, birthplace)
|
||||
# reference it, if need be:
|
||||
birthref = person.get_birth_ref()
|
||||
if birthevent:
|
||||
if birthref is None:
|
||||
# need new
|
||||
birthref = gen.lib.EventRef()
|
||||
birthref.set_reference_handle(birthevent.get_handle())
|
||||
person.set_birth_ref(birthref)
|
||||
deathdate, deathplace = self.process_dateplace(self.de_widgets["APDeath"].get_text().strip())
|
||||
new, deathevent = self.get_or_create_event(person, gen.lib.EventType.DEATH, deathdate, deathplace)
|
||||
# reference it, if need be:
|
||||
deathref = person.get_death_ref()
|
||||
if deathevent:
|
||||
if deathref is None:
|
||||
# need new
|
||||
deathref = gen.lib.EventRef()
|
||||
deathref.set_reference_handle(deathevent.get_handle())
|
||||
person.set_death_ref(deathref)
|
||||
self.dbstate.db.commit_person(person,self.trans)
|
||||
self.dbstate.db.transaction_commit(self.trans,
|
||||
(_("Gramplet Data Edit: %s") % name_displayer.display(person)))
|
||||
self.dirty = False
|
||||
self.update()
|
||||
|
||||
def add_data_entry(self, obj):
|
||||
from QuestionDialog import ErrorDialog
|
||||
# First, get the data:
|
||||
if "," in self.de_widgets["NPName"].get_text():
|
||||
surname, firstname = self.de_widgets["NPName"].get_text().split(",", 1)
|
||||
else:
|
||||
surname, firstname = self.de_widgets["NPName"].get_text(), ""
|
||||
surname = surname.strip()
|
||||
firstname = firstname.strip()
|
||||
gender = self.de_widgets["NPGender"].get_active()
|
||||
if self.dirty:
|
||||
current_person = self.dirty_person
|
||||
else:
|
||||
current_person = self.dbstate.get_active_person()
|
||||
# Pre-check to make sure everything is ok: -------------------------------------------
|
||||
if surname == "" and firstname == "":
|
||||
ErrorDialog(_("Please provide a name."), _("Can't add new person."))
|
||||
return
|
||||
if self.de_widgets["NPRelation"].get_active() == self.NO_REL:
|
||||
# "No relation to active person"
|
||||
pass
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_PARENT:
|
||||
# "Add as a Parent"
|
||||
if current_person is None:
|
||||
ErrorDialog(_("Please set an active person."), _("Can't add new person as a parent."))
|
||||
return
|
||||
elif gender == gen.lib.Person.UNKNOWN: # unknown
|
||||
ErrorDialog(_("Please set the new person's gender."), _("Can't add new person as a parent."))
|
||||
return
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_SPOUSE:
|
||||
# "Add as a Spouse"
|
||||
if current_person is None:
|
||||
ErrorDialog(_("Please set an active person."), _("Can't add new person as a spouse."))
|
||||
return
|
||||
elif (gender == gen.lib.Person.UNKNOWN and
|
||||
current_person.get_gender() == gen.lib.Person.UNKNOWN): # both genders unknown
|
||||
ErrorDialog(_("Please set the new person's gender."), _("Can't add new person as a spouse."))
|
||||
return
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_SIBLING:
|
||||
# "Add as a Sibling"
|
||||
if current_person is None:
|
||||
ErrorDialog(_("Please set an active person."), _("Can't add new person as a sibling."))
|
||||
return
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_CHILD:
|
||||
# "Add as a Child"
|
||||
if current_person is None:
|
||||
ErrorDialog(_("Please set an active person."), _("Can't add new person as a child."))
|
||||
return
|
||||
# Start the transaction: ------------------------------------------------------------
|
||||
self.trans = self.dbstate.db.transaction_begin()
|
||||
# New person --------------------------------------------------
|
||||
# Add birth
|
||||
new_birth_date, new_birth_place = self.process_dateplace(self.de_widgets["NPBirth"].get_text().strip())
|
||||
birth_event = self.make_event(gen.lib.EventType.BIRTH, new_birth_date, new_birth_place)
|
||||
# Add death
|
||||
new_death_date, new_death_place = self.process_dateplace(self.de_widgets["NPDeath"].get_text())
|
||||
death_event = self.make_event(gen.lib.EventType.DEATH, new_death_date, new_death_place)
|
||||
# Now, create the person and events:
|
||||
person = self.make_person(firstname, surname, gender)
|
||||
# New birth for person:
|
||||
if birth_event:
|
||||
birth_ref = gen.lib.EventRef()
|
||||
birth_ref.set_reference_handle(birth_event.get_handle())
|
||||
person.set_birth_ref(birth_ref)
|
||||
# New death for person:
|
||||
if death_event:
|
||||
death_ref = gen.lib.EventRef()
|
||||
death_ref.set_reference_handle(death_event.get_handle())
|
||||
person.set_death_ref(death_ref)
|
||||
self.dbstate.db.add_person(person, self.trans)
|
||||
# All error checking done; just add relation:
|
||||
if self.de_widgets["NPRelation"].get_active() == self.NO_REL:
|
||||
# "No relation to active person"
|
||||
pass
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_PARENT:
|
||||
# "Add as a Parent"
|
||||
# Go through current_person parent families
|
||||
added = False
|
||||
for family_handle in current_person.get_parent_family_handle_list():
|
||||
family = self.dbstate.db.get_family_from_handle(family_handle)
|
||||
if family:
|
||||
# find one that person would fit as a parent
|
||||
fam_husband_handle = family.get_father_handle()
|
||||
fam_wife_handle = family.get_mother_handle()
|
||||
# can we add person as wife?
|
||||
if fam_wife_handle is None and person.get_gender() == gen.lib.Person.FEMALE:
|
||||
# add the person
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
elif fam_husband_handle is None and person.get_gender() == gen.lib.Person.MALE:
|
||||
# add the person
|
||||
family.set_father_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
if added:
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
else:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
if person.get_gender() == gen.lib.Person.MALE:
|
||||
family.set_father_handle(person.get_handle())
|
||||
elif person.get_gender() == gen.lib.Person.FEMALE:
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
# add curent_person as child
|
||||
childref = gen.lib.ChildRef()
|
||||
childref.set_reference_handle(current_person.get_handle())
|
||||
family.add_child_ref( childref)
|
||||
current_person.add_parent_family_handle(family.get_handle())
|
||||
# finalize
|
||||
person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_SPOUSE:
|
||||
# "Add as a Spouse"
|
||||
added = False
|
||||
family = None
|
||||
for family_handle in current_person.get_family_handle_list():
|
||||
family = self.dbstate.db.get_family_from_handle(family_handle)
|
||||
if family:
|
||||
fam_husband_handle = family.get_father_handle()
|
||||
fam_wife_handle = family.get_mother_handle()
|
||||
if current_person.get_handle() == fam_husband_handle:
|
||||
# can we add person as wife?
|
||||
if fam_wife_handle is None:
|
||||
if person.get_gender() == gen.lib.Person.FEMALE:
|
||||
# add the person
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
elif person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.set_gender(gen.lib.Person.FEMALE)
|
||||
self.de_widgets["NPGender"].set_active(gen.lib.Person.FEMALE)
|
||||
person.add_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
elif current_person.get_handle() == fam_wife_handle:
|
||||
# can we add person as husband?
|
||||
if fam_husband_handle is None:
|
||||
if person.get_gender() == gen.lib.Person.MALE:
|
||||
# add the person
|
||||
family.set_father_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
elif person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
family.set_father_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
person.set_gender(gen.lib.Person.MALE)
|
||||
self.de_widgets["NPGender"].set_active(gen.lib.Person.MALE)
|
||||
added = True
|
||||
break
|
||||
if added:
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
else:
|
||||
if person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
if current_person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
ErrorDialog(_("Please set gender on Active or new person."),
|
||||
_("Can't add new person as a spouse."))
|
||||
return
|
||||
elif current_person.get_gender() == gen.lib.Person.MALE:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
family.set_father_handle(current_person.get_handle())
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.set_gender(gen.lib.Person.FEMALE)
|
||||
self.de_widgets["NPGender"].set_active(gen.lib.Person.FEMALE)
|
||||
person.add_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif current_person.get_gender() == gen.lib.Person.FEMALE:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
family.set_father_handle(person.get_handle())
|
||||
family.set_mother_handle(current_person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.set_gender(gen.lib.Person.MALE)
|
||||
self.de_widgets["NPGender"].set_active(gen.lib.Person.MALE)
|
||||
person.add_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif person.get_gender() == gen.lib.Person.MALE:
|
||||
if current_person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
family.set_father_handle(person.get_handle())
|
||||
family.set_mother_handle(current_person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
current_person.set_gender(gen.lib.Person.FEMALE)
|
||||
person.add_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif current_person.get_gender() == gen.lib.Person.MALE:
|
||||
ErrorDialog(_("Same genders on Active and new person."),
|
||||
_("Can't add new person as a spouse."))
|
||||
return
|
||||
elif current_person.get_gender() == gen.lib.Person.FEMALE:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
family.set_father_handle(person.get_handle())
|
||||
family.set_mother_handle(current_person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif person.get_gender() == gen.lib.Person.FEMALE:
|
||||
if current_person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
family.set_father_handle(current_person.get_handle())
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
current_person.set_gender(gen.lib.Person.MALE)
|
||||
person.add_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif current_person.get_gender() == gen.lib.Person.MALE:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
family.set_father_handle(current_person.get_handle())
|
||||
family.set_mother_handle(person.get_handle())
|
||||
family.set_relationship(gen.lib.FamilyRelType.MARRIED)
|
||||
person.add_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif current_person.get_gender() == gen.lib.Person.FEMALE:
|
||||
ErrorDialog(_("Same genders on Active and new person."),
|
||||
_("Can't add new person as a spouse."))
|
||||
return
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_SIBLING:
|
||||
# "Add as a Sibling"
|
||||
added = False
|
||||
for family_handle in current_person.get_parent_family_handle_list():
|
||||
family = self.dbstate.db.get_family_from_handle(family_handle)
|
||||
if family:
|
||||
childref = gen.lib.ChildRef()
|
||||
childref.set_reference_handle(person.get_handle())
|
||||
family.add_child_ref( childref)
|
||||
person.add_parent_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
if added:
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
else:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
childref = gen.lib.ChildRef()
|
||||
childref.set_reference_handle(person.get_handle())
|
||||
family.add_child_ref( childref)
|
||||
childref = gen.lib.ChildRef()
|
||||
childref.set_reference_handle(current_person.get_handle())
|
||||
family.add_child_ref( childref)
|
||||
person.add_parent_family_handle(family.get_handle())
|
||||
current_person.add_parent_family_handle(family.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
elif self.de_widgets["NPRelation"].get_active() == self.AS_CHILD:
|
||||
# "Add as a Child"
|
||||
added = False
|
||||
family = None
|
||||
for family_handle in current_person.get_family_handle_list():
|
||||
family = self.dbstate.db.get_family_from_handle(family_handle)
|
||||
if family:
|
||||
childref = gen.lib.ChildRef()
|
||||
childref.set_reference_handle(person.get_handle())
|
||||
family.add_child_ref( childref)
|
||||
person.add_parent_family_handle(family.get_handle())
|
||||
added = True
|
||||
break
|
||||
if added:
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
else:
|
||||
if current_person.get_gender() == gen.lib.Person.UNKNOWN:
|
||||
ErrorDialog(_("Please set gender on Active person."),
|
||||
_("Can't add new person as a child."))
|
||||
return
|
||||
else:
|
||||
family = gen.lib.Family()
|
||||
self.dbstate.db.add_family(family, self.trans)
|
||||
childref = gen.lib.ChildRef()
|
||||
childref.set_reference_handle(person.get_handle())
|
||||
family.add_child_ref( childref)
|
||||
person.add_parent_family_handle(family.get_handle())
|
||||
current_person.add_family_handle(family.get_handle())
|
||||
if gen.lib.Person.FEMALE:
|
||||
family.set_mother_handle(current_person.get_handle())
|
||||
else:
|
||||
family.set_father_handle(current_person.get_handle())
|
||||
self.dbstate.db.commit_family(family, self.trans)
|
||||
# Commit changes -------------------------------------------------
|
||||
if current_person:
|
||||
self.dbstate.db.commit_person(current_person, self.trans)
|
||||
if person:
|
||||
self.dbstate.db.commit_person(person, self.trans)
|
||||
self.dbstate.db.transaction_commit(self.trans,
|
||||
(_("Gramplet Data Entry: %s") % name_displayer.display(person)))
|
||||
|
||||
def copy_data_entry(self, obj):
|
||||
self.de_widgets["NPName"].set_text(self.de_widgets["APName"].get_text())
|
||||
self.de_widgets["NPBirth"].set_text(self.de_widgets["APBirth"].get_text())
|
||||
self.de_widgets["NPDeath"].set_text(self.de_widgets["APDeath"].get_text())
|
||||
self.de_widgets["NPGender"].set_active(self.de_widgets["APGender"].get_active())
|
||||
# FIXME: put cursor in add surname
|
||||
|
||||
def clear_data_edit(self, obj):
|
||||
self.de_widgets["Active person"].set_text("")
|
||||
self.de_widgets["APName"].set_text("")
|
||||
self.de_widgets["APBirth"].set_text("")
|
||||
self.de_widgets["APDeath"].set_text("")
|
||||
self.de_widgets["APGender"].set_active(gen.lib.Person.UNKNOWN)
|
||||
|
||||
def clear_data_entry(self, obj):
|
||||
self.de_widgets["NPName"].set_text("")
|
||||
self.de_widgets["NPBirth"].set_text("")
|
||||
self.de_widgets["NPDeath"].set_text("")
|
||||
self.de_widgets["NPRelation"].set_active(self.NO_REL)
|
||||
self.de_widgets["NPGender"].set_active(gen.lib.Person.UNKNOWN)
|
||||
|
||||
def db_changed(self):
|
||||
"""
|
||||
If person or family changes, the relatives of active person might have
|
||||
changed
|
||||
"""
|
||||
self.dbstate.db.connect('person-add', self.update)
|
||||
self.dbstate.db.connect('person-delete', self.update)
|
||||
self.dbstate.db.connect('person-edit', self.update)
|
||||
self.dbstate.db.connect('family-add', self.update)
|
||||
self.dbstate.db.connect('family-delete', self.update)
|
||||
self.dbstate.db.connect('person-rebuild', self.update)
|
||||
self.dbstate.db.connect('family-rebuild', self.update)
|
||||
self.dirty = False
|
||||
self.dirty_person = None
|
||||
self.clear_data_entry(None)
|
||||
|
||||
def active_changed(self, handle):
|
||||
self.update()
|
@ -73,21 +73,6 @@ register(GRAMPLET,
|
||||
gramplet_title=_("Calendar"),
|
||||
)
|
||||
|
||||
register(GRAMPLET,
|
||||
id="Data Entry Gramplet",
|
||||
name=_("Data Entry Gramplet"),
|
||||
fname="DataEntryGramplet.py",
|
||||
status=UNSTABLE,
|
||||
height=375,
|
||||
expand=False,
|
||||
gramplet = 'DataEntryGramplet',
|
||||
gramplet_title=_("Data Entry"),
|
||||
detached_width = 510,
|
||||
detached_height = 480,
|
||||
#gramps="3.1.0",
|
||||
version="1.0.0",
|
||||
)
|
||||
|
||||
register(GRAMPLET,
|
||||
id = "Deep Connections Gramplet",
|
||||
name =_("Deep Connections Gramplet"),
|
||||
|
Loading…
Reference in New Issue
Block a user