]> git.saurik.com Git - wxWidgets.git/commitdiff
Now even wxRadioButton works
authorRobert Roebling <robert@roebling.de>
Mon, 14 Dec 1998 20:03:52 +0000 (20:03 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 14 Dec 1998 20:03:52 +0000 (20:03 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1196 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/radiobut.h
include/wx/gtk1/radiobut.h
samples/controls/controls.cpp
src/gtk/radiobut.cpp
src/gtk1/radiobut.cpp

index f86495364f164878f5903c93c5ca069c5e02cd30..9a00ea810c47164bd0a593901fdf7867e3aec57d 100644 (file)
@@ -66,7 +66,8 @@ class wxRadioButton: public wxControl
     
     void ApplyWidgetStyle();
     
-    bool   m_blockFirstEvent;
+    bool        m_blockFirstEvent;
+    GtkWidget*  m_theOtherRadioButtton;
 };
 
 #endif // __GTKRADIOBUTTONH__
index f86495364f164878f5903c93c5ca069c5e02cd30..9a00ea810c47164bd0a593901fdf7867e3aec57d 100644 (file)
@@ -66,7 +66,8 @@ class wxRadioButton: public wxControl
     
     void ApplyWidgetStyle();
     
-    bool   m_blockFirstEvent;
+    bool        m_blockFirstEvent;
+    GtkWidget*  m_theOtherRadioButtton;
 };
 
 #endif // __GTKRADIOBUTTONH__
index 52ef792d97da75ec7daf5be9d06118db2ad718c9..0fba093a1ff10286e54740b40142e5dfe772f626 100644 (file)
@@ -197,6 +197,9 @@ const int  ID_RADIOBOX_SEL_STR  = 162;
 const int  ID_RADIOBOX_FONT     = 163;
 const int  ID_RADIOBOX_ENABLE   = 164;
 
+const int  ID_RADIOBUTTON_1     = 166;
+const int  ID_RADIOBUTTON_2     = 167;
+
 const int  ID_SET_FONT          = 170;
 
 const int  ID_GAUGE             = 180;
@@ -376,6 +379,9 @@ MyPanel::MyPanel( wxFrame *frame, int x, int y, int w, int h ) :
   m_fontButton->SetForegroundColour("blue");
   (void)new wxButton( panel, ID_RADIOBOX_FONT, "Set Italic font", wxPoint(340,80), wxSize(140,30) );
   (void)new wxCheckBox( panel, ID_RADIOBOX_ENABLE, "Disable", wxPoint(340,130), wxSize(140,30) );
+  wxRadioButton *rb = new wxRadioButton( panel, ID_RADIOBUTTON_1, "Radiobutton1", wxPoint(210,170), wxSize(110,30) );
+  rb->SetValue( FALSE );
+  (void)new wxRadioButton( panel, ID_RADIOBUTTON_2, "Radiobutton2", wxPoint(340,170), wxSize(110,30) );
   m_notebook->AddPage(panel, "wxRadioBox", FALSE, Image_Radio);
   
   panel = new wxPanel(m_notebook);
index ffe7dfa87466c73f3b8de095db39789e706dff8f..aab86976cd7fe416748ee3d00da1d98a909b661c 100644 (file)
@@ -27,20 +27,20 @@ extern bool g_blockEventsOnDrag;
 static 
 void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb )
 {
-  if (!rb->HasVMT()) return;
+    if (!rb->HasVMT()) return;
   
-  if (rb->m_blockFirstEvent)
-  {
-    rb->m_blockFirstEvent = FALSE;
-    return;
-  } 
+    if (rb->m_blockFirstEvent)
+    {
+        rb->m_blockFirstEvent = FALSE;
+        return;
+    
   
-  if (g_blockEventsOnDrag) return;
+    if (g_blockEventsOnDrag) return;
   
-  wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
-  event.SetInt( rb->GetValue() );
-  event.SetEventObject( rb );
-  rb->GetEventHandler()->ProcessEvent( event );
+    wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
+    event.SetInt( rb->GetValue() );
+    event.SetEventObject( rb );
+    rb->GetEventHandler()->ProcessEvent( event );
 }
 
 //-----------------------------------------------------------------------------
@@ -53,81 +53,89 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
   const wxPoint& pos,  const wxSize& size, long style,
   const wxValidator& validator, const wxString& name )
 {
-  m_needParent = TRUE;
+    m_needParent = TRUE;
 
-  wxSize newSize = size;
+    wxSize newSize = size;
 
-  PreCreation( parent, id, pos, newSize, style, name );
+    PreCreation( parent, id, pos, newSize, style, name );
   
-  SetValidator( validator );
+    SetValidator( validator );
 
-  m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label );
+    m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label );
       
