export/import filters

svn: r3082
This commit is contained in:
Don Allingham 2004-04-09 04:05:48 +00:00
parent 5f9bada119
commit 96579ed88f
16 changed files with 60 additions and 590 deletions

1
README
View File

@ -9,7 +9,6 @@ The following packages *MUST* be installed in order for Gramps to work:
Gnome 2.0 or greater
PyGTK2 1.99.14 or greater
Gnome-python 1.99.14 or greater
PyXML 0.7.1 or greater
Many distributions already provide PyXML, but if your
installation does not have it, you can get it from

10
TODO
View File

@ -1,16 +1,6 @@
* Allow for multiple notes. A tabbed interface would be really useful,
since there are no titles for notes. Not all objects would necessarily
need multiple notes. Determine which ones should and shouldn't.
=== THESE should be obsoleted once we move to a database
* Speed up the reading of the database. The python XML routines are not
as fast as I would like, and it can take a minute or so to read a
large database. This is way too slow.
* Finish the generic load of revision control interfaces to allow a
revision control plugin system. Most of the work is already done.
* Disable the save buttons if gramps database is marked read-only. Disable
the adding of media objects as well, since this will cause gramps to
try to create a thumbnail in a readonly database.
===
* Startup tips.
* Date calculator.
See http://sourceforge.net/mailarchive/forum.php?thread_id=3252078&forum_id=1993

View File

@ -95,21 +95,11 @@ pkgpython_PYTHON = \
# If not using GNU make, then list all files individually
# The latter is more portable and POSIX-friendly :)
GLADEFILES = \
dialog.glade\
edit_person.glade\
errdialogs.glade\
gramps.glade\
imagesel.glade\
marriage.glade\
mergedata.glade\
places.glade\
plugins.glade\
preferences.glade\
revision.glade\
rule.glade\
srcsel.glade\
styles.glade\
choose.glade
styles.glade
GRAPHICS = \
bad.png\
@ -118,12 +108,9 @@ GRAPHICS = \
family48.png\
good.png\
gramps.png\
gramps.xpm\
logo.png\
media.png\
pedigree.xpm\
people48.png\
people.xpm\
place.png\
sources.png\
splash.jpg\

View File

@ -207,21 +207,11 @@ pkgpython_PYTHON = \
# If not using GNU make, then list all files individually
# The latter is more portable and POSIX-friendly :)
GLADEFILES = \
dialog.glade\
edit_person.glade\
errdialogs.glade\
gramps.glade\
imagesel.glade\
marriage.glade\
mergedata.glade\
places.glade\
plugins.glade\
preferences.glade\
revision.glade\
rule.glade\
srcsel.glade\
styles.glade\
choose.glade
styles.glade
GRAPHICS = \
@ -231,12 +221,9 @@ GRAPHICS = \
family48.png\
good.png\
gramps.png\
gramps.xpm\
logo.png\
media.png\
pedigree.xpm\
people48.png\
people.xpm\
place.png\
sources.png\
splash.jpg\

View File

@ -3006,7 +3006,7 @@ class GrampsDB:
map[gid] = self.add_event(event,trans)
return event
def find_source_from_id(self,val,trans):
def find_source_from_id(self,val,trans=None):
"""finds a Source in the database from the passed gramps' ID.
If no such Source exists, a new Source is added to the database."""

View File

@ -562,14 +562,14 @@ class XmlWriter:
else:
calstr = ''
if date.isRange():
d1 = date.get_start_date().getIsoDate()
d2 = date.get_stop_date().getIsoDate()
if date.is_range():
d1 = date.get_start_date().get_iso_date()
d2 = date.get_stop_date().get_iso_date()
self.g.write('%s<daterange start="%s" stop="%s"%s/>\n' % (sp,d1,d2,calstr))
elif date.isValid():
elif date.is_valid():
d1 = date.get_start_date()
mode = d1.getModeVal()
dstr = d1.getIsoDate()
mode = d1.get_mode_val()
dstr = d1.get_iso_date()
if mode == Calendar.BEFORE:
pref = ' type="before"'
@ -684,8 +684,8 @@ class XmlWriter:
def write_media_list(self,list,indent=3):
sp = ' '*indent
for photo in list:
mobj = photo.get_reference()
self.g.write('%s<objref ref="%s"' % (sp,mobj.get_id()))
mobj_id = photo.get_reference_id()
self.g.write('%s<objref ref="%s"' % (sp,mobj_id))
if photo.get_privacy():
self.g.write(' priv="1"')
proplist = photo.get_attribute_list()

