X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ae45f98300faa8347f0fc7869f115f8704136612..cc37ebe0908a89e62c400df586293df42310fe2c:/src/mac/radiobox.cpp

diff --git a/src/mac/radiobox.cpp b/src/mac/radiobox.cpp
index 2d002e7852..fbf840fc8d 100644
--- a/src/mac/radiobox.cpp
+++ b/src/mac/radiobox.cpp
@@ -1,23 +1,23 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        radiobox.cpp
 // Purpose:     wxRadioBox
-// Author:      AUTHOR
+// Author:      Stefan Csomor
 // Modified by: JS Lair (99/11/15) first implementation
-// Created:     ??/??/98
+// Created:     1998-01-01
 // RCS-ID:      $Id$
-// Copyright:   (c) AUTHOR
-// Licence:   	wxWindows licence
+// Copyright:   (c) Stefan Csomor
+// Licence:       wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-//-------------------------------------------------------------------------------------
-// 		headers
-//-------------------------------------------------------------------------------------
-
 #ifdef __GNUG__
-  #pragma implementation "radioboxbase.h"
-  #pragma implementation "radiobox.h"
+#pragma implementation "radioboxbase.h"
+#pragma implementation "radiobox.h"
 #endif
 
+//-------------------------------------------------------------------------------------
+//         headers
+//-------------------------------------------------------------------------------------
+
 #include "wx/defs.h"
 
 #include "wx/radiobox.h"
@@ -32,7 +32,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl)
 #pragma mark ### Constructors & destructor ###
 
 //-------------------------------------------------------------------------------------
-// 		¥ wxRadioBox()
+//         ¥ wxRadioBox()
 //-------------------------------------------------------------------------------------
 // Default constructor
 BEGIN_EVENT_TABLE(wxRadioBox, wxControl)
@@ -41,15 +41,15 @@ END_EVENT_TABLE()
 
 void wxRadioBox::OnRadioButton( wxCommandEvent &outer )
 {
-  if ( outer.IsChecked() )
-  {
-    wxCommandEvent event(wxEVT_COMMAND_RADIOBOX_SELECTED, m_windowId);
-    int i = GetSelection() ;
-    event.SetInt( i );
-    event.SetString( GetString( i ) );
-    event.SetEventObject( this );
-    ProcessCommand(event);
-  }
+    if ( outer.IsChecked() )
+    {
+        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()
@@ -61,9 +61,9 @@ wxRadioBox::wxRadioBox()
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ wxRadioBox(wxWindow*, wxWindowID, const wxString&, const wxPoint&, 
-//						const wxSize&, int, const wxString[], int, long, 
-//						const wxValidator&, const wxString&)
+//         ¥ wxRadioBox(wxWindow*, wxWindowID, const wxString&, const wxPoint&, 
+//                        const wxSize&, int, const wxString[], int, long, 
+//                        const wxValidator&, const wxString&)
 //-------------------------------------------------------------------------------------
 // Contructor, creating and showing a radiobox
 //
@@ -71,68 +71,68 @@ wxRadioBox::wxRadioBox()
 //
 
 //-------------------------------------------------------------------------------------
-// 		¥ ~wxRadioBox
+//         ¥ ~wxRadioBox
 //-------------------------------------------------------------------------------------
 // Destructor, destroying the radiobox item
 
 wxRadioBox::~wxRadioBox()
 {
-	wxRadioButton *next,*current;
-	
+    wxRadioButton *next,*current;
+    
     current=m_radioButtonCycle->NextInCycle();
     next=current->NextInCycle();
     while (current!=m_radioButtonCycle) {
-    	delete current;
-    	current=next;
-    	next=current->NextInCycle();
-    	}
+        delete current;
+        current=next;
+        next=current->NextInCycle();
+    }
     delete current;    
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ Create
+//         ¥ Create
 //-------------------------------------------------------------------------------------
 // Create the radiobox for two-step construction
 
 bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
-             const wxPoint& pos, const wxSize& size,
-             int n, const wxString choices[],
-             int majorDim, long style,
-             const wxValidator& val, const wxString& name)
+                        const wxPoint& pos, const wxSize& size,
+                        int n, const wxString choices[],
+                        int majorDim, long style,
+                        const wxValidator& val, const wxString& name)
 {
     int i;
     
     m_noItems = n;
     m_noRowsOrCols = majorDim;
     m_radioButtonCycle = NULL;
-
+    
     if (majorDim==0)
         m_majorDim = n ;
     else
         m_majorDim = majorDim ;
-
-
-	Rect bounds ;
-	Str255 title ;
-	
-	MacPreControlCreate( parent , id ,  label , pos , size ,style, val , name , &bounds , title ) ;
-
-	m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1, 
-	  	kControlGroupBoxTextTitleProc , (long) this ) ;
-	
+    
+    
+    Rect bounds ;
+    Str255 title ;
+    
+    MacPreControlCreate( parent , id ,  wxStripMenuCodes(label) , pos , size ,style, val , name , &bounds , title ) ;
+    
+    m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1, 
+        kControlGroupBoxTextTitleProc , (long) this ) ;
+    
     for (i = 0; i < n; i++)
     {
-        wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(),choices[i],wxPoint(5,20*i+10),
-          wxDefaultSize , i == 0 ? wxRB_GROUP : 0 ) ;
+        wxRadioButton *radBtn = new wxRadioButton(this, NewControlId(), wxStripMenuCodes(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);
+            m_radioButtonCycle = radBtn ;
+        //        m_radioButtonCycle=radBtn->AddInCycle(m_radioButtonCycle);
     }
