* src/AutoComp.py (StandardCustomSelector): Provide an option to

use an existing ComboBoxEntry instance; add set_values method.
* src/RelLib.py (Family.__init__): Use tuple for type.
* src/Utils.py: Add event_roles mapping.
* src/AddSpouse.py, src/EditPerson.py, src/FamilyView.py,
src/ListBox.py, src/Marriage.py, src/NameEdit.py: Support tuple
types.
* src/gramps.glade: Replace ComboBox with ComboBoxEntry; add icons.


svn: r4748
This commit is contained in:
Alex Roitman 2005-06-01 13:14:29 +00:00
parent d8e28d4c4c
commit f242e619e0
11 changed files with 442 additions and 167 deletions

View File

@ -1,3 +1,14 @@
2005-06-01 Alex Roitman <shura@gramps-project.org>
* src/AutoComp.py (StandardCustomSelector): Provide an option to
use an existing ComboBoxEntry instance; add set_values method.
* src/RelLib.py (Family.__init__): Use tuple for type.
* src/Utils.py: Add event_roles mapping.
* src/AddSpouse.py, src/EditPerson.py, src/FamilyView.py,
src/ListBox.py, src/Marriage.py, src/NameEdit.py: Support tuple
types.
* src/gramps.glade: Replace ComboBox with ComboBoxEntry; add icons.
2005-05-31 Martin Hawlisch <Martin.Hawlisch@gmx.de> 2005-05-31 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/EditSource.py, src/ListBox.py, src/ReadGedcom.py, * src/EditSource.py, src/ListBox.py, src/ReadGedcom.py,
src/WriteGedcom.py: Constants moved from const to Utils and RelLib src/WriteGedcom.py: Constants moved from const to Utils and RelLib

View File

@ -127,7 +127,7 @@ class AddSpouse:
"destroy_passed_object" : Utils.destroy_passed_object "destroy_passed_object" : Utils.destroy_passed_object
}) })
self.rel_combo.set_active(const.MARRIED) self.rel_combo.set_active(RelLib.Family.MARRIED)
self.update_data() self.update_data()
def build_all(self): def build_all(self):
@ -136,8 +136,8 @@ class AddSpouse:
return filt return filt
def build_likely(self,gender): def build_likely(self,gender):
birth_handle = self.person.get_birth_handle() birth_ref = self.person.get_birth_ref()
death_handle = self.person.get_death_handle() death_ref = self.person.get_death_ref()
filt = GenericFilter.GenericFilter() filt = GenericFilter.GenericFilter()
if gender == RelLib.Person.MALE: if gender == RelLib.Person.MALE:
@ -145,8 +145,8 @@ class AddSpouse:
else: else:
filt.add_rule(GenericFilter.IsMale([])) filt.add_rule(GenericFilter.IsMale([]))
if birth_handle: if birth_ref:
birth = self.db.get_event_from_handle(birth_handle) birth = self.db.get_event_from_handle(birth_ref.ref)
date_obj = Date.Date(birth.get_date_object()) date_obj = Date.Date(birth.get_date_object())
year = date_obj.get_year() year = date_obj.get_year()
if year: if year:
@ -310,7 +310,7 @@ class AddSpouse:
self.active_family.set_mother_handle(self.person.get_handle()) self.active_family.set_mother_handle(self.person.get_handle())
rtype = self.rel_combo.get_active() rtype = self.rel_combo.get_active()
self.active_family.set_relationship(rtype) self.active_family.set_relationship((rtype,Utils.family_relations[rtype]))
self.db.commit_family(self.active_family,trans) self.db.commit_family(self.active_family,trans)
self.db.transaction_commit(trans,_("Add Spouse")) self.db.transaction_commit(trans,_("Add Spouse"))

View File

