Better handling of sources

svn: r79
This commit is contained in:
Don Allingham 2001-06-02 22:56:04 +00:00
parent 45bc5d293c
commit 70880d6729
12 changed files with 1395 additions and 842 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1086,7 +1086,11 @@ def on_savephoto_clicked(obj):
utils.modified()
utils.destroy_passed_object(obj)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_save_note_clicked(obj):
textbox = obj.get_data("w")
data = obj.get_data("n")
@ -1098,12 +1102,17 @@ def on_save_note_clicked(obj):
utils.destroy_passed_object(obj)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_event_note_clicked(obj):
row = obj.get_data(INDEX)
data = obj.get_row_data(row)
edit_person_obj = obj.get_data(EDITPERSON)
if row >= 0:
editnote = libglade.GladeXML(const.editPersonFile,"editnote")
editnote = libglade.GladeXML(const.editnoteFile,"editnote")
textobj = editnote.get_widget("notetext")
en_obj = editnote.get_widget("editnote")
en_obj.set_data("n",data)

View File

@ -162,7 +162,10 @@ class GrampsParser(handler.ContentHandler):
self.attribute.setType(string.capwords(attrs["type"]))
else:
self.in_old_attr = 0
self.person.addAttribute(self.attribute)
if self.in_people:
self.person.addAttribute(self.attribute)
elif self.in_family:
self.family.addAttribute(self.attribute)
#---------------------------------------------------------------------
#

View File

@ -19,7 +19,7 @@ intl.so: intl.c
install:
${INSTALL} -d ${datadir}
${INSTALL} *.pyc *.py *.jpg *.pyo *.glade *.xpm *.so ${datadir}
${INSTALL} *.py *.jpg *.pyo *.glade *.xpm *.so ${datadir}
${INSTALL} -d ${prefix}/share/pixmaps
${INSTALL} gramps.png ${prefix}/share/pixmaps
${INSTALL} -d ${prefix}/share/gnome/apps/Applications

View File

