areaeditor/
// ObjectExtraFlagsPage.cpp : implementation file
//

#include "stdafx.h"
#include "AreaEditor.h"
#include "AreaEditorDoc.h"

#include "ObjectExtraFlagsPage.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CObjectExtraFlagsPage dialog


CObjectExtraFlagsPage::CObjectExtraFlagsPage(CWnd* pParent /*=NULL*/)
	: CDialog(CObjectExtraFlagsPage::IDD, pParent)
{
	//{{AFX_DATA_INIT(CObjectExtraFlagsPage)
	m_anti_cleric = FALSE;
	m_anti_druid = FALSE;
	m_anti_evil = FALSE;
	m_anti_good = FALSE;
	m_anti_mage = FALSE;
	m_anti_neutral = FALSE;
	m_anti_thief = FALSE;
	m_anti_vampire = FALSE;
	m_anti_warrior = FALSE;
	m_bless = FALSE;
	m_buried = FALSE;
	m_clancorpse = FALSE;
	m_clanobject = FALSE;
	m_covering = FALSE;
	m_dark = FALSE;
	m_deathrot = FALSE;
	m_donation = FALSE;
	m_evil = FALSE;
	m_glow = FALSE;
	m_hidden = FALSE;
	m_hum = FALSE;
	m_inventory = FALSE;
	m_invis = FALSE;
	m_loyal = FALSE;
	m_magic = FALSE;
	m_metal = FALSE;
	m_nodrop = FALSE;
	m_noremove = FALSE;
	m_organic = FALSE;
	m_poisoned = FALSE;
	m_prototype = FALSE;
	m_dual_wield = FALSE;
	m_hold = FALSE;
	m_missile_wield = FALSE;
	m_take = FALSE;
	m_wear_about = FALSE;
	m_wear_arms = FALSE;
	m_wear_body = FALSE;
	m_wear_ears = FALSE;
	m_wear_eyes = FALSE;
	m_wear_feet = FALSE;
	m_wear_finger = FALSE;
	m_wear_hands = FALSE;
	m_wear_head = FALSE;
	m_wear_legs = FALSE;
	m_wear_neck = FALSE;
	m_wear_shield = FALSE;
	m_wear_waist = FALSE;
	m_wear_wrist = FALSE;
	m_wield = FALSE;
	//}}AFX_DATA_INIT

  m_object = NULL;

}

#undef LOAD_EXTRA_FLAG
#define LOAD_EXTRA_FLAG(field, flag)  \
  field = IS_SET (m_object->extra_flags, flag);

#undef UNLOAD_EXTRA_FLAG
#define UNLOAD_EXTRA_FLAG(field, flag)  \
  if (field != IS_SET (m_object->extra_flags, flag)) bChanged = true; \
  if (field)                      \
    SET_BIT (m_object->extra_flags, flag);\
  else                            \
    REMOVE_BIT (m_object->extra_flags, flag)

#undef LOAD_WEAR_FLAG
#define LOAD_WEAR_FLAG(field, flag)  \
  field = IS_SET (m_object->wear_flags, flag);

#undef UNLOAD_WEAR_FLAG
#define UNLOAD_WEAR_FLAG(field, flag)  \
  if (field != IS_SET (m_object->wear_flags, flag)) bChanged = true; \
  if (field)                      \
    SET_BIT (m_object->wear_flags, flag);\
  else                            \
    REMOVE_BIT (m_object->wear_flags, flag)

