950a2b90af
- modifica radicale della gestione dei selezionati (ora lista parallela su oggetti di GDB).
97 lines
3.6 KiB
C++
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 ;
|
|
} ;
|