@ -77,12 +77,16 @@ class Marriage:
"on_marriageUpdateBtn_clicked" : on_update_clicked,
"on_marriageDeleteBtn_clicked" : on_delete_clicked,
"on_marriageEventList_select_row" : on_select_row,
"on_attr_list_select_row" : on_attr_list_select_row,
"on_add_attr_clicked" : on_add_attr_clicked,
"on_update_attr_clicked" : on_update_attr_clicked,
"on_delete_attr_clicked" : on_delete_attr_clicked,
"on_showsource_clicked" : on_showsource_clicked,
"on_makeprimary_clicked" : on_primary_photo_clicked,
"on_photolist_select_icon" : on_photo_select_icon,
"on_photolist_button_press_event" : on_photolist_button_press_event,
"on_addphoto_clicked" : on_add_photo_clicked,
"on_deletephoto_clicked" : on_delete_photo_clicked,
"on_event_note_clicked" : on_event_note_clicked,
"on_close_marriage_editor" : on_close_marriage_editor,
"destroy_passed_object" : utils.destroy_passed_object
})
@ -102,6 +106,9 @@ class Marriage:
self.descr_field = self.get_widget("marriageDescription")
self.type_field = self.get_widget("marriage_type")
self.notes_field = self.get_widget("marriageNotes")
self.attr_list = self.get_widget("attr_list")
self.attr_type = self.get_widget("attr_type")
self.attr_value = self.get_widget("attr_value")
# set initial data
mevent_list = self.get_widget("marriageEvent")
@ -116,6 +123,12 @@ class Marriage:
top_window.set_data(MARRIAGE,self)
self.event_list.set_data(MARRIAGE,self)
self.event_list.set_data(INDEX,-1)
self.attr_list.set_data(MARRIAGE,self)
self.attr_list.set_data(INDEX,-1)
attr_names = self.get_widget("attr_combo")
attr_names.set_popdown_strings(const.personalAttributes)
attr_names.entry.set_text("")
# set notes data
self.notes_field.set_point(0)
@ -123,8 +136,36 @@ class Marriage:
self.notes_field.set_word_wrap(1)
self.redraw_events()
self.redraw_attr_list()
top_window.show()
#---------------------------------------------------------------------
#
# redraw_attr_list - redraws the attribute list for the person
#
#---------------------------------------------------------------------
def redraw_attr_list(self):
self.attr_list.freeze()
self.attr_list.clear()
self.attr_index = 0
for attr in self.family.getAttributeList():
self.attr_list.append([attr.getType(),attr.getValue()])
self.attr_list.set_row_data(self.attr_index,attr)
self.attr_index = self.attr_index + 1
current_row = self.attr_list.get_data(INDEX)
if self.attr_index > 0:
if current_row <= 0:
current_row = 0
elif self.attr_index <= current_row:
current_row = current_row - 1
self.attr_list.select_row(current_row,0)
self.attr_list.moveto(current_row,0)
self.attr_list.set_data(INDEX,current_row)
self.attr_list.thaw()
#-------------------------------------------------------------------------
#
# add_event - adds the event to the window, attaching the event structure
@ -380,25 +421,6 @@ def on_showsource_clicked(obj):
if row >= 0:
Sources.SourceEditor(obj.get_row_data(row),family_obj.db)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_primary_photo_clicked(obj):
marriage_obj = obj.get_data(MARRIAGE)
if marriage_obj.selectedIcon == None or \
marriage_obj.selectedIcon == 0:
return
photolist = marriage.family.getPhotoList()
savePhoto = photolist[selectedIcon]
for i in range(0,selectedIcon):
photolist[selectedIcon-i] = photolist[selectedIcon-i-1]
photolist[0] = savePhoto
marriage_obj.load_images()
utils.modified()
#-------------------------------------------------------------------------
#
#
@ -435,7 +457,7 @@ def on_photolist_button_press_event(obj,event):
#-------------------------------------------------------------------------
def on_view_photo(obj):
myobj = obj.get_data("m")
photo = myobj.person.getPhotoList()[myobj.selectedIcon]
photo = myobj.family.getPhotoList()[myobj.selectedIcon]
type = gnome.mime.type(photo.getPath())
prog = string.split(gnome.mime.get_value(type,'view'))
@ -456,7 +478,7 @@ def on_view_photo(obj):
#-------------------------------------------------------------------------
def on_edit_photo(obj):
myobj = obj.get_data("m")
photo = myobj.person.getPhotoList()[myobj.selectedIcon]
photo = myobj.family.getPhotoList()[myobj.selectedIcon]
if os.fork() == 0:
os.execvp(const.editor,[const.editor, photo.getPath()])
@ -538,7 +560,7 @@ def on_savephoto_clicked(obj):
def on_change_description(obj):
myobj = obj.get_data("m")
photo = myobj.person.getPhotoList()[myobj.selectedIcon]
photo = myobj.family.getPhotoList()[myobj.selectedIcon]
window = libglade.GladeXML(const.imageselFile,"dialog1")
text = window.get_widget("text")
text.set_text(photo.getDescription())
@ -577,3 +599,121 @@ def on_apply_clicked(obj):
def on_ok_clicked(obj):
on_apply_clicked(obj)
utils.destroy_passed_object(obj)
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_event_note_clicked(obj):
row = obj.get_data(INDEX)
data = obj.get_row_data(row)
family_obj = obj.get_data(MARRIAGE)
if row >= 0:
editnote = libglade.GladeXML(const.editnoteFile,"editnote")
textobj = editnote.get_widget("notetext")
en_obj = editnote.get_widget("editnote")
en_obj.set_data("n",data)
en_obj.set_data("w",textobj)
textobj.set_point(0)
textobj.insert_defaults(data.getNote())
textobj.set_word_wrap(1)
editnote.signal_autoconnect({
"on_save_note_clicked" : on_save_note_clicked,
"destroy_passed_object" : utils.destroy_passed_object
})
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_save_note_clicked(obj):
textbox = obj.get_data("w")
data = obj.get_data("n")
text = textbox.get_chars(0,-1)
if text != data.getNote():
data.setNote(text)
utils.modified()
utils.destroy_passed_object(obj)
#-------------------------------------------------------------------------
#
# on_attr_list_select_row - sets the row object attached to the passed
# object, and then updates the display with the data corresponding to
# the row.
#
#-------------------------------------------------------------------------
def on_attr_list_select_row(obj,row,b,c):
obj.set_data(INDEX,row)
family_obj = obj.get_data(MARRIAGE)
attr = obj.get_row_data(row)
family_obj.attr_type.set_text(attr.getType())
family_obj.attr_value.set_text(attr.getValue())
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_update_attr_clicked(obj):
row = obj.get_data(INDEX)
if row < 0:
return
family_obj = obj.get_data(MARRIAGE)
attr = obj.get_row_data(row)
attr.setType(family_obj.attr_type.get_text())
attr.setValue(family_obj.attr_value.get_text())
family_obj.redraw_attr_list()
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_delete_attr_clicked(obj):
row = obj.get_data(INDEX)
if row < 0:
return
family_obj = obj.get_data(MARRIAGE)
list = family_obj.family.getAttributeList()
del list[row]
if row > len(list)-1:
obj.set_data(INDEX,row-1)
family_obj.redraw_attr_list()
utils.modified()
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
def on_add_attr_clicked(obj):
family_obj = obj.get_data(MARRIAGE)
attr = Attribute()
name = family_obj.attr_type.get_text()
attr.setType(name)
attr.setValue(family_obj.attr_value.get_text())
if name not in const.familyAttributes:
const.familyAttributes.append(name)
menu = family_obj.get_widget("attr_combo")
menu.set_popdown_strings(const.familyAttributes)
family_obj.family.addAttribute(attr)
family_obj.redraw_attr_list()
utils.modified()

