Skip to content
Snippets Groups Projects
Commit 003662ef authored by spick's avatar spick
Browse files

Cleaned up IVistaObserver code.

parent 75d6f23a
Branches
No related tags found
1 merge request!25Feature/vista default observer
......@@ -34,10 +34,6 @@
/* CONSTRUCTORS / DESTRUCTOR */
/*============================================================================*/
IVistaObserver::IVistaObserver(IVistaObserver &)
{}
IVistaObserver::IVistaObserver()
: m_bObserverEnabled(true)
{ }
......@@ -48,14 +44,10 @@ IVistaObserver::~IVistaObserver()
// is altered during the ReleaseObserveable call
std::vector< IVistaObserveable* > vecObs = m_vecObserveables;
std::vector<IVistaObserveable *>::iterator it;
for (it = vecObs.begin(); it != vecObs.end(); ++it)
for( IVistaObserveable* pObs : vecObs )
{
ReleaseObserveable(*it, IVistaObserveable::TICKET_NONE);
ReleaseObserveable( pObs, IVistaObserveable::TICKET_NONE );
}
m_vecObserveables.clear();
}
/*============================================================================*/
......@@ -72,29 +64,27 @@ void IVistaObserver::SetIsObserverEnabled(bool bEnabled)
m_bObserverEnabled = bEnabled;
}
void IVistaObserver::UpdateRequest(IVistaObserveable *pObserveable, int msg, int nTicket)
void IVistaObserver::UpdateRequest( IVistaObserveable* pObserveable,
int msg,
int nTicket )
{
if( m_bObserverEnabled )
{
ObserverUpdate( pObserveable, msg, nTicket );
}
}
bool IVistaObserver::ObserveableDeleteRequest(
IVistaObserveable* pObserveable,
int nTicket /*= IVistaObserveable::TICKET_NONE */
)
bool IVistaObserver::ObserveableDeleteRequest( IVistaObserveable* pObserveable,
int nTicket )
{
return true;
}
void IVistaObserver::ObserveableDelete(
IVistaObserveable* pObserveable,
int nTicket /*= IVistaObserveable::TICKET_NONE */
)
void IVistaObserver::ObserveableDelete( IVistaObserveable* pObserveable, int nTicket )
{
// just delete pObserveable from list
std::vector<IVistaObserveable*>::iterator it =
std::find(m_vecObserveables.begin(), m_vecObserveables.end(), pObserveable);
ObserveablesVec::iterator it = std::find( m_vecObserveables.begin(),
m_vecObserveables.end(),
pObserveable );
if( it != m_vecObserveables.end() )
{
......@@ -102,17 +92,15 @@ void IVistaObserver::ObserveableDelete(
}
}
void IVistaObserver::ReleaseObserveable(
IVistaObserveable* pObserveable,
int nTicket /*= IVistaObserveable::TICKET_NONE */
)
void IVistaObserver::ReleaseObserveable( IVistaObserveable* pObserveable, int nTicket )
{
if( Observes( pObserveable ) )
{
pObserveable->DetachObserver( this );
std::vector<IVistaObserveable*>::iterator it =
std::find(m_vecObserveables.begin(), m_vecObserveables.end(), pObserveable);
ObserveablesVec::iterator it = std::find( m_vecObserveables.begin(),
m_vecObserveables.end(),
pObserveable );
if( it != m_vecObserveables.end() )
{
......@@ -123,23 +111,23 @@ void IVistaObserver::ReleaseObserveable(
bool IVistaObserver::Observes( IVistaObserveable* pObserveable )
{
std::vector<IVistaObserveable *>::iterator it =
std::find(m_vecObserveables.begin(), m_vecObserveables.end(), pObserveable);
ObserveablesVec::iterator it = std::find( m_vecObserveables.begin(),
m_vecObserveables.end(),
pObserveable );
return ( it != m_vecObserveables.end() );
}
void IVistaObserver::Observe(
IVistaObserveable* pObserveable,
int nTicket /*= IVistaObserveable::TICKET_NONE */
)
void IVistaObserver::Observe( IVistaObserveable* pObserveable, int nTicket )
{
if( !Observes( pObserveable ) )
{
if( pObserveable->AttachObserver( this, nTicket ) )
{
m_vecObserveables.push_back( pObserveable );
}
}
}
/*============================================================================*/
......@@ -158,7 +146,6 @@ void VistaSimpleObserver::ObserverUpdate( IVistaObserveable* pObserveable,
}
/*============================================================================*/
/* LOCAL VARS AND FUNCS */
/*============================================================================*/
......@@ -63,7 +63,6 @@ class VISTAASPECTSAPI IVistaObserver
public:
virtual ~IVistaObserver();
/**
* An observeable is about to be deleted, this can be forbidden by returning
* false here.
......@@ -80,7 +79,6 @@ public:
virtual bool ObserveableDeleteRequest( IVistaObserveable* pObserveable,
int nTicket = IVistaObserveable::TICKET_NONE );
/**
* This is sent to the observer before the observeable is deleted. Note that this
* is not a question, but a notification. After this notification passed, the observer
......@@ -143,23 +141,18 @@ public:
bool GetIsObserverEnabled() const;
virtual void SetIsObserverEnabled( bool bEnabled );
protected:
IVistaObserver();
// list of objects observed by this observer
// Note: this is implemented as a vector (even though we have to perform
// operations like deleting arbitrary elements), as this is nevertheless
// way faster than on an std::list.
std::vector<IVistaObserveable *> m_vecObserveables;
typedef std::vector< IVistaObserveable* > ObserveablesVec;
ObserveablesVec m_vecObserveables;
private:
/**
* Copy-constructor. We prevent copying.
*/
IVistaObserver(IVistaObserver &);
IVistaObserver( const IVistaObserver& ) = delete;
IVistaObserver& operator=( const IVistaObserver& ) = delete;
bool m_bObserverEnabled;
};
/**
......@@ -178,7 +171,7 @@ public:
VistaSimpleObserver( ObserverUpdateFunc fnObserverUpdate );
~VistaSimpleObserver() override = default;
void ObserverUpdate( IVistaObserveable* pObserveable, int nMsg, int nTicket );
void ObserverUpdate( IVistaObserveable* pObserveable, int nMsg, int nTicket ) override;
private:
ObserverUpdateFunc m_fnObserverUpdate;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment