]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/radiobut.cpp
wxChoiceDialog fix.
[wxWidgets.git] / src / gtk1 / radiobut.cpp
index bc2156d09455e22cf89ec8d676759c790c52bf36..6b6cd9869425ac6b90ceef3e7f29d5db1e0b1562 100644 (file)
 
 #include "wx/radiobut.h"
 
+#if wxUSE_RADIOBOX
+
+#include "gdk/gdk.h"
+#include "gtk/gtk.h"
+
+//-----------------------------------------------------------------------------
+// idle system
+//-----------------------------------------------------------------------------
+
+extern void wxapp_install_idle_handler();
+extern bool g_isIdle;
+
 //-----------------------------------------------------------------------------
 // data
 //-----------------------------------------------------------------------------
@@ -27,7 +39,9 @@ extern bool g_blockEventsOnDrag;
 static 
 void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRadioButton *rb )
 {
-    if (!rb->HasVMT()) return;
+    if (g_isIdle) wxapp_install_idle_handler();
+
+    if (!rb->m_hasVMT) return;
   
     if (rb->m_blockFirstEvent)
     {
@@ -60,9 +74,11 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
 
     PreCreation( parent, id, pos, newSize, style, name );
   
+#if wxUSE_VALIDATORS
     SetValidator( validator );
+#endif
 
-    m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label );
+    m_widget = gtk_radio_button_new_with_label( (GSList *) NULL, label.mbc_str() );
       
     m_theOtherRadioButtton = 
        gtk_radio_button_new_with_label(
@@ -73,21 +89,20 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
 
     m_blockFirstEvent = FALSE;
     
-    if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label );
+    if (newSize.x == -1) newSize.x = 22+gdk_string_measure( m_widget->style->font, label.mbc_str() );
     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 );
        
-    m_parent->AddChild( this );
-
-    (m_parent->m_insertCallback)( m_parent, this );
+    m_parent->DoAddChild( this );
   
     PostCreation();
 
     SetBackgroundColour( parent->GetBackgroundColour() );
     SetForegroundColour( parent->GetForegroundColour() );
+    SetFont( parent->GetFont() );
   
     Show( TRUE );
 
@@ -96,18 +111,21 @@ bool wxRadioButton::Create( wxWindow *parent, wxWindowID id, const wxString& lab
 
 void wxRadioButton::SetLabel( const wxString& label )
 {
-    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, _T("invalid radiobutton") );
   
     wxControl::SetLabel( label );
     GtkButton *bin = GTK_BUTTON( m_widget );
     GtkLabel *g_label = GTK_LABEL( bin->child );
-    gtk_label_set( g_label, GetLabel() );
+    gtk_label_set( g_label, GetLabel().mbc_str() );
 }
 
 void wxRadioButton::SetValue( bool val )
 {
-    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
+    wxCHECK_RET( m_widget != NULL, _T("invalid radiobutton") );
   
+    if ( val == GetValue() )
+        return;
+
     m_blockFirstEvent = TRUE;
   
     if (val)
@@ -116,20 +134,21 @@ void wxRadioButton::SetValue( bool val )
         gtk_toggle_button_set_state( GTK_TOGGLE_BUTTON(m_theOtherRadioButtton), TRUE );
 }
 
-bool wxRadioButton::GetValue(void) const
+bool wxRadioButton::GetValue() const
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, "invalid radiobutton" );
+    wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid radiobutton") );
   
     return GTK_TOGGLE_BUTTON(m_widget)->active;
 }
 
-void wxRadioButton::Enable( bool enable )
+bool wxRadioButton::Enable( bool enable )
 {
-    wxCHECK_RET( m_widget != NULL, "invalid radiobutton" );
-  
-    wxControl::Enable( enable );
+    if ( !wxControl::Enable( enable ) )
+        return FALSE;
   
     gtk_widget_set_sensitive( GTK_BUTTON(m_widget)->child, enable );
+
+    return TRUE;
 }
 
 void wxRadioButton::ApplyWidgetStyle()
@@ -139,4 +158,4 @@ void wxRadioButton::ApplyWidgetStyle()
     gtk_widget_set_style( GTK_BUTTON(m_widget)->child, m_widgetStyle );
 }
 
-
+#endif