Checking for deleting sources and places, added listing of where sources and places are used.

svn: r479
This commit is contained in:
Don Allingham 2001-10-18 02:42:02 +00:00
parent 9a29d60af5
commit 71940dea50
8 changed files with 433 additions and 274 deletions

View File

@ -54,7 +54,6 @@ from RelLib import *
import const
import sort
import utils
import Config
class AddSpouse:
def __init__(self,db,person,update,addperson):

View File

@ -72,13 +72,50 @@ class EditPerson:
self.path = db.getSavePath()
self.not_loaded = 1
self.lists_changed = 0
pid = "i%s" % person.getId()
self.top = libglade.GladeXML(const.editPersonFile, "editPerson")
self.gallery_widget = self.top.get_widget("photolist")
self.gallery = PersonGallery(self, self.path, pid, self.gallery_widget, self.db)
self.top.signal_autoconnect({
"destroy_passed_object" : self.on_cancel_edit,
"on_add_address_clicked" : self.on_add_addr_clicked,
"on_add_aka_clicked" : self.on_add_aka_clicked,
"on_add_attr_clicked" : self.on_add_attr_clicked,
"on_add_url_clicked" : self.on_add_url_clicked,
"on_addphoto_clicked" : self.gallery.on_add_photo_clicked,
"on_address_list_select_row": self.on_addr_list_select_row,
"on_aka_delete_clicked" : self.on_aka_delete_clicked,
"on_aka_update_clicked" : self.on_aka_update_clicked,
"on_apply_person_clicked" : self.on_apply_person_clicked,
"on_attr_list_select_row" : self.on_attr_list_select_row,
"on_edit_birth_clicked" : self.on_edit_birth_clicked,
"on_edit_death_clicked" : self.on_edit_death_clicked,
"on_delete_address_clicked" : self.on_delete_addr_clicked,
"on_delete_attr_clicked" : self.on_delete_attr_clicked,
"on_delete_event" : self.on_delete_event,
"on_delete_url_clicked" : self.on_delete_url_clicked,
"on_deletephoto_clicked" : self.gallery.on_delete_photo_clicked,
"on_edit_properties_clicked": self.gallery.popup_change_description,
"on_editperson_switch_page" : self.on_switch_page,
"on_event_add_clicked" : self.on_event_add_clicked,
"on_event_delete_clicked" : self.on_event_delete_clicked,
"on_event_select_row" : self.on_event_select_row,
"on_event_update_clicked" : self.on_event_update_clicked,
"on_makeprimary_clicked" : self.gallery.on_primary_photo_clicked,
"on_name_list_select_row" : self.on_name_list_select_row,
"on_name_note_clicked" : self.on_name_note_clicked,
"on_name_source_clicked" : self.on_primary_name_source_clicked,
"on_photolist_button_press_event" : self.gallery.on_photolist_button_press_event,
"on_photolist_select_icon" : self.gallery.on_photo_select_icon,
"on_update_address_clicked" : self.on_update_addr_clicked,
"on_update_attr_clicked" : self.on_update_attr_clicked,
"on_update_url_clicked" : self.on_update_url_clicked,
"on_web_go_clicked" : self.on_web_go_clicked,
"on_web_list_select_row" : self.on_web_list_select_row,
})
self.window = self.get_widget("editPerson")
self.gallery_widget = self.top.get_widget("photolist")
pid = "i%s" % person.getId()
self.gallery = PersonGallery(self, self.path, pid, self.gallery_widget, self.db)
self.notes_field = self.get_widget("personNotes")
self.event_name_field = self.get_widget("eventName")
self.event_place_field = self.get_widget("eventPlace")
@ -155,44 +192,6 @@ class EditPerson:
self.window.editable_enters(self.ddate);
self.window.editable_enters(self.dplace);
id = self.top.signal_autoconnect({
"destroy_passed_object" : self.on_cancel_edit,
"on_add_address_clicked" : self.on_add_addr_clicked,
"on_add_aka_clicked" : self.on_add_aka_clicked,
"on_add_attr_clicked" : self.on_add_attr_clicked,
"on_add_url_clicked" : self.on_add_url_clicked,
"on_addphoto_clicked" : self.gallery.on_add_photo_clicked,
"on_address_list_select_row": self.on_addr_list_select_row,
"on_aka_delete_clicked" : self.on_aka_delete_clicked,
"on_aka_update_clicked" : self.on_aka_update_clicked,
"on_apply_person_clicked" : self.on_apply_person_clicked,
"on_attr_list_select_row" : self.on_attr_list_select_row,
"on_edit_birth_clicked" : self.on_edit_birth_clicked,
"on_edit_death_clicked" : self.on_edit_death_clicked,
"on_delete_address_clicked" : self.on_delete_addr_clicked,
"on_delete_attr_clicked" : self.on_delete_attr_clicked,
"on_delete_event" : self.on_delete_event,
"on_delete_url_clicked" : self.on_delete_url_clicked,
"on_deletephoto_clicked" : self.gallery.on_delete_photo_clicked,
"on_edit_properties_clicked": self.gallery.popup_change_description,
"on_editperson_switch_page" : self.on_switch_page,
"on_event_add_clicked" : self.on_event_add_clicked,
"on_event_delete_clicked" : self.on_event_delete_clicked,
"on_event_select_row" : self.on_event_select_row,
"on_event_update_clicked" : self.on_event_update_clicked,
"on_makeprimary_clicked" : self.gallery.on_primary_photo_clicked,
"on_name_list_select_row" : self.on_name_list_select_row,
"on_name_note_clicked" : self.on_name_note_clicked,
"on_name_source_clicked" : self.on_primary_name_source_clicked,
"on_photolist_button_press_event" : self.gallery.on_photolist_button_press_event,
"on_photolist_select_icon" : self.gallery.on_photo_select_icon,
"on_update_address_clicked" : self.on_update_addr_clicked,
"on_update_attr_clicked" : self.on_update_attr_clicked,
"on_update_url_clicked" : self.on_update_url_clicked,
"on_web_go_clicked" : self.on_web_go_clicked,
"on_web_list_select_row" : self.on_web_list_select_row,
})
if len(const.surnames) > 0:
const.surnames.sort()
self.get_widget("lastNameList").set_popdown_strings(const.surnames)
@ -313,16 +312,19 @@ class EditPerson:
UrlEdit.UrlEditor(self,pname,None)
def on_add_attr_clicked(self,obj):
"""Brings up the AttributeEditor for a new attribute"""
import AttrEdit
pname = self.person.getPrimaryName().getName()
AttrEdit.AttributeEditor(self,None,pname,const.personalAttributes)
def on_event_add_clicked(self,obj):
"""Brings up the EventEditor for a new event"""
import EventEdit
pname = self.person.getPrimaryName().getName()
EventEdit.EventEditor(self,pname,const.personalEvents,const.save_fevent,None,0)
def on_edit_birth_clicked(self,obj):
"""Brings up the EventEditor for the birth record, event name cannot be changed"""
import EventEdit
pname = self.person.getPrimaryName().getName()
event = self.birth
@ -334,6 +336,7 @@ class EditPerson:
const.save_fevent,event,1)
def on_edit_death_clicked(self,obj):
"""Brings up the EventEditor for the death record, event name cannot be changed"""
import EventEdit
pname = self.person.getPrimaryName().getName()
event = self.death
@ -344,26 +347,31 @@ class EditPerson:
EventEdit.EventEditor(self,pname,const.personalEvents,const.save_fevent,event,1)
def on_aka_delete_clicked(self,obj):
"""Deletes the selected name from the name list"""
if utils.delete_selected(obj,self.nlist):
self.lists_changed = 1
self.redraw_name_list()
def on_delete_url_clicked(self,obj):
"""Deletes the selected URL from the URL list"""
if utils.delete_selected(obj,self.ulist):
self.lists_changed = 1
self.redraw_url_list()
def on_delete_attr_clicked(self,obj):
"""Deletes the selected attribute from the attribute list"""
if utils.delete_selected(obj,self.alist):
self.lists_changed = 1
self.redraw_attr_list()
def on_delete_addr_clicked(self,obj):
"""Deletes the selected address from the address list"""
if utils.delete_selected(obj,self.plist):
self.lists_changed = 1
self.redraw_addr_list()
def on_web_go_clicked(self,obj):
"""Attempts to display the selected URL in a web browser"""
import gnome.url
text = obj.get()
@ -371,6 +379,7 @@ class EditPerson:
gnome.url.show(text)
def on_cancel_edit(self,obj):
"""If the data has changed, give the user a chance to cancel the close window"""
if self.did_data_change():
q = _("Are you sure you want to abandon your changes?")
GnomeQuestionDialog(q,self.cancel_callback)
@ -378,6 +387,7 @@ class EditPerson:
utils.destroy_passed_object(obj)
def on_delete_event(self,obj,b):
"""If the data has changed, give the user a chance to cancel the close window"""
if self.did_data_change():
q = _("Are you sure you want to abandon your changes?")
GnomeQuestionDialog(q,self.cancel_callback)
@ -387,11 +397,12 @@ class EditPerson:
return FALSE
def cancel_callback(self,a):
"""If the user answered yes to abandoning changes, close the window"""
if a==0:
utils.destroy_passed_object(self.window)
def did_data_change(self):
"""Check to see if any of the data has changed from the original record"""
surname = self.surname_field.get_text()
suffix = self.suffix.get_text()
given = self.given.get_text()
@ -448,6 +459,7 @@ class EditPerson:
return changed
def on_event_delete_clicked(self,obj):
"""Delete the selected event"""
if utils.delete_selected(obj,self.elist):
self.lists_changed = 1
self.redraw_event_list()
@ -703,7 +715,6 @@ class EditPerson:
self.update_lists()
self.callback(self)
self.window.hide()
utils.destroy_passed_object(obj)
def on_primary_name_source_clicked(self,obj):

