Implement wx-prefixed macros versions of DECLARE/IMPLEMENT*CLASS macros.

Implement compatibility aliases for non-prefixed macro names.
Require a final semicolon where possible.
Correct a recurring error in the docs: IMPLEMENT/DECLARE_CLASS are alias to the DYNAMIC macros, not to the ABSTRACT macros.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Francesco Montorsi
2010-06-09 13:55:48 +00:00
parent e4431849b4
commit b19b28c8fc
23 changed files with 175 additions and 133 deletions

View File

@@ -121,7 +121,7 @@ public:
void SetItemCount(long count); void SetItemCount(long count);
wxTextCtrl *EditLabel(long item, wxTextCtrl *EditLabel(long item,
wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
wxTextCtrl* GetEditControl() const; wxTextCtrl* GetEditControl() const;
void Edit( long item ) { EditLabel(item); } void Edit( long item ) { EditLabel(item); }

View File

@@ -524,7 +524,7 @@ public:
// start editing the label of the given item // start editing the label of the given item
wxTextCtrl *EditLabel(long item, wxTextCtrl *EditLabel(long item,
wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
wxTextCtrl *GetEditControl() const wxTextCtrl *GetEditControl() const
{ {
return m_textctrlWrapper ? m_textctrlWrapper->GetText() : NULL; return m_textctrlWrapper ? m_textctrlWrapper->GetText() : NULL;

View File

@@ -164,7 +164,7 @@ public:
virtual void ScrollTo(const wxTreeItemId& item); virtual void ScrollTo(const wxTreeItemId& item);
virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, virtual wxTextCtrl *EditLabel(const wxTreeItemId& item,
wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl));
virtual wxTextCtrl *GetEditControl() const; virtual wxTextCtrl *GetEditControl() const;
virtual void EndEditLabel(const wxTreeItemId& item, virtual void EndEditLabel(const wxTreeItemId& item,
bool discardChanges = false); bool discardChanges = false);

View File

@@ -316,7 +316,7 @@ public:
// been before. textCtrlClass parameter allows you to create an edit // been before. textCtrlClass parameter allows you to create an edit
// control of arbitrary user-defined class deriving from wxTextCtrl. // control of arbitrary user-defined class deriving from wxTextCtrl.
wxTextCtrl* EditLabel(const wxTreeItemId& item, wxTextCtrl* EditLabel(const wxTreeItemId& item,
wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl));
// returns the same pointer as StartEdit() if the item is being edited, // returns the same pointer as StartEdit() if the item is being edited,
// NULL otherwise (it's assumed that no more than one item may be // NULL otherwise (it's assumed that no more than one item may be
// edited simultaneously) // edited simultaneously)

View File

@@ -288,7 +288,7 @@ public:
void ClearAll(); void ClearAll();
// Edit the label // Edit the label
wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
// End label editing, optionally cancelling the edit // End label editing, optionally cancelling the edit
bool EndEditLabel(bool cancel); bool EndEditLabel(bool cancel);

View File

@@ -172,7 +172,7 @@ public:
virtual void ScrollTo(const wxTreeItemId& item); virtual void ScrollTo(const wxTreeItemId& item);
virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, virtual wxTextCtrl *EditLabel(const wxTreeItemId& item,
wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl));
virtual wxTextCtrl *GetEditControl() const; virtual wxTextCtrl *GetEditControl() const;
virtual void EndEditLabel(const wxTreeItemId& WXUNUSED(item), virtual void EndEditLabel(const wxTreeItemId& WXUNUSED(item),
bool discardChanges = false) bool discardChanges = false)

View File

@@ -26,7 +26,7 @@ class WXDLLIMPEXP_FWD_BASE wxString;
#define wxUSE_EXTENDED_RTTI 0 #define wxUSE_EXTENDED_RTTI 0
#endif #endif
#define DECLARE_CLASS_INFO_ITERATORS() \ #define wxDECLARE_CLASS_INFO_ITERATORS() \
class WXDLLIMPEXP_BASE const_iterator \ class WXDLLIMPEXP_BASE const_iterator \
{ \ { \
typedef wxHashTable_Node Node; \ typedef wxHashTable_Node Node; \
@@ -55,7 +55,7 @@ class WXDLLIMPEXP_FWD_BASE wxString;
}; \ }; \
\ \
static const_iterator begin_classinfo(); \ static const_iterator begin_classinfo(); \
static const_iterator end_classinfo(); static const_iterator end_classinfo()
#if wxUSE_EXTENDED_RTTI #if wxUSE_EXTENDED_RTTI
#include "wx/xti.h" #include "wx/xti.h"
@@ -130,7 +130,8 @@ public:
( m_baseInfo2 && m_baseInfo2->IsKindOf(info) ) ); ( m_baseInfo2 && m_baseInfo2->IsKindOf(info) ) );
} }
DECLARE_CLASS_INFO_ITERATORS() wxDECLARE_CLASS_INFO_ITERATORS();
private: private:
const wxChar *m_className; const wxChar *m_className;
int m_objectSize; int m_objectSize;
@@ -163,24 +164,25 @@ WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxString& name);
// Dynamic class macros // Dynamic class macros
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
#define DECLARE_ABSTRACT_CLASS(name) \ #define wxDECLARE_ABSTRACT_CLASS(name) \
public: \ public: \
static wxClassInfo ms_classInfo; \ static wxClassInfo ms_classInfo; \
virtual wxClassInfo *GetClassInfo() const; virtual wxClassInfo *GetClassInfo() const
#define DECLARE_DYNAMIC_CLASS_NO_ASSIGN(name) \ #define wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(name) \
DECLARE_NO_ASSIGN_CLASS(name) \ wxDECLARE_NO_ASSIGN_CLASS(name); \
DECLARE_DYNAMIC_CLASS(name) wxDECLARE_DYNAMIC_CLASS(name)
#define DECLARE_DYNAMIC_CLASS_NO_COPY(name) \ #define wxDECLARE_DYNAMIC_CLASS_NO_COPY(name) \
DECLARE_NO_COPY_CLASS(name) \ wxDECLARE_NO_COPY_CLASS(name); \
DECLARE_DYNAMIC_CLASS(name) wxDECLARE_DYNAMIC_CLASS(name)
#define DECLARE_DYNAMIC_CLASS(name) \ #define wxDECLARE_DYNAMIC_CLASS(name) \
DECLARE_ABSTRACT_CLASS(name) \ wxDECLARE_ABSTRACT_CLASS(name); \
static wxObject* wxCreateObject(); static wxObject* wxCreateObject()
#define DECLARE_CLASS(name) DECLARE_DYNAMIC_CLASS(name) #define wxDECLARE_CLASS(name) \
wxDECLARE_DYNAMIC_CLASS(name)
// common part of the macros below // common part of the macros below
@@ -205,13 +207,13 @@ WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxString& name);
// ----------------------------------- // -----------------------------------
// Single inheritance with one base class // Single inheritance with one base class
#define IMPLEMENT_DYNAMIC_CLASS(name, basename) \ #define wxIMPLEMENT_DYNAMIC_CLASS(name, basename) \
wxIMPLEMENT_CLASS_COMMON1(name, basename, name::wxCreateObject) \ wxIMPLEMENT_CLASS_COMMON1(name, basename, name::wxCreateObject) \
wxObject* name::wxCreateObject() \ wxObject* name::wxCreateObject() \
{ return new name; } { return new name; }
// Multiple inheritance with two base classes // Multiple inheritance with two base classes
#define IMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) \ #define wxIMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) \
wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, \ wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, \
name::wxCreateObject) \ name::wxCreateObject) \
wxObject* name::wxCreateObject() \ wxObject* name::wxCreateObject() \
@@ -222,17 +224,18 @@ WXDLLIMPEXP_BASE wxObject *wxCreateDynamicObject(const wxString& name);
// ----------------------------------- // -----------------------------------
// Single inheritance with one base class // Single inheritance with one base class
#define wxIMPLEMENT_ABSTRACT_CLASS(name, basename) \
#define IMPLEMENT_ABSTRACT_CLASS(name, basename) \
wxIMPLEMENT_CLASS_COMMON1(name, basename, NULL) wxIMPLEMENT_CLASS_COMMON1(name, basename, NULL)
// Multiple inheritance with two base classes // Multiple inheritance with two base classes
#define wxIMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) \
#define IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) \
wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, NULL) wxIMPLEMENT_CLASS_COMMON2(name, basename1, basename2, NULL)
#define IMPLEMENT_CLASS IMPLEMENT_ABSTRACT_CLASS #define wxIMPLEMENT_CLASS(name, basename) \
#define IMPLEMENT_CLASS2 IMPLEMENT_ABSTRACT_CLASS2 wxIMPLEMENT_ABSTRACT_CLASS(name, basename)
#define wxIMPLEMENT_CLASS2(name, basename1, basename2) \
IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2)
#endif // !wxUSE_EXTENDED_RTTI #endif // !wxUSE_EXTENDED_RTTI
@@ -257,7 +260,7 @@ public: \
name##PluginSentinel(); \ name##PluginSentinel(); \
~name##PluginSentinel(); \ ~name##PluginSentinel(); \
}; \ }; \
name##PluginSentinel m_pluginsentinel; name##PluginSentinel m_pluginsentinel
#define _IMPLEMENT_DL_SENTINEL(name) \ #define _IMPLEMENT_DL_SENTINEL(name) \
const wxString name::name##PluginSentinel::sm_className(#name); \ const wxString name::name##PluginSentinel::sm_className(#name); \
@@ -276,35 +279,35 @@ name##PluginSentinel m_pluginsentinel;
#endif // wxUSE_NESTED_CLASSES #endif // wxUSE_NESTED_CLASSES
#define DECLARE_PLUGGABLE_CLASS(name) \ #define wxDECLARE_PLUGGABLE_CLASS(name) \
DECLARE_DYNAMIC_CLASS(name) _DECLARE_DL_SENTINEL(name, WXDLLIMPEXP_CORE) wxDECLARE_DYNAMIC_CLASS(name); _DECLARE_DL_SENTINEL(name, WXDLLIMPEXP_CORE)
#define DECLARE_ABSTRACT_PLUGGABLE_CLASS(name) \ #define wxDECLARE_ABSTRACT_PLUGGABLE_CLASS(name) \
DECLARE_ABSTRACT_CLASS(name) _DECLARE_DL_SENTINEL(name, WXDLLIMPEXP_CORE) wxDECLARE_ABSTRACT_CLASS(name); _DECLARE_DL_SENTINEL(name, WXDLLIMPEXP_CORE)
#define DECLARE_USER_EXPORTED_PLUGGABLE_CLASS(name, usergoo) \ #define wxDECLARE_USER_EXPORTED_PLUGGABLE_CLASS(name, usergoo) \
DECLARE_DYNAMIC_CLASS(name) _DECLARE_DL_SENTINEL(name, usergoo) wxDECLARE_DYNAMIC_CLASS(name); _DECLARE_DL_SENTINEL(name, usergoo)
#define DECLARE_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(name, usergoo) \ #define wxDECLARE_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(name, usergoo) \
DECLARE_ABSTRACT_CLASS(name) _DECLARE_DL_SENTINEL(name, usergoo) wxDECLARE_ABSTRACT_CLASS(name); _DECLARE_DL_SENTINEL(name, usergoo)
#define IMPLEMENT_PLUGGABLE_CLASS(name, basename) \ #define wxIMPLEMENT_PLUGGABLE_CLASS(name, basename) \
IMPLEMENT_DYNAMIC_CLASS(name, basename) _IMPLEMENT_DL_SENTINEL(name) wxIMPLEMENT_DYNAMIC_CLASS(name, basename) _IMPLEMENT_DL_SENTINEL(name)
#define IMPLEMENT_PLUGGABLE_CLASS2(name, basename1, basename2) \ #define wxIMPLEMENT_PLUGGABLE_CLASS2(name, basename1, basename2) \
IMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) _IMPLEMENT_DL_SENTINEL(name) wxIMPLEMENT_DYNAMIC_CLASS2(name, basename1, basename2) _IMPLEMENT_DL_SENTINEL(name)
#define IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(name, basename) \ #define wxIMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(name, basename) \
IMPLEMENT_ABSTRACT_CLASS(name, basename) _IMPLEMENT_DL_SENTINEL(name) wxIMPLEMENT_ABSTRACT_CLASS(name, basename) _IMPLEMENT_DL_SENTINEL(name)
#define IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) \ #define wxIMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) \
IMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) _IMPLEMENT_DL_SENTINEL(name) wxIMPLEMENT_ABSTRACT_CLASS2(name, basename1, basename2) _IMPLEMENT_DL_SENTINEL(name)
#define IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(name, basename) \ #define wxIMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(name, basename) \
IMPLEMENT_PLUGGABLE_CLASS(name, basename) wxIMPLEMENT_PLUGGABLE_CLASS(name, basename)
#define IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS2(name, basename1, basename2) \ #define wxIMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS2(name, basename1, basename2) \
IMPLEMENT_PLUGGABLE_CLASS2(name, basename1, basename2) wxIMPLEMENT_PLUGGABLE_CLASS2(name, basename1, basename2)
#define IMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(name, basename) \ #define wxIMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(name, basename) \
IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(name, basename) wxIMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(name, basename)
#define IMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) \ #define wxIMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) \
IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2) wxIMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(name, basename1, basename2)
#define CLASSINFO(name) (&name::ms_classInfo) #define wxCLASSINFO(name) (&name::ms_classInfo)
#define wxIS_KIND_OF(obj, className) obj->IsKindOf(&className::ms_classInfo) #define wxIS_KIND_OF(obj, className) obj->IsKindOf(&className::ms_classInfo)
@@ -512,7 +515,7 @@ private:
class WXDLLIMPEXP_BASE wxObject class WXDLLIMPEXP_BASE wxObject
{ {
DECLARE_ABSTRACT_CLASS(wxObject) wxDECLARE_ABSTRACT_CLASS(wxObject);
public: public:
wxObject() { m_refData = NULL; } wxObject() { m_refData = NULL; }
@@ -665,4 +668,42 @@ private :
#endif #endif
#endif // wxUSE_DEBUG_NEW_ALWAYS #endif // wxUSE_DEBUG_NEW_ALWAYS
// ----------------------------------------------------------------------------
// Compatibility macro aliases
// ----------------------------------------------------------------------------
// deprecated variants _not_ requiring a semicolon after them and without wx prefix.
// (note that also some wx-prefixed macro do _not_ require a semicolon because
// it's not always possible to force the compire to require it)
#define DECLARE_CLASS_INFO_ITERATORS() wxDECLARE_CLASS_INFO_ITERATORS();
#define DECLARE_ABSTRACT_CLASS(n) wxDECLARE_ABSTRACT_CLASS(n);
#define DECLARE_DYNAMIC_CLASS_NO_ASSIGN(n) wxDECLARE_DYNAMIC_CLASS_NO_ASSIGN(n);
#define DECLARE_DYNAMIC_CLASS_NO_COPY(n) wxDECLARE_DYNAMIC_CLASS_NO_COPY(n);
#define DECLARE_DYNAMIC_CLASS(n) wxDECLARE_DYNAMIC_CLASS(n);
#define DECLARE_CLASS(n) wxDECLARE_CLASS(n);
#define IMPLEMENT_DYNAMIC_CLASS(n,b) wxIMPLEMENT_DYNAMIC_CLASS(n,b)
#define IMPLEMENT_DYNAMIC_CLASS2(n,b1,b2) wxIMPLEMENT_DYNAMIC_CLASS2(n,b1,b2)
#define IMPLEMENT_ABSTRACT_CLASS(n,b) wxIMPLEMENT_ABSTRACT_CLASS(n,b)
#define IMPLEMENT_ABSTRACT_CLASS2(n,b1,b2) wxIMPLEMENT_ABSTRACT_CLASS2(n,b1,b2)
#define IMPLEMENT_CLASS(n,b) wxIMPLEMENT_CLASS(n,b)
#define IMPLEMENT_CLASS2(n,b1,b2) wxIMPLEMENT_CLASS2(n,b1,b2)
#define DECLARE_PLUGGABLE_CLASS(n) wxDECLARE_PLUGGABLE_CLASS(n);
#define DECLARE_ABSTRACT_PLUGGABLE_CLASS(n) wxDECLARE_ABSTRACT_PLUGGABLE_CLASS(n);
#define DECLARE_USER_EXPORTED_PLUGGABLE_CLASS(n,u) wxDECLARE_USER_EXPORTED_PLUGGABLE_CLASS(n,u);
#define DECLARE_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(n,u) wxDECLARE_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(n,u);
#define IMPLEMENT_PLUGGABLE_CLASS(n,b) wxIMPLEMENT_PLUGGABLE_CLASS(n,b)
#define IMPLEMENT_PLUGGABLE_CLASS2(n,b,b2) wxIMPLEMENT_PLUGGABLE_CLASS2(n,b,b2)
#define IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(n,b) wxIMPLEMENT_ABSTRACT_PLUGGABLE_CLASS(n,b)
#define IMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(n,b,b2) wxIMPLEMENT_ABSTRACT_PLUGGABLE_CLASS2(n,b,b2)
#define IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(n,b) wxIMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS(n,b)
#define IMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS2(n,b,b2) wxIMPLEMENT_USER_EXPORTED_PLUGGABLE_CLASS2(n,b,b2)
#define IMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(n,b) wxIMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS(n,b)
#define IMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS2(n,b,b2) wxIMPLEMENT_USER_EXPORTED_ABSTRACT_PLUGGABLE_CLASS2(n,b,b2)
#define CLASSINFO(n) wxCLASSINFO(n)
#endif // _WX_OBJECTH__ #endif // _WX_OBJECTH__

View File

@@ -308,7 +308,7 @@ public:
// Edit the label // Edit the label
// //
wxTextCtrl* EditLabel( long lItem wxTextCtrl* EditLabel( long lItem
,wxClassInfo* pTextControlClass = CLASSINFO(wxTextCtrl) ,wxClassInfo* pTextControlClass = wxCLASSINFO(wxTextCtrl)
); );
// //

View File

@@ -442,7 +442,7 @@ public:
// interface compatibility, only. // interface compatibility, only.
// //
wxTextCtrl* EditLabel( const wxTreeItemId& rItem wxTextCtrl* EditLabel( const wxTreeItemId& rItem
,wxClassInfo* pTextCtrlClass = CLASSINFO(wxTextCtrl) ,wxClassInfo* pTextCtrlClass = wxCLASSINFO(wxTextCtrl)
); );
// //

View File

@@ -217,7 +217,7 @@ class WXDLLIMPEXP_CORE wxListCtrl: public wxControl
void ClearAll(); void ClearAll();
// Edit the label // Edit the label
wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
// End label editing, optionally cancelling the edit // End label editing, optionally cancelling the edit
bool EndEditLabel(bool cancel); bool EndEditLabel(bool cancel);

View File

@@ -215,7 +215,7 @@ public:
bool DeleteAllItems(); bool DeleteAllItems();
// Edit the label (tree must have the focus) // Edit the label (tree must have the focus)
wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
// End label editing, optionally cancelling the edit // End label editing, optionally cancelling the edit
bool EndEditLabel(bool cancel); bool EndEditLabel(bool cancel);

View File

@@ -256,7 +256,7 @@ public:
void ClearAll(); void ClearAll();
// Edit the label // Edit the label
wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxTextCtrl* EditLabel(long item, wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
// End label editing, optionally cancelling the edit // End label editing, optionally cancelling the edit
bool EndEditLabel(bool cancel); bool EndEditLabel(bool cancel);

View File

@@ -297,7 +297,7 @@ public:
// been before. textCtrlClass parameter allows you to create an edit // been before. textCtrlClass parameter allows you to create an edit
// control of arbitrary user-defined class deriving from wxTextCtrl. // control of arbitrary user-defined class deriving from wxTextCtrl.
wxTextCtrl* EditLabel(const wxTreeItemId& item, wxTextCtrl* EditLabel(const wxTreeItemId& item,
wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl));
// returns the same pointer as StartEdit() if the item is being edited, // returns the same pointer as StartEdit() if the item is being edited,
// NULL otherwise (it's assumed that no more than one item may be // NULL otherwise (it's assumed that no more than one item may be
// edited simultaneously) // edited simultaneously)

View File

@@ -141,7 +141,7 @@ public: \
static wxProtoInfo g_proto_##class; static wxProtoInfo g_proto_##class;
#define IMPLEMENT_PROTOCOL(class, name, serv, host) \ #define IMPLEMENT_PROTOCOL(class, name, serv, host) \
wxProtoInfo class::g_proto_##class(name, serv, host, CLASSINFO(class)); \ wxProtoInfo class::g_proto_##class(name, serv, host, wxCLASSINFO(class)); \
bool wxProtocolUse##class = true; bool wxProtocolUse##class = true;
#define USE_PROTOCOL(class) \ #define USE_PROTOCOL(class) \

View File

@@ -22,7 +22,7 @@
#include "wx/control.h" #include "wx/control.h"
#include "wx/treebase.h" #include "wx/treebase.h"
#include "wx/textctrl.h" // wxTextCtrl::ms_classinfo used through CLASSINFO macro #include "wx/textctrl.h" // wxTextCtrl::ms_classinfo used through wxCLASSINFO macro
class WXDLLIMPEXP_FWD_CORE wxImageList; class WXDLLIMPEXP_FWD_CORE wxImageList;
@@ -353,7 +353,7 @@ public:
// been before. textCtrlClass parameter allows you to create an edit // been before. textCtrlClass parameter allows you to create an edit
// control of arbitrary user-defined class deriving from wxTextCtrl. // control of arbitrary user-defined class deriving from wxTextCtrl.
virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, virtual wxTextCtrl *EditLabel(const wxTreeItemId& item,
wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)) = 0; wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl)) = 0;
// returns the same pointer as StartEdit() if the item is being edited, // returns the same pointer as StartEdit() if the item is being edited,
// NULL otherwise (it's assumed that no more than one item may be // NULL otherwise (it's assumed that no more than one item may be
// edited simultaneously) // edited simultaneously)

