#pragma implementation "listbox.h"
#endif
+#include "wx/app.h"
#include "wx/listbox.h"
#include "wx/settings.h"
#include "wx/dynarray.h"
#include "wx/log.h"
#include "wx/utils.h"
-#include "extldef.h"
+#ifdef __UNIX__
+ #include "ldef/extldef.h"
+#else
+ #include "extldef.h"
+#endif
#if !USE_SHARED_LIBRARY
IMPLEMENT_DYNAMIC_CLASS(wxListBox, wxControl)
{
m_noItems = 0;
m_selected = 0;
+ m_macList = NULL ;
}
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 ) ;
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 ;
}
{
(**m_macList).selFlags += lExtendDrag ;
}
+ else
+ {
+ (**m_macList).selFlags = lOnlyOne ;
+ }
Point pt = (**m_macList).cellSize ;
pt.v = 14 ;
LCellSize( pt , m_macList ) ;
wxListBox::~wxListBox()
{
Free() ;
- DisposeExtLDEFInfo( m_macList ) ;
+ if ( m_macList )
+ {
+ DisposeExtLDEFInfo( m_macList ) ;
+ m_macList = NULL ;
+ }
}
void wxListBox::Free()
}
#endif // wxUSE_OWNER_DRAWN/!wxUSE_OWNER_DRAWN
m_stringArray.Remove( N ) ;
- m_noItems --;
+ m_dataArray.Remove( N ) ;
+ m_noItems --;
MacDelete( N ) ;
}
if( wxApp::s_macDefaultEncodingIsPC )
{
m_stringArray.Add( wxMacMakeMacStringFromPC( item ) ) ;
+ m_dataArray.Add( NULL );
}
- else
+ else {
m_stringArray.Add( item ) ;
+ m_dataArray.Add( NULL );
+ }
m_noItems ++;
+ DoSetItemClientData( index , NULL ) ;
MacAppend( item ) ;
return index ;
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
{
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 ;
+
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) s2 , search.c_str() ) ;
+#else
+ strcpy( (char *) s2 , search.c_str() ) ;
+ c2pstr( (char *) s2 ) ;
+#endif
+
+ for ( int i = 0 ; i < m_noItems ; ++ i )
+ {
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) s1 , m_stringArray[i].Left( len ).c_str() ) ;
+#else
+ strcpy( (char *) s1 , m_stringArray[i].Left( len ).c_str() ) ;
+ c2pstr( (char *) s1 ) ;
+#endif
+ if ( EqualString( s1 , s2 , false , false ) )
+ return i ;
+ }
+ if ( s.Left(1) = "*" && s.Length() > 1 )
+ {
+ s.MakeLower() ;
+ for ( int i = 0 ; i < m_noItems ; ++i )
+ {
+ if ( GetString(i).Lower().Matches(s) )
+ return i ;
+ }
+ }
+
}
else
{
- for ( int i = 0 ; i < m_noItems ; ++ i )
- {
- if ( equalstring( m_stringArray[i] , s , false , false ) )
- return i ;
- }
+ Str255 s1 , s2 ;
+
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) s2 , s.c_str() ) ;
+#else
+ strcpy( (char *) s2 , s.c_str() ) ;
+ c2pstr( (char *) s2 ) ;
+#endif
+
+ for ( int i = 0 ; i < m_noItems ; ++ i )
+ {
+#if TARGET_CARBON
+ c2pstrcpy( (StringPtr) s1 , m_stringArray[i].c_str() ) ;
+#else
+ strcpy( (char *) s1 , m_stringArray[i].c_str() ) ;
+ c2pstr( (char *) s1 ) ;
+#endif
+ if ( EqualString( s1 , s2 , false , false ) )
+ return i ;
+ }
}
return -1;
}
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)
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 ) ;
}
-wxSize wxListBox::DoGetBestSize()
+wxSize wxListBox::DoGetBestSize() const
{
return wxSize(100, 100);
}
{
ListHandle list ;
long result ;
- Cell cell = { 0 , 0 } ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &list , &result ) ;
LDelRow( 1 , N , list ) ;
}
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 ) ;
}
int n, count = GetSelections(aSelections);
if ( count > 0 )
{
- event.m_commandInt = aSelections[0] ;
- if ( HasClientObjectData() )
+ n = aSelections[0];
+ if ( HasClientObjectData() )
event.SetClientObject( GetClientObject(n) );
else if ( HasClientUntypedData() )
event.SetClientData( GetClientData(n) );