reman3/Rayman_X/cpa/tempgrp/OAC/Src/EdActors/EDACGlob.cpp

259 lines
7.1 KiB
C++

// Global functions
///////////////////////////
#include "stdafx.h"
#include "EDACGlob.hpp"
#include "ACP_Base.h"
#include "TAC.h"
#include "TFa.h"
#include "DPT.h"
#include "EdtList.hpp"
#include "CPA_dato.hpp"
#include "CPA_nll.hpp"
#include "_AInterf.hpp"
#include "x:\cpa\main\inc\_EditID.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
BOOL FirstLoad = FALSE;
//**************************************************************************
void fn_vCheckAndChangeName(CString &r_csName)
{
if ( !r_csName.IsEmpty() )
{
long c_lI;
for (c_lI = 0; c_lI < r_csName.GetLength(); c_lI++ )
{
if ( (r_csName.Mid(c_lI, 1) == " ")
|| (r_csName.Mid(c_lI, 1) == "-")
)
r_csName.SetAt(c_lI, '_');
}
}
}
#define C_CHAR_UNPASSED '.'
#define C_CHAR_PASSED '|'
#define C_BAR_LENGTH 50
//**************************************************************************
// Only displays message in the status bar if 'cPercentage = -1'
void EDACTORS_fn_vGiveProgressInfo(CString csMessage, char cPercentage /*= -1*/)
{
CString csTrueMessage = csMessage;
if ( cPercentage > 0 )
{
CString csBar;
short c_wI;
for (c_wI = 0; c_wI < C_BAR_LENGTH; c_wI ++)
{
csBar += (c_wI < ((cPercentage * C_BAR_LENGTH)/100)) ? C_CHAR_PASSED : C_CHAR_UNPASSED;
}
csTrueMessage.Format("%s %s", csMessage, csBar);
}
if(FirstLoad == FALSE)
M_GetMainWnd()->UpdateStatus((char *)LPCTSTR(csTrueMessage), C_STATUSPANE_INFOS, C_STATUS_NORMAL);
else
g_oBaseFrame.mfnv_UpdateTitle((char *)LPCTSTR(csTrueMessage));
}
//**************************************************************************
BOOL EDACTORS_fn_bIsFileInCommon(CString _csFileName)
{
_csFileName.MakeLower();
return ( _csFileName.Find("_common") != -1 );
}
//***********************************************************************
// m_wGetIndexOfName
// finds the the index of a name in a name list, and the model using the name list
// wParam can have the following values :
// C_uiActor_GetANameList
// C_uiActor_CreateANewObjectList
// C_uiActor_DeleteAnObjectList
// C_uiActor_GetAnObjectList
// C_uiActor_SetAnObjectList
// C_uiActor_SetAnObjectInObjectList
//***********************************************************************
void fn_vSplitName(CString csName,CString &csFamily,CString &csNameList,CString &csObject)
{
CString csTemp;
int iPos;
// extract object
iPos = csName.ReverseFind('@');
if (iPos != -1)
{
csObject = csName.Right(csName.GetLength()-iPos-1);
csTemp = csName.Left(iPos);
}
else
{
csObject = csName;
csTemp = "";
}
// extract name list
iPos = csTemp.ReverseFind('@');
if (iPos != -1)
{
csNameList = csTemp.Right(csTemp.GetLength()-iPos-1);
csFamily = csName.Left(iPos);
}
else
{
csNameList = csTemp;
csFamily = "";
}
}
//**************************************************************************
short m_wGetIndexOfName(CString _csNameOfObject, CPA_Actor *&r_pModel,CString &rcsObjectType)
{
//CPA_BaseObjectList *p_oObjectList = GetMainWorld()->fn_p_oGetOriginalObjectList(C_szObjectNameType);
CString csFamilyName, csNameListName, csObjectName;
//split the name to get separately the reachable names of the name, list, and family
//p_oObjectList->fn_vSplitName(_csNameOfObject, &csNameListName, &csObjectType, &csObjectName);
//p_oObjectList->fn_vSplitName(csNameListName, &csFamilyName, &csObjectType, &csNameListName);
fn_vSplitName(_csNameOfObject,csFamilyName,csNameListName,csObjectName);
rcsObjectType="";
r_pModel = NULL;
long lNbFamilies, lNbNameLists, lNbNames;
class CPA_List<class CPA_BaseObject> oObList;
CPA_BaseObject *p_oFamily, *p_oNameList, *p_oName;
//if the family is specified, find it
p_oFamily = NO_CRITERIA;
if ( !csFamilyName.IsEmpty() )
{
lNbFamilies = g_pclInterface->GetMainWorld()->fn_lFindObjects(&oObList, csFamilyName, C_szFamilyTypeName, NO_CRITERIA);
if ( lNbFamilies <= 0 )
{
oObList.RemoveAll();
return C_wNoFamilyFound;
}
if ( lNbFamilies > 1 )
{
oObList.RemoveAll();
return C_wMultipleFamiliesFound;
}
p_oFamily = oObList.GetHead()/*->GetObject()*/;
}
//if the name list is specified, find it
oObList.RemoveAll();
p_oNameList = NO_CRITERIA;
if ( !csNameListName.IsEmpty() )
{
char *a_szTypes[] =
{
C_szZDeNameListType,
C_szZDmNameListType,
C_szZDdNameListType,
C_szZDrNameListType,
C_szWayNameListType,
};
short wNbTypes = sizeof(a_szTypes) / sizeof(char *);
lNbNameLists = 0;
for ( short wIndex = 0; wIndex < wNbTypes; wIndex ++ )
{
//find a name list owned by the specified family, if relevant
long lNb = g_pclInterface->GetMainWorld()->fn_lFindObjects(&oObList, csNameListName, a_szTypes[wIndex], p_oFamily);
lNbNameLists =+ lNb;
if ( lNb == 1 )
p_oNameList = oObList.GetHead()/*->GetObject()*/;
}
if ( lNbNameLists <= 0 )
{
oObList.RemoveAll();
return C_wNoNameListFound;
}
if ( lNbNameLists > 1 )
{
oObList.RemoveAll();
return C_wMultipleNameListsFound;
}
}
//try to find the object name
oObList.RemoveAll();
if ( !csObjectName.IsEmpty() )
{
//find a name that is used by the specified name list, or without criteria
lNbNames = g_pclInterface->GetMainWorld()->fn_lFindObjects(&oObList, csObjectName, C_szObjectNameType, p_oNameList);
if ( lNbNames <= 0 )
{
oObList.RemoveAll();
return C_wNoNameFound;
}
if ( lNbNames > 1 )
{
oObList.RemoveAll();
return C_wMultipleNamesFound;
}
p_oName = oObList.GetHead()/*->GetObject()*/;
}
else
return C_wNoNameFound;
oObList.RemoveAll();
//here only one name was found with the specified information
//lets find out the model using the name list referencing the name
//Gets type
rcsObjectType=p_oName->GetOwner()->GetType();
//Gets model
//CString csNameList=p_oName->GetOwner()->GetName();
int iNbReferencingFathers;
CList< CPA_BaseObject *, CPA_BaseObject *> oFatherList;
p_oNameList=p_oName->GetOwner();
iNbReferencingFathers = g_oCoherenceManager.m_fn_iGetFatherList(p_oNameList, &oFatherList);
if ( iNbReferencingFathers == 1 )
r_pModel = ((CPA_Actor *) oFatherList.GetHead());
oFatherList.RemoveAll();
return ((CPA_tdoNameList *) p_oNameList)->m_wGetIndexOfName(csObjectName);
/* int iNbReferencingFathers;
CList< CPA_SaveObject *, CPA_SaveObject *> oFatherList;
if ( p_oNameList == NO_CRITERIA ) //if no name list was specified
{
//find the name lists that use it
int iNbReferencingFathers = g_oCoherenceManager.m_fn_iGetFatherList(p_oName, &oFatherList);
if ( iNbReferencingFathers <= 0 )
{
oFatherList.RemoveAll();
return C_wNoNameListFound;
}
if ( iNbReferencingFathers > 1 )
{
oFatherList.RemoveAll();
return C_wMultipleNameListsFound;
}
//the only valid result is 1!
p_oNameList = oFatherList.GetHead();
}
//find which models use this name list
oFatherList.RemoveAll();
iNbReferencingFathers = g_oCoherenceManager.m_fn_iGetFatherList(p_oNameList, &oFatherList);
if ( iNbReferencingFathers == 1 )
r_pModel = (EdActors_EditorActorModel *) ((CPA_Actor *) oFatherList.GetHead())->m_fn_pclGetEditorActor();
oFatherList.RemoveAll();
return ((CPA_tdoNameList *) p_oNameList)->m_wGetIndexOfName(csObjectName);*/
}