areaeditor/
/*
** AreaEditor - a program for editing SMAUG and ROM area files.
** Author: Nick Gammon
** http://www.gammon.com.au/
** See Copyright Notice at the end of AreaEditor.h
*/

// RoomFlagsPage.cpp : implementation file
//

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

#include "RoomFlagsPage.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRoomFlagsPage dialog


CRoomFlagsPage::CRoomFlagsPage(CWnd* pParent /*=NULL*/)
	: CDialog(CRoomFlagsPage::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRoomFlagsPage)
	m_chaotic = FALSE;
	m_clanstoreroom = FALSE;
	m_dark = FALSE;
	m_death = FALSE;
	m_donation = FALSE;
	m_indoors = FALSE;
	m_lawful = FALSE;
	m_logspeech = FALSE;
	m_neutral = FALSE;
	m_no_astral = FALSE;
	m_no_magic = FALSE;
	m_no_mob = FALSE;
	m_no_recall = FALSE;
	m_no_summon = FALSE;
	m_nodrop = FALSE;
	m_nodropall = FALSE;
	m_nofloor = FALSE;
	m_pet_shop = FALSE;
	m_private = FALSE;
	m_prototype = FALSE;
	m_safe = FALSE;
	m_silence = FALSE;
	m_solitary = FALSE;
	m_teleport = FALSE;
	m_teleshowdesc = FALSE;
	m_tunnel = FALSE;
	//}}AFX_DATA_INIT

  m_room = NULL;

}

#undef LOAD_FLAG
#define LOAD_FLAG(field, flag)  \
  field = IS_SET (m_room->room_flags, flag);

