/////////////////////////////////////////////////////////////////////////////
-// Name: radiobut.cpp
+// Name: src/osx/carbon/radiobut.cpp
// Purpose: wxRadioButton
-// Author: AUTHOR
+// Author: Stefan Csomor
// Modified by: JS Lair (99/11/15) adding the cyclic group notion for radiobox
-// Created: ??/??/98
+// Created: 01/01/98
// RCS-ID: $Id$
-// Copyright: (c) AUTHOR
+// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#if wxUSE_RADIOBTN
#include "wx/radiobut.h"
-#include "wx/mac/uma.h"
-
-IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
-
-
-bool wxRadioButton::Create( wxWindow *parent,
- wxWindowID id,
- const wxString& label,
- const wxPoint& pos,
- const wxSize& size,
- long style,
- const wxValidator& validator,
- const wxString& name )
+#include "wx/osx/private.h"
+
+wxWidgetImplType* wxWidgetImpl::CreateRadioButton( wxWindowMac* wxpeer,
+ wxWindowMac* parent,
+ wxWindowID id,
+ const wxString& label,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ long extraStyle)
{
- m_macIsUserPane = false;
-
- if ( !wxControl::Create( parent, id, pos, size, style, validator, name ) )
- return false;
-
- m_labelOrig = m_label = label;
-
- Rect bounds = wxMacGetBoundsForControl( this, pos, size );
-
- m_peer = new wxMacControl( this );
+ Rect bounds = wxMacGetBoundsForControl( wxpeer , pos , size ) ;
+ wxMacControl* peer = new wxMacControl(wxpeer) ;
OSStatus err = CreateRadioButtonControl(
MAC_WXHWND(parent->MacGetTopLevelWindowRef()), &bounds, CFSTR(""),
- 0, false /* no autotoggle */, m_peer->GetControlRefAddr() );
+ 0, false /* no autotoggle */, peer->GetControlRefAddr() );
verify_noerr( err );
- MacPostControlCreate( pos, size );
-
- m_cycle = this;
-
- if (HasFlag( wxRB_GROUP ))
- {
- AddInCycle( NULL );
- }
- else
- {
- // search backward for last group start
- wxRadioButton *chief = NULL;
- wxWindowList::compatibility_iterator node = parent->GetChildren().GetLast();
- while (node)
- {
- wxWindow *child = node->GetData();
- if (child->IsKindOf( CLASSINFO( wxRadioButton ) ))
- {
- chief = (wxRadioButton*)child;
- if (child->HasFlag( wxRB_GROUP ))
- break;
- }
-
- node = node->GetPrevious();
- }
-
- AddInCycle( chief );
- }
-
- return true;
-}
-
-wxRadioButton::~wxRadioButton()
-{
- RemoveFromCycle();
-}
-
-void wxRadioButton::SetValue(bool val)
-{
- wxRadioButton *cycle;
- if (m_peer->GetValue() == val)
- return;
-
- m_peer->SetValue( val );
- if (val)
- {
- cycle = this->NextInCycle();
- if (cycle != NULL)
- {
- while (cycle != this)
- {
- cycle->SetValue( false );
- cycle = cycle->NextInCycle();
- }
- }
- }
-}
-
-bool wxRadioButton::GetValue() const
-{
- return m_peer->GetValue();
-}
-
-void wxRadioButton::Command(wxCommandEvent& event)
-{
- SetValue( (event.GetInt() != 0) );
- ProcessCommand( event );
-}
-
-wxInt32 wxRadioButton::MacControlHit( WXEVENTHANDLERREF WXUNUSED(handler), WXEVENTREF WXUNUSED(event) )
-{
- // if already set -> no action
- if (GetValue())
- return noErr;
-
- wxRadioButton *cycle;
- cycle = this->NextInCycle();
- if (cycle != NULL)
- {
- while (cycle != this)
- {
- if (cycle->GetValue())
- cycle->SetValue( false );
-
- cycle = cycle->NextInCycle();
- }
- }
-
- SetValue( true );
-
- wxCommandEvent event2( wxEVT_COMMAND_RADIOBUTTON_SELECTED, m_windowId );
- event2.SetEventObject( this );
- event2.SetInt( true );
- ProcessCommand( event2 );
-
- return noErr;
-}
-
-wxRadioButton *wxRadioButton::AddInCycle(wxRadioButton *cycle)
-{
- wxRadioButton *current;
-
- if (cycle == NULL)
- {
- m_cycle = this;
- }
- else
- {
- current = cycle;
- while (current->m_cycle != cycle)
- current = current->m_cycle;
-
- m_cycle = cycle;
- current->m_cycle = this;
- }
-
- return m_cycle;
-}
-
-void wxRadioButton::RemoveFromCycle()
-{
- if ((m_cycle == NULL) || (m_cycle == this))
- return;
-
- // Find the previous one and make it point to the next one
- wxRadioButton* prev = this;
- while (prev->m_cycle != this)
- prev = prev->m_cycle;
-
- prev->m_cycle = m_cycle;
+ return peer;
}
#endif