#import <AppKit/NSScrollView.h>
#import <AppKit/NSCell.h>
-// ============================================================================
-// @class wxCocoaListBoxNSTableDataSource
-// ============================================================================
-// 2.8 hack: We can't add an i-var to wxListBox so we add one here
-@interface wxCocoaListBoxNSTableDataSource : wxCocoaNSTableDataSource
-{
- BOOL m_needsUpdate;
-}
-
-@end
-WX_DECLARE_GET_OBJC_CLASS(wxCocoaListBoxNSTableDataSource,wxCocoaNSTableDataSource)
-
-@implementation wxCocoaListBoxNSTableDataSource
-// No methods
-@end
-WX_IMPLEMENT_GET_OBJC_CLASS_WITH_UNIQUIFIED_SUPERCLASS(wxCocoaListBoxNSTableDataSource,wxCocoaNSTableDataSource)
-
// ============================================================================
// helper functions
IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems)
BEGIN_EVENT_TABLE(wxListBox, wxListBoxBase)
- EVT_IDLE(wxListBox::_WxCocoa_OnIdle)
END_EVENT_TABLE()
WX_IMPLEMENT_COCOA_OWNER(wxListBox,NSTableView,NSControl,NSView)
[GetNSTableView() setHeaderView: nil];
// Set up the data source
- m_cocoaDataSource = [[WX_GET_OBJC_CLASS(wxCocoaListBoxNSTableDataSource) alloc] init];
+ m_cocoaDataSource = [[WX_GET_OBJC_CLASS(wxCocoaNSTableDataSource) alloc] init];
[GetNSTableView() setDataSource:m_cocoaDataSource];
// Add the single column
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];
bool wxListBox::_WxCocoa_GetNeedsUpdate()
{
- return static_cast<wxCocoaListBoxNSTableDataSource*>(m_cocoaDataSource)->m_needsUpdate;
+ return m_needsUpdate;
}
void wxListBox::_WxCocoa_SetNeedsUpdate(bool needsUpdate)
{
- static_cast<wxCocoaListBoxNSTableDataSource*>(m_cocoaDataSource)->m_needsUpdate = needsUpdate;
+ m_needsUpdate = needsUpdate;
}
-void wxListBox::_WxCocoa_OnIdle(wxIdleEvent &event)
+void wxListBox::OnInternalIdle()
{
- event.Skip();
+ wxControlWithItems::OnInternalIdle();
if(_WxCocoa_GetNeedsUpdate())
{
_SetWidthOfTableColumnToFitItems([[GetNSTableView() tableColumns] objectAtIndex:0], m_cocoaItems);