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) {