From e668651137922bee36b5773d638aa696e78854d1 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Sat, 19 Apr 2003 17:51:50 +0000 Subject: [PATCH] Separated the Objective-C to C++ association code into the new header ObjcAssociate.h. That leaves ObjcPose.h for its original purpose and avoids including it from any header files. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20286 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- distrib/msw/tmake/filelist.txt | 1 + include/wx/cocoa/NSBox.h | 2 +- include/wx/cocoa/NSButton.h | 2 +- include/wx/cocoa/NSControl.h | 2 +- include/wx/cocoa/NSMenu.h | 2 +- include/wx/cocoa/NSPanel.h | 2 +- include/wx/cocoa/NSTextField.h | 2 +- include/wx/cocoa/NSView.h | 2 +- include/wx/cocoa/NSWindow.h | 2 +- include/wx/cocoa/ObjcAssociate.h | 79 ++++++++++++++++++++++++++++++++ include/wx/cocoa/ObjcPose.h | 65 +------------------------- 11 files changed, 90 insertions(+), 71 deletions(-) create mode 100644 include/wx/cocoa/ObjcAssociate.h diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index 0e432db71c..e11f3d5da5 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -1197,6 +1197,7 @@ NSPanel.h CocoaH NSTextField.h CocoaH NSView.h CocoaH NSWindow.h CocoaH +ObjcAssociate.h CocoaH ObjcPose.h CocoaH # wx implementations app.h CocoaH diff --git a/include/wx/cocoa/NSBox.h b/include/wx/cocoa/NSBox.h index a3425579d5..e0271570b2 100644 --- a/include/wx/cocoa/NSBox.h +++ b/include/wx/cocoa/NSBox.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSBOX_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSBox); class wxCocoaNSBox diff --git a/include/wx/cocoa/NSButton.h b/include/wx/cocoa/NSButton.h index a6f9b2f57f..7e8f8add03 100644 --- a/include/wx/cocoa/NSButton.h +++ b/include/wx/cocoa/NSButton.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSBUTTON_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSButton); diff --git a/include/wx/cocoa/NSControl.h b/include/wx/cocoa/NSControl.h index b821ca85ba..36233401c2 100644 --- a/include/wx/cocoa/NSControl.h +++ b/include/wx/cocoa/NSControl.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSCONTROL_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSControl); class wxCocoaNSControl diff --git a/include/wx/cocoa/NSMenu.h b/include/wx/cocoa/NSMenu.h index 2b43c336d2..4e9043f61b 100644 --- a/include/wx/cocoa/NSMenu.h +++ b/include/wx/cocoa/NSMenu.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSMENU_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSMenu); diff --git a/include/wx/cocoa/NSPanel.h b/include/wx/cocoa/NSPanel.h index 94940efc02..2626566d12 100644 --- a/include/wx/cocoa/NSPanel.h +++ b/include/wx/cocoa/NSPanel.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSPANEL_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSPanel); diff --git a/include/wx/cocoa/NSTextField.h b/include/wx/cocoa/NSTextField.h index 87e04ba8fd..10b8244940 100644 --- a/include/wx/cocoa/NSTextField.h +++ b/include/wx/cocoa/NSTextField.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSTEXTFIELD_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSTextField); class wxCocoaNSTextField diff --git a/include/wx/cocoa/NSView.h b/include/wx/cocoa/NSView.h index db6eb26c38..c6e0493916 100644 --- a/include/wx/cocoa/NSView.h +++ b/include/wx/cocoa/NSView.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSVIEW_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" typedef struct _NSRect NSRect; diff --git a/include/wx/cocoa/NSWindow.h b/include/wx/cocoa/NSWindow.h index c8ca32b1ae..15a0ac7996 100644 --- a/include/wx/cocoa/NSWindow.h +++ b/include/wx/cocoa/NSWindow.h @@ -13,7 +13,7 @@ #define __WX_COCOA_NSWINDOW_H__ #include "wx/hashmap.h" -#include "wx/cocoa/ObjcPose.h" +#include "wx/cocoa/ObjcAssociate.h" WX_DECLARE_OBJC_HASHMAP(NSWindow); diff --git a/include/wx/cocoa/ObjcAssociate.h b/include/wx/cocoa/ObjcAssociate.h new file mode 100644 index 0000000000..4a460143e0 --- /dev/null +++ b/include/wx/cocoa/ObjcAssociate.h @@ -0,0 +1,79 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/cocoa/ObjcAssociate.h +// Purpose: Associates an Objective-C class with a C++ class +// Author: David Elliott +// Modified by: +// Created: 2002/12/03 +// RCS-ID: $Id: +// Copyright: (c) 2002 David Elliott +// Licence: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +#ifndef __WX_COCOA_OBJC_ASSOCIATE_H__ +#define __WX_COCOA_OBJC_ASSOCIATE_H__ + +/*------------------------------------------------------------------------- +Basic hashmap stuff, used by everything +-------------------------------------------------------------------------*/ +#define WX_DECLARE_OBJC_HASHMAP(ObjcClass) \ +class wxCocoa##ObjcClass; \ +WX_DECLARE_HASH_MAP(WX_##ObjcClass,wxCocoa##ObjcClass*,wxPointerHash,wxPointerEqual,wxCocoa##ObjcClass##Hash) + +#define WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \ +public: \ + static inline wxCocoa##ObjcClass* GetFromCocoa(WX_##ObjcClass cocoaObjcClass) \ + { \ + wxCocoa##ObjcClass##Hash::iterator iter = sm_cocoaHash.find(cocoaObjcClass); \ + if(iter!=sm_cocoaHash.end()) \ + { \ + return iter->second; \ + } \ + return NULL; \ + } \ +protected: \ + static wxCocoa##ObjcClass##Hash sm_cocoaHash; + +#define WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(ObjcClass) \ +wxCocoa##ObjcClass##Hash wxCocoa##ObjcClass::sm_cocoaHash; + + +/*------------------------------------------------------------------------- +The entire interface, including some boilerplate stuff +-------------------------------------------------------------------------*/ +#define WX_DECLARE_OBJC_INTERFACE(ObjcClass) \ +WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \ +public: \ + inline void Associate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ + { \ + sm_cocoaHash.insert(wxCocoa##ObjcClass##Hash::value_type(cocoaObjcClass,this)); \ + } \ + inline void Disassociate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ + { \ + sm_cocoaHash.erase(cocoaObjcClass); \ + } + +#define WX_IMPLEMENT_OBJC_INTERFACE(ObjcClass) \ +WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(ObjcClass) + +/*------------------------------------------------------------------------- +Stuff to be used by the wxWindows class (not the Cocoa interface) +-------------------------------------------------------------------------*/ +#define WX_DECLARE_COCOA_OWNER(ObjcClass,ObjcBase,ObjcRoot) \ +public: \ + inline WX_##ObjcClass Get##ObjcClass() { return (WX_##ObjcClass)m_cocoa##ObjcRoot; } \ + inline const WX_##ObjcClass Get##ObjcClass() const { return (WX_##ObjcClass)m_cocoa##ObjcRoot; } \ +protected: \ + void Set##ObjcClass(WX_##ObjcClass cocoaObjcClass); + +#define WX_IMPLEMENT_COCOA_OWNER(wxClass,ObjcClass,ObjcBase,ObjcRoot) \ +void wxClass::Set##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ +{ \ + if(m_cocoa##ObjcRoot) \ + Disassociate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ + Set##ObjcBase(cocoaObjcClass); \ + if(m_cocoa##ObjcRoot) \ + Associate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ +} + +#endif // __WX_COCOA_OBJC_ASSOCIATE_H__ + diff --git a/include/wx/cocoa/ObjcPose.h b/include/wx/cocoa/ObjcPose.h index 72ee4903f1..b5e53c0ab6 100644 --- a/include/wx/cocoa/ObjcPose.h +++ b/include/wx/cocoa/ObjcPose.h @@ -54,70 +54,9 @@ public: #define WX_IMPLEMENT_POSER(poser) \ wxDummyForPoseAsInitializer wxDummyPoseAsInitializerFor##poser(new wxPoseAsInitializer([poser class])) +#else // __OBJC__ +#warning "Objective-C++ Only!" #endif // __OBJC__ -/*------------------------------------------------------------------------- -Basic hashmap stuff, used by everything --------------------------------------------------------------------------*/ -#define WX_DECLARE_OBJC_HASHMAP(ObjcClass) \ -class wxCocoa##ObjcClass; \ -WX_DECLARE_HASH_MAP(WX_##ObjcClass,wxCocoa##ObjcClass*,wxPointerHash,wxPointerEqual,wxCocoa##ObjcClass##Hash) - -#define WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \ -public: \ - static inline wxCocoa##ObjcClass* GetFromCocoa(WX_##ObjcClass cocoaObjcClass) \ - { \ - wxCocoa##ObjcClass##Hash::iterator iter = sm_cocoaHash.find(cocoaObjcClass); \ - if(iter!=sm_cocoaHash.end()) \ - { \ - return iter->second; \ - } \ - return NULL; \ - } \ -protected: \ - static wxCocoa##ObjcClass##Hash sm_cocoaHash; - -#define WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(ObjcClass) \ -wxCocoa##ObjcClass##Hash wxCocoa##ObjcClass::sm_cocoaHash; - - -/*------------------------------------------------------------------------- -The entire interface, including some boilerplate stuff --------------------------------------------------------------------------*/ -#define WX_DECLARE_OBJC_INTERFACE(ObjcClass) \ -WX_DECLARE_OBJC_INTERFACE_HASHMAP(ObjcClass) \ -public: \ - inline void Associate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ - { \ - sm_cocoaHash.insert(wxCocoa##ObjcClass##Hash::value_type(cocoaObjcClass,this)); \ - } \ - inline void Disassociate##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ - { \ - sm_cocoaHash.erase(cocoaObjcClass); \ - } - -#define WX_IMPLEMENT_OBJC_INTERFACE(ObjcClass) \ -WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(ObjcClass) - -/*------------------------------------------------------------------------- -Stuff to be used by the wxWindows class (not the Cocoa interface) --------------------------------------------------------------------------*/ -#define WX_DECLARE_COCOA_OWNER(ObjcClass,ObjcBase,ObjcRoot) \ -public: \ - inline WX_##ObjcClass Get##ObjcClass() { return (WX_##ObjcClass)m_cocoa##ObjcRoot; } \ - inline const WX_##ObjcClass Get##ObjcClass() const { return (WX_##ObjcClass)m_cocoa##ObjcRoot; } \ -protected: \ - void Set##ObjcClass(WX_##ObjcClass cocoaObjcClass); - -#define WX_IMPLEMENT_COCOA_OWNER(wxClass,ObjcClass,ObjcBase,ObjcRoot) \ -void wxClass::Set##ObjcClass(WX_##ObjcClass cocoaObjcClass) \ -{ \ - if(m_cocoa##ObjcRoot) \ - Disassociate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ - Set##ObjcBase(cocoaObjcClass); \ - if(m_cocoa##ObjcRoot) \ - Associate##ObjcClass((WX_##ObjcClass)m_cocoa##ObjcRoot); \ -} - #endif // __WX_COCOA_PRIVATE_POSER_H__ -- 2.45.2