/*=========================================================================
* 
* SEClEnvs.cpp :  Environment List Sector Dialog - Implementation file
* 
*
* Version			1.0
* Creation date		
* Revision date
*
* Shaitan
*=======================================================================*/

/*
#include "stdafx.h"
#include "acp_base.h"
#include "SECTint.hpp"

#include "SECdSrfs.hpp"

#include "SECmodif.hpp"
#include "SECdEnv.hpp"
#include "SEClEnvs.hpp"

#include "..\Main\Inc\_EditID.h"
#include "TUT.h"

SECT_Surface	 *g_pClickedSrf;
*/

//#################################################################################
// SECT_DialogEnvElem dialog
//#################################################################################

/*----------------------------------------
----------------------------------------*/
/*
SECT_DialogSrf::SECT_DialogSrf(CWnd* pParent)
	: CFormView(SECT_DialogSrf::IDD)
{
	//{{AFX_DATA_INIT(SECT_DialogEnvElem)
	//}}AFX_DATA_INIT
}
*/



/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(SECT_DialogSrf)
	// surf elem
	DDX_Control(pDX, SECT_IDC_SURFLISTBOX, m_cSurfListBox);
	DDX_Control(pDX, SECT_IDC_VIEWSURF, m_cViewSurf);
	DDX_Control(pDX, SECT_IDC_SURFHEIGHT, m_cSurfHeight);
	// control
	DDX_Control(pDX, SECT_IDC_SRFDEFAULT, m_cDefault);
	//}}AFX_DATA_MAP
}
*/

/*----------------------------------------
----------------------------------------*/
/*
BEGIN_MESSAGE_MAP(SECT_DialogSrf, CFormView)
	//{{AFX_MSG_MAP(SECT_DialogSrf)
	ON_WM_SIZE()
	ON_WM_DESTROY()
	// surf elem
	ON_NOTIFY(LVN_ITEMCHANGED, SECT_IDC_SURFLISTBOX, OnSelChangeSurfListBox)
	ON_NOTIFY(NM_DBLCLK, SECT_IDC_SURFLISTBOX, OnDblClkSurfListBox)
	ON_EN_KILLFOCUS(SECT_IDC_SURFHEIGHT, OnChangeHeight)
	ON_BN_CLICKED(SECT_IDC_VIEWSURF, OnViewSurf)
	// default
	ON_BN_CLICKED(SECT_IDC_SRFDEFAULT, OnDefault)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
*/

//#################################################################################
// SECT_DialogSrf Inits
//#################################################################################

/*===========================================================================
*		Description:	Init dialog
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*=========================================================================*/
/*
void SECT_DialogSrf::fn_vInitDialog (Sector_Interface *p_oDLL, CWnd *pParent)
{
	// create the dialog
	m_bInitialised = FALSE;
	m_pSectorInterface = p_oDLL;
	CFormView::Create(NULL, "", AFX_WS_DEFAULT_VIEW, CRect(0,0,120,180), pParent, AFX_IDW_PANE_FIRST, NULL);

	// init data for dialog
	CFormView::UpdateData(FALSE);

// FOR TUTORIAL
	TUT_M_vGetTutDll();

	TUT_M_vRegisterControl(m_cSurfListBox.m_hWnd,	"OSC_DSRF_LIST_SURFACES",	TUT_e_ListBox);
	TUT_M_vRegisterControl(m_cViewSurf.m_hWnd,		"OSC_DSRF_BUTTON_VIEW",		TUT_e_Button);
	TUT_M_vRegisterControl(m_cSurfHeight.m_hWnd,	"OSC_DSRF_EDIT_HEIGHT",		TUT_e_TextEdit);
	TUT_M_vRegisterControl(m_cDefault.m_hWnd,		"OSC_DSRF_BUTTON_DEFAULT",	TUT_e_Button);
// END TUTORIAL

	// init all controls
	m_bViewSurface = FALSE;
	m_cViewSurf.SetCheck(0);
	fn_vInitEnvElem(-1);
	m_bInitialised = TRUE;
	// init listbox
	m_cSurfListBox.fn_vInitParameters(this, m_pSectorInterface, E_te_Surface);
}
*/

/*===========================================================================
*		Description:	Reinit dialog
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*=========================================================================*/
/*
void SECT_DialogSrf::fn_vReinitDialog (void)
{
	fn_vInitSurfListBox();
}
*/

/*===========================================================================
*		Description:	Init controls state
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*=========================================================================*/
/*
void SECT_DialogSrf::fn_vInitControls (BOOL bEnable)
{
	m_cSurfListBox.EnableWindow(bEnable);
	m_cViewSurf.EnableWindow(bEnable);
	m_cSurfHeight.EnableWindow((m_pSurface != NULL)&&bEnable);
}
*/