@ -76,11 +76,18 @@ class StandardCustomSelector:
options or entering custom string. options or entering custom string.
The typical usage should be: The typical usage should be:
scs = StandardCustomSelector(mapping,custom_key,active_key) type_sel = StandardCustomSelector(mapping,None,custom_key,active_key)
whatever_table.attach(scs,...) whatever_table.attach(type_sel,...)
or
type_sel = StandardCustomSelector(mapping,cbe,custom_key,active_key)
with the existing ComboBoxEntry cbe.
To set up the combo box, specify the active key at creation time,
or later (or with custom text) use:
type_sel.set_values(i,s)
and later, when or before the dialog is closed, do: and later, when or before the dialog is closed, do:
(i,s) = scs.get_values() (i,s) = type_sel.get_values()
to obtain the tuple of (int,str) corresponding to the user selection. to obtain the tuple of (int,str) corresponding to the user selection.
@ -93,10 +100,12 @@ class StandardCustomSelector:
(active_key,mapping[active_key]) tuple. (active_key,mapping[active_key]) tuple.
""" """
def __init__(self,mapping,custom_key=None,active_key=None): def __init__(self,mapping,cbe=None,custom_key=None,active_key=None):
""" """
Constructor for the StandardCustomSelector class. Constructor for the StandardCustomSelector class.
@param cbe: Existing ComboBoxEntry widget to use.
@type cbe: gtk.ComboBoxEntry
@param mapping: The mapping between integer and string constants. @param mapping: The mapping between integer and string constants.
@type mapping: dict @type mapping: dict
@param custom_key: The key corresponding to the custom string entry @param custom_key: The key corresponding to the custom string entry
@ -118,6 +127,11 @@ class StandardCustomSelector:
self.fill() self.fill()
# create combo box entry # create combo box entry
if cbe:
self.selector = cbe
self.selector.set_model(self.store)
self.selector.set_text_column(1)
else:
self.selector = gtk.ComboBoxEntry(self.store,1) self.selector = gtk.ComboBoxEntry(self.store,1)
if self.active_key: if self.active_key:
self.selector.set_active(self.active_index) self.selector.set_active(self.active_index)
@ -159,9 +173,40 @@ class StandardCustomSelector:
if ai: if ai:
i = self.store.get_value(ai,0) i = self.store.get_value(ai,0)
s = self.store.get_value(ai,1) s = self.store.get_value(ai,1)
if s != self.mapping[i]:
s = self.selector.child.get_text().strip()
else:
i = self.custom_key
s = self.selector.child.get_text().strip()
if s in self.mapping.values():
for key in self.mapping.keys():
if s == self.mapping[key]:
i = key
break
else:
i = self.custom_key
return (i,s) return (i,s)
entry = self.selector.child
return (self.custom_key,entry.get_text()) def set_values(self,val):
"""
Set values according to given tuple.
@param val: (int,str) tuple with the values to set.
@type val: tuple
"""
i,s = val
if i in self.mapping.keys() and i != self.custom_key:
self.store.foreach(self.set_int_value,i)
elif self.custom_key != None:
self.selector.child.set_text(s)
else:
print "StandardCustomSelector.set(): Option not available:", val
def set_int_value(self,model,path,iter,val):
if model.get_value(iter,0) == val:
self.selector.set_active_iter(iter)
return True
return False
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
@ -174,8 +219,8 @@ if __name__ == "__main__":
print s.get_values() print s.get_values()
gtk.main_quit() gtk.main_quit()
s = StandardCustomSelector({0:'abc',1:'abd',2:'bbe'},None,0,1)
s = StandardCustomSelector({0:'abc',1:'abd',2:'bbe'},0) s.set_values((2,'bbe'))
w = gtk.Dialog() w = gtk.Dialog()
w.child.add(s.selector) w.child.add(s.selector)
w.connect('delete-event',here) w.connect('delete-event',here)

View File

