reman3/Rayman_X/cpa/tempgrp/OSC/Src/SECdEdit.cpp

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();
}