View File

@ -69,7 +69,7 @@ caution_xpm = "%s/caution.png" % rootDir
system_filters = "%s/system_filters.xml" % rootDir
custom_filters = "~/.gramps/custom_filters.xml"
icon = "%s/gramps.xpm" % rootDir
icon = "%s/gramps.png" % rootDir
logo = "%s/logo.png" % rootDir
gladeFile = "%s/gramps.glade" % rootDir
placesFile = "%s/gramps.glade" % rootDir

View File

@ -13,7 +13,7 @@
<property name="modal">False</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="icon">gramps.xpm</property>
<property name="icon">gramps.png</property>
<property name="enable_layout_config">True</property>
<signal name="destroy" handler="on_exit_activate"/>
<signal name="delete_event" handler="delete_event"/>

View File

@ -1,101 +0,0 @@
/* XPM */
static char * gramps_xpm[] = {
"48 48 50 1",
" c None",
". c #B39169",
"+ c #E8D3B9",
"@ c #E8D3B8",
"# c #E8D2B7",
"$ c #E7D2B6",
"% c #E7D1B6",
"& c #E7D1B5",
"* c #E7D1B4",
"= c #000000",
"- c #E7D0B4",
"; c #E6D0B3",
"> c #EAD7BE",
", c #EAD6BE",
"' c #EAD6BD",
") c #E9D6BC",
"! c #E9D5BC",
"~ c #E9D5BB",
"{ c #E9D4BA",
"] c #E8D4B9",
"^ c #E6CFB2",
"/ c #E6CFB1",
"( c #E6CEB1",
"_ c #E5CEB0",
": c #E5CDAF",
"< c #E5CDAE",
"[ c #E5CCAE",
"} c #EBD9C1",
"| c #EBD8C1",
"1 c #EBD8C0",
"2 c #EAD8C0",
"3 c #EAD7BF",
"4 c #E4CCAD",
"5 c #E4CCAC",
"6 c #E4CBAC",
"7 c #E4CBAB",
"8 c #E4CAAA",
"9 c #E3CAAA",
"0 c #E3CAA9",
"a c #E3C9A9",
"b c #E3C9A8",
"c c #E3C8A7",
"d c #E2C8A7",
"e c #E2C8A6",
"f c #E2C7A6",
"g c #E2C7A5",
"h c #E2C7A4",
"i c #E2C6A4",
"j c #E1C6A3",
"k c #E1C5A2",
" ",
" ",
" ",
" ",
" .......... ",
" .+@@##$%&. ",
" .@@##$%&*.= ",
" ===.@##$%&*-.= ",
" = .##$%&*-;.= ",
" = .#$%&*-;;.= ",
" .......... = ..........= ",
" .>,')!~~{. = ======== ",
" .,')!~~{{.= = ",
" ===.')!~~{{].==== ",
" = .)!~~{{]+.= = .......... ",
" = .!~~{{]+@.= = .;;^^/(__. ",
" = ..........= = .;^^/(__:.= ",
" = ======== ===.^^/(__::.= ",
" = .^/(__::<.= ",
" = ./(__::<[.= ",
" .......... = ..........= ",
" .}|1233>,. = ======== ",
" .|1233>,'.= = ",
" .1233>,').==== ",
" .233>,')!.= = ",
" .33>,')!~.= = .......... ",
" ..........= = .[4567789. ",
" ======== = .45677890.= ",
" = ===.5677890a.= ",
" = = .677890ab.= ",
" = .......... = .77890abb.= ",
" = .;;^^/(__. = ..........= ",
" = .;^^/(__:.= = ======== ",
" ===.^^/(__::.==== ",
" .^/(__::<.= = ",
" ./(__::<[.= = .......... ",
" ..........= = .bbcdefgh. ",
" ======== = .bcdefghi.= ",
" ===.cdefghij.= ",
" .defghijj.= ",
" .efghijjk.= ",
" ..........= ",
" ======== ",
" ",
" ",
" ",
" ",
" "};

View File

