Files
Dario Sassi 950a2b90af EgtGeomKernel 1.6d6 :
- modifica radicale della gestione dei selezionati (ora lista parallela su oggetti di GDB).
2015-04-25 20:32:37 +00:00

97 lines
3.6 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : SelManager.h Data : 19.05.14 Versione : 1.5e7
// Contenuto : Dichiarazione e implementazione della classe SelManager.
//
//
//
// Modifiche : 19.03.14 DS Creazione modulo.
// 19.05.14 DS La AddObj non controlla eventuale precedente presenza
// oggetto in lista, perchè già si fa tramite flag di GdbObj.
//
//----------------------------------------------------------------------------
#pragma once
class GdbObj ;
//----------------------------------------------------------------------------
class SelManager
{
public :
SelManager( void)
: m_nCount( 0), m_pFirst( nullptr), m_pLast( nullptr), m_pCurr( nullptr) {}
int GetSize( void) const
{ return m_nCount ; }
bool AddObj( GdbObj* pGObj)
{ if ( pGObj == nullptr)
return false ;
if ( m_pLast == nullptr) {
m_pLast = pGObj ;
m_pFirst = pGObj ;
pGObj->m_pSelNext = nullptr ;
pGObj->m_pSelPrev = nullptr ;
}
else {
pGObj->m_pSelNext = nullptr ;
pGObj->m_pSelPrev = m_pLast ;
m_pLast->m_pSelNext = pGObj ;
m_pLast = pGObj ;
}
++ m_nCount ;
return true ; }
bool RemoveObj( GdbObj* pGObj)
{ if ( pGObj == nullptr)
return false ;
if ( m_pCurr == pGObj)
m_pCurr = nullptr ;
if ( m_pFirst == pGObj && m_pLast == pGObj) {
m_pFirst = nullptr ;
m_pLast = nullptr ;
}
else if ( m_pFirst == pGObj) {
m_pFirst = pGObj->m_pSelNext ;
if ( m_pFirst != nullptr)
m_pFirst->m_pSelPrev = nullptr ;
}
else if ( m_pLast == pGObj) {
m_pLast = pGObj->m_pSelPrev ;
if ( m_pLast != nullptr)
m_pLast->m_pSelNext = nullptr ;
}
else {
if ( pGObj->m_pSelNext == nullptr && pGObj->m_pSelPrev == nullptr)
return false ;
if ( pGObj->m_pSelPrev != nullptr)
pGObj->m_pSelPrev->m_pSelNext = pGObj->m_pSelNext ;
if ( pGObj->m_pSelNext != nullptr)
pGObj->m_pSelNext->m_pSelPrev = pGObj->m_pSelPrev ;
}
pGObj->m_pSelNext = nullptr ;
pGObj->m_pSelPrev = nullptr ;
-- m_nCount ;
return true ; }
GdbObj* GetFirstObj( void) const
{ m_pCurr = m_pFirst ;
return m_pCurr ; }
GdbObj* GetNextObj( void) const
{ if ( m_pCurr != nullptr)
m_pCurr = m_pCurr->m_pSelNext ;
return m_pCurr ; }
GdbObj* GetLastObj( void) const
{ m_pCurr = m_pLast ;
return m_pCurr ; }
GdbObj* GetPrevObj( void) const
{ if ( m_pCurr != nullptr)
m_pCurr = m_pCurr->m_pSelPrev ;
return m_pCurr ; }
private :
int m_nCount ;
GdbObj* m_pFirst ;
GdbObj* m_pLast ;
mutable GdbObj* m_pCurr ;
} ;