applied SourceForge patch #440594 which corrects ListBox related errors

in Carbon applications under Mac OS X
the LDEF resource is no longer used in Carbon applications


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11355 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Gilles Depeyrot
2001-08-12 15:15:03 +00:00
parent 050f7ffbd1
commit 60149370ac
3 changed files with 250 additions and 139 deletions

View File

@@ -66,6 +66,7 @@ public:
const wxString& name = wxListBoxNameStr); const wxString& name = wxListBoxNameStr);
virtual ~wxListBox(); virtual ~wxListBox();
virtual void Refresh(bool eraseBack = TRUE, const wxRect *rect = NULL);
// implement base class pure virtuals // implement base class pure virtuals
virtual void Clear(); virtual void Clear();

View File

@@ -20,9 +20,7 @@
#include "wx/log.h" #include "wx/log.h"
#include "wx/utils.h" #include "wx/utils.h"
#ifdef __DARWIN__ #ifndef __DARWIN__
#include "ldef/extldef.h"
#else
#include "extldef.h" #include "extldef.h"
#endif #endif
@@ -67,14 +65,49 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ; MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , kwxMacListWithVerticalScrollbar , 0 , 0, #if TARGET_CARBON
kControlListBoxProc , (long) this ) ; ListDefSpec listDef;
OptionBits options;
Size asize;
listDef.defType = kListDefStandardTextType;
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
14, 14, false, &listDef, &m_macControl );
GetControlData(m_macControl, kControlNoPart, kControlListBoxListHandleTag,
sizeof(ListHandle), (Ptr) &m_macList, &asize);
SetControlReference(m_macControl, (long) this);
SetControlVisibility(m_macControl, false, false);
options = 0;
if ( style & wxLB_MULTIPLE )
{
options += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
options += lExtendDrag ;
}
else
{
options = lOnlyOne ;
}
SetListSelectionFlags(m_macList, options);
#else
long result ; long result ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false ,
kwxMacListWithVerticalScrollbar , 0 , 0,
kControlListBoxProc , (long) this ) ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag ,
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
HLock( (Handle) m_macList ) ; HLock( (Handle) m_macList ) ;
NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ; NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ;
(**m_macList).selFlags = 0 ; (**m_macList).selFlags = 0 ;
if ( style & wxLB_MULTIPLE ) if ( style & wxLB_MULTIPLE )
{ {
@@ -88,20 +121,22 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
{ {
(**m_macList).selFlags = lOnlyOne ; (**m_macList).selFlags = lOnlyOne ;
} }
Point pt = (**m_macList).cellSize ; Point pt = (**m_macList).cellSize ;
pt.v = 14 ; pt.v = 14 ;
LCellSize( pt , m_macList ) ; LCellSize( pt , m_macList ) ;
LAddColumn( 1 , 0 , m_macList ) ; LAddColumn( 1 , 0 , m_macList ) ;
MacPostControlCreate() ;
ControlFontStyleRec controlstyle ; ControlFontStyleRec controlstyle ;
controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ; controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ;
//controlstyle.font = kControlFontSmallSystemFont ; //controlstyle.font = kControlFontSmallSystemFont ;
controlstyle.font = kFontIDMonaco ; controlstyle.font = kFontIDMonaco ;
controlstyle.size = 9 ; controlstyle.size = 9 ;
::UMASetControlFontStyle( m_macControl , &controlstyle ) ; //::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
#endif
MacPostControlCreate() ;
for ( int i = 0 ; i < n ; i++ ) for ( int i = 0 ; i < n ; i++ )
{ {
@@ -118,7 +153,9 @@ wxListBox::~wxListBox()
Free() ; Free() ;
if ( m_macList ) if ( m_macList )
{ {
#if !TARGET_CARBON
DisposeExtLDEFInfo( m_macList ) ; DisposeExtLDEFInfo( m_macList ) ;
#endif
m_macList = NULL ; m_macList = NULL ;
} }
} }
@@ -335,7 +372,7 @@ bool wxListBox::IsSelected(int N) const
void *wxListBox::DoGetItemClientData(int N) const void *wxListBox::DoGetItemClientData(int N) const
{ {
wxCHECK_MSG( N >= 0 && N < m_noItems, NULL, wxCHECK_MSG( N >= 0 && N < m_noItems, NULL,
"invalid index in wxListBox::GetClientData" ); wxT("invalid index in wxListBox::GetClientData"));
return (void *)m_dataArray[N]; return (void *)m_dataArray[N];
} }
@@ -461,6 +498,16 @@ void wxListBox::SetupColours()
SetForegroundColour(GetParent()->GetForegroundColour()); SetForegroundColour(GetParent()->GetForegroundColour());
} }
void wxListBox::Refresh(bool eraseBack, const wxRect *rect)
{
// Set up port
WindowRef rootwindow = GetMacRootWindow() ;
wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
wxMacDrawingHelper focus( wxrootwindow );
UMADrawControl(m_macControl);
}
#if wxUSE_OWNER_DRAWN #if wxUSE_OWNER_DRAWN
class wxListBoxItem : public wxOwnerDrawn class wxListBoxItem : public wxOwnerDrawn
@@ -503,20 +550,17 @@ void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refC
void wxListBox::MacDelete( int N ) void wxListBox::MacDelete( int N )
{ {
ListHandle list ; LDelRow( 1 , N , m_macList) ;
long result ; Refresh();
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &list , &result ) ;
LDelRow( 1 , N , list ) ;
} }
void wxListBox::MacInsert( int n , const char * text) void wxListBox::MacInsert( int n , const char * text)
{ {
Cell cell ; Cell cell = { 0 , 0 } ;
cell.h = 0 ;
cell.v = n ; cell.v = n ;
LAddRow( 1 , cell.v , m_macList ) ; LAddRow( 1 , cell.v , m_macList ) ;
LSetCell(text, strlen(text), cell, m_macList);
Refresh();
} }
void wxListBox::MacAppend( const char * text) void wxListBox::MacAppend( const char * text)
@@ -524,17 +568,20 @@ void wxListBox::MacAppend( const char * text)
Cell cell = { 0 , 0 } ; Cell cell = { 0 , 0 } ;
cell.v = (**m_macList).dataBounds.bottom ; cell.v = (**m_macList).dataBounds.bottom ;
LAddRow( 1 , cell.v , m_macList ) ; LAddRow( 1 , cell.v , m_macList ) ;
LSetCell(text, strlen(text), cell, m_macList);
Refresh();
} }
void wxListBox::MacClear() void wxListBox::MacClear()
{ {
LDelRow( (**m_macList).dataBounds.bottom , 0 , m_macList ) ; LDelRow( (**m_macList).dataBounds.bottom , 0 , m_macList ) ;
Refresh();
} }
void wxListBox::MacSetSelection( int n , bool select ) void wxListBox::MacSetSelection( int n , bool select )
{ {
Cell cell = { 0 , 0 } ; Cell cell = { 0 , 0 } ;
if ( LGetSelect( TRUE , &cell , m_macList ) ) if ( LGetSelect( true , &cell , m_macList ) )
{ {
LSetSelect( false , cell , m_macList ) ; LSetSelect( false , cell , m_macList ) ;
} }
@@ -542,6 +589,7 @@ void wxListBox::MacSetSelection( int n , bool select )
cell.v = n ; cell.v = n ;
LSetSelect( select , cell , m_macList ) ; LSetSelect( select , cell , m_macList ) ;
LAutoScroll( m_macList ) ; LAutoScroll( m_macList ) ;
Refresh();
} }
bool wxListBox::MacIsSelected( int n ) const bool wxListBox::MacIsSelected( int n ) const
@@ -589,7 +637,8 @@ void wxListBox::MacSet( int n , const char * text )
// so we just have to redraw // so we just have to redraw
Cell cell = { 0 , 0 } ; Cell cell = { 0 , 0 } ;
cell.v = n ; cell.v = n ;
LDraw( cell , m_macList ) ; LSetCell(text, strlen(text), cell, m_macList);
Refresh();
} }
void wxListBox::MacScrollTo( int n ) void wxListBox::MacScrollTo( int n )
@@ -599,7 +648,13 @@ void wxListBox::MacScrollTo( int n )
void wxListBox::OnSize( const wxSizeEvent &event) void wxListBox::OnSize( const wxSizeEvent &event)
{ {
Point pt = (**m_macList).cellSize ; Point pt;
#if TARGET_CARBON
GetListCellSize(m_macList, &pt);
#else
pt = (**m_macList).cellSize ;
#endif
pt.h = m_width - 15 ; pt.h = m_width - 15 ;
LCellSize( pt , m_macList ) ; LCellSize( pt , m_macList ) ;
} }