@ -1,33 +0,0 @@
/* XPM */
static char * pedegree_xpm[] = {
"22 22 8 1",
" c None",
". c #330066",
"+ c #404040",
"@ c #3F3F3F",
"# c #3C3C3C",
"$ c #3E3E3E",
"% c #434343",
"& c #3D3D3D",
" ",
" ",
" ...... ",
" .++++++ ",
" .+ ",
" .......+ ",
" .++++@.@ ",
" .+ .# ",
" .+ ...... ",
" .+ @@@$$@ ",
" ......+ ",
" +++%.+ ",
" .+ ...... ",
" .+ .++++++ ",
" .@ .+ ",
" .......+ ",
" @&$@@.+ ",
" .+ ",
" ...... ",
" ++++++ ",
" ",
" "};

View File

@ -1,52 +0,0 @@
/* XPM */
static char * icon_people03b_24x24_xpm[] = {
"24 24 25 1",
" c None",
". c #DBD8D1",
"+ c #FBFBFB",
"@ c #B9B4A9",
"# c #BBB6A8",
"$ c #50493B",
"% c #433C31",
"& c #7F796D",
"* c #776E57",
"= c #F0E7C8",
"- c #000000",
"; c #9B9791",
"> c #FFFFFF",
", c #B9B7AB",
"' c #929081",
") c #898777",
"! c #6E6951",
"~ c #817E69",
"{ c #8E8C7B",
"] c #868474",
"^ c #A19E8F",
"/ c #7F796C",
"( c #423C30",
"_ c #50493A",
": c #646464",
" ",
" .++++++++++++++++@ ",
" #$%%%%%%%%%%%%%%&* ",
" #*==============#*- ",
" #*====;;;;;;====#*- ",
" #*===;>>>>>>;===#*- ",
" #*==;>>>,,>>>>==#*- ",
" #*=;>>>,'',>>>>=#*- ",
" #*=;>>>)!!~>>>>=#*- ",
" #*=;>>>!!!!>>>>=#*- ",
" #*=;>>>{!!~>>>>=#*- ",
" #*=;>>>>!!>>>>>=#*- ",
" #*=;>>>,!!,>>>>=#*- ",
" #*=;>>,]!!]^>>>=#*- ",
" #*=;>,]!!!!]^>>=#*- ",
" #*==^!!!!!!!!^==#*- ",
" #*===^!!!!!!^===#*- ",
" #*====^^^^^^====#*- ",
" #*==============#*- ",
" #@++++++++++++++.*- ",
" /((((((((((((((((_- ",
" ------------------ ",
" ::::::::::::::::: ",
" "};

View File

@ -507,7 +507,6 @@ class GedcomParser:
self.person = self.find_or_create_person(id)
self.added[self.person.get_id()] = self.person
self.parse_individual()
self.db.build_person_display(self.person.get_id())
self.db.commit_person(self.person)
elif matches[2] in ["SUBM","SUBN","REPO"]:
self.ignore_sub_junk(1)
@ -1695,7 +1694,6 @@ class GedcomParser:
source_ref.set_base_id(s.get_id())
s.set_title('Imported Source #%d' % self.localref)
s.set_note(matches[2] + self.parse_continue_data(level))
self.db.build_source_display(s.get_id())
self.ignore_sub_junk(level+1)
else:
source_ref.set_base_id(self.db.find_source(matches[2],self.smap).get_id())

View File

@ -123,7 +123,7 @@ class ReadPkg:
os.rmdir(tmpdir_path)
self.window.destroy()
self.callback(1)
self.callback()
def progress(self,val):
self.progress_bar.set_fraction(val)

View File