@ -266,9 +266,11 @@ class EditPerson:
or (not self.lds_sealing.is_empty()): or (not self.lds_sealing.is_empty()):
Utils.bold_label(self.lds_tab) Utils.bold_label(self.lds_tab)
types = const.NameTypesMap.values() self.ntype_selector = \
types.sort() AutoComp.StandardCustomSelector(Utils.name_types,
AutoComp.fill_combo(self.ntype_field,types) self.ntype_field,
RelLib.Name.CUSTOM,
RelLib.Name.BIRTH)
self.write_primary_name() self.write_primary_name()
self.load_person_image() self.load_person_image()
@ -715,7 +717,7 @@ class EditPerson:
surname = unicode(self.surname.get_text()) surname = unicode(self.surname.get_text())
ntype = unicode(self.ntype_field.child.get_text()) ntype = self.ntype_selector.get_values()
suffix = unicode(self.suffix.get_text()) suffix = unicode(self.suffix.get_text())
prefix = unicode(self.prefix.get_text()) prefix = unicode(self.prefix.get_text())
given = unicode(self.given.get_text()) given = unicode(self.given.get_text())
@ -748,7 +750,7 @@ class EditPerson:
changed = True changed = True
if surname.upper() != name.get_surname().upper(): if surname.upper() != name.get_surname().upper():
changed = True changed = True
if ntype != const.NameTypesMap.find_value(name.get_type()): if ntype != name.get_type():
changed = True changed = True
if given != name.get_first_name(): if given != name.get_first_name():
changed = True changed = True
@ -883,7 +885,7 @@ class EditPerson:
surname = unicode(self.surname.get_text()) surname = unicode(self.surname.get_text())
suffix = unicode(self.suffix.get_text()) suffix = unicode(self.suffix.get_text())
prefix = unicode(self.prefix.get_text()) prefix = unicode(self.prefix.get_text())
ntype = unicode(self.ntype_field.child.get_text()) ntype = self.ntype_selector.get_values()
given = unicode(self.given.get_text()) given = unicode(self.given.get_text())
title = unicode(self.title.get_text()) title = unicode(self.title.get_text())
idval = unicode(self.gid.get_text()) idval = unicode(self.gid.get_text())
@ -912,11 +914,6 @@ class EditPerson:
if prefix != name.get_surname_prefix(): if prefix != name.get_surname_prefix():
name.set_surname_prefix(prefix) name.set_surname_prefix(prefix)
if const.NameTypesMap.has_value(ntype):
ntype = const.NameTypesMap.find_key(ntype)
else:
ntype = "Birth Name"
if ntype != name.get_type(): if ntype != name.get_type():
name.set_type(ntype) name.set_type(ntype)
@ -1068,8 +1065,8 @@ class EditPerson:
return u"" return u""
def on_edit_name_clicked(self,obj): def on_edit_name_clicked(self,obj):
ntype = unicode(self.ntype_field.child.get_text()) ntype = self.ntype_selector.get_values()
self.pname.set_type(const.NameTypesMap.find_value(ntype)) self.pname.set_type(ntype)
self.pname.set_suffix(unicode(self.suffix.get_text())) self.pname.set_suffix(unicode(self.suffix.get_text()))
self.pname.set_surname(unicode(self.surname.get_text())) self.pname.set_surname(unicode(self.surname.get_text()))
if self.use_patronymic: if self.use_patronymic:
@ -1182,7 +1179,7 @@ class EditPerson:
self.surname.set_text(self.pname.get_surname()) self.surname.set_text(self.pname.get_surname())
self.given.set_text(self.pname.get_first_name()) self.given.set_text(self.pname.get_first_name())
self.ntype_field.child.set_text(_(self.pname.get_type())) self.ntype_selector.set_values(self.pname.get_type())
self.title.set_text(self.pname.get_title()) self.title.set_text(self.pname.get_title())
def birth_dates_in_order(self,list): def birth_dates_in_order(self,list):

View File

