3071 lines
92 KiB
C++
3071 lines
92 KiB
C++
/*=========================================================================
|
|
*
|
|
* SECmodif.cpp : Implementation of Editor Modifications
|
|
*
|
|
*
|
|
* Version 1.0
|
|
* Creation date
|
|
* Revision date
|
|
*
|
|
* Shaitan
|
|
*=======================================================================*/
|
|
|
|
#include "stdafx.h"
|
|
#include "acp_base.h"
|
|
#define ENV_FRIEND
|
|
#define SCTFriend
|
|
|
|
#include "SECmodif.hpp"
|
|
|
|
#include "SECdSel.hpp"
|
|
#include "SEClDias.hpp"
|
|
//Shaitan Clean Env
|
|
//#include "SEClEnvs.hpp"
|
|
//#include "SECdEnv.hpp"
|
|
//#include "SECdEnvs.hpp"
|
|
//#include "SECdSrfs.hpp"
|
|
|
|
#undef SCTFriend
|
|
#undef ENV_FRIEND
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifSectorLinks
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifSectorLinks::SECT_ModifSectorLinks(Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pEditedSector, CPA_SuperObject *pSectorToAdd,
|
|
tdeTypeList eListToUpdate)
|
|
: CPA_Modif(TYPE_SECTORLINKS, "SectorLinks", FALSE)
|
|
{
|
|
Sector_Object *pSector;
|
|
tdeTypeList eList;
|
|
int iList;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pEditedSector = pEditedSector;
|
|
m_pSectorToAdd = pSectorToAdd;
|
|
m_eCurrentEditMode = m_pSectorInterface->GetEditMode();
|
|
// get corresponding parameters
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
// init arrays
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
m_aElements[iList] = NULL;
|
|
m_aSymElems[iList] = NULL;
|
|
m_aHadSymElem[iList] = FALSE;
|
|
}
|
|
// init element for single modif
|
|
if (eListToUpdate != E_NoActiveList)
|
|
{
|
|
// init unique element
|
|
if (m_eModifType == E_mt_DelSectorInList)
|
|
m_aElements[eListToUpdate] = pSector->GetCurrentList(eListToUpdate)->GetElementWithSector(m_pSectorToAdd);
|
|
else
|
|
m_aElements[eListToUpdate] = pSector->GetNewElement(eListToUpdate, m_pSectorToAdd);
|
|
}
|
|
// init elements for multiple modif
|
|
else
|
|
{
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
if (m_pSectorInterface->GetListActivity(eList))
|
|
{
|
|
// init element
|
|
if (m_eModifType == E_mt_DelSectorInList)
|
|
m_aElements[eList] = pSector->GetCurrentList(eList)->GetElementWithSector(m_pSectorToAdd);
|
|
else
|
|
m_aElements[eList] = pSector->GetNewElement(eList, m_pSectorToAdd);
|
|
}
|
|
}
|
|
}
|
|
|
|
// init for symetric
|
|
m_bSymetric = m_pSectorInterface->fn_bSymetricMode();
|
|
if (m_bSymetric)
|
|
fn_vInitSymetricLinks();
|
|
}
|
|
|
|
|
|
SECT_ModifSectorLinks::~SECT_ModifSectorLinks (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSectorLinks::Do (void)
|
|
{
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSectObject;
|
|
tdeTypeList eList;
|
|
int iList;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// get edited sector
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
if (m_aElements[eList] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(eList);
|
|
// add sector in list
|
|
if (m_eModifType == E_mt_AddSectorInList)
|
|
{
|
|
pSectObject->fn_bAddSectorInList(m_aElements[eList], eList);
|
|
m_bAdded = TRUE;
|
|
}
|
|
// remove sector in list
|
|
else if (pCurrentList->GetElementWithSector(m_pSectorToAdd))
|
|
{
|
|
pSectObject->fn_bRemoveSectorInList(m_aElements[eList], eList);
|
|
m_bAdded = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
// if necessary, update symetric link
|
|
if (m_bSymetric)
|
|
fn_vUpdateSymetricLinks(TRUE);
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSectorLinks::Undo (void)
|
|
{
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSectObject;
|
|
tdeTypeList eList;
|
|
int iList;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// get edited sector
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
if (m_aElements[eList] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(eList);
|
|
// add sector in list
|
|
if (m_eModifType == E_mt_DelSectorInList)
|
|
{
|
|
// add sector
|
|
pSectObject->fn_bAddSectorInList(m_aElements[eList], eList);
|
|
m_bAdded = TRUE;
|
|
}
|
|
// remove sector in list
|
|
else if (pCurrentList->GetElementWithSector(m_pSectorToAdd))
|
|
{
|
|
pSectObject->fn_bRemoveSectorInList(m_aElements[eList], eList);
|
|
m_bAdded = FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
// if necessary, update symetric link
|
|
if (m_bSymetric)
|
|
fn_vUpdateSymetricLinks(FALSE);
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Init Symetric Links
|
|
=========================================================================*/
|
|
void SECT_ModifSectorLinks::fn_vInitSymetricLinks (void)
|
|
{
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSectObject;
|
|
|
|
// get parameters
|
|
pSectObject = (Sector_Object *) m_pSectorToAdd->GetObject();
|
|
|
|
// graphic link
|
|
if (m_aElements[E_Graphic] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(E_Graphic);
|
|
// get corresponding element
|
|
m_aSymElems[E_Graphic] = pCurrentList->GetElementWithSector(m_pEditedSector);
|
|
m_aHadSymElem[E_Graphic] = (m_aSymElems[E_Graphic] != NULL);
|
|
|
|
// if necessary, create it
|
|
if (m_eModifType == E_mt_AddSectorInList)
|
|
{
|
|
// if necessary, create it
|
|
if (!m_aSymElems[E_Graphic])
|
|
m_aSymElems[E_Graphic] = new SECT_GraphicElement(m_pEditedSector, pSectObject);
|
|
// update graphic level
|
|
((SECT_GraphicElement *) m_aElements[E_Graphic])->SetGraphicLevel(((SECT_GraphicElement *) m_aSymElems[E_Graphic])->GetGraphicLevel());
|
|
// update graphic mode
|
|
((SECT_GraphicElement *) m_aElements[E_Graphic])->SetGraphicMode(((SECT_GraphicElement *) m_aSymElems[E_Graphic])->GetGraphicMode());
|
|
}
|
|
}
|
|
|
|
// collision link
|
|
if (m_aElements[E_Collision] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(E_Collision);
|
|
// get corresponding element
|
|
m_aSymElems[E_Collision] = pCurrentList->GetElementWithSector(m_pEditedSector);
|
|
m_aHadSymElem[E_Collision] = (m_aSymElems[E_Collision] != NULL);
|
|
|
|
// if necessary, create it
|
|
if (m_eModifType == E_mt_AddSectorInList)
|
|
{
|
|
// if necessary, create it
|
|
if (!m_aSymElems[E_Collision])
|
|
m_aSymElems[E_Collision] = new SECT_CollisionElement(m_pEditedSector, pSectObject);
|
|
}
|
|
}
|
|
|
|
// activity link
|
|
if (m_aElements[E_Activity] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(E_Activity);
|
|
// get corresponding element
|
|
m_aSymElems[E_Activity] = pCurrentList->GetElementWithSector(m_pEditedSector);
|
|
m_aHadSymElem[E_Activity] = (m_aSymElems[E_Activity] != NULL);
|
|
|
|
// if necessary, create it
|
|
if (m_eModifType == E_mt_AddSectorInList)
|
|
{
|
|
// if necessary, create it
|
|
if (!m_aSymElems[E_Activity])
|
|
m_aSymElems[E_Activity] = new SECT_ActivityElement(m_pEditedSector, pSectObject);
|
|
}
|
|
}
|
|
|
|
// sound link
|
|
if (m_aElements[E_Sound] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(E_Sound);
|
|
// get corresponding element
|
|
m_aSymElems[E_Sound] = pCurrentList->GetElementWithSector(m_pEditedSector);
|
|
m_aHadSymElem[E_Sound] = (m_aSymElems[E_Sound] != NULL);
|
|
|
|
// if necessary, create it
|
|
if (m_eModifType == E_mt_AddSectorInList)
|
|
{
|
|
// if necessary, create it
|
|
if (!m_aSymElems[E_Sound])
|
|
m_aSymElems[E_Sound] = new SECT_SoundElement(m_pEditedSector, pSectObject);
|
|
// update parameter
|
|
((SECT_SoundElement *) m_aElements[E_Sound])->SetSoundLevel(((SECT_SoundElement *) m_aSymElems[E_Sound])->GetSoundLevel());
|
|
}
|
|
}
|
|
|
|
// sound event link
|
|
if (m_aElements[E_SoundEvent] != NULL)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(E_SoundEvent);
|
|
// get corresponding element
|
|
m_aSymElems[E_SoundEvent] = pCurrentList->GetElementWithSector(m_pEditedSector);
|
|
m_aHadSymElem[E_SoundEvent] = (m_aSymElems[E_SoundEvent] != NULL);
|
|
|
|
// if necessary, create it
|
|
if (m_eModifType == E_mt_AddSectorInList)
|
|
{
|
|
// if necessary, create it
|
|
if (!m_aSymElems[E_SoundEvent])
|
|
m_aSymElems[E_SoundEvent] = new SECT_SoundElement(m_pEditedSector, pSectObject);
|
|
// update parameter
|
|
((SECT_SoundEventElement *) m_aElements[E_SoundEvent])->fn_vCopyMissingSoundEvents((SECT_SoundEventElement *) m_aSymElems[E_SoundEvent], FALSE);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*===========================================================================
|
|
Update Symetric Links
|
|
=========================================================================*/
|
|
void SECT_ModifSectorLinks::fn_vUpdateSymetricLinks (BOOL bDo)
|
|
{
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSectObject;
|
|
tdeTypeList eList;
|
|
int iList;
|
|
|
|
// get parameters
|
|
pSectObject = (Sector_Object *) m_pSectorToAdd->GetObject();
|
|
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
// get current list
|
|
eList = (tdeTypeList) iList;
|
|
if (m_aSymElems[eList] != NULL)
|
|
{
|
|
pCurrentList = pSectObject->GetCurrentList(eList);
|
|
// update link
|
|
switch (m_eModifType)
|
|
{
|
|
case E_mt_AddSectorInList:
|
|
if (bDo)
|
|
pSectObject->fn_bAddSectorInList(m_aSymElems[eList], eList);
|
|
else if (!m_aHadSymElem[eList])
|
|
pSectObject->fn_bRemoveSectorInList(m_aSymElems[eList], eList);
|
|
break;
|
|
|
|
case E_mt_DelSectorInList:
|
|
if (bDo)
|
|
pSectObject->fn_bRemoveSectorInList(m_aSymElems[eList], eList);
|
|
else if (m_aHadSymElem[eList])
|
|
pSectObject->fn_bAddSectorInList(m_aSymElems[eList], eList);
|
|
}
|
|
if (g_bCanSave)
|
|
m_aSymElems[eList]->fn_vWriteSection();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSectorLinks::fn_vReinitEditorState (void)
|
|
{
|
|
int iList;
|
|
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(m_eCurrentEditMode, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
// list mode => update current list
|
|
if (m_eCurrentEditMode == E_em_EditList)
|
|
{
|
|
m_pSectorInterface->SetListActivity(E_NoActiveList, FALSE, FALSE);
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
if (m_aElements[(tdeTypeList) iList] != NULL)
|
|
m_pSectorInterface->SetListActivity((tdeTypeList) iList, TRUE, FALSE);
|
|
}
|
|
}
|
|
// sector mode => update selected sector
|
|
else if (m_eCurrentEditMode == E_em_EditSector)
|
|
m_pSectorInterface->fn_vSelectNewSector(m_pSectorToAdd, FALSE, FALSE);
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSectorLinks::fn_vUpdateEditorState (void)
|
|
{
|
|
SECT_DialogBase *pSingleList;
|
|
SECT_ListBase *pCurrentList;
|
|
tdeTypeList eList;
|
|
int iList;
|
|
|
|
// update drawing
|
|
if (m_eCurrentEditMode == E_em_EditList)
|
|
{
|
|
m_pSectorInterface->fn_vSetRecursiveColor(m_pSectorToAdd, (m_bAdded) ? C_ColorShow : C_NoColor);
|
|
m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
|
|
}
|
|
else if (m_eCurrentEditMode == E_em_EditSector)
|
|
m_pSectorInterface->GetDialogSel()->fn_vReinitDialog(m_pSectorToAdd, m_pEditedSector);
|
|
|
|
// update dialogs
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
// get parameters
|
|
pSingleList = m_pSectorInterface->GetSingleList(eList);
|
|
pCurrentList = ((Sector_Object *) m_pEditedSector->GetObject())->GetCurrentList(eList);
|
|
|
|
if (m_eCurrentEditMode == E_em_EditList)
|
|
pSingleList->fn_vInitSectorList(pCurrentList);
|
|
else if (m_eCurrentEditMode == E_em_EditSector)
|
|
{
|
|
pSingleList->fn_vInitSectorList(pCurrentList);
|
|
pSingleList->fn_vUpdateSelection(m_pSectorToAdd);
|
|
}
|
|
}
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Sector Links Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Sector Links Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifFullLinks
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Save Link
|
|
=========================================================================*/
|
|
SECT_SaveFullLink::SECT_SaveFullLink (Sector_Object *pSector, SECT_ElementBase *pElement, tdeTypeList eList)
|
|
{
|
|
// save parameters
|
|
m_pSector = pSector;
|
|
m_eListToUpdate = eList;
|
|
// create corresponding element
|
|
m_pElement = pElement;
|
|
}
|
|
|
|
SECT_SaveFullLink::~SECT_SaveFullLink (void)
|
|
{
|
|
|
|
}
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifFullLink::SECT_ModifFullLink (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pEditedSector, tdeTypeList eListToUpdate)
|
|
: CPA_Modif(TYPE_FULLLINK, "FullLink", FALSE)
|
|
{
|
|
CPA_BaseObjectList *pListSector;
|
|
SECT_ElementBase *pElement;
|
|
CPA_BaseObject *pElem;
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSector, *pSectObj;
|
|
Position Pos;
|
|
POSITION pos;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pEditedSector = pEditedSector;
|
|
m_eListToUpdate = eListToUpdate;
|
|
// get corresponding parameters
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
pCurrentList = pSector->GetCurrentList(m_eListToUpdate);
|
|
pListSector = m_pSectorInterface->GetBaseObjectList(C_szSectorTypeName);
|
|
if (m_eModifType == E_mt_AddFullLink)
|
|
{
|
|
for (pElem = pListSector->GetHeadElement(Pos); pElem;
|
|
pElem = pListSector->GetNextElement(Pos))
|
|
{
|
|
// get sector
|
|
pSectObj = (Sector_Object *) pElem;
|
|
// check if element exists
|
|
if (pSectObj != pSector)
|
|
pElement = pCurrentList->GetElementWithSector(pSectObj->GetSuperObject());
|
|
if ((!pElement)&&(pSectObj != pSector))
|
|
{
|
|
// create element
|
|
pElement = pSector->GetNewElement(m_eListToUpdate, pSectObj->GetSuperObject());
|
|
// add it to the list
|
|
m_oListOfSectors.AddTail(pElement);
|
|
}
|
|
}
|
|
}
|
|
if (m_eModifType == E_mt_DelFullLink)
|
|
{
|
|
for (pElement = pCurrentList->GetHeadElementBase(pos); pElement;
|
|
pElement = pCurrentList->GetNextElementBase(pos))
|
|
m_oListOfSectors.AddTail(pElement);
|
|
}
|
|
// init for symetric
|
|
m_bSymetric = m_pSectorInterface->fn_bSymetricMode();
|
|
if (m_bSymetric)
|
|
fn_vInitSymetricLinks();
|
|
}
|
|
|
|
|
|
SECT_ModifFullLink::~SECT_ModifFullLink (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifFullLink::Do (void)
|
|
{
|
|
SECT_ElementBase *pElem;
|
|
Sector_Object *pSector;
|
|
POSITION pos;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// get current list
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
// add sectors in list
|
|
for (pElem = m_oListOfSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListOfSectors.GetNextElement(pos))
|
|
{
|
|
if (m_eModifType == E_mt_AddFullLink)
|
|
pSector->fn_bAddSectorInList(pElem, m_eListToUpdate);
|
|
if (m_eModifType == E_mt_DelFullLink)
|
|
pSector->fn_bRemoveSectorInList(pElem, m_eListToUpdate);
|
|
}
|
|
// if necessary, update symetric link
|
|
if (m_bSymetric)
|
|
fn_vUpdateSymetricLinks(m_eModifType == E_mt_AddFullLink);
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifFullLink::Undo (void)
|
|
{
|
|
SECT_ElementBase *pElem;
|
|
Sector_Object *pSector;
|
|
POSITION pos;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// get current list
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
// add sector in list
|
|
for (pElem = m_oListOfSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListOfSectors.GetNextElement(pos))
|
|
{
|
|
if (m_eModifType == E_mt_AddFullLink)
|
|
pSector->fn_bRemoveSectorInList(pElem, m_eListToUpdate);
|
|
if (m_eModifType == E_mt_DelFullLink)
|
|
pSector->fn_bAddSectorInList(pElem, m_eListToUpdate);
|
|
}
|
|
|
|
// if necessary, update symetric link
|
|
if (m_bSymetric)
|
|
fn_vUpdateSymetricLinks(m_eModifType == E_mt_DelFullLink);
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Init Symetric Links
|
|
=========================================================================*/
|
|
void SECT_ModifFullLink::fn_vInitSymetricLinks (void)
|
|
{
|
|
CPA_BaseObjectList *pListSector;
|
|
SECT_SaveFullLink *pSaveLink;
|
|
SECT_ElementBase *pElement;
|
|
CPA_BaseObject *pElem;
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSector;
|
|
Position Pos;
|
|
|
|
// check all sectors
|
|
pListSector = m_pSectorInterface->GetBaseObjectList(C_szSectorTypeName);
|
|
for (pElem = pListSector->GetHeadElement(Pos); pElem;
|
|
pElem = pListSector->GetNextElement(Pos))
|
|
{
|
|
// get sector
|
|
pSector = (Sector_Object *) pElem;
|
|
pCurrentList = pSector->GetCurrentList(m_eListToUpdate);
|
|
// check if element exists
|
|
pElement = pCurrentList->GetElementWithSector(m_pEditedSector);
|
|
if ((m_eModifType == E_mt_AddFullLink)&&(pElement == NULL))
|
|
{
|
|
pElement = pSector->GetNewElement(m_eListToUpdate, m_pEditedSector);
|
|
pSaveLink = new SECT_SaveFullLink(pSector, pElement, m_eListToUpdate);
|
|
m_oListOfSymetrics.AddTail(pSaveLink);
|
|
}
|
|
if ((m_eModifType == E_mt_DelFullLink)&&(pElement != NULL))
|
|
{
|
|
pSaveLink = new SECT_SaveFullLink(pSector, pElement, m_eListToUpdate);
|
|
m_oListOfSymetrics.AddTail(pSaveLink);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*===========================================================================
|
|
Update Symetric Links
|
|
=========================================================================*/
|
|
void SECT_ModifFullLink::fn_vUpdateSymetricLinks (BOOL bDo)
|
|
{
|
|
SECT_SaveFullLink *pSaveLink;
|
|
POSITION pos;
|
|
|
|
for (pSaveLink = m_oListOfSymetrics.GetHeadElement(pos); pSaveLink;
|
|
pSaveLink = m_oListOfSymetrics.GetNextElement(pos))
|
|
{
|
|
if (bDo)
|
|
pSaveLink->m_pSector->fn_bAddSectorInList(pSaveLink->m_pElement, m_eListToUpdate);
|
|
else
|
|
pSaveLink->m_pSector->fn_bRemoveSectorInList(pSaveLink->m_pElement, m_eListToUpdate);
|
|
}
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifFullLink::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditSector, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
// sector mode => update selected sector
|
|
m_pSectorInterface->fn_vSelectNewSector(NULL, FALSE, FALSE);
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifFullLink::fn_vUpdateEditorState (void)
|
|
{
|
|
SECT_DialogBase *pSingleList;
|
|
SECT_ListBase *pCurrentList;
|
|
|
|
// get parameters
|
|
pSingleList = m_pSectorInterface->GetSingleList(m_eListToUpdate);
|
|
pCurrentList = ((Sector_Object *) m_pEditedSector->GetObject())->GetCurrentList(m_eListToUpdate);
|
|
|
|
m_pSectorInterface->GetDialogSel()->fn_vReinitDialog(NULL, m_pEditedSector);
|
|
pSingleList->fn_vInitSectorList(pCurrentList);
|
|
pSingleList->fn_vUpdateSelection(NULL);
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Full Link Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Full Link Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifSectorParams
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifSectorParams::SECT_ModifSectorParams (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
tdeTypeList eListToUpdate, SECT_ElementBase *pElem,
|
|
int iNewValue, SECT_SoundEvent *pSoundEvent)
|
|
: CPA_Modif(TYPE_SECTORPARAMS, "SectorParams", FALSE)
|
|
{
|
|
SECT_ElementBase *pSymElem;
|
|
Sector_Object *pSector;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_pEditedSector = pInterface->GetEditedSector();
|
|
m_pSelectedSector = pElem->GetSector();
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_iNewValue = iNewValue;
|
|
m_pSoundEvent = pSoundEvent;
|
|
m_pElementToUpdate = pElem;
|
|
m_eListToUpdate = eListToUpdate;
|
|
m_bSymetricLink = m_pSectorInterface->fn_bSymetricMode();
|
|
// save parameters
|
|
if (m_pSelectedSector)
|
|
{
|
|
pSector = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pSymElem = pSector->GetCurrentList(eListToUpdate)->GetElementWithSector(m_pEditedSector);
|
|
|
|
switch (m_eModifType)
|
|
{
|
|
case E_mt_ChangeLevelOfDetail:
|
|
m_iOldValue = ((SECT_GraphicElement *) pElem)->GetGraphicLevel();
|
|
if (m_bSymetricLink)
|
|
m_iOldSymetric = ((SECT_GraphicElement *) pSymElem)->GetGraphicLevel();
|
|
break;
|
|
case E_mt_ChangeGraphicMode:
|
|
m_iOldValue = ((SECT_GraphicElement *) pElem)->GetGraphicMode();
|
|
if (m_bSymetricLink)
|
|
m_iOldSymetric = ((SECT_GraphicElement *) pSymElem)->GetGraphicMode();
|
|
break;
|
|
case E_mt_ChangeSoundVolume:
|
|
m_iOldValue = ((SECT_SoundElement *) pElem)->GetSoundLevel();
|
|
if (m_bSymetricLink)
|
|
m_iOldSymetric = ((SECT_SoundElement *) pSymElem)->GetSoundLevel();
|
|
break;
|
|
case E_mt_AddSoundEvent:
|
|
case E_mt_DelSoundEvent:
|
|
m_iOldValue = -1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
SECT_ModifSectorParams::~SECT_ModifSectorParams (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSectorParams::Do (void)
|
|
{
|
|
SECT_ElementBase *pElem = NULL;
|
|
Sector_Object *pSectObject;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// if necessary, update symetric link
|
|
if ((m_bSymetricLink)&&(m_pSelectedSector))
|
|
{
|
|
pSectObject = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pElem = pSectObject->GetCurrentList(m_eListToUpdate)->GetElementWithSector(m_pEditedSector);
|
|
}
|
|
// get current list
|
|
switch (m_eModifType)
|
|
{
|
|
case E_mt_ChangeLevelOfDetail:
|
|
// update level
|
|
((SECT_GraphicElement *) m_pElementToUpdate)->SetGraphicLevel(m_iNewValue);
|
|
// update symetric link
|
|
if (pElem)
|
|
((SECT_GraphicElement *) pElem)->SetGraphicLevel(m_iNewValue);
|
|
break;
|
|
case E_mt_ChangeGraphicMode:
|
|
// update level
|
|
((SECT_GraphicElement *) m_pElementToUpdate)->SetGraphicMode(m_iNewValue);
|
|
// update symetric link
|
|
if (pElem)
|
|
((SECT_GraphicElement *) pElem)->SetGraphicMode(m_iNewValue);
|
|
break;
|
|
case E_mt_ChangeSoundVolume:
|
|
// update level
|
|
((SECT_SoundElement *) m_pElementToUpdate)->SetSoundLevel(m_iNewValue);
|
|
// update symetric link
|
|
if (pElem)
|
|
((SECT_SoundElement *) pElem)->SetSoundLevel(m_iNewValue);
|
|
break;
|
|
case E_mt_AddSoundEvent:
|
|
// add sound event
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bAddAnElement(m_pSelectedSector, m_pSoundEvent);
|
|
// update symetric link
|
|
if ((m_bSymetricLink)&&(m_pSelectedSector))
|
|
{
|
|
pSectObject = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bAddAnElement(m_pEditedSector, m_pSoundEvent);
|
|
}
|
|
break;
|
|
|
|
case E_mt_DelSoundEvent:
|
|
// add sound event
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bRemoveAnElement(m_pSelectedSector, m_pSoundEvent);
|
|
// update symetric link
|
|
if ((m_bSymetricLink)&&(m_pSelectedSector))
|
|
{
|
|
pSectObject = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bRemoveAnElement(m_pEditedSector, m_pSoundEvent);
|
|
}
|
|
break;
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSectorParams::Undo (void)
|
|
{
|
|
SECT_ElementBase *pElem = NULL;
|
|
Sector_Object *pSectObject;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// if necessary, update symetric link
|
|
if ((m_bSymetricLink)&&(m_pSelectedSector))
|
|
{
|
|
pSectObject = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pElem = pSectObject->GetCurrentList(m_eListToUpdate)->GetElementWithSector(m_pEditedSector);
|
|
}
|
|
// get current list
|
|
switch (m_eModifType)
|
|
{
|
|
case E_mt_ChangeLevelOfDetail:
|
|
// set level
|
|
((SECT_GraphicElement *) m_pElementToUpdate)->SetGraphicLevel(m_iOldValue);
|
|
// update symetric link
|
|
if (pElem)
|
|
((SECT_GraphicElement *) pElem)->SetGraphicLevel(m_iOldSymetric);
|
|
break;
|
|
case E_mt_ChangeGraphicMode:
|
|
// set level
|
|
((SECT_GraphicElement *) m_pElementToUpdate)->SetGraphicMode(m_iOldValue);
|
|
// update symetric link
|
|
if (pElem)
|
|
((SECT_GraphicElement *) pElem)->SetGraphicMode(m_iOldSymetric);
|
|
break;
|
|
case E_mt_ChangeSoundVolume:
|
|
// set level
|
|
((SECT_SoundElement *) m_pElementToUpdate)->SetSoundLevel(m_iOldValue);
|
|
// update symetric link
|
|
if (pElem)
|
|
((SECT_SoundElement *) pElem)->SetSoundLevel(m_iOldSymetric);
|
|
break;
|
|
case E_mt_AddSoundEvent:
|
|
// add sound event
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bRemoveAnElement(m_pSelectedSector, m_pSoundEvent);
|
|
// update symetric link
|
|
if ((m_bSymetricLink)&&(m_pSelectedSector))
|
|
{
|
|
pSectObject = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bRemoveAnElement(m_pEditedSector, m_pSoundEvent);
|
|
}
|
|
break;
|
|
|
|
case E_mt_DelSoundEvent:
|
|
// add sound event
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bAddAnElement(m_pSelectedSector, m_pSoundEvent);
|
|
// update symetric link
|
|
if ((m_bSymetricLink)&&(m_pSelectedSector))
|
|
{
|
|
pSectObject = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
pSectObject->GetSoundEventList()->fn_bAddAnElement(m_pEditedSector, m_pSoundEvent);
|
|
}
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSectorParams::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditSector, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
// update selected sector
|
|
m_pSectorInterface->fn_vSelectNewSector(m_pSelectedSector, FALSE, FALSE);
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSectorParams::fn_vUpdateEditorState (void)
|
|
{
|
|
SECT_DialogBase *pSingleList;
|
|
SECT_ListBase *pCurrentList;
|
|
|
|
// reinit selection dialog
|
|
if (!m_bFirstTime)
|
|
m_pSectorInterface->GetDialogSel()->fn_vReinitDialog(m_pSelectedSector, m_pEditedSector);
|
|
// reinit corresponding list dialog
|
|
switch (m_eModifType)
|
|
{
|
|
case E_mt_ChangeLevelOfDetail:
|
|
case E_mt_ChangeGraphicMode:
|
|
pSingleList = m_pSectorInterface->GetSingleList(E_Graphic);
|
|
pCurrentList = ((Sector_Object *) m_pEditedSector->GetObject())->GetCurrentList(E_Graphic);
|
|
break;
|
|
case E_mt_ChangeSoundVolume:
|
|
pSingleList = m_pSectorInterface->GetSingleList(E_Sound);
|
|
pCurrentList = ((Sector_Object *) m_pEditedSector->GetObject())->GetCurrentList(E_Sound);
|
|
break;
|
|
case E_mt_AddSoundEvent:
|
|
case E_mt_DelSoundEvent:
|
|
pSingleList = m_pSectorInterface->GetSingleList(E_SoundEvent);
|
|
pCurrentList = ((Sector_Object *) m_pEditedSector->GetObject())->GetCurrentList(E_SoundEvent);
|
|
break;
|
|
}
|
|
pSingleList->fn_vInitSectorList(pCurrentList);
|
|
pSingleList->fn_vUpdateSelection(m_pSelectedSector);
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Link parameters Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Link parameters Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifEnvAndSrf
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifEnvAndSrf::SECT_ModifEnvAndSrf (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pEditedSector, long lNumEnvElem,
|
|
SECT_Environment *pNewEnv, SECT_Surface *pNewSurf)
|
|
: CPA_Modif(TYPE_ENVANDSRF, "EnvAndSrf", FALSE)
|
|
{
|
|
Sector_Object *pSectObj;
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_pEditedSector = pEditedSector;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
|
|
switch (m_eModifType)
|
|
{
|
|
case E_mt_AddEnvAndSrf:
|
|
m_pNewEnvElem = new SECT_EnvElem(pNewEnv, pSectObj);
|
|
m_pNewSurfElem = new SECT_SurfElem(pNewSurf, pSectObj);
|
|
m_pOldEnvElem = NULL;
|
|
m_pOldSurfElem = NULL;
|
|
break;
|
|
case E_mt_DelEnvAndSrf:
|
|
m_pOldEnvElem = pSectObj->GetEnvironment(lNumEnvElem);
|
|
m_pOldSurfElem = pSectObj->GetSurface(lNumEnvElem);
|
|
if (!m_pOldSurfElem)
|
|
m_pOldSurfElem = pSectObj->GetSurface(lNumEnvElem-1);
|
|
m_pNewEnvElem = NULL;
|
|
m_pNewSurfElem = NULL;
|
|
}
|
|
}
|
|
*/
|
|
|
|
|
|
/*
|
|
SECT_ModifEnvAndSrf::~SECT_ModifEnvAndSrf (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifEnvAndSrf::Do (void)
|
|
{
|
|
Sector_Object *pSectObj;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update list
|
|
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
|
|
if (m_eModifType == E_mt_AddEnvAndSrf)
|
|
pSectObj->fn_bAddEnvironmentElement(m_pNewEnvElem, m_pNewSurfElem);
|
|
else if (m_eModifType == E_mt_DelEnvAndSrf)
|
|
pSectObj->fn_bDelEnvironmentElement(m_pOldEnvElem, m_pOldSurfElem);
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifEnvAndSrf::Undo (void)
|
|
{
|
|
Sector_Object *pSectObj;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update list
|
|
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
|
|
if (m_eModifType == E_mt_AddEnvAndSrf)
|
|
pSectObj->fn_bDelEnvironmentElement(m_pNewEnvElem, m_pNewSurfElem);
|
|
else if (m_eModifType == E_mt_DelEnvAndSrf)
|
|
pSectObj->fn_bAddEnvironmentElement(m_pOldEnvElem, m_pOldSurfElem);
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifEnvAndSrf::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifEnvAndSrf::fn_vUpdateEditorState (void)
|
|
{
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Env&Srf Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Env&Srf Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifEnvElem
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifEnvElem::SECT_ModifEnvElem (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_EnvElem *pEnvElem, SECT_Environment *pNewEnv,
|
|
long lNumEnvElem)
|
|
: CPA_Modif(TYPE_MODIFENV, "ChangeEnv", FALSE)
|
|
{
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_pEditedSector = m_pSectorInterface->GetEditedSector();
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_lNumEnvElem = lNumEnvElem;
|
|
m_pEnvElem = pEnvElem;
|
|
m_pOldEnv = pEnvElem->GetEnvironment();
|
|
m_pNewEnv = pNewEnv;
|
|
}
|
|
|
|
|
|
SECT_ModifEnvElem::~SECT_ModifEnvElem (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifEnvElem::Do (void)
|
|
{
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update environment
|
|
if (m_eModifType == E_mt_ChangeEnv)
|
|
m_pEnvElem->SetEnvironment(m_pNewEnv);
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifEnvElem::Undo (void)
|
|
{
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update environment
|
|
if (m_eModifType == E_mt_ChangeEnv)
|
|
m_pEnvElem->SetEnvironment(m_pOldEnv);
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifEnvElem::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifEnvElem::fn_vUpdateEditorState (void)
|
|
{
|
|
// reinit envlist
|
|
if (!m_bFirstTime)
|
|
m_pSectorInterface->GetDialogEnvList()->fn_vInitEnvElem(m_lNumEnvElem);
|
|
|
|
// status bar
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Environment Element Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Environment Element Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifSurfElem
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifSurfElem::SECT_ModifSurfElem (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_SurfElem *pSurfElem, SECT_Surface *pNewSurf,
|
|
long lNumEnvElem)
|
|
: CPA_Modif(TYPE_MODIFSRF, "ChangeSurf", FALSE)
|
|
{
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_pEditedSector = m_pSectorInterface->GetEditedSector();
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_lOldNum = lNumEnvElem;
|
|
m_pSurfElem = pSurfElem;
|
|
m_pOldSurf = pSurfElem->GetSurface();
|
|
m_pNewSurf = pNewSurf;
|
|
}
|
|
|
|
|
|
SECT_ModifSurfElem::~SECT_ModifSurfElem (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifSurfElem::Do (void)
|
|
{
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update surface
|
|
if (m_eModifType == E_mt_ChangeSrf)
|
|
{
|
|
m_pSurfElem->SetSurface(m_pNewSurf);
|
|
m_lNewNum = m_pSurfElem->GetOwnerSector()->fn_lUpdateEnvironmentElement(m_lOldNum);
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifSurfElem::Undo (void)
|
|
{
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update surface
|
|
if (m_eModifType == E_mt_ChangeSrf)
|
|
{
|
|
m_pSurfElem->SetSurface(m_pOldSurf);
|
|
m_lOldNum = m_pSurfElem->GetOwnerSector()->fn_lUpdateEnvironmentElement(m_lNewNum);
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifSurfElem::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifSurfElem::fn_vUpdateEditorState (void)
|
|
{
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Surface Element Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Surface Element Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifSrfParams
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifSrfParams::SECT_ModifSrfParams (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_Surface *pSurface, MTH_tdxReal xNewHeight)
|
|
: CPA_Modif(TYPE_SRFPARAMS, "ModifSrf", FALSE)
|
|
{
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pSurface = pSurface;
|
|
m_xNewHeight = xNewHeight;
|
|
m_xOldHeight = pSurface->GetHeight();
|
|
}
|
|
|
|
|
|
SECT_ModifSrfParams::~SECT_ModifSrfParams (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifSrfParams::Do (void)
|
|
{
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update surface
|
|
if (m_eModifType == E_mt_ChangeSrfHeight)
|
|
{
|
|
m_pSurface->SetHeight(m_xNewHeight);
|
|
m_pSectorInterface->fn_vUpdateHeightIndex(m_pSurface);
|
|
m_pSectorInterface->fn_vUpdateAllSurfaceList(m_pSurface);
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifSrfParams::Undo (void)
|
|
{
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update surface
|
|
if (m_eModifType == E_mt_ChangeSrfHeight)
|
|
{
|
|
m_pSurface->SetHeight(m_xOldHeight);
|
|
m_pSectorInterface->fn_vUpdateHeightIndex(m_pSurface);
|
|
m_pSectorInterface->fn_vUpdateAllSurfaceList(m_pSurface);
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifSrfParams::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifSrfParams::fn_vUpdateEditorState (void)
|
|
{
|
|
if (!m_bFirstTime)
|
|
{
|
|
// cancel envelem selection
|
|
m_pSectorInterface->GetDialogEnvList()->fn_vInitEnvList(m_pSectorInterface->GetEditedSector());
|
|
// select environment
|
|
m_pSectorInterface->GetDialogSrf()->fn_vInitSurfListBox();
|
|
m_pSectorInterface->GetDialogSrf()->fn_vSelectSurf(m_pSurface);
|
|
}
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Surface Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Surface Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifEnvParams
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifEnvParams::SECT_ModifEnvParams (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_Environment *pEnvironment, SECT_MecEnvironment *pNewMecEnv,
|
|
SECT_VisEnvironment *pNewVisEnv, SECT_SndEnvironment *pNewSndEnv)
|
|
: CPA_Modif(TYPE_ENVPARAMS, "ModifEnv", FALSE)
|
|
{
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pEnvironment = pEnvironment;
|
|
m_pNewMecEnv = pNewMecEnv;
|
|
m_pOldMecEnv = pEnvironment->GetMecEnvironment();
|
|
m_pNewVisEnv = pNewVisEnv;
|
|
m_pOldVisEnv = pEnvironment->GetVisEnvironment();
|
|
m_pNewSndEnv = pNewSndEnv;
|
|
m_pOldSndEnv = pEnvironment->GetSndEnvironment();
|
|
}
|
|
|
|
|
|
SECT_ModifEnvParams::~SECT_ModifEnvParams (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifEnvParams::Do (void)
|
|
{
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update list
|
|
if (m_eModifType == E_mt_ChangeMecEnv)
|
|
m_pEnvironment->SetMecEnvironment(m_pNewMecEnv);
|
|
else if (m_eModifType == E_mt_ChangeVisEnv)
|
|
m_pEnvironment->SetVisEnvironment(m_pNewVisEnv);
|
|
else if (m_eModifType == E_mt_ChangeSndEnv)
|
|
m_pEnvironment->SetSndEnvironment(m_pNewSndEnv);
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifEnvParams::Undo (void)
|
|
{
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update list
|
|
if (m_eModifType == E_mt_ChangeMecEnv)
|
|
m_pEnvironment->SetMecEnvironment(m_pOldMecEnv);
|
|
else if (m_eModifType == E_mt_ChangeVisEnv)
|
|
m_pEnvironment->SetVisEnvironment(m_pOldVisEnv);
|
|
else if (m_eModifType == E_mt_ChangeSndEnv)
|
|
m_pEnvironment->SetSndEnvironment(m_pOldSndEnv);
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifEnvParams::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifEnvParams::fn_vUpdateEditorState (void)
|
|
{
|
|
if (!m_bFirstTime)
|
|
{
|
|
// cancel envelem selection
|
|
m_pSectorInterface->GetDialogEnvList()->fn_vInitEnvElem(-1);
|
|
// select environment
|
|
m_pSectorInterface->GetDialogEnvs()->fn_vSelectEnv(m_pEnvironment);
|
|
}
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Env parameters Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Env parameters Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifMecEnvParams
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifMecEnvParams::SECT_ModifMecEnvParams (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_MecEnvironment *pMecEnv, CString csName,
|
|
MTH_tdxReal xGravity, DNM_tdstVector *pVertical,
|
|
MTH_tdxReal xViscosity, MTH_tdxReal xDensity,
|
|
MTH_tdxReal xLevel, DNM_tdstVector *pStream,
|
|
CString csVolumic)
|
|
: CPA_Modif(TYPE_MECENV, "ModifMecEnv", FALSE)
|
|
{
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pMecEnv = pMecEnv;
|
|
// init name
|
|
m_csOldName = m_pMecEnv->GetName();
|
|
m_csNewName = csName;
|
|
// init gravity
|
|
m_xOldGravity = (float) m_pMecEnv->GetGravity();
|
|
m_xNewGravity = (float) xGravity;
|
|
m_stOldVertical = *(m_pMecEnv->GetVertical());
|
|
m_stNewVertical = *pVertical;
|
|
// init fluid
|
|
m_xOldViscosity = (float) m_pMecEnv->GetFluidViscosity();
|
|
m_xNewViscosity = (float) xViscosity;
|
|
m_xOldDensity = (float) m_pMecEnv->GetFluidDensity();
|
|
m_xNewDensity = (float) xDensity;
|
|
m_xOldLevel = (float) m_pMecEnv->GetFluidLevel();
|
|
m_xNewLevel = (float) xLevel;
|
|
m_stOldStream = *(m_pMecEnv->GetFluidStream());
|
|
m_stNewStream = *pStream;
|
|
// init volumic
|
|
m_csOldVolumic = m_pMecEnv->GetVolumicEnvironment();
|
|
m_csNewVolumic = csVolumic;
|
|
}
|
|
|
|
|
|
SECT_ModifMecEnvParams::~SECT_ModifMecEnvParams (void)
|
|
{
|
|
}
|
|
|
|
*/
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifMecEnvParams::Do (void)
|
|
{
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update mec env
|
|
if (m_eModifType == E_tm_ModifMecEnv)
|
|
{
|
|
// name
|
|
if (m_pMecEnv->GetName() != m_csNewName)
|
|
m_pMecEnv->fn_eRename(m_csNewName);
|
|
// gravity
|
|
m_pMecEnv->SetGravity(m_xNewGravity);
|
|
m_pMecEnv->SetVertical(&m_stNewVertical);
|
|
// fluid
|
|
m_pMecEnv->SetFluidViscosity(m_xNewViscosity);
|
|
m_pMecEnv->SetFluidDensity(m_xNewDensity);
|
|
m_pMecEnv->SetFluidLevel(m_xNewLevel);
|
|
m_pMecEnv->SetFluidStream(&m_stNewStream);
|
|
// volumic
|
|
m_pMecEnv->SetVolumicEnvironment(m_csNewVolumic);
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifMecEnvParams::Undo (void)
|
|
{
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update mec env
|
|
if (m_eModifType == E_tm_ModifMecEnv)
|
|
{
|
|
// name
|
|
if (m_pMecEnv->GetName() != m_csOldName)
|
|
m_pMecEnv->fn_eRename(m_csOldName);
|
|
// gravity
|
|
m_pMecEnv->SetGravity(m_xOldGravity);
|
|
m_pMecEnv->SetVertical(&m_stOldVertical);
|
|
// fluid
|
|
m_pMecEnv->SetFluidViscosity(m_xOldViscosity);
|
|
m_pMecEnv->SetFluidDensity(m_xOldDensity);
|
|
m_pMecEnv->SetFluidLevel(m_xOldLevel);
|
|
m_pMecEnv->SetFluidStream(&m_stOldStream);
|
|
// volumic
|
|
m_pMecEnv->SetVolumicEnvironment(m_csOldVolumic);
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifMecEnvParams::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
}
|
|
*/
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifMecEnvParams::fn_vUpdateEditorState (void)
|
|
{
|
|
if (!m_bFirstTime)
|
|
{
|
|
// cancel envelem selection
|
|
m_pSectorInterface->GetDialogEnvList()->fn_vInitEnvElem(-1);
|
|
// cancel environment
|
|
m_pSectorInterface->GetDialogEnvs()->fn_vSelectEnv(NULL);
|
|
// select mecenv
|
|
m_pSectorInterface->GetDialogEnv()->fn_vSelectMechanic(m_pMecEnv);
|
|
}
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Mec Environment Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Mec Environment Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifVisEnvParams
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifVisEnvParams::SECT_ModifVisEnvParams (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_VisEnvironment *pVisEnv, CString csName,
|
|
MTH_tdxReal xNear, MTH_tdxReal xFar,
|
|
MTH_tdxReal xBlendNear, MTH_tdxReal xBlendFar,
|
|
MTH_tdxReal xInfinite, GLI_tdstColor *pColor)
|
|
: CPA_Modif(TYPE_MECENV, "ModifMecEnv", FALSE)
|
|
{
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pVisEnv = pVisEnv;
|
|
// init name
|
|
m_csOldName = m_pVisEnv->GetName();
|
|
m_csNewName = csName;
|
|
// init parameters
|
|
m_xOldNear = (float) m_pVisEnv->GetFogNear();
|
|
m_xNewNear = (float) xNear;
|
|
m_xOldFar = (float) m_pVisEnv->GetFogFar();
|
|
m_xNewFar = (float) xFar;
|
|
m_xOldBlendNear = (float) m_pVisEnv->GetFogBlendNear();
|
|
m_xNewBlendNear = (float) xBlendNear;
|
|
m_xOldBlendFar = (float) m_pVisEnv->GetFogBlendFar();
|
|
m_xNewBlendFar = (float) xBlendFar;
|
|
m_xOldInfinite = (float) m_pVisEnv->GetFogInfinite();
|
|
m_xNewInfinite = (float) xInfinite;
|
|
// init color
|
|
m_stOldColor.xR = m_pVisEnv->GetFogColor()->xR;
|
|
m_stOldColor.xG = m_pVisEnv->GetFogColor()->xG;
|
|
m_stOldColor.xB = m_pVisEnv->GetFogColor()->xB;
|
|
m_stNewColor.xR = pColor->xR;
|
|
m_stNewColor.xG = pColor->xG;
|
|
m_stNewColor.xB = pColor->xB;
|
|
}
|
|
|
|
|
|
SECT_ModifVisEnvParams::~SECT_ModifVisEnvParams (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifVisEnvParams::Do (void)
|
|
{
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update mec env
|
|
if (m_eModifType == E_tm_ModifVisEnv)
|
|
{
|
|
// name
|
|
if (m_pVisEnv->GetName() != m_csNewName)
|
|
m_pVisEnv->fn_eRename(m_csNewName);
|
|
// parameters
|
|
m_pVisEnv->SetFogNear(m_xNewNear);
|
|
m_pVisEnv->SetFogFar(m_xNewFar);
|
|
m_pVisEnv->SetFogBlendNear(m_xNewBlendNear);
|
|
m_pVisEnv->SetFogBlendFar(m_xNewBlendFar);
|
|
m_pVisEnv->SetFogInfinite(m_xNewInfinite);
|
|
// color
|
|
m_pVisEnv->SetFogColor(&m_stNewColor);
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifVisEnvParams::Undo (void)
|
|
{
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update mec env
|
|
if (m_eModifType == E_tm_ModifVisEnv)
|
|
{
|
|
// name
|
|
if (m_pVisEnv->GetName() != m_csOldName)
|
|
m_pVisEnv->fn_eRename(m_csOldName);
|
|
// gravity
|
|
m_pVisEnv->SetFogNear(m_xOldNear);
|
|
m_pVisEnv->SetFogFar(m_xOldFar);
|
|
m_pVisEnv->SetFogBlendNear(m_xOldBlendNear);
|
|
m_pVisEnv->SetFogBlendFar(m_xOldBlendFar);
|
|
m_pVisEnv->SetFogInfinite(m_xOldInfinite);
|
|
// color
|
|
m_pVisEnv->SetFogColor(&m_stOldColor);
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifVisEnvParams::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
}
|
|
*/
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifVisEnvParams::fn_vUpdateEditorState (void)
|
|
{
|
|
if (!m_bFirstTime)
|
|
{
|
|
// cancel envelem selection
|
|
m_pSectorInterface->GetDialogEnvList()->fn_vInitEnvElem(-1);
|
|
// cancel environment
|
|
m_pSectorInterface->GetDialogEnvs()->fn_vSelectEnv(NULL);
|
|
// select mecenv
|
|
m_pSectorInterface->GetDialogEnv()->fn_vSelectVisual(m_pVisEnv);
|
|
}
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Visula Environment Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Visual Environment Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_SaveEnvList
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_SaveEnvList::SECT_SaveEnvList (Sector_Object *pSector)
|
|
{
|
|
SECT_Environment *pEnv;
|
|
SECT_Surface *pSurf;
|
|
SECT_SurfElem *pSurfElem;
|
|
SECT_EnvElem *pEnvElem;
|
|
long lNumEnv, lNumSurf;
|
|
|
|
// init sector
|
|
m_pSector = pSector;
|
|
// init envlist
|
|
m_oListEnv.RemoveAll();
|
|
for (lNumEnv = 0; lNumEnv < pSector->GetNbEnvironments(); lNumEnv++)
|
|
{
|
|
// get environment
|
|
pEnvElem = pSector->GetEnvironment(lNumEnv);
|
|
pEnv = pEnvElem->GetEnvironment();
|
|
// add it to the list
|
|
m_oListEnv.AddTail(pEnv);
|
|
}
|
|
// init srf list
|
|
m_oListSrf.RemoveAll();
|
|
for (lNumSurf = 0; lNumSurf < pSector->GetNbSurfaces(); lNumSurf++)
|
|
{
|
|
// get surface
|
|
pSurfElem = pSector->GetSurface(lNumSurf);
|
|
pSurf = pSurfElem->GetSurface();
|
|
// add it to the list
|
|
m_oListSrf.AddTail(pSurf);
|
|
}
|
|
}
|
|
|
|
SECT_SaveEnvList::~SECT_SaveEnvList (void)
|
|
{
|
|
|
|
}
|
|
*/
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifApplyToSectors
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifApplyToSectors::SECT_ModifApplyToSectors (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pModel, CPA_List<CPA_SuperObject> *pListSectors)
|
|
: CPA_Modif(TYPE_APPLY, "Apply", FALSE)
|
|
{
|
|
CPA_BaseObjectList *pListObject;
|
|
CPA_SuperObject *pSector;
|
|
CPA_BaseObject *pElem;
|
|
Sector_Object *pSectObj;
|
|
SECT_Environment *pEnv;
|
|
SECT_Surface *pSurf;
|
|
SECT_SurfElem *pSurfElem;
|
|
SECT_EnvElem *pEnvElem;
|
|
Position pos;
|
|
POSITION Pos;
|
|
long lNumEnv, lNumSurf;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_oListSectors.RemoveAll();
|
|
// All sectors
|
|
if (!pListSectors)
|
|
{
|
|
pListObject = m_pSectorInterface->GetBaseObjectList(C_szSectorTypeName);
|
|
// for all sectors in ReachableObjectList
|
|
for (pElem = pListObject->GetHeadElement(pos); pElem;
|
|
pElem = pListObject->GetNextElement(pos))
|
|
{
|
|
// apply same environment
|
|
pSectObj = (Sector_Object *) pElem;
|
|
m_oListSectors.AddTail(new SECT_SaveEnvList(pSectObj));
|
|
}
|
|
}
|
|
// Selected sectors
|
|
else
|
|
{
|
|
// for all sectors in select list
|
|
for (pSector = pListSectors->GetHeadElement(Pos); pSector;
|
|
pSector = pListSectors->GetNextElement(Pos))
|
|
{
|
|
// apply same environment
|
|
pSectObj = (Sector_Object *) pSector->GetObject();
|
|
m_oListSectors.AddTail(new SECT_SaveEnvList(pSectObj));
|
|
}
|
|
}
|
|
// Model
|
|
m_pModel = pModel;
|
|
pSectObj = (Sector_Object *) pModel->GetObject();
|
|
// init envlist
|
|
m_oListEnv.RemoveAll();
|
|
for (lNumEnv = 0; lNumEnv < pSectObj->GetNbEnvironments(); lNumEnv++)
|
|
{
|
|
// get environment
|
|
pEnvElem = pSectObj->GetEnvironment(lNumEnv);
|
|
pEnv = pEnvElem->GetEnvironment();
|
|
// add it to the list
|
|
m_oListEnv.AddTail(pEnv);
|
|
}
|
|
// init srf list
|
|
m_oListSrf.RemoveAll();
|
|
for (lNumSurf = 0; lNumSurf < pSectObj->GetNbSurfaces(); lNumSurf++)
|
|
{
|
|
// get surface
|
|
pSurfElem = pSectObj->GetSurface(lNumSurf);
|
|
pSurf = pSurfElem->GetSurface();
|
|
// add it to the list
|
|
m_oListSrf.AddTail(pSurf);
|
|
}
|
|
}
|
|
|
|
|
|
SECT_ModifApplyToSectors::~SECT_ModifApplyToSectors (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifApplyToSectors::Do (void)
|
|
{
|
|
SECT_SaveEnvList *pElem;
|
|
Sector_Object *pSectObj;
|
|
POSITION pos;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update sectors
|
|
for (pElem = m_oListSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListSectors.GetNextElement(pos))
|
|
{
|
|
pSectObj = pElem->m_pSector;
|
|
pSectObj->fn_vApplySameEnvironment(&m_oListEnv, &m_oListSrf);
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifApplyToSectors::Undo (void)
|
|
{
|
|
SECT_SaveEnvList *pElem;
|
|
Sector_Object *pSectObj;
|
|
POSITION pos;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update sectors
|
|
for (pElem = m_oListSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListSectors.GetNextElement(pos))
|
|
{
|
|
pSectObj = pElem->m_pSector;
|
|
pSectObj->fn_vApplySameEnvironment(&pElem->m_oListEnv, &pElem->m_oListSrf);
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifApplyToSectors::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pModel)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pModel);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifApplyToSectors::fn_vUpdateEditorState (void)
|
|
{
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Apply Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Apply Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_SaveSectorLinks
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_SaveSectorLinks::SECT_SaveSectorLinks (CPA_SuperObject *pSector, CPA_SuperObject *pModel, tdeTypeList eList)
|
|
{
|
|
SECT_ElementBase *pElem, *pEditElem;
|
|
Sector_Object *pEditSector;
|
|
|
|
// init params
|
|
m_iOldParam = m_iNewParam = -1;
|
|
m_iOldMode = m_iNewMode = -1;
|
|
m_pNewElement = m_pOldElement = NULL;
|
|
// get corresponding element
|
|
m_pSector = (Sector_Object *) pSector->GetObject();
|
|
pElem = m_pSector->GetCurrentList(eList)->GetElementWithSector(pModel);
|
|
pEditSector = (Sector_Object *) pModel->GetObject();
|
|
pEditElem = pEditSector->GetCurrentList(eList)->GetElementWithSector(pSector);
|
|
// init parameters
|
|
switch (eList)
|
|
{
|
|
case E_Graphic:
|
|
// save new value
|
|
m_iNewParam = ((SECT_GraphicElement *) pEditElem)->GetGraphicLevel();
|
|
m_iNewMode = ((SECT_GraphicElement *) pEditElem)->GetGraphicMode();
|
|
if (!pElem)
|
|
{
|
|
m_pNewElement = m_pSector->GetNewElement(E_Graphic, pModel);
|
|
((SECT_GraphicElement *) m_pNewElement)->SetGraphicLevel(m_iNewParam);
|
|
((SECT_GraphicElement *) m_pNewElement)->SetGraphicMode(m_iNewMode);
|
|
}
|
|
else
|
|
{
|
|
m_iOldParam = ((SECT_GraphicElement *) pElem)->GetGraphicLevel();
|
|
m_iOldMode = ((SECT_GraphicElement *) pElem)->GetGraphicMode();
|
|
}
|
|
break;
|
|
|
|
case E_Sound:
|
|
// save new value
|
|
m_iNewParam = ((SECT_SoundElement *) pEditElem)->GetSoundLevel();
|
|
if (!pElem)
|
|
{
|
|
m_pNewElement = m_pSector->GetNewElement(E_Sound, pModel);
|
|
((SECT_SoundElement *) m_pNewElement)->SetSoundLevel(m_iNewParam);
|
|
}
|
|
else
|
|
m_iOldParam = ((SECT_SoundElement *) pElem)->GetSoundLevel();
|
|
break;
|
|
|
|
case E_Collision:
|
|
// save new value
|
|
if (!pElem)
|
|
m_pNewElement = m_pSector->GetNewElement(E_Collision, pModel);
|
|
break;
|
|
|
|
case E_Activity:
|
|
// save new value
|
|
if (!pElem)
|
|
m_pNewElement = m_pSector->GetNewElement(E_Activity, pModel);
|
|
break;
|
|
|
|
case E_SoundEvent:
|
|
// create copy of new one
|
|
m_pNewElement = m_pSector->GetNewElement(E_SoundEvent, pModel);
|
|
((SECT_SoundEventElement *)m_pNewElement)->fn_vCopyMissingSoundEvents((SECT_SoundEventElement *)pEditElem);
|
|
// create copy of old one
|
|
if (pElem)
|
|
{
|
|
m_pOldElement = m_pSector->GetNewElement(E_SoundEvent, pModel);
|
|
((SECT_SoundEventElement *)m_pOldElement)->fn_vCopyMissingSoundEvents((SECT_SoundEventElement *)pElem);
|
|
}
|
|
}
|
|
}
|
|
|
|
SECT_SaveSectorLinks::~SECT_SaveSectorLinks (void)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifSymetricLinks
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifSymetricLinks::SECT_ModifSymetricLinks (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pModel, tdeTypeList eList)
|
|
: CPA_Modif(TYPE_SYMETRICLINKS, "SymetricLinks", FALSE)
|
|
{
|
|
SECT_SaveSectorLinks *pSave;
|
|
CPA_SuperObject *pSector;
|
|
SECT_ElementBase *pSectElem;
|
|
SECT_ListBase *pCurrentList;
|
|
POSITION pos;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_eCurrentEditMode = m_pSectorInterface->GetEditMode();
|
|
m_pModel = pModel;
|
|
m_eListToUpdate = eList;
|
|
m_oListSectors.RemoveAll();
|
|
// fill list with all sectors
|
|
pCurrentList = ((Sector_Object *) pModel->GetObject())->GetCurrentList(eList);
|
|
for (pSectElem = pCurrentList->GetHeadElementBase(pos); pSectElem;
|
|
pSectElem = pCurrentList->GetNextElementBase(pos))
|
|
{
|
|
// get corresponding sector
|
|
pSector = pSectElem->GetSector();
|
|
// build new save element and add it to the list
|
|
if (pSector)
|
|
{
|
|
pSave = new SECT_SaveSectorLinks(pSector, m_pModel, m_eListToUpdate);
|
|
m_oListSectors.AddTail(pSave);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
SECT_ModifSymetricLinks::~SECT_ModifSymetricLinks (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSymetricLinks::Do (void)
|
|
{
|
|
SECT_SaveSectorLinks *pElem;
|
|
SECT_ElementBase *pSectElem;
|
|
Sector_Object *pSectObj;
|
|
POSITION pos;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update sectors
|
|
for (pElem = m_oListSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListSectors.GetNextElement(pos))
|
|
{
|
|
pSectObj = pElem->m_pSector;
|
|
// sound event => non standard
|
|
if (m_eListToUpdate == E_SoundEvent)
|
|
{
|
|
pSectElem = pSectObj->GetSoundEventList()->GetElementWithSector(m_pModel);
|
|
if (pSectElem)
|
|
pSectObj->fn_bRemoveSectorInList(pSectElem, E_SoundEvent);
|
|
}
|
|
// add link
|
|
if (pElem->m_pNewElement)
|
|
pSectObj->fn_bAddSectorInList(pElem->m_pNewElement, m_eListToUpdate);
|
|
// update param
|
|
pSectElem = pSectObj->GetCurrentList(m_eListToUpdate)->GetElementWithSector(m_pModel);
|
|
switch (m_eListToUpdate)
|
|
{
|
|
case E_Graphic:
|
|
((SECT_GraphicElement *) pSectElem)->SetGraphicLevel(pElem->m_iNewParam);
|
|
((SECT_GraphicElement *) pSectElem)->SetGraphicMode(pElem->m_iNewMode);
|
|
break;
|
|
case E_Sound:
|
|
((SECT_SoundElement *) pSectElem)->SetSoundLevel(pElem->m_iNewParam);
|
|
break;
|
|
}
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSymetricLinks::Undo (void)
|
|
{
|
|
SECT_SaveSectorLinks *pElem;
|
|
SECT_ElementBase *pSectElem;
|
|
Sector_Object *pSectObj;
|
|
POSITION pos;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update sectors
|
|
for (pElem = m_oListSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListSectors.GetNextElement(pos))
|
|
{
|
|
pSectObj = pElem->m_pSector;
|
|
if (pElem->m_pNewElement)
|
|
pSectObj->fn_bRemoveSectorInList(pElem->m_pNewElement, m_eListToUpdate);
|
|
// update param
|
|
pSectElem = pSectObj->GetCurrentList(m_eListToUpdate)->GetElementWithSector(m_pModel);
|
|
switch (m_eListToUpdate)
|
|
{
|
|
case E_Graphic:
|
|
if (pSectElem)
|
|
{
|
|
((SECT_GraphicElement *) pSectElem)->SetGraphicLevel(pElem->m_iOldParam);
|
|
((SECT_GraphicElement *) pSectElem)->SetGraphicMode(pElem->m_iOldMode);
|
|
}
|
|
break;
|
|
case E_Sound:
|
|
if (pSectElem)
|
|
((SECT_SoundElement *) pSectElem)->SetSoundLevel(pElem->m_iOldParam);
|
|
break;
|
|
case E_SoundEvent:
|
|
if (pElem->m_pOldElement)
|
|
pSectObj->fn_bAddSectorInList(pElem->m_pOldElement, m_eListToUpdate);
|
|
break;
|
|
}
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSymetricLinks::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(m_eCurrentEditMode, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pModel)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pModel);
|
|
// if necessary, reinit list
|
|
if (m_eCurrentEditMode == E_em_EditList)
|
|
{
|
|
m_pSectorInterface->SetListActivity(E_NoActiveList, FALSE, FALSE);
|
|
m_pSectorInterface->SetListActivity(m_eListToUpdate, TRUE, FALSE);
|
|
}
|
|
// else cancel selection
|
|
else
|
|
m_pSectorInterface->fn_vSelectNewSector(m_pModel, FALSE, FALSE);
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSymetricLinks::fn_vUpdateEditorState (void)
|
|
{
|
|
// update drawing
|
|
m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
|
|
// update status bar
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Symetric Links Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Symetric Links Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifSymetricSelect
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifSymetricSelect::SECT_ModifSymetricSelect (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pEditedSector, CPA_SuperObject *pSelectedSector)
|
|
: CPA_Modif(TYPE_SYMETRICSELECT, "SymetricSelect", FALSE)
|
|
{
|
|
SECT_ElementBase *pEditElem;
|
|
SECT_ElementBase *pSelectElem;
|
|
Sector_Object *pEditSector;
|
|
Sector_Object *pSelectSector;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pEditedSector = pEditedSector;
|
|
m_pSelectedSector = pSelectedSector;
|
|
m_pNewSoundElement = NULL;
|
|
m_pNewGraphicElement = NULL;
|
|
m_pNewActivityElement = NULL;
|
|
m_pNewCollisionElement = NULL;
|
|
m_pNewSndEvtElement = NULL;
|
|
m_pOldSndEvtElement = NULL;
|
|
m_iNewGraphic = m_iOldGraphic = -1;
|
|
m_iNewGMode = m_iOldGMode = -1;
|
|
m_iNewSound = m_iOldSound = -1;
|
|
|
|
// get parameters
|
|
pEditSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
pSelectSector = (Sector_Object *) pSelectedSector->GetObject();
|
|
// graphic
|
|
pEditElem = pEditSector->GetGraphicList()->GetElementWithSector(m_pSelectedSector);
|
|
if (pEditElem)
|
|
{
|
|
// get value
|
|
m_iNewGraphic = ((SECT_GraphicElement *) pEditElem)->GetGraphicLevel();
|
|
m_iNewGMode = ((SECT_GraphicElement *) pEditElem)->GetGraphicMode();
|
|
pSelectElem = pSelectSector->GetGraphicList()->GetElementWithSector(m_pEditedSector);
|
|
if (!pSelectElem)
|
|
{
|
|
m_pNewGraphicElement = (SECT_GraphicElement *) pSelectSector->GetNewElement(E_Graphic, m_pEditedSector);
|
|
m_pNewGraphicElement->SetGraphicLevel(m_iNewGraphic);
|
|
m_pNewGraphicElement->SetGraphicMode(m_iNewGMode);
|
|
}
|
|
else
|
|
{
|
|
m_iOldGraphic = ((SECT_GraphicElement *) pSelectElem)->GetGraphicLevel();
|
|
m_iOldGMode = ((SECT_GraphicElement *) pSelectElem)->GetGraphicMode();
|
|
}
|
|
}
|
|
// sound
|
|
pEditElem = pEditSector->GetSoundList()->GetElementWithSector(m_pSelectedSector);
|
|
if (pEditElem)
|
|
{
|
|
// get value
|
|
m_iNewSound = ((SECT_SoundElement *) pEditElem)->GetSoundLevel();
|
|
pSelectElem = pSelectSector->GetSoundList()->GetElementWithSector(m_pEditedSector);
|
|
if (!pSelectElem)
|
|
{
|
|
m_pNewSoundElement = (SECT_SoundElement *) pSelectSector->GetNewElement(E_Sound, m_pEditedSector);
|
|
m_pNewSoundElement->SetSoundLevel(m_iNewSound);
|
|
}
|
|
else
|
|
m_iOldSound = ((SECT_SoundElement *) pSelectElem)->GetSoundLevel();
|
|
}
|
|
// collision
|
|
pEditElem = pEditSector->GetCollisionList()->GetElementWithSector(m_pSelectedSector);
|
|
if (pEditElem)
|
|
{
|
|
pSelectElem = pSelectSector->GetCollisionList()->GetElementWithSector(m_pEditedSector);
|
|
if (!pSelectElem)
|
|
m_pNewCollisionElement = (SECT_CollisionElement *) pSelectSector->GetNewElement(E_Collision, m_pEditedSector);
|
|
}
|
|
// activity
|
|
pEditElem = pEditSector->GetActivityList()->GetElementWithSector(m_pSelectedSector);
|
|
if (pEditElem)
|
|
{
|
|
pSelectElem = pSelectSector->GetActivityList()->GetElementWithSector(m_pEditedSector);
|
|
if (!pSelectElem)
|
|
m_pNewActivityElement = (SECT_ActivityElement *) pSelectSector->GetNewElement(E_Activity, m_pEditedSector);
|
|
}
|
|
// sound event
|
|
pEditElem = pEditSector->GetSoundEventList()->GetElementWithSector(m_pSelectedSector);
|
|
if (pEditElem)
|
|
{
|
|
// create copy of new one
|
|
m_pNewSndEvtElement = (SECT_SoundEventElement *) pSelectSector->GetNewElement(E_SoundEvent, m_pEditedSector);
|
|
m_pNewSndEvtElement->fn_vCopyMissingSoundEvents((SECT_SoundEventElement *)pEditElem);
|
|
// create copy of old one
|
|
pSelectElem = pSelectSector->GetSoundEventList()->GetElementWithSector(m_pEditedSector);
|
|
if (pSelectElem)
|
|
{
|
|
m_pOldSndEvtElement = (SECT_SoundEventElement *)pSelectSector->GetNewElement(E_SoundEvent, m_pEditedSector);
|
|
m_pOldSndEvtElement->fn_vCopyMissingSoundEvents((SECT_SoundEventElement *)pSelectElem);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
SECT_ModifSymetricSelect::~SECT_ModifSymetricSelect (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSymetricSelect::Do (void)
|
|
{
|
|
SECT_ElementBase *pElem;
|
|
Sector_Object *pSector;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update parameters
|
|
pSector = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
// graphic
|
|
if (m_pNewGraphicElement)
|
|
pSector->fn_bAddSectorInList(m_pNewGraphicElement, E_Graphic);
|
|
else if (m_iNewGraphic != -1)
|
|
{
|
|
pElem = pSector->GetGraphicList()->GetElementWithSector(m_pEditedSector);
|
|
((SECT_GraphicElement *) pElem)->SetGraphicLevel(m_iNewGraphic);
|
|
((SECT_GraphicElement *) pElem)->SetGraphicMode(m_iNewGMode);
|
|
}
|
|
// collision
|
|
if (m_pNewCollisionElement)
|
|
pSector->fn_bAddSectorInList(m_pNewCollisionElement, E_Collision);
|
|
// activity
|
|
if (m_pNewActivityElement)
|
|
pSector->fn_bAddSectorInList(m_pNewActivityElement, E_Activity);
|
|
// sound
|
|
if (m_pNewSoundElement)
|
|
pSector->fn_bAddSectorInList(m_pNewSoundElement, E_Sound);
|
|
else if (m_iNewSound != -1)
|
|
{
|
|
pElem = pSector->GetSoundList()->GetElementWithSector(m_pEditedSector);
|
|
((SECT_SoundElement *) pElem)->SetSoundLevel(m_iNewSound);
|
|
}
|
|
// sound event
|
|
if (m_pNewSndEvtElement)
|
|
{
|
|
pElem = pSector->GetSoundEventList()->GetElementWithSector(m_pEditedSector);
|
|
if (pElem)
|
|
pSector->fn_bRemoveSectorInList(pElem, E_SoundEvent);
|
|
pSector->fn_bAddSectorInList(m_pNewSndEvtElement, E_SoundEvent);
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifSymetricSelect::Undo (void)
|
|
{
|
|
SECT_ElementBase *pElem;
|
|
Sector_Object *pSector;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update parameters
|
|
pSector = (Sector_Object *) m_pSelectedSector->GetObject();
|
|
// graphic
|
|
if (m_pNewGraphicElement)
|
|
pSector->fn_bRemoveSectorInList(m_pNewGraphicElement, E_Graphic);
|
|
else if (m_iOldGraphic != -1)
|
|
{
|
|
pElem = pSector->GetGraphicList()->GetElementWithSector(m_pEditedSector);
|
|
((SECT_GraphicElement *) pElem)->SetGraphicLevel(m_iOldGraphic);
|
|
((SECT_GraphicElement *) pElem)->SetGraphicMode(m_iOldGMode);
|
|
}
|
|
// collision
|
|
if (m_pNewCollisionElement)
|
|
pSector->fn_bRemoveSectorInList(m_pNewCollisionElement, E_Collision);
|
|
// activity
|
|
if (m_pNewActivityElement)
|
|
pSector->fn_bRemoveSectorInList(m_pNewActivityElement, E_Activity);
|
|
// sound
|
|
if (m_pNewSoundElement)
|
|
pSector->fn_bRemoveSectorInList(m_pNewSoundElement, E_Sound);
|
|
else if (m_iOldSound != -1)
|
|
{
|
|
pElem = pSector->GetSoundList()->GetElementWithSector(m_pEditedSector);
|
|
((SECT_SoundElement *) pElem)->SetSoundLevel(m_iOldSound);
|
|
}
|
|
// sound event
|
|
if (m_pNewSndEvtElement)
|
|
{
|
|
pSector->fn_bRemoveSectorInList(m_pNewSndEvtElement, E_SoundEvent);
|
|
if (m_pOldSndEvtElement)
|
|
pSector->fn_bAddSectorInList(m_pOldSndEvtElement, E_SoundEvent);
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSymetricSelect::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditSector, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
// if necessary, reinit selection
|
|
m_pSectorInterface->fn_vSelectNewSector(m_pSelectedSector, FALSE, FALSE);
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifSymetricSelect::fn_vUpdateEditorState (void)
|
|
{
|
|
// update drawing
|
|
m_pSectorInterface->GetInterface()->fn_vUpdateAll(E_mc_JustDraw);
|
|
// update status bar
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Symetric Links Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Symetric Links Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifVirtualSector
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifVirtualSector::SECT_ModifVirtualSector (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_SuperObject *pEditedSector, BOOL bNewStatus)
|
|
: CPA_Modif(TYPE_VIRTUALSTATUS, "VirtualStatus", FALSE)
|
|
{
|
|
Sector_Object *pSector;
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_pEditedSector = pEditedSector;
|
|
m_bNewStatus = bNewStatus;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
m_pBorder = (!m_bNewStatus) ? pSector->GetBorder() : NULL;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
}
|
|
|
|
|
|
SECT_ModifVirtualSector::~SECT_ModifVirtualSector (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifVirtualSector::Do (void)
|
|
{
|
|
Sector_Object *pSector;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update parameters
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
// if necessary, update borders
|
|
if (m_pSectorInterface->fn_bDisplayBorders() && m_bNewStatus)
|
|
m_pSectorInterface->fn_vDisplayBorder(pSector, !m_bNewStatus, FALSE);
|
|
// update state
|
|
pSector->fn_vSetVirtual(m_bNewStatus, m_pBorder);
|
|
if (m_bFirstTime && !m_bNewStatus)
|
|
m_pBorder = pSector->GetBorder();
|
|
// if necessary, update borders
|
|
if (m_pSectorInterface->fn_bDisplayBorders() && !m_bNewStatus)
|
|
m_pSectorInterface->fn_vDisplayBorder(pSector, !m_bNewStatus, FALSE);
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifVirtualSector::Undo (void)
|
|
{
|
|
Sector_Object *pSector;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update parameters
|
|
pSector = (Sector_Object *) m_pEditedSector->GetObject();
|
|
// if necessary, update borders
|
|
if (m_pSectorInterface->fn_bDisplayBorders() && !m_bNewStatus)
|
|
m_pSectorInterface->fn_vDisplayBorder(pSector, m_bNewStatus, FALSE);
|
|
pSector->fn_vSetVirtual(!m_bNewStatus, m_pBorder);
|
|
// if necessary, update borders
|
|
if (m_pSectorInterface->fn_bDisplayBorders() && m_bNewStatus)
|
|
m_pSectorInterface->fn_vDisplayBorder(pSector, m_bNewStatus, FALSE);
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifVirtualSector::fn_vReinitEditorState (void)
|
|
{
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifVirtualSector::fn_vUpdateEditorState (void)
|
|
{
|
|
// update edited sector
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Virtual Status Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Virtual Status Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_SaveInitEnv
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_SaveInitEnv::SECT_SaveInitEnv (Sector_Object *pSector, SECT_Environment *pInitEnv)
|
|
{
|
|
SECT_Environment *pEnv;
|
|
SECT_EnvElem *pEnvElem;
|
|
long lNumEnv, iInd;
|
|
|
|
// init sector
|
|
m_pSector = pSector;
|
|
m_lNbEnv = 0;
|
|
// init envlist
|
|
for (iInd = 0; iInd < C_lMaxEnvironments; iInd++)
|
|
m_aNumEnv[iInd] = -1;
|
|
|
|
// get environment to replace
|
|
for (lNumEnv = 0; lNumEnv < pSector->GetNbEnvironments(); lNumEnv++)
|
|
{
|
|
// get environment
|
|
pEnvElem = pSector->GetEnvironment(lNumEnv);
|
|
pEnv = pEnvElem->GetEnvironment();
|
|
// add it to the list
|
|
if (pEnv == pInitEnv)
|
|
m_aNumEnv[m_lNbEnv++] = lNumEnv;
|
|
}
|
|
}
|
|
|
|
SECT_SaveInitEnv::~SECT_SaveInitEnv (void)
|
|
{
|
|
|
|
}
|
|
*/
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifReplaceEnvironment
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
/*
|
|
SECT_ModifReplaceEnvironment::SECT_ModifReplaceEnvironment (Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
SECT_Environment *pInitEnv, SECT_Environment *pNewEnv,
|
|
CPA_List<CPA_SuperObject> *pListSectors)
|
|
: CPA_Modif(TYPE_REPLACE, "Replace", FALSE)
|
|
{
|
|
CPA_BaseObjectList *pListObject;
|
|
CPA_SuperObject *pSector;
|
|
CPA_BaseObject *pElem;
|
|
Sector_Object *pSectObj;
|
|
Position pos;
|
|
POSITION Pos;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_pEditedSector = pInterface->GetEditedSector();
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_pInitEnv = pInitEnv;
|
|
m_pNewEnv = pNewEnv;
|
|
m_oListSectors.RemoveAll();
|
|
// All sectors
|
|
if (!pListSectors)
|
|
{
|
|
pListObject = m_pSectorInterface->GetBaseObjectList(C_szSectorTypeName);
|
|
// for all sectors in ReachableObjectList
|
|
for (pElem = pListObject->GetHeadElement(pos); pElem;
|
|
pElem = pListObject->GetNextElement(pos))
|
|
{
|
|
// apply same environment
|
|
pSectObj = (Sector_Object *) pElem;
|
|
m_oListSectors.AddTail(new SECT_SaveInitEnv(pSectObj, pInitEnv));
|
|
}
|
|
}
|
|
// Selected sectors
|
|
else
|
|
{
|
|
// for all sectors in select list
|
|
for (pSector = pListSectors->GetHeadElement(Pos); pSector;
|
|
pSector = pListSectors->GetNextElement(Pos))
|
|
{
|
|
// apply same environment
|
|
pSectObj = (Sector_Object *) pSector->GetObject();
|
|
m_oListSectors.AddTail(new SECT_SaveInitEnv(pSectObj, pInitEnv));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
SECT_ModifReplaceEnvironment::~SECT_ModifReplaceEnvironment (void)
|
|
{
|
|
}
|
|
*/
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifReplaceEnvironment::Do (void)
|
|
{
|
|
SECT_SaveInitEnv *pElem;
|
|
Sector_Object *pSectObj;
|
|
SECT_EnvElem *pEnvElem;
|
|
POSITION pos;
|
|
long iInd;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// update sectors
|
|
for (pElem = m_oListSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListSectors.GetNextElement(pos))
|
|
{
|
|
pSectObj = pElem->m_pSector;
|
|
for (iInd = 0; iInd < pElem->m_lNbEnv; iInd++)
|
|
{
|
|
pEnvElem = pSectObj->GetEnvironment(pElem->m_aNumEnv[iInd]);
|
|
pEnvElem->SetEnvironment(m_pNewEnv);
|
|
}
|
|
}
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
/*
|
|
BOOL SECT_ModifReplaceEnvironment::Undo (void)
|
|
{
|
|
SECT_SaveInitEnv *pElem;
|
|
Sector_Object *pSectObj;
|
|
SECT_EnvElem *pEnvElem;
|
|
POSITION pos;
|
|
long iInd;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// update sectors
|
|
for (pElem = m_oListSectors.GetHeadElement(pos); pElem;
|
|
pElem = m_oListSectors.GetNextElement(pos))
|
|
{
|
|
pSectObj = pElem->m_pSector;
|
|
for (iInd = 0; iInd < pElem->m_lNbEnv; iInd++)
|
|
{
|
|
pEnvElem = pSectObj->GetEnvironment(pElem->m_aNumEnv[iInd]);
|
|
pEnvElem->SetEnvironment(m_pInitEnv);
|
|
}
|
|
}
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifReplaceEnvironment::fn_vReinitEditorState (void)
|
|
{
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(E_em_EditEnv, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
}
|
|
*/
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
/*
|
|
void SECT_ModifReplaceEnvironment::fn_vUpdateEditorState (void)
|
|
{
|
|
// update env list
|
|
m_pSectorInterface->GetDialogEnvList()->fn_vInitEnvList(m_pEditedSector);
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Replace Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Replace Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
*/
|
|
|
|
|
|
|
|
//#################################################################################
|
|
// class SECT_ModifCopyList
|
|
//#################################################################################
|
|
|
|
/*===========================================================================
|
|
Constructor
|
|
=========================================================================*/
|
|
SECT_ModifCopyList::SECT_ModifCopyList(Sector_Interface *pInterface, tdeSectModifType eModifType,
|
|
CPA_List<CPA_SuperObject> *pCopyOfSectorList,
|
|
tdeTypeList eListToUpdate)
|
|
: CPA_Modif(TYPE_COPYLIST, "CopyList", FALSE)
|
|
{
|
|
CPA_SuperObject *pSector;
|
|
Sector_Object *pSectObj;
|
|
Sector_Object *pSymSectObj;
|
|
tdeTypeList eList;
|
|
POSITION pos;
|
|
int iList;
|
|
|
|
// init parent editor
|
|
m_pSectorInterface = pInterface;
|
|
m_bFirstTime = TRUE;
|
|
m_bDone = FALSE;
|
|
// init modif type
|
|
m_eModifType = eModifType;
|
|
// Init parameters
|
|
m_eCurrentEditMode = m_pSectorInterface->GetEditMode();
|
|
m_pEditedSector = m_pSectorInterface->GetEditedSector();
|
|
m_bSymetric = m_pSectorInterface->fn_bSymetricMode();
|
|
// get corresponding parameters
|
|
pSectObj = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
// init arrays
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
m_aListOfElements[iList].RemoveAll();
|
|
m_aListOfSymElems[iList].RemoveAll();
|
|
}
|
|
// init element for single modif
|
|
if (eListToUpdate != E_NoActiveList)
|
|
{
|
|
for (pSector = pCopyOfSectorList->GetHeadElement(pos); pSector;
|
|
pSector = pCopyOfSectorList->GetNextElement(pos))
|
|
{
|
|
if (pSector != m_pEditedSector)
|
|
{
|
|
if (!pSectObj->GetCurrentList(eListToUpdate)->GetElementWithSector(pSector))
|
|
m_aListOfElements[eListToUpdate].AddTail(pSectObj->GetNewElement(eListToUpdate, pSector));
|
|
if (m_bSymetric)
|
|
{
|
|
pSymSectObj = (Sector_Object *) pSector->GetObject();
|
|
if (!pSymSectObj->GetCurrentList(eListToUpdate)->GetElementWithSector(m_pEditedSector))
|
|
m_aListOfSymElems[eListToUpdate].AddTail(pSymSectObj->GetNewElement(eListToUpdate, m_pEditedSector));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// init elements for multiple modif
|
|
else
|
|
{
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
if (m_pSectorInterface->GetListActivity(eList))
|
|
{
|
|
for (pSector = pCopyOfSectorList->GetHeadElement(pos); pSector;
|
|
pSector = pCopyOfSectorList->GetNextElement(pos))
|
|
{
|
|
if (pSector != m_pEditedSector)
|
|
{
|
|
if (!pSectObj->GetCurrentList(eList)->GetElementWithSector(pSector))
|
|
m_aListOfElements[eList].AddTail(pSectObj->GetNewElement(eList, pSector));
|
|
if (m_bSymetric)
|
|
{
|
|
pSymSectObj = (Sector_Object *) pSector->GetObject();
|
|
if (!pSymSectObj->GetCurrentList(eList)->GetElementWithSector(m_pEditedSector))
|
|
m_aListOfSymElems[eList].AddTail(pSymSectObj->GetNewElement(eList, m_pEditedSector));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
SECT_ModifCopyList::~SECT_ModifCopyList (void)
|
|
{
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
Do
|
|
=========================================================================*/
|
|
BOOL SECT_ModifCopyList::Do (void)
|
|
{
|
|
SECT_ElementBase *pElem;
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSectObject;
|
|
tdeTypeList eList;
|
|
POSITION pos;
|
|
int iList;
|
|
|
|
// if redo, update editor mode
|
|
if (!m_bFirstTime)
|
|
fn_vReinitEditorState();
|
|
// get edited sector
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
if (m_aListOfElements[eList].GetCount() > 0)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(eList);
|
|
// add elements in list
|
|
for (pElem = m_aListOfElements[eList].GetHeadElement(pos); pElem;
|
|
pElem = m_aListOfElements[eList].GetNextElement(pos))
|
|
pSectObject->fn_bAddSectorInList(pElem, eList);
|
|
// add symetric elements in list
|
|
if (m_bSymetric)
|
|
{
|
|
for (pElem = m_aListOfSymElems[eList].GetHeadElement(pos); pElem;
|
|
pElem = m_aListOfSymElems[eList].GetNextElement(pos))
|
|
pElem->GetOwnerSector()->fn_bAddSectorInList(pElem, eList);
|
|
}
|
|
}
|
|
}
|
|
|
|
// update editor
|
|
m_bDone = TRUE;
|
|
fn_vUpdateEditorState();
|
|
// update flag
|
|
m_bFirstTime = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
/*===========================================================================
|
|
Undo
|
|
=========================================================================*/
|
|
BOOL SECT_ModifCopyList::Undo (void)
|
|
{
|
|
SECT_ElementBase *pElem;
|
|
SECT_ListBase *pCurrentList;
|
|
Sector_Object *pSectObject;
|
|
tdeTypeList eList;
|
|
POSITION pos;
|
|
int iList;
|
|
|
|
// update editor mode
|
|
fn_vReinitEditorState();
|
|
// get edited sector
|
|
pSectObject = (Sector_Object *) m_pEditedSector->GetObject();
|
|
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
if (m_aListOfElements[eList].GetCount() > 0)
|
|
{
|
|
// get current list
|
|
pCurrentList = pSectObject->GetCurrentList(eList);
|
|
// remove elements in list
|
|
for (pElem = m_aListOfElements[eList].GetHeadElement(pos); pElem;
|
|
pElem = m_aListOfElements[eList].GetNextElement(pos))
|
|
pSectObject->fn_bRemoveSectorInList(pElem, eList);
|
|
// remove symetric elements in list
|
|
if (m_bSymetric)
|
|
{
|
|
for (pElem = m_aListOfSymElems[eList].GetHeadElement(pos); pElem;
|
|
pElem = m_aListOfSymElems[eList].GetNextElement(pos))
|
|
pElem->GetOwnerSector()->fn_bRemoveSectorInList(pElem, eList);
|
|
}
|
|
}
|
|
}
|
|
|
|
// update editor
|
|
m_bDone = FALSE;
|
|
fn_vUpdateEditorState();
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/*===========================================================================
|
|
ReinitEditor
|
|
=========================================================================*/
|
|
void SECT_ModifCopyList::fn_vReinitEditorState (void)
|
|
{
|
|
int iList;
|
|
|
|
// set editor mode
|
|
m_pSectorInterface->SetEditMode(m_eCurrentEditMode, FALSE);
|
|
// update edited sector
|
|
if (m_pSectorInterface->GetEditedSector() != m_pEditedSector)
|
|
m_pSectorInterface->fn_vReinitEditor(m_pEditedSector);
|
|
// list mode => update current list
|
|
if (m_eCurrentEditMode == E_em_EditList)
|
|
{
|
|
m_pSectorInterface->SetListActivity(E_NoActiveList, FALSE, FALSE);
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
if (m_aListOfElements[(tdeTypeList) iList].GetCount() > 0)
|
|
m_pSectorInterface->SetListActivity((tdeTypeList) iList, TRUE, FALSE);
|
|
}
|
|
}
|
|
// sector mode => update selected sector
|
|
else if (m_eCurrentEditMode == E_em_EditSector)
|
|
m_pSectorInterface->fn_vSelectNewSector(m_pEditedSector, FALSE, FALSE);
|
|
}
|
|
|
|
/*===========================================================================
|
|
UpdateEditor
|
|
=========================================================================*/
|
|
void SECT_ModifCopyList::fn_vUpdateEditorState (void)
|
|
{
|
|
SECT_DialogBase *pSingleList;
|
|
SECT_ListBase *pCurrentList;
|
|
tdeTypeList eList;
|
|
int iList;
|
|
|
|
// update drawing
|
|
if (m_eCurrentEditMode == E_em_EditList)
|
|
m_pSectorInterface->fn_vShowAllSectors();
|
|
else if (m_eCurrentEditMode == E_em_EditSector)
|
|
m_pSectorInterface->GetDialogSel()->fn_vReinitDialog(m_pEditedSector, m_pEditedSector);
|
|
|
|
// update dialogs
|
|
for (iList = 0; iList < C_NumberOfLists; iList++)
|
|
{
|
|
eList = (tdeTypeList) iList;
|
|
// get parameters
|
|
pSingleList = m_pSectorInterface->GetSingleList(eList);
|
|
pCurrentList = ((Sector_Object *) m_pEditedSector->GetObject())->GetCurrentList(eList);
|
|
pSingleList->fn_vInitSectorList(pCurrentList);
|
|
}
|
|
|
|
m_pSectorInterface->GetDialogList()->fn_vUpdateSelection(E_lrm_ReinitList);
|
|
|
|
if (m_bDone)
|
|
M_GetMainWnd()->UpdateStatus("Modif Sector Links Done", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
else
|
|
M_GetMainWnd()->UpdateStatus("Modif Sector Links Undone", C_STATUSPANE_INFOS, C_STATUS_NORMAL);
|
|
}
|
|
|
|
|