View File

@ -532,6 +532,21 @@ class Family:
self.id = -1
self.photoList = []
self.note = Note()
self.attributeList = []
def addAttribute(self,attribute) :
self.attributeList.append(attribute)
def removeAttribute(self,attribute):
index = 0
for attr in self.attributeList:
if attr == attribute:
del self.attributeList[index]
return
index = index + 1
def getAttributeList(self) :
return self.attributeList
def getNote(self):
return self.note.get()
@ -807,6 +822,13 @@ class RelDataBase:
map[attr.getType()] = 1
return map.keys()
def getFamilyAttributeTypes(self):
map = {}
for family in self.familyMap.values():
for attr in family.getAttributeList():
map[attr.getType()] = 1
return map.keys()
def getFamilyRelationTypes(self):
map = {}
for family in self.familyMap.values():

View File

@ -105,6 +105,7 @@ class SourceEditor:
menuitem.show()
typeMenu.append(menuitem)
index = 1
active = 0
save = 0
if self.source_ref:
self.base = self.source_ref.getBase()
@ -113,6 +114,7 @@ class SourceEditor:
for src in self.db.getSourceMap().values():
if src == self.base:
active = 1
save = index
menuitem = GtkMenuItem(src.getTitle())
menuitem.set_data("s",src)
@ -123,7 +125,12 @@ class SourceEditor:
index = index + 1
typeMenu.set_active(save)
self.title_menu.set_menu(typeMenu)
self.get_widget("spage").set_sensitive(active)
self.get_widget("sdate").set_sensitive(active)
self.get_widget("stext").set_sensitive(active)
self.get_widget("scomment").set_sensitive(active)
if self.source_ref:
self.get_widget("spage").set_text(self.source_ref.getPage())
date = self.source_ref.getDate()
@ -189,10 +196,17 @@ def on_source_changed(obj):
src_entry.active_source = obj.get_data("s")
if src_entry.active_source == None:
active = 0
src_entry.author_field.set_text("")
src_entry.pub_field.set_text("")
else:
active = 1
src_entry.author_field.set_text(src_entry.active_source.getAuthor())
src_entry.pub_field.set_text(src_entry.active_source.getPubInfo())
src_entry.get_widget("spage").set_sensitive(active)
src_entry.get_widget("sdate").set_sensitive(active)
src_entry.get_widget("stext").set_sensitive(active)
src_entry.get_widget("scomment").set_sensitive(active)

View File

