* src/RelLib.py (SourceNote): Add methods for detection and removal

source references in itself and child objects; (SourceNote,Person,
Family,Event,Place,Source,MediaRef): Add method for determining child
sourceref-capable objects.
* src/Utils.py (get_source_referents): Add function.
* src/EditSource.py (display_references): Use new sourceref detection;
(DelSrcQuery.__init__): Accept object lists; (DelSrcQuery.query_response):
Use new sourceref removal.
* src/SourceView.py (on_delete_clicked): Use new sourceref detection;
(delete_source,is_used): Remove functions.


svn: r4160
This commit is contained in:
Alex Roitman 2005-03-11 21:05:46 +00:00
parent 33245ae20c
commit 70514fbb3a
5 changed files with 296 additions and 392 deletions

View File

@ -1,3 +1,15 @@
2005-03-11 Alex Roitman <shura@gramps-project.org>
* src/RelLib.py (SourceNote): Add methods for detection and removal
source references in itself and child objects; (SourceNote,Person,
Family,Event,Place,Source,MediaRef): Add method for determining child
sourceref-capable objects.
* src/Utils.py (get_source_referents): Add function.
* src/EditSource.py (display_references): Use new sourceref detection;
(DelSrcQuery.__init__): Accept object lists; (DelSrcQuery.query_response):
Use new sourceref removal.
* src/SourceView.py (on_delete_clicked): Use new sourceref detection;
(delete_source,is_used): Remove functions.
2005-03-11 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/GenericFilter.py (PersonWithIncompleteEvent,
FamilyWithIncompleteEvent, ProbablyAlive,PeoplePrivate):

View File

