Faster GEDCOM imports, source lists
svn: r448
This commit is contained in:
		| @@ -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): | ||||
|   | ||||
							
								
								
									
										118
									
								
								src/Sources.py
									
									
									
									
									
								
							
							
						
						
									
										118
									
								
								src/Sources.py
									
									
									
									
									
								
							| @@ -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 = {} | ||||
|   | ||||
							
								
								
									
										140
									
								
								src/dialog.glade
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								src/dialog.glade
									
									
									
									
									
								
							| @@ -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> | ||||
|   | ||||
							
								
								
									
										245
									
								
								src/gramps.glade
									
									
									
									
									
								
							
							
						
						
									
										245
									
								
								src/gramps.glade
									
									
									
									
									
								
							| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user