EgtExecutor 2.4a5 :

- aggiunte funzioni Exe/Lua DuploSetLocked, DuploResetLocked e DuploGetLocked.
This commit is contained in:
DarioS
2022-01-17 14:58:56 +01:00
parent 65e9d608d9
commit 5ef402e258
3 changed files with 130 additions and 0 deletions
+78
View File
@@ -773,6 +773,77 @@ ExeDuploGetModified( int nSouId, bool& bModif)
return true ;
}
//-----------------------------------------------------------------------------
bool
ExeDuploSetLocked( int nDupId)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// Verifico sia un duplo
if ( ! ExeIsDuplo( nDupId))
return false ;
// Imposto il flag di bloccato
return pGeomDB->SetInfo( nDupId, GDB_SI_DUPLOCKED, true) ;
}
//-----------------------------------------------------------------------------
bool
ExeDuploResetLocked( int nDupId)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// Verifico sia nel gruppo base dei duplicati
int nDuploBaseId = GetDuploBase( pGeomDB) ;
if ( nDuploBaseId == GDB_ID_NULL || pGeomDB->GetParentId( nDupId) != nDuploBaseId)
return false ;
// Verifico abbia un sorgente
int nOrigId ;
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPSOU, nOrigId) || pGeomDB->GetGdbType( nOrigId) != GDB_TY_GROUP)
return false ;
// Verifico bloccaggio
bool bLocked ;
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPLOCKED, bLocked))
bLocked = false ;
pGeomDB->RemoveInfo( nDupId, GDB_SI_DUPLOCKED) ;
if ( ! bLocked)
return true ;
// Verifico necessità di aggiornamento
bool bToUpdate ;
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPTOUPDATE, bToUpdate))
bToUpdate = false ;
pGeomDB->RemoveInfo( nDupId, GDB_SI_DUPTOUPDATE) ;
if ( ! bToUpdate)
return true ;
// Eseguo aggiornamento
pGeomDB->Erase( nDupId) ;
int nNewId = pGeomDB->Copy( nOrigId, nDupId, nDuploBaseId) ;
if ( nNewId == GDB_ID_NULL)
return false ;
int nBaseId ;
if ( pGeomDB->GetInfo( nOrigId, GDB_SI_BASE, nBaseId) &&
pGeomDB->GetGdbType( nBaseId) == GDB_TY_GROUP)
*pGeomDB->GetGroupFrame( nNewId) = *pGeomDB->GetGroupFrame( nBaseId) ;
pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nOrigId) ;
pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ;
pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPMODIF) ;
return true ;
}
//-----------------------------------------------------------------------------
bool
ExeDuploGetLocked( int nDupId, bool& bLocked)
{
IGeomDB* pGeomDB = GetCurrGeomDB() ;
VERIFY_GEOMDB( pGeomDB, false)
// Verifico sia un duplo
if ( ! ExeIsDuplo( nDupId))
return false ;
// Recupero il flag di bloccato
if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPLOCKED, bLocked))
bLocked = false ;
return true ;
}
//-----------------------------------------------------------------------------
bool
ExeDuploUpdate( int nSouId)
@@ -804,6 +875,13 @@ ExeDuploUpdate( int nSouId)
return false ;
// eseguo gli aggiornamenti
for ( int nCopyId : vnRef) {
// se bloccato, non eseguo aggiornamento
bool bLocked ;
if ( pGeomDB->GetInfo( nCopyId, GDB_SI_DUPLOCKED, bLocked) && bLocked) {
pGeomDB->SetInfo( nCopyId, GDB_SI_DUPTOUPDATE, true) ;
continue ;
}
// aggiorno
pGeomDB->Erase( nCopyId) ;
int nNewId = pGeomDB->Copy( nSouId, nCopyId, nDuploBaseId) ;
if ( nNewId == GDB_ID_NULL) {
BIN
View File
Binary file not shown.
+52
View File
@@ -488,6 +488,55 @@ LuaDuploGetModified( lua_State* L)
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaDuploSetLocked( lua_State* L)
{
// 1 parametro : nDupId
int nDupId ;
LuaCheckParam( L, 1, nDupId)
LuaClearStack( L) ;
// blocco il duplicato (non modificabile)
bool bOk = ExeDuploSetLocked( nDupId) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaDuploResetLocked( lua_State* L)
{
// 1 parametro : nDupId
int nDupId ;
LuaCheckParam( L, 1, nDupId)
LuaClearStack( L) ;
// sblocco il duplicato (ritorna copia esatta dell'originale)
bool bOk = ExeDuploResetLocked( nDupId) ;
// restituisco il risultato
LuaSetParam( L, bOk) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaDuploGetLocked( lua_State* L)
{
// 1 parametro : nDupId
int nDupId ;
LuaCheckParam( L, 1, nDupId)
LuaClearStack( L) ;
// recupero lo stato di blocco del duplicato
bool bLocked ;
bool bOk = ExeDuploGetLocked( nDupId, bLocked) ;
// restituisco il risultato
if ( bOk)
LuaSetParam( L, bLocked) ;
else
LuaSetParam( L) ;
return 1 ;
}
//-------------------------------------------------------------------------------
static int
LuaDuploUpdate( lua_State* L)
@@ -569,6 +618,9 @@ LuaInstallGdbPartLayer( LuaMgr& luaMgr)
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploList", LuaDuploList) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploSetModified", LuaDuploSetModified) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploGetModified", LuaDuploGetModified) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploSetLocked", LuaDuploSetLocked) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploResetLocked", LuaDuploResetLocked) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploGetLocked", LuaDuploGetLocked) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploUpdate", LuaDuploUpdate) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtIsDuplo", LuaIsDuplo) ;
bOk = bOk && luaMgr.RegisterFunction( "EgtDuploGetOriginal", LuaDuploGetOriginal) ;