| 47 |
GEDCOMParser::SpouseToFamilyLinks_t links = _parent_entity->getSpouseToFamilyLinks(); |
GEDCOMParser::SpouseToFamilyLinks_t links = _parent_entity->getSpouseToFamilyLinks(); |
| 48 |
GEDCOMParser::FamilyRecords_t families = get_document()->getFamilyRecords(); |
GEDCOMParser::FamilyRecords_t families = get_document()->getFamilyRecords(); |
| 49 |
GEDCOMParser::IndividualRecords_t individuals = get_document()->getIndividualRecords(); |
GEDCOMParser::IndividualRecords_t individuals = get_document()->getIndividualRecords(); |
|
std::string husband; |
|
|
std::string wife; |
|
|
|
|
| 50 |
for (GEDCOMParser::SpouseToFamilyLinks_t::const_iterator iter = links.begin(); iter != links.end(); iter++) |
for (GEDCOMParser::SpouseToFamilyLinks_t::const_iterator iter = links.begin(); iter != links.end(); iter++) |
| 51 |
{ |
{ |
| 52 |
std::string fams_id = (*iter)->getRawFamsXref(); |
std::string fams_id = (*iter)->getRawFamsXref(); |
| 53 |
GEDCOMParser::FamilyRecords_t::const_iterator fams_iter = families.find(fams_id); |
GEDCOMParser::FamilyRecord * familyrecord = 0; |
| 54 |
if (fams_iter != families.end()) |
GEDCOMParser::Event * union_event = 0; |
| 55 |
|
OneFamilyLinkHandler * familylink_handler = 0; |
| 56 |
|
if (ManageFamilyLinkHandler(fams_id, families, individuals, &familyrecord, &union_event, &familylink_handler)) |
| 57 |
{ |
{ |
| 58 |
std::string * union_date = new std::string(); |
OneFamilyLink * new_family_link = _mmi_spousetofamilylink->addFamilyLink(*familylink_handler); |
| 59 |
std::string * union_place = new std::string(); |
ManageFamilyLinkNote(new_family_link, (*iter).getPtr()); |
| 60 |
GEDCOMParser::FamilyEvents_t events = (*fams_iter).second->getFamilyEvents(); |
ManageFamilyRecordNote(new_family_link, familyrecord); |
| 61 |
GEDCOMParser::FamilyEvents_t::const_iterator union_event_iter = std::find(events.begin(), events.end(), GEDCOMParser::FamilyEvent::e_Marr); |
ManageUnionEventNote(new_family_link, union_event); |
|
GEDCOMParser::Event * union_event = 0; |
|
|
if (union_event_iter != events.end()) |
|
|
{ |
|
|
if (!(*union_event_iter)->getEvent().Null()) |
|
|
{ |
|
|
union_event = (*union_event_iter)->getEvent().getPtr(); |
|
|
delete union_date; |
|
|
union_date = new std::string(union_event->getDate()); |
|
|
if (!(union_event->getPlace().Null())) |
|
|
{ |
|
|
delete union_place; |
|
|
union_place = new std::string(union_event->getPlace()->getPlaceValue()); |
|
|
} |
|
|
} |
|
|
} |
|
|
std::string * husband_id = new std::string((*fams_iter).second->getHusb()); |
|
|
std::string * wife_id = new std::string((*fams_iter).second->getWife()); |
|
|
husband = get_name_individual(individuals, *husband_id); |
|
|
wife = get_name_individual(individuals, *wife_id); |
|
|
OneFamilyLinkHandler::SlotHandler_t * slot_husband = new OneFamilyLinkHandler::SlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::ButtonPressed), husband_id)); |
|
|
OneFamilyLinkHandler::SlotHandler_t * slot_wife = new OneFamilyLinkHandler::SlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::ButtonPressed), wife_id)); |
|
|
std::vector<std::string> children; |
|
|
std::vector < OneFamilyLinkHandler::SlotHandler_t * > slots_children; |
|
|
GEDCOMParser::ChildXrefs_t children_ids = (*fams_iter).second->getChilXrefs(); |
|
|
for (GEDCOMParser::ChildXrefs_t::const_iterator child_iter = children_ids.begin(); child_iter != children_ids.end(); child_iter++) |
|
|
{ |
|
|
std::string * child_id = new std::string(*child_iter); |
|
|
std::string child = get_name_individual(individuals, *child_id); |
|
|
children.push_back(child); |
|
|
OneFamilyLinkHandler::SlotHandler_t * slot_child = new OneFamilyLinkHandler::SlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::ButtonPressed), child_id)); |
|
|
slots_children.push_back(slot_child); |
|
|
} |
|
|
OneSpouseToFamilyLinkHandler new_handler(*union_date, *union_place, husband, wife, children, slot_husband, slot_wife, slots_children); |
|
|
OneFamilyLink * new_family_link; |
|
|
new_family_link = _mmi_spousetofamilylink->addFamilyLink(new_handler); |
|
|
|
|
|
Bakery::View<BakeryGateway::Document> * note_view = _view_factory->createView(new_family_link->getFamilyLinkNote()); |
|
|
subscribe_view(note_view); |
|
|
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::SpouseToFamilyLink > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::SpouseToFamilyLink > * > (note_view); |
|
|
tmp->set_parent_entity((*iter).getPtr()); |
|
|
|
|
|
BakeryGateway::ViewFamilyRecordNoteFactory familyrecord_note_factory; |
|
|
Bakery::View<BakeryGateway::Document> * family_note_view = familyrecord_note_factory.createView(new_family_link->getFamilyRecordNote()); |
|
|
subscribe_view(family_note_view); |
|
|
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::FamilyRecord > * tmp2 = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::FamilyRecord > * > (family_note_view); |
|
|
tmp2->set_parent_entity(fams_iter->second.getPtr()); |
|
|
if (union_event != 0) |
|
|
{ |
|
|
BakeryGateway::ViewIndividualEventNoteFactory union_event_note_factory; |
|
|
Bakery::View<BakeryGateway::Document> * union_event_note_view = union_event_note_factory.createView((static_cast<OneSpouseToFamilyLink *>(new_family_link))->getUnionEventNote()); |
|
|
subscribe_view(union_event_note_view); |
|
|
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * tmp3 = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * > (union_event_note_view); |
|
|
tmp3->set_parent_entity(union_event); |
|
|
} |
|
|
|
|
| 62 |
} |
} |
| 63 |
} |
} |
| 64 |
} |
} |
| 75 |
{ |
{ |
| 76 |
return; |
return; |
| 77 |
} |
} |
| 78 |
|
|
| 79 |
|
void BakeryGateway::ViewSpouseToFamilyLink::ManageUnionEventNote(OneFamilyLink * family_link, GEDCOMParser::Event * union_event) |
| 80 |
|
{ |
| 81 |
|
if (union_event != 0) |
| 82 |
|
{ |
| 83 |
|
BakeryGateway::ViewIndividualEventNoteFactory union_event_note_factory; |
| 84 |
|
Bakery::View<BakeryGateway::Document> * union_event_note_view = union_event_note_factory.createView((static_cast<OneSpouseToFamilyLink *>(family_link))->getUnionEventNote()); |
| 85 |
|
subscribe_view(union_event_note_view); |
| 86 |
|
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * > (union_event_note_view); |
| 87 |
|
tmp->set_parent_entity(union_event); |
| 88 |
|
} |
| 89 |
|
return; |
| 90 |
|
} |
| 91 |
|
|
| 92 |
|
void BakeryGateway::ViewSpouseToFamilyLink::ManageFamilyLinkNote(OneFamilyLink * family_link, GEDCOMParser::SpouseToFamilyLink * gedcom_family_link) |
| 93 |
|
{ |
| 94 |
|
Bakery::View<BakeryGateway::Document> * familylink_note_view = _view_factory->createView(family_link->getFamilyLinkNote()); |
| 95 |
|
subscribe_view(familylink_note_view); |
| 96 |
|
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::SpouseToFamilyLink > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::SpouseToFamilyLink > * > (familylink_note_view); |
| 97 |
|
tmp->set_parent_entity(gedcom_family_link); |
| 98 |
|
return; |
| 99 |
|
} |
| 100 |
|
|
| 101 |
|
bool BakeryGateway::ViewSpouseToFamilyLink::ManageFamilyLinkHandler(std::string const &family_record_id, GEDCOMParser::FamilyRecords_t const &families, GEDCOMParser::IndividualRecords_t const &individuals, GEDCOMParser::FamilyRecord ** familyrecord, GEDCOMParser::Event ** union_event, OneFamilyLinkHandler ** familylink_handler) |
| 102 |
|
{ |
| 103 |
|
bool res; |
| 104 |
|
|
| 105 |
|
GEDCOMParser::FamilyRecords_t::const_iterator family_iter = families.find(family_record_id); |
| 106 |
|
if (family_iter != families.end()) |
| 107 |
|
{ |
| 108 |
|
res = true; |
| 109 |
|
*familyrecord = (*family_iter).second.getPtr(); |
| 110 |
|
std::string * union_date = new std::string(); |
| 111 |
|
std::string * union_place = new std::string(); |
| 112 |
|
GEDCOMParser::FamilyEvents_t events = (*family_iter).second->getFamilyEvents(); |
| 113 |
|
GEDCOMParser::FamilyEvents_t::const_iterator union_event_iter = std::find(events.begin(), events.end(), GEDCOMParser::FamilyEvent::e_Marr); |
| 114 |
|
GEDCOMParser::Event * union_event_tmp = 0; |
| 115 |
|
if (union_event_iter != events.end()) |
| 116 |
|
{ |
| 117 |
|
if (!(*union_event_iter)->getEvent().Null()) |
| 118 |
|
{ |
| 119 |
|
union_event_tmp = (*union_event_iter)->getEvent().getPtr(); |
| 120 |
|
delete union_date; |
| 121 |
|
union_date = new std::string(union_event_tmp->getDate()); |
| 122 |
|
if (!(union_event_tmp->getPlace().Null())) |
| 123 |
|
{ |
| 124 |
|
delete union_place; |
| 125 |
|
union_place = new std::string(union_event_tmp->getPlace()->getPlaceValue()); |
| 126 |
|
} |
| 127 |
|
} |
| 128 |
|
*union_event = union_event_tmp; |
| 129 |
|
} |
| 130 |
|
std::string * husband_id = new std::string((*family_iter).second->getHusb()); |
| 131 |
|
std::string * wife_id = new std::string((*family_iter).second->getWife()); |
| 132 |
|
std::string husband = get_name_individual(individuals, *husband_id); |
| 133 |
|
std::string wife = get_name_individual(individuals, *wife_id); |
| 134 |
|
OneFamilyLinkHandler::SlotHandler_t * slot_husband = getSlotHandler(husband_id); |
| 135 |
|
OneFamilyLinkHandler::SlotHandler_t * slot_wife = getSlotHandler(wife_id); |
| 136 |
|
std::vector<std::string> children; |
| 137 |
|
std::vector < OneFamilyLinkHandler::SlotHandler_t * > slots_children; |
| 138 |
|
GEDCOMParser::ChildXrefs_t children_ids = (*family_iter).second->getChilXrefs(); |
| 139 |
|
for (GEDCOMParser::ChildXrefs_t::const_iterator child_iter = children_ids.begin(); child_iter != children_ids.end(); child_iter++) |
| 140 |
|
{ |
| 141 |
|
std::string * child_id = new std::string(*child_iter); |
| 142 |
|
std::string child = get_name_individual(individuals, *child_id); |
| 143 |
|
children.push_back(child); |
| 144 |
|
OneFamilyLinkHandler::SlotHandler_t * slot_child = new OneFamilyLinkHandler::SlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::ButtonPressed), child_id)); |
| 145 |
|
slots_children.push_back(slot_child); |
| 146 |
|
} |
| 147 |
|
OneFamilyLinkHandler * familylink_handler_tmp = new OneSpouseToFamilyLinkHandler(*union_date, *union_place, husband, wife, children, slot_husband, slot_wife, slots_children); |
| 148 |
|
*familylink_handler = familylink_handler_tmp; |
| 149 |
|
} |
| 150 |
|
else |
| 151 |
|
{ |
| 152 |
|
res = false; |
| 153 |
|
} |
| 154 |
|
return res; |
| 155 |
|
} |