View File

@ -63,6 +63,7 @@ class EditPlace:
self.callback = func
self.path = db.getSavePath()
self.not_loaded = 1
self.ref_not_loaded = 1
self.lists_changed = 0
if place:
self.srcreflist = place.getSourceRefList()
@ -105,6 +106,7 @@ class EditPlace:
self.country.set_text(mloc.get_country())
self.longitude.set_text(place.get_longitude())
self.latitude.set_text(place.get_latitude())
self.refinfo = self.top_window.get_widget("refinfo")
self.note.set_point(0)
self.note.insert_defaults(place.getNote())
@ -232,6 +234,9 @@ class EditPlace:
if page == 3 and self.not_loaded:
self.not_loaded = 0
self.gallery.load_images()
elif page == 5 and self.ref_not_loaded:
self.ref_not_loaded = 0
self.display_references()
def on_update_url_clicked(self,obj):
import UrlEdit
@ -294,6 +299,48 @@ class EditPlace:
self.loc_state.set_text(loc.get_state())
self.loc_country.set_text(loc.get_country())
def display_references(self):
pevent = []
fevent = []
for p in self.db.getPersonMap().values():
for event in [p.getBirth(), p.getDeath()] + p.getEventList():
if event.getPlace() == self.place:
pevent.append((p,event))
for f in self.db.getFamilyMap().values():
for event in f.getEventList():
if event.getPlace() == self.place:
fevent.append((f,event))
self.refinfo.set_point(0)
self.refinfo.set_word_wrap(1)
if len(pevent) > 0:
self.refinfo.insert_defaults(_("People") + "\n")
self.refinfo.insert_defaults("_________________________\n\n")
t = _("%s [%s]: event %s\n")
for e in pevent:
msg = t % (Config.nameof(e[0]),e[0].getId(),e[1].getName())
self.refinfo.insert_defaults(msg)
if len(fevent) > 0:
self.refinfo.insert_defaults("\n%s\n" % _("Families"))
self.refinfo.insert_defaults("_________________________\n\n")
t = _("%s [%s]: event %s\n")
for e in fevent:
father = e[0].getFather()
mother = e[0].getMother()
if father and mother:
fname = "%s and %s" % (Config.nameof(father),Config.nameof(mother))
elif father:
fname = "%s" % Config.nameof(father)
else:
fname = "%s" % Config.nameof(mother)
msg = t % (fname,e[0].getId(),e[1].getName())
self.refinfo.insert_defaults(msg)
#-------------------------------------------------------------------------
#
#
@ -316,56 +363,23 @@ def src_changed(parent):
class DeletePlaceQuery:
def __init__(self,db,place,update,pevent,fevent):
def __init__(self,place,db,update):
self.db = db
self.place = place
self.update = update
self.pevent = pevent
self.fevent = fevent
msg = []
self.xml = libglade.GladeXML(const.gladeFile,"place_query")
self.xml.signal_autoconnect({
'on_force_delete_clicked': self.on_force_delete_clicked,
'destroy_passed_object' : utils.destroy_passed_object})
textbox = self.xml.get_widget("text")
textbox.set_point(0)
textbox.set_word_wrap(1)
if len(pevent) > 0:
textbox.insert_defaults(_("People") + "\n")
textbox.insert_defaults("_________________________\n\n")
t = _("%s [%s]: event %s\n")
for e in pevent:
msg = t % (Config.nameof(e[0]),e[0].getId(),e[1].getName())
textbox.insert_defaults(msg)
if len(fevent) > 0:
textbox.insert_defaults("\n%s\n" % _("Families"))
textbox.insert_defaults("_________________________\n\n")
t = _("%s [%s]: event %s\n")
for e in fevent:
father = e[0].getFather()
mother = e[0].getMother()
if father and mother:
fname = "%s and %s" % (Config.nameof(father),Config.nameof(mother))
elif father:
fname = "%s" % Config.nameof(father)
else:
fname = "%s" % Config.nameof(mother)
msg = t % (fname,e[0].getId(),e[1].getName())
textbox.insert_defaults(msg)
def on_force_delete_clicked(self,obj):
for event in self.pevent + self.fevent:
event[1].setPlace(None)
map = self.db.getPlaceMap()
del map[self.place.getId()]
def query_response(self,ans):
if ans == 1:
return
del self.db.getPlaceMap()[self.place.getId()]
utils.modified()
utils.destroy_passed_object(obj)
self.update(0)
for p in self.db.getPersonMap().values():
for event in [p.getBirth(), p.getDeath()] + p.getEventList():
if event.getPlace() == self.place:
event.setPlace(None)
for f in self.db.getFamilyMap().values():
for event in f.getEventList():
if event.getPlace() == self.place:
event.setPlace(None)
self.update(0)

