// Note: Instrumentation statements are highlighted in green

#include "EmailAddresses.hpp"
#include "string_io.hpp"

///////////////////////////////////////////////////////////////////////////////
// EmailAddresses class
///////////////////////////////////////////////////////////////////////////////

// Visual Member Definition
VISIBILITY_START(EmailAddresses, "Email Addresss", 7)
VVARIABLE(EmailAddresses, newAddress, "New Address", 0, 0)
VVCONTAINER(EmailAddresses, emailAddressList, "Address list", 0, 0)
VVITERATOR(EmailAddresses, emailAddressIter, emailAddressList, EmailAddressList, "Address iterator", 0, 0)
VVOID_FUNCTION(EmailAddresses, add, "Add", 0, 0)
VVOID_FUNCTION(EmailAddresses, remove, "Remove", 0, 0)
VVOID_FUNCTION(EmailAddresses, setDefault, "Set as default", 0, 0)
VCHARPTR_FUNCTION(EmailAddresses, getDefaultEmailAddress, "Default E-Mail Address", 0, 0)
VVOID_FUNCTION(EmailAddresses, clear, "Clear", 0, 0)
VISIBILITY_END

EmailAddresses::EmailAddresses(void)
{
  emailAddressIter = emailAddressList.begin();
}

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

EmailAddresses::~EmailAddresses(void)
{
}

EmailAddresses & EmailAddresses::operator =(const EmailAddresses & that)
{
  if (this != &that) {
    newAddress = that.newAddress;
    emailAddressList = that.emailAddressList;
  emailAddressIter = emailAddressList.begin();
  }
  return *this;
}

std::ostream & operator<< (std::ostream& os, EmailAddresses & out_obj)
{
  os << out_obj.newAddress << " ";
  os << out_obj.emailAddressList.size() << " ";
  EmailAddressList::iterator c_iter = out_obj.emailAddressList.begin();
  while (c_iter != out_obj.emailAddressList.end()) {
    os << *c_iter;
    ++c_iter;
  }
  return os;
}

std::istream & operator>> (std::istream & is, EmailAddresses & in_obj)
{
  int item_size;
  is >> in_obj.newAddress;
  is >> item_size;
  if (item_size) {
    EmailAddressList::value_type s_obj;
    while (item_size--) {
       is >> s_obj;
      in_obj.emailAddressList.insert(in_obj.emailAddressList.end(), s_obj);
    }
  }
  in_obj.emailAddressIter = in_obj.emailAddressList.begin();
  return is;
}

void EmailAddresses::add(void)
{
  emailAddressList.push_back(newAddress);
}

void EmailAddresses::remove(void)
{
  if (emailAddressIter != emailAddressList.end())
    emailAddressIter = emailAddressList.erase(emailAddressIter);
}

void EmailAddresses::setDefault(void)
{
  if (emailAddressIter != emailAddressList.end()) {
    EmailAddressList::iterator c_iter = emailAddressList.begin();
    while (c_iter != emailAddressList.end()) {
      if (c_iter != emailAddressIter)
        (*c_iter).isDefault = false;
      else
        (*c_iter).isDefault = true;
      ++c_iter;
    }
  }
}

char * EmailAddresses::getDefaultEmailAddress(void)
{
  EmailAddressList::iterator c_iter = emailAddressList.begin();
  while (c_iter != emailAddressList.end()) {
    if ((*c_iter).isDefault)
      return const_cast<char *>((*c_iter).emailAddress.c_str());
    ++c_iter;
  }
  return NULL;
}

void EmailAddresses::clear(void)
{
  newAddress.clear();
  emailAddressList.clear();
  emailAddressIter = emailAddressList.begin();
}

void EmailAddresses::populateEditView(void)
{
  newAddress.populateEditView();
  EmailAddressList::value_type c_object;
  c_object.populateEditView();
  emailAddressList.insert(emailAddressList.end(), c_object);
  emailAddressList.insert(emailAddressList.end(), c_object);
  emailAddressList.insert(emailAddressList.end(), c_object);
  emailAddressIter = emailAddressList.begin();
}

Copyright 2002-2007 Outerface Technologies, Inc.