]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/radiobox.cpp
ATSUStyle taken from font
[wxWidgets.git] / src / mac / carbon / radiobox.cpp
index 9ef60f55940169502ca6b111a60cb7a172b4935a..247071078253268ffdb6e064750a256779800ba5 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:       wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "radioboxbase.h"
 #pragma implementation "radiobox.h"
 #endif
@@ -18,7 +18,9 @@
 //         headers
 //-------------------------------------------------------------------------------------
 
-#include "wx/defs.h"
+#include "wx/wxprec.h"
+
+#include "wx/arrstr.h"
 
 #include "wx/radiobox.h"
 #include "wx/radiobut.h"
@@ -93,12 +95,26 @@ wxRadioBox::~wxRadioBox()
 //-------------------------------------------------------------------------------------
 // Create the radiobox for two-step construction
 
+bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
+                        const wxPoint& pos, const wxSize& size,
+                        const wxArrayString& choices,
+                        int majorDim, long style,
+                        const wxValidator& val, const wxString& name)
+{
+    wxCArrayString chs(choices);
+
+    return Create(parent, id, label, pos, size, chs.GetCount(),
+                  chs.GetStrings(), majorDim, style, val, name);
+}
+
 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)
 {
+    m_macIsUserPane = FALSE ;
+    
     if ( !wxControl::Create(parent, id, pos, size, style, val, name) )
         return false;
 
@@ -114,13 +130,18 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
         m_majorDim = majorDim ;
     
     
-    Rect bounds ;
-    Str255 title ;
-    
-    MacPreControlCreate( parent , id ,  wxStripMenuCodes(label) , pos , size ,style, val , name , &bounds , title ) ;
+    m_label = label ;
+
+    Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
+    if( bounds.right <= bounds.left )
+        bounds.right = bounds.left + 100 ;
+    if ( bounds.bottom <= bounds.top )
+        bounds.bottom = bounds.top + 100 ;
+   
+    m_peer = new wxMacControl() ;
     
-    m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , title , false , 0 , 0 , 1
-        kControlGroupBoxTextTitleProc , (long) this ) ;
+    verify_noerr(CreateGroupBoxControl(MAC_WXHWND(parent->MacGetTopLevelWindowRef()),&bounds, CFSTR("") 
+        true /*primary*/ , m_peer->GetControlRefAddr() ) ) ;  
     
     for (i = 0; i < n; i++)
     {
@@ -139,7 +160,7 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label,
     }
     
     SetSelection(0);
-    MacPostControlCreate() ;
+    MacPostControlCreate(pos,size) ;
     
     return TRUE;
 }
@@ -408,8 +429,8 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     int eachWidth[128],eachHeight[128];
     int totWidth,totHeight;
     
-    SetFont(GetParent()->GetFont());
     GetTextExtent(wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight);
+
     charWidth/=52;
     
     maxWidth=-1;
@@ -423,14 +444,16 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
         if (maxHeight<eachHeight[i]) maxHeight = eachHeight[i];
           }
     
-    totHeight = GetRowCount() * (maxHeight + charHeight/2) + charHeight ;
-    totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
+    totHeight = GetRowCount() * ( maxHeight ) ;
+    totWidth  = GetColumnCount() * (maxWidth + charWidth) ;
+
+    wxSize sz = DoGetSizeFromClientSize( wxSize( totWidth , totHeight ) ) ;
     
     // only change our width/height if asked for
     if ( width == -1 )
     {
         if ( sizeFlags & wxSIZE_AUTO_WIDTH )
-            width = totWidth ;
+            width = sz.x ;
         else
             width = widthOld;
     }
@@ -438,7 +461,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     if ( height == -1 )
     {
         if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
-            height = totHeight ;
+            height = sz.y ;
         else
             height = heightOld;
     }
@@ -450,13 +473,9 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     int x_start,y_start;
     
     
-    x_start = charWidth;
-    y_start = 15 ;
-    if ( UMAGetSystemVersion() >= 0x1030 )
-    {
-               //need to add a few more pixels for the top border on panther
-               y_start = y_start + 5; //how many exactly should this be to meet the HIG?
-    }
+    x_start = 0;
+    y_start = 0 ;
+
     x_offset = x_start;
     y_offset = y_start;
     
@@ -465,7 +484,7 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
     {
         if (i&&((i%m_majorDim)==0)) // not to do for the zero button!
         {
-            if (m_windowStyle & wxRA_VERTICAL)
+            if (m_windowStyle & wxRA_SPECIFY_ROWS)
             {
                 x_offset += maxWidth + charWidth;
                 y_offset = y_start;
@@ -494,9 +513,10 @@ wxSize wxRadioBox::DoGetBestSize() const
     int eachWidth, eachHeight;
     int totWidth, totHeight;
     
-    wxFont font = GetParent()->GetFont();
+    wxFont font = /*GetParent()->*/GetFont();
     GetTextExtent(wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
         &charWidth, &charHeight, NULL, NULL, &font);
+
     charWidth /= 52;
     
     maxWidth = -1;
@@ -504,21 +524,20 @@ wxSize wxRadioBox::DoGetBestSize() const
     
     for (int i = 0 ; i < m_noItems; i++)
     {
-        GetTextExtent(GetString(i), &eachWidth, &eachHeight);
+        GetTextExtent(GetString(i), &eachWidth, &eachHeight,NULL, NULL, &font);
         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 ;
-    totWidth  = GetColumnCount() * (maxWidth + charWidth) + charWidth;
+    totHeight = GetRowCount() * (maxHeight ) ;
+    totWidth  = GetColumnCount() * (maxWidth + charWidth) ;
+    
+    wxSize sz = DoGetSizeFromClientSize( wxSize( totWidth , totHeight ) ) ;
+    totWidth = sz.x ;
+    totHeight = sz.y ;
     
-    if ( UMAGetSystemVersion() >= 0x1030 )
-    {
-        //need to add a few more pixels for the static boxborder on panther
-        totHeight = totHeight + 10; //how many exactly should this be to meet the HIG?
-    }
     // handle radio box title as well
     GetTextExtent(GetTitle(), &eachWidth, NULL);
     eachWidth  = (int)(eachWidth + RADIO_SIZE) + 3 * charWidth ;