| 22 |
#include "BakeryGateway/ViewIndividualEvents.hh" |
#include "BakeryGateway/ViewIndividualEvents.hh" |
| 23 |
|
|
| 24 |
BakeryGateway::ViewIndividualEvents::ViewIndividualEvents(MMIIndividualEvents * mmi) : |
BakeryGateway::ViewIndividualEvents::ViewIndividualEvents(MMIIndividualEvents * mmi) : |
| 25 |
_mmi_individual_events(mmi) |
_mmi_individual_events(mmi), |
| 26 |
|
_during_load(false) |
| 27 |
{ |
{ |
| 28 |
|
_mmi_individual_events->getBirthDateWidget()->changed.connect(SigC::slot(this, &ViewIndividualEvents::on_BirthDate_changed)); |
| 29 |
|
_mmi_individual_events->getDeathDateWidget()->changed.connect(SigC::slot(this, &ViewIndividualEvents::on_DeathDate_changed)); |
| 30 |
return; |
return; |
| 31 |
} |
} |
| 32 |
|
|
| 35 |
return; |
return; |
| 36 |
} |
} |
| 37 |
|
|
| 38 |
|
void BakeryGateway::ViewIndividualEvents::loadEventList(void) |
| 39 |
|
{ |
| 40 |
|
// handling of events list |
| 41 |
|
_mmi_individual_events->clearEvents(); |
| 42 |
|
std::vector<std::string> * event_row = 0; |
| 43 |
|
std::string type; |
| 44 |
|
GEDCOMParser::IndividualEvents_t const & events = _parent_entity->getIndividualEvents(); |
| 45 |
|
for (GEDCOMParser::IndividualEvents_t::const_iterator iter = events.begin(); iter != events.end(); iter++) |
| 46 |
|
{ |
| 47 |
|
event_row = new std::vector<std::string>; |
| 48 |
|
type = (*iter)->getType(); |
| 49 |
|
event_row->push_back(type); |
| 50 |
|
if (!(*iter)->getEvent().Null()) |
| 51 |
|
{ |
| 52 |
|
event_row->push_back((*iter)->getEvent()->getDate()); |
| 53 |
|
if (!(*iter)->getEvent()->getPlace().Null()) |
| 54 |
|
{ |
| 55 |
|
event_row->push_back((*iter)->getEvent()->getPlace()->getPlaceValue()); |
| 56 |
|
} |
| 57 |
|
else |
| 58 |
|
{ |
| 59 |
|
event_row->push_back(""); |
| 60 |
|
} |
| 61 |
|
} |
| 62 |
|
else |
| 63 |
|
{ |
| 64 |
|
event_row->push_back(""); |
| 65 |
|
event_row->push_back(""); |
| 66 |
|
} |
| 67 |
|
_mmi_individual_events->addEvent(*event_row); |
| 68 |
|
delete event_row; event_row = 0; |
| 69 |
|
} |
| 70 |
|
return; |
| 71 |
|
} |
| 72 |
|
|
| 73 |
void BakeryGateway::ViewIndividualEvents::load_from_document(void) |
void BakeryGateway::ViewIndividualEvents::load_from_document(void) |
| 74 |
{ |
{ |
| 75 |
|
_during_load = true; |
| 76 |
if (_parent_entity != 0) |
if (_parent_entity != 0) |
| 77 |
{ |
{ |
| 78 |
delete_subscribed_views(); |
delete_subscribed_views(); |
| 80 |
_mmi_individual_events->setBirthDate(""); |
_mmi_individual_events->setBirthDate(""); |
| 81 |
_mmi_individual_events->setBirthPlace(""); |
_mmi_individual_events->setBirthPlace(""); |
| 82 |
_mmi_individual_events->MMIBirthNote->clear(); |
_mmi_individual_events->MMIBirthNote->clear(); |
| 83 |
GEDCOMParser::IndividualEvents_t events = _parent_entity->getIndividualEvents(); |
GEDCOMParser::IndividualEvent * const birth_event = _parent_entity->getBirth(); |
| 84 |
|
if (birth_event != 0) |
|
GEDCOMParser::IndividualEvents_t::const_iterator iter = |
|
|
std::find(events.begin(), |
|
|
events.end(), |
|
|
GEDCOMParser::IndividualEvent::e_Birt); |
|
|
if (iter != events.end()) |
|
| 85 |
{ |
{ |
| 86 |
if (!(*iter)->getEvent().Null()) |
if (!birth_event->getEvent().Null()) |
| 87 |
{ |
{ |
| 88 |
_mmi_individual_events->setBirthDate((*iter)->getEvent()->getDate()); |
_mmi_individual_events->setBirthDate(birth_event->getEvent()->getDate()); |
| 89 |
if (!(*iter)->getEvent()->getPlace().Null()) |
if (!birth_event->getEvent()->getPlace().Null()) |
| 90 |
_mmi_individual_events->setBirthPlace((*iter)->getEvent()->getPlace()->getPlaceValue()); |
_mmi_individual_events->setBirthPlace(birth_event->getEvent()->getPlace()->getPlaceValue()); |
| 91 |
Bakery::View<BakeryGateway::Document> * note_birth_view = _view_factory->createView(_mmi_individual_events->MMIBirthNote); |
Bakery::View<BakeryGateway::Document> * note_birth_view = _view_factory->createView(_mmi_individual_events->MMIBirthNote); |
| 92 |
subscribe_view(note_birth_view); |
subscribe_view(note_birth_view); |
| 93 |
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * > (note_birth_view); |
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * > (note_birth_view); |
| 94 |
tmp->set_parent_entity((*iter)->getEvent().getPtr()); |
tmp->set_parent_entity(birth_event->getEvent().getPtr()); |
| 95 |
} |
} |
| 96 |
} |
} |
| 97 |
// handling of death |
// handling of death |
| 98 |
_mmi_individual_events->setDeathDate(""); |
_mmi_individual_events->setDeathDate(""); |
| 99 |
_mmi_individual_events->setDeathPlace(""); |
_mmi_individual_events->setDeathPlace(""); |
| 100 |
_mmi_individual_events->MMIDeathNote->clear(); |
_mmi_individual_events->MMIDeathNote->clear(); |
| 101 |
iter = |
GEDCOMParser::IndividualEvent * const death_event = _parent_entity->getDeath(); |
| 102 |
std::find(events.begin(), |
if (death_event != 0) |
|
events.end(), |
|
|
GEDCOMParser::IndividualEvent::e_Deat); |
|
|
if (iter != events.end()) |
|
| 103 |
{ |
{ |
| 104 |
if (!(*iter)->getEvent().Null()) |
if (!death_event->getEvent().Null()) |
| 105 |
{ |
{ |
| 106 |
_mmi_individual_events->setDeathDate((*iter)->getEvent()->getDate()); |
_mmi_individual_events->setDeathDate(death_event->getEvent()->getDate()); |
| 107 |
if (!(*iter)->getEvent()->getPlace().Null()) |
if (!death_event->getEvent()->getPlace().Null()) |
| 108 |
_mmi_individual_events->setDeathPlace((*iter)->getEvent()->getPlace()->getPlaceValue()); |
_mmi_individual_events->setDeathPlace(death_event->getEvent()->getPlace()->getPlaceValue()); |
| 109 |
Bakery::View<BakeryGateway::Document> * note_death_view = _view_factory->createView(_mmi_individual_events->MMIDeathNote); |
Bakery::View<BakeryGateway::Document> * note_death_view = _view_factory->createView(_mmi_individual_events->MMIDeathNote); |
| 110 |
subscribe_view(note_death_view); |
subscribe_view(note_death_view); |
| 111 |
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * > (note_death_view); |
BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * tmp = dynamic_cast < BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::Event > * > (note_death_view); |
| 112 |
tmp->set_parent_entity((*iter)->getEvent().getPtr()); |
tmp->set_parent_entity(death_event->getEvent().getPtr()); |
| 113 |
} |
} |
| 114 |
} |
} |
| 115 |
// handling of events list |
loadEventList(); |
| 116 |
_mmi_individual_events->clearEvents(); |
} |
| 117 |
std::vector<std::string> * event_row = 0; |
_during_load = false; |
| 118 |
std::string type; |
return; |
| 119 |
for (iter = events.begin(); iter != events.end(); iter++) |
} |
| 120 |
{ |
|
| 121 |
event_row = new std::vector<std::string>; |
void BakeryGateway::ViewIndividualEvents::getEventsChanges(GEDCOMParser::IndividualEvent const * const event, std::string * const old_value, bool * const event_exists, bool * const eventdetail_exists) const |
| 122 |
type = (*iter)->getType(); |
{ |
| 123 |
event_row->push_back(type); |
*old_value = ""; |
| 124 |
if (!(*iter)->getEvent().Null()) |
if (event != 0) |
| 125 |
{ |
{ |
| 126 |
event_row->push_back((*iter)->getEvent()->getDate()); |
if (event->getEvent() != 0) |
| 127 |
if (!(*iter)->getEvent()->getPlace().Null()) |
{ |
| 128 |
{ |
*old_value = event->getEvent()->getDate(); |
| 129 |
event_row->push_back((*iter)->getEvent()->getPlace()->getPlaceValue()); |
} |
| 130 |
} |
else |
| 131 |
else |
{ |
| 132 |
{ |
*eventdetail_exists = false; |
| 133 |
event_row->push_back(""); |
} |
| 134 |
} |
} |
| 135 |
} |
else |
| 136 |
else |
{ |
| 137 |
{ |
*event_exists = false; |
| 138 |
event_row->push_back(""); |
*eventdetail_exists = false; |
| 139 |
event_row->push_back(""); |
} |
| 140 |
} |
return; |
| 141 |
_mmi_individual_events->addEvent(*event_row); |
} |
| 142 |
delete event_row; event_row = 0; |
|
| 143 |
|
void BakeryGateway::ViewIndividualEvents::setEventsChanges(std::string const &new_value, std::string const &old_value, bool event_flag, bool eventdetail_flag, GEDCOMParser::IndividualEvent::enumIndividualEvents event_type) |
| 144 |
|
{ |
| 145 |
|
if (new_value != old_value) |
| 146 |
|
{ |
| 147 |
|
GEDCOMParser::IndividualEvent * event = 0; |
| 148 |
|
GEDCOMParser::Event * event_detail = 0; |
| 149 |
|
if (event_flag == false) |
| 150 |
|
{ |
| 151 |
|
event = _parent_entity->addIndividualEvent(); |
| 152 |
|
event->setType(event_type); |
| 153 |
|
} |
| 154 |
|
else |
| 155 |
|
{ |
| 156 |
|
event = _parent_entity->getEvent(event_type); |
| 157 |
|
} |
| 158 |
|
if (eventdetail_flag == false) |
| 159 |
|
{ |
| 160 |
|
event_detail = new GEDCOMParser::Event(); |
| 161 |
|
} |
| 162 |
|
else |
| 163 |
|
{ |
| 164 |
|
event_detail = event->getEvent().getPtr(); |
| 165 |
|
} |
| 166 |
|
event_detail->setDate(new_value); |
| 167 |
|
if (eventdetail_flag == false) |
| 168 |
|
{ |
| 169 |
|
event->setEvent(event_detail); |
| 170 |
} |
} |
| 171 |
} |
} |
| 172 |
return; |
return; |
| 173 |
} |
} |
| 174 |
|
|
| 175 |
|
void BakeryGateway::ViewIndividualEvents::save_to_document(void) |
| 176 |
|
{ |
| 177 |
|
bool birth_eventdetail_flag = true; |
| 178 |
|
bool birth_flag = true; |
| 179 |
|
bool death_eventdetail_flag = true; |
| 180 |
|
bool death_flag = true; |
| 181 |
|
|
| 182 |
|
if (! _during_load) |
| 183 |
|
{ |
| 184 |
|
std::string new_birth_date = _mmi_individual_events->getBirthDate(); |
| 185 |
|
std::string old_birth_date; |
| 186 |
|
std::string new_death_date = _mmi_individual_events->getDeathDate(); |
| 187 |
|
std::string old_death_date; |
| 188 |
|
getEventsChanges(_parent_entity->getBirth(), &old_birth_date, &birth_flag, &birth_eventdetail_flag); |
| 189 |
|
getEventsChanges(_parent_entity->getDeath(), &old_death_date, &death_flag, &death_eventdetail_flag); |
| 190 |
|
setEventsChanges(new_birth_date, old_birth_date, birth_flag, birth_eventdetail_flag, GEDCOMParser::IndividualEvent::e_Birt); |
| 191 |
|
setEventsChanges(new_death_date, old_death_date, death_flag, death_eventdetail_flag, GEDCOMParser::IndividualEvent::e_Deat); |
| 192 |
|
loadEventList(); |
| 193 |
|
} |
| 194 |
|
return; |
| 195 |
|
} |
| 196 |
|
|
| 197 |
|
void BakeryGateway::ViewIndividualEvents::on_BirthDate_changed(void) |
| 198 |
|
{ |
| 199 |
|
save_to_document(); |
| 200 |
|
return; |
| 201 |
|
} |
| 202 |
|
|
| 203 |
|
void BakeryGateway::ViewIndividualEvents::on_DeathDate_changed(void) |
| 204 |
|
{ |
| 205 |
|
save_to_document(); |
| 206 |
|
return; |
| 207 |
|
} |