-
-	SetSelection(0);
-	MacPostControlCreate() ;
-
-  return TRUE;
+    
+    SetSelection(0);
+    MacPostControlCreate() ;
+    
+    return TRUE;
 }
 
 
@@ -140,48 +140,50 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
 #pragma mark ### Specific functions (reference v2) ###
 
 //-------------------------------------------------------------------------------------
-// 		¥ Enable(bool)
+//         ¥ Enable(bool)
 //-------------------------------------------------------------------------------------
 // Enables or disables the entire radiobox
 
 bool wxRadioBox::Enable(bool enable)
 {
-   	int i;
+    int i;
     wxRadioButton *current;
     
     if (!wxControl::Enable(enable))
-    	return (false);
-
-    current=m_radioButtonCycle;
-   	for (i=0;i<m_noItems;i++) {
-    	current->Enable(enable);
-    	current=current->NextInCycle();
-    	}
-    return (true);
+        return false;
+    
+    current = m_radioButtonCycle;
+    for (i = 0; i < m_noItems; i++) {
+        current->Enable(enable);
+        current = current->NextInCycle();
+    }
+    return true;
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ Enable(int, bool)
+//         ¥ Enable(int, bool)
 //-------------------------------------------------------------------------------------
 // Enables or disables an given button
 
 void wxRadioBox::Enable(int item, bool enable)
 {
-   	int i;
+    int i;
     wxRadioButton *current;
     
     if ((item < 0) || (item >= m_noItems))
         return;
-    i=0;
-    current=m_radioButtonCycle;
-    while (i!=item) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
+    
+    i = 0;
+    current = m_radioButtonCycle;
+    while (i != item) {
+        i++;
+        current = current->NextInCycle();
+    }
+    current->Enable(enable);
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ GetLabel()
+//         ¥ GetLabel()
 //-------------------------------------------------------------------------------------
 // Returns the radiobox label
 
@@ -191,28 +193,29 @@ wxString wxRadioBox::GetLabel() const
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ GetLabel(int)
+//         ¥ GetLabel(int)
 //-------------------------------------------------------------------------------------
 // Returns the label for the given button
 
 wxString wxRadioBox::GetString(int item) const
 {
-   	int i;
+    int i;
     wxRadioButton *current;
     
     if ((item < 0) || (item >= m_noItems))
-        return wxString("");
-    i=0;
-    current=m_radioButtonCycle;
-    while (i!=item) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
+        return wxEmptyString;
+    
+    i = 0;
+    current = m_radioButtonCycle;
+    while (i != item) {
+        i++;
+        current = current->NextInCycle();
+    }
     return current->GetLabel();
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ GetSelection
+//         ¥ GetSelection
 //-------------------------------------------------------------------------------------
 // Returns the zero-based position of the selected button
 
@@ -224,15 +227,15 @@ int wxRadioBox::GetSelection() const
     i=0;
     current=m_radioButtonCycle;
     while (!current->GetValue()) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
-
+        i++;
+        current=current->NextInCycle();
+    }
+    
     return i;
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ Number
+//         ¥ Number
 //-------------------------------------------------------------------------------------
 // Returns the number of buttons in the radiobox
 //
@@ -240,7 +243,7 @@ int wxRadioBox::GetSelection() const
 //
 
 //-------------------------------------------------------------------------------------
-// 		¥ SetLabel(const wxString&)
+//         ¥ SetLabel(const wxString&)
 //-------------------------------------------------------------------------------------
 // Sets the radiobox label
 
@@ -250,28 +253,28 @@ void wxRadioBox::SetLabel(const wxString& label)
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ SetLabel(int, const wxString&)
+//         ¥ SetLabel(int, const wxString&)
 //-------------------------------------------------------------------------------------
 // Sets the label of a given button
 
 void wxRadioBox::SetString(int item,const wxString& label)
 {
-   	int i;
+       int i;
     wxRadioButton *current;
     
     if ((item < 0) || (item >= m_noItems))
         return;
-	i=0;
+    i=0;
     current=m_radioButtonCycle;
     while (i!=item) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
+        i++;
+        current=current->NextInCycle();
+    }
     return current->SetLabel(label);
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ SetSelection
+//         ¥ SetSelection
 //-------------------------------------------------------------------------------------
 // Sets a button by passing the desired position. This does not cause 
 // wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted
@@ -286,15 +289,15 @@ void wxRadioBox::SetSelection(int item)
     i=0;
     current=m_radioButtonCycle;
     while (i!=item) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
+        i++;
+        current=current->NextInCycle();
+    }
     current->SetValue(true);
     
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ Show(bool)
+//         ¥ Show(bool)
 //-------------------------------------------------------------------------------------
 // Shows or hides the entire radiobox 
 
@@ -304,23 +307,23 @@ bool wxRadioBox::Show(bool show)
     wxRadioButton *current;
     
     wxControl::Show(show);
-
+    
     current=m_radioButtonCycle;
-   	for (i=0;i<m_noItems;i++) {
-    	current->Show(show);
-    	current=current->NextInCycle();
-    	}
+       for (i=0;i<m_noItems;i++) {
+        current->Show(show);
+        current=current->NextInCycle();
+    }
     return true;
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ Show(int, bool)
+//         ¥ Show(int, bool)
 //-------------------------------------------------------------------------------------
 // Shows or hides the given button 
 
 void wxRadioBox::Show(int item, bool show)
 {
-   	int i;
+       int i;
     wxRadioButton *current;
     
     if ((item < 0) || (item >= m_noItems))
@@ -328,9 +331,9 @@ void wxRadioBox::Show(int item, bool show)
     i=0;
     current=m_radioButtonCycle;
     while (i!=item) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
+        i++;
+        current=current->NextInCycle();
+    }
     current->Show(show);
 }
 
