X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9ed97552373524bb54b71cd967b2df135e81ee51..6695aca2e25ca3bf77b705cb745be86e4d486e3e:/src/cocoa/radiobox.mm diff --git a/src/cocoa/radiobox.mm b/src/cocoa/radiobox.mm index c67639ccf1..6ce3aa2dd3 100644 --- a/src/cocoa/radiobox.mm +++ b/src/cocoa/radiobox.mm @@ -24,6 +24,7 @@ #include "wx/cocoa/string.h" #include "wx/cocoa/autorelease.h" +#import #include "wx/cocoa/objc/NSView.h" #import #import @@ -32,7 +33,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, @@ -79,7 +96,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid, NSMutableArray *allCells = [NSMutableArray arrayWithCapacity:n]; for(int i=0; i 0) + SetSelection(0); + if(m_parent) m_parent->CocoaAddChild(this); @@ -160,6 +184,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid, wxRadioBox::~wxRadioBox() { + DisassociateNSBox(GetNSBox()); } WX_NSMatrix wxRadioBox::GetNSMatrix() const @@ -170,11 +195,20 @@ WX_NSMatrix wxRadioBox::GetNSMatrix() const // selection void wxRadioBox::SetSelection(int n) { + int r = GetRowForIndex(n); + int c = GetColumnForIndex(n); + [GetNSMatrix() selectCellAtRow:r column:c]; } int wxRadioBox::GetSelection() const { - return 0; + NSMatrix *radioBox = GetNSMatrix(); + NSInteger r = [radioBox selectedRow]; + NSInteger c = [radioBox selectedColumn]; + if(m_windowStyle & wxRA_SPECIFY_COLS) + return r * GetMajorDim() + c; + else + return c * GetMajorDim() + r; } // string access @@ -190,23 +224,38 @@ unsigned int wxRadioBox::GetCount() const wxString wxRadioBox::GetString(unsigned int n) const { - return wxEmptyString; + int r = GetRowForIndex(n); + int c = GetColumnForIndex(n); + // FIXME: Cocoa stores the mnemonic-stripped title. + return wxStringWithNSString([[GetNSMatrix() cellAtRow:r column:c] title]); } void wxRadioBox::SetString(unsigned int n, const wxString& label) { + int r = GetRowForIndex(n); + int c = GetColumnForIndex(n); + CocoaSetLabelForObject(label, [GetNSMatrix() cellAtRow:r column:c]); } // change the individual radio button state bool wxRadioBox::Enable(unsigned int n, bool enable) { - // TODO - return false; + int r = GetRowForIndex(n); + int c = GetColumnForIndex(n); + NSCell *cell = [GetNSMatrix() cellAtRow:r column:c]; + if(cell == nil) + return false; + bool wasEnabled = [cell isEnabled]; + [cell setEnabled:enable]; + return (wasEnabled && !enable) || (!wasEnabled && enable); } bool wxRadioBox::Show(unsigned int n, bool show) { // TODO + // NOTE: Cocoa has no visible state for cells so we'd need to replace the + // cell with a dummy one to hide it or alternatively subclass NSButtonCell + // and add the behavior. return false; } @@ -217,4 +266,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