]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/radiobox.cpp
Applied patch for non-Latin keyboards.
[wxWidgets.git] / src / mac / radiobox.cpp
index 70da0df49cf3d86360985c4ff1275e96f3697a6b..b18f098d3c4197e811a6c974acbddbda93a67f81 100644 (file)
 #endif
 
 #include "wx/radiobox.h"
-#include <wx/mac/uma.h>
+#include "wx/radiobut.h"
+#include "wx/mac/uma.h"
 
+#if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
+#endif
 
 #pragma mark -
 #pragma mark ### Constructors & destructor ###
@@ -29,6 +32,19 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
 //             ¥ wxRadioBox()
 //-------------------------------------------------------------------------------------
 // Default constructor
+BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
+EVT_RADIOBUTTON( -1 , wxRadioBox::OnRadioButton )
+END_EVENT_TABLE()
+
+void wxRadioBox::OnRadioButton( wxCommandEvent &outer )
+{
+    wxCommandEvent event(wxEVT_COMMAND_RADIOBOX_SELECTED, m_windowId);
+    int i = GetSelection() ;
+    event.SetInt( i );
+    event.SetString( GetString( i ) );
+    event.SetEventObject( this );
+    ProcessCommand(event);
+}
 
 wxRadioBox::wxRadioBox()
 {
@@ -93,7 +109,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
        Rect bounds ;
        Str255 title ;
        
-       MacPreControlCreate( parent , id ,  label , pos , size ,style, *((wxValidator*)NULL) , name , &bounds , title ) ;
+       MacPreControlCreate( parent , id ,  label , pos , size ,style, val , name , &bounds , title ) ;
 
        m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , true , 0 , 0 , 1, 
                kControlGroupBoxTextTitleProc , (long) this ) ;
@@ -102,8 +118,11 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
 
     for (i = 0; i < n; i++)
     {
-        wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10));
-        m_radioButtonCycle=radBtn->AddInCycle(m_radioButtonCycle);
+        wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10),
+          wxDefaultSize , i == 0 ? wxRB_GROUP : 0 ) ;
+        if ( i == 0 )
+          m_radioButtonCycle = radBtn ;
+//        m_radioButtonCycle=radBtn->AddInCycle(m_radioButtonCycle);
     }
 
        SetSelection(0);
@@ -418,7 +437,7 @@ void wxRadioBox::SetFocus()
 //-------------------------------------------------------------------------------------
 // Simulates the effect of the user issuing a command to the item
 
-#define RADIO_SIZE 20
+#define RADIO_SIZE 40
 
 void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
@@ -429,13 +448,15 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 
        int x_current, y_current;
        int x_offset,y_offset;
+    int widthOld, heightOld;
+    GetSize(&widthOld, &heightOld);
 
        x_offset = x;
        y_offset = y;
        GetPosition(&x_current, &y_current);
-       if ((x == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+       if ((x == -1) && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
                x_offset = x_current;
-       if ((y == -1) || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+       if ((y == -1)&& !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
                y_offset = y_current;
 
 // define size
@@ -463,7 +484,24 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
        totHeight = GetNumVer() * (maxHeight + charHeight/2) + charHeight*3/2;
        totWidth  = GetNumHor() * (maxWidth + charWidth) + charWidth;
 
-       wxControl::DoSetSize(x_offset,y_offset,totWidth,totHeight,wxSIZE_AUTO);
+    // only change our width/height if asked for
+    if ( width == -1 )
+    {
+        if ( sizeFlags & wxSIZE_AUTO_WIDTH )
+            width = totWidth ;
+        else
+            width = widthOld;
+    }
+
+    if ( height == -1 )
+    {
+        if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
+            height = totHeight ;
+        else
+            height = heightOld;
+    }
+
+       wxControl::DoSetSize(x_offset,y_offset,width,height,wxSIZE_AUTO);
 
 // arrange radiobuttons
 
@@ -471,7 +509,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
        
        
        x_start = charWidth;
-       y_start = charHeight*3/2;
+       y_start = 15 ;
        x_offset = x_start;
        y_offset = y_start;
        
@@ -488,7 +526,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                else
                        {
                                x_offset = x_start;
-                       y_offset += maxHeight + charHeight/2;
+                       y_offset += maxHeight ; /*+ charHeight/2;*/
                                }
                        }
 
@@ -496,7 +534,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
                current=current->NextInCycle();
                
                if (m_windowStyle & wxRA_SPECIFY_ROWS)
-                       y_offset += maxHeight + charHeight/2;
+                       y_offset += maxHeight ; /*+ charHeight/2;*/
                else
                        x_offset += maxWidth + charWidth;
                }