@ -1044,10 +1044,15 @@ class FamilyView:
mdate = " - %s" % DateHandler.displayer.display(dobj) mdate = " - %s" % DateHandler.displayer.display(dobj)
else: else:
mdate = "" mdate = ""
i,s = fm.get_relationship()
if Utils.family_relations.has_key(i) \
and i != RelLib.Family.CUSTOM:
disp_rel = Utils.family_relations[i]
else:
disp_rel = s
v = "%s [%s]\n\t%s%s" % ( v = "%s [%s]\n\t%s%s" % (
NameDisplay.displayer.display(sp), NameDisplay.displayer.display(sp),
sp.get_gramps_id(), sp.get_gramps_id(), disp_rel, mdate)
const.family_relations[fm.get_relationship()][0], mdate)
self.spouse_model.set(node,0,v) self.spouse_model.set(node,0,v)
self.spouse_model.set(node,1,f) self.spouse_model.set(node,1,f)
else: else:
@ -1076,9 +1081,9 @@ class FamilyView:
self.update_list(self.ap_parents_model,self.ap_parents,person) self.update_list(self.ap_parents_model,self.ap_parents,person)
def find_marriage(self,family): def find_marriage(self,family):
for event_handle in family.get_event_list(): for event_ref in family.get_event_ref_list():
if event_handle: if event_ref:
event = self.parent.db.get_event_from_handle(event_handle) event = self.parent.db.get_event_from_handle(event_ref.ref)
if event.get_name() == "Marriage": if event.get_name() == "Marriage":
return event return event
return None return None

View File

