744 lines
30 KiB
C++
744 lines
30 KiB
C++
// Implementation file for the definition of an object list
|
||
/////////////////////////////////////////////////////////////////////
|
||
#include "StdAfx.h"
|
||
|
||
#include "ACP_Base.h"
|
||
#include "ITF.h"
|
||
#include "TAC.h"
|
||
#include "EDACCnst.hpp"
|
||
|
||
#include "CPA_CtlO.hpp"
|
||
|
||
#include "_AInterf.hpp"
|
||
#include "CPA_DatO.hpp"
|
||
#include "CPA_NLL.hpp"
|
||
#include "EDACDgNL.hpp"
|
||
#include "EDACStrg.hpp"
|
||
#include "EDACModl.hpp"
|
||
|
||
//External Modules
|
||
#include "ErO.h"
|
||
//End of External Modules
|
||
|
||
#undef CPA_WANTS_IMPORT
|
||
#undef CPA_EXPORT
|
||
#define CPA_WANTS_EXPORT
|
||
#include "_Actors.hpp"
|
||
#undef CPA_WANTS_EXPORT
|
||
#define CPA_WANTS_IMPORT
|
||
|
||
#ifdef _DEBUG
|
||
#define new DEBUG_NEW
|
||
#undef THIS_FILE
|
||
static char THIS_FILE[] = __FILE__;
|
||
#endif
|
||
|
||
//Constructor / Destructor
|
||
//**************************************************************************************
|
||
CPA_Editor_ObjectListControl::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 )
|
||
|
||
)
|
||
: CTL_Editor_Control(CTL_DATA_TYPE__USE_USER_DEFINED_TYPE,
|
||
bReadOnly,
|
||
CTL_SPACING_TYPE__MULTI_LINE,
|
||
bUserCanChangeAspect,
|
||
_pclParentList,
|
||
_csControlName,
|
||
_bAcceptsToTakeNameOfData,
|
||
//Stefan Dumitrean 20-07-98 ( OAC buttons )
|
||
ucInitialCurrentPair
|
||
//End Stefan Dumitrean 20-07-98 ( OAC buttons )
|
||
|
||
)
|
||
{
|
||
m_p_oPushButtonToEdit = NULL;
|
||
m_p_oPushButtonToRename = NULL;
|
||
m_p_oNamesCombo = NULL;
|
||
m_p_oAlternateNamesCombo = NULL;
|
||
m_bNoNames = bNoNames;
|
||
m_bNoAlternateList = bNoAlternateList;
|
||
}
|
||
|
||
//**************************************************************************************
|
||
CPA_Editor_ObjectListControl::~CPA_Editor_ObjectListControl()
|
||
{
|
||
|
||
}
|
||
|
||
//Member functions
|
||
|
||
//**************************************************************************************
|
||
//Function called to create associated control
|
||
BOOL CPA_Editor_ObjectListControl::m_fn_bCreateControl(CWnd *pclParentWnd)
|
||
{
|
||
BOOL bReturnValue = TRUE;
|
||
|
||
m_pclParentWnd = pclParentWnd;
|
||
|
||
m_pro_fn_bCreateBaseControls( C_OLIST_NAME_PERCENT_WIDTH,
|
||
27,
|
||
C_EDIT_HEIGHT);
|
||
|
||
CTL_Editor_BaseControl *pclBC;
|
||
|
||
if ( !m_fn_bIsAlwaysReadOnly() )
|
||
{
|
||
//Creates the combo box containing the names of the current name list
|
||
m_p_oNamesCombo = new CTL_Editor_ComboBox(CTL_COMBO_BOX_TYPE_USE_USER_DEFINED_TYPE,
|
||
WS_TABSTOP,
|
||
this,
|
||
m_pclParentWnd,
|
||
OAC_COMBO_BOX_TYPE__OBJECTS_LIST_COMBO_BOX,
|
||
OAC_COMBO_BOX_RETURN_CODE_VALUE__OBJECTS_LIST_NAMES);
|
||
m_p_oNamesCombo->m_pub_fn_vSetSelChanged_CallBack(s_m_fn_vComboBoxSelChanged);
|
||
m_p_oNamesCombo->m_pub_fn_vRegisterWindowsControl(m_pub_fn_csGetControlName() + " - ObjectList Name");
|
||
|
||
pclBC = m_pclListOfBaseControls->m_pub_fn_pclAddControlAtTail( m_p_oNamesCombo,
|
||
m_p_oNamesCombo,
|
||
this,
|
||
CTL_BASE_CONTROL_DISPLAY_TYPE__NORMAL,
|
||
C_OLIST_BOX_PERCENT_WIDTH,
|
||
C_OLIST_BOX_MIN_WIDTH,
|
||
C_OLIST_COMBO_BOX_HEIGHT,
|
||
FALSE,
|
||
FALSE);
|
||
pclBC->m_pub_fn_vSetMustBeEnabledCallBack(s_m_fn_bComboMustBeEnabled);
|
||
}
|
||
|
||
m_p_oPushButtonToEdit = new CTL_Editor_Button("Edit",
|
||
CTL_BUTTON_TYPE__USE_USER_DEFINED_TYPE,
|
||
0,
|
||
this,
|
||
m_pclParentWnd,
|
||
OAC_BUTTON_TYPE__OBJECTS_LIST_BUTTON,
|
||
OAC_BUTTON_RETURN_CODE_VALUE__OBJECTS_LIST_EDIT
|
||
);
|
||
m_p_oPushButtonToEdit->m_pub_fn_vSetButtonHasBeenClicked_CallBack(s_m_fn_vAButtonHasBeenClicked);
|
||
m_p_oPushButtonToEdit->m_pub_fn_vRegisterWindowsControl(m_pub_fn_csGetControlName() + " - ObjectList Edit");
|
||
|
||
pclBC = m_pclListOfBaseControls->m_pub_fn_pclAddControlAtTail(m_p_oPushButtonToEdit,
|
||
m_p_oPushButtonToEdit,
|
||
this,
|
||
CTL_BASE_CONTROL_DISPLAY_TYPE__NORMAL,
|
||
C_OLIST_BUTTON_PERCENT_WIDTH,
|
||
C_OLIST_BUTTON_MIN_WIDTH,
|
||
C_OLIST_BUTTON_HEIGHT);
|
||
pclBC->m_pub_fn_vSetMustBeEnabledCallBack(s_m_fn_bButtonMustBeEnabled);
|
||
|
||
if ( !m_bNoAlternateList && !m_fn_bIsAlwaysReadOnly() )
|
||
{
|
||
//Creates the combo box containing the names of the current name list
|
||
m_p_oAlternateNamesCombo = new CTL_Editor_ComboBox(CTL_COMBO_BOX_TYPE_USE_USER_DEFINED_TYPE,
|
||
WS_TABSTOP,
|
||
this,
|
||
m_pclParentWnd,
|
||
OAC_COMBO_BOX_TYPE__OBJECTS_LIST_COMBO_BOX,
|
||
OAC_COMBO_BOX_RETURN_CODE_VALUE__OBJECTS_LIST_ALTERNATE_NAMES);
|
||
m_p_oAlternateNamesCombo->m_pub_fn_vSetSelChanged_CallBack(s_m_fn_vComboBoxSelChanged);
|
||
m_p_oAlternateNamesCombo->m_pub_fn_vRegisterWindowsControl(m_pub_fn_csGetControlName() + " - ObjectList AlternateNames");
|
||
|
||
pclBC = m_pclListOfBaseControls->m_pub_fn_pclAddControlAtTail( m_p_oAlternateNamesCombo,
|
||
m_p_oAlternateNamesCombo,
|
||
this,
|
||
CTL_BASE_CONTROL_DISPLAY_TYPE__NORMAL,
|
||
C_OLIST_BOX_PERCENT_WIDTH + C_OLIST_NAME_PERCENT_WIDTH,
|
||
C_OLIST_BOX_MIN_WIDTH,
|
||
C_OLIST_COMBO_BOX_HEIGHT,
|
||
FALSE,
|
||
TRUE); //force this item to go to next line
|
||
pclBC->m_pub_fn_vSetCanBeDisplayedCallBack(s_m_fn_bAlternateComboMustBeDisplayed);
|
||
|
||
m_p_oPushButtonToRename = new CTL_Editor_Button("Rename",
|
||
CTL_BUTTON_TYPE__USE_USER_DEFINED_TYPE,
|
||
0,
|
||
this,
|
||
m_pclParentWnd,
|
||
OAC_BUTTON_TYPE__OBJECTS_LIST_BUTTON,
|
||
OAC_BUTTON_RETURN_CODE_VALUE__OBJECTS_LIST_RENAME);
|
||
|
||
m_p_oPushButtonToRename->m_pub_fn_vSetButtonHasBeenClicked_CallBack(s_m_fn_vAButtonHasBeenClicked);
|
||
m_p_oPushButtonToRename->m_pub_fn_vRegisterWindowsControl(m_pub_fn_csGetControlName() + " - ObjectList Rename");
|
||
|
||
pclBC = m_pclListOfBaseControls->m_pub_fn_pclAddControlAtTail(m_p_oPushButtonToRename,
|
||
m_p_oPushButtonToRename,
|
||
this,
|
||
CTL_BASE_CONTROL_DISPLAY_TYPE__NORMAL,
|
||
C_OLIST_BUTTON_PERCENT_WIDTH,
|
||
C_OLIST_BUTTON_MIN_WIDTH,
|
||
C_OLIST_BUTTON_HEIGHT);
|
||
pclBC->m_pub_fn_vSetCanBeDisplayedCallBack(s_m_fn_bRenameButtonCanBeDisplayed);
|
||
pclBC->m_pub_fn_vSetMustBeEnabledCallBack(s_m_fn_bButtonMustBeEnabled);
|
||
}
|
||
|
||
m_bControlCreated = bReturnValue;
|
||
|
||
return bReturnValue;
|
||
}
|
||
|
||
//************************************************************************************
|
||
//Function called to display the associated control(s) of the char.
|
||
void CPA_Editor_ObjectListControl::m_fn_vDisplay()
|
||
{
|
||
m_pro_fn_vDisplayBaseControls();
|
||
}
|
||
|
||
//************************************************************************
|
||
//Function called to update editor data of the CPA_XXData when a ComboBox receives OnSelChange()
|
||
//the action is the identifier of the combo box
|
||
void CPA_Editor_ObjectListControl::m_fn_vUpdateCurrentValue(short wAction /* = 0 */)
|
||
{
|
||
OAC_tdeUpdateReason eReason = OAC_E_ur_ComboSelChanged;
|
||
short wSelectedIndex = CB_ERR;
|
||
|
||
// if ( m_pclComboBox != NULL )
|
||
// {
|
||
// short wIndex = m_pclComboBox->GetCurSel();
|
||
// if ( wIndex != CB_ERR )
|
||
// ((CPA_Editor_ObjectListData *)m_pclData)->m_pclCurrentValue = (CTL_Editor_EnumElement *)(m_pclComboBox->GetItemDataPtr(wIndex));
|
||
// }
|
||
|
||
CPA_Editor_ObjectListData *pclData = (CPA_Editor_ObjectListData *)m_pclData;
|
||
|
||
switch ( wAction )
|
||
{
|
||
case OAC_COMBO_BOX_RETURN_CODE_VALUE__OBJECTS_LIST_NAMES: //the primary list
|
||
wSelectedIndex = m_p_oNamesCombo->GetCurSel();
|
||
if ( OAC_fn_bIsEditingAnInstance(this) )
|
||
{
|
||
|
||
//tell the actor not to use its current list. this will clear m_p_oObjectList as well
|
||
if ( pclData->m_p_oObjectList )
|
||
pclData->m_p_oObjectList->fn_bMakeActorNotUseThisList(OAC_fn_pclGetParentActorOfData(pclData));
|
||
//if a new list was selected
|
||
if ( wSelectedIndex != CB_ERR )
|
||
{
|
||
//set the pointer to the list
|
||
EdtList *p_oNewObjectList = (EdtList *) m_p_oNamesCombo->GetItemDataPtr(wSelectedIndex);
|
||
pclData->m_p_oObjectList = p_oNewObjectList;
|
||
eReason = OAC_E_ur_InstanceChangedObjectList;
|
||
//and tell the handler that the actor uses this list
|
||
if ( p_oNewObjectList )
|
||
p_oNewObjectList->fn_bMakeActorUseThisList(OAC_fn_pclGetParentActorOfData(pclData));
|
||
}
|
||
}
|
||
else /* is editing a model -> change current name list for the model */
|
||
{
|
||
CPA_tdoNameList *p_oNewNameList = (CPA_tdoNameList *) m_p_oNamesCombo->GetItemDataPtr(wSelectedIndex);
|
||
eReason = OAC_E_ur_ModelChangedNameList;
|
||
if ( p_oNewNameList != ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList )
|
||
{
|
||
//tell the coherence manager to remember the model no longer uses its old name list.
|
||
g_oCoherenceManager.m_fn_vRemoveALink(
|
||
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor,
|
||
pclData->m_p_oNameList
|
||
);
|
||
//tell the coherence manager to remember the model now uses the new name list.
|
||
if ( p_oNewNameList )
|
||
g_oCoherenceManager.m_fn_vAddALink(
|
||
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor,
|
||
p_oNewNameList
|
||
);
|
||
// store the pointer in the editor data
|
||
pclData->m_p_oNameList = p_oNewNameList;
|
||
}
|
||
//if the model has instances and the selected list is valid, no more change is allowed
|
||
if
|
||
(
|
||
p_oNewNameList
|
||
&& ((EdActors_EditorActorModel *) OAC_fn_pclGetParentActorOfData(pclData))->m_fn_wGetRelatedInstancesCount() > 0
|
||
)
|
||
m_p_oNamesCombo->EnableWindow(FALSE);
|
||
}
|
||
break;
|
||
|
||
case OAC_COMBO_BOX_RETURN_CODE_VALUE__OBJECTS_LIST_ALTERNATE_NAMES: //the alternate list
|
||
eReason = OAC_E_ur_InstanceChangedAlternateList;
|
||
|
||
ERROR_ASSERT(!m_bNoAlternateList && m_p_oAlternateNamesCombo );
|
||
|
||
wSelectedIndex = m_p_oAlternateNamesCombo->GetCurSel();
|
||
if ( wSelectedIndex != CB_ERR )
|
||
{
|
||
CPA_ZonesActivatingList *p_oNewZAList = (CPA_ZonesActivatingList *) m_p_oAlternateNamesCombo->GetItemDataPtr(wSelectedIndex);
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_vSetZAList(p_oNewZAList);
|
||
//m_pclData->m_pclParentActor->m_pclActor->fn_vNotifySave(); //done in m_vSetZAList
|
||
//get the model of the instance
|
||
EdActors_EditorActor *p_oEditorModel = OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor->m_fn_pclGetModel()->m_fn_pclGetEditorActor();
|
||
ERROR_ASSERT(p_oEditorModel);
|
||
//find the associated data for the model
|
||
CPA_Editor_ObjectListData *p_oModelData = (CPA_Editor_ObjectListData *) p_oEditorModel->m_fn_p_oFindDataByName(m_pclData->m_pub_fn_csGetDataName());
|
||
//if the model has no default activation list
|
||
if ( !p_oModelData->m_p_oZAList && p_oNewZAList )
|
||
{
|
||
//give it this one
|
||
p_oModelData->m_vSetZAList(p_oNewZAList);
|
||
//and save the model to remember that
|
||
//p_oEditorModel->m_pclActor->fn_vNotifySave(); //done in m_vSetZAList
|
||
//TODO: capture cohmnge messages to the interface to handle invalidation of links...
|
||
}
|
||
}
|
||
else
|
||
pclData->m_vSetZAList(NULL);
|
||
break;
|
||
}
|
||
|
||
// normally this call is unnecessary because the control is already up-to-date, but we never know...
|
||
//update the contents of the combo according to the new name list
|
||
m_fn_vUpdate();
|
||
|
||
m_fn_vUpdateParent(CTL_UPDATE_REASON__USE_USER_DEFINED_REASON, eReason);
|
||
}
|
||
|
||
//************************************************************************
|
||
//Function called to update editor data of the CPA_XXData when a CheckBox receives Onclicked()
|
||
void CPA_Editor_ObjectListControl::m_fn_vSetValue(short wAction)
|
||
{
|
||
tdstEdtListMess stMessage;
|
||
OAC_tdeUpdateReason eReason = OAC_E_ur_ButtonClicked;
|
||
|
||
CPA_Editor_ObjectListData *pclData = (CPA_Editor_ObjectListData *)m_pclData;
|
||
|
||
switch ( wAction )
|
||
{
|
||
case OAC_BUTTON_RETURN_CODE_VALUE__OBJECTS_LIST_EDIT: //the "edit" button was pressed
|
||
if ( OAC_fn_bIsEditingAnInstance(this) )
|
||
{
|
||
if ( ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList )
|
||
{
|
||
stMessage.csListType = ((CPA_Editor_ObjectListData *) m_pclData)->m_pub_fn_csGetDataName();
|
||
stMessage.pActor = (CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor->m_pub_fn_pclGetSuperObject();
|
||
stMessage.ulIndexInList = -1;
|
||
stMessage.pObject = NULL;
|
||
stMessage.pList = ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oObjectList;
|
||
CPA_DLLBase *p_oDll = g_pclInterface->GetMainWorld()->GetDLLWithTypeName(M_MAKECHAR(stMessage.csListType));
|
||
if ( p_oDll )
|
||
p_oDll->OnQueryAction(g_pclInterface, C_uiQueryEditAnObjectList, (long) &stMessage);
|
||
}
|
||
else
|
||
{
|
||
//tell the user that there is no name list in the model...
|
||
MessageBox(
|
||
m_p_oPushButtonToEdit->m_hWnd, //parent window of the dialog
|
||
"There is no name list defined\nfor this instance's model",
|
||
"Actor's Editor Warning",
|
||
MB_OK
|
||
);
|
||
}
|
||
}
|
||
else /* we are editing a model */
|
||
{
|
||
CString csRototo;
|
||
short wInstancesCount = ((EdActors_EditorActorModel *) OAC_fn_pclGetParentActorOfData(pclData))->m_fn_wGetRelatedInstancesCount();
|
||
EdActors_EditNameListsDialog *p_oDialog;
|
||
tdstCarEditNameListsDialogArgs stArgs;
|
||
// ALX
|
||
csRototo = g_c_csGenericNameListType + ((CPA_Editor_ObjectListData *) m_pclData)->m_pub_fn_csGetDataName();
|
||
// End ALX
|
||
|
||
stArgs.stIn.p_c_szNameListType = LPCTSTR(csRototo);
|
||
stArgs.stIn.p_oEditorActor = OAC_fn_pclGetParentActorOfData(pclData);
|
||
stArgs.stIn.p_oCurrentNameList = ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList;
|
||
stArgs.stIn.p_c_szScriptName = LPCTSTR(((CPA_Editor_ObjectListData *) m_pclData)->m_pub_fn_csGetDataName());
|
||
//the model can select a different name list only if he has no instance or he specified no name list
|
||
//before starting to create instances
|
||
//in which condition the model can change its name list to select another ?
|
||
stArgs.stIn.bModelCanSelectANameList = (wInstancesCount <= 0) //it has no instance
|
||
|| !stArgs.stIn.p_oCurrentNameList //if it has instances, it must not a a name list yet
|
||
|| (stArgs.stIn.p_oCurrentNameList->m_pEdtListHandler->fn_oGetListOfEdtLists()->GetCount() <= 0); //if it has a name list, no object list must be defined for it
|
||
stArgs.stIn.bNoNames = m_bNoNames;
|
||
|
||
HINSTANCE hOldInstance = AfxGetResourceHandle();
|
||
AfxSetResourceHandle(g_stActorEditorIdentity.hModule);
|
||
|
||
p_oDialog = new EdActors_EditNameListsDialog(&stArgs);
|
||
p_oDialog->DoModal();
|
||
delete p_oDialog;
|
||
|
||
AfxSetResourceHandle(hOldInstance);
|
||
|
||
// the model can change its current name list only if no instance exist...
|
||
if
|
||
(
|
||
stArgs.stIn.bModelCanSelectANameList
|
||
&& stArgs.stIn.p_oCurrentNameList != stArgs.stOut.p_oNameListSelectedForModel
|
||
)
|
||
{
|
||
//tell the instances that the model selected a name list
|
||
eReason = OAC_E_ur_ModelChangedNameList;
|
||
//tell the coherence manager to remember the model no longer uses its old name list.
|
||
#if defined ( D_UseCoherenceManager )
|
||
g_oCoherenceManager.m_fn_vRemoveALink(
|
||
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor,
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList
|
||
);
|
||
//tell the coherence manager to remember the model now uses the new name list.
|
||
if ( stArgs.stOut.p_oNameListSelectedForModel )
|
||
g_oCoherenceManager.m_fn_vAddALink(
|
||
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor,
|
||
stArgs.stOut.p_oNameListSelectedForModel
|
||
);
|
||
#endif /* D_UseCoherenceManager */
|
||
//since the model changed a name list, its current object and activation lists must be forgotten
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_vSetObjectList(NULL);
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_vSetZAList(NULL);
|
||
// store the pointer on the new name list in the editor data
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList = stArgs.stOut.p_oNameListSelectedForModel;
|
||
if
|
||
(
|
||
stArgs.stOut.p_oNameListSelectedForModel
|
||
&& ((EdActors_EditorActorModel *) OAC_fn_pclGetParentActorOfData(pclData))->m_fn_wGetRelatedInstancesCount() > 0
|
||
)
|
||
m_p_oNamesCombo->EnableWindow(FALSE);
|
||
}
|
||
else
|
||
eReason = OAC_E_ur_ModelEditedNameList;
|
||
}
|
||
break;
|
||
|
||
case OAC_BUTTON_RETURN_CODE_VALUE__OBJECTS_LIST_RENAME: //the rename button was pressed (in instance mode)
|
||
{
|
||
eReason = OAC_E_ur_InstanceRenamedObjectList;
|
||
//get the current edited object list
|
||
short wSelIndex = m_p_oNamesCombo->GetCurSel();
|
||
if ( wSelIndex != CB_ERR )
|
||
{
|
||
EdtList *p_oEdtList = (EdtList *) m_p_oNamesCombo->GetItemDataPtr(wSelIndex);
|
||
CDialog *p_oDialog = new CDialog();
|
||
p_oDialog->Create(IDD_CAR_DIALOG_OBJECTLIST_RENAME, m_p_oPushButtonToRename);
|
||
//get strings to init the controls in the dialog
|
||
CString csCurrentName = p_oEdtList->GetName();
|
||
CString csStaticCaption;
|
||
p_oDialog->GetDlgItem(IDC_STATIC_OLR_RENAMELIST)->GetWindowText(csStaticCaption);
|
||
short wNameInsertPos = csStaticCaption.Find('<EFBFBD>');
|
||
csStaticCaption = csStaticCaption.Left(wNameInsertPos) + csCurrentName + csStaticCaption.Mid(wNameInsertPos + 1);
|
||
p_oDialog->GetDlgItem(IDC_EDIT_OLR_NAME)->SetWindowText(csCurrentName);
|
||
p_oDialog->GetDlgItem(IDC_STATIC_OLR_RENAMELIST)->SetWindowText(csStaticCaption);
|
||
//create the dialog to get the new name
|
||
p_oDialog->ShowWindow(TRUE);
|
||
BOOL bChangeAccepted = (p_oDialog->RunModalLoop() == IDOK);
|
||
if ( bChangeAccepted ) //if name is accepted, get it
|
||
p_oDialog->GetDlgItem(IDC_EDIT_OLR_NAME)->GetWindowText(csCurrentName);
|
||
delete p_oDialog;
|
||
if ( bChangeAccepted )
|
||
{
|
||
p_oEdtList->fn_bUnValidate();
|
||
((CPA_SaveObject *) p_oEdtList->GetOwner())->fn_vUpdateReference(p_oEdtList);
|
||
p_oEdtList->fn_bValidate();
|
||
//the rename will cause a rename notification that will notify all dependent actors as well
|
||
p_oEdtList->fn_eRename(csCurrentName);
|
||
((CPA_SaveObject *) p_oEdtList->GetOwner())->fn_vUpdateReference(p_oEdtList);
|
||
//now update the string in the combo too
|
||
m_p_oNamesCombo->DeleteString(wSelIndex);
|
||
VERIFY(m_p_oNamesCombo->InsertString(wSelIndex, p_oEdtList->GetName()) == wSelIndex);
|
||
m_p_oNamesCombo->SetItemDataPtr(wSelIndex, p_oEdtList);
|
||
m_p_oNamesCombo->SetCurSel(wSelIndex);
|
||
}
|
||
}
|
||
}
|
||
break;
|
||
|
||
default: // debug...
|
||
ERROR_ASSERT(FALSE);
|
||
break;
|
||
}
|
||
|
||
//update the contents of the combo according to the new name list
|
||
m_fn_vUpdate(CTL_UPDATE_REASON__USE_USER_DEFINED_REASON, eReason);
|
||
|
||
//Updates parent's controls if necessary (Watch Window, ...)
|
||
m_fn_vUpdateParent(CTL_UPDATE_REASON__USE_USER_DEFINED_REASON, eReason);
|
||
}
|
||
|
||
//************************************************************************
|
||
//fills the controls with editor data
|
||
void CPA_Editor_ObjectListControl::m_fn_vUpdate(CTL_tdeUpdateReason _eReason /*= CTL_UPDATE_REASON__NO_REASON_GIVEN*/,
|
||
long _lUserDefinedReason /*= 0*/)
|
||
{
|
||
/* if ( (m_pclCheckBoxForLink != NULL) && (m_pclData != NULL) )
|
||
{
|
||
m_pclCheckBoxForLink->SetCheck(m_pclData->m_pub_fn_bIsLinked());
|
||
m_pclCheckBoxForLink->EnableWindow( (m_pclData->m_fn_eGetLink() != E_dlm_AlwaysLinked)
|
||
&& (m_pclData->m_fn_eGetLink() != E_dlm_NeverLinked)
|
||
);
|
||
}*/
|
||
|
||
CPA_Editor_ObjectListData *pclData = (CPA_Editor_ObjectListData *)m_pclData;
|
||
|
||
if ( m_pclData->m_pub_fn_bGetDataHasChanged() )
|
||
{
|
||
CPA_tdoNameList *p_oNameList;
|
||
CString csReachableType = g_c_csGenericNameListType + ((CPA_Editor_ObjectListData *) m_pclData)->m_pub_fn_csGetDataName();
|
||
|
||
//make the buttons display their text
|
||
if ( m_p_oPushButtonToEdit )
|
||
m_p_oPushButtonToEdit->SetCheck(FALSE);
|
||
|
||
m_p_oNamesCombo->ResetContent();
|
||
m_p_oNamesCombo->SetItemDataPtr(m_p_oNamesCombo->AddString("No List"), NULL);
|
||
|
||
if ( !m_bNoAlternateList && m_p_oAlternateNamesCombo )
|
||
{
|
||
m_p_oAlternateNamesCombo->ResetContent();
|
||
m_p_oAlternateNamesCombo->SetItemDataPtr(m_p_oAlternateNamesCombo->AddString("No ZA List"), NULL);
|
||
}
|
||
if ( OAC_fn_bIsEditingAnInstance(this) )
|
||
{
|
||
//fill the m_p_oNamesCombo with the names of the data's m_p_oNameList
|
||
p_oNameList = ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList;
|
||
if ( !p_oNameList )
|
||
{
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_vSetObjectList(NULL);
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList = NULL;
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_vSetZAList(NULL);
|
||
}
|
||
else
|
||
{
|
||
short wInstanceIndex = CB_ERR;
|
||
short wNbObjectLists = 0;
|
||
CPA_List<EdtList> *p_oListOfObjectLists = p_oNameList->m_pEdtListHandler->fn_oGetListOfEdtLists();;
|
||
wNbObjectLists = p_oListOfObjectLists->GetCount();
|
||
if ( p_oListOfObjectLists && wNbObjectLists )
|
||
for ( short wIndex = 0; wIndex < wNbObjectLists; wIndex ++ )
|
||
{
|
||
//get the list of objects
|
||
EdtList *p_oObjectList = (EdtList *) p_oListOfObjectLists->FindElementFromIndex(wIndex);
|
||
/*if ( p_oObjectList->fn_bIsOfType(C_szEdtListTypeName) ) //TODO-B 21/02/97: a virer + tard...
|
||
{*/
|
||
//add its name in the combo
|
||
short wPos = m_p_oNamesCombo->AddString(p_oObjectList->GetName());
|
||
//set the pointer
|
||
m_p_oNamesCombo->SetItemDataPtr(wPos, p_oObjectList);
|
||
if ( p_oObjectList == ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oObjectList )
|
||
wInstanceIndex = wPos;
|
||
//}
|
||
}
|
||
if ( wInstanceIndex != CB_ERR )
|
||
m_p_oNamesCombo->SetCurSel(wInstanceIndex);
|
||
|
||
//fill the other combo with the list of zone activating lists for the name list
|
||
wInstanceIndex = CB_ERR;
|
||
if ( !m_bNoAlternateList && m_p_oAlternateNamesCombo )
|
||
{
|
||
CPA_List<CPA_BaseObject> oActivationListList;
|
||
g_pclInterface->GetMainWorld()->fn_lFindObjects(
|
||
&oActivationListList,
|
||
"" /* obj name */,
|
||
C_szZAListTypeName, /* type */
|
||
p_oNameList /* owner */
|
||
);
|
||
short wNbActivationLists = oActivationListList.GetCount();
|
||
POSITION Pos = oActivationListList.GetHeadPosition ();
|
||
while (Pos)
|
||
{
|
||
//get the activation list
|
||
CPA_ZonesActivatingList *p_oActivationList = (CPA_ZonesActivatingList *) oActivationListList.GetNext(Pos);
|
||
short wPos = m_p_oAlternateNamesCombo->AddString(p_oActivationList->GetName());
|
||
m_p_oAlternateNamesCombo->SetItemDataPtr(wPos, p_oActivationList);
|
||
if ( p_oActivationList == ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oZAList )
|
||
wInstanceIndex = wPos;
|
||
}
|
||
}
|
||
if ( wInstanceIndex != CB_ERR )
|
||
m_p_oAlternateNamesCombo->SetCurSel(wInstanceIndex);
|
||
}
|
||
}
|
||
else // we display the data for a model
|
||
{
|
||
//fill the m_p_oNamesCombo with the names of available name lists
|
||
//Gets the current Family's List of name lists
|
||
CPA_List<CPA_BaseObject> oNameListList;
|
||
g_pclInterface->GetMainWorld()->fn_lFindObjects(
|
||
&oNameListList,
|
||
"",
|
||
csReachableType,
|
||
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor->m_pub_fn_pclGetFamily() /* owner */
|
||
);
|
||
short wNbNameLists = (short) oNameListList.GetCount();
|
||
short wOk = 0, wModelIndex = -1;
|
||
|
||
if ( wNbNameLists == 0 ) // no name list remain
|
||
{
|
||
#if defined ( D_UseCoherenceManager )
|
||
//remove the coherence link
|
||
if ( ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList )
|
||
g_oCoherenceManager.m_fn_vRemoveALink(
|
||
(CPA_SaveObject *) OAC_fn_pclGetParentActorOfData(pclData)->m_pclActor,
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList
|
||
);
|
||
#endif /* D_UseCoherenceManager */
|
||
//make the model reference no list
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList = NULL;
|
||
}
|
||
else
|
||
{
|
||
//for each list of names we got
|
||
POSITION Pos= oNameListList.GetHeadPosition();
|
||
short wIndex = 1;
|
||
while (Pos)
|
||
{
|
||
//get the list of names
|
||
p_oNameList = (CPA_tdoNameList *) oNameListList.GetNext(Pos);
|
||
/*if ( p_oNameList->fn_bIsOfType(M_MAKECHAR(csReachableType)) ) //TODO-B 01/03/97: a virer + tard...
|
||
{*/
|
||
wOk = 1;
|
||
//add its name in the combo
|
||
short wPos = m_p_oNamesCombo->AddString(p_oNameList->GetName());
|
||
//set the pointer
|
||
m_p_oNamesCombo->SetItemDataPtr(wPos, p_oNameList);
|
||
|
||
if
|
||
(
|
||
((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList
|
||
&& p_oNameList == ((CPA_Editor_ObjectListData *) m_pclData)->m_p_oNameList
|
||
)
|
||
wModelIndex = wIndex;
|
||
/*}*/
|
||
wIndex++;
|
||
}
|
||
}
|
||
|
||
// make the combo select the name of the current name list
|
||
if ( wOk )
|
||
m_p_oNamesCombo->SetCurSel(wModelIndex);
|
||
}
|
||
}
|
||
}
|
||
|
||
//************************************************************************
|
||
//Function called to update parent window in case of values changes.
|
||
void CPA_Editor_ObjectListControl::m_fn_vUpdateParent(CTL_tdeUpdateReason eReason,
|
||
long _lUserDefinedReason /*= 0*/)
|
||
{
|
||
//Updates parent if necessary(Watch a.s.o.)
|
||
CTL_Editor_Control::m_fn_vUpdateParent(eReason, _lUserDefinedReason);
|
||
|
||
//Updates motor's data
|
||
m_pclData->m_fn_vUpdateMotorData(eReason, _lUserDefinedReason);
|
||
}
|
||
|
||
//************************************************************************
|
||
//Function called to make control Read Only
|
||
void CPA_Editor_ObjectListControl::m_fn_vMakeReadOnly()
|
||
{
|
||
if ( !m_fn_bIsReadOnly() )
|
||
{
|
||
|
||
m_bIsReadOnly = TRUE;
|
||
}
|
||
}
|
||
|
||
//************************************************************************
|
||
//Function called to make control Read-Write
|
||
void CPA_Editor_ObjectListControl::m_fn_vMakeReadWrite()
|
||
{
|
||
if ( (m_fn_bIsReadOnly()) && (!m_fn_bIsAlwaysReadOnly()) )
|
||
{
|
||
|
||
m_bIsReadOnly = FALSE;
|
||
}
|
||
}
|
||
|
||
//************************************************************************
|
||
// CALLBACKS
|
||
//************************************************************************
|
||
void CPA_Editor_ObjectListControl::s_m_fn_vAButtonHasBeenClicked(class CTL_Editor_Button *_pclSenderButton,
|
||
class CTL_Editor_Control *_pclParentControl,
|
||
enum CTL_eButtonType _tdeType,
|
||
long _lUserDefinedType,
|
||
long _lUserDefinedCode)
|
||
{
|
||
ERROR_ASSERT( _tdeType == CTL_BUTTON_TYPE__USE_USER_DEFINED_TYPE );
|
||
ERROR_ASSERT( _lUserDefinedType == OAC_BUTTON_TYPE__OBJECTS_LIST_BUTTON );
|
||
ERROR_ASSERT( _pclParentControl != NULL );
|
||
|
||
((CPA_Editor_ObjectListControl *)_pclParentControl)->m_fn_vSetValue((short)_lUserDefinedCode);
|
||
}
|
||
|
||
//************************************************************************
|
||
void CPA_Editor_ObjectListControl::s_m_fn_vComboBoxSelChanged(class CTL_Editor_ComboBox *_pclSenderComboBox,
|
||
class CTL_Editor_Control *_pclParentControl,
|
||
enum CTL_eComboBoxType _tdeType,
|
||
long _lUserDefinedType,
|
||
long _lUserDefinedCode)
|
||
{
|
||
ERROR_ASSERT( _tdeType == CTL_COMBO_BOX_TYPE_USE_USER_DEFINED_TYPE );
|
||
ERROR_ASSERT( _lUserDefinedType == OAC_COMBO_BOX_TYPE__OBJECTS_LIST_COMBO_BOX );
|
||
ERROR_ASSERT( _pclParentControl != NULL );
|
||
|
||
((CPA_Editor_ObjectListControl *)_pclParentControl)->m_fn_vUpdateCurrentValue((short)_lUserDefinedCode);
|
||
}
|
||
|
||
//************************************************************************
|
||
BOOL CPA_Editor_ObjectListControl::s_m_fn_bRenameButtonCanBeDisplayed(class CTL_Editor_BaseControl *_pclSenderBaseControl)
|
||
{
|
||
CPA_Editor_ObjectListControl *pclControl = (CPA_Editor_ObjectListControl *)_pclSenderBaseControl->m_pub_fn_pclGetParentControl();
|
||
return OAC_fn_bIsEditingAnInstance(pclControl);
|
||
}
|
||
|
||
//************************************************************************
|
||
BOOL CPA_Editor_ObjectListControl::s_m_fn_bButtonMustBeEnabled(class CTL_Editor_BaseControl *_pclSenderBaseControl)
|
||
{
|
||
return !_pclSenderBaseControl->m_pub_fn_pclGetParentControl()->m_fn_bIsAlwaysReadOnly();
|
||
}
|
||
|
||
//************************************************************************
|
||
BOOL CPA_Editor_ObjectListControl::s_m_fn_bComboMustBeEnabled(class CTL_Editor_BaseControl *_pclSenderBaseControl)
|
||
{
|
||
CPA_Editor_ObjectListControl *pclControl = (CPA_Editor_ObjectListControl *)_pclSenderBaseControl->m_pub_fn_pclGetParentControl();
|
||
CPA_Editor_ObjectListData *pclData = (CPA_Editor_ObjectListData *)pclControl->m_pclData;
|
||
BOOL bMustBeEnabled = FALSE;
|
||
|
||
//The edited Actor is an Instance
|
||
if ( OAC_fn_bIsEditingAnInstance(pclControl) )
|
||
{
|
||
//if the list contains a specific item, the instance cannot select another list
|
||
if ( pclData->m_p_oNameList->m_bHasAVirgeField() )
|
||
bMustBeEnabled = FALSE;
|
||
else
|
||
bMustBeEnabled = TRUE;
|
||
}
|
||
//The edited Actor is a Model
|
||
else
|
||
{
|
||
if ( //it has at least one associated instance
|
||
( ((EdActors_EditorActorModel *) OAC_fn_pclGetParentActorOfData(pclData))->m_fn_wGetRelatedInstancesCount() > 0 )
|
||
//and it already has a selected name list
|
||
&& ( pclData->m_p_oNameList != NULL )
|
||
)
|
||
//the combo just gives the name of the current name list
|
||
bMustBeEnabled = FALSE;
|
||
else
|
||
bMustBeEnabled = TRUE;
|
||
}
|
||
|
||
return bMustBeEnabled;
|
||
}
|
||
|
||
//************************************************************************
|
||
BOOL CPA_Editor_ObjectListControl::s_m_fn_bAlternateComboMustBeDisplayed(class CTL_Editor_BaseControl *_pclSenderBaseControl)
|
||
{
|
||
CPA_Editor_ObjectListControl *pclControl = (CPA_Editor_ObjectListControl *)_pclSenderBaseControl->m_pub_fn_pclGetParentControl();
|
||
BOOL bMustBeDisplayed = FALSE;
|
||
|
||
if ( !pclControl->m_bNoAlternateList )
|
||
{
|
||
if ( OAC_fn_bIsEditingAnInstance(pclControl) )
|
||
bMustBeDisplayed = TRUE;
|
||
else
|
||
bMustBeDisplayed = FALSE;
|
||
}
|
||
|
||
return bMustBeDisplayed;
|
||
}
|
||
|
||
|