-  SetLabel(label);
+    m_theOtherRadioButtton = 
+       gtk_radio_button_new_with_label(
+         gtk_radio_button_group( GTK_RADIO_BUTTON(m_widget) ),
+         "button2" );
+  
+    SetLabel(label);
 
-  m_blockFirstEvent = FALSE;
+    m_blockFirstEvent = FALSE;
     
-  if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label );
-  if (newSize.y == -1) newSize.y = 26;
-  SetSize( newSize.x, newSize.y );
+    if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label );
+    if (newSize.y == -1) newSize.y = 26;
+    SetSize( newSize.x, newSize.y );
 
-  gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", 
-    GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
+    gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", 
+      GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
        
-  m_parent->AddChild( this );
+    m_parent->AddChild( this );
 
-  (m_parent->m_insertCallback)( m_parent, this );
+    (m_parent->m_insertCallback)( m_parent, this );
   
-  PostCreation();
+    PostCreation();
 
-  SetBackgroundColour( parent->GetBackgroundColour() );
-  SetForegroundColour( parent->GetForegroundColour() );
+    SetBackgroundColour( parent->GetBackgroundColour() );
+    SetForegroundColour( parent->GetForegroundColour() );
   
-  Show( TRUE );
+    Show( TRUE );
 
-  return TRUE;
+    return TRUE;
 }
 
 void wxRadioButton::SetLabel( const wxString& label )
 {
-  wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
-  wxControl::SetLabel( label );
-  GtkButton *bin = GTK_BUTTON( m_widget );
-  GtkLabel *g_label = GTK_LABEL( bin->child );
-  gtk_label_set( g_label, GetLabel() );
+    wxControl::SetLabel( label );
+    GtkButton *bin = GTK_BUTTON( m_widget );
+    GtkLabel *g_label = GTK_LABEL( bin->child );
+    gtk_label_set( g_label, GetLabel() );
 }
 
 void wxRadioButton::SetValue( bool val )
 {
-  wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
-  m_blockFirstEvent = TRUE;
+    m_blockFirstEvent = TRUE;
   
-  gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), val );
+    if (val)
+        gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), TRUE );
+    else
+        gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_theOtherRadioButtton), TRUE );
 }
 
 bool wxRadioButton::GetValue(void) const
 {
-  wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" );
+    wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" );
   
-  return GTK_TOGGLE_BUTTON(m_widget)->active;
+    return GTK_TOGGLE_BUTTON(m_widget)->active;
 }
 
 void wxRadioButton::Enable( bool enable )
 {
-  wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
-  wxControl::Enable( enable );
+    wxControl::Enable( enable );
   
-  gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable );
+    gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable );
 }
 
 void wxRadioButton::ApplyWidgetStyle()
 {
-  SetWidgetStyle();
-  gtk_widget_set_style( m_widget, m_widgetStyle );
-  gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
+    SetWidgetStyle();
+    gtk_widget_set_style( m_widget, m_widgetStyle );
+    gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
 }
 
 