@ -128,18 +128,25 @@ class PackageWriter:
try:
uri = gnome.vfs.URI('burn:///%s' % base)
gnome.vfs.make_directory(uri,gnome.vfs.OPEN_WRITE)
except gnome.vfs.error, msg:
print msg
os._exit(1)
except gnome.vfs.FileExistsError, msg:
QuestionDialog.ErrorDialog(_("CD export preparation failed"),
"1 %s " % str(msg))
return
except:
QuestionDialog.ErrorDialog("CD export preparation failed",
'Could not create burn:///%s' % base)
return
try:
uri = gnome.vfs.URI('burn:///%s/.thumb' % base)
gnome.vfs.make_directory(uri,gnome.vfs.OPEN_WRITE)
except gnome.vfs.error, msg:
print msg
os._exit(1)
except gnome.vfs.FileExistsError, msg:
QuestionDialog.ErrorDialog("CD export preparation failed",
"2 %s " % str(msg))
return
for obj in self.db.get_object_map().values():
for obj_id in self.db.get_object_keys():
obj = self.db.find_object_from_id(obj_id)
oldfile = obj.get_path()
root = os.path.basename(oldfile)
if os.path.isfile(oldfile):
@ -169,41 +176,55 @@ class PackageWriter:
try:
uri = gnome.vfs.URI('burn:///%s' % base)
gnome.vfs.make_directory(uri,gnome.vfs.OPEN_WRITE)
except gnome.vfs.error, msg:
print msg
except gnome.vfs.FileExistsError:
QuestionDialog.ErrorDialog(_("CD export preparation failed"),
"File already exists")
return
except:
QuestionDialog.ErrorDialog(_("CD export preparation failed"),
_('Could not create burn:///%s') % base)
return
try:
uri = gnome.vfs.URI('burn:///%s/.thumb' % base)
gnome.vfs.make_directory(uri,gnome.vfs.OPEN_WRITE)
except gnome.vfs.error, msg:
print msg
except gnome.vfs.FileExistsError, msg:
QuestionDialog.ErrorDialog("CD export preparation failed",
"4 %s " % str(msg))
return
except:
QuestionDialog.ErrorDialog(_("CD export preparation failed"),
_('Could not create burn:///%s/.thumb') % base)
return
#--------------------------------------------------------
def remove_clicked():
# File is lost => remove all references and the object itself
mobj = self.db.get_object(self.object_id)
for p in self.db.get_family_id_map().values():
for p_id in self.db.get_family_keys:
p = self.db.find_family_from_id(p_id)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
nl.remove(o)
p.set_media_list(nl)
for key in self.db.get_person_keys():
p = self.db.get_person(key)
p = self.db.find_person_from_id(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
nl.remove(o)
p.set_media_list(nl)
for key in self.db.get_source_keys():
p = self.db.get_source(key)
p = self.db.find_source_from_id(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
nl.remove(o)
p.set_media_list(nl)
for key in self.db.get_place_id_keys():
p = self.db.get_place_id(key)
p = self.db.find_place_from_id(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
@ -241,7 +262,8 @@ class PackageWriter:
# Write media files first, since the database may be modified
# during the process (i.e. when removing object)
for obj in self.db.get_object_map().values():
for obj_id in self.db.get_object_keys():
obj = self.db.find_object_from_id(obj_id)
oldfile = obj.get_path()
root = os.path.basename(oldfile)
if os.path.isfile(oldfile):

View File

@ -108,29 +108,30 @@ class PackageWriter:
#--------------------------------------------------------------
def remove_clicked():
# File is lost => remove all references and the object itself
mobj = ObjectMap[ObjectId]
for p in self.db.get_family_id_map().values():
mobj = self.db.find_family_from_id(ObjectId)
for p_id in self.db.get_family_keys():
p = self.db.find_family_from_id(p_id)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
nl.remove(o)
p.set_media_list(nl)
for key in self.db.get_person_keys():
p = self.db.get_person(key)
p = self.db.find_person_from_id(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
nl.remove(o)
p.set_media_list(nl)
for key in self.db.get_source_keys():
p = self.db.get_source(key)
p = self.db.find_person_from_source(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
nl.remove(o)
p.set_media_list(nl)
for key in self.db.get_place_id_keys():
p = self.db.get_place_id(key)
p = self.db.find_place_from_id(key)
nl = p.get_media_list()
for o in nl:
if o.get_reference() == mobj:
@ -169,9 +170,8 @@ class PackageWriter:
# Write media files first, since the database may be modified
# during the process (i.e. when removing object)
ObjectMap = self.db.get_object_map()
for ObjectId in ObjectMap.keys():
oldfile = ObjectMap[ObjectId].get_path()
for ObjectId in self.db.get_object_keys():
oldfile = self.db.find_object_from_id(ObjectId).get_path()
base = os.path.basename(oldfile)
if os.path.isfile(oldfile):
g = open(oldfile,"rb")

View File

@ -1,327 +0,0 @@
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd" >
<glade-interface>
<requires lib="gnome" />
<widget class="GtkDialog" id="pafExport">
<property name="title" translatable="yes">Export PAF for PalmOS file</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="modal">yes</property>
<property name="allow_shrink">no</property>
<property name="allow_grow">no</property>
<property name="visible">yes</property>
<property name="window-position">GTK_WIN_POS_CENTER</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
<property name="homogeneous">no</property>
<property name="spacing">8</property>
<property name="visible">yes</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="layout_style">GTK_BUTTONBOX_END</property>
<property name="spacing">8</property>
<property name="visible">yes</property>
<child>
<widget class="GtkButton" id="ok">
<property name="can_default">yes</property>
<property name="can_focus">yes</property>
<property name="visible">yes</property>
<property name="label">gtk-ok</property>
<property name="use_stock">yes</property>
<property name="use_underline">yes</property>
<signal name="clicked" handler="on_ok_clicked" object="pafExport" />
</widget>
</child>
<child>
<widget class="GtkButton" id="cancel">
<property name="can_default">yes</property>
<property name="can_focus">yes</property>
<property name="visible">yes</property>
<property name="label">gtk-cancel</property>
<property name="use_stock">yes</property>
<property name="use_underline">yes</property>
<signal name="clicked" handler="destroy_passed_object" object="pafExport" />
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">yes</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="homogeneous">no</property>
<property name="spacing">0</property>
<property name="visible">yes</property>
<child>
<widget class="GtkLabel" id="exportTitle">
<property name="label" translatable="yes">PAF for PalmOS Export</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">no</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
<child>
<widget class="GtkHSeparator" id="hseparator1">
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">10</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
<child>
<widget class="GnomeFileEntry" id="fileentry1">
<property name="history_id">pafExport</property>
<property name="modal">yes</property>
<property name="width-request">350</property>
<property name="directory_entry">no</property>
<property name="browse_dialog_title">Export PAF for PalmOS</property>
<property name="visible">yes</property>
<child internal-child="entry">
<widget class="GtkEntry" id="filename">
<property name="can_focus">yes</property>
<property name="editable">yes</property>
<property name="text" translatable="yes"></property>
<property name="max-length">0</property>
<property name="visibility">yes</property>
<property name="visible">yes</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">5</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame2">
<property name="border_width">5</property>
<property name="label" translatable="yes">Filter</property>
<property name="label_xalign">0</property>
<property name="shadow">GTK_SHADOW_ETCHED_IN</property>
<property name="visible">yes</property>
<child>
<widget class="GtkOptionMenu" id="filter">
<property name="border_width">5</property>
<property name="can_focus">yes</property>
<property name="history">0</property>
<property name="visible">yes</property>
<child internal-child="menu">
<widget class="GtkMenu" id="convertwidget1">
<property name="visible">yes</property>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame3">
<property name="border_width">5</property>
<property name="label" translatable="yes">Information</property>
<property name="label_xalign">0</property>
<property name="shadow">GTK_SHADOW_ETCHED_IN</property>
<property name="visible">yes</property>
<child>
<widget class="GtkVBox" id="vbox2">
<property name="homogeneous">no</property>
<property name="spacing">0</property>
<property name="visible">yes</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="homogeneous">no</property>
<property name="spacing">0</property>
<property name="visible">yes</property>
<child>
<widget class="GtkLabel" id="label1">
<property name="label" translatable="yes">Database name: </property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">no</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">5</property>
<property name="ypad">0</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="dbname">
<property name="can_focus">yes</property>
<property name="editable">yes</property>
<property name="text" translatable="yes"></property>
<property name="max-length">20</property>
<property name="visibility">yes</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">5</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="label" translatable="yes">Description</property>
<property name="justify">GTK_JUSTIFY_CENTER</property>
<property name="wrap">no</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">3</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="description">
<property name="can_focus">yes</property>
<property name="editable">yes</property>
<property name="text" translatable="yes"></property>
<property name="max-length">0</property>
<property name="visibility">yes</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
<child>
<widget class="GtkFrame" id="frame1">
<property name="border_width">5</property>
<property name="label" translatable="yes">Options</property>
<property name="label_xalign">0</property>
<property name="shadow">GTK_SHADOW_ETCHED_IN</property>
<property name="visible">yes</property>
<child>
<widget class="GtkVBox" id="vbox3">
<property name="homogeneous">no</property>
<property name="spacing">0</property>
<property name="visible">yes</property>
<child>
<widget class="GtkCheckButton" id="private">
<property name="border_width">3</property>
<property name="can_focus">yes</property>
<property name="label" translatable="yes">Do not include records marked private</property>
<property name="active">yes</property>
<property name="draw_indicator">yes</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="restrict">
<property name="border_width">3</property>
<property name="can_focus">yes</property>
<property name="label" translatable="yes">Restrict information on living people</property>
<property name="active">yes</property>
<property name="draw_indicator">yes</property>
<property name="visible">yes</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">no</property>
<property name="fill">no</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">4</property>
<property name="expand">yes</property>
<property name="fill">yes</property>
</packing>
</child>
</widget>
</glade-interface>