// Header for the definition of an object list
///////////////////////////////////////////////////////////
#ifndef _CPACTLO_HPP_
#define _CPACTLO_HPP_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

//External Modules
#include "CTL.h"
//End of External Modules

#include "EDACCust.hpp"

class CPA_Editor_ComboBox;
class CPA_Editor_CheckBox;

//#########################################################
class CPA_Editor_ObjectListControl :	public CTL_Editor_Control
{
//Constructor / Destructor
public:
 CPA_Editor_ObjectListControl(BOOL bReadOnly,
															BOOL bUserCanChangeAspect,
															BOOL bNoNames,
															BOOL bNoAlternateList,
															CTL_Editor_ControlList *_pclParentList,
															CString _csControlName,
		 													BOOL _bAcceptsToTakeNameOfData, //ANNECY BBB
//Stefan Dumitrean 20-07-98 ( OAC buttons )
															unsigned char ucInitialCurrentPair
//End Stefan Dumitrean 20-07-98 ( OAC buttons )

);

 ~CPA_Editor_ObjectListControl();

//Attributes
public:

protected:

private:
 //for models AND instances:
 //calls the name list edit dialog in model mode,
 //and the object list editor in instance mode
 CTL_Editor_Button *m_p_oPushButtonToEdit;
 CTL_Editor_Button *m_p_oPushButtonToRename; //to rename the current object list (for an instance)

 //the list of list names in model mode
 //the list of names used in the IA text in instance mode
 CTL_Editor_ComboBox *m_p_oNamesCombo;
 CTL_Editor_ComboBox *m_p_oAlternateNamesCombo;

 //for instances only
 //if TRUE, the user cannot choose a name for an item in the list
 BOOL m_bNoNames;
 BOOL m_bNoAlternateList;

//Member functions
public:
	//Function called to create controls (must be called only once)
	BOOL m_fn_bCreateControl(CWnd *pclParentWnd);

	//Function called to display the associated control of the char.
	void m_fn_vDisplay();

	//Function called to update the associated control of the char.
	void m_fn_vUpdate(CTL_tdeUpdateReason _eReason = CTL_UPDATE_REASON__NO_REASON_GIVEN,
										long _lUserDefinedReason = 0);

	//Function called to update parent window in case of values changes.
	void m_fn_vUpdateParent(CTL_tdeUpdateReason eReason = CTL_UPDATE_REASON__NO_REASON_GIVEN,
													long _lUserDefinedReason = 0);

	//Function called to make control Read Only
	void m_fn_vMakeReadOnly();

	//Function called to make control Read-Write
	void m_fn_vMakeReadWrite();

 //overload of the virtual member of CPA_Editor_Enumerable
 virtual void m_fn_vUpdateCurrentValue(short wAction = 0);
 //overload of the virtual member of CPA_Editor_Buttonable
 virtual void m_fn_vSetValue(short wAction);

 static void s_m_fn_vAButtonHasBeenClicked(class CTL_Editor_Button *_pclSenderButton,
																					 class CTL_Editor_Control *_pclParentControl,
																					 enum CTL_eButtonType _tdeType,
																					 long _lUserDefinedType,
																					 long _lUserDefinedCode);

 static void s_m_fn_vComboBoxSelChanged(class CTL_Editor_ComboBox *_pclSenderComboBox,
																				 class CTL_Editor_Control *_pclParentControl,
																				 enum CTL_eComboBoxType _tdeType,
																				 long _lUserDefinedType,
																				 long _lUserDefinedCode);

	static BOOL s_m_fn_bRenameButtonCanBeDisplayed(class CTL_Editor_BaseControl *_pclSenderBaseControl);
	static BOOL s_m_fn_bButtonMustBeEnabled(class CTL_Editor_BaseControl *_pclSenderBaseControl);
	static BOOL s_m_fn_bComboMustBeEnabled(class CTL_Editor_BaseControl *_pclSenderBaseControl);
	static BOOL s_m_fn_bAlternateComboMustBeDisplayed(class CTL_Editor_BaseControl *_pclSenderBaseControl);

protected:

private:

};

#endif //_CPACTLO_HPP_
