1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: Support class for object lifetime tracking (wxWeakRef<T>)
4 // Author: Arne Steinarson
7 // Copyright: (c) 2007 Arne Steinarson
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_TRACKER_H_
12 #define _WX_TRACKER_H_
16 class wxEventConnectionRef
;
18 // This class represents an object tracker and is stored in a linked list
19 // in the tracked object. It is only used in one of its derived forms.
20 class WXDLLIMPEXP_BASE wxTrackerNode
23 wxTrackerNode() : m_nxt(NULL
) { }
24 virtual ~wxTrackerNode() { }
26 virtual void OnObjectDestroy() = 0;
28 virtual wxEventConnectionRef
*ToEventConnection() { return NULL
; }
33 friend class wxTrackable
; // For list access
34 friend class wxEvtHandler
; // For list access
37 // Add-on base class for a trackable object.
41 wxTrackable() : m_first(NULL
) { }
45 // Notify all registered refs
48 wxTrackerNode
* const first
= m_first
;
49 m_first
= first
->m_nxt
;
50 first
->OnObjectDestroy();
54 void AddNode(wxTrackerNode
*prn
)
60 void RemoveNode(wxTrackerNode
*prn
)
62 for ( wxTrackerNode
**pprn
= &m_first
; *pprn
; pprn
= &(*pprn
)->m_nxt
)
71 wxFAIL_MSG( "removing invalid tracker node" );
74 wxTrackerNode
*GetFirst() const { return m_first
; }
77 wxTrackerNode
*m_first
;
79 DECLARE_NO_COPY_CLASS(wxTrackable
)
82 #endif // _WX_TRACKER_H_