void CObjectExtraFlagsPage::DoDataExchange(CDataExchange* pDX)
{
bool bChanged = false;

  if (!pDX->m_bSaveAndValidate)
    {
	   LOAD_EXTRA_FLAG (m_anti_cleric, ITEM_ANTI_CLERIC);
	   LOAD_EXTRA_FLAG (m_anti_druid, ITEM_ANTI_DRUID);
	   LOAD_EXTRA_FLAG (m_anti_evil, ITEM_ANTI_EVIL);
	   LOAD_EXTRA_FLAG (m_anti_good, ITEM_ANTI_GOOD);
	   LOAD_EXTRA_FLAG (m_anti_mage, ITEM_ANTI_MAGE);
	   LOAD_EXTRA_FLAG (m_anti_neutral, ITEM_ANTI_NEUTRAL);
	   LOAD_EXTRA_FLAG (m_anti_thief, ITEM_ANTI_THIEF);
	   LOAD_EXTRA_FLAG (m_anti_vampire, ITEM_ANTI_VAMPIRE);
	   LOAD_EXTRA_FLAG (m_anti_warrior, ITEM_ANTI_WARRIOR);
	   LOAD_EXTRA_FLAG (m_bless, ITEM_BLESS);
	   LOAD_EXTRA_FLAG (m_buried, ITEM_BURRIED);
	   LOAD_EXTRA_FLAG (m_clancorpse, ITEM_CLANCORPSE);
	   LOAD_EXTRA_FLAG (m_clanobject, ITEM_CLANOBJECT);
	   LOAD_EXTRA_FLAG (m_covering, ITEM_COVERING);
	   LOAD_EXTRA_FLAG (m_dark, ITEM_DARK);
	   LOAD_EXTRA_FLAG (m_deathrot, ITEM_DEATHROT);
	   LOAD_EXTRA_FLAG (m_donation, ITEM_DONATION);
	   LOAD_EXTRA_FLAG (m_evil, ITEM_EVIL);
	   LOAD_EXTRA_FLAG (m_glow, ITEM_GLOW);
	   LOAD_EXTRA_FLAG (m_hidden, ITEM_HIDDEN);
	   LOAD_EXTRA_FLAG (m_hum, ITEM_HUM);
	   LOAD_EXTRA_FLAG (m_inventory, ITEM_INVENTORY);
	   LOAD_EXTRA_FLAG (m_invis, ITEM_INVIS);
	   LOAD_EXTRA_FLAG (m_loyal, ITEM_LOYAL);
     LOAD_EXTRA_FLAG (m_magic, ITEM_MAGIC);
     LOAD_EXTRA_FLAG (m_metal, ITEM_METAL);
     LOAD_EXTRA_FLAG (m_nodrop, ITEM_NODROP);
     LOAD_EXTRA_FLAG (m_noremove, ITEM_NOREMOVE);
     LOAD_EXTRA_FLAG (m_organic, ITEM_ORGANIC);
     LOAD_EXTRA_FLAG (m_poisoned, ITEM_POISONED);
     LOAD_EXTRA_FLAG (m_prototype, ITEM_PROTOTYPE);


	   LOAD_WEAR_FLAG (m_dual_wield, ITEM_DUAL_WIELD);
	   LOAD_WEAR_FLAG (m_hold, ITEM_HOLD);
	   LOAD_WEAR_FLAG (m_missile_wield, ITEM_MISSILE_WIELD);
	   LOAD_WEAR_FLAG (m_take, ITEM_TAKE);
	   LOAD_WEAR_FLAG (m_wear_about, ITEM_WEAR_ABOUT);
	   LOAD_WEAR_FLAG (m_wear_arms, ITEM_WEAR_ARMS);
	   LOAD_WEAR_FLAG (m_wear_body, ITEM_WEAR_BODY);
	   LOAD_WEAR_FLAG (m_wear_ears, ITEM_WEAR_EARS);
	   LOAD_WEAR_FLAG (m_wear_eyes, ITEM_WEAR_EYES);
	   LOAD_WEAR_FLAG (m_wear_feet, ITEM_WEAR_FEET);
	   LOAD_WEAR_FLAG (m_wear_finger, ITEM_WEAR_FINGER);
	   LOAD_WEAR_FLAG (m_wear_hands, ITEM_WEAR_HANDS);
	   LOAD_WEAR_FLAG (m_wear_head, ITEM_WEAR_HEAD);
	   LOAD_WEAR_FLAG (m_wear_legs, ITEM_WEAR_LEGS);
	   LOAD_WEAR_FLAG (m_wear_neck, ITEM_WEAR_NECK);
	   LOAD_WEAR_FLAG (m_wear_shield, ITEM_WEAR_SHIELD);
	   LOAD_WEAR_FLAG (m_wear_waist, ITEM_WEAR_WAIST);
	   LOAD_WEAR_FLAG (m_wear_wrist, ITEM_WEAR_WRIST);
	   LOAD_WEAR_FLAG (m_wield, ITEM_WIELD);

    }

	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CObjectExtraFlagsPage)
	DDX_Check(pDX, IDC_ANTI_CLERIC, m_anti_cleric);
	DDX_Check(pDX, IDC_ANTI_DRUID, m_anti_druid);
	DDX_Check(pDX, IDC_ANTI_EVIL, m_anti_evil);
	DDX_Check(pDX, IDC_ANTI_GOOD, m_anti_good);
	DDX_Check(pDX, IDC_ANTI_MAGE, m_anti_mage);
	DDX_Check(pDX, IDC_ANTI_NEUTRAL, m_anti_neutral);
	DDX_Check(pDX, IDC_ANTI_THIEF, m_anti_thief);
	DDX_Check(pDX, IDC_ANTI_VAMPIRE, m_anti_vampire);
	DDX_Check(pDX, IDC_ANTI_WARRIOR, m_anti_warrior);
	DDX_Check(pDX, IDC_BLESS, m_bless);
	DDX_Check(pDX, IDC_BURIED, m_buried);
	DDX_Check(pDX, IDC_CLANCORPSE, m_clancorpse);
	DDX_Check(pDX, IDC_CLANOBJECT, m_clanobject);
	DDX_Check(pDX, IDC_COVERING, m_covering);
	DDX_Check(pDX, IDC_DARK, m_dark);
	DDX_Check(pDX, IDC_DEATHROT, m_deathrot);
	DDX_Check(pDX, IDC_DONATION, m_donation);
	DDX_Check(pDX, IDC_EVIL, m_evil);
	DDX_Check(pDX, IDC_GLOW, m_glow);
	DDX_Check(pDX, IDC_HIDDEN, m_hidden);
	DDX_Check(pDX, IDC_HUM, m_hum);
	DDX_Check(pDX, IDC_INVENTORY, m_inventory);
	DDX_Check(pDX, IDC_INVIS, m_invis);
	DDX_Check(pDX, IDC_LOYAL, m_loyal);
	DDX_Check(pDX, IDC_MAGIC, m_magic);
	DDX_Check(pDX, IDC_METAL, m_metal);
	DDX_Check(pDX, IDC_NODROP, m_nodrop);
	DDX_Check(pDX, IDC_NOREMOVE, m_noremove);
	DDX_Check(pDX, IDC_ORGANIC, m_organic);
	DDX_Check(pDX, IDC_POISONED, m_poisoned);
	DDX_Check(pDX, IDC_PROTOTYPE, m_prototype);
	DDX_Check(pDX, IDC_DUAL_WIELD, m_dual_wield);
	DDX_Check(pDX, IDC_HOLD, m_hold);
	DDX_Check(pDX, IDC_MISSILE_WIELD, m_missile_wield);
	DDX_Check(pDX, IDC_TAKE, m_take);
	DDX_Check(pDX, IDC_WEAR_ABOUT, m_wear_about);
	DDX_Check(pDX, IDC_WEAR_ARMS, m_wear_arms);
	DDX_Check(pDX, IDC_WEAR_BODY, m_wear_body);
	DDX_Check(pDX, IDC_WEAR_EARS, m_wear_ears);
	DDX_Check(pDX, IDC_WEAR_EYES, m_wear_eyes);
	DDX_Check(pDX, IDC_WEAR_FEET, m_wear_feet);
	DDX_Check(pDX, IDC_WEAR_FINGER, m_wear_finger);
	DDX_Check(pDX, IDC_WEAR_HANDS, m_wear_hands);
	DDX_Check(pDX, IDC_WEAR_HEAD, m_wear_head);
	DDX_Check(pDX, IDC_WEAR_LEGS, m_wear_legs);
	DDX_Check(pDX, IDC_WEAR_NECK, m_wear_neck);
	DDX_Check(pDX, IDC_WEAR_SHIELD, m_wear_shield);
	DDX_Check(pDX, IDC_WEAR_WAIST, m_wear_waist);
	DDX_Check(pDX, IDC_WEAR_WRIST, m_wear_wrist);
	DDX_Check(pDX, IDC_WIELD, m_wield);
	//}}AFX_DATA_MAP

  if (pDX->m_bSaveAndValidate)
    {
	   UNLOAD_EXTRA_FLAG (m_anti_cleric, ITEM_ANTI_CLERIC);
	   UNLOAD_EXTRA_FLAG (m_anti_druid, ITEM_ANTI_DRUID);
	   UNLOAD_EXTRA_FLAG (m_anti_evil, ITEM_ANTI_EVIL);
	   UNLOAD_EXTRA_FLAG (m_anti_good, ITEM_ANTI_GOOD);
	   UNLOAD_EXTRA_FLAG (m_anti_mage, ITEM_ANTI_MAGE);
	   UNLOAD_EXTRA_FLAG (m_anti_neutral, ITEM_ANTI_NEUTRAL);
	   UNLOAD_EXTRA_FLAG (m_anti_thief, ITEM_ANTI_THIEF);
	   UNLOAD_EXTRA_FLAG (m_anti_vampire, ITEM_ANTI_VAMPIRE);
	   UNLOAD_EXTRA_FLAG (m_anti_warrior, ITEM_ANTI_WARRIOR);
	   UNLOAD_EXTRA_FLAG (m_bless, ITEM_BLESS);
	   UNLOAD_EXTRA_FLAG (m_buried, ITEM_BURRIED);
	   UNLOAD_EXTRA_FLAG (m_clancorpse, ITEM_CLANCORPSE);
	   UNLOAD_EXTRA_FLAG (m_clanobject, ITEM_CLANOBJECT);
	   UNLOAD_EXTRA_FLAG (m_covering, ITEM_COVERING);
	   UNLOAD_EXTRA_FLAG (m_dark, ITEM_DARK);
	   UNLOAD_EXTRA_FLAG (m_deathrot, ITEM_DEATHROT);
	   UNLOAD_EXTRA_FLAG (m_donation, ITEM_DONATION);
	   UNLOAD_EXTRA_FLAG (m_evil, ITEM_EVIL);
	   UNLOAD_EXTRA_FLAG (m_glow, ITEM_GLOW);
	   UNLOAD_EXTRA_FLAG (m_hidden, ITEM_HIDDEN);
	   UNLOAD_EXTRA_FLAG (m_hum, ITEM_HUM);
	   UNLOAD_EXTRA_FLAG (m_inventory, ITEM_INVENTORY);
	   UNLOAD_EXTRA_FLAG (m_invis, ITEM_INVIS);
	   UNLOAD_EXTRA_FLAG (m_loyal, ITEM_LOYAL);
     UNLOAD_EXTRA_FLAG (m_magic, ITEM_MAGIC);
     UNLOAD_EXTRA_FLAG (m_metal, ITEM_METAL);
     UNLOAD_EXTRA_FLAG (m_nodrop, ITEM_NODROP);
     UNLOAD_EXTRA_FLAG (m_noremove, ITEM_NOREMOVE);
     UNLOAD_EXTRA_FLAG (m_organic, ITEM_ORGANIC);
     UNLOAD_EXTRA_FLAG (m_poisoned, ITEM_POISONED);
     UNLOAD_EXTRA_FLAG (m_prototype, ITEM_PROTOTYPE);

	   UNLOAD_WEAR_FLAG (m_dual_wield, ITEM_DUAL_WIELD);
	   UNLOAD_WEAR_FLAG (m_hold, ITEM_HOLD);
	   UNLOAD_WEAR_FLAG (m_missile_wield, ITEM_MISSILE_WIELD);
	   UNLOAD_WEAR_FLAG (m_take, ITEM_TAKE);
	   UNLOAD_WEAR_FLAG (m_wear_about, ITEM_WEAR_ABOUT);
	   UNLOAD_WEAR_FLAG (m_wear_arms, ITEM_WEAR_ARMS);
	   UNLOAD_WEAR_FLAG (m_wear_body, ITEM_WEAR_BODY);
	   UNLOAD_WEAR_FLAG (m_wear_ears, ITEM_WEAR_EARS);
	   UNLOAD_WEAR_FLAG (m_wear_eyes, ITEM_WEAR_EYES);
	   UNLOAD_WEAR_FLAG (m_wear_feet, ITEM_WEAR_FEET);
	   UNLOAD_WEAR_FLAG (m_wear_finger, ITEM_WEAR_FINGER);
	   UNLOAD_WEAR_FLAG (m_wear_hands, ITEM_WEAR_HANDS);
	   UNLOAD_WEAR_FLAG (m_wear_head, ITEM_WEAR_HEAD);
	   UNLOAD_WEAR_FLAG (m_wear_legs, ITEM_WEAR_LEGS);
	   UNLOAD_WEAR_FLAG (m_wear_neck, ITEM_WEAR_NECK);
	   UNLOAD_WEAR_FLAG (m_wear_shield, ITEM_WEAR_SHIELD);
	   UNLOAD_WEAR_FLAG (m_wear_waist, ITEM_WEAR_WAIST);
	   UNLOAD_WEAR_FLAG (m_wear_wrist, ITEM_WEAR_WRIST);
	   UNLOAD_WEAR_FLAG (m_wield, ITEM_WIELD);

     if (bChanged)
       m_object->m_pDoc->SetModifiedFlag ();
    }

}


BEGIN_MESSAGE_MAP(CObjectExtraFlagsPage, CDialog)
	//{{AFX_MSG_MAP(CObjectExtraFlagsPage)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CObjectExtraFlagsPage message handlers