382 lines
13 KiB
C++
382 lines
13 KiB
C++
// Implementation file for the definition of an enum characteristic
|
|
///////////////////////////////////////////////////////////////////////
|
|
#include "StdAfx.h"
|
|
|
|
#include "Controls\CTL_CtlE.hpp"
|
|
|
|
#include "Controls\CTL_BCtl.hpp"
|
|
#include "Data\CTL_DatE.hpp"
|
|
#include "WControls\CTL_WCBx.hpp"
|
|
#include "WControls\CTL_WSta.hpp"
|
|
#include "Others\CTL_EnLi.hpp"
|
|
#include "WControls\CTL_WCkB.hpp"
|
|
#include "Controls\CTL_Cnst.hpp"
|
|
|
|
//External Modules
|
|
#include "CTL_ErO.hpp"
|
|
//End of External Modules
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//**************************************************************************
|
|
//Constructor / Destructor
|
|
CTL_Editor_EnumControl::CTL_Editor_EnumControl(BOOL bReadOnly,
|
|
CTL_Editor_ControlList *_pclParentList,
|
|
CString _csControlName,
|
|
BOOL _bAcceptNameFromData, //ANNECY BBB
|
|
//Stefan Dumitrean 20-07-98 ( OAC buttons )
|
|
unsigned char ucInitialCurrentPair
|
|
//End Stefan Dumitrean 20-07-98 ( OAC buttons )
|
|
|
|
)
|
|
: CTL_Editor_Control(CTL_DATA_TYPE__ENUM,
|
|
bReadOnly,
|
|
CTL_SPACING_TYPE__SINGLE_LINE,
|
|
FALSE,
|
|
_pclParentList,
|
|
_csControlName,
|
|
_bAcceptNameFromData, //ANNECY BBB
|
|
//Stefan Dumitrean 20-07-98 ( OAC buttons )
|
|
ucInitialCurrentPair
|
|
//End Stefan Dumitrean 20-07-98 ( OAC buttons )
|
|
|
|
)
|
|
{
|
|
m_pclEnumDescriptor = NULL;
|
|
|
|
m_pclComboBox = NULL;
|
|
m_pclStatic = NULL;
|
|
|
|
m_pri_bMustSortNamesInComboBox = FALSE;
|
|
|
|
m_td_pri_fn_vBuildEnumDesciptor_CallBack = NULL;
|
|
}
|
|
|
|
//**************************************************************************
|
|
CTL_Editor_EnumControl::~CTL_Editor_EnumControl()
|
|
{
|
|
|
|
}
|
|
|
|
//Member functions
|
|
|
|
//**************************************************************************
|
|
//Function called to create associated control
|
|
BOOL CTL_Editor_EnumControl::m_fn_bCreateControl(CWnd *pclParentWnd)
|
|
{
|
|
BOOL bReturnValue = TRUE;
|
|
|
|
m_pclParentWnd = pclParentWnd;
|
|
|
|
m_pro_fn_bCreateBaseControls( C_ENUM_NAME_PERCENT_WIDTH,
|
|
40,
|
|
C_EDIT_HEIGHT);
|
|
|
|
//Creates the static control (Read only)
|
|
m_pclStatic = new CTL_Editor_Static("", CTL_STATIC_TYPE__FIELD_VALUE, 0, NULL, m_pclParentWnd);
|
|
#ifndef CTL_WITH_NO_TUT
|
|
m_pclStatic->m_pub_fn_vRegisterWindowsControl(m_pub_fn_csGetControlName() + " - Enum");
|
|
#endif //CTL_WITH_NO_TUT
|
|
|
|
CTL_Editor_BaseControl *pclBC;
|
|
pclBC = m_pclListOfBaseControls->m_pub_fn_pclAddControlAtTail(m_pclStatic,
|
|
m_pclStatic,
|
|
this,
|
|
CTL_BASE_CONTROL_DISPLAY_TYPE__NORMAL,
|
|
C_ENUM_BOX_PERCENT_WIDTH,
|
|
C_ENUM_BOX_MIN_WIDTH,
|
|
C_EDIT_HEIGHT,
|
|
!m_fn_bIsAlwaysReadOnly());
|
|
|
|
pclBC->m_pub_fn_vSetCanBeDisplayedCallBack(s_m_fn_bStaticCanBeDisplayed);
|
|
|
|
if ( !m_fn_bIsAlwaysReadOnly() )
|
|
{
|
|
//Creates the combo box
|
|
m_pclComboBox = new CTL_Editor_ComboBox(CTL_COMBO_BOX_TYPE__STANDARD,
|
|
WS_TABSTOP | (m_pri_bMustSortNamesInComboBox ? CBS_SORT : 0),
|
|
this,
|
|
m_pclParentWnd);
|
|
|
|
m_pclComboBox->m_pub_fn_vSetSelChanged_CallBack(s_m_fn_vComboBoxSelChanged);
|
|
m_pclComboBox->m_pub_fn_vSetDropDown_CallBack(s_m_fn_vComboBoxDroppedDown);
|
|
#ifndef CTL_WITH_NO_TUT
|
|
m_pclComboBox->m_pub_fn_vRegisterWindowsControl(m_pub_fn_csGetControlName() + " - Enum");
|
|
#endif //CTL_WITH_NO_TUT
|
|
|
|
pclBC = m_pclListOfBaseControls->m_pub_fn_pclAddControlAtTail(m_pclComboBox,
|
|
m_pclComboBox,
|
|
this,
|
|
CTL_BASE_CONTROL_DISPLAY_TYPE__NORMAL,
|
|
C_ENUM_BOX_PERCENT_WIDTH,
|
|
C_ENUM_BOX_MIN_WIDTH,
|
|
C_ENUM_COMBO_BOX_HEIGHT);
|
|
pclBC->m_pub_fn_vSetCanBeDisplayedCallBack(s_m_fn_bComboBoxCanBeDisplayed);
|
|
}
|
|
|
|
m_bControlCreated = bReturnValue;
|
|
|
|
return bReturnValue;
|
|
}
|
|
|
|
//**************************************************************************
|
|
//Function called to display the associated control of the char.
|
|
void CTL_Editor_EnumControl::m_fn_vDisplay()
|
|
{
|
|
m_pro_fn_vDisplayBaseControls();
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to update parent window in case of values changes.
|
|
void CTL_Editor_EnumControl::m_fn_vUpdateCurrentValue()
|
|
{
|
|
//Gets the new current value
|
|
if ( m_pclComboBox != NULL )
|
|
{
|
|
short wIndex = m_pclComboBox->GetCurSel();
|
|
if ( wIndex != CB_ERR )
|
|
{
|
|
CTL_Editor_EnumElement *pclNewSelectedElement = (CTL_Editor_EnumElement *)(m_pclComboBox->GetItemDataPtr(wIndex));
|
|
|
|
//CPA2 Stegaru Cristian 98/06/26
|
|
if ( ((CTL_Editor_EnumData *)m_pclData)->mfn_pGetCurrentValue () != pclNewSelectedElement )
|
|
//End CPA2 Stegaru Cristian 98/06/26
|
|
{
|
|
//CPA2 Stegaru Cristian 98/06/26
|
|
((CTL_Editor_EnumData *)m_pclData)->mfn_pSetCurrentValue (pclNewSelectedElement);
|
|
//End CPA2 Stegaru Cristian 98/06/26
|
|
}
|
|
}
|
|
}
|
|
|
|
m_fn_vUpdateParent(CTL_UPDATE_REASON__DATA_MODIFIED_BY_USER);
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to update parent window in case of values changes.
|
|
void CTL_Editor_EnumControl::m_fn_vUpdate(CTL_tdeUpdateReason _eReason /*= E_ur_NoReasonGiven*/,
|
|
long _lUserDefinedReason /*= 0*/)
|
|
{
|
|
//Read/Write
|
|
//Updates the combo box
|
|
//CPA2 Stegaru Cristian 98/06/26
|
|
CTL_Editor_EnumElement *pclSearchedElement = ((CTL_Editor_EnumData *)m_pclData)->mfn_pGetCurrentValue ();
|
|
//End CPA2 Stegaru Cristian 98/06/26
|
|
CTL_Editor_EnumElement *pclCurrentComboValue;
|
|
BOOL bFound = FALSE;
|
|
if ( m_pclComboBox )
|
|
{
|
|
short wIndex = m_pclComboBox->GetCurSel();
|
|
for ( wIndex = 0; (wIndex < m_pclComboBox->GetCount()) && (!bFound); wIndex ++ )
|
|
{
|
|
pclCurrentComboValue = (CTL_Editor_EnumElement *)(m_pclComboBox->GetItemDataPtr(wIndex));
|
|
bFound = ( pclSearchedElement == pclCurrentComboValue );
|
|
}
|
|
|
|
if ( bFound )
|
|
m_pclComboBox->SetCurSel(--wIndex);
|
|
}
|
|
|
|
//CallBack
|
|
m_pclData->m_fn_vDataHasBeenChanged(_eReason, _lUserDefinedReason);
|
|
|
|
//Read Only
|
|
//CPA2 Stegaru Cristian 98/06/26
|
|
if ( (m_pclStatic != NULL) && (((CTL_Editor_EnumData *)m_pclData)->mfn_pGetCurrentValue () != NULL) )
|
|
m_pclStatic->m_fn_vSetTextToDisplay(((CTL_Editor_EnumData *)m_pclData)->mfn_pGetCurrentValue ()->m_pub_fn_csGetElementName());
|
|
//End CPA2 Stegaru Cristian 98/06/26
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to update parent window in case of values changes.
|
|
void CTL_Editor_EnumControl::m_fn_vUpdateParent(CTL_tdeUpdateReason eReason,
|
|
long _lUserDefinedReason /*= 0*/)
|
|
{
|
|
//Updates motor's data
|
|
m_pclData->m_fn_vUpdateMotorData(eReason, _lUserDefinedReason);
|
|
|
|
//Updates parent if necessary(Watch a.s.o.)
|
|
CTL_Editor_Control::m_fn_vUpdateParent(eReason, _lUserDefinedReason);
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to make control Read Only
|
|
void CTL_Editor_EnumControl::m_fn_vMakeReadOnly()
|
|
{
|
|
if ( !m_fn_bIsReadOnly() )
|
|
{
|
|
m_bIsReadOnly = TRUE;
|
|
m_fn_vHide();
|
|
}
|
|
}
|
|
|
|
//************************************************************************
|
|
//Function called to make control Read-Write
|
|
void CTL_Editor_EnumControl::m_fn_vMakeReadWrite()
|
|
{
|
|
if ( !m_fn_bIsAlwaysReadOnly() )
|
|
{
|
|
if ( m_fn_bIsReadOnly() )
|
|
{
|
|
m_bIsReadOnly = FALSE;
|
|
m_fn_vHide();
|
|
}
|
|
}
|
|
}
|
|
|
|
//************************************************************************
|
|
void CTL_Editor_EnumControl::m_fn_vGetNewEnumDescriptor()
|
|
{
|
|
//Gets the EnumDescriptor of the Data
|
|
m_pclEnumDescriptor = ((CTL_Editor_EnumData *)m_fn_pclGetEditedData())->m_fn_pclGetEnumDescriptor();
|
|
|
|
ERROR_ASSERT( m_pclEnumDescriptor != NULL );
|
|
|
|
//Fills the combo box
|
|
if ( m_pclComboBox != NULL )
|
|
{
|
|
m_pclComboBox->ResetContent();
|
|
|
|
CTL_Editor_EnumElement *pclElement;
|
|
POSITION pos = m_pclEnumDescriptor->GetHeadPosition();
|
|
while ( pos != NULL )
|
|
{
|
|
pclElement = m_pclEnumDescriptor->GetNext(pos);
|
|
short wIndex = m_pclComboBox->AddString(pclElement->m_pub_fn_csGetElementName());
|
|
m_pclComboBox->SetItemDataPtr(wIndex, (void *)(pclElement));
|
|
}
|
|
}
|
|
}
|
|
|
|
//************************************************************************
|
|
void CTL_Editor_EnumControl::m_pub_fn_vBuildEnumDescriptor()
|
|
{
|
|
if( ( m_pclData != NULL )
|
|
&& ( m_pclComboBox != NULL )
|
|
)
|
|
{
|
|
CTL_Editor_EnumDescriptor *pclEnumDescriptor = ((CTL_Editor_EnumData *)m_pclData)->m_fn_pclGetEnumDescriptor();
|
|
ERROR_ASSERT( pclEnumDescriptor != NULL );
|
|
|
|
//Remembers old value
|
|
CString csOldValue;
|
|
int iCurSel = m_pclComboBox->GetCurSel();
|
|
if ( iCurSel != CB_ERR )
|
|
m_pclComboBox->GetLBText(iCurSel, csOldValue);
|
|
|
|
//Constructs the new list, by CallBack if it exists
|
|
if ( m_td_pri_fn_vBuildEnumDesciptor_CallBack != NULL )
|
|
m_td_pri_fn_vBuildEnumDesciptor_CallBack(this, pclEnumDescriptor);
|
|
|
|
//Clears the ComboBox
|
|
m_pclComboBox->ResetContent();
|
|
|
|
//Updates ComboBox's content
|
|
BOOL bOldSelectionFound = FALSE;
|
|
short wIndex;
|
|
CTL_Editor_EnumElement *pclCurrentElement;
|
|
POSITION pos = m_pclEnumDescriptor->GetHeadPosition();
|
|
while ( pos != NULL )
|
|
{
|
|
pclCurrentElement = m_pclEnumDescriptor->GetNext(pos);
|
|
|
|
wIndex = m_pclComboBox->AddString(pclCurrentElement->m_pub_fn_csGetElementName());
|
|
m_pclComboBox->SetItemDataPtr(wIndex, (void *)(pclCurrentElement));
|
|
|
|
if( pclCurrentElement->m_pub_fn_csGetElementName().CompareNoCase(csOldValue) == 0 )
|
|
{
|
|
m_pclComboBox->SetCurSel(wIndex);
|
|
bOldSelectionFound = TRUE;
|
|
}
|
|
}
|
|
|
|
//If selection has changed, selects the first entry
|
|
if ( !bOldSelectionFound )
|
|
m_pclComboBox->SetCurSel(0);
|
|
}
|
|
}
|
|
|
|
//************************************************************************
|
|
void CTL_Editor_EnumControl::m_pub_fn_vSetBuildEnumDesciptor_CallBack(CTL_td_p_fn_vBuildEnumDescriptor _p_fn_vCallBack)
|
|
{
|
|
ERROR_ASSERT( m_td_pri_fn_vBuildEnumDesciptor_CallBack == NULL );
|
|
|
|
m_td_pri_fn_vBuildEnumDesciptor_CallBack = _p_fn_vCallBack;
|
|
}
|
|
|
|
//************************************************************************
|
|
void CTL_Editor_EnumControl::m_pub_fn_vMustSortNamesInComboBox(BOOL _bSortOrder /*= TRUE*/)
|
|
{
|
|
m_pri_bMustSortNamesInComboBox = _bSortOrder;
|
|
}
|
|
|
|
//************************************************************************
|
|
BOOL CTL_Editor_EnumControl::s_m_fn_bStaticCanBeDisplayed(class CTL_Editor_BaseControl *_pclSenderBaseControl)
|
|
{
|
|
return _pclSenderBaseControl->m_pub_fn_pclGetParentControl()->m_fn_bIsReadOnly();
|
|
}
|
|
|
|
//************************************************************************
|
|
BOOL CTL_Editor_EnumControl::s_m_fn_bComboBoxCanBeDisplayed(class CTL_Editor_BaseControl *_pclSenderBaseControl)
|
|
{
|
|
return (!_pclSenderBaseControl->m_pub_fn_pclGetParentControl()->m_fn_bIsReadOnly());
|
|
}
|
|
|
|
//************************************************************************
|
|
//When selection has been changed in a Combo box
|
|
void CTL_Editor_EnumControl::s_m_fn_vComboBoxSelChanged(class CTL_Editor_ComboBox *_pclSenderComboBox,
|
|
class CTL_Editor_Control *_pclParentControl,
|
|
enum CTL_eComboBoxType _tdeType,
|
|
long _lUserDefinedType,
|
|
long _lUserDefinedCode)
|
|
{
|
|
((CTL_Editor_EnumControl *)_pclParentControl)->m_fn_vUpdateCurrentValue();
|
|
}
|
|
|
|
//************************************************************************
|
|
//When selection has been changed in a Combo box
|
|
void CTL_Editor_EnumControl::s_m_fn_vComboBoxDroppedDown(class CTL_Editor_ComboBox *_pclSenderComboBox,
|
|
class CTL_Editor_Control *_pclParentControl,
|
|
enum CTL_eComboBoxType _tdeType,
|
|
long _lUserDefinedType,
|
|
long _lUserDefinedCode)
|
|
{
|
|
((CTL_Editor_EnumControl *)_pclParentControl)->m_pub_fn_vBuildEnumDescriptor();
|
|
}
|
|
|
|
//************************************************************************
|
|
void CTL_Editor_EnumControl::m_fn_vSetEditedData(CTL_Editor_Data *pclData)
|
|
{
|
|
m_pclData = pclData;
|
|
m_pclData->m_pub_fn_vSetParentControl(this);
|
|
|
|
if ( m_pub_fn_tdeGetDataType() == CTL_DATA_TYPE__ENUM )
|
|
((CTL_Editor_EnumControl *)this)->m_fn_vGetNewEnumDescriptor();
|
|
}
|
|
|
|
//ROMTEAM Selection (Cristian Stegaru 24/03/98)
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Method : m_fn_iSetCanISelect_CallBack
|
|
// Date : 98-03
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Description :
|
|
// Author : Stegaru Cristian - CPA2
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// Modification :
|
|
// Date :
|
|
// By :
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
int CTL_Editor_EnumControl::m_fn_iSetCanISelect_CallBack (CTL_tpf_iCheckString pfCheckString)
|
|
{
|
|
if (NULL == m_pclComboBox)
|
|
return 0;
|
|
|
|
m_pclComboBox->m_fn_vSetCanISelect_CallBack (pfCheckString);
|
|
return 1;
|
|
}
|
|
//ENDROMTEAM Selection (Cristian Stegaru)
|