X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/03647350fc7cd141953c72e0284e928847d30f44..eea4d01c65f9b29baa1193db762b4c6b8144af24:/src/osx/listbox_osx.cpp diff --git a/src/osx/listbox_osx.cpp b/src/osx/listbox_osx.cpp index 25a06fd79e..26e6f307a0 100644 --- a/src/osx/listbox_osx.cpp +++ b/src/osx/listbox_osx.cpp @@ -1,10 +1,10 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: src/osx/carbon/listbox.cpp +// Name: src/osx/listbox_osx.cpp // Purpose: wxListBox // Author: Stefan Csomor // Modified by: // Created: 1998-01-01 -// RCS-ID: $Id: listbox.cpp 54820 2008-07-29 20:04:11Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -24,8 +24,6 @@ #include "wx/dcclient.h" #endif -IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControlWithItems) - BEGIN_EVENT_TABLE(wxListBox, wxControl) END_EVENT_TABLE() @@ -73,8 +71,8 @@ bool wxListBox::Create( const wxValidator& validator, const wxString& name ) { + DontCreatePeer(); m_blockEvents = false; - m_macIsUserPane = false; wxASSERT_MSG( !(style & wxLB_MULTIPLE) || !(style & wxLB_EXTENDED), wxT("only a single listbox selection mode can be specified") ); @@ -87,7 +85,7 @@ bool wxListBox::Create( else m_strings.unsorted = new wxArrayString; - m_peer = wxWidgetImpl::CreateListBox( this, parent, id, pos, size, style, GetExtraStyle() ); + SetPeer(wxWidgetImpl::CreateListBox( this, parent, id, pos, size, style, GetExtraStyle() )); MacPostControlCreate( pos, size ); @@ -108,8 +106,7 @@ wxListBox::~wxListBox() m_blockEvents = false; // make sure no native events get sent to a object in destruction - delete m_peer; - m_peer = NULL; + SetPeer(NULL); if ( IsSorted() ) delete m_strings.sorted; @@ -208,6 +205,11 @@ int wxListBox::GetSelection() const return GetListPeer()->ListGetSelection(); } +int wxListBox::DoListHitTest(const wxPoint& inpoint) const +{ + return GetListPeer()->DoListHitTest( inpoint ); +} + // ---------------------------------------------------------------------------- // display // ---------------------------------------------------------------------------- @@ -225,7 +227,7 @@ void wxListBox::SetValueCallback( unsigned int WXUNUSED(n), wxListWidgetColumn* wxSize wxListBox::DoGetBestSize() const { int lbWidth = 100; // some defaults - int lbHeight = 110; + int lbHeight; int wLine; { @@ -275,7 +277,8 @@ wxListBox::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) attr.colFg = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT ); attr.colBg = wxSystemSettings::GetColour( wxSYS_COLOUR_LISTBOX ); - attr.font.CreateSystemFont(wxOSX_SYSTEM_FONT_VIEWS); + static wxFont font = wxFont(wxOSX_SYSTEM_FONT_VIEWS); + attr.font = font; return attr; } @@ -324,7 +327,6 @@ int wxListBox::FindString(const wxString& s, bool bCase) const void wxListBox::OnItemInserted(unsigned int WXUNUSED(pos)) { - } int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, @@ -352,6 +354,14 @@ int wxListBox::DoInsertItems(const wxArrayStringsAdapter& items, GetListPeer()->UpdateLineToEnd(startpos); + // Inserting the items may scroll the listbox down to show the last + // selected one but we don't want to do it as it could result in e.g. the + // first items of a listbox be hidden immediately after its creation so + // show the first selected item instead. Ideal would probably be to + // preserve the old selection unchanged, in fact, but I don't know how to + // get the first visible item so for now do at least this. + SetFirstItem(startpos); + UpdateOldSelections(); return idx;