{
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
protected:
// Static boxes cannot be enabled/disabled
virtual void CocoaSetEnabled(bool enable) { }
+ virtual void CocoaTarget_action(void);
// ------------------------------------------------------------------------
// Implementation
// ------------------------------------------------------------------------
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
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,
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??
wxRadioBox::~wxRadioBox()
{
+ DisassociateNSBox(GetNSBox());
}
WX_NSMatrix wxRadioBox::GetNSMatrix() 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