Faster GEDCOM imports, source lists
svn: r448
This commit is contained in:
parent
c603e452c0
commit
379830cf65
@ -740,6 +740,21 @@
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>genderUnknown</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>unknown</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<group>gender</group>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
@ -4116,7 +4131,7 @@
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table23</name>
|
||||
<rows>6</rows>
|
||||
<rows>5</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>0</row_spacing>
|
||||
@ -4179,32 +4194,6 @@
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label182</name>
|
||||
<label>Source</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>3</top_attach>
|
||||
<bottom_attach>4</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>GtkScrolledWindow</class>
|
||||
<name>scrolledwindow23</name>
|
||||
@ -4217,8 +4206,8 @@
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>5</top_attach>
|
||||
<bottom_attach>6</bottom_attach>
|
||||
<top_attach>4</top_attach>
|
||||
<bottom_attach>5</bottom_attach>
|
||||
<xpad>3</xpad>
|
||||
<ypad>3</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -4251,8 +4240,8 @@
|
||||
<child>
|
||||
<left_attach>0</left_attach>
|
||||
<right_attach>1</right_attach>
|
||||
<top_attach>5</top_attach>
|
||||
<bottom_attach>6</bottom_attach>
|
||||
<top_attach>4</top_attach>
|
||||
<bottom_attach>5</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -4285,13 +4274,12 @@
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>alt_source</name>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>False</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<padding>3</padding>
|
||||
<expand>True</expand>
|
||||
@ -4431,29 +4419,6 @@
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>4</top_attach>
|
||||
<bottom_attach>5</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>
|
||||
</widget>
|
||||
@ -4572,7 +4537,7 @@
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table26</name>
|
||||
<rows>9</rows>
|
||||
<rows>8</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>0</row_spacing>
|
||||
@ -4635,32 +4600,6 @@
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label211</name>
|
||||
<label>Source</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>6</top_attach>
|
||||
<bottom_attach>7</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>street</name>
|
||||
@ -4697,8 +4636,8 @@
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>8</top_attach>
|
||||
<bottom_attach>9</bottom_attach>
|
||||
<top_attach>7</top_attach>
|
||||
<bottom_attach>8</bottom_attach>
|
||||
<xpad>3</xpad>
|
||||
<ypad>3</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -4731,8 +4670,8 @@
|
||||
<child>
|
||||
<left_attach>0</left_attach>
|
||||
<right_attach>1</right_attach>
|
||||
<top_attach>8</top_attach>
|
||||
<bottom_attach>9</bottom_attach>
|
||||
<top_attach>7</top_attach>
|
||||
<bottom_attach>8</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -4765,13 +4704,12 @@
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>addr_source</name>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>False</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<padding>3</padding>
|
||||
<expand>True</expand>
|
||||
@ -5025,29 +4963,6 @@
|
||||
<yfill>False</yfill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>7</top_attach>
|
||||
<bottom_attach>8</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>
|
||||
</widget>
|
||||
|
@ -143,6 +143,8 @@ class EditPerson:
|
||||
self.dplace = self.get_widget("deathPlace")
|
||||
self.is_male = self.get_widget("genderMale")
|
||||
self.is_female = self.get_widget("genderFemale")
|
||||
self.is_unknown = self.get_widget("genderUnknown")
|
||||
self.addr_note = self.get_widget("addr_note")
|
||||
self.addr_note = self.get_widget("addr_note")
|
||||
self.addr_source = self.get_widget("addr_source")
|
||||
self.attr_note = self.get_widget("attr_note")
|
||||
@ -246,8 +248,10 @@ class EditPerson:
|
||||
|
||||
if person.getGender() == Person.male:
|
||||
self.is_male.set_active(1)
|
||||
else:
|
||||
elif person.getGender() == Person.male:
|
||||
self.is_female.set_active(1)
|
||||
else:
|
||||
self.is_unknown.set_active(1)
|
||||
|
||||
self.nick.set_text(person.getNickName())
|
||||
self.title.set_text(self.pname.getTitle())
|
||||
@ -399,7 +403,6 @@ class EditPerson:
|
||||
self.person.setAddressList(self.plist)
|
||||
utils.modified()
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# PersonImageSelect class
|
||||
@ -491,7 +494,9 @@ def did_data_change(obj):
|
||||
bplace = string.strip(epo.bplace.get_text())
|
||||
ddate = epo.ddate.get_text()
|
||||
dplace = epo.dplace.get_text()
|
||||
gender = epo.is_male.get_active()
|
||||
male = epo.is_male.get_active()
|
||||
female = epo.is_female.get_active()
|
||||
unknown = epo.is_unknown.get_active()
|
||||
text = epo.notes_field.get_chars(0,-1)
|
||||
idval = epo.gid.get_text()
|
||||
|
||||
@ -508,8 +513,6 @@ def did_data_change(obj):
|
||||
changed = 1
|
||||
if epo.pname.getNote() != name.getNote():
|
||||
changed = 1
|
||||
if not epo.pname.getSourceRef().are_equal(name.getSourceRef()):
|
||||
changed = 1
|
||||
|
||||
if not epo.birth.are_equal(epo.person.getBirth()):
|
||||
changed = 1
|
||||
@ -517,9 +520,11 @@ def did_data_change(obj):
|
||||
if not epo.death.are_equal(epo.person.getDeath()):
|
||||
changed = 1
|
||||
|
||||
if gender and person.getGender() == Person.female:
|
||||
if male and person.getGender() != Person.male:
|
||||
changed = 1
|
||||
if not gender and person.getGender() == Person.male:
|
||||
elif female and person.getGender() != Person.female:
|
||||
changed = 1
|
||||
elif unknown and person.getGender() != Person.unknown:
|
||||
changed = 1
|
||||
if text != person.getNote() or epo.lists_changed:
|
||||
changed = 1
|
||||
@ -1162,9 +1167,11 @@ def save_person(obj):
|
||||
if not person.getDeath().are_equal(epo.death):
|
||||
person.setDeath(epo.death)
|
||||
|
||||
gender = epo.is_male.get_active()
|
||||
male = epo.is_male.get_active()
|
||||
female = epo.is_female.get_active()
|
||||
unknown = epo.is_unknown.get_active()
|
||||
error = 0
|
||||
if gender and person.getGender() == Person.female:
|
||||
if male and person.getGender() != Person.male:
|
||||
person.setGender(Person.male)
|
||||
for temp_family in person.getFamilyList():
|
||||
if person == temp_family.getMother():
|
||||
@ -1174,7 +1181,7 @@ def save_person(obj):
|
||||
temp_family.setMother(None)
|
||||
temp_family.setFather(person)
|
||||
utils.modified()
|
||||
elif not gender and person.getGender() == Person.male:
|
||||
elif female and person.getGender() != Person.female:
|
||||
person.setGender(Person.female)
|
||||
for temp_family in person.getFamilyList():
|
||||
if person == temp_family.getFather():
|
||||
@ -1184,6 +1191,23 @@ def save_person(obj):
|
||||
temp_family.setFather(None)
|
||||
temp_family.setMother(person)
|
||||
utils.modified()
|
||||
elif unknown and person.getGender() != Person.unknown:
|
||||
person.setGender(Person.unknown)
|
||||
for temp_family in person.getFamilyList():
|
||||
if person == temp_family.getFather():
|
||||
if temp_family.getMother() != None:
|
||||
error = 1
|
||||
else:
|
||||
temp_family.setFather(None)
|
||||
temp_family.setMother(person)
|
||||
if person == temp_family.getMother():
|
||||
if temp_family.getFather() != None:
|
||||
error = 1
|
||||
else:
|
||||
temp_family.setMother(None)
|
||||
temp_family.setFather(person)
|
||||
utils.modified()
|
||||
|
||||
|
||||
if error == 1:
|
||||
msg = _("Changing the gender caused problems with marriage information.")
|
||||
@ -1270,7 +1294,7 @@ def on_death_note_clicked(obj):
|
||||
#-------------------------------------------------------------------------
|
||||
def on_death_source_clicked(obj):
|
||||
epo = obj.get_data(EDITPERSON)
|
||||
Sources.SourceEditor(epo.death.getSourceRef(),epo.db)
|
||||
Sources.SourceSelector(epo.death.getSourceRefList(),epo,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -1279,7 +1303,7 @@ def on_death_source_clicked(obj):
|
||||
#-------------------------------------------------------------------------
|
||||
def on_primary_name_source_clicked(obj):
|
||||
epo = obj.get_data(EDITPERSON)
|
||||
Sources.SourceEditor(epo.pname.getSourceRef(),epo.db)
|
||||
Sources.SourceSelector(epo.pname.getSourceRefList(),epo,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -1288,7 +1312,7 @@ def on_primary_name_source_clicked(obj):
|
||||
#-------------------------------------------------------------------------
|
||||
def on_birth_source_clicked(obj):
|
||||
epo = obj.get_data(EDITPERSON)
|
||||
Sources.SourceEditor(epo.birth.getSourceRef(),epo.db)
|
||||
Sources.SourceSelector(epo.birth.getSourceRefList(),epo,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -1409,10 +1433,10 @@ class EventEditor:
|
||||
def __init__(self,parent,event):
|
||||
self.parent = parent
|
||||
self.event = event
|
||||
if self.event:
|
||||
self.srcref = SourceRef(self.event.getSourceRef())
|
||||
if event:
|
||||
self.srcreflist = self.event.getSourceRefList()
|
||||
else:
|
||||
self.srcref = SourceRef()
|
||||
self.srcreflist = []
|
||||
self.top = libglade.GladeXML(const.dialogFile, "event_edit")
|
||||
self.window = self.top.get_widget("event_edit")
|
||||
self.name_field = self.top.get_widget("eventName")
|
||||
@ -1423,7 +1447,6 @@ class EventEditor:
|
||||
self.descr_field = self.top.get_widget("eventDescription")
|
||||
self.note_field = self.top.get_widget("eventNote")
|
||||
self.event_menu = self.top.get_widget("personalEvents")
|
||||
self.source_field = self.top.get_widget("event_source")
|
||||
self.priv = self.top.get_widget("priv")
|
||||
|
||||
name = parent.person.getPrimaryName().getName()
|
||||
@ -1449,12 +1472,6 @@ class EventEditor:
|
||||
self.descr_field.set_text(event.getDescription())
|
||||
self.priv.set_active(event.getPrivacy())
|
||||
|
||||
srcref_base = self.event.getSourceRef().getBase()
|
||||
if srcref_base:
|
||||
self.source_field.set_text(srcref_base.getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
|
||||
self.note_field.set_point(0)
|
||||
self.note_field.insert_defaults(event.getNote())
|
||||
self.note_field.set_word_wrap(1)
|
||||
@ -1475,7 +1492,7 @@ class EventEditor:
|
||||
#-------------------------------------------------------------------------
|
||||
def on_edit_source_clicked(obj):
|
||||
ee = obj.get_data(OBJECT)
|
||||
Sources.SourceEditor(ee.srcref,ee.parent.db,ee.source_field)
|
||||
Sources.SourceSelector(ee.srcreflist,ee.parent,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -1497,6 +1514,7 @@ def on_event_edit_ok_clicked(obj):
|
||||
|
||||
if event == None:
|
||||
event = Event()
|
||||
event.setSourceRefList(ee.srcreflist)
|
||||
ee.parent.elist.append(event)
|
||||
|
||||
if eplace_obj == None and eplace != "":
|
||||
@ -1507,10 +1525,6 @@ def on_event_edit_ok_clicked(obj):
|
||||
if update_event(event,ename,edate,eplace_obj,edesc,enote,epriv,ecause):
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
if not event.getSourceRef().are_equal(ee.srcref):
|
||||
event.setSourceRef(ee.srcref)
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
ee.parent.redraw_event_list()
|
||||
ee.parent.update_birth_death()
|
||||
utils.destroy_passed_object(obj)
|
||||
@ -1531,12 +1545,11 @@ class AttributeEditor:
|
||||
self.value_field = self.top.get_widget("attr_value")
|
||||
self.note_field = self.top.get_widget("attr_note")
|
||||
self.attrib_menu = self.top.get_widget("attr_menu")
|
||||
self.source_field = self.top.get_widget("attr_source")
|
||||
self.priv = self.top.get_widget("priv")
|
||||
if self.attrib:
|
||||
self.srcref = SourceRef(self.attrib.getSourceRef())
|
||||
self.srcreflist = self.attrib.getSourceRefList()
|
||||
else:
|
||||
self.srcref = SourceRef()
|
||||
self.srcreflist = []
|
||||
|
||||
# Typing CR selects OK button
|
||||
self.window.editable_enters(self.type_field);
|
||||
@ -1550,11 +1563,6 @@ class AttributeEditor:
|
||||
if attrib != None:
|
||||
self.type_field.set_text(attrib.getType())
|
||||
self.value_field.set_text(attrib.getValue())
|
||||
srcref_base = self.attrib.getSourceRef().getBase()
|
||||
if srcref_base:
|
||||
self.source_field.set_text(srcref_base.getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
self.priv.set_active(attrib.getPrivacy())
|
||||
|
||||
self.note_field.set_point(0)
|
||||
@ -1575,7 +1583,7 @@ class AttributeEditor:
|
||||
#-------------------------------------------------------------------------
|
||||
def on_attrib_source_clicked(obj):
|
||||
ee = obj.get_data(OBJECT)
|
||||
Sources.SourceEditor(ee.srcref,ee.parent.db,ee.source_field)
|
||||
Sources.SourceSelector(ee.srcreflist,ee.parent,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -1593,15 +1601,12 @@ def on_attrib_edit_ok_clicked(obj):
|
||||
|
||||
if attrib == None:
|
||||
attrib = Attribute()
|
||||
attrib.setSourceRefList(ee.srcreflist)
|
||||
ee.parent.alist.append(attrib)
|
||||
|
||||
if update_attrib(attrib,type,value,note,priv):
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
if not attrib.getSourceRef().are_equal(ee.srcref):
|
||||
attrib.setSourceRef(ee.srcref)
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
ee.parent.redraw_attr_list()
|
||||
utils.destroy_passed_object(obj)
|
||||
|
||||
@ -1621,13 +1626,13 @@ class NameEditor:
|
||||
self.surname_field = self.top.get_widget("alt_last")
|
||||
self.suffix_field = self.top.get_widget("alt_suffix")
|
||||
self.note_field = self.top.get_widget("alt_note")
|
||||
self.source_field = self.top.get_widget("alt_source")
|
||||
self.top.get_widget("alt_surname_list").set_popdown_strings(const.surnames)
|
||||
self.priv = self.top.get_widget("priv")
|
||||
|
||||
if self.name:
|
||||
self.srcref = SourceRef(self.name.getSourceRef())
|
||||
self.srcreflist = self.name.getSourceRefList()
|
||||
else:
|
||||
self.srcref = SourceRef()
|
||||
self.srcreflist = []
|
||||
|
||||
full_name = parent.person.getPrimaryName().getName()
|
||||
|
||||
@ -1643,11 +1648,6 @@ class NameEditor:
|
||||
self.given_field.set_text(name.getFirstName())
|
||||
self.surname_field.set_text(name.getSurname())
|
||||
self.suffix_field.set_text(name.getSuffix())
|
||||
srcref_base = self.name.getSourceRef().getBase()
|
||||
if srcref_base:
|
||||
self.source_field.set_text(srcref_base.getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
self.priv.set_active(name.getPrivacy())
|
||||
self.note_field.set_point(0)
|
||||
self.note_field.insert_defaults(name.getNote())
|
||||
@ -1667,7 +1667,7 @@ class NameEditor:
|
||||
#-------------------------------------------------------------------------
|
||||
def on_name_source_clicked(obj):
|
||||
ee = obj.get_data(OBJECT)
|
||||
Sources.SourceEditor(ee.srcref,ee.parent.db,ee.source_field)
|
||||
Sources.SourceSelector(ee.srcreflist,ee.parent,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -1686,15 +1686,12 @@ def on_name_edit_ok_clicked(obj):
|
||||
|
||||
if name == None:
|
||||
name = Name()
|
||||
name.setSourceRefList(ee.srcreflist)
|
||||
ee.parent.nlist.append(name)
|
||||
|
||||
if update_name(name,first,last,suffix,note,priv):
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
if not name.getSourceRef().are_equal(ee.srcref):
|
||||
name.setSourceRef(ee.srcref)
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
ee.parent.redraw_name_list()
|
||||
utils.destroy_passed_object(obj)
|
||||
|
||||
@ -1717,12 +1714,12 @@ class AddressEditor:
|
||||
self.country = self.top.get_widget("country")
|
||||
self.postal = self.top.get_widget("postal")
|
||||
self.note_field = self.top.get_widget("addr_note")
|
||||
self.source_field = self.top.get_widget("addr_source")
|
||||
self.priv = self.top.get_widget("priv")
|
||||
|
||||
if self.addr:
|
||||
self.srcref = SourceRef(self.addr.getSourceRef())
|
||||
self.srcreflist = self.addr.getSourceRefList()
|
||||
else:
|
||||
self.srcref = SourceRef()
|
||||
self.srcreflist = []
|
||||
|
||||
name = parent.person.getPrimaryName().getName()
|
||||
text = _("Address Editor for %s") % name
|
||||
@ -1735,7 +1732,6 @@ class AddressEditor:
|
||||
self.window.editable_enters(self.state);
|
||||
self.window.editable_enters(self.country);
|
||||
self.window.editable_enters(self.postal);
|
||||
self.window.editable_enters(self.source_field);
|
||||
self.window.editable_enters(self.note_field);
|
||||
|
||||
if addr != None:
|
||||
@ -1744,11 +1740,6 @@ class AddressEditor:
|
||||
self.state.set_text(addr.getState())
|
||||
self.country.set_text(addr.getCountry())
|
||||
self.postal.set_text(addr.getPostal())
|
||||
srcref_base = self.addr.getSourceRef().getBase()
|
||||
if srcref_base:
|
||||
self.source_field.set_text(srcref_base.getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
|
||||
self.priv.set_active(addr.getPrivacy())
|
||||
self.note_field.set_point(0)
|
||||
@ -1769,8 +1760,11 @@ class AddressEditor:
|
||||
#-------------------------------------------------------------------------
|
||||
def on_addr_source_clicked(obj):
|
||||
ee = obj.get_data(OBJECT)
|
||||
Sources.SourceEditor(ee.srcref,ee.parent.db,ee.source_field)
|
||||
|
||||
Sources.SourceSelector(ee.srcreflist,ee.parent,src_changed)
|
||||
|
||||
def src_changed(parent):
|
||||
parent.list_changed = 1
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -1791,15 +1785,12 @@ def on_addr_edit_ok_clicked(obj):
|
||||
|
||||
if addr == None:
|
||||
addr = Address()
|
||||
addr.setSourceRefList(ee.srcreflist)
|
||||
ee.parent.plist.append(addr)
|
||||
|
||||
if update_address(addr,date,street,city,state,country,postal,note,priv):
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
if not addr.getSourceRef().are_equal(ee.srcref):
|
||||
addr.setSourceRef(ee.srcref)
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
ee.parent.redraw_addr_list()
|
||||
utils.destroy_passed_object(obj)
|
||||
|
||||
|
@ -69,8 +69,12 @@ class EditPlace:
|
||||
self.callback = func
|
||||
self.path = db.getSavePath()
|
||||
self.not_loaded = 1
|
||||
self.sref = SourceRef(place.getSourceRef())
|
||||
|
||||
self.list_changed = 0
|
||||
if place:
|
||||
self.srcreflist = place.getSourceRefList()
|
||||
else:
|
||||
self.srcreflist = []
|
||||
|
||||
self.selectedIcon = -1
|
||||
self.currentImages = []
|
||||
self.top_window = libglade.GladeXML(const.placesFile,"placeEditor")
|
||||
@ -87,7 +91,6 @@ class EditPlace:
|
||||
self.web_url = self.top_window.get_widget("web_url")
|
||||
self.web_go = self.top_window.get_widget("web_go")
|
||||
self.web_description = self.top_window.get_widget("url_des")
|
||||
self.source_field = self.top_window.get_widget("source_field")
|
||||
|
||||
self.loc_list = self.top_window.get_widget("loc_list")
|
||||
self.loc_city = self.top_window.get_widget("loc_city")
|
||||
@ -107,10 +110,6 @@ class EditPlace:
|
||||
self.country.set_text(mloc.get_country())
|
||||
self.longitude.set_text(place.get_longitude())
|
||||
self.latitude.set_text(place.get_latitude())
|
||||
if self.sref.getBase():
|
||||
self.source_field.set_text(self.sref.getBase().getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
|
||||
self.note.set_point(0)
|
||||
self.note.insert_defaults(place.getNote())
|
||||
@ -281,8 +280,8 @@ def on_place_apply_clicked(obj):
|
||||
mloc.set_city(city)
|
||||
utils.modified()
|
||||
|
||||
if not edit.place.getSourceRef().are_equal(edit.sref):
|
||||
edit.place.setSourceRef(edit.sref)
|
||||
if edit.list_changed:
|
||||
edit.place.setSourceRefList(edit.srcreflist)
|
||||
utils.modified()
|
||||
|
||||
if state != mloc.get_state():
|
||||
@ -535,7 +534,10 @@ def on_add_loc_clicked(obj):
|
||||
#-------------------------------------------------------------------------
|
||||
def on_source_clicked(obj):
|
||||
epo = obj.get_data(_PLACE)
|
||||
Sources.SourceEditor(epo.sref,epo.db,epo.source_field)
|
||||
Sources.SourceSelector(epo.srcreflist,epo,src_changed)
|
||||
|
||||
def src_changed(parent):
|
||||
parent.list_changed = 1
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
|
@ -414,15 +414,15 @@ class GrampsParser(handler.ContentHandler):
|
||||
self.source_ref.confidence = self.conf
|
||||
self.source_ref.setBase(source)
|
||||
if self.event:
|
||||
self.event.setSourceRef(self.source_ref)
|
||||
self.event.addSourceRef(self.source_ref)
|
||||
elif self.address:
|
||||
self.address.setSourceRef(self.source_ref)
|
||||
self.address.addSourceRef(self.source_ref)
|
||||
elif self.name:
|
||||
self.name.setSourceRef(self.source_ref)
|
||||
self.name.addSourceRef(self.source_ref)
|
||||
elif self.attribute:
|
||||
self.attribute.setSourceRef(self.source_ref)
|
||||
self.attribute.addSourceRef(self.source_ref)
|
||||
elif self.placeobj:
|
||||
self.placeobj.setSourceRef(self.source_ref)
|
||||
self.placeobj.addSourceRef(self.source_ref)
|
||||
else:
|
||||
print "Sorry, I'm lost"
|
||||
|
||||
@ -638,7 +638,13 @@ class GrampsParser(handler.ContentHandler):
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
def stop_gender(self,tag):
|
||||
self.person.gender = (u2l(tag) == "M")
|
||||
t = u2l(tag)
|
||||
if t == "M":
|
||||
self.person.gender = Person.male
|
||||
elif t == "F":
|
||||
self.person.gender = Person.female
|
||||
else:
|
||||
self.person.gender = Person.unknown
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
@ -1107,15 +1113,15 @@ class GrampsImportParser(GrampsParser):
|
||||
self.source = self.db.findSource(u2l(attrs["ref"]),self.smap)
|
||||
self.source_ref.setBase(self.source)
|
||||
if self.address:
|
||||
self.address.setSourceRef(self.source_ref)
|
||||
self.address.addSourceRef(self.source_ref)
|
||||
elif self.name:
|
||||
self.name.setSourceRef(self.source_ref)
|
||||
self.name.addSourceRef(self.source_ref)
|
||||
elif self.event:
|
||||
self.event.setSourceRef(self.source_ref)
|
||||
self.event.addSourceRef(self.source_ref)
|
||||
elif self.attribute:
|
||||
self.attribute.setSourceRef(self.source_ref)
|
||||
self.attribute.addSourceRef(self.source_ref)
|
||||
elif self.placeobj:
|
||||
self.placeobj.setSourceRef(self.source_ref)
|
||||
self.placeobj.addSourceRef(self.source_ref)
|
||||
else:
|
||||
print "Sorry, I'm lost"
|
||||
|
||||
|
@ -682,10 +682,7 @@ class EventEditor:
|
||||
def __init__(self,parent,event):
|
||||
self.parent = parent
|
||||
self.event = event
|
||||
if self.event:
|
||||
self.srcref = SourceRef(self.event.getSourceRef())
|
||||
else:
|
||||
self.srcref = SourceRef()
|
||||
self.srcreflist = self.event.getSourceRefList()
|
||||
self.top = libglade.GladeXML(const.dialogFile, "event_edit")
|
||||
self.window = self.top.get_widget("event_edit")
|
||||
self.name_field = self.top.get_widget("eventName")
|
||||
@ -697,7 +694,6 @@ class EventEditor:
|
||||
self.descr_field = self.top.get_widget("eventDescription")
|
||||
self.note_field = self.top.get_widget("eventNote")
|
||||
self.event_menu = self.top.get_widget("personalEvents")
|
||||
self.source_field = self.top.get_widget("event_source")
|
||||
self.priv = self.top.get_widget("priv")
|
||||
|
||||
father = parent.family.getFather()
|
||||
@ -731,12 +727,6 @@ class EventEditor:
|
||||
self.descr_field.set_text(event.getDescription())
|
||||
self.priv.set_active(event.getPrivacy())
|
||||
|
||||
srcref_base = self.event.getSourceRef().getBase()
|
||||
if srcref_base:
|
||||
self.source_field.set_text(srcref_base.getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
|
||||
self.note_field.set_point(0)
|
||||
self.note_field.insert_defaults(event.getNote())
|
||||
self.note_field.set_word_wrap(1)
|
||||
@ -757,7 +747,10 @@ class EventEditor:
|
||||
#-------------------------------------------------------------------------
|
||||
def on_edit_source_clicked(obj):
|
||||
ee = obj.get_data("o")
|
||||
Sources.SourceEditor(ee.srcref,ee.parent.db,ee.source_field)
|
||||
Sources.SourceSelector(ee.srcreflist,ee.parent,src_changed)
|
||||
|
||||
def src_changed(parent):
|
||||
parent.list_changed = 1
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -779,6 +772,7 @@ def on_event_edit_ok_clicked(obj):
|
||||
|
||||
if event == None:
|
||||
event = Event()
|
||||
event.setSourceRefList(ee.srcreflist)
|
||||
ee.parent.elist.append(event)
|
||||
|
||||
if eplace_obj == None and eplace != "":
|
||||
@ -789,10 +783,6 @@ def on_event_edit_ok_clicked(obj):
|
||||
if update_event(event,ename,edate,eplace_obj,edesc,enote,epriv,ecause):
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
if not source_refs_equal(event.getSourceRef(),ee.srcref):
|
||||
event.setSourceRef(ee.srcref)
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
ee.parent.redraw_events()
|
||||
utils.destroy_passed_object(obj)
|
||||
|
||||
@ -814,11 +804,12 @@ class AttributeEditor:
|
||||
self.attrib_menu = self.top.get_widget("attr_menu")
|
||||
self.source_field = self.top.get_widget("attr_source")
|
||||
self.priv = self.top.get_widget("priv")
|
||||
if self.attrib:
|
||||
self.srcref = SourceRef(self.attrib.getSourceRef())
|
||||
else:
|
||||
self.srcref = SourceRef()
|
||||
|
||||
if attrib:
|
||||
self.srcreflist = self.attrib.getSourceRefList()
|
||||
else:
|
||||
self.srcreflist = []
|
||||
|
||||
# Typing CR selects OK button
|
||||
self.window.editable_enters(self.type_field);
|
||||
self.window.editable_enters(self.value_field);
|
||||
@ -841,12 +832,6 @@ class AttributeEditor:
|
||||
if attrib != None:
|
||||
self.type_field.set_text(attrib.getType())
|
||||
self.value_field.set_text(attrib.getValue())
|
||||
srcref_base = self.attrib.getSourceRef().getBase()
|
||||
if srcref_base:
|
||||
self.source_field.set_text(srcref_base.getTitle())
|
||||
else:
|
||||
self.source_field.set_text("")
|
||||
|
||||
self.priv.set_active(attrib.getPrivacy())
|
||||
|
||||
self.note_field.set_point(0)
|
||||
@ -867,7 +852,7 @@ class AttributeEditor:
|
||||
#-------------------------------------------------------------------------
|
||||
def on_attrib_source_clicked(obj):
|
||||
ee = obj.get_data("o")
|
||||
Sources.SourceEditor(ee.srcref,ee.parent.db,ee.source_field)
|
||||
Sources.SourceSelector(ee.srcreflist,ee.parent,src_changed)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -885,38 +870,15 @@ def on_attrib_edit_ok_clicked(obj):
|
||||
|
||||
if attrib == None:
|
||||
attrib = Attribute()
|
||||
attrib.setSourceRefList(ee.srcreflist)
|
||||
ee.parent.alist.append(attrib)
|
||||
|
||||
if update_attrib(attrib,type,value,note,priv):
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
if not source_refs_equal(attrib.getSourceRef(),ee.srcref):
|
||||
attrib.setSourceRef(ee.srcref)
|
||||
ee.parent.lists_changed = 1
|
||||
|
||||
ee.parent.redraw_attr_list()
|
||||
utils.destroy_passed_object(obj)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def source_refs_equal(one,two):
|
||||
if not one or not two:
|
||||
return 0
|
||||
if one.ref != two.ref:
|
||||
return 0
|
||||
if one.page != two.page:
|
||||
return 0
|
||||
if one.date != two.date:
|
||||
return 0
|
||||
if one.comments != two.comments:
|
||||
return 0
|
||||
if one.text != two.text:
|
||||
return 0
|
||||
return 1
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
|
@ -37,28 +37,30 @@ class SourceNote:
|
||||
def __init__(self,source=None):
|
||||
"""Create a new SourceNote, copying from source if not None"""
|
||||
|
||||
self.source_list = []
|
||||
|
||||
if source:
|
||||
if source.source_ref:
|
||||
self.source_ref = SourceRef(source.source_ref)
|
||||
else:
|
||||
self.source_ref = None
|
||||
if len(source.source_list) > 0:
|
||||
for sref in source.source_list:
|
||||
self.source_list.append(SourceRef(sref))
|
||||
if source.note:
|
||||
self.note = Note(source.note.get())
|
||||
else:
|
||||
self.note = None
|
||||
else:
|
||||
self.source_ref = None
|
||||
self.note = None
|
||||
|
||||
def setSourceRef(self,id) :
|
||||
def addSourceRef(self,id) :
|
||||
"""Set the source reference"""
|
||||
self.source_ref = id
|
||||
self.source_list.append(id)
|
||||
|
||||
def getSourceRef(self) :
|
||||
def getSourceRefList(self) :
|
||||
"""Return the source reference"""
|
||||
if not self.source_ref:
|
||||
self.source_ref = SourceRef()
|
||||
return self.source_ref
|
||||
return self.source_list
|
||||
|
||||
def setSourceRefList(self,list) :
|
||||
"""Replaces the source reference"""
|
||||
self.source_list = list
|
||||
|
||||
def setNote(self,text):
|
||||
"""Set the note to the given text"""
|
||||
@ -583,8 +585,15 @@ class Name(DataObj):
|
||||
return 0
|
||||
if self.getNote() != other.getNote():
|
||||
return 0
|
||||
if not self.getSourceRef().are_equal(other.getSourceRef()):
|
||||
if len(self.getSourceRefList()) != len(other.getSourceRefList()):
|
||||
return 0
|
||||
index = 0
|
||||
olist = other.getSourceRefList()
|
||||
for a in self.getSourceRefList():
|
||||
if not a.are_equal(olist[index]):
|
||||
return 0
|
||||
index = index + 1
|
||||
|
||||
return 1
|
||||
|
||||
class Url:
|
||||
@ -629,6 +638,7 @@ class Url:
|
||||
class Person:
|
||||
"""Represents an individual person in the gramps database"""
|
||||
|
||||
unknown = 2
|
||||
male = 1
|
||||
female = 0
|
||||
|
||||
@ -644,7 +654,7 @@ class Person:
|
||||
self.photoList = []
|
||||
self.nickname = ""
|
||||
self.alternateNames = []
|
||||
self.gender = 0
|
||||
self.gender = 2
|
||||
self.death = None
|
||||
self.birth = None
|
||||
self.addressList = []
|
||||
@ -930,8 +940,16 @@ class Event(DataObj):
|
||||
return 0
|
||||
if self.private != other.private:
|
||||
return 0
|
||||
if not self.getSourceRef().are_equal(other.getSourceRef()):
|
||||
|
||||
if len(self.getSourceRefList()) != len(other.getSourceRefList()):
|
||||
return 0
|
||||
index = 0
|
||||
olist = other.getSourceRefList()
|
||||
for a in self.getSourceRefList():
|
||||
if not a.are_equal(olist[index]):
|
||||
return 0
|
||||
index = index + 1
|
||||
|
||||
return 1
|
||||
|
||||
def setName(self,name):
|
||||
|
@ -48,6 +48,78 @@ ACTIVESRC = "a"
|
||||
INDEX = "i"
|
||||
MENUVAL = "a"
|
||||
|
||||
class SourceSelector:
|
||||
|
||||
def __init__(self,srclist,parent,update=None):
|
||||
self.db = parent.db
|
||||
self.parent = parent
|
||||
self.orig = srclist
|
||||
self.list = []
|
||||
for s in self.orig:
|
||||
self.list.append(SourceRef(s))
|
||||
self.update=update
|
||||
self.top = libglade.GladeXML(const.gladeFile,"sourcesel")
|
||||
self.top.signal_autoconnect({
|
||||
"destroy_passed_object" : utils.destroy_passed_object,
|
||||
"on_add_src_clicked" : on_add_src_clicked,
|
||||
"on_del_src_clicked" : on_del_src_clicked,
|
||||
"on_edit_src_clicked" : on_edit_src_clicked,
|
||||
"on_src_ok_clicked" : on_src_ok_clicked,
|
||||
})
|
||||
self.sourcesel = self.top.get_widget("sourcesel")
|
||||
self.slist = self.top.get_widget("slist")
|
||||
self.slist.set_data("o",self)
|
||||
self.redraw()
|
||||
self.sourcesel.show()
|
||||
|
||||
def redraw(self):
|
||||
index = 0
|
||||
self.slist.freeze()
|
||||
self.slist.clear()
|
||||
for s in self.list:
|
||||
base = s.getBase()
|
||||
self.slist.append([base.getId(),base.getTitle()])
|
||||
self.slist.set_row_data(index,s)
|
||||
index = index + 1
|
||||
self.slist.thaw()
|
||||
|
||||
def on_src_ok_clicked(obj):
|
||||
top = obj.get_data("o")
|
||||
del top.orig[:]
|
||||
for s in top.list:
|
||||
top.orig.append(s)
|
||||
top.update(top.parent)
|
||||
utils.destroy_passed_object(top.sourcesel)
|
||||
|
||||
def on_edit_src_clicked(obj):
|
||||
sel = obj.selection
|
||||
if len(sel) > 0:
|
||||
row = sel[0]
|
||||
src = obj.get_row_data(row)
|
||||
inst = obj.get_data("o")
|
||||
SourceEditor(src,inst.db,update_clist,inst)
|
||||
|
||||
def update_clist(inst,ref):
|
||||
inst.redraw()
|
||||
|
||||
def on_add_src_clicked(obj):
|
||||
inst = obj.get_data("o")
|
||||
src = SourceRef()
|
||||
SourceEditor(src,inst.db,add_ref,inst)
|
||||
|
||||
def add_ref(inst,ref):
|
||||
inst.list.append(ref)
|
||||
inst.redraw()
|
||||
|
||||
def on_del_src_clicked(obj):
|
||||
inst = obj.get_data("o")
|
||||
|
||||
sel = obj.selection
|
||||
if len(sel) > 0:
|
||||
row = sel[0]
|
||||
del inst.list[row]
|
||||
inst.redraw()
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# SourceEditor
|
||||
@ -60,9 +132,10 @@ class SourceEditor:
|
||||
# __init__ - Creates a source editor window associated with an event
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
def __init__(self,srcref,database,update=None):
|
||||
def __init__(self,srcref,database,update=None,parent=None):
|
||||
|
||||
self.db = database
|
||||
self.parent = parent
|
||||
self.update = update
|
||||
self.source_ref = srcref
|
||||
self.showSource = libglade.GladeXML(const.gladeFile, "sourceDisplay")
|
||||
@ -134,23 +207,11 @@ class SourceEditor:
|
||||
self.author_field.set_text("")
|
||||
self.pub_field.set_text("")
|
||||
|
||||
if self.active_source:
|
||||
active = 1
|
||||
else:
|
||||
active = 0
|
||||
|
||||
values = self.db.getSourceMap().values()
|
||||
values.sort(by_title)
|
||||
l = GtkLabel("-- No Source --")
|
||||
l.show()
|
||||
l.set_alignment(0,0.5)
|
||||
c = GtkListItem()
|
||||
c.add(l)
|
||||
c.set_data("s",None)
|
||||
c.show()
|
||||
sel_child = c
|
||||
list = [c]
|
||||
|
||||
sel_child = None
|
||||
list = []
|
||||
for src in values:
|
||||
l = GtkLabel("%s [%s]" % (src.getTitle(),src.getId()))
|
||||
l.show()
|
||||
@ -160,15 +221,13 @@ class SourceEditor:
|
||||
c.set_data("s",src)
|
||||
c.show()
|
||||
list.append(c)
|
||||
if src == self.active_source:
|
||||
if self.active_source == None:
|
||||
self.active_source = src
|
||||
sel_child = c
|
||||
|
||||
self.title_menu.list.append_items(list)
|
||||
self.title_menu.list.select_child(sel_child)
|
||||
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 sel_child != None:
|
||||
self.title_menu.list.select_child(sel_child)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -203,11 +262,7 @@ def on_sourceok_clicked(obj):
|
||||
src_edit.source_ref.setConfidence(conf)
|
||||
|
||||
if src_edit.update:
|
||||
if src_edit.source_ref.getBase():
|
||||
val = src_edit.source_ref.getBase().getTitle()
|
||||
else:
|
||||
val = ""
|
||||
src_edit.update.set_text(val)
|
||||
src_edit.update(src_edit.parent,src_edit.source_ref)
|
||||
|
||||
utils.modified()
|
||||
utils.destroy_passed_object(obj)
|
||||
@ -223,16 +278,5 @@ def on_source_changed(obj):
|
||||
src_entry.active_source = obj.list.get_selection()[0].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)
|
||||
src_entry.get_widget("conf").set_sensitive(active)
|
||||
|
@ -22,11 +22,6 @@ import gzip
|
||||
_BLKSIZE=512
|
||||
nul = '\0'
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
class TarFile:
|
||||
def __init__(self,name):
|
||||
self.name = name
|
||||
@ -78,3 +73,46 @@ class TarFile:
|
||||
self.f.write('\0' * rem)
|
||||
self.f.close()
|
||||
|
||||
|
||||
class ReadTarFile:
|
||||
def __init__(self,name,wd):
|
||||
self.name = name
|
||||
self.wd = wd
|
||||
self.f = gzip.open(name,"rb")
|
||||
self.pos = 0
|
||||
|
||||
def extract(self):
|
||||
while 1:
|
||||
buf = self.f.read(100)
|
||||
if buf == '':
|
||||
return
|
||||
index = 0
|
||||
for b in buf:
|
||||
if b != '\0':
|
||||
index = index + 1
|
||||
else:
|
||||
if index == 0:
|
||||
return
|
||||
continue
|
||||
filename = buf[0:index]
|
||||
self.f.read(24) # modes
|
||||
l = self.f.read(12)
|
||||
length = int(l,8)
|
||||
self.f.read(12)
|
||||
self.f.read(6)
|
||||
self.f.read(111)
|
||||
|
||||
self.f.read(64)
|
||||
self.f.read(183)
|
||||
foo = open(filename,"wb")
|
||||
foo.write(self.f.read(length))
|
||||
foo.close()
|
||||
self.f.read(_BLKSIZE-(length%_BLKSIZE))
|
||||
|
||||
def close(self):
|
||||
self.f.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
a = ReadTarFile("out.gpkg",".")
|
||||
a.extract()
|
||||
a.close()
|
@ -120,7 +120,8 @@ def dump_my_event(g,name,event,index=1):
|
||||
if event.getNote() != "":
|
||||
writeNote(g,"note",event.getNote(),index+1)
|
||||
|
||||
dump_source_ref(g,event.getSourceRef(),index+1)
|
||||
for s in event.getSourceRefList():
|
||||
dump_source_ref(g,s,index+1)
|
||||
g.write("%s</event>\n" % sp)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -129,27 +130,26 @@ def dump_my_event(g,name,event,index=1):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def dump_source_ref(g,source_ref,index=1):
|
||||
if source_ref:
|
||||
source = source_ref.getBase()
|
||||
if source:
|
||||
p = source_ref.getPage()
|
||||
c = source_ref.getComments()
|
||||
t = source_ref.getText()
|
||||
d = source_ref.getDate().getSaveDate()
|
||||
q = source_ref.getConfidence()
|
||||
g.write(" " * index)
|
||||
if p == "" and c == "" and t == "" and d == "" and q == 2:
|
||||
g.write('<sourceref ref="%s"/>\n' % source.getId())
|
||||
source = source_ref.getBase()
|
||||
if source:
|
||||
p = source_ref.getPage()
|
||||
c = source_ref.getComments()
|
||||
t = source_ref.getText()
|
||||
d = source_ref.getDate().getSaveDate()
|
||||
q = source_ref.getConfidence()
|
||||
g.write(" " * index)
|
||||
if p == "" and c == "" and t == "" and d == "" and q == 2:
|
||||
g.write('<sourceref ref="%s"/>\n' % source.getId())
|
||||
else:
|
||||
if q == 2:
|
||||
g.write('<sourceref ref="%s">\n' % source.getId())
|
||||
else:
|
||||
if q == 2:
|
||||
g.write('<sourceref ref="%s">\n' % source.getId())
|
||||
else:
|
||||
g.write('<sourceref ref="%s" conf="%d">\n' % (source.getId(),q))
|
||||
write_line(g,"spage",p,index+1)
|
||||
writeNote(g,"scomments",c,index+1)
|
||||
writeNote(g,"stext",t,index+1)
|
||||
write_line(g,"sdate",d,index+1)
|
||||
g.write("%s</sourceref>\n" % (" " * index))
|
||||
g.write('<sourceref ref="%s" conf="%d">\n' % (source.getId(),q))
|
||||
write_line(g,"spage",p,index+1)
|
||||
writeNote(g,"scomments",c,index+1)
|
||||
writeNote(g,"stext",t,index+1)
|
||||
write_line(g,"sdate",d,index+1)
|
||||
g.write("%s</sourceref>\n" % (" " * index))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -215,7 +215,8 @@ def dump_name(g,label,name,index=1):
|
||||
write_line(g,"title",name.getTitle(),index+1)
|
||||
if name.getNote() != "":
|
||||
writeNote(g,"note",name.getNote(),index+1)
|
||||
dump_source_ref(g,name.getSourceRef(),index+1)
|
||||
for s in name.getSourceRefList():
|
||||
dump_source_ref(g,s,index+1)
|
||||
|
||||
g.write('%s</%s>\n' % (sp,label))
|
||||
|
||||
@ -269,11 +270,12 @@ def dump_location(g,loc):
|
||||
|
||||
def write_attribute_list(g, list):
|
||||
for attr in list:
|
||||
if attr.getSourceRef() or attr.getNote():
|
||||
if len(attr.getSourceRef()) > 0 or attr.getNote():
|
||||
g.write(' <attribute%s>\n' % conf_priv(attr))
|
||||
write_line(g,"attr_type",attr.getType(),4)
|
||||
write_line(g,"attr_value",attr.getValue(),4)
|
||||
dump_source_ref(g,attr.getSourceRef(),4)
|
||||
for s in attr.getSourceRefList():
|
||||
dump_source_ref(g,s,index+1)
|
||||
writeNote(g,"note",attr.getNote(),4)
|
||||
g.write(' </attribute>\n')
|
||||
else:
|
||||
@ -328,7 +330,8 @@ def write_place_obj(g,place):
|
||||
write_url_list(g, place.getUrlList())
|
||||
if place.getNote() != "":
|
||||
writeNote(g,"note",place.getNote(),3)
|
||||
dump_source_ref(g,place.getSourceRef(),3)
|
||||
for s in place.getSourceRefList():
|
||||
dump_source_ref(g,s,index+1)
|
||||
g.write(" </placeobj>\n")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -412,8 +415,10 @@ def write_xml_data(database, g, callback, sp):
|
||||
write_id(g,"person",person,2)
|
||||
if person.getGender() == Person.male:
|
||||
write_line(g,"gender","M",3)
|
||||
else:
|
||||
elif person.getGender() == Person.female:
|
||||
write_line(g,"gender","F",3)
|
||||
else:
|
||||
write_line(g,"gender","U",3)
|
||||
dump_name(g,"name",person.getPrimaryName(),3)
|
||||
for name in person.getAlternateNames():
|
||||
dump_name(g,"aka",name,3)
|
||||
@ -441,7 +446,8 @@ def write_xml_data(database, g, callback, sp):
|
||||
write_line(g,"postal",address.getPostal(),4)
|
||||
if address.getNote() != "":
|
||||
writeNote(g,"note",address.getNote(),4)
|
||||
dump_source_ref(g,address.getSourceRef(),4)
|
||||
for s in address.getSourceRefList():
|
||||
dump_source_ref(g,s,index+1)
|
||||
g.write(' </address>\n')
|
||||
|
||||
write_attribute_list(g,person.getAttributeList())
|
||||
|
@ -97,6 +97,7 @@ thumbScale = 100.0
|
||||
indexFile = "data.gramps"
|
||||
male = _("male")
|
||||
female = _("female")
|
||||
unknown = _("unknown")
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -343,9 +344,11 @@ def save_pattr(st):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
familyConstantAttributes = {
|
||||
"Number of Children" : "NCHI",
|
||||
}
|
||||
|
||||
_fa_e2l = {
|
||||
"Number of Children" : _("Number of Children"),
|
||||
}
|
||||
|
||||
_fa_l2e = {}
|
||||
|
@ -125,7 +125,7 @@
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table21</name>
|
||||
<rows>8</rows>
|
||||
<rows>7</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>0</row_spacing>
|
||||
@ -308,32 +308,6 @@
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label158</name>
|
||||
<label>Source</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>5</top_attach>
|
||||
<bottom_attach>6</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>personalEvents</name>
|
||||
@ -407,8 +381,8 @@
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>7</top_attach>
|
||||
<bottom_attach>8</bottom_attach>
|
||||
<top_attach>6</top_attach>
|
||||
<bottom_attach>7</bottom_attach>
|
||||
<xpad>3</xpad>
|
||||
<ypad>3</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -441,8 +415,8 @@
|
||||
<child>
|
||||
<left_attach>0</left_attach>
|
||||
<right_attach>1</right_attach>
|
||||
<top_attach>7</top_attach>
|
||||
<bottom_attach>8</bottom_attach>
|
||||
<top_attach>6</top_attach>
|
||||
<bottom_attach>7</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -475,13 +449,12 @@
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>event_source</name>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>False</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<padding>3</padding>
|
||||
<expand>True</expand>
|
||||
@ -511,29 +484,6 @@
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>6</top_attach>
|
||||
<bottom_attach>7</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>GtkLabel</class>
|
||||
<name>causelabel</name>
|
||||
@ -701,7 +651,7 @@
|
||||
<widget>
|
||||
<class>GtkTable</class>
|
||||
<name>table22</name>
|
||||
<rows>5</rows>
|
||||
<rows>4</rows>
|
||||
<columns>2</columns>
|
||||
<homogeneous>False</homogeneous>
|
||||
<row_spacing>0</row_spacing>
|
||||
@ -764,32 +714,6 @@
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label175</name>
|
||||
<label>Source</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>2</top_attach>
|
||||
<bottom_attach>3</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_menu</name>
|
||||
@ -863,8 +787,8 @@
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>4</top_attach>
|
||||
<bottom_attach>5</bottom_attach>
|
||||
<top_attach>3</top_attach>
|
||||
<bottom_attach>4</bottom_attach>
|
||||
<xpad>3</xpad>
|
||||
<ypad>3</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -897,8 +821,8 @@
|
||||
<child>
|
||||
<left_attach>0</left_attach>
|
||||
<right_attach>1</right_attach>
|
||||
<top_attach>4</top_attach>
|
||||
<bottom_attach>5</bottom_attach>
|
||||
<top_attach>3</top_attach>
|
||||
<bottom_attach>4</bottom_attach>
|
||||
<xpad>0</xpad>
|
||||
<ypad>0</ypad>
|
||||
<xexpand>False</xexpand>
|
||||
@ -931,13 +855,12 @@
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkEntry</class>
|
||||
<name>attr_source</name>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<editable>False</editable>
|
||||
<text_visible>True</text_visible>
|
||||
<text_max_length>0</text_max_length>
|
||||
<text></text>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<padding>3</padding>
|
||||
<expand>True</expand>
|
||||
@ -966,29 +889,6 @@
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkCheckButton</class>
|
||||
<name>priv</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>Private Record</label>
|
||||
<active>False</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<child>
|
||||
<left_attach>1</left_attach>
|
||||
<right_attach>2</right_attach>
|
||||
<top_attach>3</top_attach>
|
||||
<bottom_attach>4</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>
|
||||
</widget>
|
||||
|
@ -5297,7 +5297,7 @@ Very High
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>childGender</name>
|
||||
<name>childMale</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>male</label>
|
||||
<active>False</active>
|
||||
@ -5312,7 +5312,7 @@ Very High
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>radiobutton2</name>
|
||||
<name>childFemale</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>female</label>
|
||||
<active>True</active>
|
||||
@ -5324,6 +5324,21 @@ Very High
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkRadioButton</class>
|
||||
<name>childUnknown</name>
|
||||
<can_focus>True</can_focus>
|
||||
<label>unknown</label>
|
||||
<active>True</active>
|
||||
<draw_indicator>True</draw_indicator>
|
||||
<group>childGender</group>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
@ -6577,4 +6592,230 @@ Unknown
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GnomeDialog</class>
|
||||
<name>sourcesel</name>
|
||||
<title>Gramps - Source Reference Selection</title>
|
||||
<type>GTK_WINDOW_TOPLEVEL</type>
|
||||
<position>GTK_WIN_POS_NONE</position>
|
||||
<modal>False</modal>
|
||||
<allow_shrink>False</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-vbox18</name>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>8</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_area18</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>button136</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<signal>
|
||||
<name>clicked</name>
|
||||
<handler>on_src_ok_clicked</handler>
|
||||
<object>slist</object>
|
||||
<last_modification_time>Sat, 06 Oct 2001 15:41:23 GMT</last_modification_time>
|
||||
</signal>
|
||||
<stock_button>GNOME_STOCK_BUTTON_OK</stock_button>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>button138</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<signal>
|
||||
<name>clicked</name>
|
||||
<handler>destroy_passed_object</handler>
|
||||
<object>sourcesel</object>
|
||||
<last_modification_time>Fri, 05 Oct 2001 02:26:38 GMT</last_modification_time>
|
||||
</signal>
|
||||
<stock_button>GNOME_STOCK_BUTTON_CANCEL</stock_button>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkVBox</class>
|
||||
<name>vbox47</name>
|
||||
<homogeneous>False</homogeneous>
|
||||
<spacing>0</spacing>
|
||||
<child>
|
||||
<padding>0</padding>
|
||||
<expand>True</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
|
||||
<widget>
|
||||
<class>GtkLabel</class>
|
||||
<name>label253</name>
|
||||
<label>Source Reference Selection</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>0</padding>
|
||||
<expand>False</expand>
|
||||
<fill>False</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkHSeparator</class>
|
||||
<name>hseparator27</name>
|
||||
<child>
|
||||
<padding>5</padding>
|
||||
<expand>True</expand>
|
||||
<fill>True</fill>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkScrolledWindow</class>
|
||||
<name>scrolledwindow30</name>
|
||||
<width>400</width>
|
||||
<height>150</height>
|
||||
<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>slist</name>
|
||||
<can_focus>True</can_focus>
|
||||
<columns>2</columns>
|
||||
<column_widths>80,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>label254</name>
|
||||
<label>ID</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>label255</name>
|
||||
<label>Title</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>hbuttonbox26</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>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>button139</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<signal>
|
||||
<name>clicked</name>
|
||||
<handler>on_add_src_clicked</handler>
|
||||
<object>slist</object>
|
||||
<last_modification_time>Sat, 06 Oct 2001 15:47:16 GMT</last_modification_time>
|
||||
</signal>
|
||||
<label>Add</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>button140</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<signal>
|
||||
<name>clicked</name>
|
||||
<handler>on_edit_src_clicked</handler>
|
||||
<object>slist</object>
|
||||
<last_modification_time>Fri, 05 Oct 2001 02:49:15 GMT</last_modification_time>
|
||||
</signal>
|
||||
<label>Edit</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
</widget>
|
||||
|
||||
<widget>
|
||||
<class>GtkButton</class>
|
||||
<name>button141</name>
|
||||
<can_default>True</can_default>
|
||||
<can_focus>True</can_focus>
|
||||
<signal>
|
||||
<name>clicked</name>
|
||||
<handler>on_del_src_clicked</handler>
|
||||
<object>slist</object>
|
||||
<last_modification_time>Sat, 06 Oct 2001 15:39:54 GMT</last_modification_time>
|
||||
</signal>
|
||||
<label>Delete</label>
|
||||
<relief>GTK_RELIEF_NORMAL</relief>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
|
||||
</GTK-Interface>
|
||||
|
@ -560,10 +560,12 @@ def on_addchild_ok_clicked(obj):
|
||||
name.setFirstName(given)
|
||||
person.setPrimaryName(name)
|
||||
|
||||
if new_child_win.get_widget("childGender").get_active():
|
||||
if new_child_win.get_widget("childMale").get_active():
|
||||
person.setGender(Person.male)
|
||||
else:
|
||||
elif new_child_win.get_widget("childFemale").get_active():
|
||||
person.setGender(Person.female)
|
||||
else:
|
||||
person.setGender(Person.unknown)
|
||||
|
||||
if not active_family:
|
||||
active_family = database.newFamily()
|
||||
@ -729,7 +731,7 @@ def on_prel_changed(obj):
|
||||
father_index = 1
|
||||
mother_index = 1
|
||||
for person in people:
|
||||
if person == active_person:
|
||||
if person == active_person or person.getGender() == Person.unknown:
|
||||
continue
|
||||
elif type == "Partners":
|
||||
father_list.append([utils.phonebook_name(person),birthday(person)])
|
||||
@ -2255,10 +2257,12 @@ def redisplay_person_list(person):
|
||||
alt2col[person] = []
|
||||
gname = utils.phonebook_from_name
|
||||
if DataFilter.compare(person):
|
||||
if person.getGender():
|
||||
if person.getGender() == Person.male:
|
||||
gender = const.male
|
||||
else:
|
||||
elif person.getGender() == Person.female:
|
||||
gender = const.female
|
||||
else:
|
||||
gender = const.unknown
|
||||
bday = person.getBirth().getDateObj()
|
||||
dday = person.getDeath().getDateObj()
|
||||
name = person.getPrimaryName()
|
||||
@ -2992,10 +2996,12 @@ def apply_filter():
|
||||
id2col[person] = pos
|
||||
new_alt2col[person] = []
|
||||
|
||||
if person.getGender():
|
||||
if person.getGender() == Person.male:
|
||||
gender = const.male
|
||||
else:
|
||||
elif person.getGender() == Person.female:
|
||||
gender = const.female
|
||||
else:
|
||||
gender = const.unknown
|
||||
|
||||
bday = person.getBirth().getDateObj()
|
||||
dday = person.getDeath().getDateObj()
|
||||
|
@ -78,11 +78,22 @@ _t0 = {
|
||||
def ansel_to_latin(s):
|
||||
buff = cStringIO.StringIO()
|
||||
while s:
|
||||
try:
|
||||
head,s = ansel_to_code(s)
|
||||
except Exception:
|
||||
c0 = ord(s[0])
|
||||
if c0 > 127:
|
||||
try:
|
||||
if c0 >= 0xE0:
|
||||
c1 = ord(s[1])
|
||||
head = chr(_s1[c0][c1])
|
||||
s = s[2:]
|
||||
else:
|
||||
head = chr(_s0[c0])
|
||||
s = s[1:]
|
||||
except Exception:
|
||||
head = s[0]
|
||||
s = s[1:]
|
||||
else:
|
||||
head = s[0]
|
||||
s = s[1:0]
|
||||
s = s[1:]
|
||||
buff.write(head)
|
||||
ans = buff.getvalue()
|
||||
buff.close()
|
||||
@ -115,23 +126,3 @@ def latin_to_ansel(s):
|
||||
buff.close()
|
||||
return ans
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def ansel_to_code(s):
|
||||
if s == "":
|
||||
return ""
|
||||
if ord(s[0]) < 128:
|
||||
return s[0],s[1:]
|
||||
c0 = ord(s[0])
|
||||
c1 = ord(s[1])
|
||||
if c0 >= 0xE0:
|
||||
return chr(_s1[c0][c1]),s[2:]
|
||||
else:
|
||||
try:
|
||||
return chr(_s0[c0]), s[1:]
|
||||
except:
|
||||
return s[0], s[1:]
|
||||
|
||||
|
@ -48,6 +48,11 @@ glade_file = None
|
||||
clear_data = 0
|
||||
is_ftw = 0
|
||||
|
||||
def nocnv(s):
|
||||
return s
|
||||
|
||||
_cnv = nocnv
|
||||
|
||||
photo_types = [ "jpeg", "bmp", "pict", "pntg", "tpic", "png", "gif",
|
||||
"tiff", "pcx" ]
|
||||
|
||||
@ -69,6 +74,8 @@ lineRE = re.compile(r"\s*(\d+)\s+(\S+)\s*(.*)$")
|
||||
headRE = re.compile(r"\s*(\d+)\s+HEAD")
|
||||
nameRegexp = re.compile(r"([\S\s]*\S)?\s*/([^/]+)?/\s*,?\s*([\S]+)?")
|
||||
|
||||
placemap = {}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -96,7 +103,9 @@ def find_file(fullname,altpath):
|
||||
#
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
def importData(database, filename):
|
||||
|
||||
global callback
|
||||
global topDialog
|
||||
global glade_file
|
||||
@ -125,12 +134,17 @@ def importData(database, filename):
|
||||
GnomeErrorDialog(_("%s could not be opened\n") % filename)
|
||||
return
|
||||
|
||||
import time
|
||||
t1 = time.time()
|
||||
g.parse_gedcom_file()
|
||||
t2 = time.time()
|
||||
print t2-t1
|
||||
|
||||
statusTop.get_widget("close").set_sensitive(1)
|
||||
|
||||
utils.modified()
|
||||
callback(1)
|
||||
if callback:
|
||||
callback(1)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -183,9 +197,9 @@ class GedcomParser:
|
||||
self.dir_path = os.path.dirname(file)
|
||||
self.localref = 0
|
||||
|
||||
f = open(file,"r")
|
||||
self.lines = f.readlines()
|
||||
f.close()
|
||||
self.f = open(file,"r")
|
||||
self.index = 0
|
||||
self.backoff = 0
|
||||
|
||||
self.file_obj = window.get_widget("file")
|
||||
self.encoding_obj = window.get_widget("encoding")
|
||||
@ -200,8 +214,6 @@ class GedcomParser:
|
||||
self.error_text_obj.set_word_wrap(0)
|
||||
|
||||
self.update(self.file_obj,file)
|
||||
|
||||
self.index = 0
|
||||
self.code = 0
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
@ -220,24 +232,27 @@ class GedcomParser:
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
def get_next(self):
|
||||
line = string.replace(self.lines[self.index],'\r','')
|
||||
if self.code == ANSEL:
|
||||
line = latin_ansel.ansel_to_latin(line)
|
||||
elif self.code == UNICODE:
|
||||
line = latin_utf8.utf8_to_latin(line)
|
||||
match = lineRE.match(line)
|
||||
if not match:
|
||||
msg = _("Warning: line %d was not understood, so it was ignored.") % self.index
|
||||
self.error_text_obj.insert_defaults(msg)
|
||||
msg = "\n\t%s\n" % self.lines[self.index-1]
|
||||
self.error_text_obj.insert_defaults(msg)
|
||||
self.error_count = self.error_count + 1
|
||||
self.update(self.errors_obj,str(self.error_count))
|
||||
match = lineRE.match("999 XXX XXX")
|
||||
|
||||
self.index = self.index + 1
|
||||
return match.groups()
|
||||
|
||||
if self.backoff == 0:
|
||||
self.text = _cnv(string.strip(self.f.readline()))
|
||||
self.index = self.index + 1
|
||||
l = string.split(self.text, None, 2)
|
||||
ln = len(l)
|
||||
try:
|
||||
if ln == 2:
|
||||
self.groups = (int(l[0]),l[1],"")
|
||||
else:
|
||||
self.groups = (int(l[0]),l[1],l[2])
|
||||
except:
|
||||
msg = _("Warning: line %d was not understood, so it was ignored.") % self.index
|
||||
self.error_text_obj.insert_defaults(msg)
|
||||
msg = "\n\t%s\n" % self.text
|
||||
self.error_text_obj.insert_defaults(msg)
|
||||
self.error_count = self.error_count + 1
|
||||
self.update(self.errors_obj,str(self.error_count))
|
||||
self.groups = (999, "XXX", "XXX")
|
||||
self.backoff = 0
|
||||
return self.groups
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -246,7 +261,7 @@ class GedcomParser:
|
||||
def barf(self,level):
|
||||
msg = _("Warning: line %d was not understood, so it was ignored.") % self.index
|
||||
self.error_text_obj.insert_defaults(msg)
|
||||
msg = "\n\t%s\n" % self.lines[self.index-1]
|
||||
msg = "\n\t%s\n" % self.text
|
||||
self.error_text_obj.insert_defaults(msg)
|
||||
self.error_count = self.error_count + 1
|
||||
self.update(self.errors_obj,str(self.error_count))
|
||||
@ -268,7 +283,7 @@ class GedcomParser:
|
||||
#
|
||||
#---------------------------------------------------------------------
|
||||
def backup(self):
|
||||
self.index = self.index - 1
|
||||
self.backoff = 1
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
@ -296,7 +311,8 @@ class GedcomParser:
|
||||
|
||||
if matches[1] != "TRLR":
|
||||
self.barf(0)
|
||||
|
||||
self.f.close()
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -325,7 +341,7 @@ class GedcomParser:
|
||||
def parse_submitter(self):
|
||||
matches = self.get_next()
|
||||
|
||||
if matches[2] != "SUBN":
|
||||
if matches[2] != "SUBM":
|
||||
self.backup()
|
||||
return
|
||||
else:
|
||||
@ -414,7 +430,6 @@ class GedcomParser:
|
||||
noteobj.set(text + self.parse_continue_data(1))
|
||||
self.parse_note_data(1)
|
||||
elif matches[2] == "OBJE":
|
||||
print "OBJE",matches[1]
|
||||
self.ignore_sub_junk(1)
|
||||
elif matches[1] == "TRLR":
|
||||
self.backup()
|
||||
@ -505,6 +520,11 @@ class GedcomParser:
|
||||
child.setMainFamily(None)
|
||||
child.addAltFamily(self.family,mrel,frel)
|
||||
elif matches[1] == "NCHI" or matches[1] == "RIN" or matches[1] == "SUBM":
|
||||
a = Attribute()
|
||||
a.setType("Number of Children")
|
||||
a.setValue(matches[2])
|
||||
self.family.addAttribute(a)
|
||||
elif matches[1] == "RIN" or matches[1] == "SUBM":
|
||||
pass
|
||||
elif matches[1] == "REFN" or matches[1] == "CHAN":
|
||||
self.ignore_sub_junk(2)
|
||||
@ -601,7 +621,9 @@ class GedcomParser:
|
||||
self.nmap[matches[2]] = noteobj
|
||||
self.person.setNoteObj(noteobj)
|
||||
elif matches[1] == "SEX":
|
||||
if matches[2][0] == "M":
|
||||
if matches[2] == '':
|
||||
self.person.setGender(Person.unknown)
|
||||
elif matches[2][0] == "M":
|
||||
self.person.setGender(Person.male)
|
||||
else:
|
||||
self.person.setGender(Person.female)
|
||||
@ -838,7 +860,7 @@ class GedcomParser:
|
||||
elif matches[1] == "SOUR":
|
||||
source_ref = SourceRef()
|
||||
source_ref.setBase(self.db.findSource(matches[2],self.smap))
|
||||
address.setSourceRef(source_ref)
|
||||
address.addSourceRef(source_ref)
|
||||
self.parse_source_reference(source_ref,level+1)
|
||||
elif matches[1] == "PLAC":
|
||||
address.setStreet(matches[2])
|
||||
@ -937,7 +959,7 @@ class GedcomParser:
|
||||
else:
|
||||
source_ref.setBase(self.db.findSource(matches[2],self.smap))
|
||||
self.parse_source_reference(source_ref,level+1)
|
||||
event.setSourceRef(source_ref)
|
||||
event.addSourceRef(source_ref)
|
||||
elif matches[1] == "FAMC":
|
||||
family = self.db.findFamily(matches[2],self.fmap)
|
||||
if event.getName() == "Birth":
|
||||
@ -953,11 +975,8 @@ class GedcomParser:
|
||||
event.setDescription(val)
|
||||
self.ignore_sub_junk(level+1)
|
||||
else:
|
||||
place = None
|
||||
for p in self.db.getPlaceMap().values():
|
||||
if val == p.get_title():
|
||||
place = p
|
||||
break
|
||||
if placemap.has_key(val):
|
||||
place = placemap[val]
|
||||
else:
|
||||
place = Place()
|
||||
place.set_title(matches[2])
|
||||
@ -1028,14 +1047,11 @@ class GedcomParser:
|
||||
else:
|
||||
source_ref.setBase(self.db.findSource(matches[2],self.smap))
|
||||
self.parse_source_reference(source_ref,level+1)
|
||||
event.setSourceRef(source_ref)
|
||||
event.addSourceRef(source_ref)
|
||||
elif matches[1] == "PLAC":
|
||||
val = matches[2]
|
||||
place = None
|
||||
for p in self.db.getPlaceMap().values():
|
||||
if val == p.get_title():
|
||||
place = p
|
||||
break
|
||||
if placemap.has_key(val):
|
||||
place = placemap[val]
|
||||
else:
|
||||
place = Place()
|
||||
place.set_title(matches[2])
|
||||
@ -1145,7 +1161,7 @@ class GedcomParser:
|
||||
elif matches[1] == "SOUR":
|
||||
source_ref = SourceRef()
|
||||
source_ref.setBase(self.db.findSource(matches[2],self.smap))
|
||||
name.setSourceRef(source_ref)
|
||||
name.addSourceRef(source_ref)
|
||||
self.parse_source_reference(source_ref,level+1)
|
||||
elif matches[1][0:4] == "NOTE":
|
||||
if matches[2] and matches[2][0] != "@":
|
||||
@ -1164,10 +1180,10 @@ class GedcomParser:
|
||||
|
||||
def parse_header_head(self):
|
||||
"""validiates that this is a valid GEDCOM file"""
|
||||
line = string.replace(self.lines[self.index],'\r','')
|
||||
line = string.replace(self.f.readline(),'\r','')
|
||||
match = headRE.search(line)
|
||||
if not match:
|
||||
raise GedcomParser.BadFile, self.lines[self.index]
|
||||
raise GedcomParser.BadFile, line
|
||||
self.index = self.index + 1
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
@ -1177,6 +1193,7 @@ class GedcomParser:
|
||||
#---------------------------------------------------------------------
|
||||
def parse_header_source(self):
|
||||
global is_ftw
|
||||
global _cnv
|
||||
|
||||
while 1:
|
||||
matches = self.get_next()
|
||||
@ -1211,8 +1228,10 @@ class GedcomParser:
|
||||
if matches[2] == "UNICODE" or matches[2] == "UTF-8" or \
|
||||
matches[2] == "UTF8":
|
||||
self.code = UNICODE
|
||||
_cnv = latin_utf8.utf8_to_latin
|
||||
elif matches[2] == "ANSEL":
|
||||
self.code = ANSEL
|
||||
_cnv = latin_ansel.ansel_to_latin
|
||||
self.ignore_sub_junk(2)
|
||||
self.update(self.encoding_obj,matches[2])
|
||||
elif matches[1] == "GEDC":
|
||||
@ -1598,3 +1617,13 @@ def readData(database,active_person,cb):
|
||||
from Plugins import register_import
|
||||
|
||||
register_import(readData,_("Import from GEDCOM"))
|
||||
|
||||
if __name__ == "__main__":
|
||||
import profile
|
||||
import sys
|
||||
global db
|
||||
|
||||
glade_file = "plugins/gedcomimport.glade"
|
||||
|
||||
db = RelDataBase()
|
||||
profile.run('importData(db,sys.argv[1])')
|
||||
|
@ -131,7 +131,7 @@ class IndividualPage:
|
||||
self.doc.start_cell("NormalCell")
|
||||
self.doc.start_paragraph("Data")
|
||||
self.doc.write_text(data)
|
||||
if sref != None and sref.getBase() != None :
|
||||
for sref in srefllist:
|
||||
self.doc.start_link("#s%d" % self.scnt)
|
||||
self.doc.write_text("<SUP>%d</SUP>" % self.scnt)
|
||||
self.doc.end_link()
|
||||
@ -244,7 +244,7 @@ class IndividualPage:
|
||||
self.doc.end_paragraph()
|
||||
|
||||
self.doc.start_table("one","IndTable")
|
||||
self.write_normal_row("%s:" % _("Name"), name, name_obj.getSourceRef())
|
||||
self.write_normal_row("%s:" % _("Name"), name, name_obj.getSourceRefList())
|
||||
if self.person.getGender() == Person.male:
|
||||
self.write_normal_row("%s:" % _("Gender"), \
|
||||
_("Male"),None)
|
||||
@ -306,7 +306,7 @@ class IndividualPage:
|
||||
date = event.getDate()
|
||||
descr = event.getDescription()
|
||||
place = event.getPlaceName()
|
||||
srcref = event.getSourceRef()
|
||||
srcref = event.getSourceRefList()
|
||||
|
||||
if date == "" and descr == "" and place == "" and srcref.getBase() == None:
|
||||
continue
|
||||
|
@ -200,8 +200,28 @@ def add_persons_sources(person):
|
||||
for event in elist:
|
||||
if private and event.getPrivacy():
|
||||
continue
|
||||
source_ref = event.getSourceRef()
|
||||
if source_ref != None:
|
||||
for source_ref in event.getSourceRefList():
|
||||
sbase = source_ref.getBase()
|
||||
if sbase != None and sbase not in source_list:
|
||||
source_list.append(sbase)
|
||||
for event in person.getAddressList():
|
||||
if private and event.getPrivacy():
|
||||
continue
|
||||
for source_ref in event.getSourceRefList():
|
||||
sbase = source_ref.getBase()
|
||||
if sbase != None and sbase not in source_list:
|
||||
source_list.append(sbase)
|
||||
for event in person.getAttibuteList:
|
||||
if private and event.getPrivacy():
|
||||
continue
|
||||
for source_ref in event.getSourceRefList():
|
||||
sbase = source_ref.getBase()
|
||||
if sbase != None and sbase not in source_list:
|
||||
source_list.append(sbase)
|
||||
for name in person.getNameList + [ person.getPrimaryName() ]:
|
||||
if private and event.getPrivacy():
|
||||
continue
|
||||
for source_ref in event.getSourceRefList():
|
||||
sbase = source_ref.getBase()
|
||||
if sbase != None and sbase not in source_list:
|
||||
source_list.append(sbase)
|
||||
@ -215,8 +235,14 @@ def add_familys_sources(family):
|
||||
for event in family.getEventList():
|
||||
if private and event.getPrivacy():
|
||||
continue
|
||||
source_ref = event.getSourceRef()
|
||||
if source_ref != None:
|
||||
for source_ref in event.getSourceRefList():
|
||||
sbase = source_ref.getBase()
|
||||
if sbase != None and sbase not in source_list:
|
||||
source_list.append(sbase)
|
||||
for attr in family.getAttributeList():
|
||||
if private and event.getPrivacy():
|
||||
continue
|
||||
for source_ref in event.getSourceRefList():
|
||||
sbase = source_ref.getBase()
|
||||
if sbase != None and sbase not in source_list:
|
||||
source_list.append(sbase)
|
||||
@ -273,8 +299,8 @@ def dump_event_stats(g,event):
|
||||
g.write("2 PLAC %s\n" % cnvtxt(event.getPlaceName()))
|
||||
if event.getNote() != "":
|
||||
write_long_text(g,"NOTE",2,event.getNote())
|
||||
if event.getSourceRef() != None:
|
||||
write_source_ref(g,2,event.getSourceRef())
|
||||
for srcref in event.getSourceRefList():
|
||||
write_source_ref(g,2,srcref)
|
||||
|
||||
def fmtline(text,limit,level):
|
||||
new_text = []
|
||||
@ -340,8 +366,8 @@ def write_person_name(g,name,nick):
|
||||
g.write('2 NICK %s\n' % nick)
|
||||
if name.getNote() != "":
|
||||
write_long_text(g,"NOTE",2,name.getNote())
|
||||
if name.getSourceRef() != None:
|
||||
write_source_ref(g,2,name.getSourceRef())
|
||||
for srcref in name.getSourceRefList():
|
||||
write_source_ref(g,2,srcref)
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -431,8 +457,8 @@ def write_person(g,person):
|
||||
g.write("2 PLAC %s\n" % cnvtxt(attr.getValue()))
|
||||
if attr.getNote() != "":
|
||||
write_long_text(g,"NOTE",2,attr.getNote())
|
||||
if attr.getSourceRef() != None:
|
||||
write_source_ref(g,2,attr.getSourceRef())
|
||||
for srcref in attr.getSourceRefList():
|
||||
write_source_ref(g,2,srclist)
|
||||
|
||||
for addr in person.getAddressList():
|
||||
if private and addr.getPrivacy():
|
||||
@ -448,8 +474,8 @@ def write_person(g,person):
|
||||
g.write("2 CTRY %s\n" % addr.getCountry())
|
||||
if addr.getNote() != "":
|
||||
write_long_text(g,"NOTE",2,addr.getNote())
|
||||
if addr.getSourceRef() != None:
|
||||
write_source_ref(g,2,addr.getSourceRef())
|
||||
for srcref in addr.getSourceRefList():
|
||||
write_source_ref(g,2,srcref)
|
||||
|
||||
family = person.getMainFamily()
|
||||
if family != None and family in family_list:
|
||||
|
@ -150,7 +150,7 @@ def get_detail_flags(obj):
|
||||
if Config.show_detail:
|
||||
if obj.getNote() != "":
|
||||
detail = "N"
|
||||
if obj.getSourceRef().getBase():
|
||||
if len(obj.getSourceRefList()) > 0:
|
||||
detail = detail + "S"
|
||||
if obj.getPrivacy():
|
||||
detail = detail + "P"
|
||||
@ -166,7 +166,7 @@ def get_detail_text(obj):
|
||||
details = "%s" % _("Note")
|
||||
else:
|
||||
details = ""
|
||||
if obj.getSourceRef().getBase() != None:
|
||||
if len(obj.getSourceRefList()) > 0:
|
||||
if details == "":
|
||||
details = _("Source")
|
||||
else:
|
||||
|
Loading…
x
Reference in New Issue
Block a user