#undef UNLOAD_FLAG
#define UNLOAD_FLAG(field, flag)  \
  if (field != IS_SET (m_room->room_flags, flag)) bChanged = true; \
  if (field)                      \
    SET_BIT (m_room->room_flags, flag);\
  else                            \
    REMOVE_BIT (m_room->room_flags, flag)

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

  if (!pDX->m_bSaveAndValidate)
    {
	  LOAD_FLAG (m_chaotic, ROOM_CHAOTIC);
	  LOAD_FLAG (m_clanstoreroom, ROOM_CLANSTOREROOM);
	  LOAD_FLAG (m_dark, ROOM_DARK);
	  LOAD_FLAG (m_death, ROOM_DEATH);
	  LOAD_FLAG (m_donation, ROOM_DONATION);
	  LOAD_FLAG (m_indoors, ROOM_INDOORS);
	  LOAD_FLAG (m_lawful, ROOM_LAWFUL);
	  LOAD_FLAG (m_logspeech, ROOM_LOGSPEECH);
	  LOAD_FLAG (m_neutral, ROOM_NEUTRAL);
	  LOAD_FLAG (m_no_astral, ROOM_NO_ASTRAL);
	  LOAD_FLAG (m_no_magic, ROOM_NO_MAGIC);
	  LOAD_FLAG (m_no_mob, ROOM_NO_MOB);
	  LOAD_FLAG (m_no_recall, ROOM_NO_RECALL);
	  LOAD_FLAG (m_no_summon, ROOM_NO_SUMMON);
	  LOAD_FLAG (m_nodrop, ROOM_NODROP);
	  LOAD_FLAG (m_nodropall, ROOM_NODROPALL);
	  LOAD_FLAG (m_nofloor, ROOM_NOFLOOR);
	  LOAD_FLAG (m_pet_shop, ROOM_PET_SHOP);
	  LOAD_FLAG (m_private, ROOM_PRIVATE);
	  LOAD_FLAG (m_prototype, ROOM_PROTOTYPE);
	  LOAD_FLAG (m_safe, ROOM_SAFE);
	  LOAD_FLAG (m_silence, ROOM_SILENCE);
	  LOAD_FLAG (m_solitary, ROOM_SOLITARY);
	  LOAD_FLAG (m_teleport, ROOM_TELEPORT);
	  LOAD_FLAG (m_teleshowdesc, ROOM_TELESHOWDESC);
	  LOAD_FLAG (m_tunnel, ROOM_TUNNEL);
    }

	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRoomFlagsPage)
	DDX_Check(pDX, IDC_CHAOTIC, m_chaotic);
	DDX_Check(pDX, IDC_CLANSTOREROOM, m_clanstoreroom);
	DDX_Check(pDX, IDC_DARK, m_dark);
	DDX_Check(pDX, IDC_DEATH, m_death);
	DDX_Check(pDX, IDC_DONATION, m_donation);
	DDX_Check(pDX, IDC_INDOORS, m_indoors);
	DDX_Check(pDX, IDC_LAWFUL, m_lawful);
	DDX_Check(pDX, IDC_LOGSPEECH, m_logspeech);
	DDX_Check(pDX, IDC_NEUTRAL, m_neutral);
	DDX_Check(pDX, IDC_NO_ASTRAL, m_no_astral);
	DDX_Check(pDX, IDC_NO_MAGIC, m_no_magic);
	DDX_Check(pDX, IDC_NO_MOB, m_no_mob);
	DDX_Check(pDX, IDC_NO_RECALL, m_no_recall);
	DDX_Check(pDX, IDC_NO_SUMMON, m_no_summon);
	DDX_Check(pDX, IDC_NODROP, m_nodrop);
	DDX_Check(pDX, IDC_NODROPALL, m_nodropall);
	DDX_Check(pDX, IDC_NOFLOOR, m_nofloor);
	DDX_Check(pDX, IDC_PET_SHOP, m_pet_shop);
	DDX_Check(pDX, IDC_PRIVATE, m_private);
	DDX_Check(pDX, IDC_PROTOTYPE, m_prototype);
	DDX_Check(pDX, IDC_SAFE, m_safe);
	DDX_Check(pDX, IDC_SILENCE, m_silence);
	DDX_Check(pDX, IDC_SOLITARY, m_solitary);
	DDX_Check(pDX, IDC_TELEPORT, m_teleport);
	DDX_Check(pDX, IDC_TELESHOWDESC, m_teleshowdesc);
	DDX_Check(pDX, IDC_TUNNEL, m_tunnel);
	//}}AFX_DATA_MAP

  if (pDX->m_bSaveAndValidate)
    {
	  UNLOAD_FLAG (m_chaotic, ROOM_CHAOTIC);
	  UNLOAD_FLAG (m_clanstoreroom, ROOM_CLANSTOREROOM);
	  UNLOAD_FLAG (m_dark, ROOM_DARK);
	  UNLOAD_FLAG (m_death, ROOM_DEATH);
	  UNLOAD_FLAG (m_donation, ROOM_DONATION);
	  UNLOAD_FLAG (m_indoors, ROOM_INDOORS);
	  UNLOAD_FLAG (m_lawful, ROOM_LAWFUL);
	  UNLOAD_FLAG (m_logspeech, ROOM_LOGSPEECH);
	  UNLOAD_FLAG (m_neutral, ROOM_NEUTRAL);
	  UNLOAD_FLAG (m_no_astral, ROOM_NO_ASTRAL);
	  UNLOAD_FLAG (m_no_magic, ROOM_NO_MAGIC);
	  UNLOAD_FLAG (m_no_mob, ROOM_NO_MOB);
	  UNLOAD_FLAG (m_no_recall, ROOM_NO_RECALL);
	  UNLOAD_FLAG (m_no_summon, ROOM_NO_SUMMON);
	  UNLOAD_FLAG (m_nodrop, ROOM_NODROP);
	  UNLOAD_FLAG (m_nodropall, ROOM_NODROPALL);
	  UNLOAD_FLAG (m_nofloor, ROOM_NOFLOOR);
	  UNLOAD_FLAG (m_pet_shop, ROOM_PET_SHOP);
	  UNLOAD_FLAG (m_private, ROOM_PRIVATE);
	  UNLOAD_FLAG (m_prototype, ROOM_PROTOTYPE);
	  UNLOAD_FLAG (m_safe, ROOM_SAFE);
	  UNLOAD_FLAG (m_silence, ROOM_SILENCE);
	  UNLOAD_FLAG (m_solitary, ROOM_SOLITARY);
	  UNLOAD_FLAG (m_teleport, ROOM_TELEPORT);
	  UNLOAD_FLAG (m_teleshowdesc, ROOM_TELESHOWDESC);
	  UNLOAD_FLAG (m_tunnel, ROOM_TUNNEL);
     if (bChanged)
       m_room->m_pDoc->SetModifiedFlag ();
    }

}


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

/////////////////////////////////////////////////////////////////////////////
// CRoomFlagsPage message handlers