@ -256,293 +256,55 @@ class EditSource:
self.top.present()
def display_references(self):
p_event_list = []
p_event_list_media = []
p_event_list_media_attr = []
p_attr_list = []
p_addr_list = []
p_name_list = []
p_media_list = []
p_media_attr_list = []
p_lds_list = []
m_list = []
m_attr_list = []
f_event_list = []
f_event_list_media = []
f_event_list_media_attr = []
f_attr_list = []
f_media_list = []
f_media_attr_list = []
f_lds_list = []
person_list = []
family_list = []
p_list = []
for key in self.db.get_place_handles():
p = self.db.get_place_from_handle(key)
name = p.get_title()
for sref in p.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_list.append(name)
for key in self.db.get_person_handles(sort_handles=False):
p = self.db.get_person_from_handle(key)
name = self.name_display(p)
# Sources of person
for sref in p.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
person_list.append((name,''))
for event_handle in p.get_event_list() + [p.get_birth_handle(), p.get_death_handle()]:
if event_handle:
event = self.db.get_event_from_handle(event_handle)
# Personal event sources
for sref in event.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_event_list.append((name,event.get_name()))
# personal event's media
for v in event.get_media_list():
# personal event's media's sources
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
o_handle = v.get_reference_handle()
o = self.db.get_object_from_handle(o_handle)
p_event_list_media.append((name,o.get_description()))
for vv in v.get_attribute_list():
# personal event's media's attribute's sources
for sref in vv.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_event_list_media_attr.append((name,vv.get_type()))
# personal LDS events Sources
if p.get_lds_baptism():
for sref in p.get_lds_baptism().get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_lds_list.append((name,_('LDS Baptism')))
if p.get_lds_endowment():
for sref in p.get_lds_endowment().get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_lds_list.append((name,_('Endowment')))
if p.get_lds_sealing():
for sref in p.get_lds_sealing().get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_lds_list.append((name,_('Sealed to parents')))
(person_list,family_list,event_list,
place_list,source_list,media_list
) = Utils.get_source_referents(self.source.get_handle(),self.db)
# Personal attribute's sources
for v in p.get_attribute_list():
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_attr_list.append((name,v.get_type()))
# personal Names' sources
for v in p.get_alternate_names() + [p.get_primary_name()]:
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_name_list.append((name,v.get_name()))
# personal addresses' sources
for v in p.get_address_list():
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_addr_list.append((name,v.get_street()))
# personal media sources
for v in p.get_media_list():
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
o_handle = v.get_reference_handle()
o = self.db.get_object_from_handle(o_handle)
p_media_list.append((name,o.get_description()))
for vv in v.get_attribute_list():
# personal media's attribute's sources
for sref in vv.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
p_media_attr_list.append((name,vv.get_type()))
# personal media's sources
for object_handle in self.db.get_media_object_handles():
obj = self.db.get_object_from_handle(object_handle)
name = obj.get_description()
for sref in obj.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
m_list.append(name)
for v in obj.get_attribute_list():
# personal media attribute's sources
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
m_attr_list.append((name,v.get_type()))
for family_handle in self.db.get_family_handles():
family = self.db.get_family_from_handle(family_handle)
f_id = family.get_father_handle()
m_id = family.get_mother_handle()
if f_id:
f = self.db.get_person_from_handle(f_id)
if m_id:
m = self.db.get_person_from_handle(m_id)
if f_id and m_id:
name = _("%(father)s and %(mother)s") % {
"father" : self.name_display(f),
"mother" : self.name_display(m)}
elif f_id:
name = self.name_display(f)
else:
name = self.name_display(m)
for v_id in family.get_event_list():
v = self.db.get_event_from_handle(v_id)
if not v:
continue
# Family events sources
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
f_event_list.append((name,v.get_name()))
# Family event's media
for vv in v.get_media_list():
# Family event's media's sources
for sref in vv.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
o_handle = vv.get_reference_handle()
o = self.db.get_object_from_handle(o_handle)
f_event_list_media.append((name,o.get_description()))
for vvv in vv.get_attribute_list():
# Family event's media's attribute's sources
for sref in vvv.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
f_event_list_media_attr.append((name,vvv.get_type()))
# Family LDS events' sources
if family.get_lds_sealing():
for sref in family.get_lds_sealing().get_source_references():
if sref.get_base_handle() == self.source.get_handle():
f_lds_list.append((name,_('Sealed to spouse')))
# Family sources
for sref in family.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
family_list.append((name,''))
# Family attributes
for v in family.get_attribute_list():
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
f_attr_list.append((name,v.get_type()))
# Family media
for v in family.get_media_list():
# Family media sources
for sref in v.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
o_handle = v.get_reference_handle()
o = self.db.get_object_from_handle(o_handle)
f_media_list.append((name,o.get_description()))
for vv in v.get_attribute_list():
# Family media's attribute's sources
for sref in vv.get_source_references():
if sref.get_base_handle() == self.source.get_handle():
f_media_attr_list.append((name,vv.get_type()))
any = person_list or family_list or event_list \
or place_list or source_list or media_list
slist = self.top_window.get_widget('slist')
titles = [(_('Source Type'),0,150),(_('Object'),1,150),(_('Value'),2,150)]
titles = [(_('Object Type'),0,150),(_('ID'),1,50),(_('Name'),2,150)]
self.model = ListModel.ListModel(slist,titles)
any = 0
if len(person_list) > 0:
any = 1
for p in person_list:
self.model.add([_("Persons"),p[0],''])
for handle in person_list:
person = self.db.get_person_from_handle(handle)
name = self.name_display(person)
gramps_id = person.get_gramps_id()
self.model.add([_("Person"),gramps_id,name])
if len(p_event_list) > 0:
any = 1
for p in p_event_list:
self.model.add([_("Individual Events"),p[0],
const.display_pevent(p[1])])
for handle in family_list:
family = self.db.get_family_from_handle(handle)
name = Utils.family_name(family,self.db)
gramps_id = family.get_gramps_id()
self.model.add([_("Family"),gramps_id,name])
if len(p_event_list_media) > 0:
any = 1
for p in p_event_list_media:
self.model.add([_("Individual Events Galleries"),p[0],p[1]])
for handle in event_list:
event = self.db.get_event_from_handle(handle)
name = event.get_name()
gramps_id = event.get_gramps_id()
self.model.add([_("Event"),gramps_id,name])
if len(p_event_list_media_attr) > 0:
any = 1
for p in p_event_list_media_attr:
self.model.add([_("Individual Events Galleries' Attributes"),p[0],p[1]])
for handle in place_list:
place = self.db.get_place_from_handle(handle)
name = place.get_title()
gramps_id = place.get_gramps_id()
self.model.add([_("Place"),gramps_id,name])
if len(p_attr_list) > 0:
any = 1
for p in p_attr_list:
self.model.add([_("Individual Attributes"),p[0],
const.display_pattr(p[1])])
if len(p_name_list) > 0:
any = 1
for p in p_name_list:
self.model.add([_("Individual Names"),p[0],p[1]])
for handle in source_list:
source = self.db.get_source_from_handle(handle)
name = source.get_title()
gramps_id = source.get_gramps_id()
self.model.add([_("Source"),gramps_id,name])
if len(p_media_list) > 0:
any = 1
for p in p_media_list:
self.model.add([_("Individual Galleries"),p[0],p[1]])
if len(p_media_attr_list) > 0:
any = 1
for p in p_media_attr_list:
self.model.add([_("Individual Galleries' Attributes"),p[0],p[1]])
if len(p_lds_list) > 0:
any = 1
for p in p_lds_list:
self.model.add([_("Individual LDS events"),p[0],p[1]])
if len(family_list) > 0:
any = 1
for p in family_list:
self.model.add([_("Families"),p[0],''])
if len(f_event_list) > 0:
any = 1
for p in f_event_list:
self.model.add([_("Family Events"),p[0],
const.display_fevent(p[1])])
if len(f_lds_list) > 0:
any = 1
for p in f_lds_list:
self.model.add([_("Family LDS events"),p[0],p[1]])
if len(f_event_list_media) > 0:
any = 1
for p in f_event_list_media:
self.model.add([_("Family Events Galleries"),p[0],p[1]])
if len(f_event_list_media_attr) > 0:
any = 1
for p in f_event_list_media_attr:
self.model.add([_("Family Events Galleries' Attributes"),p[0],p[1]])
if len(f_attr_list) > 0:
any = 1
for p in f_event_list:
self.model.add([_("Family Attributes"),p[0],
const.display_fattr(p[1])])
if len(f_media_list) > 0:
any = 1
for p in f_media_list:
self.model.add([_("Family Galleries"),p[0],p[1]])
if len(f_media_attr_list) > 0:
any = 1
for p in f_media_attr_list:
self.model.add([_("Family Galleries' Attributes"),p[0],p[1]])
if len(m_list) > 0:
any = 1
for p in m_list:
self.model.add([_("Media Objects"),p,''])
if len(m_attr_list) > 0:
any = 1
for p in m_attr_list:
self.model.add([_("Media Attributes"),p[0],p[1]])
if len(p_list) > 0:
any = 1
for p in p_list:
self.model.add([_("Places"),p,''])
if len(p_addr_list) > 0:
any = 1
for p in p_addr_list:
self.model.add([_("Addresses"),p[0],p[1]])
for handle in media_list:
media = self.db.get_object_from_handle(handle)
name = media.get_description()
gramps_id = media.get_gramps_id()
self.model.add([_("Media"),gramps_id,name])
if any:
Utils.bold_label(self.refs_label)
@ -618,70 +380,50 @@ class EditSource:
class DelSrcQuery:
def __init__(self,source,db,update):
def __init__(self,source,db,the_lists,update):
self.source = source
self.db = db
self.the_lists = the_lists
self.update = update
def delete_source(self,obj):
m = 0
l = []
for sref in obj.get_source_references():
if sref.get_base_handle() != self.source.get_handle():
l.append(sref)
else:
m = 1
if m:
obj.set_source_reference_list(l)
return m
def query_response(self):
trans = self.db.transaction_begin()
for key in self.db.get_person_handles(sort_handles=False):
commit = 0
p = self.db.get_person_from_handle(key)
for v_id in p.get_event_list() + [p.get_birth_handle(), p.get_death_handle()]:
v = self.db.get_event_from_handle(v_id)
if v:
commit += self.delete_source(v)
(person_list,family_list,event_list,
place_list,source_list,media_list) = self.the_lists
for v in p.get_attribute_list():
commit += self.delete_source(v)
src_handle_list = [self.source.get_handle()]
for v in p.get_alternate_names() + [p.get_primary_name()]:
commit += self.delete_source(v)
for handle in person_list:
person = self.db.get_person_from_handle(handle)
person.remove_source_references(src_handle_list)
self.db.commit_person(person,trans)
for v in p.get_address_list():
commit += self.delete_source(v)
if commit > 0:
self.db.commit_person(p,trans)
for handle in family_list:
family = self.db.get_family_from_handle(handle)
family.remove_source_references(src_handle_list)
self.db.commit_family(family,trans)
for p_id in self.db.get_family_handles():
commit = 0
p = self.db.get_family_from_handle(p_id)
for v_id in p.get_event_list():
v = self.db.get_event_from_handle(v_id)
if v:
commit += self.delete_source(v)
self.db.commit_event(v,trans)
for handle in event_list:
event = self.db.get_event_from_handle(handle)
event.remove_source_references(src_handle_list)
self.db.commit_event(event,trans)
for v in p.get_attribute_list():
commit += self.delete_source(v)
self.db.commit_event(v,trans)
if commit > 0:
self.db.commit_family(p,trans)
for handle in place_list:
place = self.db.get_place_from_handle(handle)
place.remove_source_references(src_handle_list)
self.db.commit_place(place,trans)
for p_id in self.db.get_media_object_handles():
p = self.db.get_object_from_handle(p_id)
if self.delete_source(p):
self.db.commit_media_object(p,trans)
for key in self.db.get_place_handles():
p = self.db.get_place_from_handle(key)
if self.delete_source(self.db.get_place_from_handle(key)):
self.db.commit_place(p,trans)
for handle in source_list:
source = self.db.get_source_from_handle(handle)
source.remove_source_references(src_handle_list)
self.db.commit_source(source,trans)
for handle in media_list:
media = self.db.get_object_from_handle(handle)
media.remove_source_references(src_handle_list)
self.db.commit_media_object(media,trans)
self.db.remove_source(self.source.get_handle(),trans)
self.db.transaction_commit(trans,_("Delete Source (%s)") % self.source.get_title())
self.update(self.source.get_handle())

