561 lines
15 KiB
C++
561 lines
15 KiB
C++
/*=========================================================================
|
|
*
|
|
* SECdEdit.cpp : Edited Sector Dialog - Implementation file
|
|
*
|
|
*
|
|
* Version 1.0
|
|
* Creation date
|
|
* Revision date
|
|
*
|
|
* Shaitan
|
|
*=======================================================================*/
|
|
|
|
#include "stdafx.h"
|
|
#include "acp_base.h"
|
|
#include "SECTint.hpp"
|
|
|
|
#include "SECdEdit.hpp"
|
|
|
|
#include "SECmodif.hpp"
|
|
|
|
|
|
#include "..\Main\Inc\_EditID.h"
|
|
#include "TUT.h"
|
|
|
|
#define C_xMinZfar 10.0
|
|
|
|
#define C_MinPriorityLevel C_SectorMinPriority - C_SectorNormalPriority + 1
|
|
#define C_MaxPriorityLevel C_SectorMaxPriority - C_SectorNormalPriority - 1
|
|
|
|
//#################################################################################
|
|
// SECT_DialogEdit dialog
|
|
//#################################################################################
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
SECT_DialogEdit::SECT_DialogEdit(CWnd* pParent)
|
|
: CFormView(SECT_DialogEdit::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(SECT_DialogEdit)
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CFormView::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(SECT_DialogEdit)
|
|
DDX_Control(pDX, SECT_IDC_EDITEDSECTOR, m_cComboSector);
|
|
DDX_Control(pDX, SECT_IDC_EDITVIRTUAL, m_cVirtual);
|
|
DDX_Control(pDX, SECT_IDC_ZMAXCHECK, m_cZmaxCheck);
|
|
DDX_Control(pDX, SECT_IDC_ZMAXVALUE, m_cZmaxEdit);
|
|
DDX_Control(pDX, SECT_IDC_ZFARCHECK, m_cZfarCheck);
|
|
DDX_Control(pDX, SECT_IDC_ZFARVALUE, m_cZfarEdit);
|
|
DDX_Control(pDX, SECT_IDC_ZMAXDEFAULT, m_cDefault);
|
|
DDX_Control(pDX, SECT_IDC_CAMERATYPE, m_cCamTypeEdit);
|
|
DDX_Control(pDX, SECT_IDC_PRIORITY, m_cPriorityEdit);
|
|
DDX_Control(pDX, SECT_IDC_PSPIN, m_cPrioritySpin);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
BEGIN_MESSAGE_MAP(SECT_DialogEdit, CFormView)
|
|
//{{AFX_MSG_MAP(SECT_DialogEdit)
|
|
ON_WM_SIZE()
|
|
ON_WM_DESTROY()
|
|
ON_CBN_SELCHANGE(SECT_IDC_EDITEDSECTOR, OnSelChangeComboSector)
|
|
ON_BN_CLICKED(SECT_IDC_EDITVIRTUAL, OnVirtual)
|
|
ON_BN_CLICKED(SECT_IDC_ZMAXCHECK, OnZmaxCheck)
|
|
ON_EN_KILLFOCUS(SECT_IDC_ZMAXVALUE, OnEditZmax)
|
|
ON_BN_CLICKED(SECT_IDC_ZFARCHECK, OnZfarCheck)
|
|
ON_EN_KILLFOCUS(SECT_IDC_ZFARVALUE, OnEditZfar)
|
|
ON_BN_CLICKED(SECT_IDC_ZMAXDEFAULT, OnDefault)
|
|
ON_EN_KILLFOCUS(SECT_IDC_CAMERATYPE, OnEditCamType)
|
|
// ON_EN_KILLFOCUS(SECT_IDC_PRIORITY, OnEditPriority)
|
|
ON_NOTIFY(UDN_DELTAPOS, SECT_IDC_PSPIN, OnPrioritySpin)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
//#################################################################################
|
|
// SECT_DialogEdit Inits
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
* Description: Init dialog
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void SECT_DialogEdit::fn_vInitDialog (Sector_Interface *p_oDLL, CWnd *pParent, const CString csTag)
|
|
{
|
|
// 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_cComboSector.m_hWnd, "OSC_DEDIT"+ csTag + "_COMBO_EDITEDSECTOR", TUT_e_ComboBox);
|
|
TUT_M_vRegisterControl(m_cVirtual.m_hWnd, "OSC_DEDIT"+ csTag + "_CHECK_VIRTUALSECTOR", TUT_e_Button );
|
|
|
|
TUT_M_vRegisterControl(m_cZmaxCheck.m_hWnd, "OSC_DEDIT"+ csTag + "_CHECK_ZMAXSECTOR", TUT_e_Button );
|
|
TUT_M_vRegisterControl(m_cZmaxEdit.m_hWnd, "OSC_DEDIT"+ csTag + "_EDIT_ZMAXSECTOR", TUT_e_TextEdit);
|
|
|
|
TUT_M_vRegisterControl(m_cZfarCheck.m_hWnd, "OSC_DEDIT"+ csTag + "_CHECK_ZFARSECTOR", TUT_e_Button );
|
|
TUT_M_vRegisterControl(m_cZfarEdit.m_hWnd, "OSC_DEDIT"+ csTag + "_EDIT_ZFARSECTOR", TUT_e_TextEdit);
|
|
|
|
TUT_M_vRegisterControl(m_cCamTypeEdit.m_hWnd, "OSC_DEDIT"+ csTag + "_EDIT_CAMERASECTOR", TUT_e_TextEdit);
|
|
|
|
TUT_M_vRegisterControl(m_cPrioritySpin.m_hWnd, "OSC_DEDIT"+ csTag + "_SPIN_PRIORITYSECTOR", TUT_e_Spin);
|
|
// END TUTORIAL
|
|
|
|
// inti spin parameters
|
|
m_cPrioritySpin.SetBuddy(&m_cPriorityEdit);
|
|
m_cPrioritySpin.SetRange(C_MinPriorityLevel, C_MaxPriorityLevel);
|
|
m_cPrioritySpin.SetPos(0);
|
|
|
|
// init all controls
|
|
fn_vReinitDialog(NULL);
|
|
|
|
m_bInitialised = TRUE;
|
|
}
|
|
|
|
|
|
|
|
/*===========================================================================
|
|
* Description: Init all controls
|
|
* Creation date:
|
|
* Author: Shaitan
|
|
*---------------------------------------------------------------------------
|
|
* Revision date: Author:
|
|
*=========================================================================*/
|
|
void SECT_DialogEdit::fn_vReinitDialog (CPA_SuperObject *pSector)
|
|
{
|
|
CPA_BaseObjectList *pListObject;
|
|
CPA_BaseObject *pElem;
|
|
Sector_Object *pSectObj;
|
|
Position pos;
|
|
CString csText;
|
|
BOOL bZmax;
|
|
BOOL bZfar;
|
|
int iInd;
|
|
|
|
// init sector
|
|
m_pEditedSector = pSector;
|
|
|
|
// reinit combo
|
|
m_cComboSector.ResetContent();
|
|
pListObject = m_pSectorInterface->GetBaseObjectList(C_szSectorTypeName);
|
|
if (pListObject->GetCount() > 0)
|
|
{
|
|
for (pElem = pListObject->GetHeadElement(pos); pElem; pElem = pListObject->GetNextElement(pos))
|
|
m_cComboSector.AddString(pElem->GetName());
|
|
}
|
|
|
|
// select current sector
|
|
if (!m_pEditedSector)
|
|
{
|
|
strcpy(m_szName, "");
|
|
m_cComboSector.SetCurSel(-1);
|
|
// virtual
|
|
m_cVirtual.SetCheck(0);
|
|
m_cVirtual.EnableWindow(FALSE);
|
|
// zmax
|
|
m_cZmaxCheck.SetCheck(0);
|
|
m_cZmaxCheck.EnableWindow(FALSE);
|
|
m_cZmaxEdit.SetWindowText("");
|
|
m_cZmaxEdit.EnableWindow(FALSE);
|
|
// zfar
|
|
m_cZfarCheck.SetCheck(0);
|
|
m_cZfarCheck.EnableWindow(FALSE);
|
|
m_cZfarEdit.SetWindowText("");
|
|
m_cZfarEdit.EnableWindow(FALSE);
|
|
// camera
|
|
m_cCamTypeEdit.SetWindowText("");
|
|
m_cCamTypeEdit.EnableWindow(FALSE);
|
|
// priority
|
|
m_cPrioritySpin.SetPos(0);
|
|
m_cPrioritySpin.EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
|
|
// sector
|
|
strcpy(m_szName, pSectObj->GetName());
|
|
iInd = m_cComboSector.FindStringExact(-1,m_szName);
|
|
m_cComboSector.SetCurSel(iInd);
|
|
// vitual
|
|
m_cVirtual.SetCheck(pSectObj->fn_bIsVirtual());
|
|
m_cVirtual.EnableWindow(TRUE);
|
|
|
|
|
|
// Zmax
|
|
m_cZmaxCheck.EnableWindow(TRUE);
|
|
bZmax = (pSectObj->GetZmaxOfBorder() != MTH_C_InfinitMinus);
|
|
m_cZmaxCheck.SetCheck(bZmax);
|
|
m_cZmaxEdit.EnableWindow(bZmax);
|
|
if (bZmax)
|
|
csText.Format("%5.2f", (float) pSectObj->GetZmaxOfBorder());
|
|
else
|
|
csText = "";
|
|
m_cZmaxEdit.SetWindowText(csText);
|
|
|
|
// Zfar
|
|
m_cZfarCheck.EnableWindow(TRUE);
|
|
bZfar = (pSectObj->GetZfarInSector() != MTH_C_ZERO );
|
|
m_cZfarCheck.SetCheck(bZfar);
|
|
m_cZfarEdit.EnableWindow(bZfar);
|
|
if (bZfar)
|
|
csText.Format("%5.2f", (float) pSectObj->GetZfarInSector());
|
|
else
|
|
csText = "";
|
|
m_cZfarEdit.SetWindowText(csText);
|
|
|
|
// camera type
|
|
m_cCamTypeEdit.EnableWindow(TRUE);
|
|
csText.Format("%d", (int) pSectObj->GetCameraType());
|
|
m_cCamTypeEdit.SetWindowText(csText);
|
|
|
|
// priority
|
|
m_cPrioritySpin.EnableWindow(TRUE);
|
|
m_cPrioritySpin.SetPos(pSectObj->GetPriority() - C_SectorNormalPriority);
|
|
//csText.Format("%d", (int) pSectObj->GetPriority());
|
|
//m_cPriorityEdit.SetWindowText(csText);
|
|
}
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// SECT_DialogEdit Messages
|
|
//#################################################################################
|
|
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnSize (UINT nFlags, int cx, int cy)
|
|
{
|
|
RECT WindowPosition;
|
|
int ecx;
|
|
|
|
if (!m_bInitialised)
|
|
return;
|
|
|
|
// calculate name position
|
|
GetWindowRect(&WindowPosition);
|
|
ecx = WindowPosition.right - WindowPosition.left - 10;
|
|
ecx = (ecx < 60) ? 60 : ecx;
|
|
|
|
// move name
|
|
m_cComboSector.MoveWindow(5, 5, ecx-55, 20);
|
|
m_cVirtual.MoveWindow(ecx-45, 5, 50, 20);
|
|
|
|
// move Zmax
|
|
m_cZmaxCheck.MoveWindow(5, 30, 100, 20);
|
|
m_cZmaxEdit.MoveWindow(110, 30, 50, 20);
|
|
|
|
// move Zfar
|
|
m_cZfarCheck.MoveWindow(5, 50, 100, 20);
|
|
m_cZfarEdit.MoveWindow(110, 50, 50, 20);
|
|
|
|
// move camera
|
|
GetDlgItem(SECT_IDC_STATICCAM)->MoveWindow(5, 70, 100, 20);
|
|
m_cCamTypeEdit.MoveWindow(110, 70, 50, 20);
|
|
|
|
// move priority
|
|
GetDlgItem(SECT_IDC_STATICPRIORITY)->MoveWindow(5, 90, 100, 20);
|
|
m_cPriorityEdit.MoveWindow(110, 90, 30, 20);
|
|
m_cPrioritySpin.MoveWindow(140, 90, 20, 20);
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnSelChangeComboSector (void)
|
|
{
|
|
char szName[256];
|
|
|
|
if (!m_bInitialised)
|
|
return;
|
|
|
|
// name was changed ?
|
|
m_cComboSector.GetLBText(m_cComboSector.GetCurSel(), szName);
|
|
m_pEditedSector = m_pSectorInterface->GetSectorWithName(szName);
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
}
|
|
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnVirtual (void)
|
|
{
|
|
SECT_ModifVirtualSector *pModif;
|
|
Sector_Object *pSector;
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
// check if virtual status can be changed
|
|
if (m_pSectorInterface->fn_bCanChangeVirtual(m_pEditedSector, m_cVirtual.GetCheck()))
|
|
{
|
|
pModif = new SECT_ModifVirtualSector(m_pSectorInterface, E_tm_VirtualStatus,
|
|
m_pEditedSector, m_cVirtual.GetCheck());
|
|
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
|
|
}
|
|
else
|
|
m_cVirtual.SetCheck(((Sector_Object *)m_pEditedSector->GetObject())->fn_bIsVirtual());
|
|
}
|
|
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnZmaxCheck (void)
|
|
{
|
|
Sector_Object *pSector;
|
|
MTH_tdxReal xZmax;
|
|
CString csText;
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
// update sector
|
|
xZmax = pSector->GetZmaxOfSector();
|
|
pSector->SetZmaxOfBorder(xZmax);
|
|
|
|
// cancel Zmax
|
|
if (!m_cZmaxCheck.GetCheck())
|
|
{
|
|
// update sector
|
|
pSector->SetZmaxOfBorder(MTH_C_InfinitMinus);
|
|
// update dialog
|
|
m_cZmaxEdit.SetWindowText("");
|
|
m_cZmaxEdit.EnableWindow(FALSE);
|
|
}
|
|
// init Zmax
|
|
else
|
|
{
|
|
// update dialog
|
|
m_cZmaxEdit.EnableWindow(TRUE);
|
|
csText.Format("%5.2f", (float) pSector->GetZmaxOfBorder());
|
|
m_cZmaxEdit.SetWindowText(csText);
|
|
}
|
|
|
|
m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnEditZmax()
|
|
{
|
|
Sector_Object *pSector;
|
|
MTH_tdxReal xNewZmax;
|
|
char szVal[15];
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
if (m_cZmaxEdit.GetModify())
|
|
{
|
|
m_cZmaxEdit.GetWindowText(szVal, 15);
|
|
xNewZmax = (float) atof(szVal);
|
|
pSector->SetZmaxOfBorder(xNewZmax);
|
|
}
|
|
|
|
m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnZfarCheck (void)
|
|
{
|
|
Sector_Object *pSector;
|
|
CString csText;
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
// cancel Zmax
|
|
if (!m_cZfarCheck.GetCheck())
|
|
{
|
|
// update sector
|
|
pSector->SetZfarInSector(MTH_C_ZERO);
|
|
// update dialog
|
|
m_cZfarEdit.SetWindowText("");
|
|
m_cZfarEdit.EnableWindow(FALSE);
|
|
}
|
|
// init Zmax
|
|
else
|
|
{
|
|
// update dialog
|
|
m_cZfarEdit.EnableWindow(TRUE);
|
|
pSector->SetZfarInSector(C_xMinZfar);
|
|
csText.Format("%5.2f", (float) pSector->GetZfarInSector());
|
|
m_cZfarEdit.SetWindowText(csText);
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnEditZfar()
|
|
{
|
|
Sector_Object *pSector;
|
|
MTH_tdxReal xNewZfar;
|
|
CString csText;
|
|
char szVal[15];
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
if (m_cZfarEdit.GetModify())
|
|
{
|
|
m_cZfarEdit.GetWindowText(szVal, 15);
|
|
xNewZfar = (float) atof(szVal);
|
|
if (xNewZfar >= C_xMinZfar)
|
|
pSector->SetZfarInSector(xNewZfar);
|
|
else
|
|
{
|
|
csText.Format("%5.2f", (float) pSector->GetZfarInSector());
|
|
m_cZfarEdit.SetWindowText(csText);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnEditCamType()
|
|
{
|
|
Sector_Object *pSector;
|
|
char szVal[15];
|
|
int iNewType;
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
if (m_cCamTypeEdit.GetModify())
|
|
{
|
|
m_cCamTypeEdit.GetWindowText(szVal, 15);
|
|
iNewType = (int) atoi(szVal);
|
|
pSector->SetCameraType((char) iNewType);
|
|
}
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnPrioritySpin (NMHDR * pNMHDR, LRESULT * pResult)
|
|
{
|
|
Sector_Object *pSectObj = NULL;
|
|
LPNM_UPDOWN pUpDown;
|
|
int iFinalPos;
|
|
int iNewPriority;
|
|
|
|
// get action code
|
|
pUpDown = (LPNM_UPDOWN)pNMHDR;
|
|
if (pUpDown->hdr.code != UDN_DELTAPOS)
|
|
return;
|
|
|
|
// get parameters
|
|
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
// get final pos
|
|
iFinalPos = pUpDown->iPos + pUpDown->iDelta;
|
|
iNewPriority = iFinalPos + C_SectorNormalPriority;
|
|
|
|
// update sector
|
|
pSectObj->SetPriority((char) iNewPriority);
|
|
}
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
/*
|
|
void SECT_DialogEdit::OnEditPriority()
|
|
{
|
|
Sector_Object *pSector;
|
|
CString csText;
|
|
char szVal[15];
|
|
int iNewPriority;
|
|
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
if (m_cPriorityEdit.GetModify())
|
|
{
|
|
// get value
|
|
m_cPriorityEdit.GetWindowText(szVal, 15);
|
|
iNewPriority = (int) atoi(szVal);
|
|
// check limits
|
|
if (iNewPriority > C_SectorMaxPriority)
|
|
{
|
|
iNewPriority = C_SectorMaxPriority;
|
|
csText.Format("%d", iNewPriority);
|
|
m_cPriorityEdit.SetWindowText(csText);
|
|
}
|
|
if (iNewPriority < C_SectorMinPriority)
|
|
{
|
|
iNewPriority = C_SectorMinPriority;
|
|
csText.Format("%d", iNewPriority);
|
|
m_cPriorityEdit.SetWindowText(csText);
|
|
}
|
|
pSector->SetPriority((char) iNewPriority);
|
|
}
|
|
}
|
|
*/
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnDefault()
|
|
{
|
|
if (m_cZmaxEdit.GetModify())
|
|
{
|
|
OnEditZmax();
|
|
m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
|
|
m_cZmaxEdit.SetFocus();
|
|
}
|
|
|
|
if (m_cZfarEdit.GetModify())
|
|
{
|
|
OnEditZfar();
|
|
m_cZfarEdit.SetFocus();
|
|
}
|
|
|
|
if (m_cCamTypeEdit.GetModify())
|
|
{
|
|
OnEditCamType();
|
|
m_cCamTypeEdit.SetFocus();
|
|
}
|
|
|
|
/*
|
|
if (m_cPriorityEdit.GetModify())
|
|
{
|
|
OnEditPriority();
|
|
m_cPriorityEdit.SetFocus();
|
|
}
|
|
*/
|
|
}
|
|
|
|
|
|
/*----------------------------------------
|
|
----------------------------------------*/
|
|
void SECT_DialogEdit::OnDestroy (void)
|
|
{
|
|
// FOR TUTORIAL
|
|
TUT_M_vGetTutDll();
|
|
|
|
TUT_M_vUnregisterControl(m_cComboSector.m_hWnd);
|
|
TUT_M_vUnregisterControl(m_cVirtual.m_hWnd);
|
|
|
|
TUT_M_vUnregisterControl(m_cZmaxCheck.m_hWnd);
|
|
TUT_M_vUnregisterControl(m_cZmaxEdit.m_hWnd);
|
|
|
|
TUT_M_vUnregisterControl(m_cZfarCheck.m_hWnd);
|
|
TUT_M_vUnregisterControl(m_cZfarEdit.m_hWnd);
|
|
|
|
TUT_M_vUnregisterControl(m_cCamTypeEdit.m_hWnd);
|
|
|
|
TUT_M_vUnregisterControl(m_cPrioritySpin.m_hWnd);
|
|
// END TUTORIAL
|
|
|
|
CFormView::OnDestroy();
|
|
}
|