]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/radiobox.cpp
A bit more or multi-format clipboard.
[wxWidgets.git] / src / gtk1 / radiobox.cpp
index cb60031d2507fa2eb4602c3bd2ac907cfe8ab97c..d96aff1a1d099c852379498aafaf74a091a9887e 100644 (file)
@@ -67,10 +67,6 @@ static void gtk_radiobutton_clicked_callback( GtkWidget *WXUNUSED(widget), wxRad
 
 IMPLEMENT_DYNAMIC_CLASS(wxRadioBox,wxControl)
 
 
 IMPLEMENT_DYNAMIC_CLASS(wxRadioBox,wxControl)
 
-BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
-    EVT_SIZE(wxRadioBox::OnSize)
-END_EVENT_TABLE()
-
 wxRadioBox::wxRadioBox()
 {
 }
 wxRadioBox::wxRadioBox()
 {
 }
@@ -85,11 +81,12 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
     m_needParent = TRUE;
     m_acceptsFocus = TRUE;
 
     m_needParent = TRUE;
     m_acceptsFocus = TRUE;
 
-    PreCreation( parent, id, pos, size, style, name );
-
-#if wxUSE_VALIDATORS
-    SetValidator( validator );
-#endif
+    if (!PreCreation( parent, pos, size ) ||
+        !CreateBase( parent, id, pos, size, style, validator, name ))
+    {
+        wxFAIL_MSG( wxT("wxRadioBox creation failed") );
+       return FALSE;
+    }
 
     m_widget = gtk_frame_new( title.mbc_str() );
 
 
     m_widget = gtk_frame_new( title.mbc_str() );
 
@@ -97,12 +94,21 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
 
     GtkRadioButton *m_radio = (GtkRadioButton*) NULL;
 
 
     GtkRadioButton *m_radio = (GtkRadioButton*) NULL;
 
+    wxString label;
     GSList *radio_button_group = (GSList *) NULL;
     for (int i = 0; i < n; i++)
     {
     GSList *radio_button_group = (GSList *) NULL;
     for (int i = 0; i < n; i++)
     {
-        if (i) radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) );
+        if ( i != 0 )
+            radio_button_group = gtk_radio_button_group( GTK_RADIO_BUTTON(m_radio) );
+
+        label.Empty();
+        for ( const wxChar *pc = choices[i]; *pc; pc++ )
+        {
+            if ( *pc != wxT('&') )
+                label += *pc;
+        }
 
 
-        m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, choices[i].mbc_str() ) );
+        m_radio = GTK_RADIO_BUTTON( gtk_radio_button_new_with_label( radio_button_group, label.mbc_str() ) );
 
         m_boxes.Append( (wxObject*) m_radio );
 
 
         m_boxes.Append( (wxObject*) m_radio );
 
@@ -151,11 +157,11 @@ wxRadioBox::~wxRadioBox()
     }
 }
 
     }
 }
 
-void wxRadioBox::OnSize( wxSizeEvent &event )
+void wxRadioBox::DoSetSize( int x, int y, int width, int height, int sizeFlags )
 {
 {
+    wxWindow::DoSetSize( x, y, width, height, sizeFlags );
+    
     LayoutItems();
     LayoutItems();
-
-    event.Skip();
 }
 
 wxSize wxRadioBox::LayoutItems()
 }
 
 wxSize wxRadioBox::LayoutItems()
@@ -166,7 +172,7 @@ wxSize wxRadioBox::LayoutItems()
     if ( m_majorDim == 0 )
     {
         // avoid dividing by 0 below
     if ( m_majorDim == 0 )
     {
         // avoid dividing by 0 below
-        wxFAIL_MSG( "dimension of radiobox should not be 0!" );
+        wxFAIL_MSG( wxT("dimension of radiobox should not be 0!") );
 
         m_majorDim = 1;
     }
 
         m_majorDim = 1;
     }
@@ -175,16 +181,29 @@ wxSize wxRadioBox::LayoutItems()
 
     wxSize res( 0, 0 );
 
 
     wxSize res( 0, 0 );
 