@@ -338,7 +341,7 @@ void wxRadioBox::Show(int item, bool show)
 #pragma mark ### Other external functions ###
 
 //-------------------------------------------------------------------------------------
-// 		¥ Command
+//         ¥ Command
 //-------------------------------------------------------------------------------------
 // Simulates the effect of the user issuing a command to the item
 
@@ -349,7 +352,7 @@ void wxRadioBox::Command (wxCommandEvent & event)
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ SetFocus
+//         ¥ SetFocus
 //-------------------------------------------------------------------------------------
 // Sets the selected button to receive keyboard input
 
@@ -361,10 +364,10 @@ void wxRadioBox::SetFocus()
     i=0;
     current=m_radioButtonCycle;
     while (!current->GetValue()) {
-    	i++;
-    	current=current->NextInCycle();
-    	}
-	current->SetFocus();
+        i++;
+        current=current->NextInCycle();
+    }
+    current->SetFocus();
 }
 
 
@@ -372,57 +375,57 @@ void wxRadioBox::SetFocus()
 #pragma mark ### Internal functions ###
 
 //-------------------------------------------------------------------------------------
-// 		¥ DoSetSize
+//         ¥ DoSetSize
 //-------------------------------------------------------------------------------------
 // Simulates the effect of the user issuing a command to the item
 
