reman3/Rayman_X/cpa/tempgrp/Ctl/Src/Dialogs/CTL_DgME.cpp

350 lines
12 KiB
C++

// EDACDgME.cpp : implementation file
/////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "CTL_DgME.hpp"
#include "Controls\CTL_Ctl.hpp"
#include "Others\CTL_Mask.hpp"
#include "Data\CTL_DatM.hpp"
#include "Others\CTL_Pri.hpp"
//External Modules
#include "CTL_ErO.hpp"
#include "IncTUT.h"
//End of External Modules
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define EdActors_C_FirstIDForListBoxCheckButtons 1000
/////////////////////////////////////////////////////////////////////////////
// CTL_DialogMaskedDataEdition dialog
BEGIN_MESSAGE_MAP(CTL_DialogMaskedDataEdition, CDialog)
//{{AFX_MSG_MAP(CTL_DialogMaskedDataEdition)
ON_WM_DRAWITEM()
ON_BN_CLICKED(IDC_BUTTON_ALL_MASKS, OnButtonAllMasks)
ON_BN_CLICKED(IDC_BUTTON_NO_MASK, OnButtonNoMask)
ON_BN_CLICKED(IDC_BUTTON_INVERT_MASKS, OnButtonInvertMasks)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//***************************************************************************
CTL_DialogMaskedDataEdition::CTL_DialogMaskedDataEdition(CTL_Editor_Control *_pclParentControl,
CWnd* _pParent /*= NULL*/)
: CDialog(CTL_DialogMaskedDataEdition::IDD, _pParent)
{
hOldInstance = AfxGetResourceHandle();
AfxSetResourceHandle(CTL_g_hModule);
//{{AFX_DATA_INIT(CTL_DialogMaskedDataEdition)
//}}AFX_DATA_INIT
m_pri_pclParentControl = _pclParentControl;
m_csDataName = m_pri_pclParentControl->m_fn_pclGetEditedData()->m_pub_fn_csGetDataName();
m_pri_pclMaskDescriptor = ((CTL_Editor_MaskedData *)m_pri_pclParentControl->m_fn_pclGetEditedData())->m_pub_fn_pclGetMaskdescriptor();
}
//***************************************************************************
CTL_DialogMaskedDataEdition::~CTL_DialogMaskedDataEdition()
{
AfxSetResourceHandle(hOldInstance);
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTL_DialogMaskedDataEdition)
DDX_Text(pDX, IDC_STATIC_DATA_NAME, m_csDataName);
//}}AFX_DATA_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CTL_DialogMaskedDataEdition message handlers
//***************************************************************************
BOOL CTL_DialogMaskedDataEdition::OnInitDialog()
{
CDialog::OnInitDialog();
//Fills list box with masks
CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_MASKS);
CTL_Editor_Mask *pclCurrentMask;
short wIndex;
POSITION pos = m_pri_pclMaskDescriptor->GetHeadPosition();
while ( pos != NULL )
{
pclCurrentMask = m_pri_pclMaskDescriptor->GetNext(pos);
struct m_pri_stMaskInListBox *p_stNewMaskForLB = new struct m_pri_stMaskInListBox;
p_stNewMaskForLB->st_m_pclButton = NULL;
p_stNewMaskForLB->st_m_Mask = pclCurrentMask;
p_stNewMaskForLB->st_m_MaskIsOn = m_pri_fn_bDataHasThisMask(pclCurrentMask->m_pub_fn_ulGetMaskValue());
wIndex = pclListBox->AddString(pclCurrentMask->m_pub_fn_csGetString());
if ( wIndex != LB_ERR )
pclListBox->SetItemDataPtr(wIndex, (void *)p_stNewMaskForLB);
}
#ifndef CTL_WITH_NO_TUT
//////////////
//////////////
//Registers for TUT Module
//Registers in TUT
if ( CTL_p_fn_vRegisterControl != NULL )
{
CTL_p_fn_vRegisterControl(GetDlgItem(IDC_LIST_MASKS)->m_hWnd, "CTL_MaskEditionDialog_ListBox", TUT_e_ListBox);
CTL_p_fn_vRegisterControl(GetDlgItem(IDC_BUTTON_ALL_MASKS)->m_hWnd, "CTL_MaskEditionDialog_AllMasksButton", TUT_e_Button);
CTL_p_fn_vRegisterControl(GetDlgItem(IDC_BUTTON_NO_MASK)->m_hWnd, "CTL_MaskEditionDialog_NoMaskButton", TUT_e_Button);
CTL_p_fn_vRegisterControl(GetDlgItem(IDC_BUTTON_INVERT_MASKS)->m_hWnd, "CTL_MaskEditionDialog_InvertButton", TUT_e_Button);
CTL_p_fn_vRegisterControl(GetDlgItem(IDOK)->m_hWnd, "CTL_MaskEditionDialog_OKButton", TUT_e_Button);
CTL_p_fn_vRegisterControl(GetDlgItem(IDCANCEL)->m_hWnd, "CTL_MaskEditionDialog_CancelButton", TUT_e_Button);
}
//End of Registers for TUT Module
//////////////
#endif //CTL_WITH_NO_TUT
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnDestroy()
{
#ifndef CTL_WITH_NO_TUT
//////////////
//////////////
//UnRegisters for TUT Module
if ( CTL_p_fn_bUnregisterControl != NULL )
{
CTL_p_fn_bUnregisterControl(GetDlgItem(IDC_LIST_MASKS)->m_hWnd);
CTL_p_fn_bUnregisterControl(GetDlgItem(IDC_BUTTON_ALL_MASKS)->m_hWnd);
CTL_p_fn_bUnregisterControl(GetDlgItem(IDC_BUTTON_NO_MASK)->m_hWnd);
CTL_p_fn_bUnregisterControl(GetDlgItem(IDC_BUTTON_INVERT_MASKS)->m_hWnd);
CTL_p_fn_bUnregisterControl(GetDlgItem(IDOK)->m_hWnd);
CTL_p_fn_bUnregisterControl(GetDlgItem(IDCANCEL)->m_hWnd);
}
//End of UnRegisters for TUT Module
//////////////
#endif //CTL_WITH_NO_TUT
CDialog::OnDestroy();
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnOK()
{
//Reads the selected Masks and updates the Data
CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_MASKS);
struct m_pri_stMaskInListBox *p_stCurrentNewMaskForLB;
short wCurrentIndex = 0;
for (wCurrentIndex; wCurrentIndex < pclListBox->GetCount(); wCurrentIndex ++ )
{
p_stCurrentNewMaskForLB = (struct m_pri_stMaskInListBox *)pclListBox->GetItemDataPtr(wCurrentIndex);
//If Button has been created, gets its state
if ( p_stCurrentNewMaskForLB->st_m_pclButton != NULL )
p_stCurrentNewMaskForLB->st_m_MaskIsOn = p_stCurrentNewMaskForLB->st_m_pclButton->GetCheck();
m_pri_fn_vSetDataWithMask(p_stCurrentNewMaskForLB->st_m_Mask->m_pub_fn_ulGetMaskValue(), p_stCurrentNewMaskForLB->st_m_MaskIsOn);
#ifndef CTL_WITH_NO_TUT
//////////////
//////////////
//UnRegisters for TUT Module
if ( (CTL_p_fn_bUnregisterControl != NULL) && (p_stCurrentNewMaskForLB->st_m_pclButton != NULL) )
CTL_p_fn_bUnregisterControl(p_stCurrentNewMaskForLB->st_m_pclButton->m_hWnd);
//End of UnRegisters for TUT Module
//////////////
#endif //CTL_WITH_NO_TUT
delete p_stCurrentNewMaskForLB;
}
m_pri_pclParentControl->m_fn_pclGetEditedData()->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER);
CDialog::OnOK();
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnCancel()
{
//Deletes buttons
CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_MASKS);
struct m_pri_stMaskInListBox *p_stCurrentNewMaskForLB;
short wCurrentIndex = 0;
for (wCurrentIndex; wCurrentIndex < pclListBox->GetCount(); wCurrentIndex ++ )
{
p_stCurrentNewMaskForLB = (struct m_pri_stMaskInListBox *)pclListBox->GetItemDataPtr(wCurrentIndex);
#ifndef CTL_WITH_NO_TUT
//////////////
//////////////
//UnRegisters for TUT Module
if ( (CTL_p_fn_bUnregisterControl != NULL) && (p_stCurrentNewMaskForLB->st_m_pclButton != NULL) )
CTL_p_fn_bUnregisterControl(p_stCurrentNewMaskForLB->st_m_pclButton->m_hWnd);
//End of UnRegisters for TUT Module
//////////////
#endif //CTL_WITH_NO_TUT
delete p_stCurrentNewMaskForLB;
}
CDialog::OnCancel();
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
ERROR_ASSERT( nIDCtl == IDC_LIST_MASKS );
if ( nIDCtl == IDC_LIST_MASKS )
{
ERROR_ASSERT( lpDrawItemStruct->CtlType == ODT_LISTBOX );
CDC *pclDC;
pclDC = pclDC->FromHandle(lpDrawItemStruct->hDC);
CRect crRect(lpDrawItemStruct->rcItem);
CFont *pclFont = GetFont();
pclDC->SelectObject(pclFont);
struct m_pri_stMaskInListBox *pclElement = (struct m_pri_stMaskInListBox *)lpDrawItemStruct->itemData;
if ( pclElement->st_m_pclButton == NULL )
{
//Creates the Check Button
pclElement->st_m_pclButton = new CButton;
CWnd *pclWnd;
pclWnd = pclWnd->FromHandle(lpDrawItemStruct->hwndItem);
pclElement->st_m_pclButton->Create( pclElement->st_m_Mask->m_pub_fn_csGetString(),
WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX,
lpDrawItemStruct->rcItem,
pclWnd,
EdActors_C_FirstIDForListBoxCheckButtons + lpDrawItemStruct->itemID);
pclElement->st_m_pclButton->SetFont(pclFont);
//Initializes Button's state
pclElement->st_m_pclButton->SetCheck( pclElement->st_m_MaskIsOn );
#ifndef CTL_WITH_NO_TUT
//////////////
//////////////
//Registers for TUT Module
if ( CTL_p_fn_vRegisterControl != NULL )
CTL_p_fn_vRegisterControl(pclElement->st_m_pclButton->m_hWnd,
CString("CTL_MaskEditionDialog_CheckBox_") + pclElement->st_m_Mask->m_pub_fn_csGetString(), TUT_e_ListBox);
//End of Registers for TUT Module
//////////////
#endif //CTL_WITH_NO_TUT
}
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnButtonAllMasks()
{
CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_MASKS);
struct m_pri_stMaskInListBox *p_stCurrentNewMaskForLB;
short wCurrentIndex = 0;
for (wCurrentIndex; wCurrentIndex < pclListBox->GetCount(); wCurrentIndex ++ )
{
p_stCurrentNewMaskForLB = (struct m_pri_stMaskInListBox *)pclListBox->GetItemDataPtr(wCurrentIndex);
p_stCurrentNewMaskForLB->st_m_MaskIsOn = TRUE;
if ( p_stCurrentNewMaskForLB->st_m_pclButton != NULL )
p_stCurrentNewMaskForLB->st_m_pclButton->SetCheck(p_stCurrentNewMaskForLB->st_m_MaskIsOn);
}
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnButtonNoMask()
{
CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_MASKS);
struct m_pri_stMaskInListBox *p_stCurrentNewMaskForLB;
short wCurrentIndex = 0;
for (wCurrentIndex; wCurrentIndex < pclListBox->GetCount(); wCurrentIndex ++ )
{
p_stCurrentNewMaskForLB = (struct m_pri_stMaskInListBox *)pclListBox->GetItemDataPtr(wCurrentIndex);
p_stCurrentNewMaskForLB->st_m_MaskIsOn = FALSE;
if ( p_stCurrentNewMaskForLB->st_m_pclButton != NULL )
p_stCurrentNewMaskForLB->st_m_pclButton->SetCheck(p_stCurrentNewMaskForLB->st_m_MaskIsOn);
}
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::OnButtonInvertMasks()
{
CListBox *pclListBox = (CListBox *)GetDlgItem(IDC_LIST_MASKS);
struct m_pri_stMaskInListBox *p_stCurrentNewMaskForLB;
short wCurrentIndex = 0;
for (wCurrentIndex; wCurrentIndex < pclListBox->GetCount(); wCurrentIndex ++ )
{
p_stCurrentNewMaskForLB = (struct m_pri_stMaskInListBox *)pclListBox->GetItemDataPtr(wCurrentIndex);
p_stCurrentNewMaskForLB->st_m_MaskIsOn = !p_stCurrentNewMaskForLB->st_m_MaskIsOn;
if ( p_stCurrentNewMaskForLB->st_m_pclButton != NULL )
p_stCurrentNewMaskForLB->st_m_pclButton->SetCheck(p_stCurrentNewMaskForLB->st_m_MaskIsOn);
}
}
//***************************************************************************
BOOL CTL_DialogMaskedDataEdition::m_pri_fn_bDataHasThisMask(unsigned long _ulMaskValue)
{
//CPA2 Stegaru Cristian 98/06/26
unsigned long ulCurrentDataValue = ((CTL_Editor_MaskedData *)m_pri_pclParentControl->m_fn_pclGetEditedData())->mfn_ulGetCurrentValue ();
//End CPA2 Stegaru Cristian 98/06/26
return ( (ulCurrentDataValue & _ulMaskValue) != 0 );
}
//***************************************************************************
void CTL_DialogMaskedDataEdition::m_pri_fn_vSetDataWithMask(unsigned long _ulMaskValue, BOOL _bMaskOn)
{
//CPA2 Stegaru Cristian 98/06/26
unsigned long ulCurrentDataValue = ((CTL_Editor_MaskedData *)m_pri_pclParentControl->m_fn_pclGetEditedData())->mfn_ulGetCurrentValue ();
//End CPA2 Stegaru Cristian 98/06/26
if ( _bMaskOn )
{
if ( !m_pri_fn_bDataHasThisMask(_ulMaskValue) )
ulCurrentDataValue += _ulMaskValue;
}
else
{
if ( m_pri_fn_bDataHasThisMask(_ulMaskValue) )
ulCurrentDataValue -= _ulMaskValue;
}
//CPA2 Stegaru Cristian 98/06/26
((CTL_Editor_MaskedData *)m_pri_pclParentControl->m_fn_pclGetEditedData())->mfn_ulSetCurrentValue (ulCurrentDataValue);
//End CPA2 Stegaru Cristian 98/06/26
m_pri_pclParentControl->m_fn_pclGetEditedData()->m_fn_vUpdateMotorData(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER, 0);
}