X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/bd8e6e3742990810f3c4f76b519d257b44e984da..0d1903dbda864780eec30efdc4e91776bdbfd21b:/src/cocoa/radiobut.mm diff --git a/src/cocoa/radiobut.mm b/src/cocoa/radiobut.mm index 29e001cadf..523b6acb41 100644 --- a/src/cocoa/radiobut.mm +++ b/src/cocoa/radiobut.mm @@ -1,17 +1,23 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/radiobut.mm +// Name: src/cocoa/radiobut.mm // Purpose: wxRadioButton // Author: David Elliott // Modified by: // Created: 2003/03/16 -// RCS-ID: $Id: // Copyright: (c) 2003 David Elliott -// Licence: wxWindows license +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#include "wx/app.h" +#include "wx/wxprec.h" + +#if wxUSE_RADIOBTN + #include "wx/radiobut.h" -#include "wx/log.h" + +#ifndef WX_PRECOMP + #include "wx/log.h" + #include "wx/app.h" +#endif //WX_PRECOMP #import #include "wx/cocoa/string.h" @@ -21,7 +27,6 @@ WX_DEFINE_LIST(wxRadioButtonList); -IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl) // wxRadioButtonBase == wxControl BEGIN_EVENT_TABLE(wxRadioButton, wxControl) END_EVENT_TABLE() @@ -57,7 +62,7 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID winid, { m_radioMaster = radioButton->m_radioMaster; wxASSERT_MSG(m_radioMaster, - "Previous radio button should be part of a group"); + wxT("Previous radio button should be part of a group")); // Don't crash, assume user meant wxRB_SINGLE if(m_radioMaster) m_radioMaster->m_radioSlaves.Append(this); @@ -70,7 +75,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]; @@ -92,14 +97,14 @@ wxRadioButton::~wxRadioButton() m_radioSlaves.GetFirst(); wxASSERT(slaveNode); wxASSERT(slaveNode->GetData() == this); - m_radioSlaves.DeleteNode(slaveNode); - + m_radioSlaves.Erase(slaveNode); + // Now find the new master wxRadioButton *newMaster = NULL; slaveNode = m_radioSlaves.GetFirst(); if(slaveNode) newMaster = slaveNode->GetData(); - + // For each node (including the new master) set the master, remove // it from this list, and add it to the new master's list for(; slaveNode; slaveNode = m_radioSlaves.GetFirst()) @@ -108,7 +113,7 @@ wxRadioButton::~wxRadioButton() wxASSERT(radioButton->m_radioMaster == this); radioButton->m_radioMaster = newMaster; newMaster->m_radioSlaves.Append(radioButton); - m_radioSlaves.DeleteNode(slaveNode); + m_radioSlaves.Erase(slaveNode); } } else if(m_radioMaster) @@ -117,13 +122,16 @@ wxRadioButton::~wxRadioButton() m_radioMaster = NULL; } // normal stuff - DisassociateNSButton(m_cocoaNSView); + DisassociateNSButton(GetNSButton()); } void wxRadioButton::SetValue(bool value) { if(value) + { [GetNSButton() setState: NSOnState]; + Cocoa_DeselectOtherButtonsInTheGroup(); + } else [GetNSButton() setState: NSOffState]; } @@ -135,10 +143,25 @@ bool wxRadioButton::GetValue() const return state==NSOnState; } -void wxRadioButton::Cocoa_wxNSButtonAction(void) +void wxRadioButton::SetLabel(const wxString& label) +{ + 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) { - wxLogDebug("wxRadioButton"); - if(m_radioMaster && ([GetNSButton() state] == NSOnState)) + if(m_radioMaster) { for(wxRadioButtonList::compatibility_iterator slaveNode = m_radioMaster->m_radioSlaves.GetFirst(); @@ -149,9 +172,19 @@ void wxRadioButton::Cocoa_wxNSButtonAction(void) radioButton->SetValue(false); } } - wxCommandEvent event(wxEVT_COMMAND_RADIOBUTTON_SELECTED, GetId()); +} + +void wxRadioButton::Cocoa_wxNSButtonAction(void) +{ + wxLogTrace(wxTRACE_COCOA,wxT("wxRadioButton")); + if([GetNSButton() state] == NSOnState) + { + Cocoa_DeselectOtherButtonsInTheGroup(); + } + wxCommandEvent event(wxEVT_RADIOBUTTON, GetId()); InitCommandEvent(event); // event.SetEventObject(this); event.SetInt(GetValue()); Command(event); } +#endif