// EDACDgIA.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"

#include "EDACDgIA.hpp"

#include "_AInterf.hpp"
#include "EDACMStA.hpp"
#include "EDACActr.hpp"

//External Modules
#include "IncTUT.h"
//End of External Modules

#undef CPA_WANTS_IMPORT
#undef CPA_EXPORT
#define CPA_WANTS_EXPORT
    #include "_Actors.hpp"
#undef CPA_WANTS_EXPORT
#define CPA_WANTS_IMPORT

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

/////////////////////////////////////////////////////////////////////////////
// EdActors_Dialog_InconsistentAllocations dialog

BEGIN_MESSAGE_MAP(EdActors_Dialog_InconsistentAllocations, CDialog)
	//{{AFX_MSG_MAP(EdActors_Dialog_InconsistentAllocations)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


//***************************************************************************
EdActors_Dialog_InconsistentAllocations::EdActors_Dialog_InconsistentAllocations(	CPA_Actor *_pclModel,
																																									CPA_Actor *_pclInstance,
																																									BOOL _bAllocatedInModel,
																																									EdActors_ActorMiniStructure *_pclModelAMS,
																																									EdActors_ActorMiniStructure *_pclInstanceAMS,
																																									CWnd* pParent /*=NULL*/)
																				: CDialog(EdActors_Dialog_InconsistentAllocations::IDD, &g_oBaseFrame)
{
	//{{AFX_DATA_INIT(EdActors_Dialog_InconsistentAllocations)
	m_iRadioValue = 2;
	//}}AFX_DATA_INIT

	m_pri_bAllocatedInModel = _bAllocatedInModel;
	m_pri_pclInstanceAMS = _pclInstanceAMS;
	m_pri_pclModelAMS = _pclModelAMS;

	if ( _bAllocatedInModel )
	{
		m_csText = "The MS '" + _pclInstanceAMS->m_fn_csGetScriptName() + "' is allocated in Model '";
		m_csText += _pclModel->GetName() + "'\n";
		m_csText += "but not in Instance '" + _pclInstance->GetName() + "'";
	}
	else
	{
		m_csText = "The MS '" + _pclInstanceAMS->m_fn_csGetScriptName() + "' is allocated in Instance '";
		m_csText += _pclInstance->GetName() + "'\n";
		m_csText += "but not in Model '" + _pclModel->GetName() + "'";
	}
}


//***************************************************************************
void EdActors_Dialog_InconsistentAllocations::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(EdActors_Dialog_InconsistentAllocations)
	DDX_Radio(pDX, IDC_RADIO_ALLOCATE, m_iRadioValue);
	DDX_Text(pDX, IDC_STATIC_TEXT, m_csText);
	//}}AFX_DATA_MAP
}

/////////////////////////////////////////////////////////////////////////////
// EdActors_Dialog_InconsistentAllocations message handlers

//***************************************************************************
BOOL EdActors_Dialog_InconsistentAllocations::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//Inits Text for Radio
	if ( m_pri_bAllocatedInModel )
	{
		GetDlgItem(IDC_RADIO_ALLOCATE)->SetWindowText("Allocate in Instance");
		GetDlgItem(IDC_RADIO_UNALLOCATE)->SetWindowText("Unallocate in Model (and all its Instances)");
	}
	else
	{
		GetDlgItem(IDC_RADIO_ALLOCATE)->SetWindowText("Allocate in Model (and all its Instances)");
		GetDlgItem(IDC_RADIO_UNALLOCATE)->SetWindowText("Unallocate in Instance");
	}

	//////////////
	//////////////
	//Registers for TUT Module
	TUT_M_vGetTutDll();
	
	TUT_M_vRegisterControlID(IDC_RADIO_ALLOCATE, "OAc_InconsistentAllocationsDialog_AllocateButton", TUT_e_Button);
	TUT_M_vRegisterControlID(IDC_RADIO_UNALLOCATE, "OAc_InconsistentAllocationsDialog_UnallocateButton", TUT_e_Button);
	TUT_M_vRegisterControlID(IDC_RADIO_DO_NOTHING, "OAc_InconsistentAllocationsDialog_DoNothingButton", TUT_e_Button);
	TUT_M_vRegisterControlID(IDOK, "OAc_InconsistentAllocationsDialog_OKButton", TUT_e_Button);

	//End of Registers for TUT Module
	//////////////
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//***************************************************************************
void EdActors_Dialog_InconsistentAllocations::OnDestroy() 
{
	//////////////
	//////////////
	//UnRegisters for TUT Module
	TUT_M_vGetTutDll();
	
	TUT_M_vUnregisterControlID(IDC_RADIO_ALLOCATE);
	TUT_M_vUnregisterControlID(IDC_RADIO_UNALLOCATE);
	TUT_M_vUnregisterControlID(IDC_RADIO_DO_NOTHING);
	TUT_M_vUnregisterControlID(IDOK);
	
	//End of UnRegisters for TUT Module
	//////////////
	
	CDialog::OnDestroy();
}

//***************************************************************************
void EdActors_Dialog_InconsistentAllocations::OnOK() 
{
	UpdateData(TRUE);

	switch ( m_iRadioValue )
	{
	/////////////
	//Allocates where it's not allocated
	case 0:
 		if	(	!m_pri_pclInstanceAMS->m_fn_bIsAllocated() )
		{
			m_pri_pclInstanceAMS->m_fn_bAllocate(FALSE);

			m_pri_pclInstanceAMS->m_pclParentActor->m_pclActor->fn_vNotifySave();
		}
		else
		{
			m_pri_pclModelAMS->m_fn_bAllocate(FALSE);

			m_pri_pclInstanceAMS->m_pclParentActor->m_pclActor->fn_vNotifySave();
		}
		break;
	
	/////////////
	//Unallocates where it's allocated
	case 1:
 		if	(	m_pri_pclInstanceAMS->m_fn_bIsAllocated() )
		{
			m_pri_pclInstanceAMS->m_fn_bUnallocate();

			m_pri_pclInstanceAMS->m_pclParentActor->m_pclActor->fn_vNotifySave();
		}
		else
		{
			m_pri_pclModelAMS->m_fn_bUnallocate();

			m_pri_pclInstanceAMS->m_pclParentActor->m_pclActor->fn_vNotifySave();
		}
		break;
	
	/////////////
	//Does nothing and continues
	case 2:
		break;
	};

	CDialog::OnOK();
}
