// Created: 2003/03/18
// Id: $Id$
// Copyright: (c) 2003 David Elliott
-// Licence: wxWidgets licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
// class wxListBox
// ============================================================================
-IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems)
BEGIN_EVENT_TABLE(wxListBox, wxListBoxBase)
END_EVENT_TABLE()
WX_IMPLEMENT_COCOA_OWNER(wxListBox,NSTableView,NSControl,NSView)
// Add the single column
NSTableColumn *tableColumn = [[NSTableColumn alloc] initWithIdentifier:nil];
[GetNSTableView() addTableColumn: tableColumn];
+ // By default, entries should not be editable
+ [tableColumn setEditable:NO];
[tableColumn release];
[GetNSTableView() sizeToFit];
CocoaCreateNSScrollView();
SetInitialFrameRect(pos,size);
- [m_wxCocoaScrollView->GetNSScrollView() setHasVerticalScroller:YES];
- // Pre-10.3: Always show vertical scroller, never show horizontal scroller
- // Post-10.3: Show scrollers dynamically (turn them both on, set auto-hide)
- if([m_wxCocoaScrollView->GetNSScrollView() respondsToSelector:@selector(setAutohidesScrollers:)])
+ if ((style & wxLB_NEEDED_SB) || (style & wxLB_ALWAYS_SB))
{
- [m_wxCocoaScrollView->GetNSScrollView() setHasHorizontalScroller:YES];
- [m_wxCocoaScrollView->GetNSScrollView() setAutohidesScrollers:YES];
+ [m_wxCocoaScrollView->GetNSScrollView() setHasVerticalScroller: YES];
+ }
+
+ if (style & wxLB_HSCROLL)
+ {
+ [m_wxCocoaScrollView->GetNSScrollView() setHasHorizontalScroller: YES];
+ }
+
+ // We can't set auto-hiding individually for horizontal/vertical scrollers,
+ // so we have settled on always allowing hiding for both unless the vertical
+ // setting is "always show".
+ if (((style & wxLB_NEEDED_SB) || (style & wxLB_HSCROLL)) && !(style & wxLB_ALWAYS_SB))
+ {
+ if ([m_wxCocoaScrollView->GetNSScrollView() respondsToSelector:@selector(setAutohidesScrollers:)])
+ {
+ [m_wxCocoaScrollView->GetNSScrollView() setAutohidesScrollers: YES];
+ }
}
// Set up extended/multiple selection flags
return true;
}
+wxSize wxListBox::DoGetBestSize() const
+{
+ wxSize size = wxControlWithItems::DoGetBestSize();
+ // Limit best size to 100x100. It can be smaller if none of the items are very
+ // wide or if there aren't many items, but anything bigger than 100x100 ought
+ // to be asked for by the programmer. The 100x100 size is based on being barely
+ // enough for a scroller to be usable.
+ if(size.GetWidth() > 100)
+ size.SetWidth(100);
+ if(size.GetHeight() > 100)
+ size.SetHeight(100);
+ return size;
+}
+
wxListBox::~wxListBox()
{
[GetNSTableView() setDataSource: nil];