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,7 +66,8 @@ 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();
virtual void Delete(int n); virtual void Delete(int n);

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
@@ -59,58 +57,95 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
const wxValidator& validator, const wxValidator& validator,
const wxString& name) const wxString& name)
{ {
m_noItems = 0 ; // this will be increased by our append command m_noItems = 0 ; // this will be increased by our append command
m_selected = 0; m_selected = 0;
Rect bounds ;
Str255 title ;
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
Rect bounds ; #if TARGET_CARBON
Str255 title ; ListDefSpec listDef;
OptionBits options;
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ; Size asize;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , kwxMacListWithVerticalScrollbar , 0 , 0, listDef.defType = kListDefStandardTextType;
kControlListBoxProc , (long) this ) ;
long result ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
HLock( (Handle) m_macList ) ; CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ; 14, 14, false, &listDef, &m_macControl );
(**m_macList).selFlags = 0 ;
if ( style & wxLB_MULTIPLE )
{
(**m_macList).selFlags += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
(**m_macList).selFlags += lExtendDrag ;
}
else
{
(**m_macList).selFlags = lOnlyOne ;
}
Point pt = (**m_macList).cellSize ;
pt.v = 14 ;
LCellSize( pt , m_macList ) ;
LAddColumn( 1 , 0 , m_macList ) ; GetControlData(m_macControl, kControlNoPart, kControlListBoxListHandleTag,
sizeof(ListHandle), (Ptr) &m_macList, &asize);
MacPostControlCreate() ; SetControlReference(m_macControl, (long) this);
SetControlVisibility(m_macControl, false, false);
ControlFontStyleRec controlstyle ; options = 0;
controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ; if ( style & wxLB_MULTIPLE )
//controlstyle.font = kControlFontSmallSystemFont ; {
controlstyle.font = kFontIDMonaco ; options += lNoExtend ;
controlstyle.size = 9 ; }
::UMASetControlFontStyle( m_macControl , &controlstyle ) ; else if ( style & wxLB_EXTENDED )
{
options += lExtendDrag ;
}
else
{
options = lOnlyOne ;
}
SetListSelectionFlags(m_macList, options);
for ( int i = 0 ; i < n ; i++ ) #else
{ long result ;
Append( choices[i] ) ;
}
LSetDrawingMode( true , m_macList ) ; 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 ) ;
return TRUE; HLock( (Handle) m_macList ) ;
NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ;
(**m_macList).selFlags = 0 ;
if ( style & wxLB_MULTIPLE )
{
(**m_macList).selFlags += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
(**m_macList).selFlags += lExtendDrag ;
}
else
{
(**m_macList).selFlags = lOnlyOne ;
}
Point pt = (**m_macList).cellSize ;
pt.v = 14 ;
LCellSize( pt , m_macList ) ;
LAddColumn( 1 , 0 , m_macList ) ;
ControlFontStyleRec controlstyle ;
controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ;
//controlstyle.font = kControlFontSmallSystemFont ;
controlstyle.font = kFontIDMonaco ;
controlstyle.size = 9 ;
//::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
#endif
MacPostControlCreate() ;
for ( int i = 0 ; i < n ; i++ )
{
Append( choices[i] ) ;
}
LSetDrawingMode( true , m_macList ) ;
return TRUE;
} }
wxListBox::~wxListBox() wxListBox::~wxListBox()
@@ -118,8 +153,10 @@ wxListBox::~wxListBox()
Free() ; Free() ;
if ( m_macList ) if ( m_macList )
{ {
DisposeExtLDEFInfo( m_macList ) ; #if !TARGET_CARBON
m_macList = NULL ; DisposeExtLDEFInfo( m_macList ) ;
#endif
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,38 +550,38 @@ 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.v = n ;
cell.h = 0 ; LAddRow( 1 , cell.v , m_macList ) ;
cell.v = n ; LSetCell(text, strlen(text), cell, m_macList);
Refresh();
LAddRow( 1 , cell.v , m_macList ) ;
} }
void wxListBox::MacAppend( const char * text) 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
@@ -553,7 +601,7 @@ bool wxListBox::MacIsSelected( int n ) const
void wxListBox::MacDestroy() void wxListBox::MacDestroy()
{ {
// DisposeExtLDEFInfo( m_macList ) ; // DisposeExtLDEFInfo( m_macList ) ;
} }
int wxListBox::MacGetSelection() const int wxListBox::MacGetSelection() 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,9 +648,15 @@ void wxListBox::MacScrollTo( int n )
void wxListBox::OnSize( const wxSizeEvent &event) void wxListBox::OnSize( const wxSizeEvent &event)
{ {
Point pt = (**m_macList).cellSize ; Point pt;
pt.h = m_width - 15 ;
LCellSize( pt , m_macList ) ; #if TARGET_CARBON
GetListCellSize(m_macList, &pt);
#else
pt = (**m_macList).cellSize ;
#endif
pt.h = m_width - 15 ;
LCellSize( pt , m_macList ) ;
} }
void wxListBox::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) void wxListBox::MacHandleControlClick( ControlHandle control , SInt16 controlpart )

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
@@ -59,58 +57,95 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
const wxValidator& validator, const wxValidator& validator,
const wxString& name) const wxString& name)
{ {
m_noItems = 0 ; // this will be increased by our append command m_noItems = 0 ; // this will be increased by our append command
m_selected = 0; m_selected = 0;
Rect bounds ;
Str255 title ;
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ;
Rect bounds ; #if TARGET_CARBON
Str255 title ; ListDefSpec listDef;
OptionBits options;
MacPreControlCreate( parent , id , "" , pos , size ,style, validator , name , &bounds , title ) ; Size asize;
m_macControl = UMANewControl( parent->GetMacRootWindow() , &bounds , title , false , kwxMacListWithVerticalScrollbar , 0 , 0, listDef.defType = kListDefStandardTextType;
kControlListBoxProc , (long) this ) ;
long result ;
UMAGetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag , sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
HLock( (Handle) m_macList ) ; CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ; 14, 14, false, &listDef, &m_macControl );
(**m_macList).selFlags = 0 ;
if ( style & wxLB_MULTIPLE )
{
(**m_macList).selFlags += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
(**m_macList).selFlags += lExtendDrag ;
}
else
{
(**m_macList).selFlags = lOnlyOne ;
}
Point pt = (**m_macList).cellSize ;
pt.v = 14 ;
LCellSize( pt , m_macList ) ;
LAddColumn( 1 , 0 , m_macList ) ; GetControlData(m_macControl, kControlNoPart, kControlListBoxListHandleTag,
sizeof(ListHandle), (Ptr) &m_macList, &asize);
MacPostControlCreate() ; SetControlReference(m_macControl, (long) this);
SetControlVisibility(m_macControl, false, false);
ControlFontStyleRec controlstyle ; options = 0;
controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ; if ( style & wxLB_MULTIPLE )
//controlstyle.font = kControlFontSmallSystemFont ; {
controlstyle.font = kFontIDMonaco ; options += lNoExtend ;
controlstyle.size = 9 ; }
::UMASetControlFontStyle( m_macControl , &controlstyle ) ; else if ( style & wxLB_EXTENDED )
{
options += lExtendDrag ;
}
else
{
options = lOnlyOne ;
}
SetListSelectionFlags(m_macList, options);
for ( int i = 0 ; i < n ; i++ ) #else
{ long result ;
Append( choices[i] ) ;
}
LSetDrawingMode( true , m_macList ) ; 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 ) ;
return TRUE; HLock( (Handle) m_macList ) ;
NewExtLDEFInfo( m_macList , MacDrawStringCell , (long) this ) ;
(**m_macList).selFlags = 0 ;
if ( style & wxLB_MULTIPLE )
{
(**m_macList).selFlags += lNoExtend ;
}
else if ( style & wxLB_EXTENDED )
{
(**m_macList).selFlags += lExtendDrag ;
}
else
{
(**m_macList).selFlags = lOnlyOne ;
}
Point pt = (**m_macList).cellSize ;
pt.v = 14 ;
LCellSize( pt , m_macList ) ;
LAddColumn( 1 , 0 , m_macList ) ;
ControlFontStyleRec controlstyle ;
controlstyle.flags = kControlUseFontMask + kControlUseSizeMask ;
//controlstyle.font = kControlFontSmallSystemFont ;
controlstyle.font = kFontIDMonaco ;
controlstyle.size = 9 ;
//::UMASetControlFontStyle( m_macControl , &controlstyle ) ;
#endif
MacPostControlCreate() ;
for ( int i = 0 ; i < n ; i++ )
{
Append( choices[i] ) ;
}
LSetDrawingMode( true , m_macList ) ;
return TRUE;
} }
wxListBox::~wxListBox() wxListBox::~wxListBox()
@@ -118,8 +153,10 @@ wxListBox::~wxListBox()
Free() ; Free() ;
if ( m_macList ) if ( m_macList )
{ {
DisposeExtLDEFInfo( m_macList ) ; #if !TARGET_CARBON
m_macList = NULL ; DisposeExtLDEFInfo( m_macList ) ;
#endif
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,38 +550,38 @@ 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.v = n ;
cell.h = 0 ; LAddRow( 1 , cell.v , m_macList ) ;
cell.v = n ; LSetCell(text, strlen(text), cell, m_macList);
Refresh();
LAddRow( 1 , cell.v , m_macList ) ;
} }
void wxListBox::MacAppend( const char * text) 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
@@ -553,7 +601,7 @@ bool wxListBox::MacIsSelected( int n ) const
void wxListBox::MacDestroy() void wxListBox::MacDestroy()
{ {
// DisposeExtLDEFInfo( m_macList ) ; // DisposeExtLDEFInfo( m_macList ) ;
} }
int wxListBox::MacGetSelection() const int wxListBox::MacGetSelection() 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,9 +648,15 @@ void wxListBox::MacScrollTo( int n )
void wxListBox::OnSize( const wxSizeEvent &event) void wxListBox::OnSize( const wxSizeEvent &event)
{ {
Point pt = (**m_macList).cellSize ; Point pt;
pt.h = m_width - 15 ;
LCellSize( pt , m_macList ) ; #if TARGET_CARBON
GetListCellSize(m_macList, &pt);
#else
pt = (**m_macList).cellSize ;
#endif
pt.h = m_width - 15 ;
LCellSize( pt , m_macList ) ;
} }
void wxListBox::MacHandleControlClick( ControlHandle control , SInt16 controlpart ) void wxListBox::MacHandleControlClick( ControlHandle control , SInt16 controlpart )