/*===========================================================================
*		Description:	reinit environment list
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*=========================================================================*/
/*
void SECT_DialogSrf::fn_vInitEnvElem (long lEnvElem)
{
	Sector_Object	*pSector;
	
	// find corresponding element
	if (lEnvElem != -1)
		pSector = (Sector_Object *) m_pSectorInterface->GetEditedSector()->GetObject();
	else
		pSector = NULL;

	// update edited element
	m_lEnvElem = lEnvElem;
	m_pSurfElem = (pSector) ? pSector->GetSurface(m_lEnvElem) : NULL;

	// update infos
	fn_vSelectSurf((m_pSurfElem) ? m_pSurfElem->GetSurface() : m_pSectorInterface->GetSurfaceToDraw());
	m_cSurfListBox.fn_vReinitListObjects();
}
*/

/*===========================================================================
*		Description:	Init combo with all available surfaces 
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                                      Author:         
*=========================================================================*/
/*
void SECT_DialogSrf::fn_vInitSurfListBox (void)
{
	// set list style
	m_cSurfListBox.SetOrder(E_lo_Edited, FALSE, FALSE);
	m_cSurfListBox.SetDragDropRight(FALSE);
	
	// reinit list
	m_cSurfListBox.SetSortedList(m_pSectorInterface->GetBaseObjectList(C_szSurfaceTypeName));
	// current selection => none
	m_cSurfListBox.SetSelectedItem(-1);
}
*/

/*===========================================================================
*		Description:	update dialog when selection changes  
*		Creation date:	
*		Author:			Shaitan
*---------------------------------------------------------------------------
*		Revision date:                      Author:         
*=========================================================================*/
/*
void SECT_DialogSrf::fn_vSelectSurf (SECT_Surface *pSurface, BOOL bUpdateSurfElem)
{
	SECT_Surface		*pOldSelect, *pOldCurrent;
	SECT_ModifSurfElem	*pModif;
	CString				csText;
	int					iInd;
	
	// update current environment
	pOldSelect = m_pSurface;
	m_pSurface = pSurface;
	
	// update selection
	iInd = m_cSurfListBox.GetCorrespondingIndex((DWORD) m_pSurface);
	m_cSurfListBox.RedrawItems(iInd, iInd);

	// update env list
	if ((bUpdateSurfElem)&&(m_pSurfElem))
	{
		pOldCurrent = m_pSurfElem->GetSurface();
		if ((m_pSurface)&&(!m_cSurfListBox.fn_bIsAlreadyUsed(m_pSurface)))
		{
			// update sector lists
			pModif = new SECT_ModifSurfElem(m_pSectorInterface, E_mt_ChangeSrf, 
											m_pSurfElem, m_pSurface, m_lEnvElem);
			m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
		}
	}

	// update height control
	m_cSurfHeight.EnableWindow((m_pSurface != NULL));
	if (m_pSurface)
		csText.Format("%5.2f", m_pSurface->GetHeight());
	else
		csText = "";
	m_cSurfHeight.SetWindowText(csText);

	// redraw previous element
	if (pOldSelect != m_pSurface)
	{
		iInd = m_cSurfListBox.GetCorrespondingIndex((DWORD) pOldSelect);
		m_cSurfListBox.RedrawItems(iInd, iInd);
	}

	// redraw previous element
	if ((pOldCurrent)&&(pOldCurrent != pOldSelect))
	{
		iInd = m_cSurfListBox.GetCorrespondingIndex((DWORD) pOldCurrent);
		m_cSurfListBox.RedrawItems(iInd, iInd);
	}

	// update selection
	iInd = m_cSurfListBox.GetCorrespondingIndex((DWORD) m_pSurface);
	m_cSurfListBox.RedrawItems(iInd, iInd);
	m_cSurfListBox.EnsureVisible(iInd, TRUE);
	m_cSurfListBox.UpdateWindow();

	// update drawing
	if (m_bViewSurface)
		m_pSectorInterface->SetSurfaceToDraw(m_pSurface);

}
*/

//#################################################################################
// SECT_DialogEdit Messages
//#################################################################################

	
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnSize (UINT nFlags, int cx, int cy)
{
	RECT WindowPosition;
	int ecx, ecy;

	if (!m_bInitialised)
		return;
	
	// calculate name position
	GetWindowRect(&WindowPosition);
	ecx = WindowPosition.right - WindowPosition.left - 10;
	ecx = (ecx < 50) ? 50 : ecx;
	ecy = WindowPosition.bottom - WindowPosition.top - 10;
	ecy = (ecy < 100) ? 100 : ecy;

	// mechanic
	GetDlgItem(SECT_IDC_TEXTSURFELEM)->MoveWindow(5, 5, ecx, ecy);
	m_cSurfListBox.MoveWindow(10, 25, ecx-10, ecy-50);
	m_cViewSurf.MoveWindow(ecx-35, ecy-20, 30, 18);
	m_cSurfHeight.MoveWindow(15, ecy-20, ecx-50, 18);
}
*/

/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnDestroy (void)
{
// FOR TUTORIAL
	TUT_M_vGetTutDll();

	TUT_M_vUnregisterControl(m_cSurfListBox.m_hWnd);
	TUT_M_vUnregisterControl(m_cViewSurf.m_hWnd);
	TUT_M_vUnregisterControl(m_cSurfHeight.m_hWnd);
	TUT_M_vUnregisterControl(m_cDefault.m_hWnd);
// END TUTORIAL

	CFormView::OnDestroy();
}
*/

