reman3/Rayman_X/cpa/tempgrp/OCA/src/compprop.cpp

235 lines
7.5 KiB
C++

// compprop.cpp : implementation file
//
#include "stdafx.h"
#include "acp_base.h"
#include "camresrc.h"
#include "compprop.hpp"
#include "pagetarget.hpp"
#include "pagerotcenter.hpp"
#include "camera.hpp"
#include "caminter.hpp"
#define M_GetDLL(Camera) ((Camera_Interface*)((Camera)->GetEditor()))
#define M_GetAxisCombo() ((CComboBox*)GetDlgItem(IDC_COMBO_AXIS))
/////////////////////////////////////////////////////////////////////////////
// CompleteProperties dialog
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
CompleteProperties::CompleteProperties(Camera* p_oCamera,CWnd* pParent /*=NULL*/)
: CDialog(CompleteProperties::IDD, pParent),
m_oTargetPage(p_oCamera),m_oRotCenterPage(p_oCamera),m_oGeneralPage(p_oCamera)
{
//{{AFX_DATA_INIT(CompleteProperties)
m_csTypeName = _T("");
m_csCameraName = _T("");
//}}AFX_DATA_INIT
m_p_oCamera = p_oCamera;
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void CompleteProperties::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CompleteProperties)
DDX_Control(pDX, IDC_TAB_PROPERTIES, m_oTabControl);
DDX_Text(pDX, IDC_EDIT_TYPE, m_csTypeName);
DDX_Text(pDX, IDC_EDIT_NAME, m_csCameraName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CompleteProperties, CDialog)
//{{AFX_MSG_MAP(CompleteProperties)
ON_NOTIFY(TCN_SELCHANGING, IDC_TAB_PROPERTIES, OnSelchangingTabProperties)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB_PROPERTIES, OnSelchangeTabProperties)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CompleteProperties message handlers
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
BOOL CompleteProperties::OnInitDialog()
{
TC_ITEM stTabItem;
CRect oRect;
tdeDisplayReferential eDisplayMode;
CDialog::OnInitDialog();
// get the display rect
GetDlgItem(IDC_STATIC_PAGEPOS)->GetWindowRect(&oRect);
ScreenToClient(&oRect);
// create the two pages
m_oTargetPage.Create(IDD_PROPPAGE_TARGET,this);
m_oRotCenterPage.Create(IDD_PROPPAGE_ROTATIONCENTER,this);
m_oGeneralPage.Create(IDD_PROPPAGE_GENERAL,this);
// create the tabs
stTabItem.mask = TCIF_TEXT|TCIF_PARAM ;
stTabItem.pszText = "General";
stTabItem.lParam = (LPARAM) &m_oGeneralPage;
m_oTabControl.InsertItem(0,&stTabItem);
stTabItem.mask = TCIF_TEXT|TCIF_PARAM ;
stTabItem.pszText = "Target";
stTabItem.lParam = (LPARAM) &m_oTargetPage;
m_oTabControl.InsertItem(1,&stTabItem);
stTabItem.mask = TCIF_TEXT|TCIF_PARAM ;
stTabItem.pszText = "Rotation Center";
stTabItem.lParam = (LPARAM) &m_oRotCenterPage;
m_oTabControl.InsertItem(2,&stTabItem);
// move the pages at the right place
m_oTargetPage.SetWindowPos(&wndTop,oRect.left,oRect.top,0,0,SWP_NOSIZE);
m_oRotCenterPage.SetWindowPos(&wndTop,oRect.left,oRect.top,0,0,SWP_NOSIZE);
m_oGeneralPage.SetWindowPos(&wndTop,oRect.left,oRect.top,0,0,SWP_NOSIZE);
// activate the first tab
m_oTabControl.SetCurSel(0);
m_oGeneralPage.ShowWindow(SW_SHOWNORMAL);
// put the type name of the camera
m_csTypeName = (m_p_oCamera->GetCameraType() == InertCamera)? "Editor Camera" : "Actor Camera" ;
// put the name of the camera
m_csCameraName = m_p_oCamera->GetName();
// update drawing
UpdateData(FALSE);
eDisplayMode = M_GetDLL(m_p_oCamera) -> GetReferentialDisplayMode();
if( eDisplayMode == DisplayNone )
M_GetAxisCombo() -> SelectString(-1,"No");
else if( eDisplayMode == DisplayDownLeft )
M_GetAxisCombo() -> SelectString(-1,"Down Left");
else if( eDisplayMode == DisplayDownRight)
M_GetAxisCombo() -> SelectString(-1,"Down Right");
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void CompleteProperties::OnSelchangingTabProperties(NMHDR* pNMHDR, LRESULT* pResult)
{
int index;
TC_ITEM stTabItem;
PageBase *p_oPage;
stTabItem.mask = TCIF_PARAM ;
index = TabCtrl_GetCurSel(pNMHDR->hwndFrom);
m_oTabControl.GetItem(index,&stTabItem);
p_oPage = (PageBase*)stTabItem.lParam;
if (p_oPage->IsPageValid())
{
p_oPage->ShowWindow(SW_HIDE);
p_oPage->MakeChangesAvailable();
*pResult = 0;
}
else
{
*pResult = TRUE;
}
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void CompleteProperties::OnSelchangeTabProperties(NMHDR* pNMHDR, LRESULT* pResult)
{
int index;
TC_ITEM stTabItem;
PageBase *p_oPage;
stTabItem.mask = TCIF_PARAM ;
index = TabCtrl_GetCurSel(pNMHDR->hwndFrom);
m_oTabControl.GetItem(index,&stTabItem);
p_oPage = (PageBase*)stTabItem.lParam;
p_oPage->ShowWindow(SW_SHOWNORMAL);
*pResult = 0;
}
//********************************************************************************************************
//********************************************************************************************************
//********************************************************************************************************
void CompleteProperties::OnOK()
{
int index,i;
TC_ITEM stTabItem;
PageBase *p_oPage;
UpdateData(TRUE);
stTabItem.mask = TCIF_PARAM ;
// look if all tabs are valid
//beginning with the active one
index = m_oTabControl.GetCurSel();
m_oTabControl.GetItem(index,&stTabItem);
p_oPage = (PageBase*)stTabItem.lParam;
if (!p_oPage->IsPageValid())
return;
// then all other ones
for (i=0; i<m_oTabControl.GetItemCount(); i++)
{
if (i != index)
{
m_oTabControl.GetItem(i,&stTabItem);
p_oPage = (PageBase*)stTabItem.lParam;
if (!p_oPage->IsPageValid())
{
m_oTabControl.SetCurSel(i);
return;
}
}
}
// ok, everything is valid
// so let's make changes
for (i=0; i<m_oTabControl.GetItemCount(); i++)
{
m_oTabControl.GetItem(i,&stTabItem);
p_oPage = (PageBase*)stTabItem.lParam;
p_oPage->MakeChangesAvailable();
p_oPage->DoUpdate();
}
// Axis Display
int iIndex = M_GetAxisCombo() -> GetCurSel();
if( iIndex != CB_ERR )
{
CString csText;
M_GetAxisCombo() -> GetLBText( iIndex, csText );
if( csText == "No" )
M_GetDLL(m_p_oCamera) -> SetReferentialDisplayMode( DisplayNone );
else if( csText == "Down Left" )
M_GetDLL(m_p_oCamera) -> SetReferentialDisplayMode( DisplayDownLeft );
else if( csText == "Down Right" )
M_GetDLL(m_p_oCamera) -> SetReferentialDisplayMode( DisplayDownRight );
}
CDialog::OnOK();
}