// Implementation for the definition of the class representing a mini-structure // (Base class) ///////////////////////////////////////////////////////////////////////////////// #include "StdAfx.h" ///////////////////////////////////////////////////// //////// !!!!!!!!!!!! DANGER !!!!!!!!!!! //////////// ///////////////////////////////////////////////////// #define _ED_CAR_MUST_DEFINE_STRUCT_ #include "EdAllAct.hpp" ///////////////////////////////////////////////////// //////// !!!!!!!!!!!! End DANGER !!!!!!!!!!! //////// ///////////////////////////////////////////////////// #include "EDACMStr.hpp" #include "EDACVwMS.hpp" #include "EDACDoc.hpp" #include "EDACFmMn.hpp" #include "CPA_CtlS.hpp" #include "CPA_CtlO.hpp" #include "EDACDgQu.hpp" #include "EDACCnst.hpp" #include "EDACMStA.hpp" #include "EDACMStr.hpp" #include "EDACModl.hpp" #include "EDACStrg.hpp" #include "EDACBuM.hpp" #include "_AInterf.hpp" //External Modules #include "ErO.h" #include "IncTUT.h" #include "CTL.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 //*************************************************************************** EdActors_MiniStructure::EdActors_MiniStructure(CString csName, tdeMiniStructureManiability tdeManiability) { m_csName = csName; m_tdeManiability = tdeManiability; m_pclAllocButton = NULL; m_pclOpenButton = NULL; m_pclActorMS = NULL; m_bIsAlreadyAllocated = FALSE; m_crControlZone = CRect(0,0,0,0); } //*************************************************************************** EdActors_MiniStructure::~EdActors_MiniStructure() { if ( m_pclAllocButton != NULL ) delete m_pclAllocButton; if ( m_pclOpenButton != NULL ) delete m_pclOpenButton; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddIntegerControl(long lMinValue, long lMaxValue, char cDataLength, BOOL bSigned, OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, CTL_tdeControlSpacingType tdeSpacingType, OAC_tdeControlVisibility tdeVisibility, BOOL bUserCanChangeAspect, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddIntegerControl(lMinValue, lMaxValue, cDataLength, bSigned, bReadOnly, tdeSpacingType, bUserCanChangeAspect, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddDecimalControl(long double ldMinValue, long double ldMaxValue, char cDataLength, OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, CTL_tdeControlSpacingType tdeSpacingType, OAC_tdeControlVisibility tdeVisibility, BOOL bUserCanChangeAspect, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddDecimalControl(ldMinValue, ldMaxValue, cDataLength, bReadOnly, tdeSpacingType, bUserCanChangeAspect, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddBooleanControl(OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, CTL_tdeControlSpacingType tdeSpacingType, OAC_tdeControlVisibility tdeVisibility, BOOL bUserCanChangeAspect, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddBooleanControl(bReadOnly, tdeSpacingType, bUserCanChangeAspect, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddMaskedControl( OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, CTL_tdeControlSpacingType tdeSpacingType, OAC_tdeControlVisibility tdeVisibility, BOOL bUserCanChangeAspect, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddMaskedControl(bReadOnly, tdeSpacingType, bUserCanChangeAspect, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddEnumControl( OAC_tdeDataLevel tdeLevel, OAC_tdeControlVisibility tdeVisibility, BOOL bReadOnly, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddEnumControl(bReadOnly, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddTextControl( OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, CTL_tdeControlSpacingType tdeSpacingType, OAC_tdeControlVisibility tdeVisibility, BOOL bUserCanChangeAspect, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddTextControl(bReadOnly, tdeSpacingType, bUserCanChangeAspect, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddVectorControl( long double ldMinValue, long double ldMaxValue, char cDataLength, OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, OAC_tdeControlVisibility tdeVisibility, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CTL_Editor_Control *pclNewElement = m_clControlList.m_fn_pclAddVectorControl(ldMinValue, ldMaxValue, cDataLength, bReadOnly, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddStateControl(OAC_tdeDataLevel tdeLevel, OAC_tdeControlVisibility tdeVisibility, BOOL bReadOnly, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CPA_Editor_StateControl *pclNewElement = new CPA_Editor_StateControl(bReadOnly, &m_clControlList, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); m_clControlList.m_fn_vAddElement(pclNewElement); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** CTL_Editor_Control *EdActors_MiniStructure::m_fn_pclAddObjectListControl(OAC_tdeDataLevel tdeLevel, BOOL bReadOnly, OAC_tdeControlVisibility tdeVisibility, BOOL bUserCanChangeAspect, BOOL bNoNames, BOOL bNoAlternateList, CString _csControlName, //Stefan Dumitrean 20-07-98 ( OAC buttons ) unsigned char ucInitialCurrentPair, //End Stefan Dumitrean 20-07-98 ( OAC buttons ) BOOL _bAcceptsToTakeNameOfData /*= TRUE*/, //ANNECY BBB DWORD _ulHelpID ) { CPA_Editor_ObjectListControl *pclNewElement = new CPA_Editor_ObjectListControl(bReadOnly, bUserCanChangeAspect, bNoNames, bNoAlternateList, &m_clControlList, _csControlName, _bAcceptsToTakeNameOfData, //ANNECY BBB //Stefan Dumitrean 20-07-98 ( OAC buttons ) ucInitialCurrentPair //End Stefan Dumitrean 20-07-98 ( OAC buttons ) ); m_clControlList.m_fn_vAddElement(pclNewElement); OAC_AddOwnerDataToControl(pclNewElement, tdeLevel, tdeVisibility, _ulHelpID); return pclNewElement; } //************************************************************************************** //Creates all controls long EdActors_MiniStructure::m_fn_lCreateMSControls(CWnd *pclWnd, CRect crRect) { m_pclParent = (EdActors_MiniStrucView *)pclWnd; //Adds the MS in the view m_crDisplayRect = crRect; //Creates the Alloc MS Button m_pclAllocButton = new CPA_Editor_MiniStructureButton(this, "", ECAR_MS_BUTTON_TYPE_ALLOC); CRect crButtonRect(crRect); crButtonRect.right = crButtonRect.left + (crButtonRect.Width() * C_ALLOC_BUTTON_PERCENT_WIDTH)/100; if ( m_pclAllocButton->Create(m_csName, WS_CHILD | BS_AUTOCHECKBOX | BS_PUSHLIKE, crButtonRect, pclWnd, CTL_fn_lGetNextAvailableIDForControl()) ) { m_pclAllocButton->SetFont(pclWnd->GetFont()); } //Creates the Open/Close MS Button m_pclOpenButton = new CPA_Editor_MiniStructureButton(this, m_csName, ECAR_MS_BUTTON_TYPE_OPEN); crButtonRect.left = crButtonRect.right; crButtonRect.right = crRect.right; if ( m_pclOpenButton->Create(m_csName, WS_CHILD | BS_AUTOCHECKBOX | BS_PUSHLIKE, crButtonRect, pclWnd, CTL_fn_lGetNextAvailableIDForControl()) ) { m_pclOpenButton->SetFont(pclWnd->GetFont()); } ////////////// ////////////// //Registers for TUT Module TUT_M_vGetTutDll(); CString csTUTButtonName = CString("OAc_MSView_MSAllocButton_") + m_csName; TUT_M_vRegisterControl(m_pclAllocButton->m_hWnd, csTUTButtonName, TUT_e_Button); csTUTButtonName = CString("OAc_MSView_MSOpenButton_") + m_csName; TUT_M_vRegisterControl(m_pclOpenButton->m_hWnd, csTUTButtonName, TUT_e_Button); //End of Registers for TUT Module ////////////// //Creates controls of the data list //// CTL_fn_vSetDefaultCallBackFunctionWhenStaticIsClicked(OAC_fn_vFieldNameStaticHasBeenClicked_CallBack); CTL_fn_vSetDefaultCallBackFunctionToGetStaticColor(OAC_fn_ColRefGetStaticColor_CallBack); CTL_fn_vSetModuleInfo("OAc", CString("MS ") + m_csName); ///for TUT //// POSITION pos = m_clControlList.GetHeadPosition(); while ( pos != NULL ) m_clControlList.GetNext(pos)->m_fn_bCreateControl(pclWnd); //// CTL_fn_vSetDefaultCallBackFunctionWhenStaticIsClicked(NULL); CTL_fn_vSetDefaultCallBackFunctionToGetStaticColor(NULL); CTL_fn_vResetModuleInfo(); //// //Customizes controls pos = m_clControlList.GetHeadPosition(); while ( pos != NULL ) OAC_fn_vCustomizeControl(m_clControlList.GetNext(pos), pclWnd); return crButtonRect.bottom; } //************************************************************************************** //Hides all controls void EdActors_MiniStructure::m_fn_vHideAllControls() { //Hides the MS Button if ( m_pclAllocButton != NULL ) m_pclAllocButton->ShowWindow(SW_HIDE); if ( m_pclOpenButton != NULL ) m_pclOpenButton->ShowWindow(SW_HIDE); //Hides controls of the data list m_clControlList.m_pub_fn_vHideAllControls(); } //************************************************************************************** //Shows all controls void EdActors_MiniStructure::m_fn_vShowAllControls() { //Shows the MS Button if ( m_pclAllocButton != NULL ) m_pclAllocButton->ShowWindow(SW_SHOW); if ( m_pclOpenButton != NULL ) m_pclOpenButton->ShowWindow(SW_SHOW); m_fn_vUpdateMSButton(); } //************************************************************************************** long EdActors_MiniStructure::m_fn_lMove(CRect crRect) { CRect crButtonRect(crRect); crButtonRect.right = crButtonRect.left + (crButtonRect.Width() * C_ALLOC_BUTTON_PERCENT_WIDTH)/100; if ( m_pclAllocButton != NULL ) m_pclAllocButton->MoveWindow(crButtonRect); crButtonRect.left = crButtonRect.right; crButtonRect.right = crRect.right; if ( m_pclOpenButton != NULL ) m_pclOpenButton->MoveWindow(crButtonRect); //Updates MS buttons m_fn_vUpdateMSButton(); return crRect.bottom; } //************************************************************************************** void EdActors_MiniStructure::m_fn_vOnButtonAlloc() { BOOL bMustRefresh = TRUE; if ( m_pclActorMS != NULL ) { if (m_pclActorMS->m_pclParentActor->m_pclActor->m_fn_bIsAModel()) { EdActors_EditorActorModel *pclModel = (EdActors_EditorActorModel *)m_pclActorMS->m_pclParentActor; if ( pclModel != NULL ) { //Allocation if ( !(m_pclActorMS->m_fn_bIsAllocated()) ) { //Proposes to allocate the MS //Warning message if ( g_pclInterface->m_clDocument.m_bMustConfirmAllocation ) { CString csMessage = "This Mini-structure is going to be allocated\nfor this Model and all its Instances !\nDo you want to continue ?"; EdActors_QuestionDialog dial(&g_oBaseFrame, csMessage); if ( dial.DoModal() == IDYES ) { if ( pclModel->m_fn_bAllocateMS(m_pclActorMS) ) { g_pclInterface->m_clDocument.m_fn_vSetPointers( g_pclInterface->m_clDocument.m_pclCurrentMiniStructureList, pclModel->m_pclActorCurrentMSList); m_fn_vGetMotorDatas(); m_fn_vHasBeenAllocated(); } } } //No warning message else if ( pclModel->m_fn_bAllocateMS(m_pclActorMS) ) { g_pclInterface->m_clDocument.m_fn_vSetPointers( g_pclInterface->m_clDocument.m_pclCurrentMiniStructureList, pclModel->m_pclActorCurrentMSList); m_fn_vGetMotorDatas(); m_fn_vHasBeenAllocated(); } } //Unallocation else { //Proposes to unallocate the MS //Warning message if ( g_pclInterface->m_clDocument.m_bMustConfirmUnallocation ) { CString csMessage = "This Mini-structure is going to be unallocated\nfor this Model and all its Instances !\nDo you want to continue ?"; EdActors_QuestionDialog dial(&g_oBaseFrame, csMessage); if ( dial.DoModal() == IDYES ) { if ( pclModel->m_fn_bUnallocateMS(m_pclActorMS) ) { g_pclInterface->m_clDocument.m_fn_vSetPointers( g_pclInterface->m_clDocument.m_pclCurrentMiniStructureList, pclModel->m_pclActorCurrentMSList); m_fn_vHasBeenUnallocated(); } } } //No warning message else if ( pclModel->m_fn_bUnallocateMS(m_pclActorMS) ) { g_pclInterface->m_clDocument.m_fn_vSetPointers( g_pclInterface->m_clDocument.m_pclCurrentMiniStructureList, pclModel->m_pclActorCurrentMSList); m_fn_vHasBeenUnallocated(); } } //Notifies m_pclActorMS->m_pclParentActor->m_pclActor->fn_vNotifySave(); } } else { EdActors_EditorActorInstance *pclInstance = (EdActors_EditorActorInstance *)m_pclActorMS->m_pclParentActor; if (pclInstance != NULL) { //Allocation if (!m_pclActorMS->m_fn_bIsAllocated()) { if (m_pclActorMS->m_fn_bAllocate(FALSE)) { g_pclInterface->m_clDocument.m_fn_vSetPointers(g_pclInterface->m_clDocument.m_pclCurrentMiniStructureList, pclInstance->m_pclActorCurrentMSList); m_fn_vGetMotorDatas(); m_fn_vHasBeenAllocated(); } } //Unallocation else { if (m_pclActorMS->m_fn_bUnallocate()) { g_pclInterface->m_clDocument.m_fn_vSetPointers(g_pclInterface->m_clDocument.m_pclCurrentMiniStructureList, pclInstance->m_pclActorCurrentMSList); m_fn_vHasBeenUnallocated(); } } //Notifies m_pclActorMS->m_pclParentActor->m_pclActor->fn_vNotifySave(); } } //Updates MS buttons m_fn_vUpdateMSButton(); //Updates all tree if ( bMustRefresh ) m_pclParent->m_fn_vUpdateTree(this); } } //************************************************************************************** void EdActors_MiniStructure::m_fn_vOnButtonOpen() { if ( m_pclActorMS != NULL ) { ERROR_ASSERT ( m_pclActorMS->m_fn_bIsAllocated() ); switch ( m_pclActorMS->m_tdeState ) { case MS_STATE_CLOSED : //Develops the MS m_pclActorMS->m_tdeState = MS_STATE_DEVELOPPED; break; case MS_STATE_DEVELOPPED : //Closes the MS m_pclActorMS->m_tdeState = MS_STATE_CLOSED; break; }; //Updates MS buttons m_fn_vUpdateMSButton(); //Updates all tree m_pclParent->m_fn_vUpdateTree(this); } } //************************************************************************************** long EdActors_MiniStructure::m_fn_lOpen(CRect crRect) { CRect crNextLineControlRect(crRect); CRect crSameLineControlRect(crNextLineControlRect); //Simulates a tabulation crNextLineControlRect.left += C_TABULATION; CPoint cpTopLeft = crRect.TopLeft(); CPoint cpTopRight = cpTopLeft; cpTopRight.x = crRect.right; m_clControlList.m_pub_fn_vDisplayControlsInZone(cpTopLeft, cpTopRight); return ( cpTopLeft.y - crRect.top ); } //************************************************************************************** void EdActors_MiniStructure::m_fn_vClose() { //Displays controls of the data list m_clControlList.m_pub_fn_vHideAllControls(); m_crControlZone = CRect(0,0,0,0); } //************************************************************************************** void EdActors_MiniStructure::m_fn_vOffsetZone(long lOffset) { m_crControlZone.OffsetRect(0, lOffset); } //************************************************************************************** void EdActors_MiniStructure::m_fn_vGetMotorDatas() { //Gets motor data for all controls of the data list //Retrieves it in the control m_clControlList.m_pub_fn_vUpdateControlsWithEditedData(TRUE); } //************************************************************************************** void EdActors_MiniStructure::m_fn_vUpdateMSButton() { m_pclAllocButton->m_fn_vUpdateMSButton(); m_pclOpenButton->m_fn_vUpdateMSButton(); } //************************************************************************************** //Called when mode is Instance void EdActors_MiniStructure::m_fn_vUpdateControlsForInstance() { if ( m_pclActorMS->m_fn_bIsAllocated() ) { CTL_Editor_Control *pclControl; POSITION ControlPos = m_clControlList.GetHeadPosition(); while ( ControlPos != NULL ) { pclControl = m_clControlList.GetNext(ControlPos); if ( OAC_fn_bIsLinked(pclControl->m_fn_pclGetEditedData()) ) { if ( (!pclControl->m_fn_bIsAlwaysReadOnly()) && (!pclControl->m_fn_bIsReadOnly()) ) pclControl->m_fn_vMakeReadOnly(); } else { if ( (!pclControl->m_fn_bIsAlwaysReadOnly()) && (pclControl->m_fn_bIsReadOnly()) ) pclControl->m_fn_vMakeReadWrite(); } } } } //************************************************************************************** //Called when mode is Model void EdActors_MiniStructure::m_fn_vUpdateControlsForModel() { if ( m_pclActorMS->m_fn_bIsAllocated() ) { CTL_Editor_Control *pclControl; POSITION ControlPos = m_clControlList.GetHeadPosition(); while ( ControlPos != NULL ) { pclControl = m_clControlList.GetNext(ControlPos); // Shaitan FastC { if ((pclControl->m_pub_fn_csGetControlName() == "FastC_Run") || (pclControl->m_pub_fn_csGetControlName() == "FastC_Run (not yet available for this model)")) { CAR_EDIT_TDSTACTOR *p_tdstActor = m_pclActorMS->m_pclParentActor->m_fn_ptdstGetMotorActor(); if (p_tdstActor->h_Brain->p_stMind->p_stAIModel->CFast_lFunction == 0) { pclControl->m_pub_fn_csSetControlName("FastC_Run (not yet available for this model)"); pclControl->m_fn_vMakeReadOnly(); } else { pclControl->m_pub_fn_csSetControlName("FastC_Run"); pclControl->m_fn_vMakeReadWrite(); } } else //End Shaitan FastC } if ( (!pclControl->m_fn_bIsAlwaysReadOnly()) && (pclControl->m_fn_bIsReadOnly()) ) pclControl->m_fn_vMakeReadWrite(); } } } //************************************************************************************** //Maniability tdeMiniStructureManiability EdActors_MiniStructure::m_fn_tdeGetManiability() { return m_tdeManiability; } //************************************************************************************** BOOL EdActors_MiniStructure::m_fn_bCanBeUnallocated() { return ( ( m_tdeManiability != MS_MANIABILITY_ALWAYS_ALLOCATED ) && ( m_tdeManiability != MS_MANIABILITY_ALLOCATED_ONLY_ONCE ) //can not be unallocated for this type ); } //************************************************************************************** BOOL EdActors_MiniStructure::m_fn_bCanBeAllocated() { return ( (m_tdeManiability == MS_MANIABILITY_NORMAL) || ( (m_tdeManiability == MS_MANIABILITY_ALLOCATED_ONLY_ONCE) && (!m_fn_bIsAlreadyAllocated()) ) ); } //************************************************************************************** void EdActors_MiniStructure::m_fn_vHasBeenAllocated() { m_bIsAlreadyAllocated = TRUE; } //************************************************************************************** void EdActors_MiniStructure::m_fn_vHasBeenUnallocated() { if ( m_tdeManiability == MS_MANIABILITY_ALLOCATED_ONLY_ONCE ) m_bIsAlreadyAllocated = FALSE; } //************************************************************************************** BOOL EdActors_MiniStructure::m_fn_bIsAlreadyAllocated() { return m_bIsAlreadyAllocated; } //************************************************************************************** //************************************************************************************** //************************************************************************************** EdActors_MiniStructureList::EdActors_MiniStructureList() { } //************************************************************************************** EdActors_MiniStructureList::~EdActors_MiniStructureList() { m_fn_vEmptyList(); } //************************************************************************************** EdActors_MiniStructure* EdActors_MiniStructureList::m_fn_pclAddElement( CString csName, tdeMiniStructureManiability tdeManiability) { EdActors_MiniStructure *pclNewElement = new EdActors_MiniStructure(csName, tdeManiability); AddTail(pclNewElement); return pclNewElement; } //************************************************************************************** void EdActors_MiniStructureList::m_fn_vEmptyList() { POSITION pos = GetHeadPosition(); while( pos != NULL ) delete (GetNext(pos)); RemoveAll(); } //************************************************************************************** void EdActors_MiniStructureList::m_fn_vUpdateControlsForInstance() { POSITION pos = GetHeadPosition(); while( pos != NULL ) GetNext(pos)->m_fn_vUpdateControlsForInstance(); } //************************************************************************************** void EdActors_MiniStructureList::m_fn_vUpdateControlsForModel() { POSITION pos = GetHeadPosition(); while( pos != NULL ) GetNext(pos)->m_fn_vUpdateControlsForModel(); } //************************************************************************************** // Searches and Highlites the given Data void EdActors_MiniStructureList::m_fn_vHighliteData(CTL_Editor_Data *pclData) { //Searches for the Data BOOL bFound = FALSE; CTL_Editor_Control *pclControl; EdActors_MiniStructure *pclMS; POSITION ControlPos; POSITION MSpos = GetHeadPosition(); while( (MSpos != NULL) && (!bFound) ) { pclMS = GetNext(MSpos); ControlPos = pclMS->m_clControlList.GetHeadPosition(); while ( (ControlPos != NULL) && (!bFound) ) { pclControl = pclMS->m_clControlList.GetNext(ControlPos); bFound = ( pclControl->m_fn_pclGetEditedData() == pclData ); } } ERROR_ASSERT( bFound ); //Opens the MS if ( !(pclMS->m_pclActorMS->m_fn_bIsOpen()) ) { ERROR_ASSERT( pclMS->m_pclActorMS->m_fn_bIsAllocated() ); pclMS->m_pclActorMS->m_tdeState = MS_STATE_DEVELOPPED; } //Highlites it // pclControl->m_fn_vHighlite(); } //************************************************************************************** //************************************************************************************** //************************************************************************************** // Definition of the class for the list of lists of mini-structures //************************************************************************************** EdActors_MSListsList::EdActors_MSListsList() { } //************************************************************************************** EdActors_MSListsList::~EdActors_MSListsList() { } //************************************************************************************** EdActors_MiniStructureList *EdActors_MSListsList::m_fn_pclAddElement(/*CString csGroupName*/) { EdActors_MiniStructureList *pclCreatedElement; pclCreatedElement = new EdActors_MiniStructureList(); AddTail(pclCreatedElement); return pclCreatedElement; } //************************************************************************************** //Returns NULL if Index is not in a right range EdActors_MiniStructureList *EdActors_MSListsList::m_fn_pclGetListFromIndex(unsigned char ucIndex) { unsigned char ucCurrentIndex = 0; EdActors_MiniStructureList *pclMSList = NULL; POSITION pos = GetHeadPosition(); while ( pos != NULL ) { if ( ucCurrentIndex == ucIndex ) pclMSList = GetNext(pos); else GetNext(pos); ucCurrentIndex ++; } return pclMSList; }