-    if (m_windowStyle & wxRA_HORIZONTAL)
+    int num_of_cols = 0;
+    int num_of_rows = 0;
+    if (HasFlag(wxRA_SPECIFY_COLS))
     {
     {
-
-        for (int j = 0; j < m_majorDim; j++)
+        num_of_cols = m_majorDim;
+        num_of_rows = num_per_major;
+    }
+    else
+    {
+        num_of_cols = num_per_major;
+        num_of_rows = m_majorDim;
+    }
+       
+    if ( HasFlag(wxRA_SPECIFY_COLS) ||
+         (HasFlag(wxRA_SPECIFY_ROWS) && (num_of_cols > 1)) )
+    {
+        for (int j = 0; j < num_of_cols; j++)
         {
             y = 15;
 
             int max_len = 0;
         {
             y = 15;
 
             int max_len = 0;
-            wxNode *node = m_boxes.Nth( j*num_per_major );
-            for (int i1 = 0; i1< num_per_major; i1++)
+            wxNode *node = m_boxes.Nth( j*num_of_rows );
+            for (int i1 = 0; i1< num_of_rows; i1++)
             {
                 GtkWidget *button = GTK_WIDGET( node->Data() );
                 GtkLabel *label = GTK_LABEL( GTK_BUTTON(button)->child );
             {
                 GtkWidget *button = GTK_WIDGET( node->Data() );
                 GtkLabel *label = GTK_LABEL( GTK_BUTTON(button)->child );
@@ -201,8 +220,8 @@ wxSize wxRadioBox::LayoutItems()
 
             // we don't know the max_len before
 
 
             // we don't know the max_len before
 
-            node = m_boxes.Nth( j*num_per_major );
-            for (int i2 = 0; i2< num_per_major; i2++)
+            node = m_boxes.Nth( j*num_of_rows );
+            for (int i2 = 0; i2< num_of_rows; i2++)
             {
                 GtkWidget *button = GTK_WIDGET( node->Data() );
 
             {
                 GtkWidget *button = GTK_WIDGET( node->Data() );
 
@@ -248,7 +267,7 @@ wxSize wxRadioBox::LayoutItems()
             node = node->Next();
         }
         res.x = x+4;
             node = node->Next();
         }
         res.x = x+4;
-        res.y = 42;
+        res.y = 40;
     }
 
     return res;
     }
 
     return res;
@@ -256,7 +275,7 @@ wxSize wxRadioBox::LayoutItems()
 
 bool wxRadioBox::Show( bool show )
 {
 
 bool wxRadioBox::Show( bool show )
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, FALSE, wxT("invalid radiobox") );
 
     wxWindow::Show( show );
 
 
     wxWindow::Show( show );
 
@@ -278,7 +297,7 @@ bool wxRadioBox::Show( bool show )
 
 int wxRadioBox::FindString( const wxString &s ) const
 {
 
 int wxRadioBox::FindString( const wxString &s ) const
 {
-    wxCHECK_MSG( m_widget != NULL, -1, _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid radiobox") );
 
     int count = 0;
 
 
     int count = 0;
 
@@ -299,7 +318,7 @@ int wxRadioBox::FindString( const wxString &s ) const
 
 void wxRadioBox::SetFocus()
 {
 
 void wxRadioBox::SetFocus()
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid radiobox") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid radiobox") );
 
     if (m_boxes.GetCount() == 0) return;
 
 
     if (m_boxes.GetCount() == 0) return;
 
@@ -320,11 +339,11 @@ void wxRadioBox::SetFocus()
 
 void wxRadioBox::SetSelection( int n )
 {
 
 void wxRadioBox::SetSelection( int n )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid radiobox") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid radiobox") );
 
     wxNode *node = m_boxes.Nth( n );
 
 
     wxNode *node = m_boxes.Nth( n );
 
-    wxCHECK_RET( node, _T("radiobox wrong index") );
+    wxCHECK_RET( node, wxT("radiobox wrong index") );
 
     GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
 
 
     GtkToggleButton *button = GTK_TOGGLE_BUTTON( node->Data() );
 
@@ -337,7 +356,7 @@ void wxRadioBox::SetSelection( int n )
 
 int wxRadioBox::GetSelection(void) const
 {
 
 int wxRadioBox::GetSelection(void) const
 {
-    wxCHECK_MSG( m_widget != NULL, -1, _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, -1, wxT("invalid radiobox") );
 
     int count = 0;
 
 
     int count = 0;
 
@@ -350,18 +369,18 @@ int wxRadioBox::GetSelection(void) const
         node = node->Next();
     }
 
         node = node->Next();
     }
 
-    wxFAIL_MSG( _T("wxRadioBox none selected") );
+    wxFAIL_MSG( wxT("wxRadioBox none selected") );
 
     return -1;
 }
 
 wxString wxRadioBox::GetString( int n ) const
 {
 
     return -1;
 }
 
 wxString wxRadioBox::GetString( int n ) const
 {
-    wxCHECK_MSG( m_widget != NULL, _T(""), _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, wxT(""), wxT("invalid radiobox") );
 
     wxNode *node = m_boxes.Nth( n );
 
 
     wxNode *node = m_boxes.Nth( n );
 
-    wxCHECK_MSG( node, _T(""), _T("radiobox wrong index") );
+    wxCHECK_MSG( node, wxT(""), wxT("radiobox wrong index") );
 
     GtkButton *button = GTK_BUTTON( node->Data() );
     GtkLabel *label = GTK_LABEL( button->child );
 
     GtkButton *button = GTK_BUTTON( node->Data() );
     GtkLabel *label = GTK_LABEL( button->child );
@@ -371,14 +390,14 @@ wxString wxRadioBox::GetString( int n ) const
 
 wxString wxRadioBox::GetLabel( int item ) const
 {
 
 wxString wxRadioBox::GetLabel( int item ) const
 {
-    wxCHECK_MSG( m_widget != NULL, _T(""), _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, wxT(""), wxT("invalid radiobox") );
 
     return GetString( item );
 }
 
 void wxRadioBox::SetLabel( const wxString& label )
 {
 
     return GetString( item );
 }
 
 void wxRadioBox::SetLabel( const wxString& label )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid radiobox") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid radiobox") );
 
     wxControl::SetLabel( label );
 
 
     wxControl::SetLabel( label );
 
@@ -387,11 +406,11 @@ void wxRadioBox::SetLabel( const wxString& label )
 
 void wxRadioBox::SetLabel( int item, const wxString& label )
 {
 
 void wxRadioBox::SetLabel( int item, const wxString& label )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid radiobox") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid radiobox") );
 
     wxNode *node = m_boxes.Nth( item );
 
 
     wxNode *node = m_boxes.Nth( item );
 
-    wxCHECK_RET( node, _T("radiobox wrong index") );
+    wxCHECK_RET( node, wxT("radiobox wrong index") );
 
     GtkButton *button = GTK_BUTTON( node->Data() );
     GtkLabel *g_label = GTK_LABEL( button->child );
 
     GtkButton *button = GTK_BUTTON( node->Data() );
     GtkLabel *g_label = GTK_LABEL( button->child );
@@ -401,7 +420,7 @@ void wxRadioBox::SetLabel( int item, const wxString& label )
 
 void wxRadioBox::SetLabel( int WXUNUSED(item), wxBitmap *WXUNUSED(bitmap) )
 {
 
 void wxRadioBox::SetLabel( int WXUNUSED(item), wxBitmap *WXUNUSED(bitmap) )
 {
-    wxFAIL_MSG(_T("wxRadioBox::SetLabel not implemented."));
+    wxFAIL_MSG(wxT("wxRadioBox::SetLabel not implemented."));
 }
 
 bool wxRadioBox::Enable( bool enable )
 }
 
 bool wxRadioBox::Enable( bool enable )
@@ -424,11 +443,11 @@ bool wxRadioBox::Enable( bool enable )
 
 void wxRadioBox::Enable( int item, bool enable )
 {
 
 void wxRadioBox::Enable( int item, bool enable )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid radiobox") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid radiobox") );
 
     wxNode *node = m_boxes.Nth( item );
 
 
     wxNode *node = m_boxes.Nth( item );
 
-    wxCHECK_RET( node, _T("radiobox wrong index") );
+    wxCHECK_RET( node, wxT("radiobox wrong index") );
 
     GtkButton *button = GTK_BUTTON( node->Data() );
     GtkWidget *label = button->child;
 
     GtkButton *button = GTK_BUTTON( node->Data() );
     GtkWidget *label = button->child;
@@ -438,11 +457,11 @@ void wxRadioBox::Enable( int item, bool enable )
 
 void wxRadioBox::Show( int item, bool show )
 {
 
 void wxRadioBox::Show( int item, bool show )
 {
-    wxCHECK_RET( m_widget != NULL, _T("invalid radiobox") );
+    wxCHECK_RET( m_widget != NULL, wxT("invalid radiobox") );
 
     wxNode *node = m_boxes.Nth( item );
 
 
     wxNode *node = m_boxes.Nth( item );
 
-    wxCHECK_RET( node, _T("radiobox wrong index") );
+    wxCHECK_RET( node, wxT("radiobox wrong index") );
 
     GtkWidget *button = GTK_WIDGET( node->Data() );
 
 
     GtkWidget *button = GTK_WIDGET( node->Data() );
 
@@ -452,9 +471,9 @@ void wxRadioBox::Show( int item, bool show )
         gtk_widget_hide( button );
 }
 
         gtk_widget_hide( button );
 }
 
-wxString wxRadioBox::GetStringSelection(void) const
+wxString wxRadioBox::GetStringSelection() const
 {
 {
-    wxCHECK_MSG( m_widget != NULL, _T(""), _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, wxT(""), wxT("invalid radiobox") );
 
     wxNode *node = m_boxes.First();
     while (node)
 
     wxNode *node = m_boxes.First();
     while (node)
@@ -468,13 +487,13 @@ wxString wxRadioBox::GetStringSelection(void) const
         node = node->Next();
     }
 
         node = node->Next();
     }
 
-    wxFAIL_MSG( _T("wxRadioBox none selected") );
-    return _T("");
+    wxFAIL_MSG( wxT("wxRadioBox none selected") );
+    return wxT("");
 }
 
 bool wxRadioBox::SetStringSelection( const wxString &s )
 {
 }
 
 bool wxRadioBox::SetStringSelection( const wxString &s )
 {
-    wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid radiobox") );
+    wxCHECK_MSG( m_widget != NULL, FALSE, wxT("invalid radiobox") );
 
     int res = FindString( s );
     if (res == -1) return FALSE;
 
     int res = FindString( s );
     if (res == -1) return FALSE;
@@ -483,19 +502,19 @@ bool wxRadioBox::SetStringSelection( const wxString &s )
     return TRUE;
 }
 
     return TRUE;
 }
 
-int wxRadioBox::Number(void) const
+int wxRadioBox::Number() const
 {
     return m_boxes.Number();
 }
 
 {
     return m_boxes.Number();
 }
 
-int wxRadioBox::GetNumberOfRowsOrCols(void) const
+int wxRadioBox::GetNumberOfRowsOrCols() const
 {
     return 1;
 }
 
 void wxRadioBox::SetNumberOfRowsOrCols( int WXUNUSED(n) )
 {
 {
     return 1;
 }
 
 void wxRadioBox::SetNumberOfRowsOrCols( int WXUNUSED(n) )
 {
-    wxFAIL_MSG(_T("wxRadioBox::SetNumberOfRowsOrCols not implemented."));
+    wxFAIL_MSG(wxT("wxRadioBox::SetNumberOfRowsOrCols not implemented."));
 }
 
 void wxRadioBox::DisableEvents()
 }
 
 void wxRadioBox::DisableEvents()