/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnSelChangeSurfListBox(NMHDR* pNMHDR, LRESULT* pResult)
{
	SECT_Surface	*pSurf = NULL;
	LPNM_LISTVIEW		pNMListView = (LPNM_LISTVIEW)pNMHDR;
	BOOL				bOldSelect, bNewSelect;
	int					iIndex;
	
	// update param
	*pResult = 0;

	if ((pNMListView->uChanged != LVIF_STATE)||(m_cSurfListBox.fn_bIsSelecting()))
		return;

	bOldSelect = (pNMListView->uOldState & LVIS_SELECTED);
	bNewSelect = (pNMListView->uNewState & LVIS_SELECTED);

	// get corresponding sector
	iIndex = pNMListView->iItem;
	pSurf = (SECT_Surface *) m_cSurfListBox.GetItemData(iIndex);
	g_pClickedSrf = pSurf;

	m_cSurfListBox.SetSelectedItem(-1);

	if (bOldSelect != bNewSelect)
	{
		// select corresponding environment
		if ((!pSurf)||(!pSurf->fn_bIsAvailable()))
			fn_vSelectSurf((m_pSurfElem) ? m_pSurfElem->GetSurface() : NULL, FALSE);
		else 
			fn_vSelectSurf((pSurf != m_pSurface) ? pSurf : NULL, FALSE);
	}
}
*/

/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnDblClkSurfListBox(NMHDR* pNMHDR, LRESULT* pResult)
{
	SECT_Surface	*pSurf = NULL;

	// update param
	*pResult = 0;

	// get corresponding sector
	pSurf = g_pClickedSrf;
	g_pClickedSrf = NULL;


	// select corresponding environment
	if ((!pSurf)||(!pSurf->fn_bIsAvailable()))
		fn_vSelectSurf((m_pSurfElem) ? m_pSurfElem->GetSurface() : NULL);
	else 
		fn_vSelectSurf(pSurf);
}
*/

/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnViewSurf()
{
	// update draw flag
	m_bViewSurface = m_cViewSurf.GetCheck();
	// update drawing
	m_pSectorInterface->SetSurfaceToDraw((m_bViewSurface) ? m_pSurface : NULL);
}
*/

/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnChangeHeight()
{
	SECT_ModifSrfParams *pModif;
	MTH_tdxReal			xHeight;
	char				szVal[15];
	
	// no surface => no modif
	if ((!m_pSurface)||(!m_cSurfHeight.GetModify()))
		return;

	// get new height
	m_cSurfHeight.GetWindowText(szVal, 15);
	xHeight = (float) atof(szVal);
	// if necessary, update height
	if (m_pSurface->GetHeight() != xHeight)
	{
		// update surface
		pModif = new SECT_ModifSrfParams(m_pSectorInterface, E_mt_ChangeSrfHeight, m_pSurface, xHeight);
		m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
		// update drawing
		m_cSurfListBox.fn_vReinitListObjects();
		if (m_bViewSurface)
			m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
	}
	// update flag
	m_cSurfHeight.SetModify(FALSE);
}
*/

/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogSrf::OnDefault()
{
	if (m_cSurfHeight.GetModify())
	{
		OnChangeHeight();
		m_cSurfHeight.SetFocus();
	}
}
*/

//#################################################################################
// SECT_SrfElemListBox 
//#################################################################################
/*----------------------------------------
----------------------------------------*/
/*
SECT_SrfElemListBox::SECT_SrfElemListBox (void)
{
}
*/

/*----------------------------------------
----------------------------------------*/
/*
SECT_SrfElemListBox::~SECT_SrfElemListBox (void)
{

}
*/

/*----------------------------------------
----------------------------------------*/
/*
BOOL SECT_SrfElemListBox::fn_bIsCurrentElement (CPA_BaseObject *pElem)
{
	SECT_SurfElem *pSurfElem;
	
	// no dialog => no current element
	if (!m_pDialog)
		return FALSE;
	
	// init parameters
	pSurfElem = ((SECT_DialogSrf *) m_pDialog)->GetCurrentSurfElem();
	
	return ((pSurfElem)&&(pElem == pSurfElem->GetSurface()));
}
*/

/*----------------------------------------
----------------------------------------*/
/*
BOOL SECT_SrfElemListBox::fn_bIsSelectedElement (CPA_BaseObject *pElem)
{
	// no dialog => no selected element
	if (!m_pDialog)
		return FALSE;
		
	return (pElem == ((SECT_DialogSrf *) m_pDialog)->GetSelectedSurface());
}
*/

/*----------------------------------------
----------------------------------------*/
/*
BOOL SECT_SrfElemListBox::fn_bIsAlreadyUsed (CPA_BaseObject *pElem)
{
	Sector_Object *pSector;
	
	// no edited sector => no used element
	if (!m_pSectorInterface->GetEditedSector())
		return FALSE;
	pSector = (Sector_Object *) m_pSectorInterface->GetEditedSector()->GetObject();
	
	return (pSector->GetSurfaceList()->GetElementWithSurface((SECT_Surface *)pElem) != NULL);
}
*/