View File

@@ -20,9 +20,7 @@
#include "wx/log.h" #include "wx/log.h"
#include "wx/utils.h" #include "wx/utils.h"
#ifdef __DARWIN__ #ifndef __DARWIN__
#include "ldef/extldef.h"
#else
#include "extldef.h" #include "extldef.h"
#endif #endif
@@ -67,14 +65,49 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ; MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , kwxMacListWithVerticalScrollbar , 0 , 0, #if TARGET_CARBON
kControlListBoxProc , (long) this ) ; ListDefSpec listDef;
OptionBits options;
Size asize;
listDef.defType = kListDefStandardTextType;
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
14, 14, false, &listDef, &m_macControl );
GetControlData(m_macControl, kControlNoPart, kControlListBoxListHandleTag,
sizeof(ListHandle), (Ptr) &m_macList, &asize);
SetControlReference(m_macControl, (long) this);
SetControlVisibility(m_macControl, false, false);
options = 0;
if ( style & wxLB_MULTIPLE )
{
options += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
options += lExtendDrag ;
}
else
{
options = lOnlyOne ;
}
SetListSelectionFlags(m_macList, options);
#else
long result ; long result ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false ,
kwxMacListWithVerticalScrollbar , 0 , 0,
kControlListBoxProc , (long) this ) ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag ,
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
HLock( (Handle) m_macList ) ; HLock( (Handle) m_macList ) ;
NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ; NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ;
(**m_macList).selFlags = 0 ; (**m_macList).selFlags = 0 ;
if ( style & wxLB_MULTIPLE ) if ( style & wxLB_MULTIPLE )
{ {
@@ -88,20 +121,22 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
{ {
(**m_macList).selFlags = lOnlyOne ; (**m_macList).selFlags = lOnlyOne ;
} }
Point pt = (**m_macList).cellSize ; Point pt = (**m_macList).cellSize ;
pt.v = 14 ; pt.v = 14 ;
LCellSize( pt , m_macList ) ; LCellSize( pt , m_macList ) ;
LAddColumn( 1 , 0 , m_macList ) ; LAddColumn( 1 , 0 , m_macList ) ;
MacPostControlCreate() ;
ControlFontStyleRec controlstyle ; ControlFontStyleRec controlstyle ;
controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ; controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ;
//controlstyle.font = kControlFontSmallSystemFont ; //controlstyle.font = kControlFontSmallSystemFont ;
controlstyle.font = kFontIDMonaco ; controlstyle.font = kFontIDMonaco ;
controlstyle.size = 9 ; controlstyle.size = 9 ;
::UMASetControlFontStyle( m_macControl , &controlstyle ) ; //::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
#endif
MacPostControlCreate() ;
for ( int i = 0 ; i < n ; i++ ) for ( int i = 0 ; i < n ; i++ )
{ {
@@ -118,7 +153,9 @@ wxListBox::~wxListBox()
Free() ; Free() ;
if ( m_macList ) if ( m_macList )
{ {
#if !TARGET_CARBON
DisposeExtLDEFInfo( m_macList ) ; DisposeExtLDEFInfo( m_macList ) ;
#endif
m_macList = NULL ; m_macList = NULL ;
} }
} }
@@ -335,7 +372,7 @@ bool wxListBox::IsSelected(int N) const
void *wxListBox::DoGetItemClientData(int N) const void *wxListBox::DoGetItemClientData(int N) const
{ {
wxCHECK_MSG( N >= 0 && N < m_noItems, NULL, wxCHECK_MSG( N >= 0 && N < m_noItems, NULL,
"invalid index in wxListBox::GetClientData" ); wxT("invalid index in wxListBox::GetClientData"));
return (void *)m_dataArray[N]; return (void *)m_dataArray[N];
} }
@@ -461,6 +498,16 @@ void wxListBox::SetupColours()
SetForegroundColour(GetParent()->GetForegroundColour()); SetForegroundColour(GetParent()->GetForegroundColour());
} }
void wxListBox::Refresh(bool eraseBack, const wxRect *rect)
{
// Set up port
WindowRef rootwindow = GetMacRootWindow() ;
wxWindow* wxrootwindow = wxFindWinFromMacWindow( rootwindow ) ;
wxMacDrawingHelper focus( wxrootwindow );
UMADrawControl(m_macControl);
}
#if wxUSE_OWNER_DRAWN #if wxUSE_OWNER_DRAWN
class wxListBoxItem : public wxOwnerDrawn class wxListBoxItem : public wxOwnerDrawn
@@ -503,20 +550,17 @@ void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refC
void wxListBox::MacDelete( int N ) void wxListBox::MacDelete( int N )
{ {
ListHandle list ; LDelRow( 1 , N , m_macList) ;
long result ; Refresh();
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &list , &result ) ;
LDelRow( 1 , N , list ) ;
} }
void wxListBox::MacInsert( int n , const char * text) void wxListBox::MacInsert( int n , const char * text)
{ {
Cell cell ; Cell cell = { 0 , 0 } ;
cell.h = 0 ;
cell.v = n ; cell.v = n ;
LAddRow( 1 , cell.v , m_macList ) ; LAddRow( 1 , cell.v , m_macList ) ;
LSetCell(text, strlen(text), cell, m_macList);
Refresh();
} }
void wxListBox::MacAppend( const char * text) void wxListBox::MacAppend( const char * text)
@@ -524,17 +568,20 @@ void wxListBox::MacAppend( const char * text)
Cell cell = { 0 , 0 } ; Cell cell = { 0 , 0 } ;
cell.v = (**m_macList).dataBounds.bottom ; cell.v = (**m_macList).dataBounds.bottom ;
LAddRow( 1 , cell.v , m_macList ) ; LAddRow( 1 , cell.v , m_macList ) ;
LSetCell(text, strlen(text), cell, m_macList);
Refresh();
} }
void wxListBox::MacClear() void wxListBox::MacClear()
{ {
LDelRow( (**m_macList).dataBounds.bottom , 0 , m_macList ) ; LDelRow( (**m_macList).dataBounds.bottom , 0 , m_macList ) ;
Refresh();
} }
void wxListBox::MacSetSelection( int n , bool select ) void wxListBox::MacSetSelection( int n , bool select )
{ {
Cell cell = { 0 , 0 } ; Cell cell = { 0 , 0 } ;
if ( LGetSelect( TRUE , &cell , m_macList ) ) if ( LGetSelect( true , &cell , m_macList ) )
{ {
LSetSelect( false , cell , m_macList ) ; LSetSelect( false , cell , m_macList ) ;
} }
@@ -542,6 +589,7 @@ void wxListBox::MacSetSelection( int n , bool select )
cell.v = n ; cell.v = n ;
LSetSelect( select , cell , m_macList ) ; LSetSelect( select , cell , m_macList ) ;
LAutoScroll( m_macList ) ; LAutoScroll( m_macList ) ;
Refresh();
} }
bool wxListBox::MacIsSelected( int n ) const bool wxListBox::MacIsSelected( int n ) const
@@ -589,7 +637,8 @@ void wxListBox::MacSet( int n , const char * text )
// so we just have to redraw // so we just have to redraw
Cell cell = { 0 , 0 } ; Cell cell = { 0 , 0 } ;
cell.v = n ; cell.v = n ;
LDraw( cell , m_macList ) ; LSetCell(text, strlen(text), cell, m_macList);
Refresh();
} }
void wxListBox::MacScrollTo( int n ) void wxListBox::MacScrollTo( int n )
@@ -599,7 +648,13 @@ void wxListBox::MacScrollTo( int n )
void wxListBox::OnSize( const wxSizeEvent &event) void wxListBox::OnSize( const wxSizeEvent &event)
{ {
Point pt = (**m_macList).cellSize ; Point pt;
#if TARGET_CARBON
GetListCellSize(m_macList, &pt);
#else
pt = (**m_macList).cellSize ;
#endif
pt.h = m_width - 15 ; pt.h = m_width - 15 ;
LCellSize( pt , m_macList ) ; LCellSize( pt , m_macList ) ;
} }