@ -331,8 +331,7 @@ class NameListBox(ReorderListBox):
def __init__(self,parent,person,obj,label,button_list): def __init__(self,parent,person,obj,label,button_list):
surnames = parent.db.get_surname_list() surnames = parent.db.get_surname_list()
types = const.NameTypesMap.values() types = Utils.name_types.values()
types.sort()
titles = [ titles = [
# Title Sort Col Size, Type # Title Sort Col Size, Type
@ -362,8 +361,7 @@ class NameListBox(ReorderListBox):
self.data[index].set_suffix(value) self.data[index].set_suffix(value)
def set_type(self,index,value): def set_type(self,index,value):
ntype = const.NameTypesMap.find_value(value) self.data[index].set_type(value[1])
self.data[index].set_type(value)
def add(self,obj): def add(self,obj):
NameEdit.NameEditor(self.parent, None, self.edit_callback, NameEdit.NameEditor(self.parent, None, self.edit_callback,
@ -380,7 +378,7 @@ class NameListBox(ReorderListBox):
has_source = len(name.get_source_references())> 0 has_source = len(name.get_source_references())> 0
return [name.get_surname(),name.get_surname_prefix(), return [name.get_surname(),name.get_surname_prefix(),
name.get_first_name(), name.get_suffix(), name.get_first_name(), name.get_suffix(),
_(name.get_type()),has_source,has_note] name.get_type()[1],has_source,has_note]
def unpickle(self, data): def unpickle(self, data):
foo = pickle.loads(data); foo = pickle.loads(data);

View File

@ -201,7 +201,7 @@ class Marriage:
self.preform = self.get_widget("mar_preform") self.preform = self.get_widget("mar_preform")
self.preform.set_sensitive(mode) self.preform.set_sensitive(mode)
self.elist = family.get_event_list()[:] self.ereflist = family.get_event_ref_list()[:]
self.alist = family.get_attribute_list()[:] self.alist = family.get_attribute_list()[:]
self.lists_changed = 0 self.lists_changed = 0
@ -220,13 +220,12 @@ class Marriage:
self.on_attr_list_select_row, self.on_attr_list_select_row,
self.on_update_attr_clicked) self.on_update_attr_clicked)
rel_list = [] self.type_selector = AutoComp.StandardCustomSelector( \
for (val,junk) in const.family_relations: Utils.family_relations,self.type_field,
rel_list.append(val) RelLib.Family.CUSTOM,RelLib.Name.MARRIED)
AutoComp.fill_option_text(self.type_field,rel_list)
frel = family.get_relationship() frel = family.get_relationship()
self.type_field.set_active(frel) self.type_selector.set_values(frel)
self.gid.set_text(family.get_gramps_id()) self.gid.set_text(family.get_gramps_id())
@ -458,8 +457,8 @@ class Marriage:
foo = pickle.loads(data[2]); foo = pickle.loads(data[2]);
if family == self.family.get_handle() and \ if family == self.family.get_handle() and \
foo.get_handle() in self.elist: foo.get_handle() in [ref.ref for ref in self.ereflist]:
self.move_element(self.elist,self.etree.get_selected_row(), self.move_element(self.ereflist,self.etree.get_selected_row(),
row) row)
else: else:
for src in foo.get_source_references(): for src in foo.get_source_references():
@ -470,7 +469,12 @@ class Marriage:
if place: if place:
foo.set_place_handle( foo.set_place_handle(
self.db.get_place_from_handle(place.get_handle()).get_handle()) self.db.get_place_from_handle(place.get_handle()).get_handle())
self.elist.insert(row,foo.get_handle()) eref = RelLib.EventRef()
eref.set_ref = foo.get_handle()
eref.set_role(RelLib.EventRef.PRIMARY,
Utils.event_roles(RelLib.EventRef.PRIMARY))
self.ereflist.insert(row,)
self.lists_changed = 1 self.lists_changed = 1
self.redraw_event_list() self.redraw_event_list()
@ -520,7 +524,7 @@ class Marriage:
selection_data.set(selection_data.target, bits_per, data) selection_data.set(selection_data.target, bits_per, data)
def update_lists(self): def update_lists(self):
self.family.set_event_list(self.elist) self.family.set_event_ref_list(self.ereflist)
self.family.set_attribute_list(self.alist) self.family.set_attribute_list(self.alist)
def attr_edit_callback(self,attr): def attr_edit_callback(self,attr):
@ -543,10 +547,10 @@ class Marriage:
def redraw_event_list(self): def redraw_event_list(self):
self.etree.clear() self.etree.clear()
self.emap = {} self.emap = {}
for event_handle in self.elist: for event_ref in self.ereflist:
event = self.db.get_event_from_handle(event_handle) if not event_ref:
if not event:
continue continue
event = self.db.get_event_from_handle(event_ref.ref)
place_handle = event.get_place_handle() place_handle = event.get_place_handle()
if place_handle: if place_handle:
@ -556,7 +560,7 @@ class Marriage:
node = self.etree.add([const.display_fevent(event.get_name()), node = self.etree.add([const.display_fevent(event.get_name()),
event.get_quote_date(),place_name],event) event.get_quote_date(),place_name],event)
self.emap[str(event)] = node self.emap[str(event)] = node
if self.elist: if self.ereflist:
self.etree.select_row(0) self.etree.select_row(0)
Utils.bold_label(self.events_label) Utils.bold_label(self.events_label)
else: else:
@ -567,7 +571,7 @@ class Marriage:
def did_data_change(self): def did_data_change(self):
changed = 0 changed = 0
if self.type_field.get_active() != self.family.get_relationship(): if self.type_selector.get_values() != self.family.get_relationship():
changed = 1 changed = 1
if self.complete.get_active() != self.family.get_complete_flag(): if self.complete.get_active() != self.family.get_complete_flag():
@ -655,7 +659,7 @@ class Marriage:
_('The GRAMPS ID that you chose for this ' _('The GRAMPS ID that you chose for this '
'relationship is already being used.')) 'relationship is already being used.'))
relation = self.type_field.get_active() relation = self.type_selector.get_values()
father = self.family.get_father_handle() father = self.family.get_father_handle()
mother = self.family.get_mother_handle() mother = self.family.get_mother_handle()
if father and mother: if father and mother:
@ -740,7 +744,7 @@ class Marriage:
None, 0,self.event_edit_callback, None, self.db.readonly) None, 0,self.event_edit_callback, None, self.db.readonly)
def on_delete_clicked(self,obj): def on_delete_clicked(self,obj):
if Utils.delete_selected(obj,self.elist): if Utils.delete_selected(obj,self.ereflist):
self.lists_changed = 1 self.lists_changed = 1
self.redraw_event_list() self.redraw_event_list()

