#include "BakeryGateway/ViewSpouseToFamilyLink.hh" #include "BakeryGateway/ViewFamilyRecordNoteFactory.hh" #include "BakeryGateway/ViewIndividualEventNoteFactory.hh" BakeryGateway::ViewSpouseToFamilyLink::ViewSpouseToFamilyLink(MMISpouseToFamilyLink * mmi) : _mmi_spousetofamilylink(mmi) { return; } BakeryGateway::ViewSpouseToFamilyLink::~ViewSpouseToFamilyLink(void) { return; } void BakeryGateway::ViewSpouseToFamilyLink::load_from_document(void) { _mmi_spousetofamilylink->Clear(); delete_subscribed_views(); if ((_parent_entity != 0) && (get_document() != 0)) { GEDCOMParser::SpouseToFamilyLinks_t links = _parent_entity->getSpouseToFamilyLinks(); GEDCOMParser::FamilyRecords_t families = get_document()->getFamilyRecords(); GEDCOMParser::IndividualRecords_t individuals = get_document()->getIndividualRecords(); std::string husband; std::string wife; for (GEDCOMParser::SpouseToFamilyLinks_t::const_iterator iter = links.begin(); iter != links.end(); iter++) { std::string fams_id = (*iter)->getRawFamsXref(); GEDCOMParser::FamilyRecords_t::const_iterator fams_iter = families.find(fams_id); if (fams_iter != families.end()) { std::string * union_date = new std::string(); std::string * union_place = new std::string(); GEDCOMParser::FamilyEvents_t events = (*fams_iter).second->getFamilyEvents(); GEDCOMParser::FamilyEvents_t::const_iterator union_event_iter = std::find(events.begin(), events.end(), GEDCOMParser::FamilyEvent::e_Marr); 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); SigC::Slot0 * slot_husband = new SigC::Slot0(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::Navigate), husband_id)); SigC::Slot0 * slot_wife = new SigC::Slot0(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::Navigate), wife_id)); std::vector children; std::vector < SigC::Slot0 * > slot_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); SigC::Slot0 * slot_child = new SigC::Slot0(SigC::bind(SigC::slot(this, &BakeryGateway::ViewSpouseToFamilyLink::Navigate), child_id)); slot_children.push_back(slot_child); } OneSpouseToFamilyLink * new_family_link = _mmi_spousetofamilylink->addSpouseToFamilyLink(*union_date, *union_place, husband, wife, children, slot_husband, slot_wife, slot_children); Bakery::View * note_view = _view_factory->createView(new_family_link->OneSpouseToFamilyLinkNote); 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 * family_note_view = familyrecord_note_factory.createView(new_family_link->MMIUnionFamilyNote); 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 * union_event_note_view = union_event_note_factory.createView(new_family_link->MMIUnionNote); 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); } } } } return; } void BakeryGateway::ViewSpouseToFamilyLink::Navigate(std::string const * key) { BakeryExtras::View_Navigator::Navigate(*key); return; } std::string BakeryGateway::ViewSpouseToFamilyLink::get_name_individual(GEDCOMParser::IndividualRecords_t const &individuals, std::string const &individual_id) const { std::string * individual_name = new std::string(); GEDCOMParser::IndividualRecords_t::const_iterator iter = individuals.find(individual_id); if (iter != individuals.end()) { if ((*iter).second->getPersonalNames().size() > 0) { if (!((*iter).second->getPersonalNames()[0]).Null()) { delete individual_name; individual_name = new std::string ((*iter).second->getPersonalNames()[0]->getName()); } } } return *individual_name; }