reman3/Rayman_X/cpa/tempgrp/Owp/src/linkdia.cpp

373 lines
12 KiB
C++

/*
///////////////////////////////////////////////////////////////////////////////////////////////////
// Description : LinkDia.cpp
//
// Dialog edition the ways
//
///////////////////////////////////////////////////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// Creation date: 21 jan 1997 Author: J Thénoz
///////////////////////////////////////////////////////////////////////////////////////////////////
// Modification date: Author:
//
//
//
//
///////////////////////////////////////////////////////////////////////////////////////////////////
*/
//ANNECY Shaitan Nettoyage (12/05/98) {
/*
#include "stdafx.h"
#include "acp_base.h"
#include "resource.h"
#include "incitf.h"
#include "incgam.h"
#include "incai.h"
#include "incGli.h"
#include "WpObj.hpp"
#include "WayObj.hpp"
#include "LinkObj.hpp"
#include "LinkDia.hpp"
#include "LkBezDia.h"
#include "x:/cpa/main/inc/_EditId.h"
#include "tut.h"
/////////////////////////////////////////////////////////////////////////////
// DiaLink
IMPLEMENT_DYNCREATE(DiaLink, CFormView)
DiaLink::DiaLink()
: CFormView(DiaLink::IDD)
{
//{{AFX_DATA_INIT(DiaLink)
m_szLinkName = _T("");
m_oSpeedMode = _T("");
m_fSpeed1 = 0.0f;
m_fSpeed2 = 0.0f;
m_fSpeed3 = 0.0f;
//}}AFX_DATA_INIT
m_poLink = NULL;
m_pSpecificDialog = NULL;
}
DiaLink::~DiaLink()
{
}
void DiaLink::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DiaLink)
DDX_CBString(pDX, IDC_LINK_COMBO, m_szLinkName);
DDV_MaxChars(pDX, m_szLinkName, 15);
DDX_CBString(pDX, IDC_LINK_SPEED_COMBO, m_oSpeedMode);
DDV_MaxChars(pDX, m_oSpeedMode, 15);
DDX_Text(pDX, IDC_LINK_SPEED1_EDIT, m_fSpeed1);
DDV_MinMaxFloat(pDX, m_fSpeed1, 0.f, 9999.99f);
DDX_Text(pDX, IDC_LINK_SPEED2_EDIT, m_fSpeed2);
DDV_MinMaxFloat(pDX, m_fSpeed2, 0.f, 9999.99f);
DDX_Text(pDX, IDC_LINK_SPEED3_EDIT, m_fSpeed3);
DDV_MinMaxFloat(pDX, m_fSpeed3, 0.f, 9999.99f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DiaLink, CFormView)
//{{AFX_MSG_MAP(DiaLink)
ON_CBN_SELCHANGE(IDC_LINK_COMBO, OnSelchangeLinkCombo)
ON_CBN_SELCHANGE(IDC_LINK_SPEED_COMBO, OnSelchangeLinkSpeedCombo)
ON_EN_KILLFOCUS(IDC_LINK_SPEED1_EDIT, OnKillfocusLinkSpeed1Edit)
ON_EN_KILLFOCUS(IDC_LINK_SPEED2_EDIT, OnKillfocusLinkSpeed2Edit)
ON_EN_KILLFOCUS(IDC_LINK_SPEED3_EDIT, OnKillfocusLinkSpeed3Edit)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void DiaLink::fn_vInitDialog (void)
{
POSITION xPos;
tdst_LinkObject* pstDefLink;
CComboBox* pComboLink = (CComboBox*) GetDlgItem (IDC_LINK_COMBO);
CComboBox* pComboSpeed = (CComboBox*) GetDlgItem (IDC_LINK_SPEED_COMBO);
for ( pstDefLink=Link::fn_pGetListObject()->GetHeadElement(xPos); pstDefLink; pstDefLink=Link::fn_pGetListObject()->GetNextElement(xPos) )
pComboLink->AddString (pstDefLink->szName);
pComboLink->EnableWindow (FALSE);
pComboSpeed->AddString ("none");
pComboSpeed->AddString ("constant");
pComboSpeed->AddString ("linear");
pComboSpeed->AddString ("sinus");
GetDlgItem (IDC_LINK_SPEED_GROUPBOX)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED_COMBO)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED1_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED2_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED1_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED2_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_EDIT)->EnableWindow (FALSE);
}
void DiaLink::fn_vEdit (Link* poLink)
{
if (m_poLink==poLink) return;
// Aspect of the dialog
if (!m_poLink && poLink)
{
GetDlgItem (IDC_LINK_COMBO)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED_GROUPBOX)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED_COMBO)->EnableWindow (TRUE);
}
else if (m_poLink && !poLink)
{
GetDlgItem (IDC_LINK_COMBO)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED_GROUPBOX)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED_COMBO)->EnableWindow (FALSE);
}
if (m_poLink) m_poLink->fn_vStopEdit ();
m_poLink=poLink;
if (m_poLink) m_poLink->fn_vStartEdit ();
if (m_poLink)
{
ACP_tdstDynaParam stDynParam;
WP_fnv_Link_GetDynamicParameter ( (WP_tdhLink)(m_poLink->GetEngineStruct()), &stDynParam );
unsigned char ucDynamicType;
float dSpeed1, dSpeed2, dSpeed3;
GetParent()->SetWindowText ( "" );
m_szLinkName = m_poLink->fn_pGetName ();
fn_vDynamicObject_GetParams( &stDynParam, &ucDynamicType, &dSpeed1, &dSpeed2, &dSpeed3);
m_fSpeed1 = dSpeed1;
m_fSpeed2 = dSpeed2;
m_fSpeed3 = dSpeed3;
switch (ucDynamicType)
{
case C_ucNone : m_oSpeedMode = CString ("none"); break;
case C_ucConst : m_oSpeedMode = CString ("constant"); break;
case C_ucLinear : m_oSpeedMode = CString ("linear"); break;
case C_ucSinus : m_oSpeedMode = CString ("sinus"); break;
default: ucDynamicType=C_ucNone;
m_oSpeedMode = CString ("none");
break;
}
UpdateData (FALSE);
fn_vDrawDynParamDialog ();
fn_vChangeDialog ();
}
else
{
GetParent()->SetWindowText ( "no link to edit" );
m_szLinkName = "";
m_oSpeedMode = CString ("");
GetDlgItem (IDC_LINK_SPEED1_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED2_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED3_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED1_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED2_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED1_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED2_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_EDIT)->EnableWindow (FALSE);
UpdateData (FALSE);
}
GetParent()->GetParent()->RedrawWindow (NULL, NULL, RDW_INVALIDATE|RDW_FRAME);
}
/////////////////////////////////////////////////////////////////////////////
// DiaLink diagnostics
#ifdef _DEBUG
void DiaLink::AssertValid() const
{
CFormView::AssertValid();
}
void DiaLink::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// DiaLink message handlers
void DiaLink::OnSelchangeLinkCombo(void)
{
UpdateData (TRUE);
Way* poParentWay = (Way*) (((CPA_SuperObject*)(m_poLink->GetSuperObject())->GetParent())->GetObject());
Link* pNewLink = Link::CloneLink ( poParentWay, m_poLink, m_szLinkName );
poParentWay->fn_bChangeLink ( m_poLink, pNewLink );
m_poLink = pNewLink;
fn_vChangeDialog ();
}
void DiaLink::fn_vChangeDialog (void)
{
RECT stRect;
GetDlgItem (IDC_DYNAMIC_DIALOG)->GetWindowRect( &stRect );
ScreenToClient( &stRect ) ;
if (m_pSpecificDialog)
{
m_poLink->fn_vFreeSpecificDialog (m_pSpecificDialog);
delete m_pSpecificDialog;
}
m_pSpecificDialog = m_poLink->fn_pGetSpecificDialog (this);
if (m_pSpecificDialog) m_pSpecificDialog->MoveWindow( &stRect, TRUE );
}
//--------------------------- Dynamic Param Edition
void DiaLink::fn_vSetDynParam (void)
{
ACP_tdstDynaParam stDynParam;
WP_fnv_Link_GetDynamicParameter ( (WP_tdhLink)(m_poLink->GetEngineStruct()), &stDynParam );
WP_tde_ucConnectionDynamicType eConnectionType;
unsigned char ucDynamicType;
UpdateData (TRUE);
if ( m_oSpeedMode=="none" ) { ucDynamicType=C_ucNone; eConnectionType=WP_ConDynType_ucNone; }
else if ( m_oSpeedMode=="constant" ) { ucDynamicType=C_ucConst; eConnectionType=WP_ConDynType_ucConstant; }
else if ( m_oSpeedMode=="linear" ) { ucDynamicType=C_ucLinear; eConnectionType=WP_ConDynType_ucLinear; }
else if ( m_oSpeedMode=="sinus" ) { ucDynamicType=C_ucSinus; eConnectionType=WP_ConDynType_ucSinus; }
fn_vDynamicObject_ChangeParams( &stDynParam, ucDynamicType, m_fSpeed1, m_fSpeed2, m_fSpeed3);
WP_fnv_Link_SetDynamicParameter ( (WP_tdhLink)(m_poLink->GetEngineStruct()), &stDynParam );
WP_fnv_Link_SetConnectionDynamicType ( (WP_tdhLink)(m_poLink->GetEngineStruct()), eConnectionType );
m_poLink->fn_vWayNotifySave ();
}
void DiaLink::fn_vDrawDynParamDialog (void)
{
UpdateData (TRUE);
if ( m_oSpeedMode=="none" )
{
GetDlgItem (IDC_LINK_SPEED1_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED2_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED3_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED1_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED2_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED1_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED2_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_EDIT)->EnableWindow (FALSE);
}
else if ( m_oSpeedMode=="constant" )
{
GetDlgItem (IDC_LINK_SPEED1_STATIC)->SetWindowText( "speed" );
GetDlgItem (IDC_LINK_SPEED2_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED3_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED1_STATIC)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED2_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED1_EDIT)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED2_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED3_EDIT)->EnableWindow (FALSE);
}
else if ( m_oSpeedMode=="linear" )
{
GetDlgItem (IDC_LINK_SPEED1_STATIC)->SetWindowText( "start speed" );
GetDlgItem (IDC_LINK_SPEED2_STATIC)->SetWindowText( "end speed" );
GetDlgItem (IDC_LINK_SPEED3_STATIC)->SetWindowText( "" );
GetDlgItem (IDC_LINK_SPEED1_STATIC)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED2_STATIC)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED3_STATIC)->EnableWindow (FALSE);
GetDlgItem (IDC_LINK_SPEED1_EDIT)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED2_EDIT)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED3_EDIT)->EnableWindow (FALSE);
}
else if ( m_oSpeedMode=="sinus" )
{
GetDlgItem (IDC_LINK_SPEED1_STATIC)->SetWindowText( "start angle" );
GetDlgItem (IDC_LINK_SPEED2_STATIC)->SetWindowText( "end angle" );
GetDlgItem (IDC_LINK_SPEED3_STATIC)->SetWindowText( "max speed" );
GetDlgItem (IDC_LINK_SPEED1_STATIC)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED2_STATIC)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED3_STATIC)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED1_EDIT)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED2_EDIT)->EnableWindow (TRUE);
GetDlgItem (IDC_LINK_SPEED3_EDIT)->EnableWindow (TRUE);
}
}
void DiaLink::OnSelchangeLinkSpeedCombo()
{
fn_vDrawDynParamDialog ();
fn_vSetDynParam ();
}
void DiaLink::OnKillfocusLinkSpeed1Edit()
{
fn_vSetDynParam ();
}
void DiaLink::OnKillfocusLinkSpeed2Edit()
{
fn_vSetDynParam ();
}
void DiaLink::OnKillfocusLinkSpeed3Edit()
{
fn_vSetDynParam ();
}
BOOL DiaLink::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
BOOL bCreate = CFormView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
TUT_M_vGetTutDll ();
TUT_M_vRegisterControl (m_hWnd , "OWP_LinkDialog" , TUT_e_Window);
TUT_M_vRegisterControlID (IDC_LINK_COMBO,"OWP_LinkTypeCombo",TUT_e_ComboBox);
TUT_M_vRegisterControlID (IDC_LINK_SPEED_COMBO,"OWP_LinkSpeedCombo",TUT_e_ComboBox);
TUT_M_vRegisterControlID (IDC_LINK_SPEED1_EDIT,"OWP_LinkSpeed1Edit",TUT_e_TextEdit);
TUT_M_vRegisterControlID (IDC_LINK_SPEED2_EDIT,"OWP_LinkSpeed2Edit",TUT_e_TextEdit);
TUT_M_vRegisterControlID (IDC_LINK_SPEED3_EDIT,"OWP_LinkSpeed3Edit",TUT_e_TextEdit);
return bCreate;
}
void DiaLink::OnDestroy()
{
TUT_M_vGetTutDll ();
TUT_M_vUnregisterControl (m_hWnd);
TUT_M_vUnregisterControlID (IDC_LINK_COMBO);
TUT_M_vUnregisterControlID (IDC_LINK_SPEED_COMBO);
TUT_M_vUnregisterControlID (IDC_LINK_SPEED1_EDIT);
TUT_M_vUnregisterControlID (IDC_LINK_SPEED2_EDIT);
TUT_M_vUnregisterControlID (IDC_LINK_SPEED3_EDIT);
}
*/
//ENDANNECY Shaitan Nettoyage }