]> git.saurik.com Git - wxWidgets.git/commitdiff
Implement wxRB_GROUP
authorRobert Roebling <robert@roebling.de>
Sat, 28 Apr 2001 14:45:11 +0000 (14:45 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 28 Apr 2001 14:45:11 +0000 (14:45 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9913 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/mac/radiobut.h
src/mac/carbon/radiobut.cpp
src/mac/radiobut.cpp

index 9de7a224c5deb48eb953b44f80163231fb86b6dd..6a2c5b1c6a8790051aac5bec1e3af4abff0d4da1 100644 (file)
@@ -22,38 +22,43 @@ WXDLLEXPORT_DATA(extern const char*) wxRadioButtonNameStr;
 
 class WXDLLEXPORT wxRadioButton: public wxControl
 {
-  DECLARE_DYNAMIC_CLASS(wxRadioButton)
- protected:
- public:
-  inline wxRadioButton() {}
-  inline wxRadioButton(wxWindow *parent, wxWindowID id,
+public:
+    inline wxRadioButton() {}
+    inline wxRadioButton(wxWindow *parent, wxWindowID id,
            const wxString& label,
            const wxPoint& pos = wxDefaultPosition,
            const wxSize& size = wxDefaultSize, long style = 0,
            const wxValidator& validator = wxDefaultValidator,
            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 wxPoint& pos = wxDefaultPosition,
            const wxSize& size = wxDefaultSize, long style = 0,
            const wxValidator& validator = wxDefaultValidator,
            const wxString& name = wxRadioButtonNameStr);
 
-  virtual void SetValue(bool val);
-  virtual bool GetValue() const ;
+    virtual void SetValue(bool val);
+    virtual bool GetValue() const ;
 
+    // implementation 
+    
        virtual void MacHandleControlClick( ControlHandle control , SInt16 controlpart ); 
-  void Command(wxCommandEvent& event);
-  wxRadioButton *AddInCycle(wxRadioButton *cycle);
-  inline wxRadioButton *NextInCycle() {return m_cycle;}
+    void Command(wxCommandEvent& event);
+    wxRadioButton *AddInCycle(wxRadioButton *cycle);
+    inline wxRadioButton *NextInCycle() {return m_cycle;}
+    
+    void OnIdle( wxIdleEvent &event );
+
+protected:
+    wxRadioButton *m_cycle;
 
-  protected:
-  
-  wxRadioButton *m_cycle;  
+private:      
+    DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxRadioButton)
 };
 
 // Not implemented
index 9a93378c0cbb1ccdcb2d40d4b8868c76838556bc..1f5bb9c67aaa622814c3df5e2608fe2eaf3d5feb 100644 (file)
 
 #include "wx/radiobut.h"
 
-#if !USE_SHARED_LIBRARY
+
 IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
-#endif
+
+BEGIN_EVENT_TABLE(wxRadioButton, wxControl)
+   EVT_IDLE( wxRadioButton::OnIdle )
+END_EVENT_TABLE()
 
 #include <wx/mac/uma.h>
 
@@ -40,7 +43,53 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id,
        
        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)
index 9a93378c0cbb1ccdcb2d40d4b8868c76838556bc..1f5bb9c67aaa622814c3df5e2608fe2eaf3d5feb 100644 (file)
 
 #include "wx/radiobut.h"
 
-#if !USE_SHARED_LIBRARY
+
 IMPLEMENT_DYNAMIC_CLASS(wxRadioButton, wxControl)
-#endif
+
+BEGIN_EVENT_TABLE(wxRadioButton, wxControl)
+   EVT_IDLE( wxRadioButton::OnIdle )
+END_EVENT_TABLE()
 
 #include <wx/mac/uma.h>
 
@@ -40,7 +43,53 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id,
        
        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)