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

367 lines
10 KiB
C++

/*
///////////////////////////////////////////////////////////////////////////////////////////////////
// Description : WPDia.cpp
//
// Dialog edition the waypoints
//
///////////////////////////////////////////////////////////////////////////////////////////////////
//
//
///////////////////////////////////////////////////////////////////////////////////////////////////
// Creation date: 21 jan 1997 Author: J Thénoz
///////////////////////////////////////////////////////////////////////////////////////////////////
// Modification date: Author:
//
//
//
//
///////////////////////////////////////////////////////////////////////////////////////////////////
*/
#include "stdafx.h"
#include "acp_base.h"
#include "resource.h"
#include "incitf.h"
#include "incgam.h"
#include "incai.h"
#include "WPObj.hpp"
//ANNECY Shaitan Nettoyage (12/05/98) {
/*
#include "WayObj.hpp"
#include "LinkObj.hpp"
#include "WayDia.hpp"
*/
//ENDANNECY Shaitan Nettoyage }
#include "WPDia.hpp"
#include "Inter.hpp"
#include "ogd.h"
#include "x:/cpa/main/inc/_EditId.h"
#include "tut.h"
IMPLEMENT_DYNCREATE ( DiaWP, CFormView );
/////////////////////////////////////////////////////////////////////////////
// DiaWP dialog
DiaWP::DiaWP(CWnd* pParent /*=NULL*/)
: CFormView(DiaWP::IDD)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); //IDI_SYMBOLICWP
m_bEditRadius=FALSE;
m_poWP = NULL;
}
void DiaWP::fn_vInitDialog ( void )
{
// init the radio buttons icons
((CButton*)GetDlgItem (IDC_SYMBOLICALWP_RADIO))->SetIcon( AfxGetApp()->LoadIcon(IDI_SYMBOLICWP) );
((CButton*)GetDlgItem (IDC_REALWP_RADIO))->SetIcon( AfxGetApp()->LoadIcon(IDI_REALWP) );
// desactivate all the controls
GetDlgItem (IDC_GLOBALDRAW_CHECK)->EnableWindow (FALSE);
GetDlgItem (IDC_SYMBOLICALWP_RADIO)->EnableWindow (FALSE);
GetDlgItem (IDC_REALWP_RADIO)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_COORD_CHECK)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_NAME_EDIT)->EnableWindow (FALSE);
}
// to edit a new waypoint
void DiaWP::fn_vEdit (WayPoint* poWP)
{
// Aspect of the dialog
if (!m_poWP && poWP)
{
// wake up
GetDlgItem (IDC_GLOBALDRAW_CHECK)->EnableWindow (TRUE);
GetDlgItem (IDC_SYMBOLICALWP_RADIO)->EnableWindow (TRUE);
GetDlgItem (IDC_REALWP_RADIO)->EnableWindow (TRUE);
GetDlgItem (IDC_WAYPOINT_COORD_CHECK)->EnableWindow (TRUE);
GetDlgItem (IDC_WAYPOINT_EDIT)->EnableWindow (TRUE);
GetDlgItem (IDC_WAYPOINT_TEXT)->EnableWindow (TRUE);
GetDlgItem (IDC_WAYPOINT_NAME_EDIT)->EnableWindow (TRUE);
}
else if (m_poWP && !poWP)
{
GetDlgItem (IDC_GLOBALDRAW_CHECK)->EnableWindow (FALSE);
GetDlgItem (IDC_SYMBOLICALWP_RADIO)->EnableWindow (FALSE);
GetDlgItem (IDC_REALWP_RADIO)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_COORD_CHECK)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_EDIT)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_TEXT)->EnableWindow (FALSE);
GetDlgItem (IDC_WAYPOINT_NAME_EDIT)->EnableWindow (FALSE);
}
m_poWP = poWP;
fn_vRefreshCoordinate();
if (poWP)
{
GetParent()->SetWindowText ( poWP->GetName() );
// set the style buttons
CheckRadioButton( IDC_SYMBOLICALWP_RADIO, IDC_REALWP_RADIO, poWP->fn_bIsRealDraw() ? IDC_REALWP_RADIO : IDC_SYMBOLICALWP_RADIO );
if (m_poWP->fn_bIsAlone())
{
GetDlgItem (IDC_WAYPOINT_ALONE_PICTURE)->ShowWindow( SW_SHOW );
GetDlgItem (IDC_WAYPOINT_WAY_PICTURE)->ShowWindow( SW_HIDE );
}
else
{
GetDlgItem (IDC_WAYPOINT_WAY_PICTURE)->ShowWindow( SW_SHOW );
GetDlgItem (IDC_WAYPOINT_ALONE_PICTURE)->ShowWindow( SW_HIDE );
}
GetDlgItem (IDC_WAYPOINT_COORD_CHECK)->EnableWindow (m_poWP->fn_pGetDynamicFather() ? TRUE : FALSE);
fn_vEditName ();
fn_vRefreshDialog ();
}
else
{
m_fRadius = 0.;
m_bStaticCoord = FALSE;
GetParent()->SetWindowText ( "no waypoint to edit" );
UpdateData (FALSE);
m_csWaypointName="";
UpdateData (FALSE);
}
GetParent()->GetParent()->RedrawWindow (NULL, NULL, RDW_INVALIDATE|RDW_FRAME);
}
void DiaWP::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(DiaWP)
DDX_Control(pDX, IDC_WAYPOINT_EDIT, m_EditWP);
DDX_Text(pDX, IDC_WAYPOINT_EDIT, m_fRadius);
DDV_MinMaxDouble(pDX, m_fRadius, 0., 99.99);
DDX_Check(pDX, IDC_WAYPOINT_COORD_CHECK, m_bStaticCoord);
DDX_Check(pDX, IDC_GLOBALDRAW_CHECK, m_bGlobalCheck);
DDX_Text(pDX, IDC_WAYPOINT_NAME_EDIT, m_csWaypointName);
DDV_MaxChars(pDX, m_csWaypointName, 50);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(DiaWP, CFormView)
//{{AFX_MSG_MAP(DiaWP)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_EN_KILLFOCUS(IDC_WAYPOINT_EDIT, OnKillfocusWaypointEdit)
ON_BN_CLICKED(IDC_WAYPOINT_COORD_CHECK, OnWaypointCoordCheck)
ON_EN_CHANGE(IDC_WAYPOINT_EDIT, OnChangeWaypointEdit)
ON_BN_CLICKED(IDC_REALWP_RADIO, OnRealwpRadio)
ON_BN_CLICKED(IDC_SYMBOLICALWP_RADIO, OnSymbolicalwpRadio)
ON_BN_CLICKED(IDC_GLOBALDRAW_CHECK, OnGlobaldrawCheck)
ON_WM_DESTROY()
ON_EN_KILLFOCUS(IDC_WAYPOINT_NAME_EDIT, OnKillfocusWaypointNameEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// DiaWP message handlers
/////////////////////////////////////////////////////////////////////////////
// DiaNetWP message handlers
void DiaWP::fn_vRefreshDialog (void)
{
m_fRadius = (float)(m_poWP->fn_xGetRadius());
m_bStaticCoord = m_poWP->fn_bGetCoordinate();
// change the radio buttons push
CheckRadioButton( IDC_SYMBOLICALWP_RADIO, IDC_REALWP_RADIO, m_poWP->fn_bIsGeneralRealDraw() ? IDC_REALWP_RADIO : IDC_SYMBOLICALWP_RADIO );
UpdateData (FALSE);
}
void DiaWP::fn_vRefreshCoordinate(void)
{
if (!m_poWP) return; // there's no waypoint to edit
//ANNECY Shaitan Nettoyage (12/05/98) {
// if (m_poWP->GetInterface()->fn_bWaypointInAWay(m_poWP)) GetDlgItem (IDC_WAYPOINT_COORD_CHECK)->EnableWindow (FALSE);
//ENDANNECY Shaitan Nettoyage }
else GetDlgItem (IDC_WAYPOINT_COORD_CHECK)->EnableWindow (TRUE);
}
void DiaWP::OnSysCommand(UINT nID, LPARAM lParam)
{
CFormView::OnSysCommand(nID, lParam);
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void DiaWP::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CFormView::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR DiaWP::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void DiaWP::OnKillfocusWaypointEdit()
{
if (!m_bEditRadius) return;
UpdateData (TRUE);
GLI_tdxValue xRadius = (GLI_tdxValue)m_fRadius;
if (xRadius == 0.0f)
xRadius = 0.001f;
m_poWP->fn_vSetRadius (&xRadius);
m_poWP->fn_vDrawNewRadius ();
m_bEditRadius=FALSE;
}
BOOL DiaWP::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
if (wParam==1)
{
OnKillfocusWaypointEdit();
OnKillfocusWaypointNameEdit();
}
return CFormView::OnCommand(wParam, lParam);
}
void DiaWP::OnWaypointCoordCheck()
{
m_poWP->fn_vChangeSystemCoordinate ();
}
void DiaWP::OnChangeWaypointEdit()
{
m_bEditRadius=TRUE;
}
// we want a real draw
void DiaWP::OnRealwpRadio()
{
m_poWP->fn_vSetGeneralRealDraw (TRUE);
fn_vDrawWP ();
}
void DiaWP::OnSymbolicalwpRadio()
{
m_poWP->fn_vSetGeneralRealDraw (FALSE);
fn_vDrawWP ();
}
void DiaWP::OnGlobaldrawCheck()
{
// set the memeber varaible
UpdateData (TRUE);
// change the status of the WP object
m_poWP->fn_vSetGlobalDraw (m_bGlobalCheck);
// change the radio buttons push
CheckRadioButton( IDC_SYMBOLICALWP_RADIO, IDC_REALWP_RADIO, m_poWP->fn_bIsGeneralRealDraw() ? IDC_REALWP_RADIO : IDC_SYMBOLICALWP_RADIO );
((Waypoint_Interface*)(m_poWP->GetInterface()))->fn_vDrawAllWP();
}
// draw all the WP that must be redraw
void DiaWP::fn_vDrawWP (void)
{
if (m_bGlobalCheck) ((Waypoint_Interface*)(m_poWP->GetInterface()))->fn_vDrawAllWP();
else m_poWP->fn_vDraw (); // draw the WP in his new mode
}
// Neme edition
void DiaWP::fn_vEditName (void)
{
m_csWaypointName = m_poWP->GetName();
}
void DiaWP::OnKillfocusWaypointNameEdit()
{
CString pOldName = m_csWaypointName;
UpdateData (TRUE);
if (pOldName == m_csWaypointName) return;
if (m_poWP->fn_eRename (m_csWaypointName)!=E_mc_None)
{
MessageBox ( m_csWaypointName+CString( " is already used."),"Attention",MB_ICONEXCLAMATION );
m_csWaypointName=pOldName;
UpdateData (FALSE);
}
else
{
m_poWP->GetInterface()->fn_vRefreshHierarchyList ();
//ANNECY Shaitan Nettoyage (12/05/98) {
/*
Way::fn_pGetDialog()->fn_vRefreshNameList ();
// notify all the ways using this waypoint
POSITION xPos;
Way* poWay;
for ( poWay=Way::fn_poGetListOfWay()->GetHeadElement(xPos); poWay; poWay=Way::fn_poGetListOfWay()->GetNextElement(xPos) )
if ( poWay->fn_iIsWayPointInNet ((WayPoint*)m_poWP)>=0 ) poWay->fn_vNotifySave ();
*/
//ENDANNECY Shaitan Nettoyage }
}
}
BOOL DiaWP::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_WaypointDialog" , TUT_e_Window);
TUT_M_vRegisterControlID (IDC_GLOBALDRAW_CHECK,"OWP_GlobalDraw",TUT_e_Button);
TUT_M_vRegisterControlID (IDC_SYMBOLICALWP_RADIO,"OWP_SymbolicalDraw",TUT_e_Button);
TUT_M_vRegisterControlID (IDC_REALWP_RADIO,"OWP_RealDraw",TUT_e_Button);
TUT_M_vRegisterControlID (IDC_WAYPOINT_COORD_CHECK,"OWP_Absolute",TUT_e_Button);
TUT_M_vRegisterControlID (IDC_WAYPOINT_EDIT,"OWP_WaypointRadiusEdit",TUT_e_TextEdit);
TUT_M_vRegisterControlID (IDC_WAYPOINT_NAME_EDIT,"OWP_WaypointNameEdit",TUT_e_TextEdit);
return bCreate;
}
void DiaWP::OnDestroy()
{
TUT_M_vGetTutDll ();
TUT_M_vUnregisterControl (m_hWnd);
TUT_M_vUnregisterControlID (IDC_GLOBALDRAW_CHECK);
TUT_M_vUnregisterControlID (IDC_SYMBOLICALWP_RADIO);
TUT_M_vUnregisterControlID (IDC_REALWP_RADIO);
TUT_M_vUnregisterControlID (IDC_WAYPOINT_COORD_CHECK);
TUT_M_vUnregisterControlID (IDC_WAYPOINT_EDIT);
TUT_M_vUnregisterControlID (IDC_WAYPOINT_NAME_EDIT);
}