View File

@ -43,6 +43,7 @@ import libglade
import intl
import const
import utils
import Config
from RelLib import *
import ImageSelect
@ -62,6 +63,7 @@ class EditSource:
self.callback = func
self.path = db.getSavePath()
self.not_loaded = 1
self.ref_not_loaded = 1
self.top_window = libglade.GladeXML(const.gladeFile,"sourceEditor")
sid = "s%s" % source.getId()
@ -71,6 +73,7 @@ class EditSource:
self.author = self.top_window.get_widget("author")
self.pubinfo = self.top_window.get_widget("pubinfo")
self.note = self.top_window.get_widget("source_note")
self.refinfo = self.top_window.get_widget("refinfo")
self.title.set_text(source.getTitle())
self.author.set_text(source.getAuthor())
@ -87,6 +90,7 @@ class EditSource:
"on_switch_page" : self.on_switch_page,
"on_addphoto_clicked" : self.gallery.on_add_photo_clicked,
"on_deletephoto_clicked" : self.gallery.on_delete_photo_clicked,
"on_edit_properties_clicked": self.gallery.popup_change_description,
"on_sourceapply_clicked" : self.on_source_apply_clicked
})
@ -96,9 +100,101 @@ class EditSource:
self.top_window.get_widget("add_photo").set_sensitive(0)
self.top_window.get_widget("delete_photo").set_sensitive(0)
self.top.editable_enters(self.title);
self.top.editable_enters(self.author);
self.top.editable_enters(self.pubinfo);
self.top.editable_enters(self.title)
self.top.editable_enters(self.author)
self.top.editable_enters(self.pubinfo)
def display_references(self):
p_event_list = []
p_attr_list = []
p_addr_list = []
p_name_list = []
m_list = []
f_event_list = []
f_attr_list = []
p_list = []
for p in self.db.getPlaceMap().values():
name = p.get_title()
for sref in p.getSourceRefList():
if sref.getBase() == self.source:
p_list.append(name)
for p in self.db.getPersonMap().values():
name = Config.nameof(p)
for v in p.getEventList() + [p.getBirth(), p.getDeath()]:
for sref in v.getSourceRefList():
if sref.getBase() == self.source:
p_event_list.append((name,v.getName()))
for v in p.getAttributeList():
for sref in v.getSourceRefList():
if sref.getBase() == self.source:
p_attr_list.append((name,v.getType()))
for v in p.getAlternateNames() + [p.getPrimaryName()]:
for sref in v.getSourceRefList():
if sref.getBase() == self.source:
p_name_list.append((name,v.getName()))
for v in p.getAddressList():
for sref in v.getSourceRefList():
if sref.getBase() == self.source:
p_addr_list.append((name,v.getStreet()))
for p in self.db.getObjectMap().values():
name = p.getDescription()
for sref in p.getSourceRefList():
if sref.getBase() == self.source:
m_list.append(name)
for p in self.db.getFamilyMap().values():
f = p.getFather()
m = p.getMother()
if f and m:
name = _("%s and %s") % (Config.nameof(f),Config.nameof(m))
elif f:
name = "%s" % Config.nameof(f)
else:
name = "%s" % Config.nameof(m)
for v in p.getEventList():
for sref in v.getSourceRefList():
if sref.getBase() == self.source:
f_event_list.append((n,v.getName()))
for v in p.getAttributeList():
for sref in v.getSourceRefList():
if sref.getBase() == self.source:
f_attr_list.append((name,v.getType()))
add = self.refinfo.insert_defaults
if len(p_event_list) > 0:
add(_("Individual Events"))
add("\n-----------------------------\n")
for p in p_event_list:
add("%s: %s\n" % (p[0],const.display_pevent(p[1])))
if len(p_attr_list) > 0:
add(_("Individual Attributes"))
add("\n-----------------------------\n")
for p in p_attr_list:
add("%s: %s\n" % (p[0],const.display_pattr(p[1])))
if len(p_name_list) > 0:
add(_("Individual Names"))
add("\n-----------------------------\n")
for p in p_name_list:
add("%s: %s\n" % p)
if len(f_event_list) > 0:
add(_("Family Events"))
add("\n-----------------------------\n")
for p in f_event_list:
add("%s: %s\n" % (p[0],const.display_fevent(p[1])))
if len(f_attr_list) > 0:
add(_("Family Attributes"))
add("\n-----------------------------\n")
for p in f_event_list:
add("%s: %s\n" % (p[0],const.display_fattr(p[1])))
if len(m_list) > 0:
add(_("Media Objects"))
add("\n-----------------------------\n")
for p in m_event_list:
add("%s\n" % m)
if len(m_list) > 0:
add(_("Places"))
add("\n-----------------------------\n")
for p in p_list:
add("%s\n" % m)
def on_source_apply_clicked(self,obj):
@ -130,4 +226,61 @@ class EditSource:
if page == 2 and self.not_loaded:
self.not_loaded = 0
self.gallery.load_images()
elif page == 3 and self.ref_not_loaded:
self.ref_not_loaded = 0
self.display_references()
class DelSrcQuery:
def __init__(self,source,db,update):
self.source = source
self.db = db
self.update = update
def delete_source(self,object):
m = 0
l = []
for sref in object.getSourceRefList():
if sref.getBase() != self.source:
l.append(sref)
else:
m = 1
if m:
object.setSourceRefList(l)
def query_response(self,ans):
if ans == 1:
return
del self.db.getSourceMap()[self.source.getId()]
utils.modified()
for p in self.db.getPersonMap().values():
for v in p.getEventList() + [p.getBirth(), p.getDeath()]:
self.delete_source(v)
for v in p.getAttributeList():
self.delete_source(v)
for v in p.getAlternateNames() + [p.getPrimaryName()]:
self.delete_source(v)
for v in p.getAddressList():
self.delete_source(v)
for p in self.db.getFamilyMap().values():
for v in p.getEventList():
self.delete_source(v)
for v in p.getAttributeList():
self.delete_source(v)
for p in self.db.getObjectMap().values():
self.delete_source(p)
for p in self.db.getPlaceMap().values():
self.delete_source(p)
self.update(0)

