removed subprojects for ldef and cdef, changed to in-proc ldef
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12231 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
bb5f7ca77e
commit
e42e45a9dd
@ -228,12 +228,23 @@ void UMAHighlightAndActivateWindow( WindowRef inWindowRef , bool inActivate ) ;
|
|||||||
#define GetPortVisibleRegion( p, r ) CopyRgn( p->visRgn , r )
|
#define GetPortVisibleRegion( p, r ) CopyRgn( p->visRgn , r )
|
||||||
#define GetQDGlobalsWhite( a ) (&((*a) = qd.white))
|
#define GetQDGlobalsWhite( a ) (&((*a) = qd.white))
|
||||||
#define GetQDGlobalsBlack( a ) (&((*a) = qd.black))
|
#define GetQDGlobalsBlack( a ) (&((*a) = qd.black))
|
||||||
#define GetQDGlobalsScreenBits( a ) (*a) = qd.screenBits
|
#define GetQDGlobalsScreenBits( a ) ((*a) = qd.screenBits)
|
||||||
#define GetQDGlobalsArrow( a ) (&((*a) = qd.arrow))
|
#define GetQDGlobalsArrow( a ) (&((*a) = qd.arrow))
|
||||||
#define GetControlBounds( c , b ) &((*b) = (**c).contrlRect )
|
#define GetControlBounds( c , b ) &((*b) = (**c).contrlRect )
|
||||||
#define GetPortBitMapForCopyBits( p ) ((BitMap*) &(((CGrafPtr)p)->portPixMap ))
|
#define GetPortBitMapForCopyBits( p ) ((BitMap*) &(((CGrafPtr)p)->portPixMap ))
|
||||||
#define GetControlOwner( control ) (**control).contrlOwner
|
#define GetControlOwner( control ) ((**control).contrlOwner)
|
||||||
#define InvalWindowRgn( window , rgn ) InvalRgn( rgn )
|
#define InvalWindowRgn( window , rgn ) InvalRgn( rgn )
|
||||||
|
#define GetPortPenMode( p ) (p->pnMode)
|
||||||
|
#define SetPortPenMode( p , mode ) (p->pnMode = mode )
|
||||||
|
// control manager
|
||||||
|
|
||||||
|
#define GetControlReference( control ) ((**control).contrlRfCon)
|
||||||
|
|
||||||
|
// list manager
|
||||||
|
|
||||||
|
#define SetListSelectionFlags( list , options ) (**list).selFlags = options
|
||||||
|
#define GetListRefCon( list ) (**list).refCon
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#if TARGET_CARBON
|
#if TARGET_CARBON
|
||||||
#define GetWindowUpdateRgn( inWindow , updateRgn ) GetWindowRegion( inWindow , kWindowUpdateRgn, updateRgn )
|
#define GetWindowUpdateRgn( inWindow , updateRgn ) GetWindowRegion( inWindow , kWindowUpdateRgn, updateRgn )
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#if 0 // TO BE REMOVED SOON
|
#if 0 // TO BE REMOVED SOON
|
||||||
|
|
||||||
#include <extcdef.h>
|
//#include <extcdef.h>
|
||||||
#include <PictUtils.h>
|
#include <PictUtils.h>
|
||||||
|
|
||||||
pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
|
pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#if 0 // TO BE REMOVED SOON
|
#if 0 // TO BE REMOVED SOON
|
||||||
|
|
||||||
#include <extcdef.h>
|
//#include <extcdef.h>
|
||||||
#include <PictUtils.h>
|
#include <PictUtils.h>
|
||||||
|
|
||||||
pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
|
pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
|
||||||
|
@ -391,7 +391,7 @@ resource 'ldes' ( 128 )
|
|||||||
0 ,
|
0 ,
|
||||||
hasVertScroll ,
|
hasVertScroll ,
|
||||||
noHorizScroll ,
|
noHorizScroll ,
|
||||||
128 ,
|
0 ,
|
||||||
noGrowSpace ,
|
noGrowSpace ,
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
#include "extldef.h"
|
// #include "extldef.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#if !USE_SHARED_LIBRARY
|
||||||
@ -34,6 +34,96 @@ END_EVENT_TABLE()
|
|||||||
|
|
||||||
#include "wx/mac/uma.h"
|
#include "wx/mac/uma.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned short instruction;
|
||||||
|
void (*function)();
|
||||||
|
} ldefRec, *ldefPtr, **ldefHandle;
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
|
||||||
|
Cell cell, short dataOffset, short dataLength,
|
||||||
|
ListHandle listHandle ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
|
||||||
|
Cell cell, short dataOffset, short dataLength,
|
||||||
|
ListHandle listHandle )
|
||||||
|
{
|
||||||
|
FontInfo fontInfo;
|
||||||
|
GrafPtr savePort;
|
||||||
|
GrafPtr grafPtr;
|
||||||
|
RgnHandle savedClipRegion;
|
||||||
|
SInt32 savedPenMode;
|
||||||
|
wxListBox* list;
|
||||||
|
GetPort(&savePort);
|
||||||
|
SetPort((**listHandle).port);
|
||||||
|
grafPtr = (**listHandle).port ;
|
||||||
|
// typecast our refCon
|
||||||
|
list = (wxListBox*) GetControlReference( (ControlHandle) GetListRefCon(listHandle) );
|
||||||
|
|
||||||
|
// Calculate the cell rect.
|
||||||
|
|
||||||
|
switch( message ) {
|
||||||
|
case lInitMsg:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case lCloseMsg:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case lDrawMsg:
|
||||||
|
{
|
||||||
|
const wxString text = list->m_stringArray[cell.v] ;
|
||||||
|
|
||||||
|
// Save the current clip region, and set the clip region to the area we are about
|
||||||
|
// to draw.
|
||||||
|
|
||||||
|
savedClipRegion = NewRgn();
|
||||||
|
GetClip( savedClipRegion );
|
||||||
|
ClipRect( drawRect );
|
||||||
|
EraseRect( drawRect );
|
||||||
|
|
||||||
|
|
||||||
|
MoveTo(drawRect->left + 4 , drawRect->top + 10 );
|
||||||
|
::TextFont( kFontIDMonaco ) ;
|
||||||
|
::TextSize( 9 );
|
||||||
|
::TextFace( 0 ) ;
|
||||||
|
|
||||||
|
DrawText(text, 0 , text.Length());
|
||||||
|
// If the cell is hilited, do the hilite now. Paint the cell contents with the
|
||||||
|
// appropriate QuickDraw transform mode.
|
||||||
|
|
||||||
|
if( isSelected ) {
|
||||||
|
savedPenMode = GetPortPenMode( grafPtr );
|
||||||
|
SetPortPenMode( grafPtr, hilitetransfermode );
|
||||||
|
PaintRect( drawRect );
|
||||||
|
SetPortPenMode( grafPtr, savedPenMode );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore the saved clip region.
|
||||||
|
|
||||||
|
SetClip( savedClipRegion );
|
||||||
|
DisposeRgn( savedClipRegion );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case lHiliteMsg:
|
||||||
|
|
||||||
|
// Hilite or unhilite the cell. Paint the cell contents with the
|
||||||
|
// appropriate QuickDraw transform mode.
|
||||||
|
|
||||||
|
GetPort( &grafPtr );
|
||||||
|
savedPenMode = GetPortPenMode( grafPtr );
|
||||||
|
SetPortPenMode( grafPtr, hilitetransfermode );
|
||||||
|
PaintRect( drawRect );
|
||||||
|
SetPortPenMode( grafPtr, savedPenMode );
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
SetPort(savePort);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon) ;
|
extern "C" void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon) ;
|
||||||
const short kwxMacListWithVerticalScrollbar = 128 ;
|
const short kwxMacListWithVerticalScrollbar = 128 ;
|
||||||
|
|
||||||
@ -49,6 +139,8 @@ wxListBox::wxListBox()
|
|||||||
m_macList = NULL ;
|
m_macList = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ListDefUPP macListDefUPP = NULL ;
|
||||||
|
|
||||||
bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
@ -65,12 +157,16 @@ 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 ) ;
|
||||||
|
|
||||||
#if TARGET_CARBON
|
|
||||||
ListDefSpec listDef;
|
ListDefSpec listDef;
|
||||||
OptionBits options;
|
listDef.defType = kListDefUserProcType;
|
||||||
|
if ( macListDefUPP == NULL )
|
||||||
|
{
|
||||||
|
macListDefUPP = NewListDefUPP( wxMacListDefinition );
|
||||||
|
}
|
||||||
|
listDef.u.userProc = macListDefUPP ;
|
||||||
|
#if TARGET_CARBON
|
||||||
Size asize;
|
Size asize;
|
||||||
|
|
||||||
listDef.defType = kListDefStandardTextType;
|
|
||||||
|
|
||||||
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
|
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
|
||||||
14, 14, false, &listDef, &m_macControl );
|
14, 14, false, &listDef, &m_macControl );
|
||||||
@ -81,7 +177,32 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
SetControlReference(m_macControl, (long) this);
|
SetControlReference(m_macControl, (long) this);
|
||||||
SetControlVisibility(m_macControl, false, false);
|
SetControlVisibility(m_macControl, false, false);
|
||||||
|
|
||||||
options = 0;
|
#else
|
||||||
|
long result ;
|
||||||
|
|
||||||
|
m_macControl = ::NewControl( parent->GetMacRootWindow() , &bounds , title , false ,
|
||||||
|
kwxMacListWithVerticalScrollbar , 0 , 0,
|
||||||
|
kControlListBoxProc , (long) this ) ;
|
||||||
|
::GetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag ,
|
||||||
|
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
|
||||||
|
|
||||||
|
HLock( (Handle) m_macList ) ;
|
||||||
|
ldefHandle ldef ;
|
||||||
|
ldef = (ldefHandle) NewHandle( sizeof(ldefRec) ) ;
|
||||||
|
if ( (**m_macList).listDefProc != NULL )
|
||||||
|
{
|
||||||
|
(**ldef).instruction = 0x4EF9; /* JMP instruction */
|
||||||
|
(**ldef).function = (void(*)()) listDef.u.userProc;
|
||||||
|
(**m_macList).listDefProc = (Handle) ldef ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point pt = (**m_macList).cellSize ;
|
||||||
|
pt.v = 14 ;
|
||||||
|
LCellSize( pt , m_macList ) ;
|
||||||
|
|
||||||
|
LAddColumn( 1 , 0 , m_macList ) ;
|
||||||
|
#endif
|
||||||
|
OptionBits options = 0;
|
||||||
if ( style & wxLB_MULTIPLE )
|
if ( style & wxLB_MULTIPLE )
|
||||||
{
|
{
|
||||||
options += lNoExtend ;
|
options += lNoExtend ;
|
||||||
@ -95,52 +216,12 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
options = lOnlyOne ;
|
options = lOnlyOne ;
|
||||||
}
|
}
|
||||||
SetListSelectionFlags(m_macList, options);
|
SetListSelectionFlags(m_macList, options);
|
||||||
|
|
||||||
#else
|
|
||||||
long result ;
|
|
||||||
|
|
||||||
m_macControl = ::NewControl( parent->GetMacRootWindow() , &bounds , title , false ,
|
|
||||||
kwxMacListWithVerticalScrollbar , 0 , 0,
|
|
||||||
kControlListBoxProc , (long) this ) ;
|
|
||||||
::GetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag ,
|
|
||||||
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
|
|
||||||
|
|
||||||
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() ;
|
MacPostControlCreate() ;
|
||||||
|
|
||||||
for ( int i = 0 ; i < n ; i++ )
|
for ( int i = 0 ; i < n ; i++ )
|
||||||
{
|
{
|
||||||
Append( choices[i] ) ;
|
Append( choices[i] ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
LSetDrawingMode( true , m_macList ) ;
|
LSetDrawingMode( true , m_macList ) ;
|
||||||
@ -154,7 +235,8 @@ wxListBox::~wxListBox()
|
|||||||
if ( m_macList )
|
if ( m_macList )
|
||||||
{
|
{
|
||||||
#if !TARGET_CARBON
|
#if !TARGET_CARBON
|
||||||
DisposeExtLDEFInfo( m_macList ) ;
|
DisposeHandle( (**m_macList).listDefProc ) ;
|
||||||
|
(**m_macList).listDefProc = NULL ;
|
||||||
#endif
|
#endif
|
||||||
m_macList = NULL ;
|
m_macList = NULL ;
|
||||||
}
|
}
|
||||||
@ -559,7 +641,7 @@ void wxListBox::MacInsert( int n , const char * text)
|
|||||||
Cell cell = { 0 , 0 } ;
|
Cell cell = { 0 , 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);
|
// LSetCell(text, strlen(text), cell, m_macList);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -568,7 +650,7 @@ 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);
|
// LSetCell(text, strlen(text), cell, m_macList);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -637,7 +719,7 @@ 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 ;
|
||||||
LSetCell(text, strlen(text), cell, m_macList);
|
// LSetCell(text, strlen(text), cell, m_macList);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
#include "extcdef.h"
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
pascal SInt32 main(SInt16 varCode , ControlHandle theControl , ControlDefProcMessage message, SInt32 param )
|
|
||||||
{
|
|
||||||
long returnValue = 0L;
|
|
||||||
char state = HGetState((Handle)theControl);
|
|
||||||
|
|
||||||
if ( message != initCntl )
|
|
||||||
{
|
|
||||||
ExtCDEFInfo* info = (ExtCDEFInfo* ) (**theControl).contrlRfCon ;
|
|
||||||
if ( info )
|
|
||||||
{
|
|
||||||
returnValue = info->defProc( info->procID, theControl, message, param) ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
(**theControl).contrlRfCon = NULL ;
|
|
||||||
}
|
|
||||||
HSetState((Handle)theControl,state);
|
|
||||||
|
|
||||||
return(returnValue); /* tell them what happened */
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#define kExtCDEFID 128 // resource id of our CDEF resource <Controls.h>
|
|
||||||
const long kExtCDEFMagic = 0xFEEDFEED ;
|
|
||||||
typedef struct ExtCDEFInfo
|
|
||||||
{
|
|
||||||
ControlDefProcPtr defProc ; // this must always be the lowest element
|
|
||||||
long magic ;
|
|
||||||
long contrlRfCon ;
|
|
||||||
ControlHandle containerControl ;
|
|
||||||
Handle children ;
|
|
||||||
ControlFontStyleRec fontStyle ;
|
|
||||||
Boolean hasFocus ;
|
|
||||||
SInt16 procID ;
|
|
||||||
long privateData ;
|
|
||||||
} ExtCDEFInfo ;
|
|
||||||
|
|
||||||
void NewExtCDEFInfo( ControlHandle theControl , ControlDefProcPtr defproc , SInt16 procID , long refcon ) ;
|
|
||||||
void DisposeExtCDEFInfo( ControlHandle theControl) ;
|
|
Binary file not shown.
Binary file not shown.
@ -391,7 +391,7 @@ resource 'ldes' ( 128 )
|
|||||||
0 ,
|
0 ,
|
||||||
hasVertScroll ,
|
hasVertScroll ,
|
||||||
noHorizScroll ,
|
noHorizScroll ,
|
||||||
128 ,
|
0 ,
|
||||||
noGrowSpace ,
|
noGrowSpace ,
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
@ -1,91 +0,0 @@
|
|||||||
#include "extldef.h"
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
function prototypes
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
void DrawMsg(Boolean fSelect, Rect *r, Cell cell, ListHandle lh);
|
|
||||||
void HiliteMsg(Boolean fSelect, Rect *r);
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
main
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
pascal void main(short message, Boolean fSelect, Rect *r, Cell cell,
|
|
||||||
short dataOffset, short dataLen, ListHandle lh)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch(message) {
|
|
||||||
case lInitMsg:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case lDrawMsg:
|
|
||||||
DrawMsg(fSelect, r, cell, lh);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case lHiliteMsg:
|
|
||||||
HiliteMsg(fSelect, r);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case lCloseMsg:
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
DrawMsg
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
void DrawMsg(Boolean fSelect, Rect *r, Cell cell, ListHandle lh)
|
|
||||||
{
|
|
||||||
ExtLDEFInfo* info = (ExtLDEFInfo*) (**lh).refCon ;
|
|
||||||
GrafPtr savePort;
|
|
||||||
|
|
||||||
// set up the port
|
|
||||||
GetPort(&savePort);
|
|
||||||
SetPort((**lh).port);
|
|
||||||
PenNormal();
|
|
||||||
ForeColor( blackColor ) ;
|
|
||||||
BackColor( whiteColor ) ;
|
|
||||||
|
|
||||||
EraseRect(r);
|
|
||||||
if ( info )
|
|
||||||
{
|
|
||||||
if ( info->drawProc)
|
|
||||||
{
|
|
||||||
CallExtLDEFDrawProc(info->drawProc, r, cell, lh, info->refCon );
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
// hilite if selected
|
|
||||||
if (fSelect)
|
|
||||||
HiliteMsg(fSelect, r);
|
|
||||||
|
|
||||||
SetPort(savePort);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
HiliteMsg
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
void HiliteMsg(Boolean fSelect, Rect *r)
|
|
||||||
{
|
|
||||||
unsigned char hMode;
|
|
||||||
|
|
||||||
hMode = LMGetHiliteMode();
|
|
||||||
BitClr((Ptr)(&hMode),(long)pHiliteBit);
|
|
||||||
LMSetHiliteMode(hMode);
|
|
||||||
InvertRect(r);
|
|
||||||
}
|
|
@ -1,65 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#if defined(__UNIX__)
|
|
||||||
#include <Carbon/Carbon.h>
|
|
||||||
#else
|
|
||||||
#include <Lists.h>
|
|
||||||
#endif
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#define kExtLDEFID 128 // resource id of our LDEF resource
|
|
||||||
|
|
||||||
typedef void (*ExtLDEFDrawProcType)(Rect *r, Cell cell, ListHandle lh, long refcon);
|
|
||||||
|
|
||||||
enum {
|
|
||||||
uppExtLDEFDrawProcInfo = kCStackBased
|
|
||||||
| STACK_ROUTINE_PARAMETER(1, SIZE_CODE(sizeof(Rect *)))
|
|
||||||
| STACK_ROUTINE_PARAMETER(2, SIZE_CODE(sizeof(Cell)))
|
|
||||||
| STACK_ROUTINE_PARAMETER(3, SIZE_CODE(sizeof(ListHandle)))
|
|
||||||
| STACK_ROUTINE_PARAMETER(4, SIZE_CODE(sizeof(long)))
|
|
||||||
};
|
|
||||||
|
|
||||||
#if USESROUTINEDESCRIPTORS
|
|
||||||
typedef UniversalProcPtr ExtLDEFDrawProcUPP;
|
|
||||||
|
|
||||||
#define CallExtLDEFDrawProc(userRoutine, r, cell, lh , refcon ) \
|
|
||||||
CallUniversalProc((UniversalProcPtr)(userRoutine), uppExtLDEFDrawProcInfo, r, cell, lh , refcon )
|
|
||||||
#define NewExtLDEFDrawProc(userRoutine) \
|
|
||||||
(ExtLDEFDrawProcUPP) NewRoutineDescriptor((ProcPtr)(userRoutine), uppExtLDEFDrawProcInfo, GetCurrentISA())
|
|
||||||
|
|
||||||
#else
|
|
||||||
typedef ExtLDEFDrawProcType ExtLDEFDrawProcUPP;
|
|
||||||
|
|
||||||
#define CallExtLDEFDrawProc(userRoutine, r, cell, lh , refcon) \
|
|
||||||
(*(userRoutine))(r, cell, lh, refcon)
|
|
||||||
#define NewExtLDEFDrawProc(userRoutine) \
|
|
||||||
(ExtLDEFDrawProcUPP)(userRoutine)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
long refCon ;
|
|
||||||
ExtLDEFDrawProcUPP drawProc ;
|
|
||||||
} ExtLDEFInfo ;
|
|
||||||
|
|
||||||
static void NewExtLDEFInfo( ListHandle lh , ExtLDEFDrawProcType drawproc , long refcon ) ;
|
|
||||||
static void NewExtLDEFInfo( ListHandle lh , ExtLDEFDrawProcType drawproc , long refcon )
|
|
||||||
{
|
|
||||||
ExtLDEFInfo* info = (ExtLDEFInfo* ) malloc( sizeof( ExtLDEFInfo ) ) ;
|
|
||||||
info->drawProc = NewExtLDEFDrawProc( drawproc ) ;
|
|
||||||
info->refCon = refcon ;
|
|
||||||
(**lh).refCon = (long) info ;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void DisposeExtLDEFInfo( ListHandle lh) ;
|
|
||||||
static void DisposeExtLDEFInfo( ListHandle lh)
|
|
||||||
{
|
|
||||||
ExtLDEFInfo* info = (ExtLDEFInfo* ) (**lh).refCon ;
|
|
||||||
if ( info )
|
|
||||||
{
|
|
||||||
#if !TARGET_CARBON
|
|
||||||
DisposeRoutineDescriptor( (RoutineDescriptor*) info->drawProc ) ;
|
|
||||||
#endif
|
|
||||||
free( (void*) (**lh).refCon ) ;
|
|
||||||
}
|
|
||||||
}
|
|
Binary file not shown.
Binary file not shown.
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
#include "wx/utils.h"
|
#include "wx/utils.h"
|
||||||
#ifndef __DARWIN__
|
#ifndef __DARWIN__
|
||||||
#include "extldef.h"
|
// #include "extldef.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !USE_SHARED_LIBRARY
|
#if !USE_SHARED_LIBRARY
|
||||||
@ -34,6 +34,96 @@ END_EVENT_TABLE()
|
|||||||
|
|
||||||
#include "wx/mac/uma.h"
|
#include "wx/mac/uma.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned short instruction;
|
||||||
|
void (*function)();
|
||||||
|
} ldefRec, *ldefPtr, **ldefHandle;
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
|
||||||
|
Cell cell, short dataOffset, short dataLength,
|
||||||
|
ListHandle listHandle ) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
static pascal void wxMacListDefinition( short message, Boolean isSelected, Rect *drawRect,
|
||||||
|
Cell cell, short dataOffset, short dataLength,
|
||||||
|
ListHandle listHandle )
|
||||||
|
{
|
||||||
|
FontInfo fontInfo;
|
||||||
|
GrafPtr savePort;
|
||||||
|
GrafPtr grafPtr;
|
||||||
|
RgnHandle savedClipRegion;
|
||||||
|
SInt32 savedPenMode;
|
||||||
|
wxListBox* list;
|
||||||
|
GetPort(&savePort);
|
||||||
|
SetPort((**listHandle).port);
|
||||||
|
grafPtr = (**listHandle).port ;
|
||||||
|
// typecast our refCon
|
||||||
|
list = (wxListBox*) GetControlReference( (ControlHandle) GetListRefCon(listHandle) );
|
||||||
|
|
||||||
|
// Calculate the cell rect.
|
||||||
|
|
||||||
|
switch( message ) {
|
||||||
|
case lInitMsg:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case lCloseMsg:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case lDrawMsg:
|
||||||
|
{
|
||||||
|
const wxString text = list->m_stringArray[cell.v] ;
|
||||||
|
|
||||||
|
// Save the current clip region, and set the clip region to the area we are about
|
||||||
|
// to draw.
|
||||||
|
|
||||||
|
savedClipRegion = NewRgn();
|
||||||
|
GetClip( savedClipRegion );
|
||||||
|
ClipRect( drawRect );
|
||||||
|
EraseRect( drawRect );
|
||||||
|
|
||||||
|
|
||||||
|
MoveTo(drawRect->left + 4 , drawRect->top + 10 );
|
||||||
|
::TextFont( kFontIDMonaco ) ;
|
||||||
|
::TextSize( 9 );
|
||||||
|
::TextFace( 0 ) ;
|
||||||
|
|
||||||
|
DrawText(text, 0 , text.Length());
|
||||||
|
// If the cell is hilited, do the hilite now. Paint the cell contents with the
|
||||||
|
// appropriate QuickDraw transform mode.
|
||||||
|
|
||||||
|
if( isSelected ) {
|
||||||
|
savedPenMode = GetPortPenMode( grafPtr );
|
||||||
|
SetPortPenMode( grafPtr, hilitetransfermode );
|
||||||
|
PaintRect( drawRect );
|
||||||
|
SetPortPenMode( grafPtr, savedPenMode );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restore the saved clip region.
|
||||||
|
|
||||||
|
SetClip( savedClipRegion );
|
||||||
|
DisposeRgn( savedClipRegion );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case lHiliteMsg:
|
||||||
|
|
||||||
|
// Hilite or unhilite the cell. Paint the cell contents with the
|
||||||
|
// appropriate QuickDraw transform mode.
|
||||||
|
|
||||||
|
GetPort( &grafPtr );
|
||||||
|
savedPenMode = GetPortPenMode( grafPtr );
|
||||||
|
SetPortPenMode( grafPtr, hilitetransfermode );
|
||||||
|
PaintRect( drawRect );
|
||||||
|
SetPortPenMode( grafPtr, savedPenMode );
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
break ;
|
||||||
|
}
|
||||||
|
SetPort(savePort);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon) ;
|
extern "C" void MacDrawStringCell(Rect *cellRect, Cell lCell, ListHandle theList, long refCon) ;
|
||||||
const short kwxMacListWithVerticalScrollbar = 128 ;
|
const short kwxMacListWithVerticalScrollbar = 128 ;
|
||||||
|
|
||||||
@ -49,6 +139,8 @@ wxListBox::wxListBox()
|
|||||||
m_macList = NULL ;
|
m_macList = NULL ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ListDefUPP macListDefUPP = NULL ;
|
||||||
|
|
||||||
bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
@ -65,12 +157,16 @@ 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 ) ;
|
||||||
|
|
||||||
#if TARGET_CARBON
|
|
||||||
ListDefSpec listDef;
|
ListDefSpec listDef;
|
||||||
OptionBits options;
|
listDef.defType = kListDefUserProcType;
|
||||||
|
if ( macListDefUPP == NULL )
|
||||||
|
{
|
||||||
|
macListDefUPP = NewListDefUPP( wxMacListDefinition );
|
||||||
|
}
|
||||||
|
listDef.u.userProc = macListDefUPP ;
|
||||||
|
#if TARGET_CARBON
|
||||||
Size asize;
|
Size asize;
|
||||||
|
|
||||||
listDef.defType = kListDefStandardTextType;
|
|
||||||
|
|
||||||
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
|
CreateListBoxControl( parent->GetMacRootWindow(), &bounds, false, 0, 1, false, true,
|
||||||
14, 14, false, &listDef, &m_macControl );
|
14, 14, false, &listDef, &m_macControl );
|
||||||
@ -81,7 +177,32 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
SetControlReference(m_macControl, (long) this);
|
SetControlReference(m_macControl, (long) this);
|
||||||
SetControlVisibility(m_macControl, false, false);
|
SetControlVisibility(m_macControl, false, false);
|
||||||
|
|
||||||
options = 0;
|
#else
|
||||||
|
long result ;
|
||||||
|
|
||||||
|
m_macControl = ::NewControl( parent->GetMacRootWindow() , &bounds , title , false ,
|
||||||
|
kwxMacListWithVerticalScrollbar , 0 , 0,
|
||||||
|
kControlListBoxProc , (long) this ) ;
|
||||||
|
::GetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag ,
|
||||||
|
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
|
||||||
|
|
||||||
|
HLock( (Handle) m_macList ) ;
|
||||||
|
ldefHandle ldef ;
|
||||||
|
ldef = (ldefHandle) NewHandle( sizeof(ldefRec) ) ;
|
||||||
|
if ( (**m_macList).listDefProc != NULL )
|
||||||
|
{
|
||||||
|
(**ldef).instruction = 0x4EF9; /* JMP instruction */
|
||||||
|
(**ldef).function = (void(*)()) listDef.u.userProc;
|
||||||
|
(**m_macList).listDefProc = (Handle) ldef ;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point pt = (**m_macList).cellSize ;
|
||||||
|
pt.v = 14 ;
|
||||||
|
LCellSize( pt , m_macList ) ;
|
||||||
|
|
||||||
|
LAddColumn( 1 , 0 , m_macList ) ;
|
||||||
|
#endif
|
||||||
|
OptionBits options = 0;
|
||||||
if ( style & wxLB_MULTIPLE )
|
if ( style & wxLB_MULTIPLE )
|
||||||
{
|
{
|
||||||
options += lNoExtend ;
|
options += lNoExtend ;
|
||||||
@ -95,52 +216,12 @@ bool wxListBox::Create(wxWindow *parent, wxWindowID id,
|
|||||||
options = lOnlyOne ;
|
options = lOnlyOne ;
|
||||||
}
|
}
|
||||||
SetListSelectionFlags(m_macList, options);
|
SetListSelectionFlags(m_macList, options);
|
||||||
|
|
||||||
#else
|
|
||||||
long result ;
|
|
||||||
|
|
||||||
m_macControl = ::NewControl( parent->GetMacRootWindow() , &bounds , title , false ,
|
|
||||||
kwxMacListWithVerticalScrollbar , 0 , 0,
|
|
||||||
kControlListBoxProc , (long) this ) ;
|
|
||||||
::GetControlData( m_macControl , kControlNoPart , kControlListBoxListHandleTag ,
|
|
||||||
sizeof( ListHandle ) , (char*) &m_macList , &result ) ;
|
|
||||||
|
|
||||||
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() ;
|
MacPostControlCreate() ;
|
||||||
|
|
||||||
for ( int i = 0 ; i < n ; i++ )
|
for ( int i = 0 ; i < n ; i++ )
|
||||||
{
|
{
|
||||||
Append( choices[i] ) ;
|
Append( choices[i] ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
LSetDrawingMode( true , m_macList ) ;
|
LSetDrawingMode( true , m_macList ) ;
|
||||||
@ -154,7 +235,8 @@ wxListBox::~wxListBox()
|
|||||||
if ( m_macList )
|
if ( m_macList )
|
||||||
{
|
{
|
||||||
#if !TARGET_CARBON
|
#if !TARGET_CARBON
|
||||||
DisposeExtLDEFInfo( m_macList ) ;
|
DisposeHandle( (**m_macList).listDefProc ) ;
|
||||||
|
(**m_macList).listDefProc = NULL ;
|
||||||
#endif
|
#endif
|
||||||
m_macList = NULL ;
|
m_macList = NULL ;
|
||||||
}
|
}
|
||||||
@ -559,7 +641,7 @@ void wxListBox::MacInsert( int n , const char * text)
|
|||||||
Cell cell = { 0 , 0 } ;
|
Cell cell = { 0 , 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);
|
// LSetCell(text, strlen(text), cell, m_macList);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -568,7 +650,7 @@ 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);
|
// LSetCell(text, strlen(text), cell, m_macList);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -637,7 +719,7 @@ 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 ;
|
||||||
LSetCell(text, strlen(text), cell, m_macList);
|
// LSetCell(text, strlen(text), cell, m_macList);
|
||||||
Refresh();
|
Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user