X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd04970ab45eb2f392af48b71aa9ecd5d4b1c8c2..8064223b7b1b3657363b7a635c381b9269d95e55:/src/mac/carbon/radiobox.cpp diff --git a/src/mac/carbon/radiobox.cpp b/src/mac/carbon/radiobox.cpp index e2799918b4..69ce082c1b 100644 --- a/src/mac/carbon/radiobox.cpp +++ b/src/mac/carbon/radiobox.cpp @@ -1,51 +1,43 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: radiobox.cpp +// Name: src/mac/carbon/radiobox.cpp // Purpose: wxRadioBox // Author: Stefan Csomor // Modified by: JS Lair (99/11/15) first implementation // Created: 1998-01-01 // RCS-ID: $Id$ // Copyright: (c) Stefan Csomor -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "radioboxbase.h" -#pragma implementation "radiobox.h" -#endif - -//------------------------------------------------------------------------------------- -// headers -//------------------------------------------------------------------------------------- - #include "wx/wxprec.h" #if wxUSE_RADIOBOX -#include "wx/arrstr.h" - #include "wx/radiobox.h" -#include "wx/radiobut.h" + +#ifndef WX_PRECOMP + #include "wx/radiobut.h" + #include "wx/arrstr.h" +#endif + #include "wx/mac/uma.h" IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) -//------------------------------------------------------------------------------------- -// ¥ wxRadioBox() -//------------------------------------------------------------------------------------- -// Default constructor + BEGIN_EVENT_TABLE(wxRadioBox, wxControl) -EVT_RADIOBUTTON( wxID_ANY , wxRadioBox::OnRadioButton ) + EVT_RADIOBUTTON( wxID_ANY , wxRadioBox::OnRadioButton ) END_EVENT_TABLE() + void wxRadioBox::OnRadioButton( wxCommandEvent &outer ) { if ( outer.IsChecked() ) { - wxCommandEvent event(wxEVT_COMMAND_RADIOBOX_SELECTED, m_windowId); + wxCommandEvent event( wxEVT_COMMAND_RADIOBOX_SELECTED, m_windowId ); int i = GetSelection() ; - event.SetInt( i ); - event.SetString( GetString( i ) ); + event.SetInt(i); + event.SetString(GetString(i)); event.SetEventObject( this ); ProcessCommand(event); } @@ -55,352 +47,326 @@ wxRadioBox::wxRadioBox() { m_noItems = 0; m_noRowsOrCols = 0; - m_majorDim = 0 ; m_radioButtonCycle = NULL; } -//------------------------------------------------------------------------------------- -// ¥ wxRadioBox(wxWindow*, wxWindowID, const wxString&, const wxPoint&, -// const wxSize&, int, const wxString[], int, long, -// const wxValidator&, const wxString&) -//------------------------------------------------------------------------------------- -// Contructor, creating and showing a radiobox -// -// inline defined -// - -//------------------------------------------------------------------------------------- -// ¥ ~wxRadioBox -//------------------------------------------------------------------------------------- -// Destructor, destroying the radiobox item - wxRadioBox::~wxRadioBox() { m_isBeingDeleted = true; - wxRadioButton *next,*current; + wxRadioButton *next, *current; + + current = m_radioButtonCycle->NextInCycle(); + if (current != NULL) + { + while (current != m_radioButtonCycle) + { + next = current->NextInCycle(); + delete current; + + current = next; + } - current=m_radioButtonCycle->NextInCycle(); - next=current->NextInCycle(); - while (current!=m_radioButtonCycle) { delete current; - current=next; - next=current->NextInCycle(); } - delete current; } -//------------------------------------------------------------------------------------- -// ¥ Create -//------------------------------------------------------------------------------------- // 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) +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); + 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) +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) ) + if ( !wxControl::Create( parent, id, pos, size, style, val, name ) ) return false; int i; - m_noItems = n; + m_noItems = (unsigned int)n; m_noRowsOrCols = majorDim; m_radioButtonCycle = NULL; - if (majorDim==0) - m_majorDim = n ; - else - m_majorDim = majorDim ; - + SetMajorDim( majorDim == 0 ? n : majorDim, style ); - m_label = label ; + m_labelOrig = m_label = label; - Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ; - if( bounds.right <= bounds.left ) - bounds.right = bounds.left + 100 ; + 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 ; + bounds.bottom = bounds.top + 100; - m_peer = new wxMacControl(this) ; + m_peer = new wxMacControl( this ); - verify_noerr(CreateGroupBoxControl(MAC_WXHWND(parent->MacGetTopLevelWindowRef()),&bounds, CFSTR("") , - true /*primary*/ , m_peer->GetControlRefAddr() ) ) ; + OSStatus err = CreateGroupBoxControl( + MAC_WXHWND(parent->MacGetTopLevelWindowRef()), + &bounds, CFSTR("") , true /*primary*/, + m_peer->GetControlRefAddr() ); + verify_noerr( err ); for (i = 0; i < n; i++) { - wxRadioButton *radBtn = new wxRadioButton - ( - this, - wxID_ANY, - wxStripMenuCodes(choices[i]), - wxPoint(5,20*i+10), - wxDefaultSize, - i == 0 ? wxRB_GROUP : 0 - ); + wxRadioButton *radBtn = new wxRadioButton( + this, + wxID_ANY, + GetLabelText(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(pos,size) ; + SetSelection( 0 ); + MacPostControlCreate( pos, size ); return true; } - -//------------------------------------------------------------------------------------- -// ¥ Enable(bool) -//------------------------------------------------------------------------------------- // Enables or disables the entire radiobox - +// bool wxRadioBox::Enable(bool enable) { - int i; wxRadioButton *current; - if (!wxControl::Enable(enable)) + if (!wxControl::Enable( enable )) return false; current = m_radioButtonCycle; - for (i = 0; i < m_noItems; i++) { - current->Enable(enable); + for (unsigned int i = 0; i < m_noItems; i++) + { + current->Enable( enable ); current = current->NextInCycle(); } + return true; } -//------------------------------------------------------------------------------------- -// ¥ Enable(int, bool) -//------------------------------------------------------------------------------------- // Enables or disables an given button - -bool wxRadioBox::Enable(int item, bool enable) +// +bool wxRadioBox::Enable(unsigned int item, bool enable) { - int i; - wxRadioButton *current; + if (!IsValid( item )) + return false; + + unsigned int i = 0; + wxRadioButton *current = m_radioButtonCycle; + while (i != item) + { + i++; + current = current->NextInCycle(); + } + + return current->Enable( enable ); +} - if (!IsValid(item)) +bool wxRadioBox::IsItemEnabled(unsigned int item) const +{ + if (!IsValid( item )) return false; - i = 0; - current = m_radioButtonCycle; - while (i != item) { + unsigned int i = 0; + wxRadioButton *current = m_radioButtonCycle; + while (i != item) + { i++; current = current->NextInCycle(); } - return current->Enable(enable); + + return current->IsEnabled(); } -//------------------------------------------------------------------------------------- -// ¥ GetLabel() -//------------------------------------------------------------------------------------- // Returns the radiobox label - +// wxString wxRadioBox::GetLabel() const { return wxControl::GetLabel(); } -//------------------------------------------------------------------------------------- -// ¥ GetLabel(int) -//------------------------------------------------------------------------------------- // Returns the label for the given button - -wxString wxRadioBox::GetString(int item) const +// +wxString wxRadioBox::GetString(unsigned int item) const { - int i; wxRadioButton *current; - if (!IsValid(item)) + if (!IsValid( item )) return wxEmptyString; - i = 0; + unsigned int i = 0; current = m_radioButtonCycle; - while (i != item) { + while (i != item) + { i++; current = current->NextInCycle(); } + return current->GetLabel(); } -//------------------------------------------------------------------------------------- -// ¥ GetSelection -//------------------------------------------------------------------------------------- // Returns the zero-based position of the selected button - +// int wxRadioBox::GetSelection() const { int i; wxRadioButton *current; - i=0; - current=m_radioButtonCycle; - while (!current->GetValue()) { + i = 0; + current = m_radioButtonCycle; + while (!current->GetValue()) + { i++; - current=current->NextInCycle(); + current = current->NextInCycle(); } return i; } -//------------------------------------------------------------------------------------- -// ¥ Number -//------------------------------------------------------------------------------------- -// Returns the number of buttons in the radiobox -// -// inline defined -// - -//------------------------------------------------------------------------------------- -// ¥ SetLabel(const wxString&) -//------------------------------------------------------------------------------------- // Sets the radiobox label - +// void wxRadioBox::SetLabel(const wxString& label) { - return wxControl::SetLabel(label); + return wxControl::SetLabel( label ); } -//------------------------------------------------------------------------------------- -// ¥ SetLabel(int, const wxString&) -//------------------------------------------------------------------------------------- // Sets the label of a given button - -void wxRadioBox::SetString(int item,const wxString& label) +// +void wxRadioBox::SetString(unsigned int item,const wxString& label) { - int i; - wxRadioButton *current; - - if (!IsValid(item)) + if (!IsValid( item )) return; - i=0; - current=m_radioButtonCycle; - while (i!=item) { + + unsigned int i = 0; + wxRadioButton *current = m_radioButtonCycle; + while (i != item) + { i++; - current=current->NextInCycle(); + current = current->NextInCycle(); } - return current->SetLabel(label); + + return current->SetLabel( label ); } -//------------------------------------------------------------------------------------- -// ¥ SetSelection -//------------------------------------------------------------------------------------- // Sets a button by passing the desired position. This does not cause // wxEVT_COMMAND_RADIOBOX_SELECTED event to get emitted - +// void wxRadioBox::SetSelection(int item) { int i; wxRadioButton *current; - if (!IsValid(item)) + if (!IsValid( item )) return; - i=0; - current=m_radioButtonCycle; - while (i!=item) { + + i = 0; + current = m_radioButtonCycle; + while (i != item) + { i++; - current=current->NextInCycle(); + current = current->NextInCycle(); } - current->SetValue(true); + current->SetValue( true ); } -//------------------------------------------------------------------------------------- -// ¥ Show(bool) -//------------------------------------------------------------------------------------- // Shows or hides the entire radiobox - +// bool wxRadioBox::Show(bool show) { - int i; wxRadioButton *current; - wxControl::Show(show); - - current=m_radioButtonCycle; - for (i=0;iShow(show); - current=current->NextInCycle(); + current->Show( show ); + current = current->NextInCycle(); } + + wxControl::Show( show ); + return true; } -//------------------------------------------------------------------------------------- -// ¥ Show(int, bool) -//------------------------------------------------------------------------------------- // Shows or hides the given button - -bool wxRadioBox::Show(int item, bool show) +// +bool wxRadioBox::Show(unsigned int item, bool show) { - int i; - wxRadioButton *current; + if (!IsValid( item )) + return false; - if (!IsValid(item)) + unsigned int i = 0; + wxRadioButton *current = m_radioButtonCycle; + while (i != item) + { + i++; + current = current->NextInCycle(); + } + + return current->Show( show ); +} + +bool wxRadioBox::IsItemShown(unsigned int item) const +{ + if (!IsValid( item )) return false; - i=0; - current=m_radioButtonCycle; - while (i!=item) { + + unsigned int i = 0; + wxRadioButton *current = m_radioButtonCycle; + while (i != item) + { i++; - current=current->NextInCycle(); + current = current->NextInCycle(); } - return current->Show(show); + + return current->IsShown(); } -//------------------------------------------------------------------------------------- -// ¥ Command -//------------------------------------------------------------------------------------- -// Simulates the effect of the user issuing a command to the item -void wxRadioBox::Command (wxCommandEvent & event) +// Simulates the effect of the user issuing a command to the item +// +void wxRadioBox::Command( wxCommandEvent& event ) { - SetSelection (event.GetInt()); - ProcessCommand (event); + SetSelection( event.GetInt() ); + ProcessCommand( event ); } -//------------------------------------------------------------------------------------- -// ¥ SetFocus -//------------------------------------------------------------------------------------- // Sets the selected button to receive keyboard input - +// void wxRadioBox::SetFocus() { - int i; wxRadioButton *current; - i=0; - current=m_radioButtonCycle; - while (!current->GetValue()) { - i++; - current=current->NextInCycle(); + current = m_radioButtonCycle; + while (!current->GetValue()) + { + current = current->NextInCycle(); } + current->SetFocus(); } - -//------------------------------------------------------------------------------------- -// ¥ DoSetSize -//------------------------------------------------------------------------------------- // Simulates the effect of the user issuing a command to the item - +// #define RADIO_SIZE 20 void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) @@ -411,50 +377,58 @@ void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) // define the position int x_current, y_current; - int x_offset,y_offset; + int x_offset, y_offset; int widthOld, heightOld; - GetSize(&widthOld, &heightOld); + + GetSize( &widthOld, &heightOld ); + GetPosition( &x_current, &y_current ); x_offset = x; y_offset = y; - GetPosition(&x_current, &y_current); - if ((x == wxDefaultCoord) && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - x_offset = x_current; - if ((y == wxDefaultCoord)&& !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) - y_offset = y_current; + if (!(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + { + if (x == wxDefaultCoord) + x_offset = x_current; + if (y == wxDefaultCoord) + y_offset = y_current; + } // define size + int charWidth, charHeight; + int maxWidth, maxHeight; + int eachWidth[128], eachHeight[128]; + int totWidth, totHeight; - int charWidth,charHeight; - int maxWidth,maxHeight; - int eachWidth[128],eachHeight[128]; - int totWidth,totHeight; - - GetTextExtent(wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), &charWidth, &charHeight); + GetTextExtent( + wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), + &charWidth, &charHeight ); - charWidth/=52; + charWidth /= 52; - maxWidth=-1; - maxHeight=-1; - for (i = 0 ; i < m_noItems; i++) + maxWidth = -1; + maxHeight = -1; + for (unsigned int i = 0 ; i < m_noItems; i++) { - GetTextExtent(GetString(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 (maxWidth 0) && ((i % GetMajorDim()) == 0)) { if (m_windowStyle & wxRA_SPECIFY_ROWS) { @@ -493,15 +466,15 @@ 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 } } - current->SetSize(x_offset,y_offset,eachWidth[i],eachHeight[i]); - current=current->NextInCycle(); + current->SetSize( x_offset, y_offset, eachWidth[i], eachHeight[i]); + current = current->NextInCycle(); if (m_windowStyle & wxRA_SPECIFY_ROWS) - y_offset += maxHeight ; /*+ charHeight/2;*/ + y_offset += maxHeight ; // + charHeight / 2 else x_offset += maxWidth + charWidth; } @@ -514,71 +487,41 @@ wxSize wxRadioBox::DoGetBestSize() const int eachWidth, eachHeight; int totWidth, totHeight; - wxFont font = /*GetParent()->*/GetFont(); - GetTextExtent(wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), - &charWidth, &charHeight, NULL, NULL, &font); + wxFont font = GetFont(); // GetParent()->GetFont() + GetTextExtent( + wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), + &charWidth, &charHeight, NULL, NULL, &font ); charWidth /= 52; maxWidth = -1; maxHeight = -1; - for (int i = 0 ; i < m_noItems; i++) + for (unsigned int i = 0 ; i < m_noItems; i++) { - GetTextExtent(GetString(i), &eachWidth, &eachHeight,NULL, NULL, &font); - eachWidth = (int)(eachWidth + RADIO_SIZE) ; + 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; + if (maxWidth < eachWidth) + maxWidth = eachWidth; + if (maxHeight < eachHeight) + maxHeight = eachHeight; } - totHeight = GetRowCount() * (maxHeight ) ; - totWidth = GetColumnCount() * (maxWidth + charWidth) ; + totHeight = GetRowCount() * maxHeight; + totWidth = GetColumnCount() * (maxWidth + charWidth); - wxSize sz = DoGetSizeFromClientSize( wxSize( totWidth , totHeight ) ) ; - totWidth = sz.x ; - totHeight = sz.y ; + wxSize sz = DoGetSizeFromClientSize( wxSize( totWidth, totHeight ) ); + totWidth = sz.x; + totHeight = sz.y; // handle radio box title as well - GetTextExtent(GetTitle(), &eachWidth, NULL); - eachWidth = (int)(eachWidth + RADIO_SIZE) + 3 * charWidth ; + GetTextExtent( GetLabel(), &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::GetRowCount() const -{ - if ( m_windowStyle & wxRA_SPECIFY_ROWS ) - { - return m_majorDim; - } - else - { - return (m_noItems + m_majorDim - 1)/m_majorDim; - } -} - -//------------------------------------------------------------------------------------- -// ¥ GetNumHor -//------------------------------------------------------------------------------------- -// return the number of buttons in the horizontal direction - -int wxRadioBox::GetColumnCount() const -{ - if ( m_windowStyle & wxRA_SPECIFY_ROWS ) - { - return (m_noItems + m_majorDim - 1)/m_majorDim; - } - else - { - return m_majorDim; - } + return wxSize( totWidth, totHeight ); } -#endif +#endif // wxUSE_RADIOBOX