View File

@@ -43,13 +43,13 @@ public:
A name that should be unique for a given view. A name that should be unique for a given view.
@param docClassInfo @param docClassInfo
A pointer to the run-time document class information as returned by A pointer to the run-time document class information as returned by
the CLASSINFO() macro, e.g. CLASSINFO(MyDocumentClass). If this is the wxCLASSINFO() macro, e.g. wxCLASSINFO(MyDocumentClass). If this is
not supplied, you will need to derive a new wxDocTemplate class and not supplied, you will need to derive a new wxDocTemplate class and
override the CreateDocument() member to return a new document override the CreateDocument() member to return a new document
instance on demand. instance on demand.
@param viewClassInfo @param viewClassInfo
A pointer to the run-time view class information as returned by the A pointer to the run-time view class information as returned by the
CLASSINFO() macro, e.g. CLASSINFO(MyViewClass). If this is not wxCLASSINFO() macro, e.g. wxCLASSINFO(MyViewClass). If this is not
supplied, you will need to derive a new wxDocTemplate class and supplied, you will need to derive a new wxDocTemplate class and
override the CreateView() member to return a new view instance on override the CreateView() member to return a new view instance on
demand. demand.

View File

@@ -245,7 +245,7 @@ public:
will be sent which can be vetoed as well. will be sent which can be vetoed as well.
*/ */
wxTextCtrl* EditLabel(long item, wxTextCtrl* EditLabel(long item,
wxClassInfo* textControlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textControlClass = wxCLASSINFO(wxTextCtrl));
/** /**
Finish editing the label. Finish editing the label.

View File

@@ -15,7 +15,7 @@
To define a new kind of module, derive a class from wxModule, override the To define a new kind of module, derive a class from wxModule, override the
wxModule::OnInit and wxModule::OnExit functions, and add the wxModule::OnInit and wxModule::OnExit functions, and add the
DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS to header and implementation wxDECLARE_DYNAMIC_CLASS and wxIMPLEMENT_DYNAMIC_CLASS to header and implementation
files (which can be the same file). files (which can be the same file).
On initialization, wxWidgets will find all classes derived from wxModule, create On initialization, wxWidgets will find all classes derived from wxModule, create
an instance of each, and call each wxModule::OnInit function. On exit, wxWidgets an instance of each, and call each wxModule::OnInit function. On exit, wxWidgets
@@ -37,24 +37,24 @@
virtual void OnExit() { wxDDECleanUp(); }; virtual void OnExit() { wxDDECleanUp(); };
private: private:
DECLARE_DYNAMIC_CLASS(wxDDEModule) wxDECLARE_DYNAMIC_CLASS(wxDDEModule);
}; };
IMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule) wxIMPLEMENT_DYNAMIC_CLASS(wxDDEModule, wxModule);
// Another module which uses DDE in its OnInit() // Another module which uses DDE in its OnInit()
class MyModule: public wxModule class MyModule: public wxModule
{ {
public: public:
MyModule() { AddDependency(CLASSINFO(wxDDEModule)); } MyModule() { AddDependency(wxCLASSINFO(wxDDEModule)); }
virtual bool OnInit() { ... code using DDE ... } virtual bool OnInit() { ... code using DDE ... }
virtual void OnExit() { ... } virtual void OnExit() { ... }
private: private:
DECLARE_DYNAMIC_CLASS(MyModule) wxDECLARE_DYNAMIC_CLASS(MyModule);
}; };
IMPLEMENT_DYNAMIC_CLASS(MyModule, wxModule) wxIMPLEMENT_DYNAMIC_CLASS(MyModule, wxModule);
// Another module which uses DDE in its OnInit() // Another module which uses DDE in its OnInit()
// but uses a named dependency // but uses a named dependency
@@ -66,10 +66,10 @@
virtual void OnExit() { ... } virtual void OnExit() { ... }
private: private:
DECLARE_DYNAMIC_CLASS(MyModule2) wxDECLARE_DYNAMIC_CLASS(MyModule2)
}; };
IMPLEMENT_DYNAMIC_CLASS(MyModule2, wxModule) wxIMPLEMENT_DYNAMIC_CLASS(MyModule2, wxModule)
@endcode @endcode
@library{wxbase} @library{wxbase}
@@ -104,7 +104,7 @@ protected:
/** /**
Call this function from the constructor of the derived class. Call this function from the constructor of the derived class.
@a dep must be the CLASSINFO() of a wxModule-derived class and the @a dep must be the wxCLASSINFO() of a wxModule-derived class and the
corresponding module will be loaded before and unloaded after this module. corresponding module will be loaded before and unloaded after this module.
@param dep @param dep
@@ -119,7 +119,7 @@ protected:
the class info. the class info.
This is useful when a module is declared entirely in a source file and This is useful when a module is declared entirely in a source file and
there is no header for the declaration of the module needed by CLASSINFO(), there is no header for the declaration of the module needed by wxCLASSINFO(),
however errors are not detected until run-time, instead of compile-time, then. however errors are not detected until run-time, instead of compile-time, then.
Note that circular dependencies are detected and result in a fatal error. Note that circular dependencies are detected and result in a fatal error.

View File

@@ -263,16 +263,16 @@ public:
wxActiveXContainer* m_pAX; wxActiveXContainer* m_pAX;
wxAutomationObject m_PDF; wxAutomationObject m_PDF;
DECLARE_DYNAMIC_CLASS(wxPDFMediaBackend) wxDECLARE_DYNAMIC_CLASS(wxPDFMediaBackend)
}; };
IMPLEMENT_DYNAMIC_CLASS(wxPDFMediaBackend, wxMediaBackend); wxIMPLEMENT_DYNAMIC_CLASS(wxPDFMediaBackend, wxMediaBackend);
Put this in one of your existant source files and then create a wxMediaCtrl with
//[this] is the parent window, "myfile.pdf" is the PDF file to open // Put this in one of your existant source files and then create a wxMediaCtrl with
wxMediaCtrl* mymediactrl = new wxMediaCtrl(this, "myfile.pdf", wxID_ANY, wxMediaCtrl* mymediactrl = new wxMediaCtrl(this, "myfile.pdf", wxID_ANY,
wxDefaultPosition, wxSize(300,300), wxDefaultPosition, wxSize(300,300),
0, "wxPDFMediaBackend"); 0, "wxPDFMediaBackend");
// [this] is the parent window, "myfile.pdf" is the PDF file to open
@endcode @endcode

View File

@@ -42,7 +42,7 @@
virtual wxObjectRefData *CreateRefData() const; virtual wxObjectRefData *CreateRefData() const;
virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const; virtual wxObjectRefData *CloneRefData(const wxObjectRefData *data) const;
DECLARE_DYNAMIC_CLASS(MyCar) wxDECLARE_DYNAMIC_CLASS(MyCar)
}; };
@@ -83,7 +83,7 @@
#define M_CARDATA ((MyCarRefData *)m_refData) #define M_CARDATA ((MyCarRefData *)m_refData)
IMPLEMENT_DYNAMIC_CLASS(MyCar,wxObject) wxIMPLEMENT_DYNAMIC_CLASS(MyCar, wxObject);
MyCar::MyCar( int price ) MyCar::MyCar( int price )
{ {
@@ -275,12 +275,12 @@ public:
Example: Example:
@code @code
bool tmp = obj->IsKindOf(CLASSINFO(wxFrame)); bool tmp = obj->IsKindOf(wxCLASSINFO(wxFrame));
@endcode @endcode
@param info @param info
A pointer to a class information object, which may be obtained A pointer to a class information object, which may be obtained
by using the ::CLASSINFO macro. by using the ::wxCLASSINFO macro.
@return @true if the class represented by info is the same class as this @return @true if the class represented by info is the same class as this
one or is derived from it. one or is derived from it.
@@ -412,8 +412,8 @@ protected:
This class stores meta-information about classes. This class stores meta-information about classes.
Instances of this class are not generally defined directly by an application, Instances of this class are not generally defined directly by an application,
but indirectly through use of macros such as ::DECLARE_DYNAMIC_CLASS and but indirectly through use of macros such as ::wxDECLARE_DYNAMIC_CLASS and
::IMPLEMENT_DYNAMIC_CLASS. ::wxIMPLEMENT_DYNAMIC_CLASS.
@library{wxbase} @library{wxbase}
@category{rtti} @category{rtti}
@@ -655,21 +655,12 @@ public:
@header{wx/object.h} @header{wx/object.h}
*/ */
#define CLASSINFO( className ) #define wxCLASSINFO( className )
/**
Used inside a class declaration to declare that the class should be made
known to the class hierarchy, but objects of this class cannot be created
dynamically. The same as DECLARE_ABSTRACT_CLASS().
@header{wx/object.h}
*/
#define DECLARE_CLASS( className )
/** /**
Used inside a class declaration to declare that the class should be Used inside a class declaration to declare that the class should be
made known to the class hierarchy, but objects of this class cannot be created made known to the class hierarchy, but objects of this class cannot be created
dynamically. The same as DECLARE_CLASS(). dynamically.
@header{wx/object.h} @header{wx/object.h}
@@ -678,7 +669,7 @@ public:
@code @code
class wxCommand: public wxObject class wxCommand: public wxObject
{ {
DECLARE_ABSTRACT_CLASS(wxCommand) wxDECLARE_ABSTRACT_CLASS(wxCommand);
private: private:
... ...
@@ -687,14 +678,14 @@ public:
}; };
@endcode @endcode
*/ */
#define DECLARE_ABSTRACT_CLASS( className ) #define wxDECLARE_ABSTRACT_CLASS( className )
/** /**
Used inside a class declaration to make the class known to wxWidgets RTTI Used inside a class declaration to make the class known to wxWidgets RTTI
system and also declare that the objects of this class should be system and also declare that the objects of this class should be
dynamically creatable from run-time type information. Notice that this dynamically creatable from run-time type information. Notice that this
implies that the class should have a default constructor, if this is not implies that the class should have a default constructor, if this is not
the case consider using DECLARE_CLASS(). the case consider using wxDECLARE_ABSTRACT_CLASS().
@header{wx/object.h} @header{wx/object.h}
@@ -703,7 +694,7 @@ public:
@code @code
class wxFrame: public wxWindow class wxFrame: public wxWindow
{ {
DECLARE_DYNAMIC_CLASS(wxFrame) wxDECLARE_DYNAMIC_CLASS(wxFrame);
private: private:
const wxString& frameTitle; const wxString& frameTitle;
@@ -712,35 +703,27 @@ public:
}; };
@endcode @endcode
*/ */
#define DECLARE_DYNAMIC_CLASS( className ) #define wxDECLARE_DYNAMIC_CLASS( className )
/** /**
Used in a C++ implementation file to complete the declaration of a class Used inside a class declaration to declare that the class should be made
that has run-time type information. The same as IMPLEMENT_ABSTRACT_CLASS(). known to the class hierarchy, but objects of this class cannot be created
dynamically. The same as wxDECLARE_DYNAMIC_CLASS().
@header{wx/object.h} @header{wx/object.h}
*/ */
#define IMPLEMENT_CLASS( className, baseClassName ) #define wxDECLARE_CLASS( className )
/** /**
Used in a C++ implementation file to complete the declaration of a class Used in a C++ implementation file to complete the declaration of a class
that has run-time type information and two base classes. The same as that has run-time type information.
IMPLEMENT_ABSTRACT_CLASS2().
@header{wx/object.h}
*/
#define IMPLEMENT_CLASS2( className, baseClassName1, baseClassName2 )
/**
Used in a C++ implementation file to complete the declaration of a class
that has run-time type information. The same as IMPLEMENT_CLASS().
@header{wx/object.h} @header{wx/object.h}
Example: Example:
@code @code
IMPLEMENT_ABSTRACT_CLASS(wxCommand, wxObject) wxIMPLEMENT_ABSTRACT_CLASS(wxCommand, wxObject);
wxCommand::wxCommand(void) wxCommand::wxCommand(void)
{ {
@@ -748,16 +731,15 @@ public:
} }
@endcode @endcode
*/ */
#define IMPLEMENT_ABSTRACT_CLASS( className, baseClassName ) #define wxIMPLEMENT_ABSTRACT_CLASS( className, baseClassName )
/** /**
Used in a C++ implementation file to complete the declaration of a class Used in a C++ implementation file to complete the declaration of a class
that has run-time type information and two base classes. The same as that has run-time type information and two base classes.
IMPLEMENT_CLASS2().
@header{wx/object.h} @header{wx/object.h}
*/ */
#define IMPLEMENT_ABSTRACT_CLASS2( className, baseClassName1, baseClassName2 ) #define wxIMPLEMENT_ABSTRACT_CLASS2( className, baseClassName1, baseClassName2 )
/** /**
Used in a C++ implementation file to complete the declaration of a class Used in a C++ implementation file to complete the declaration of a class
@@ -769,7 +751,7 @@ public:
Example: Example:
@code @code
IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow) wxIMPLEMENT_DYNAMIC_CLASS(wxFrame, wxWindow);
wxFrame::wxFrame(void) wxFrame::wxFrame(void)
{ {
@@ -777,7 +759,7 @@ public:
} }
@endcode @endcode
*/ */
#define IMPLEMENT_DYNAMIC_CLASS( className, baseClassName ) #define wxIMPLEMENT_DYNAMIC_CLASS( className, baseClassName )
/** /**
Used in a C++ implementation file to complete the declaration of a class Used in a C++ implementation file to complete the declaration of a class
@@ -786,7 +768,25 @@ public:
@header{wx/object.h} @header{wx/object.h}
*/ */
#define IMPLEMENT_DYNAMIC_CLASS2( className, baseClassName1, baseClassName2 ) #define wxIMPLEMENT_DYNAMIC_CLASS2( className, baseClassName1, baseClassName2 )
/**
Used in a C++ implementation file to complete the declaration of a class
that has run-time type information, and whose instances can be created
dynamically. The same as wxIMPLEMENT_DYNAMIC_CLASS().
@header{wx/object.h}
*/
#define wxIMPLEMENT_CLASS( className, baseClassName )
/**
Used in a C++ implementation file to complete the declaration of a class
that has run-time type information and two base classes, and whose instances
can be created dynamically. The same as wxIMPLEMENT_DYNAMIC_CLASS2().
@header{wx/object.h}
*/
#define wxIMPLEMENT_CLASS2( className, baseClassName1, baseClassName2 )
/** /**
Same as @c const_cast<T>(x) if the compiler supports const cast or @c (T)x for Same as @c const_cast<T>(x) if the compiler supports const cast or @c (T)x for

View File

@@ -184,7 +184,8 @@ public:
class wxSampleMultiButtonEditor : public wxPGTextCtrlEditor class wxSampleMultiButtonEditor : public wxPGTextCtrlEditor
{ {
DECLARE_DYNAMIC_CLASS(wxSampleMultiButtonEditor) wxDECLARE_DYNAMIC_CLASS(wxSampleMultiButtonEditor);
public: public:
wxSampleMultiButtonEditor() {} wxSampleMultiButtonEditor() {}
virtual ~wxSampleMultiButtonEditor() {} virtual ~wxSampleMultiButtonEditor() {}
@@ -201,7 +202,7 @@ public:
wxEvent& event ) const; wxEvent& event ) const;
}; };
IMPLEMENT_DYNAMIC_CLASS(wxSampleMultiButtonEditor, wxPGTextCtrlEditor) wxIMPLEMENT_DYNAMIC_CLASS(wxSampleMultiButtonEditor, wxPGTextCtrlEditor);
wxPGWindowList wxSampleMultiButtonEditor::CreateControls( wxPropertyGrid* propGrid, wxPGWindowList wxSampleMultiButtonEditor::CreateControls( wxPropertyGrid* propGrid,
wxPGProperty* property, wxPGProperty* property,

View File

@@ -621,7 +621,7 @@ wxPG_PROP_BEING_DELETED = 0x00200000
@endcode @endcode
Since wxPGProperty derives from wxObject, you can use standard Since wxPGProperty derives from wxObject, you can use standard
DECLARE_DYNAMIC_CLASS and IMPLEMENT_DYNAMIC_CLASS macros. From the wxDECLARE_DYNAMIC_CLASS and wxIMPLEMENT_DYNAMIC_CLASS macros. From the
above example they were omitted for sake of simplicity, and besides, above example they were omitted for sake of simplicity, and besides,
they are only really needed if you need to use wxRTTI with your they are only really needed if you need to use wxRTTI with your
property class. property class.

View File

@@ -307,7 +307,7 @@ public:
@see EndEditLabel(), wxTreeEvent @see EndEditLabel(), wxTreeEvent
*/ */
virtual wxTextCtrl *EditLabel(const wxTreeItemId& item, virtual wxTextCtrl *EditLabel(const wxTreeItemId& item,
wxClassInfo* textCtrlClass = CLASSINFO(wxTextCtrl)); wxClassInfo* textCtrlClass = wxCLASSINFO(wxTextCtrl));
/** /**
Ends label editing. If @a cancelEdit is @true, the edit will be Ends label editing. If @a cancelEdit is @true, the edit will be
@@ -751,8 +751,8 @@ public:
zero or positive value if the first item is less than, equal to or zero or positive value if the first item is less than, equal to or
greater than the second one. greater than the second one.
Please note that you @b must use wxRTTI macros DECLARE_DYNAMIC_CLASS() Please note that you @b must use wxRTTI macros wxDECLARE_DYNAMIC_CLASS()
and IMPLEMENT_DYNAMIC_CLASS() if you override this function because and wxIMPLEMENT_DYNAMIC_CLASS() if you override this function because
otherwise the base class considers that it is not overridden and uses otherwise the base class considers that it is not overridden and uses
the default comparison, i.e. sorts the items alphabetically, which the default comparison, i.e. sorts the items alphabetically, which
allows it optimize away the calls to the virtual function completely. allows it optimize away the calls to the virtual function completely.