-#define RADIO_SIZE 40
+#define RADIO_SIZE 20
 
 void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
 {
-	int i;
-	wxRadioButton *current;
-
-// define the position
-
-	int x_current, y_current;
-	int x_offset,y_offset;
+    int i;
+    wxRadioButton *current;
+    
+    // define the position
+    
+    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))
-		x_offset = x_current;
-	if ((y == -1)&& !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
-		y_offset = y_current;
-
-// define size
-
-	int charWidth,charHeight;
-	int maxWidth,maxHeight;
-	int eachWidth[128],eachHeight[128];
+    
+    x_offset = x;
+    y_offset = y;
+    GetPosition(&x_current, &y_current);
+    if ((x == -1) && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+        x_offset = x_current;
+    if ((y == -1)&& !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
+        y_offset = y_current;
+    
+    // define size
+    
+    int charWidth,charHeight;
+    int maxWidth,maxHeight;
+    int eachWidth[128],eachHeight[128];
     int totWidth,totHeight;
-
-	SetFont(GetParent()->GetFont());
-	GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight);
-	charWidth/=52;
-
-	maxWidth=-1;
-	maxHeight=-1;
-	for (i = 0 ; i < m_noItems; i++)
-		{
-		GetTextExtent(GetString(i), &eachWidth[i], &eachHeight[i]);
-		eachWidth[i] = (int)(eachWidth[i] + RADIO_SIZE);
-		eachHeight[i] = (int)((3*eachHeight[i])/2);
-		if (maxWidth<eachWidth[i]) maxWidth = eachWidth[i];
-		if (maxHeight<eachHeight[i]) maxHeight = eachHeight[i];
-  		}
-
-	totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight*3/2;
-	totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
-
+    
+    SetFont(GetParent()->GetFont());
+    GetTextExtent(wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight);
+    charWidth/=52;
+    
+    maxWidth=-1;
+    maxHeight=-1;
+    for (i = 0 ; i < m_noItems; i++)
+    {
+        GetTextExtent(GetString(i), &eachWidth[i], &eachHeight[i]);
+        eachWidth[i] = (int)(eachWidth[i] + RADIO_SIZE);
+        eachHeight[i] = (int)((3*eachHeight[i])/2);
+        if (maxWidth<eachWidth[i]) maxWidth = eachWidth[i];
+        if (maxHeight<eachHeight[i]) maxHeight = eachHeight[i];
+          }
+    
+    totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight ;
+    totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
+    
     // only change our width/height if asked for
     if ( width == -1 )
     {
@@ -431,7 +434,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
         else
             width = widthOld;
     }
-
+    
     if ( height == -1 )
     {
         if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
@@ -439,44 +442,44 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
         else
             height = heightOld;
     }
-
-	wxControl::DoSetSize(x_offset,y_offset,width,height,wxSIZE_AUTO);
-
-// arrange radiobuttons
-
-	int x_start,y_start;
-	
-	
-	x_start = charWidth;
-	y_start = 15 ;
-	x_offset = x_start;
-	y_offset = y_start;
-	
-	current=m_radioButtonCycle;  
-	for ( i = 0 ; i < m_noItems; i++)
-		{
-		if (i&&((i%m_majorDim)==0)) // not to do for the zero button!
-    		{
-      		if (m_windowStyle & wxRA_VERTICAL)
-      			{
- 			    x_offset += maxWidth + charWidth;
-        		y_offset = y_start;
-				}
-      		else
-      			{
-				x_offset = x_start;
-        		y_offset += maxHeight ; /*+ charHeight/2;*/
-				}
-			}
-
-		current->SetSize(x_offset,y_offset,eachWidth[i],eachHeight[i]);
-		current=current->NextInCycle();
-		
-		if (m_windowStyle & wxRA_SPECIFY_ROWS)
-			y_offset += maxHeight ; /*+ charHeight/2;*/
-		else
-			x_offset += maxWidth + charWidth;
-		}
+    
+    wxControl::DoSetSize(x_offset,y_offset,width,height,wxSIZE_AUTO);
+    
+    // arrange radiobuttons
+    
+    int x_start,y_start;
+    
+    
+    x_start = charWidth;
+    y_start = 15 ;
+    x_offset = x_start;
+    y_offset = y_start;
+    
+    current=m_radioButtonCycle;  
+    for ( i = 0 ; i < m_noItems; i++)
+    {
+        if (i&&((i%m_majorDim)==0)) // not to do for the zero button!
+        {
+            if (m_windowStyle & wxRA_VERTICAL)
+            {
+                x_offset += maxWidth + charWidth;
+                y_offset = y_start;
+            }
+            else
+            {
+                x_offset = x_start;
+                y_offset += maxHeight ; /*+ charHeight/2;*/
+            }
+        }
+        
+        current->SetSize(x_offset,y_offset,eachWidth[i],eachHeight[i]);
+        current=current->NextInCycle();
+        
+        if (m_windowStyle & wxRA_SPECIFY_ROWS)
+            y_offset += maxHeight ; /*+ charHeight/2;*/
+        else
+            x_offset += maxWidth + charWidth;
+    }
 }
 
 wxSize wxRadioBox::DoGetBestSize() const
@@ -485,35 +488,37 @@ wxSize wxRadioBox::DoGetBestSize() const
     int maxWidth, maxHeight;
     int eachWidth, eachHeight;
     int totWidth, totHeight;
-
+    
     wxFont font = GetParent()->GetFont();
-    GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
-                  &charWidth, &charHeight, NULL, NULL, &font);
+    GetTextExtent(wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
+        &charWidth, &charHeight, NULL, NULL, &font);
     charWidth /= 52;