View File

@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2004 Donald N. Allingham
# Copyright (C) 2000-2005 Donald N. Allingham
#
# 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
@ -191,6 +191,51 @@ class SourceNote:
"""
return self.source_list
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
return []
def has_source_reference(self,src_handle) :
"""
Returns True if the object or any of it's child objects has reference
to this source handle.
@param src_handle: The source handle to be checked.
@type src_ref: str
@return: Returns whether the object or any of it's child objects has reference to this source handle.
@rtype: bool
"""
for src_ref in self.source_list:
# Using direct access here, not the getter method -- efficiency!
if src_ref.ref == src_handle:
return True
for item in self.get_sourcref_child_list():
if item.has_source_reference(src_handle):
return True
return False
def remove_source_references(self,src_handle_list):
"""
Removes references to all source handles in the list
in this object and all child objects.
@param src_handle_list: The list of source handles to be removed.
@type src_handle_list: list
"""
new_source_list = [ src_ref for src_ref in self.source_list \
if src_ref.ref not in src_handle_list ]
self.source_list = new_source_list
for item in self.get_sourcref_child_list():
item.remove_source_references(src_handle_list)
def set_source_reference_list(self,src_ref_list) :
"""
Assigns the passed list to the object's list of source references.
@ -420,6 +465,19 @@ class Person(PrimaryObject,DataObj):
self.lds_seal, self.complete, self.source_list, self.note,
self.change,self.private) = (data + (False,))[0:23]
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
lds_list = [self.lds_bapt,self.lds_endow,self.lds_seal]
lds_check_list = [item for item in lds_list if item]
return [self.primary_name] + self.media_list + \
self.alternate_names + self.address_list + \
self.attribute_list + lds_check_list
def set_complete_flag(self,val):
"""
Sets or clears the complete flag, which is used to indicate that the
@ -1130,6 +1188,18 @@ class Family(PrimaryObject,SourceNote):
self.media_list, self.attribute_list, self.lds_seal,
self.complete, self.source_list, self.note, self.change) = data
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
check_list = self.media_list + self.attribute_list
if self.lds_seal:
check_list.append(self.lds_seal)
return check_list
def set_complete_flag(self,val):
"""
Sets or clears the complete flag, which is used to indicate that the
@ -1478,6 +1548,15 @@ class Event(PrimaryObject,DataObj):
self.place, self.cause, self.private, self.source_list,
self.note, self.witness, self.media_list, self.change) = data
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
return self.media_list
def add_media_reference(self,media_ref):
"""
Adds a L{MediaRef} instance to the object's media list.
@ -1808,6 +1887,15 @@ class Place(PrimaryObject,SourceNote):
self.main_loc, self.alt_loc, self.urls, self.media_list,
self.source_list, self.note, self.change) = data
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
return self.media_list
def get_url_list(self):
"""
Returns the list of L{Url} instances associated with the Place
@ -2061,6 +2149,15 @@ class MediaObject(PrimaryObject,SourceNote):
self.attrlist, self.source_list, self.note, self.change,
self.date, self.place) = data
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
return self.attrlist
def set_place_handle(self,place_handle):
"""
Sets the handle of the L{Place} instance associated with the MediaRef
@ -2200,6 +2297,42 @@ class Source(PrimaryObject):
self.pubinfo, self.note, self.media_list,
self.abbrev, self.change, self.datamap) = data
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
return self.media_list
def has_source_reference(self,src_handle) :
"""
Returns True if any of the child objects has reference
to this source handle.
@param src_handle: The source handle to be checked.
@type src_ref: str
@return: Returns whether any of it's child objects has reference to this source handle.
@rtype: bool
"""
for item in self.get_sourcref_child_list():
if item.has_source_reference(src_handle):
return True
return False
def remove_source_references(self,src_handle_list):
"""
Removes references to all source handles in the list
in all child objects.
@param src_handle_list: The list of source handles to be removed.
@type src_handle_list: list
"""
for item in self.get_sourcref_child_list():
item.remove_source_references(src_handle_list)
def add_media_reference(self,media_ref):
"""
Adds a L{MediaRef} instance to the object's media list.
@ -2680,6 +2813,15 @@ class MediaRef(SourceNote):
self.note = None
self.rect = None
def get_sourcref_child_list(self):
"""
Returns the list of child secondary objects that may refer sources.
@return: Returns the list of child secondary child objects that may refer sources.
@rtype: list
"""
return self.attrlist
def set_privacy(self,val):
"""
Sets or clears the privacy flag of the data

View File

@ -1,7 +1,6 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2001-2004 Donald N. Allingham
# Copyright (C) 2001-2005 Donald N. Allingham
#
# 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
@ -37,7 +36,7 @@ import RelLib
import EditSource
import DisplayModels
import const
import Utils
from QuestionDialog import QuestionDialog
#-------------------------------------------------------------------------
@ -130,11 +129,11 @@ class SourceView:
return False
def key_press(self,obj,event):
if event.keyval == gtk.gdk.keyval_from_name("Return") \
and not event.state:
self.on_edit_clicked(obj)
return True
return False
if event.keyval == gtk.gdk.keyval_from_name("Return") \
and not event.state:
self.on_edit_clicked(obj)
return True
return False
def build_context_menu(self,event):
"""Builds the menu with editing operations on the source's list"""
@ -165,14 +164,6 @@ class SourceView:
EditSource.EditSource(RelLib.Source(),self.parent.db,self.parent,
self.topWindow,self.new_after_edit)
def delete_source(self,source):
trans = self.parent.db.transaction_begin()
source_handle = source.get_handle()
self.parent.db.remove_source(source_handle,trans)
title_msg = _("Delete Source (%s)") % source.get_title()
self.parent.db.transaction_commit(trans,title_msg)
self.model.delete_row_by_handle(source_handle)
def on_delete_clicked(self,obj):
store,node = self.selection.get_selected()
if not node:
@ -181,63 +172,31 @@ class SourceView:
handle = store.get_value(node,_HANDLE_COL)
source = self.parent.db.get_source_from_handle(handle)
if self.is_used(source):
ans = EditSource.DelSrcQuery(source,self.parent.db,
the_lists = Utils.get_source_referents(handle,self.parent.db)
used = the_lists[0] or the_lists[1] or the_lists[2] \
or the_lists[3] or the_lists[4] or the_lists[5]
ans = EditSource.DelSrcQuery(source,self.parent.db,the_lists,
self.model.delete_row_by_handle)
if used:
QuestionDialog(_('Delete %s?') % source.get_title(),
_('This source is currently being used. Deleting it '
'will remove it from the database and from all '
'records that reference it.'),
'records that reference it. The data can only '
'be recovered by Undo operation or by quitting '
'with abandoning changes.'),
_('_Delete Source'),
ans.query_response,self.topWindow)
else:
self.delete_source(source)
def is_used(self,source):
for key in self.parent.db.get_place_handles():
p = self.parent.db.get_place_from_handle(key)
for sref in p.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for key in self.parent.db.get_person_handles(sort_handles=False):
p = self.parent.db.get_person_from_handle(key)
for v_id in p.get_event_list() + [p.get_birth_handle(), p.get_death_handle()]:
v = self.parent.db.get_event_from_handle(v_id)
if v:
for sref in v.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for v in p.get_attribute_list():
for sref in v.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for v in p.get_alternate_names() + [p.get_primary_name()]:
for sref in v.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for v in p.get_address_list():
for sref in v.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for p_id in self.parent.db.get_media_object_handles():
p = self.parent.db.get_object_from_handle(p_id)
for sref in p.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for p_id in self.parent.db.get_family_handles():
p = self.parent.db.get_family_from_handle(p_id)
for v_id in p.get_event_list():
v = self.parent.db.get_event_from_handle(v_id)
if v:
for sref in v.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
for v in p.get_attribute_list():
for sref in v.get_source_references():
if sref.get_base_handle() == source.get_handle():
return True
return False
QuestionDialog(_('Delete %s?') % source.get_title(),
_('Deleting source will remove it from the '
'database. The data can only be recovered by '
'Undo operation or by quitting with abandoning '
'changes.'),
_('_Delete Source'),
ans.query_response,self.topWindow)
def on_edit_clicked(self,obj):
list_store, node = self.selection.get_selected()

