| 28 |
#include "BakeryExtras/View_RunTimeSubscriber.hh" |
#include "BakeryExtras/View_RunTimeSubscriber.hh" |
| 29 |
#include "BakeryGateway/Document.hh" |
#include "BakeryGateway/Document.hh" |
| 30 |
#include "OneFamilyLinkHandler.hh" |
#include "OneFamilyLinkHandler.hh" |
| 31 |
|
#include "FamilyMemberHandler.hh" |
| 32 |
#include "OneFamilyLink.hh" |
#include "OneFamilyLink.hh" |
| 33 |
#include "widgets/WidgetNote.hh" |
#include "widgets/WidgetNote.hh" |
| 34 |
#include <sigc++/object.h> |
#include <sigc++/object.h> |
| 46 |
#define BUTTON_RIGHT 3 |
#define BUTTON_RIGHT 3 |
| 47 |
|
|
| 48 |
namespace BakeryGateway { |
namespace BakeryGateway { |
| 49 |
|
typedef std::vector < SmartPtr < GEDCOMParser::Predicates::PredicateIndividualRecords > > IndividualRecordsPredicates_t; |
| 50 |
|
|
| 51 |
template < class T_FamilyLink > |
template < class T_FamilyLink > |
| 52 |
class ViewFamilyLink : public BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::IndividualRecord >, |
class ViewFamilyLink : public BakeryExtras::View_Linked < BakeryGateway::Document, GEDCOMParser::IndividualRecord >, |
| 53 |
public BakeryExtras::View_Navigator < BakeryGateway::Document, std::string >, |
public BakeryExtras::View_Navigator < BakeryGateway::Document, std::string >, |
| 59 |
_during_load(false) |
_during_load(false) |
| 60 |
{}; |
{}; |
| 61 |
protected: |
protected: |
| 62 |
OneFamilyLinkHandler::PopdownLinkEditionReturnHandler_t RightButtonPressed(GdkEventButton * event, std::string const * src_key, SmartPtr < GEDCOMParser::Predicates::PredicateIndividualRecords > * predicate) |
FamilyMemberHandler::PopdownLinkEditionReturnHandler_t RightButtonPressed(GdkEventButton * event, GEDCOMParser::FamilyRecord * const family_record, IndividualRecordsPredicates_t const * const predicates) |
| 63 |
{ |
{ |
|
std::cerr << "entering RightButtonPressed " << std::endl; |
|
| 64 |
if (event->button == BUTTON_RIGHT) |
if (event->button == BUTTON_RIGHT) |
| 65 |
{ |
{ |
| 66 |
MMIFamilyLink * mmi_family_link = getMMIFamilyLink(); |
MMIFamilyLink * mmi_family_link = getMMIFamilyLink(); |
| 69 |
GEDCOMParser::IndividualRecords_t individus = lineage->getIndividualRecords(); |
GEDCOMParser::IndividualRecords_t individus = lineage->getIndividualRecords(); |
| 70 |
LinkEditorMenu_t menus; |
LinkEditorMenu_t menus; |
| 71 |
MenuItems_t menus_items; |
MenuItems_t menus_items; |
| 72 |
menus_items.push_back(MenuItem_t(_("New"),"-1")); |
std::string * menu_id = 0; |
| 73 |
if (!(*predicate).Null()) |
menu_id = new std::string("-1"); |
| 74 |
|
menus_items.push_back(MenuItem_t(_("New"),SigC::bind(SigC::bind(SigC::slot(*this, &ViewFamilyLink::family_edited), family_record), menu_id))); |
| 75 |
|
for (IndividualRecordsPredicates_t::const_iterator |
| 76 |
|
predicate_iter = predicates->begin(); |
| 77 |
|
predicate_iter != predicates->end(); |
| 78 |
|
predicate_iter++) |
| 79 |
{ |
{ |
| 80 |
std::cerr << "PREDICATE != 0" << std::endl; |
if (!(*predicate_iter).Null()) |
|
GEDCOMParser::Predicates::PredicateIndividualRecordsAdapter adapter((*predicate).getPtr()); |
|
|
std::cerr << "adapter OK" << std::endl; |
|
|
GEDCOMParser::IndividualRecords_t::iterator iter = find_if(individus.begin(), individus.end(), adapter); |
|
|
do |
|
| 81 |
{ |
{ |
| 82 |
std::cerr << "iter OK" << std::endl; |
GEDCOMParser::Predicates::PredicateIndividualRecordsAdapter adapter((*predicate_iter).getPtr()); |
| 83 |
if (iter != individus.end()) |
GEDCOMParser::IndividualRecords_t::iterator individu_iter = find_if(individus.begin(), individus.end(), adapter); |
| 84 |
|
do |
| 85 |
{ |
{ |
| 86 |
menus_items.push_back(MenuItem_t((*iter).second->getPersonalNames()[0]->getName(),(*iter).second->getId())); |
if (individu_iter != individus.end()) |
| 87 |
std::cerr << "menus_item.push_back OK" << std::endl; |
{ |
| 88 |
iter = find_if(++iter, individus.end(), adapter); |
menu_id = new std::string((*individu_iter).second->getId()); |
| 89 |
} |
LinkEditionSlotHandler_t menu_slot(SigC::bind(SigC::bind(SigC::slot(*this, &ViewFamilyLink::family_edited), family_record), menu_id)); |
| 90 |
|
menus_items.push_back(MenuItem_t((*individu_iter).second->getPersonalNames()[0]->getName(), menu_slot)); |
| 91 |
|
individu_iter = find_if(++individu_iter, individus.end(), adapter); |
| 92 |
|
} |
| 93 |
} |
} |
| 94 |
while (iter != individus.end()); |
while (individu_iter != individus.end()); |
| 95 |
|
} |
| 96 |
|
menus.push_back(menus_items); |
| 97 |
|
menus_items.clear(); |
| 98 |
} |
} |
|
std::cerr << "while OK" << std::endl; |
|
|
menus.push_back(menus_items); |
|
|
std::cerr << "menus.push_back OK" << std::endl; |
|
|
menus_items.clear(); |
|
|
menus_items.push_back(MenuItem_t("Thierry","3")); |
|
|
menus_items.push_back(MenuItem_t("Mathieu","4")); |
|
|
menus.push_back(menus_items); |
|
|
menus.push_back(menus_items); |
|
| 99 |
one_family_link->PopupLinkEditorMenu(menus); |
one_family_link->PopupLinkEditorMenu(menus); |
| 100 |
} |
} |
| 101 |
return 1; |
return 1; |
| 102 |
}; |
}; |
| 103 |
|
|
| 104 |
OneFamilyLinkHandler::NavigationReturnHandler_t LeftButtonPressed(GdkEventButton * event, std::string const * target_key) |
FamilyMemberHandler::NavigationReturnHandler_t LeftButtonPressed(GdkEventButton * event, std::string const * target_key) |
| 105 |
{ |
{ |
| 106 |
|
|
| 107 |
bool new_win = false; |
bool new_win = false; |
| 137 |
return *individual_name; |
return *individual_name; |
| 138 |
}; |
}; |
| 139 |
|
|
| 140 |
OneFamilyLinkHandler::NavigationSlotHandler_t * getNavigationSlotHandler(std::string * target_individu_id) |
FamilyMemberHandler::NavigationSlotHandler_t * getNavigationSlotHandler(std::string const * const target_individu_id) |
| 141 |
{ |
{ |
| 142 |
return new OneFamilyLinkHandler::NavigationSlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewFamilyLink < T_FamilyLink > ::LeftButtonPressed), target_individu_id)); |
return new FamilyMemberHandler::NavigationSlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewFamilyLink < T_FamilyLink > ::LeftButtonPressed), target_individu_id)); |
| 143 |
}; |
}; |
| 144 |
|
|
| 145 |
void ManageFamilyRecordNote(OneFamilyLink * family_link, GEDCOMParser::FamilyRecord * family_record) |
void ManageFamilyRecordNote(OneFamilyLink * family_link, GEDCOMParser::FamilyRecord * family_record) |
| 153 |
}; |
}; |
| 154 |
|
|
| 155 |
|
|
| 156 |
virtual OneFamilyLinkHandler::PopdownLinkEditionSlotHandler_t * getPopdownLinkEditionSlotHandler(std::string * src_individu_id, SmartPtr < GEDCOMParser::Predicates::PredicateIndividualRecords > * predicate) |
virtual FamilyMemberHandler::PopdownLinkEditionSlotHandler_t * getPopdownLinkEditionSlotHandler(GEDCOMParser::FamilyRecord * const family_record, IndividualRecordsPredicates_t const * const predicates) |
| 157 |
{ |
{ |
| 158 |
return new OneFamilyLinkHandler::PopdownLinkEditionSlotHandler_t(SigC::bind(SigC::slot(this, &BakeryGateway::ViewFamilyLink < T_FamilyLink > ::RightButtonPressed), src_individu_id, predicate)); |
return new FamilyMemberHandler::PopdownLinkEditionSlotHandler_t(SigC::bind(SigC::bind(SigC::slot(this, &BakeryGateway::ViewFamilyLink < T_FamilyLink > ::RightButtonPressed), predicates), family_record)); |
| 159 |
}; |
}; |
| 160 |
|
|
| 161 |
bool _during_load; |
bool _during_load; |
| 162 |
virtual void family_added(void) = 0; |
virtual void family_added(void) = 0; |
| 163 |
virtual void family_deleted(int family_index) = 0; |
virtual void family_deleted(int family_index) = 0; |
| 164 |
virtual void family_edited(std::string id) = 0; |
virtual void family_edited(std::string * id, GEDCOMParser::FamilyRecord * const record) = 0; |
| 165 |
virtual MMIFamilyLink * getMMIFamilyLink(void) const = 0; |
virtual MMIFamilyLink * getMMIFamilyLink(void) const = 0; |
| 166 |
}; |
}; |
| 167 |
}; |
}; |