// Note: Instrumentation statements are highlighted in green

#include "PersonalInfo.hpp"
#include "string_io.hpp"

///////////////////////////////////////////////////////////////////////////////
// PersonalInfo class
///////////////////////////////////////////////////////////////////////////////

// Visual Member Definition
VISIBILITY_START(PersonalInfo, "Personal Info", 5)
VVARIABLE(PersonalInfo, newRelationship, "New Relationship", 0, 0)
VBITSET_VARIABLE(PersonalInfo, gender, Gender, "Gender", 0, 0)
VVARIABLE(PersonalInfo, enableBirthday, "Enable birthday", 0, 0)
VVARIABLE(PersonalInfo, enableAnniversary, "Enable anniversary", 0, 0)
VTIMET_VARIABLE(PersonalInfo, birthday, "Birthday", 0, 0)
VTIMET_VARIABLE(PersonalInfo, anniversary, "Anniversary", 0, 0)
VVCONTAINER(PersonalInfo, relationshipList, "Relationship list", 0, 0)
VVITERATOR(PersonalInfo, relationshipIter, relationshipList, RelationshipList, "Relationship iterator", 0, 0)
VVOID_FUNCTION(PersonalInfo, add, "Add", 0, 0)
VVOID_FUNCTION(PersonalInfo, remove, "Remove", 0, 0)
VVOID_FUNCTION(PersonalInfo, clear, "Clear", 0, 0)
VISIBILITY_END

PersonalInfo::PersonalInfo(void)
{
  relationshipIter = relationshipList.begin();
}

PersonalInfo::PersonalInfo(const PersonalInfo & that)
{
  *this = that;
}

PersonalInfo::~PersonalInfo(void)
{
}

PersonalInfo & PersonalInfo::operator =(const PersonalInfo & that)
{
  if (this != &that) {
    newRelationship = that.newRelationship;
    gender = that.gender;
    enableBirthday = that.enableBirthday;
    enableAnniversary = that.enableAnniversary;
    birthday = that.birthday;
    anniversary = that.anniversary;
    relationshipList = that.relationshipList;
  relationshipIter = relationshipList.begin();
  }
  return *this;
}

std::ostream & operator<< (std::ostream& os, PersonalInfo & out_obj)
{
  os << out_obj.newRelationship << " ";
  os << out_obj.gender << " ";
  os << out_obj.enableBirthday << " ";
  os << out_obj.enableAnniversary << " ";
  os << out_obj.birthday << " ";
  os << out_obj.anniversary << " ";
  int item_size = out_obj.relationshipList.size();
  os << item_size << " ";
  RelationshipList::iterator c_iter = out_obj.relationshipList.begin();
  while (c_iter != out_obj.relationshipList.end()) {
    os << *c_iter;
    ++c_iter;
  }
  return os;
}

std::istream & operator>> (std::istream & is, PersonalInfo & in_obj)
{
  int item_size;
  is >> in_obj.newRelationship;
  is >> in_obj.gender;
  is >> in_obj.enableBirthday;
  is >> in_obj.enableAnniversary;
  is >> in_obj.birthday;
  is >> in_obj.anniversary;
  is >> item_size;
  if (item_size) {
    RelationshipList::value_type s_obj;
    while (item_size--) {
       is >> s_obj;
      in_obj.relationshipList.insert(in_obj.relationshipList.end(), s_obj);
    }
  }
  in_obj.relationshipIter = in_obj.relationshipList.begin();
  return is;
}

void PersonalInfo::add(void)
{
  relationshipList.push_back(newRelationship);
}

void PersonalInfo::remove(void)
{
  if (relationshipIter != relationshipList.end())
    relationshipIter = relationshipList.erase(relationshipIter);
}

void PersonalInfo::clear(void)
{
  newRelationship.clear();
  gender = UNSPECIFIED;
  enableBirthday = false;
  enableAnniversary = false;
  birthday = time(0);
  anniversary = time(0);
  relationshipList.clear();
  relationshipIter = relationshipList.begin();
}

void PersonalInfo::populateEditView(void)
{
  newRelationship.populateEditView();
  gender = MALE;
  enableBirthday = true;
  enableAnniversary = false;
  birthday = time(0);
  anniversary = time(0);
  RelationshipList::value_type c_object;
  c_object.populateEditView();
  relationshipList.insert(relationshipList.end(), c_object);
  relationshipList.insert(relationshipList.end(), c_object);
  relationshipList.insert(relationshipList.end(), c_object);
  relationshipIter = relationshipList.begin();
}

Copyright 2002-2007 Outerface Technologies, Inc.