X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b0b5881aeaef69976ed1693ab0423187a8bcd53c..1ebfe6c58a3a2b72dd0b8f97b57c49d139f612e6:/src/cocoa/radiobut.mm diff --git a/src/cocoa/radiobut.mm b/src/cocoa/radiobut.mm index caaa25001e..3a5d0553b0 100644 --- a/src/cocoa/radiobut.mm +++ b/src/cocoa/radiobut.mm @@ -6,7 +6,7 @@ // Created: 2003/03/16 // RCS-ID: $Id$ // Copyright: (c) 2003 David Elliott -// Licence: wxWidgets licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/wxprec.h" @@ -28,7 +28,6 @@ WX_DEFINE_LIST(wxRadioButtonList); -IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl) // wxRadioButtonBase == wxControl BEGIN_EVENT_TABLE(wxRadioButton, wxControl) END_EVENT_TABLE() @@ -77,7 +76,7 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID winid, SetNSButton([[NSButton alloc] initWithFrame: MakeDefaultNSRect(size)]); [m_cocoaNSView release]; [GetNSButton() setButtonType: NSRadioButton]; - [GetNSButton() setTitle:wxNSStringWithWxString(label)]; + CocoaSetLabelForObject(label, GetNSButton()); // If it's the first in a group, it should be selected if(style&wxRB_GROUP) [GetNSButton() setState: NSOnState]; @@ -130,7 +129,10 @@ wxRadioButton::~wxRadioButton() void wxRadioButton::SetValue(bool value) { if(value) + { [GetNSButton() setState: NSOnState]; + Cocoa_DeselectOtherButtonsInTheGroup(); + } else [GetNSButton() setState: NSOffState]; } @@ -142,10 +144,25 @@ bool wxRadioButton::GetValue() const return state==NSOnState; } -void wxRadioButton::Cocoa_wxNSButtonAction(void) +void wxRadioButton::SetLabel(const wxString& label) { - wxLogTrace(wxTRACE_COCOA,wxT("wxRadioButton")); - if(m_radioMaster && ([GetNSButton() state] == NSOnState)) + wxAutoNSAutoreleasePool pool; + CocoaSetLabelForObject(label, GetNSButton()); +} + +wxString wxRadioButton::GetLabel() const +{ + return wxStringWithNSString([GetNSButton() title]); +} + +/** + * If this radio button is part of a group, this method turns off every other + * button in the group. If this radio button is not part of a group, this + * method does absolutely nothing. + */ +void wxRadioButton::Cocoa_DeselectOtherButtonsInTheGroup(void) +{ + if(m_radioMaster) { for(wxRadioButtonList::compatibility_iterator slaveNode = m_radioMaster->m_radioSlaves.GetFirst(); @@ -156,6 +173,15 @@ void wxRadioButton::Cocoa_wxNSButtonAction(void) radioButton->SetValue(false); } } +} + +void wxRadioButton::Cocoa_wxNSButtonAction(void) +{ + wxLogTrace(wxTRACE_COCOA,wxT("wxRadioButton")); + if([GetNSButton() state] == NSOnState) + { + Cocoa_DeselectOtherButtonsInTheGroup(); + } wxCommandEvent event(wxEVT_COMMAND_RADIOBUTTON_SELECTED, GetId()); InitCommandEvent(event); // event.SetEventObject(this); event.SetInt(GetValue());