View File

@ -112,11 +112,11 @@ class NameEditor:
self.preform = self.top.get_widget("alt_preform") self.preform = self.top.get_widget("alt_preform")
self.group_over = self.top.get_widget('group_over') self.group_over = self.top.get_widget('group_over')
types = const.NameTypesMap.get_values() self.type_selector = \
types.sort() AutoComp.StandardCustomSelector(Utils.name_types,
AutoComp.fill_combo(self.type_combo,types) self.type_combo,
self.type_field = self.type_combo.get_child() RelLib.Name.CUSTOM,
self.type_field.set_text(types[0]) RelLib.Name.BIRTH)
full_name = NameDisplay.displayer.display_name(name) full_name = NameDisplay.displayer.display_name(name)
@ -151,7 +151,7 @@ class NameEditor:
self.title_field.set_text(name.get_title()) self.title_field.set_text(name.get_title())
self.suffix_field.set_text(name.get_suffix()) self.suffix_field.set_text(name.get_suffix())
self.prefix_field.set_text(name.get_surname_prefix()) self.prefix_field.set_text(name.get_surname_prefix())
self.type_field.set_text(_(name.get_type())) self.type_selector.set_values(name.set_type())
self.patronymic_field.set_text(name.get_patronymic()) self.patronymic_field.set_text(name.get_patronymic())
self.priv.set_active(name.get_privacy()) self.priv.set_active(name.get_privacy())
Utils.bold_label(self.general_label) Utils.bold_label(self.general_label)
@ -259,12 +259,7 @@ class NameEditor:
format = self.preform.get_active() format = self.preform.get_active()
priv = self.priv.get_active() priv = self.priv.get_active()
mtype = unicode(self.type_field.get_text()) the_type = self.type_selector.get_values()
if const.NameTypesMap.has_value(mtype):
mtype = const.NameTypesMap.find_key(mtype)
else:
mtype = "Also Known As"
if self.name == None: if self.name == None:
self.name = RelLib.Name() self.name = RelLib.Name()
@ -312,13 +307,13 @@ class NameEditor:
self.name.set_group_as(grp_as) self.name.set_group_as(grp_as)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
self.update_name(first,last,suffix,patronymic,title,mtype,note,format,priv) self.update_name(first,last,suffix,patronymic,title,the_type,note,format,priv)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
self.callback(self.name) self.callback(self.name)
self.close(obj) self.close(obj)
def update_name(self,first,last,suffix,patronymic,title,type,note,format,priv): def update_name(self,first,last,suffix,patronymic,title,the_type,note,format,priv):
if self.name.get_first_name() != first: if self.name.get_first_name() != first:
self.name.set_first_name(first) self.name.set_first_name(first)
@ -340,8 +335,8 @@ class NameEditor:
self.name.set_title(title) self.name.set_title(title)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
if self.name.get_type() != type: if self.name.get_type() != the_type:
self.name.set_type(type) self.name.set_type(the_type)
self.parent.lists_changed = 1 self.parent.lists_changed = 1
if self.name.get_note() != note: if self.name.get_note() != note:

View File

@ -1768,7 +1768,7 @@ class Family(PrimaryObject,SourceNote,MediaBase,AttributeBase):
self.father_handle = None self.father_handle = None
self.mother_handle = None self.mother_handle = None
self.child_list = [] self.child_list = []
self.type = Family.MARRIED self.type = (Family.MARRIED,'')
self.event_ref_list = [] self.event_ref_list = []
self.lds_seal = None self.lds_seal = None
self.complete = 0 self.complete = 0

View File