index ffe7dfa87466c73f3b8de095db39789e706dff8f..aab86976cd7fe416748ee3d00da1d98a909b661c 100644 (file)
@@ -27,20 +27,20 @@ extern bool g_blockEventsOnDrag;
 static 
 void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb )
 {
-  if (!rb->HasVMT()) return;
+    if (!rb->HasVMT()) return;
   
-  if (rb->m_blockFirstEvent)
-  {
-    rb->m_blockFirstEvent = FALSE;
-    return;
-  } 
+    if (rb->m_blockFirstEvent)
+    {
+        rb->m_blockFirstEvent = FALSE;
+        return;
+    
   
-  if (g_blockEventsOnDrag) return;
+    if (g_blockEventsOnDrag) return;
   
-  wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
-  event.SetInt( rb->GetValue() );
-  event.SetEventObject( rb );
-  rb->GetEventHandler()->ProcessEvent( event );
+    wxCommandEvent event( wxEVT_COMMAND_RADIOBUTTON_SELECTED, rb->GetId());
+    event.SetInt( rb->GetValue() );
+    event.SetEventObject( rb );
+    rb->GetEventHandler()->ProcessEvent( event );
 }
 
 //-----------------------------------------------------------------------------
@@ -53,81 +53,89 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
   const wxPoint& pos,  const wxSize& size, long style,
   const wxValidator& validator, const wxString& name )
 {
-  m_needParent = TRUE;
+    m_needParent = TRUE;
 
-  wxSize newSize = size;
+    wxSize newSize = size;
 
-  PreCreation( parent, id, pos, newSize, style, name );
+    PreCreation( parent, id, pos, newSize, style, name );
   
-  SetValidator( validator );
+    SetValidator( validator );
 
-  m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label );
+    m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label );
       
-  SetLabel(label);
+    m_theOtherRadioButtton = 
+       gtk_radio_button_new_with_label(
+         gtk_radio_button_group( GTK_RADIO_BUTTON(m_widget) ),
+         "button2" );
+  
+    SetLabel(label);
 
-  m_blockFirstEvent = FALSE;
+    m_blockFirstEvent = FALSE;
     
-  if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label );
-  if (newSize.y == -1) newSize.y = 26;
-  SetSize( newSize.x, newSize.y );
+    if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label );
+    if (newSize.y == -1) newSize.y = 26;
+    SetSize( newSize.x, newSize.y );
 
-  gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", 
-    GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
+    gtk_signal_connect( GTK_OBJECT(m_widget), "clicked", 
+      GTK_SIGNAL_FUNC(gtk_radiobutton_clicked_callback), (gpointer*)this );
        
-  m_parent->AddChild( this );
+    m_parent->AddChild( this );
 
-  (m_parent->m_insertCallback)( m_parent, this );
+    (m_parent->m_insertCallback)( m_parent, this );
   
-  PostCreation();
+    PostCreation();
 
-  SetBackgroundColour( parent->GetBackgroundColour() );
-  SetForegroundColour( parent->GetForegroundColour() );
+    SetBackgroundColour( parent->GetBackgroundColour() );
+    SetForegroundColour( parent->GetForegroundColour() );
   
-  Show( TRUE );
+    Show( TRUE );
 
-  return TRUE;
+    return TRUE;
 }
 
 void wxRadioButton::SetLabel( const wxString& label )
 {
-  wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
-  wxControl::SetLabel( label );
-  GtkButton *bin = GTK_BUTTON( m_widget );
-  GtkLabel *g_label = GTK_LABEL( bin->child );
-  gtk_label_set( g_label, GetLabel() );
+    wxControl::SetLabel( label );
+    GtkButton *bin = GTK_BUTTON( m_widget );
+    GtkLabel *g_label = GTK_LABEL( bin->child );
+    gtk_label_set( g_label, GetLabel() );
 }
 
 void wxRadioButton::SetValue( bool val )
 {
-  wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
-  m_blockFirstEvent = TRUE;
+    m_blockFirstEvent = TRUE;
   
-  gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), val );
+    if (val)
+        gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_widget), TRUE );
+    else
+        gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_theOtherRadioButtton), TRUE );
 }
 
 bool wxRadioButton::GetValue(void) const
 {
-  wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" );
+    wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" );
   
-  return GTK_TOGGLE_BUTTON(m_widget)->active;
+    return GTK_TOGGLE_BUTTON(m_widget)->active;
 }
 
 void wxRadioButton::Enable( bool enable )
 {
-  wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
   
-  wxControl::Enable( enable );
+    wxControl::Enable( enable );
   
-  gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable );
+    gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable );
 }
 
 void wxRadioButton::ApplyWidgetStyle()
 {
-  SetWidgetStyle();
-  gtk_widget_set_style( m_widget, m_widgetStyle );
-  gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
+    SetWidgetStyle();
+    gtk_widget_set_style( m_widget, m_widgetStyle );
+    gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
 }