DECLARE_NO_COPY_CLASS(wxPersistentObject)
};
+// FIXME-VC6: VC6 has troubles with template methods of DLL-exported classes,
+// apparently it believes they should be defined in the DLL (which
+// is, of course, impossible as the DLL doesn't know for which types
+// will they be instantiated) instead of compiling them when
+// building the main application itself. Because of this problem
+// (which only arises in debug build!) we can't use the usual
+// RegisterAndRestore(obj) with it and need to explicitly create the
+// persistence adapter. To hide this ugliness we define a global
+// function which does it for us.
+template <typename T>
+inline bool wxPersistentRegisterAndRestore(T *obj)
+{
+ wxPersistentObject * const pers = wxCreatePersistentObject(obj);
+
+ return wxPersistenceManager::Get().RegisterAndRestore(obj, pers);
+
+}
+
#endif // _WX_PERSIST_H_
framework.
@see @ref persistence_defining
+
+ @header{wx/persist.h}
*/
template <class T>
wxPersistentObject *wxCreatePersistentObject(T *obj);
+
+/**
+ A shorter synonym for wxPersistenceManager::RegisterAndRestore().
+
+ This function simply calls wxPersistenceManager::RegisterAndRestore() but
+ using it results in slightly shorter code as it calls
+ wxPersistenceManager::Get() internally.
+
+ For the implementation reasons, this function @em mucst be used instead of
+ the template method when using Microsoft Visual C++ 6 compiler.
+
+ @header{wx/persist.h}
+ */
+template <class T>
+bool wxPersistentRegisterAndRestore(T *obj);
: wxFrame(NULL, wxID_ANY, title)
{
SetName("Main");
- const bool sizeSet = wxPersistenceManager::Get().RegisterAndRestore(this);
+ const bool sizeSet = wxPersistentRegisterAndRestore(this);
// set the frame icon
SetIcon(wxICON(sample));
wxEVT_COMMAND_WIDGETS_PAGE_CHANGED,
wxWidgetsbookEventHandler(WidgetsFrame::OnPageChanged) );
- const bool pageSet = wxPersistenceManager::Get().RegisterAndRestore(m_book);
+ const bool pageSet = wxPersistentRegisterAndRestore(m_book);
#if USE_TREEBOOK
// for treebook page #0 is empty parent page only so select the first page