X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8be10866cedb04e1072e411a094524d0efe98525..adfa6f1a48e0b22e06a7626198a28c240cc94cf3:/src/palmos/radiobox.cpp diff --git a/src/palmos/radiobox.cpp b/src/palmos/radiobox.cpp index f592c79cd8..a82b1e6f6f 100644 --- a/src/palmos/radiobox.cpp +++ b/src/palmos/radiobox.cpp @@ -110,9 +110,15 @@ IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) // wxRadioBox // --------------------------------------------------------------------------- +void wxRadioBox::Init() +{ + m_pos = wxPoint(0,0); + m_size = wxSize(0,0); +} + int wxRadioBox::GetCount() const { - return 0; + return m_radios.GetCount(); } int wxRadioBox::GetColumnCount() const @@ -137,11 +143,6 @@ int wxRadioBox::GetNumHor() const return 0; } -// Radio box item -wxRadioBox::wxRadioBox() -{ -} - bool wxRadioBox::Create(wxWindow *parent, wxWindowID id, const wxString& title, @@ -155,27 +156,60 @@ bool wxRadioBox::Create(wxWindow *parent, const wxString& name) { // initialize members - m_majorDim = majorDim == 0 ? n : majorDim; - - if(!wxControl::Create(parent, id, pos, size, style, val, name)) + m_majorDim = majorDim == 0 ? n : wxMin(majorDim, n); + if(m_majorDim==0 || n==0) return false; + + // subtype of the native palmOS radio: checkbox or push button? + const bool use_checkbox = style & wxRA_USE_CHECKBOX; + const bool use_cols = style & wxRA_SPECIFY_COLS; + + // get default size and position for the initial placement + m_size = size; + m_pos = pos; + int minor = n / m_majorDim; + if(n % m_majorDim > 0) minor++; + if(m_size.x==wxDefaultCoord) + m_size.x=36*(use_cols?m_majorDim:minor); + if(m_size.y==wxDefaultCoord) + m_size.y=12*(use_cols?minor:m_majorDim); + if(m_pos.x==wxDefaultCoord) + m_pos.x=0; + if(m_pos.y==wxDefaultCoord) + m_pos.y=0; + + m_label = title; + + if(!wxControl::Create(parent, id, m_pos, m_size, style, val, name)) return false; - for(int i=0; iSetGroup( id ); - rb->Create( - this, - wxID_ANY, - choices[n], - pos, - size, - ( n == 0 ? wxRB_GROUP : 0 ) | - ( style & wxRA_USE_CHECKBOX ) ? wxRB_USE_CHECKBOX : 0 - ); + for ( int k = 0; k < m_majorDim; k++ ) + { + if(iSetGroup( id ); + rb->Create( + this, + wxID_ANY, + choices[i], + start, + wxSize(end.x-start.x-1,end.y-start.y-1), + ( n == 0 ? wxRB_GROUP : 0 ) | + use_checkbox ? wxRB_USE_CHECKBOX : 0 + ); + m_radios.Put(i,rb); + i++; + } + } } - - SetSize(size); } bool wxRadioBox::Create(wxWindow *parent, @@ -199,8 +233,75 @@ wxRadioBox::~wxRadioBox() { } +wxRadioButton *wxRadioBox::GetRadioButton(int i) const +{ + return (wxRadioButton *)m_radios.Get(i); +} + +void wxRadioBox::DoGetPosition( int *x, int *y ) const +{ + *x = m_pos.x; + *y = m_pos.y; +} + +void wxRadioBox::DoGetSize( int *width, int *height ) const +{ + *width = m_size.x; + *height = m_size.y; +} + +void wxRadioBox::DoMoveWindow(int x, int y, int width, int height) +{ + wxRect oldRect = GetRect(); + + m_pos.x = x; + m_pos.y = y; + m_size.x = width; + m_size.y = height; + + const bool use_cols = HasFlag(wxRA_SPECIFY_COLS); + + const int n = GetCount(); + int minor = n / m_majorDim; + if(n % m_majorDim > 0) minor++; + + int i = 0; + for ( int j = 0; j < minor; j++ ) + { + for ( int k = 0; k < m_majorDim; k++ ) + { + if(iSetSize(start.x,start.y,end.x-start.x-1,end.y-start.y-1); + } + i++; + } + } + } + + // refresh old and new area + GetParent()->RefreshRect(oldRect.Union(GetRect())); +} + +// get the origin of the client area in the client coordinates +wxPoint wxRadioBox::GetClientAreaOrigin() const +{ + return GetPosition(); +} + void wxRadioBox::SetString(int item, const wxString& label) { + wxRadioButton *btn = GetRadioButton(item); + if(btn) + btn->SetLabel(label); } void wxRadioBox::SetSelection(int N) @@ -216,9 +317,10 @@ int wxRadioBox::GetSelection() const // Find string for position wxString wxRadioBox::GetString(int item) const { - wxString ret; - - return ret; + wxRadioButton *btn = GetRadioButton(item); + if(btn) + return btn->GetLabel(); + return wxEmptyString; } // ---------------------------------------------------------------------------- @@ -240,34 +342,68 @@ wxSize wxRadioBox::DoGetBestSize() const return wxSize(0,0); } -// Restored old code. -void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags) +void wxRadioBox::SetFocus() { } -void wxRadioBox::SetFocus() +// Enable all subcontrols +bool wxRadioBox::Enable(bool enable) { + for(int i=0; iEnable(enable); return false; } -// Enable a specific button -void wxRadioBox::Enable(int item, bool enable) +bool wxRadioBox::Show(bool show) { + for(int i=0; iShow(show); + RefreshRect(btn->GetRect()); + return ret; + } return false; } -// Show a specific button -void wxRadioBox::Show(int item, bool show) +wxString wxRadioBox::GetLabel() { + return m_label; +} + +void wxRadioBox::SetLabel(const wxString& label) +{ + m_label = label; +} + +void wxRadioBox::Refresh(bool eraseBack, const wxRect *rect) +{ + wxRect area = GetRect(); + + if(rect) + { + area.Offset(rect->GetPosition()); + area.SetSize(rect->GetSize()); + } + + GetParent()->RefreshRect(area); } void wxRadioBox::Command(wxCommandEvent & event)