X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/37e2cb08cd1910ec5a14b38f0addfc6e2e8e172e..99397a94d0084648c96c3195e73feb64821ed305:/src/mac/carbon/listbox.cpp?ds=sidebyside diff --git a/src/mac/carbon/listbox.cpp b/src/mac/carbon/listbox.cpp index 3b062f04e5..6564af7b77 100644 --- a/src/mac/carbon/listbox.cpp +++ b/src/mac/carbon/listbox.cpp @@ -21,11 +21,13 @@ #include "wx/utils.h" #include "extldef.h" +#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControl) BEGIN_EVENT_TABLE(wxListBox, wxControl) EVT_SIZE( wxListBox::OnSize ) END_EVENT_TABLE() +#endif #include @@ -41,6 +43,7 @@ wxListBox::wxListBox() { m_noItems = 0; m_selected = 0; + m_macList = NULL ; } bool wxListBox::Create(wxWindow *parent, wxWindowID id, @@ -56,8 +59,6 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, Rect bounds ; Str255 title ; - m_macHorizontalBorder = 5 ; // additional pixels around the real control - m_macVerticalBorder = 5 ; MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ; @@ -67,9 +68,10 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, long result ; UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &m_macList , &result ) ; + HLock( (Handle) m_macList ) ; NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ; - (**m_macList).selFlags = lOnlyOne ; - if ( style & wxLB_MULTIPLE ) + (**m_macList).selFlags = 0 ; + if ( style & wxLB_MULTIPLE ) { (**m_macList).selFlags += lNoExtend ; } @@ -77,6 +79,10 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, { (**m_macList).selFlags += lExtendDrag ; } + else + { + (**m_macList).selFlags = lOnlyOne ; + } Point pt = (**m_macList).cellSize ; pt.v = 14 ; LCellSize( pt , m_macList ) ; @@ -105,7 +111,11 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id, wxListBox::~wxListBox() { Free() ; - DisposeExtLDEFInfo( m_macList ) ; + if ( m_macList ) + { + DisposeExtLDEFInfo( m_macList ) ; + m_macList = NULL ; + } } void wxListBox::Free() @@ -151,7 +161,8 @@ void wxListBox::Delete(int N) } #endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN m_stringArray.Remove( N ) ; - m_noItems --; + m_dataArray.Remove( N ) ; + m_noItems --; MacDelete( N ) ; } @@ -185,7 +196,7 @@ void wxListBox::DoSetItems(const wxArrayString& choices, void** clientData) wxASSERT_MSG(clientData[i] == NULL, wxT("Can't use client data with owner-drawn listboxes")); #else // !wxUSE_OWNER_DRAWN - Append( choices[i] , clientData[0] ) ; + Append( choices[i] , clientData[i] ) ; #endif } else @@ -231,19 +242,29 @@ int wxListBox::FindString(const wxString& st) const { wxString search = s.Left( s.Length() - 1 ) ; int len = search.Length() ; - for ( int i = 0 ; i < m_noItems ; ++ i ) - { - if ( equalstring( m_stringArray[i].Left( len ) , search , false , false ) ) - return i ; - } + Str255 s1 , s2 ; + strcpy( (char*) s2 , search.c_str() ) ; + c2pstr( (char*) s2 ) ; + for ( int i = 0 ; i < m_noItems ; ++ i ) + { + strcpy( (char*) s1 , m_stringArray[i].Left( len ).c_str() ) ; + c2pstr( (char*) s1 ) ; + if ( EqualString( s1 , s2 , false , false ) ) + return i ; + } } else { - for ( int i = 0 ; i < m_noItems ; ++ i ) - { - if ( equalstring( m_stringArray[i] , s , false , false ) ) - return i ; - } + Str255 s1 , s2 ; + strcpy( (char*) s2 , s.c_str() ) ; + c2pstr( (char*) s2 ) ; + for ( int i = 0 ; i < m_noItems ; ++ i ) + { + strcpy( (char*) s1 , m_stringArray[i].c_str() ) ; + c2pstr( (char*) s1 ) ; + if ( EqualString( s1 , s2 , false , false ) ) + return i ; + } } return -1; } @@ -298,7 +319,16 @@ void wxListBox::DoSetItemClientData(int N, void *Client_data) wxFAIL_MSG(wxT("Can't use client data with owner-drawn listboxes")); } #endif // wxUSE_OWNER_DRAWN - m_dataArray[N] = (char*) Client_data ; + wxASSERT_MSG( m_dataArray.GetCount() >= N , "invalid client_data array" ) ; + + if ( m_dataArray.GetCount() > N ) + { + m_dataArray[N] = (char*) Client_data ; + } + else + { + m_dataArray.Add( (char*) Client_data ) ; + } } void wxListBox::DoSetItemClientObject(int n, wxClientData* clientData) @@ -365,7 +395,14 @@ void wxListBox::DoInsertItems(const wxArrayString& items, int pos) void wxListBox::SetString(int N, const wxString& s) { - m_stringArray[N] = s ; + wxString str ; + if( wxApp::s_macDefaultEncodingIsPC ) + { + str = wxMacMakeMacStringFromPC( s ) ; + } + else + str = s ; + m_stringArray[N] = str ; MacSet( N , s ) ; } @@ -525,7 +562,7 @@ void wxListBox::MacScrollTo( int n ) void wxListBox::OnSize( const wxSizeEvent &event) { Point pt = (**m_macList).cellSize ; - pt.h = m_width - 15 /* scrollbar */ - m_macHorizontalBorder * 2 ; + pt.h = m_width - 15 ; LCellSize( pt , m_macList ) ; }