-
-   maxWidth = -1;
-   maxHeight = -1;
-
-   // handle radio box title as well
-   GetTextExtent(GetTitle(), &eachWidth, NULL);
-   eachWidth  = (int)(eachWidth + RADIO_SIZE);
-   if (maxWidth < eachWidth)     maxWidth = eachWidth;
-
-   for (int i = 0 ; i < m_noItems; i++)
-   {
+    
+    maxWidth = -1;
+    maxHeight = -1;
+    
+    for (int i = 0 ; i < m_noItems; i++)
+    {
         GetTextExtent(GetString(i), &eachWidth, &eachHeight);
         eachWidth  = (int)(eachWidth + RADIO_SIZE) ;
         eachHeight = (int)((3 * eachHeight) / 2);
         if (maxWidth < eachWidth)     maxWidth = eachWidth;
         if (maxHeight < eachHeight)   maxHeight = eachHeight;
     }
-
-    totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight * 3/2;
+    
+    totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight ;
     totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
-   return wxSize(totWidth, totHeight);
+    
+    // handle radio box title as well
+    GetTextExtent(GetTitle(), &eachWidth, NULL);
+    eachWidth  = (int)(eachWidth + RADIO_SIZE) + 3 * charWidth ;
+    if (totWidth < eachWidth)     
+        totWidth = eachWidth;
+    
+    return wxSize(totWidth, totHeight);
 }
 //-------------------------------------------------------------------------------------
-// 		¥ GetNumVer
+//         ¥ GetNumVer
 //-------------------------------------------------------------------------------------
 // return the number of buttons in the vertical direction
 
@@ -530,7 +535,7 @@ int wxRadioBox::GetRowCount() const
 }
 
 //-------------------------------------------------------------------------------------
-// 		¥ GetNumHor
+//         ¥ GetNumHor
 //-------------------------------------------------------------------------------------
 // return the number of buttons in the horizontal direction