X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/789f6795165f19cd16f0ba9f799add6a92720454..0be79c8a802fe65885198d7aa349e4ce7b46315b:/src/cocoa/radiobox.mm diff --git a/src/cocoa/radiobox.mm b/src/cocoa/radiobox.mm index 5d04a08528..c67639ccf1 100644 --- a/src/cocoa/radiobox.mm +++ b/src/cocoa/radiobox.mm @@ -1,11 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/radiobox.mm +// Name: src/cocoa/radiobox.mm // Purpose: wxRadioBox // Author: David Elliott // Modified by: // Created: 2003/02/15 -// RCS-ID: $Id: +// RCS-ID: $Id$ // Copyright: (c) 2003 David Elliott +// (c) 2007 Software 2000 Ltd. // Licence: wxWidgets licence ///////////////////////////////////////////////////////////////////////////// @@ -13,13 +14,20 @@ #if wxUSE_RADIOBOX +#include "wx/radiobox.h" + #ifndef WX_PRECOMP #include "wx/app.h" - #include "wx/radiobox.h" #include "wx/arrstr.h" #endif //WX_PRECOMP -#import +#include "wx/cocoa/string.h" +#include "wx/cocoa/autorelease.h" + +#include "wx/cocoa/objc/NSView.h" +#import +#import +#import IMPLEMENT_DYNAMIC_CLASS(wxRadioBox, wxControl) BEGIN_EVENT_TABLE(wxRadioBox, wxControl) @@ -50,13 +58,102 @@ bool wxRadioBox::Create(wxWindow *parent, wxWindowID winid, long style, const wxValidator& validator, const wxString& name) { + // We autorelease heavily so we want our own pool + wxAutoNSAutoreleasePool pool; + if(!CreateControl(parent,winid,pos,size,style,validator,name)) return false; - SetNSView([[NSView alloc] initWithFrame: MakeDefaultNSRect(size)]); + + majorDim = majorDim == 0 ? n : majorDim; + // TODO: Don't forget to call SetMajorDim + // We can't yet as we can't implement GetCount() until after + // we make the NSMatrix. + int minorDim = (n + majorDim - 1) / majorDim; + + + // Create a prototype cell for use with the NSMatrix build + NSCell *currCell = [[NSButtonCell alloc] initTextCell:@""]; + [(NSButtonCell*)currCell setButtonType:NSRadioButton]; + + // Build up an array of all cells plus any extra empty cells + NSMutableArray *allCells = [NSMutableArray arrayWithCapacity:n]; + for(int i=0; iCocoaAddChild(this); - SetInitialFrameRect(pos,size); + + // Do the sizer dance + [GetNSBox() sizeToFit]; + SetInitialFrameRect(pos, size); return true; } @@ -65,6 +162,11 @@ wxRadioBox::~wxRadioBox() { } +WX_NSMatrix wxRadioBox::GetNSMatrix() const +{ + return (NSMatrix*)[(NSBox*)m_cocoaNSView contentView]; +} + // selection void wxRadioBox::SetSelection(int n) { @@ -76,48 +178,43 @@ int wxRadioBox::GetSelection() const } // string access -int wxRadioBox::GetCount() const +unsigned int wxRadioBox::GetCount() const { - return 0; + NSMatrix *radioBox = GetNSMatrix(); + NSInteger rowCount, columnCount; + [radioBox getNumberOfRows:&rowCount columns:&columnCount]; + + // FIXME: This is wrong if padding cells were made + return rowCount * columnCount; } -wxString wxRadioBox::GetString(int n) const +wxString wxRadioBox::GetString(unsigned int n) const { return wxEmptyString; } -void wxRadioBox::SetString(int n, const wxString& label) +void wxRadioBox::SetString(unsigned int n, const wxString& label) { } // change the individual radio button state -bool wxRadioBox::Enable(int n, bool enable) +bool wxRadioBox::Enable(unsigned int n, bool enable) { // TODO return false; } -bool wxRadioBox::Show(int n, bool show) +bool wxRadioBox::Show(unsigned int n, bool show) { // TODO return false; } - // layout parameters -int wxRadioBox::GetColumnCount() const -{ - return 0; -} - -int wxRadioBox::GetRowCount() const -{ - return 0; -} - wxSize wxRadioBox::DoGetBestSize() const { - return wxSize(50,50); + // The NSBox responds to sizeToFit by sending sizeToFit to its contentView + // which is the NSMatrix and does the right thing. + return wxControl::DoGetBestSize(); } #endif -