Implement wxCocoa wxRadioBox event.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott
2007-07-19 18:52:12 +00:00
parent 18359b1945
commit 259502c61d
2 changed files with 41 additions and 5 deletions

View File

@@ -22,6 +22,8 @@ class WXDLLEXPORT wxRadioBox: public wxControl, public wxRadioBoxBase// , protec
{
DECLARE_DYNAMIC_CLASS(wxRadioBox)
DECLARE_EVENT_TABLE()
// NOTE: We explicitly skip NSControl because our primary cocoa view is
// the NSBox but we want to receive action messages from the NSMatrix.
WX_DECLARE_COCOA_OWNER(NSBox,NSView,NSView)
// ------------------------------------------------------------------------
// initialization
@@ -93,6 +95,7 @@ public:
protected:
// Static boxes cannot be enabled/disabled
virtual void CocoaSetEnabled(bool enable) { }
virtual void CocoaTarget_action(void);
// ------------------------------------------------------------------------
// Implementation
// ------------------------------------------------------------------------
@@ -107,7 +110,12 @@ public:
virtual void SetString(unsigned int n, const wxString& label);
// change the individual radio button state
protected:
// We don't want the typical wxCocoaNSBox behavior because our real
// implementation is by using an NSMatrix as the NSBox's contentView.
WX_NSMatrix GetNSMatrix() const;
void AssociateNSBox(WX_NSBox theBox);
void DisassociateNSBox(WX_NSBox theBox);
virtual wxSize DoGetBestSize() const;
int GetRowForIndex(int n) const

View File

@@ -32,7 +32,23 @@
IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
END_EVENT_TABLE()
// WX_IMPLEMENT_COCOA_OWNER(wxRadioBox,NSTextField,NSControl,NSView)
void wxRadioBox::AssociateNSBox(WX_NSBox cocoaObjcClass)
{
NSMatrix *radioBox = [(WX_NSBox)cocoaObjcClass contentView];
// Associate the NSMatrix (the NSBox's contentView) with the wxCocoaNSControl MI base class.
AssociateNSControl(radioBox);
// Set the target/action.. we don't really need to unset these
[radioBox setTarget:wxCocoaNSControl::sm_cocoaTarget];
[radioBox setAction:@selector(wxNSControlAction:)];
}
void wxRadioBox::DisassociateNSBox(WX_NSBox cocoaObjcClass)
{
DisassociateNSControl([(WX_NSBox)cocoaObjcClass contentView]);
}
WX_IMPLEMENT_COCOA_OWNER(wxRadioBox,NSBox,NSView,NSView)
bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
const wxString& title,
@@ -134,14 +150,17 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
withObject:[allCells subarrayWithRange:NSMakeRange(i*majorDim, majorDim)]];
}
//make and set up an NSBox (TODO: Just derive from wxStaticBox)
SetNSView([[NSBox alloc] initWithFrame:MakeDefaultNSRect(size)]);
[m_cocoaNSView release];
NSBox *theBox = [[NSBox alloc] initWithFrame:MakeDefaultNSRect(size)];
// Replace the box's content view with the NSMatrix we just created
[GetNSBox() setContentView:radioBox];
// IMPORTANT: This must be done before calling SetNSBox.
[theBox setContentView:radioBox];
[radioBox release]; // The NSBox retains it for us.
SetNSBox(theBox);
[theBox release];
[GetNSBox() setTitle:wxNSStringWithWxString(wxStripMenuCodes(title, wxStrip_Mnemonics))];
// [GetNSBox() setBorderType:NSLineBorder]; // why??
@@ -159,6 +178,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid,
wxRadioBox::~wxRadioBox()
{
DisassociateNSBox(GetNSBox());
}
WX_NSMatrix wxRadioBox::GetNSMatrix() const
@@ -240,4 +260,12 @@ wxSize wxRadioBox::DoGetBestSize() const
return wxControl::DoGetBestSize();
}
void wxRadioBox::CocoaTarget_action(void)
{
wxCommandEvent event(wxEVT_COMMAND_RADIOBOX_SELECTED, GetId());
InitCommandEvent(event);
event.SetInt(GetSelection()); // i.e. SetSelection.
Command(event);
}
#endif