@ -203,6 +203,17 @@ source_media_types = {
RelLib.RepoRef.VIDEO : _("Video"), RelLib.RepoRef.VIDEO : _("Video"),
} }
event_roles = {
RelLib.EventRef.UNKNOWN : _("Unknown"),
RelLib.EventRef.CUSTOM : _("Custom"),
RelLib.EventRef.PRIMARY : _("Primary"),
RelLib.EventRef.CLERGY : _("Clergy"),
RelLib.EventRef.CELEBRANT : _("Celebrant"),
RelLib.EventRef.AIDE : _("Aide"),
RelLib.EventRef.BRIDE : _("Bride"),
RelLib.EventRef.GROOM : _("Groom"),
RelLib.EventRef.WITNESS : _("Witness"),
}
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
# Integer to GEDCOM tag mappings for constants # Integer to GEDCOM tag mappings for constants

View File

@ -12588,21 +12588,6 @@ Other</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkComboBox" id="marriage_type">
<property name="visible">True</property>
<property name="items" translatable="yes"></property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label397"> <widget class="GtkLabel" id="label397">
<property name="visible">True</property> <property name="visible">True</property>
@ -12672,6 +12657,20 @@ Other</property>
<property name="y_options"></property> <property name="y_options"></property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkComboBoxEntry" id="marriage_type">
<property name="visible">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">0</property>
<property name="bottom_attach">1</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
</widget> </widget>
<packing> <packing>
<property name="padding">5</property> <property name="padding">5</property>
@ -12686,6 +12685,29 @@ Other</property>
</packing> </packing>
</child> </child>
<child>
<widget class="GtkHBox" id="hbox111">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2608">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child> <child>
<widget class="GtkLabel" id="label245"> <widget class="GtkLabel" id="label245">
<property name="visible">True</property> <property name="visible">True</property>
@ -12700,6 +12722,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>
@ -13254,7 +13283,30 @@ Other</property>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="eventsMarriage"> <widget class="GtkHBox" id="eventsMarriage">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2609">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_m_1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">Events</property> <property name="label" translatable="yes">Events</property>
<property name="use_underline">False</property> <property name="use_underline">False</property>
@ -13267,6 +13319,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>
@ -13679,7 +13738,30 @@ Other</property>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="attrMarriage"> <widget class="GtkHBox" id="attrMarriage">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2610">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="lavel_m_2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">Attributes</property> <property name="label" translatable="yes">Attributes</property>
<property name="use_underline">False</property> <property name="use_underline">False</property>
@ -13692,6 +13774,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>
@ -13833,7 +13922,30 @@ Other</property>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="notesMarriage"> <widget class="GtkHBox" id="notesMarriage">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2611">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_m_3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">Notes</property> <property name="label" translatable="yes">Notes</property>
<property name="use_underline">False</property> <property name="use_underline">False</property>
@ -13846,6 +13958,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>
@ -13985,7 +14104,30 @@ Other</property>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="sourcesMarriage"> <widget class="GtkHBox" id="sourcesMarriage">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2612">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_m_4">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">Sources</property> <property name="label" translatable="yes">Sources</property>
<property name="use_underline">False</property> <property name="use_underline">False</property>
@ -13998,6 +14140,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>
@ -14170,7 +14319,30 @@ Other</property>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="galleryMarriage"> <widget class="GtkHBox" id="galleryMarriage">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2613">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_m_5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">Gallery</property> <property name="label" translatable="yes">Gallery</property>
<property name="use_underline">False</property> <property name="use_underline">False</property>
@ -14183,6 +14355,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>
@ -14456,7 +14635,30 @@ Other</property>
</child> </child>
<child> <child>
<widget class="GtkLabel" id="ldsMarriage"> <widget class="GtkHBox" id="ldsMarriage">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child>
<widget class="GtkImage" id="image2614">
<property name="visible">True</property>
<property name="stock">gtk-file</property>
<property name="icon_size">4</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label_m_6">
<property name="visible">True</property> <property name="visible">True</property>
<property name="label" translatable="yes">LDS</property> <property name="label" translatable="yes">LDS</property>
<property name="use_underline">False</property> <property name="use_underline">False</property>
@ -14469,6 +14671,13 @@ Other</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
</widget> </widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing> <packing>
<property name="type">tab</property> <property name="type">tab</property>
</packing> </packing>