X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/493c9f6bb22eef04391998cb1770cf32f1cc6efc..cd3c2375e6fddd3d478a6776900c21aaeb2d0f08:/src/mac/radiobox.cpp?ds=sidebyside diff --git a/src/mac/radiobox.cpp b/src/mac/radiobox.cpp index 905618716f..6c9ba1abb2 100644 --- a/src/mac/radiobox.cpp +++ b/src/mac/radiobox.cpp @@ -14,9 +14,12 @@ //------------------------------------------------------------------------------------- #ifdef __GNUG__ -#pragma implementation "radiobox.h" + #pragma implementation "radioboxbase.h" + #pragma implementation "radiobox.h" #endif +#include "wx/defs.h" + #include "wx/radiobox.h" #include "wx/radiobut.h" #include "wx/mac/uma.h" @@ -109,29 +112,27 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, m_majorDim = majorDim ; - Rect bounds ; - Str255 title ; - - MacPreControlCreate( parent , id , label , pos , size ,style, val , name , &bounds , title ) ; - - m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , 0 , 0 , 1, - kControlGroupBoxTextTitleProc , (long) this ) ; - - MacPostControlCreate() ; - + 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); } - SetSelection(0); - SetSize(pos.x,pos.y,size.x,size.y); + SetSelection(0); + MacPostControlCreate() ; - return TRUE; + return TRUE; } @@ -145,18 +146,18 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& label, bool wxRadioBox::Enable(bool enable) { - int i; + int i; wxRadioButton *current; if (!wxControl::Enable(enable)) - return (false); - - current=m_radioButtonCycle; - for (i=0;iEnable(enable); - current=current->NextInCycle(); - } - return (true); + current = current->NextInCycle(); + } + return true; } //------------------------------------------------------------------------------------- @@ -166,39 +167,19 @@ bool wxRadioBox::Enable(bool enable) 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(); - } -} - - -//------------------------------------------------------------------------------------- -// ¥ FindString -//------------------------------------------------------------------------------------- -// Finds a button matching the given string, returning the position if found -// or -1 if not found - -int wxRadioBox::FindString(const wxString& s) const -{ - int i; - wxRadioButton *current; - current=m_radioButtonCycle; - for (i = 0; i < m_noItems; i++) - { - if (s == current->GetLabel()) - return i; - current=current->NextInCycle(); + i = 0; + current = m_radioButtonCycle; + while (i != item) { + i++; + current = current->NextInCycle(); } - return -1; + current->Enable(enable); } //------------------------------------------------------------------------------------- @@ -216,19 +197,20 @@ wxString wxRadioBox::GetLabel() const //------------------------------------------------------------------------------------- // Returns the label for the given button -wxString wxRadioBox::GetLabel(int item) const +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 = 0; + current = m_radioButtonCycle; + while (i != item) { i++; - current=current->NextInCycle(); - } + current = current->NextInCycle(); + } return current->GetLabel(); } @@ -252,31 +234,6 @@ int wxRadioBox::GetSelection() const return i; } -//------------------------------------------------------------------------------------- -// ¥ GetString -//------------------------------------------------------------------------------------- -// Find string for position - -wxString wxRadioBox::GetString(int item) const -{ - - return GetLabel(item); -} - -//------------------------------------------------------------------------------------- -// ¥ GetStringSelection -//------------------------------------------------------------------------------------- -// Returns the selected string - -wxString wxRadioBox::GetStringSelection () const -{ - int sel = GetSelection (); - if (sel > -1) - return this->GetString (sel); - else - return wxString(""); -} - //------------------------------------------------------------------------------------- // ¥ Number //------------------------------------------------------------------------------------- @@ -300,7 +257,7 @@ void wxRadioBox::SetLabel(const wxString& label) //------------------------------------------------------------------------------------- // Sets the label of a given button -void wxRadioBox::SetLabel(int item,const wxString& label) +void wxRadioBox::SetString(int item,const wxString& label) { int i; wxRadioButton *current; @@ -339,24 +296,6 @@ void wxRadioBox::SetSelection(int item) } -//------------------------------------------------------------------------------------- -// ¥ SetStringSelection -//------------------------------------------------------------------------------------- -// Sets a button by passing the desired string. This does not cause -// wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted - -bool wxRadioBox::SetStringSelection (const wxString& s) -{ - int sel = FindString (s); - if (sel > -1) - { - SetSelection (sel); - return TRUE; - } - else - return FALSE; -} - //------------------------------------------------------------------------------------- // ¥ Show(bool) //------------------------------------------------------------------------------------- @@ -477,15 +416,15 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) maxHeight=-1; for (i = 0 ; i < m_noItems; i++) { - GetTextExtent(GetLabel(i), &eachWidth[i], &eachHeight[i]); + GetTextExtent(GetString(i), &eachWidth[i], &eachHeight[i]); eachWidth[i] = (int)(eachWidth[i] + RADIO_SIZE); eachHeight[i] = (int)((3*eachHeight[i])/2); if (maxWidthGetFont(); + GetTextExtent(wxString("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), + &charWidth, &charHeight, NULL, NULL, &font); + charWidth /= 52; + + 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; + totWidth = GetColumnCount() * (maxWidth + charWidth) + charWidth; + + // 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 //------------------------------------------------------------------------------------- // return the number of buttons in the vertical direction -int wxRadioBox::GetNumVer() const +int wxRadioBox::GetRowCount() const { if ( m_windowStyle & wxRA_SPECIFY_ROWS ) { @@ -565,7 +539,7 @@ int wxRadioBox::GetNumVer() const //------------------------------------------------------------------------------------- // return the number of buttons in the horizontal direction -int wxRadioBox::GetNumHor() const +int wxRadioBox::GetColumnCount() const { if ( m_windowStyle & wxRA_SPECIFY_ROWS ) {