Implement wxRB_GROUP

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9913 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2001-04-28 14:45:11 +00:00
parent 3e968053fb
commit 079c842cae
3 changed files with 126 additions and 23 deletions

View File

@ -22,38 +22,43 @@ WXDLLEXPORT_DATA(extern const char*) wxRadioButtonNameStr;
class WXDLLEXPORT wxRadioButton: public wxControl class WXDLLEXPORT wxRadioButton: public wxControl
{ {
DECLARE_DYNAMIC_CLASS(wxRadioButton) public:
protected: inline wxRadioButton() {}
public: inline wxRadioButton(wxWindow *parent, wxWindowID id,
inline wxRadioButton() {}
inline wxRadioButton(wxWindow *parent, wxWindowID id,
const wxString& label, const wxString& label,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0, const wxSize& size = wxDefaultSize, long style = 0,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxRadioButtonNameStr) const wxString& name = wxRadioButtonNameStr)
{ {
Create(parent, id, label, pos, size, style, validator, name); Create(parent, id, label, pos, size, style, validator, name);
} }
bool Create(wxWindow *parent, wxWindowID id, bool Create(wxWindow *parent, wxWindowID id,
const wxString& label, const wxString& label,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, long style = 0, const wxSize& size = wxDefaultSize, long style = 0,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxRadioButtonNameStr); const wxString& name = wxRadioButtonNameStr);
virtual void SetValue(bool val); virtual void SetValue(bool val);
virtual bool GetValue() const ; virtual bool GetValue() const ;
// implementation
virtual void MacHandleControlClick( ControlHandle control , SInt16 controlpart ); virtual void MacHandleControlClick( ControlHandle control , SInt16 controlpart );
void Command(wxCommandEvent& event); void Command(wxCommandEvent& event);
wxRadioButton *AddInCycle(wxRadioButton *cycle); wxRadioButton *AddInCycle(wxRadioButton *cycle);
inline wxRadioButton *NextInCycle() {return m_cycle;} inline wxRadioButton *NextInCycle() {return m_cycle;}
void OnIdle( wxIdleEvent &event );
protected: protected:
wxRadioButton *m_cycle;
wxRadioButton *m_cycle;
private:
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxRadioButton)
}; };
// Not implemented // Not implemented

View File

@ -15,9 +15,12 @@
#include "wx/radiobut.h" #include "wx/radiobut.h"
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl) IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
#endif
BEGIN_EVENT_TABLE(wxRadioButton, wxControl)
EVT_IDLE( wxRadioButton::OnIdle )
END_EVENT_TABLE()
#include <wx/mac/uma.h> #include <wx/mac/uma.h>
@ -40,7 +43,53 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id,
MacPostControlCreate() ; MacPostControlCreate() ;
return TRUE; return TRUE;
}
void wxRadioButton::OnIdle( wxIdleEvent &event )
{
if (!m_cycle && HasFlag(wxRB_GROUP))
{
// we are a stand-alone radiobutton and have
// the group flag indicating we have to collect
// the other radiobuttons belonging to this one
bool reached_this = FALSE;
wxRadioButton *m_radioButtonCycle = NULL;
m_radioButtonCycle = AddInCycle( m_radioButtonCycle );
wxWindow *parent = GetParent();
wxNode *node = parent->GetChildren().First();
while (node)
{
wxWindow *child = (wxWindow*) node->Data();
node = node->Next();
// start searching behind current radiobutton
if (!reached_this)
{
reached_this = (this == child);
continue;
}
if (child->IsKindOf( CLASSINFO ( wxRadioButton ) ))
{
wxRadioButton *rb = (wxRadioButton*) child;
// already reached next group
if (rb->HasFlag(wxRB_GROUP)) break;
// part of a radiobox
if (rb->NextInCycle()) break;
m_radioButtonCycle = rb->AddInCycle( m_radioButtonCycle );
}
}
}
event.Skip( TRUE );
} }
void wxRadioButton::SetValue(bool val) void wxRadioButton::SetValue(bool val)

View File

@ -15,9 +15,12 @@
#include "wx/radiobut.h" #include "wx/radiobut.h"
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl) IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
#endif
BEGIN_EVENT_TABLE(wxRadioButton, wxControl)
EVT_IDLE( wxRadioButton::OnIdle )
END_EVENT_TABLE()
#include <wx/mac/uma.h> #include <wx/mac/uma.h>
@ -40,7 +43,53 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id,
MacPostControlCreate() ; MacPostControlCreate() ;
return TRUE; return TRUE;
}
void wxRadioButton::OnIdle( wxIdleEvent &event )
{
if (!m_cycle && HasFlag(wxRB_GROUP))
{
// we are a stand-alone radiobutton and have
// the group flag indicating we have to collect
// the other radiobuttons belonging to this one
bool reached_this = FALSE;
wxRadioButton *m_radioButtonCycle = NULL;
m_radioButtonCycle = AddInCycle( m_radioButtonCycle );
wxWindow *parent = GetParent();
wxNode *node = parent->GetChildren().First();
while (node)
{
wxWindow *child = (wxWindow*) node->Data();
node = node->Next();
// start searching behind current radiobutton
if (!reached_this)
{
reached_this = (this == child);
continue;
}
if (child->IsKindOf( CLASSINFO ( wxRadioButton ) ))
{
wxRadioButton *rb = (wxRadioButton*) child;
// already reached next group
if (rb->HasFlag(wxRB_GROUP)) break;
// part of a radiobox
if (rb->NextInCycle()) break;
m_radioButtonCycle = rb->AddInCycle( m_radioButtonCycle );
}
}
}
event.Skip( TRUE );
} }
void wxRadioButton::SetValue(bool val) void wxRadioButton::SetValue(bool val)