View File

@ -366,6 +366,7 @@ class Gallery(ImageSelect):
#
#-------------------------------------------------------------------------
def popup_change_description(self, obj):
if self.selectedIcon >=0:
photo = self.dataobj.getPhotoList()[self.selectedIcon]
LocalMediaProperties(photo,self.path)

View File

@ -2317,9 +2317,14 @@
<widget>
<class>GtkButton</class>
<name>button104</name>
<sensitive>False</sensitive>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_delete_source_clicked</handler>
<object>source_list</object>
<last_modification_time>Thu, 18 Oct 2001 00:36:56 GMT</last_modification_time>
</signal>
<label>Delete Source</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
@ -4820,7 +4825,6 @@ Unknown
<widget>
<class>GtkNotebook</class>
<name>notebook2</name>
<width>450</width>
<height>350</height>
<can_focus>True</can_focus>
<signal>
@ -5121,7 +5125,7 @@ Unknown
<object>sourceEditor</object>
<last_modification_time>Thu, 31 May 2001 14:39:32 GMT</last_modification_time>
</signal>
<label>Add Image</label>
<label>Add Media Object</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
@ -5136,7 +5140,22 @@ Unknown
<object>sourceEditor</object>
<last_modification_time>Thu, 31 May 2001 14:39:16 GMT</last_modification_time>
</signal>
<label>Delete Image</label>
<label>Delete Media Object</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button146</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_edit_properties_clicked</handler>
<object>sourceEditor</object>
<last_modification_time>Thu, 18 Oct 2001 00:11:41 GMT</last_modification_time>
</signal>
<label>Edit Properties</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
</widget>
@ -5156,6 +5175,36 @@ Unknown
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow32</name>
<hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<widget>
<class>GtkText</class>
<name>refinfo</name>
<can_focus>True</can_focus>
<editable>False</editable>
<text></text>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label274</name>
<label>References</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
</widget>
@ -6246,159 +6295,6 @@ Unknown
</widget>
</widget>
<widget>
<class>GnomeDialog</class>
<name>place_query</name>
<title>Gramps - Delete a currently used Place</title>
<type>GTK_WINDOW_DIALOG</type>
<position>GTK_WIN_POS_NONE</position>
<modal>True</modal>
<allow_shrink>True</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<auto_close>False</auto_close>
<hide_on_close>False</hide_on_close>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDialog:vbox</child_name>
<name>dialog-vbox13</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>4</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHButtonBox</class>
<child_name>GnomeDialog:action_area</child_name>
<name>dialog-action_area13</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>8</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>7</child_ipad_x>
<child_ipad_y>0</child_ipad_y>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkButton</class>
<name>force_delete</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_force_delete_clicked</handler>
<object>place_query</object>
<last_modification_time>Tue, 21 Aug 2001 15:30:46 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_YES</stock_button>
</widget>
<widget>
<class>GtkButton</class>
<name>button116</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>place_query</object>
<last_modification_time>Tue, 21 Aug 2001 15:33:25 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_NO</stock_button>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox39</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label234</name>
<label>Warning: This place is currently in use!</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>10</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator20</name>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow27</name>
<width>450</width>
<height>250</height>
<hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkText</class>
<name>text</name>
<can_focus>True</can_focus>
<editable>False</editable>
<text></text>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<name>label233</name>
<label>Do you wish to delete this place?</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>10</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>GnomeDialog</class>
<name>find</name>