@ -341,6 +341,16 @@ def exportData(database, filename, callback):
for person in family.getChildList():
write_ref(g,"child",person)
g.write("</childlist>\n")
if len(family.getAttributeList()) > 0:
g.write("<attributes>\n")
for attr in family.getAttributeList():
g.write('<attribute>\n')
write_line(g,"attr_type",attr.getType())
write_line(g,"attr_value",attr.getValue())
dump_source_ref(g,attr.getSourceRef())
writeNote(g,"note",attr.getNote())
g.write('</attribute>\n')
g.write('</attributes>\n')
writeNote(g,"note",family.getNote())
g.write("</family>\n")
g.write("</families>\n")

View File

@ -54,8 +54,7 @@ marriageFile = rootDir + os.sep + "marriage.glade"
editPersonFile = rootDir + os.sep + "EditPerson.glade"
bookFile = rootDir + os.sep + "bookmarks.glade"
pluginsFile = rootDir + os.sep + "plugins.glade"
notesFile = rootDir + os.sep + "editnote.glade"
editnoteFile = rootDir + os.sep + "editnote.glade"
configFile = rootDir + os.sep + "config.glade"
pluginsDir = rootDir + os.sep + "plugins"
filtersDir = rootDir + os.sep + "filters"
@ -155,6 +154,9 @@ personalConstantAttributes = {
"Social Security Number": "SSN"
}
familyConstantAttributes = {
}
familyConstantRelations = [
"Married",
"Common Law",
@ -168,6 +170,9 @@ personalEvents.sort()
personalAttributes = personalConstantAttributes.keys()
personalAttributes.sort()
familyAttributes = familyConstantAttributes.keys()
familyAttributes.sort()
marriageEvents = familyConstantEvents.keys()
marriageEvents.sort()

159
gramps/src/editnote.glade Normal file
View File

@ -0,0 +1,159 @@
<?xml version="1.0"?>
<GTK-Interface>
<project>
<name>Gramps</name>
<program_name>gramps</program_name>
<directory></directory>
<source_directory>src</source_directory>
<pixmaps_directory>pixmaps</pixmaps_directory>
<language>C</language>
<gnome_support>True</gnome_support>
<gettext_support>True</gettext_support>
</project>
<widget>
<class>GtkDialog</class>
<name>editnote</name>
<title>Gramps - Edit Note</title>
<type>GTK_WINDOW_TOPLEVEL</type>
<position>GTK_WIN_POS_NONE</position>
<modal>False</modal>
<allow_shrink>True</allow_shrink>
<allow_grow>True</allow_grow>
<auto_shrink>False</auto_shrink>
<widget>
<class>GtkVBox</class>
<child_name>Dialog:vbox</child_name>
<name>dialog-vbox1</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkHBox</class>
<child_name>Dialog:action_area</child_name>
<name>dialog-action_area1</name>
<border_width>10</border_width>
<homogeneous>True</homogeneous>
<spacing>5</spacing>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
<pack>GTK_PACK_END</pack>
</child>
<widget>
<class>GtkHButtonBox</class>
<name>hbuttonbox18</name>
<layout_style>GTK_BUTTONBOX_END</layout_style>
<spacing>30</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>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkButton</class>
<name>button99</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_save_note_clicked</handler>
<object>editnote</object>
<last_modification_time>Tue, 29 May 2001 15:06:53 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button100</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>destroy_passed_object</handler>
<object>editnote</object>
<last_modification_time>Tue, 29 May 2001 15:06:38 GMT</last_modification_time>
</signal>
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
</widget>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox29</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label153</name>
<label>Edit Note</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>0.5</xalign>
<yalign>0.5</yalign>
<xpad>0</xpad>
<ypad>0</ypad>
<child>
<padding>10</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkHSeparator</class>
<name>hseparator1</name>
<child>
<padding>5</padding>
<expand>False</expand>
<fill>True</fill>
</child>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow21</name>
<width>450</width>
<height>300</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>notetext</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text></text>
</widget>
</widget>
</widget>
</widget>
</widget>
</GTK-Interface>

View File

@ -558,6 +558,8 @@ def new_database_response(val):
const.personalEvents.sort()
const.personalAttributes = const.personalConstantAttributes.keys()
const.personalAttributes.sort()
const.familyAttributes = const.familyConstantAttributes.keys()
const.familyAttributes.sort()
const.familyRelations = const.familyConstantRelations
database.new()
topWindow.set_title("Gramps")
@ -1351,6 +1353,9 @@ def revert_query(value):
const.personalAttributes = const.personalConstantAttributes.keys()
const.personalAttributes.sort()
const.familyAttributes = const.familyConstantAttributes.keys()
const.familyAttributes.sort()
const.marriageEvents = const.familyConstantEvents.keys()
const.marriageEvents.sort()
@ -1906,6 +1911,11 @@ def load_database(name):
if type not in const.personalAttributes:
const.personalAttributes.append(type)
mylist = database.getFamilyAttributeTypes()
for type in mylist:
if type not in const.familyAttributes:
const.familyAttributes.append(type)
mylist = database.getFamilyRelationTypes()
for type in mylist:
if type not in const.familyRelations:

View File

@ -184,7 +184,7 @@
<show_border>True</show_border>
<tab_pos>GTK_POS_TOP</tab_pos>
<scrollable>False</scrollable>
<tab_hborder>2</tab_hborder>
<tab_hborder>5</tab_hborder>
<tab_vborder>2</tab_vborder>
<popup_enable>False</popup_enable>
<child>
@ -203,7 +203,7 @@
<class>GtkTable</class>
<name>table6</name>
<rows>4</rows>
<columns>2</columns>
<columns>3</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
@ -315,6 +315,125 @@
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label98</name>
<label>Event Type</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>8</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCombo</class>
<name>marriageEvent</name>
<value_in_list>False</value_in_list>
<ok_if_empty>True</ok_if_empty>
<case_sensitive>False</case_sensitive>
<use_arrows>True</use_arrows>
<use_arrows_always>False</use_arrows_always>
<items></items>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GtkCombo:entry</child_name>
<name>marriageEventName</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget>
<class>GtkButton</class>
<name>marriageSource</name>
<tooltip>Select the source of the information</tooltip>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_showsource_clicked</handler>
<object>marriageEventList</object>
<last_modification_time>Sun, 11 Feb 2001 22:58:04 GMT</last_modification_time>
</signal>
<label>Source</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button107</name>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_event_note_clicked</handler>
<object>marriageEventList</object>
<last_modification_time>Sat, 02 Jun 2001 18:53:55 GMT</last_modification_time>
</signal>
<label>Note</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkEntry</class>
<name>marriagePlace</name>
@ -325,7 +444,7 @@
<text></text>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<right_attach>3</right_attach>
<top_attach>2</top_attach>
<bottom_attach>3</bottom_attach>
<xpad>3</xpad>
@ -349,7 +468,7 @@
<text></text>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<right_attach>3</right_attach>
<top_attach>3</top_attach>
<bottom_attach>4</bottom_attach>
<xpad>3</xpad>
@ -362,100 +481,6 @@
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkHBox</class>
<name>hbox14</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>True</yfill>
</child>
<widget>
<class>GtkCombo</class>
<name>marriageEvent</name>
<value_in_list>False</value_in_list>
<ok_if_empty>True</ok_if_empty>
<case_sensitive>False</case_sensitive>
<use_arrows>True</use_arrows>
<use_arrows_always>False</use_arrows_always>
<items></items>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GtkCombo:entry</child_name>
<name>marriageEventName</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget>
<class>GtkButton</class>
<name>marriageSource</name>
<tooltip>Select the source of the information</tooltip>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_showsource_clicked</handler>
<object>marriageEventList</object>
<last_modification_time>Sun, 11 Feb 2001 22:58:04 GMT</last_modification_time>
</signal>
<label>Source</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<padding>3</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<name>label98</name>
<label>Event Type</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>8</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
@ -594,6 +619,327 @@
<ypad>0</ypad>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox34</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<widget>
<class>GtkTable</class>
<name>table7</name>
<rows>2</rows>
<columns>3</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label204</name>
<label>Value</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>8</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkEntry</class>
<name>attr_value</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label207</name>
<label>Attribute</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>8</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkCombo</class>
<name>attr_combo</name>
<value_in_list>False</value_in_list>
<ok_if_empty>True</ok_if_empty>
<case_sensitive>False</case_sensitive>
<use_arrows>True</use_arrows>
<use_arrows_always>False</use_arrows_always>
<items></items>
<child>
<left_attach>1</left_attach>
<right_attach>2</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>3</ypad>
<xexpand>True</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
<widget>
<class>GtkEntry</class>
<child_name>GtkCombo:entry</child_name>
<name>attr_type</name>
<can_focus>True</can_focus>
<editable>True</editable>
<text_visible>True</text_visible>
<text_max_length>0</text_max_length>
<text></text>
</widget>
</widget>
<widget>
<class>GtkButton</class>
<name>button102</name>
<tooltip>Select the source of the information</tooltip>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_showsource_clicked</handler>
<object>attr_list</object>
<last_modification_time>Sun, 11 Feb 2001 22:58:04 GMT</last_modification_time>
</signal>
<label>Source</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>3</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkButton</class>
<name>button106</name>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_event_note_clicked</handler>
<object>attr_list</object>
<last_modification_time>Sat, 02 Jun 2001 18:54:33 GMT</last_modification_time>
</signal>
<label>Note</label>
<relief>GTK_RELIEF_NORMAL</relief>
<child>
<left_attach>2</left_attach>
<right_attach>3</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>3</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>scrolledwindow23</name>
<hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_AUTOMATIC</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>GtkCList</class>
<name>attr_list</name>
<can_focus>True</can_focus>
<signal>
<name>select_row</name>
<handler>on_attr_list_select_row</handler>
<last_modification_time>Sat, 02 Jun 2001 18:58:35 GMT</last_modification_time>
</signal>
<columns>2</columns>
<column_widths>189,80</column_widths>
<selection_mode>GTK_SELECTION_SINGLE</selection_mode>
<show_titles>True</show_titles>
<shadow_type>GTK_SHADOW_IN</shadow_type>
<widget>
<class>GtkLabel</class>
<child_name>CList:title</child_name>
<name>label210</name>
<label>Attribute</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>
<class>GtkLabel</class>
<child_name>CList:title</child_name>
<name>label211</name>
<label>Value</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>
<class>GtkHButtonBox</class>
<name>hbuttonbox21</name>
<layout_style>GTK_BUTTONBOX_SPREAD</layout_style>
<spacing>30</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
<child_ipad_x>2</child_ipad_x>
<child_ipad_y>2</child_ipad_y>
<child>
<padding>4</padding>
<expand>False</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkButton</class>
<name>button103</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_add_attr_clicked</handler>
<object>attr_list</object>
<last_modification_time>Sat, 02 Jun 2001 18:59:32 GMT</last_modification_time>
</signal>
<label>Add</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button104</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_update_attr_clicked</handler>
<object>attr_list</object>
<last_modification_time>Sat, 02 Jun 2001 18:59:40 GMT</last_modification_time>
</signal>
<label>Update</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button105</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_delete_attr_clicked</handler>
<object>attr_list</object>
<last_modification_time>Sat, 02 Jun 2001 18:59:50 GMT</last_modification_time>
</signal>
<label>Delete</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
</widget>
</widget>
<widget>
<class>GtkLabel</class>
<child_name>Notebook:tab</child_name>
<name>label203</name>
<label>Attributes</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>
<class>GtkScrolledWindow</class>
<name>scrolledwindow15</name>
@ -674,7 +1020,7 @@
<widget>
<class>GtkHButtonBox</class>
<name>hbuttonbox20</name>
<layout_style>GTK_BUTTONBOX_DEFAULT_STYLE</layout_style>
<layout_style>GTK_BUTTONBOX_SPREAD</layout_style>
<spacing>30</spacing>
<child_min_width>85</child_min_width>
<child_min_height>27</child_min_height>
@ -715,21 +1061,6 @@
<label>Delete Photo</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
<widget>
<class>GtkButton</class>
<name>button102</name>
<can_default>True</can_default>
<can_focus>True</can_focus>
<signal>
<name>clicked</name>
<handler>on_makeprimary_clicked</handler>
<object>marriageEditor</object>
<last_modification_time>Thu, 29 Mar 2001 13:44:47 GMT</last_modification_time>
</signal>
<label>Make Primary</label>
<relief>GTK_RELIEF_NORMAL</relief>
</widget>
</widget>
</widget>