View File

@ -109,7 +109,9 @@ def family_name(family,db):
if father and mother:
fname = NameDisplay.displayer.display(father)
mname = NameDisplay.displayer.display(mother)
name = _("%s and %s") % (fname,mname)
name = _("%(father)s and %(mother)s") % {
"father" : fname,
"mother" : mname}
elif father:
name = NameDisplay.displayer.display(father)
else:
@ -491,6 +493,53 @@ def not_too_old(date):
year = date.get_year()
return not( year != 0 and current_year - year > 110)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def get_source_referents(source_handle,db):
"""
Find objects that refer the source.
This function finds all primary objects that refer (directly or through
secondary child-objects) to a given source handle in a given database.
"""
# Persons
person_list = [ handle \
for handle in db.get_person_handles(sort_handles=False) \
if db.get_person_from_handle(handle).has_source_reference(source_handle)
]
# Families
family_list = [ handle for handle in db.get_family_handles() \
if db.get_family_from_handle(handle).has_source_reference(source_handle)
]
# Events
event_list = [ handle for handle in db.get_event_handles() \
if db.get_event_from_handle(handle).has_source_reference(source_handle)
]
# Places
place_list = [ handle for handle in db.get_place_handles() \
if db.get_place_from_handle(handle).has_source_reference(source_handle)
]
# Sources
source_list = [ handle for handle in db.get_source_handles() \
if db.get_source_from_handle(handle).has_source_reference(source_handle)
]
# Media Objects
media_list = [ handle for handle in db.get_media_object_handles() \
if db.get_object_from_handle(handle).has_source_reference(source_handle)
]
return (person_list,family_list,event_list,
place_list,source_list,media_list)
#-------------------------------------------------------------------------
#
#