/[ghosts]/ghosts/gedcomviewer/src/BakeryGateway/ViewIndividualEvents.cpp
ViewVC logotype

Diff of /ghosts/gedcomviewer/src/BakeryGateway/ViewIndividualEvents.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by cpcp, Tue Nov 12 21:25:22 2002 UTC revision 1.3 by cpcp, Sun Feb 9 20:13:24 2003 UTC
# Line 22  Line 22 
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    
# Line 32  BakeryGateway::ViewIndividualEvents::~Vi Line 35  BakeryGateway::ViewIndividualEvents::~Vi
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();
# Line 41  void BakeryGateway::ViewIndividualEvents Line 80  void BakeryGateway::ViewIndividualEvents
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    }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26