* Do not use class posing to handle target/action.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28005 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott
2004-06-24 15:14:33 +00:00
parent 7a5e53abb3
commit feb8276801
2 changed files with 22 additions and 20 deletions

View File

@@ -4,16 +4,17 @@
// Author: David Elliott // Author: David Elliott
// Modified by: // Modified by:
// Created: 2002/12/09 // Created: 2002/12/09
// RCS-ID: $Id: // RCS-ID: $Id$
// Copyright: (c) 2002 David Elliott // Copyright: (c) 2002-2004 David Elliott
// Licence: wxWindows licence // Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
#ifndef __WX_COCOA_NSBUTTON_H__ #ifndef _WX_COCOA_NSBUTTON_H__
#define __WX_COCOA_NSBUTTON_H__ #define _WX_COCOA_NSBUTTON_H__
#include "wx/hashmap.h" #include "wx/hashmap.h"
#include "wx/cocoa/ObjcAssociate.h" #include "wx/cocoa/ObjcAssociate.h"
#include "wx/cocoa/ObjcRef.h"
WX_DECLARE_OBJC_HASHMAP(NSButton); WX_DECLARE_OBJC_HASHMAP(NSButton);
@@ -28,8 +29,9 @@ public:
sm_cocoaHash.erase(cocoaNSButton); sm_cocoaHash.erase(cocoaNSButton);
} }
public:
virtual void Cocoa_wxNSButtonAction(void) = 0; virtual void Cocoa_wxNSButtonAction(void) = 0;
protected:
static const wxObjcAutoRefFromAlloc<struct objc_object*> sm_cocoaTarget;
}; };
#endif // _WX_COCOA_NSBUTTON_H_ #endif // _WX_COCOA_NSBUTTON_H__

View File

@@ -4,8 +4,8 @@
// Author: David Elliott // Author: David Elliott
// Modified by: // Modified by:
// Created: 2003/01/31 // Created: 2003/01/31
// RCS-ID: $Id: // RCS-ID: $Id$
// Copyright: (c) 2003 David Elliott // Copyright: (c) 2003-2004 David Elliott
// Licence: wxWidgets licence // Licence: wxWidgets licence
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@@ -22,8 +22,6 @@
#include "wx/log.h" #include "wx/log.h"
#endif // WX_PRECOMP #endif // WX_PRECOMP
#include "wx/cocoa/ObjcPose.h"
#include "wx/cocoa/NSButton.h" #include "wx/cocoa/NSButton.h"
#import <AppKit/NSButton.h> #import <AppKit/NSButton.h>
@@ -33,34 +31,36 @@
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSButton) WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSButton)
// ============================================================================ // ============================================================================
// @class wxPoserNSButton // @class wxNSButtonTarget
// ============================================================================ // ============================================================================
@interface wxPoserNSButton : NSButton @interface wxNSButtonTarget : NSObject
{ {
} }
- (void)wxNSButtonAction: (id)sender; - (void)wxNSButtonAction: (id)sender;
@end // wxPoserNSButton @end // wxNSButtonTarget
WX_IMPLEMENT_POSER(wxPoserNSButton); @implementation wxNSButtonTarget : NSObject
@implementation wxPoserNSButton : NSButton
- (void)wxNSButtonAction: (id)sender - (void)wxNSButtonAction: (id)sender
{ {
wxASSERT_MSG((id)self==sender,wxT("Received wxNSButtonAction from another object")); wxCocoaNSButton *button = wxCocoaNSButton::GetFromCocoa(sender);
wxCocoaNSButton *button = wxCocoaNSButton::GetFromCocoa(self);
wxCHECK_RET(button,wxT("wxNSButtonAction received without associated wx object")); wxCHECK_RET(button,wxT("wxNSButtonAction received without associated wx object"));
button->Cocoa_wxNSButtonAction(); button->Cocoa_wxNSButtonAction();
} }
@end // implementation wxPoserNSButton @end // implementation wxNSButtonTarget
// ============================================================================
// class wxCocoaNSButton
// ============================================================================
const wxObjcAutoRefFromAlloc<struct objc_object*> wxCocoaNSButton::sm_cocoaTarget = [[wxNSButtonTarget alloc] init];
void wxCocoaNSButton::AssociateNSButton(WX_NSButton cocoaNSButton) void wxCocoaNSButton::AssociateNSButton(WX_NSButton cocoaNSButton)
{ {
if(cocoaNSButton) if(cocoaNSButton)
{ {
sm_cocoaHash.insert(wxCocoaNSButtonHash::value_type(cocoaNSButton,this)); sm_cocoaHash.insert(wxCocoaNSButtonHash::value_type(cocoaNSButton,this));
[cocoaNSButton setTarget: cocoaNSButton]; [cocoaNSButton setTarget: sm_cocoaTarget];
[cocoaNSButton setAction: @selector(wxNSButtonAction:)]; [cocoaNSButton setAction: @selector(wxNSButtonAction:)];
} }
} }