diff --git a/EXE_GdbPartLayers.cpp b/EXE_GdbPartLayers.cpp index b6ae154..37f6aa5 100644 --- a/EXE_GdbPartLayers.cpp +++ b/EXE_GdbPartLayers.cpp @@ -708,6 +708,8 @@ ExeDuploNew( int nSouId) // Aggiorno info del duplicato pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nSouId) ; pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ; + // Dichiaro progetto modificato + ExeSetModified() ; return nNewId ; } @@ -765,7 +767,11 @@ ExeDuploSetModified( int nSouId) if ( ! pGeomDB->ExistsInfo( nSouId, GDB_SI_DUPLIST)) return true ; // Imposto il flag di modificato - return pGeomDB->SetInfo( nSouId, GDB_SI_DUPMODIF, true) ; + if ( ! pGeomDB->SetInfo( nSouId, GDB_SI_DUPMODIF, true)) + return false ; + // Dichiaro progetto modificato + ExeSetModified() ; + return true ; } //----------------------------------------------------------------------------- @@ -793,7 +799,11 @@ ExeDuploSetLocked( int nDupId) if ( ! ExeIsDuplo( nDupId)) return false ; // Imposto il flag di bloccato - return pGeomDB->SetInfo( nDupId, GDB_SI_DUPLOCKED, true) ; + if ( ! pGeomDB->SetInfo( nDupId, GDB_SI_DUPLOCKED, true)) + return false ; + // Dichiaro progetto modificato + ExeSetModified() ; + return true ; } //----------------------------------------------------------------------------- @@ -802,10 +812,16 @@ ExeDuploResetLocked( int nDupId) { IGeomDB* pGeomDB = GetCurrGeomDB() ; VERIFY_GEOMDB( pGeomDB, false) - // Verifico sia nel gruppo base dei duplicati + // Verifico sia nel gruppo base dei duplicati o scambiato con un gruppo da esso int nDuploBaseId = GetDuploBase( pGeomDB) ; - if ( nDuploBaseId == GDB_ID_NULL || pGeomDB->GetParentId( nDupId) != nDuploBaseId) + if ( nDuploBaseId == GDB_ID_NULL) return false ; + int nDBaseId = GDB_ID_NULL ; + if ( pGeomDB->GetParentId( nDupId) != nDuploBaseId) { + if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_BASE, nDBaseId) || + pGeomDB->GetParentId( nDBaseId) != nDuploBaseId) + return false ; + } // Verifico abbia un sorgente int nOrigId ; if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPSOU, nOrigId) || pGeomDB->GetGdbType( nOrigId) != GDB_TY_GROUP) @@ -822,9 +838,17 @@ ExeDuploResetLocked( int nDupId) if ( ! pGeomDB->GetInfo( nDupId, GDB_SI_DUPTOUPDATE, bToUpdate)) bToUpdate = false ; pGeomDB->RemoveInfo( nDupId, GDB_SI_DUPTOUPDATE) ; - if ( ! bToUpdate) + if ( ! bToUpdate) { + // Dichiaro progetto modificato + ExeSetModified() ; return true ; + } // Eseguo aggiornamento + int nDStat = GDB_ST_ON ; + if ( nDBaseId != GDB_ID_NULL) { + pGeomDB->GetStatus( nDupId, nDStat) ; + pGeomDB->GroupSwap( nDupId, nDBaseId, true, true) ; + } pGeomDB->Erase( nDupId) ; int nNewId = pGeomDB->Copy( nOrigId, nDupId, nDuploBaseId) ; if ( nNewId == GDB_ID_NULL) @@ -836,6 +860,13 @@ ExeDuploResetLocked( int nDupId) pGeomDB->SetInfo( nNewId, GDB_SI_DUPSOU, nOrigId) ; pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPLIST) ; pGeomDB->RemoveInfo( nNewId, GDB_SI_DUPMODIF) ; + // Se necessario rieseguo swap al contrario + if ( nDBaseId != GDB_ID_NULL) { + pGeomDB->SetStatus( nNewId, nDStat) ; + pGeomDB->GroupSwap( nNewId, nDBaseId, true, true) ; + } + // Dichiaro progetto modificato + ExeSetModified() ; return true ; } @@ -908,6 +939,8 @@ ExeDuploUpdate( int nSouId) } // reset flag di modificato pGeomDB->RemoveInfo( nSouId, GDB_SI_DUPMODIF) ; + // Dichiaro progetto modificato + ExeSetModified() ; return bAllOk ; } diff --git a/EgtExecutor.rc b/EgtExecutor.rc index b1eb117..a556ee0 100644 Binary files a/EgtExecutor.rc and b/EgtExecutor.rc differ