View File

@ -490,14 +490,6 @@ def on_add_source_clicked(obj):
def on_add_place_clicked(obj):
EditPlace.EditPlace(Place(),database,new_place_after_edit)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_delete_source_clicked(obj):
pass
#-------------------------------------------------------------------------
#
#
@ -509,21 +501,22 @@ def on_delete_place_clicked(obj):
else:
index = obj.selection[0]
pevent = []
fevent = []
used = 0
place = obj.get_row_data(index)
for p in database.getPersonMap().values():
for event in [p.getBirth(), p.getDeath()] + p.getEventList():
if event.getPlace() == place:
pevent.append((p,event))
used = 1
for f in database.getFamilyMap().values():
for event in f.getEventList():
if event.getPlace() == place:
fevent.append((f,event))
used = 1
if len(pevent) > 0 or len(fevent) > 0:
if used == 1:
import EditPlace
EditPlace.DeletePlaceQuery(database,place,update_display,pevent,fevent)
ans = EditPlace.DeletePlaceQuery(place,database,update_display)
msg = _("This place is currently being used. Delete anyway?")
GnomeQuestionDialog(msg,ans.query_response)
else:
map = database.getPlaceMap()
del map[place.getId()]
@ -535,6 +528,71 @@ def on_delete_place_clicked(obj):
#
#
#-------------------------------------------------------------------------
def on_delete_source_clicked(obj):
import EditSource
if len(obj.selection) == 0:
return
else:
index = obj.selection[0]
source = obj.get_row_data(index)
ans = EditSource.DelSrcQuery(source,database,update_display)
if is_source_used(source):
msg = _("This source is currently being used. Delete anyway?")
GnomeQuestionDialog(msg,ans.query_response)
else:
map = database.getSourceMap()
del map[source.getId()]
utils.modified()
update_display(0)
def is_source_used(source):
for p in database.getPlaceMap().values():
for sref in p.getSourceRefList():
if sref.getBase() == source:
return 1
for p in database.getPersonMap().values():
for v in p.getEventList() + [p.getBirth(), p.getDeath()]:
for sref in v.getSourceRefList():
if sref.getBase() == source:
return 1
for v in p.getAttributeList():
for sref in v.getSourceRefList():
if sref.getBase() == source:
return 1
for v in p.getAlternateNames() + [p.getPrimaryName()]:
for sref in v.getSourceRefList():
if sref.getBase() == source:
return 1
for v in p.getAddressList():
for sref in v.getSourceRefList():
if sref.getBase() == source:
return 1
for p in database.getObjectMap().values():
for sref in p.getSourceRefList():
if sref.getBase() == source:
return 1
for p in database.getFamilyMap().values():
for v in p.getEventList():
for sref in v.getSourceRefList():
if sref.getBase() == source:
return 1
for v in p.getAttributeList():
for sref in v.getSourceRefList():
if sref.getBase() == source:
return 1
return 0
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_edit_source_clicked(obj):
if len(obj.selection) > 0:
index = obj.selection[0]

View File

@ -132,7 +132,6 @@
<widget>
<class>GtkNotebook</class>
<name>notebook3</name>
<width>450</width>
<height>350</height>
<can_focus>True</can_focus>
<signal>
@ -964,7 +963,6 @@
<widget>
<class>GtkCList</class>
<name>loc_list</name>
<width>500</width>
<can_focus>True</can_focus>
<signal>
<name>select_row</name>
@ -1117,7 +1115,6 @@
<widget>
<class>GtkText</class>
<name>place_note</name>
<width>500</width>
<can_focus>True</can_focus>
<editable>True</editable>
<text></text>
@ -1611,6 +1608,36 @@
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow31</name>
<hscrollbar_policy>GTK_POLICY_NEVER</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<widget>
<class>GtkText</class>
<name>refinfo</name>
<can_focus>True</can_focus>
<editable>False</editable>
<text></text>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label278</name>
<label>References</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
</widget>
</widget>
</widget>
</widget>