From: Unknown (JL) <nobody@localhost>
Date: Thu, 18 Nov 1999 23:10:31 +0000 (+0000)
Subject: Used when the Apparence Manager is not installed
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/72582399ed717e47bf5dbc7f334dcc0887b4cb99

Used when the Apparence Manager is not installed


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4617 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---

diff --git a/src/mac/aga.cpp b/src/mac/aga.cpp
new file mode 100644
index 0000000000..40abb5cbb9
--- /dev/null
+++ b/src/mac/aga.cpp
@@ -0,0 +1,2581 @@
+#include <wx/mac/uma.h>
+#include <wx/mac/aga.h>
+#include <extcdef.h>
+#include <PictUtils.h>
+
+pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
+pascal SInt32 AGAPlacardDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
+pascal SInt32 AGAStaticTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+pascal SInt32 AGAListControlDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+pascal SInt32 AGAEditTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+pascal SInt32 AGAStaticGroupBoxTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+
+#define B														13
+#define	W														0
+
+SInt16 kAGARootControlProcID ;
+int gAGABackgroundColor = 0 ;
+
+const RGBColor gAGAColorArray[] = {	{0xFFFF, 0xFFFF, 0xFFFF},		//	W
+																		{0xEEEE, 0xEEEE, 0xEEEE}, 	//	1
+																		{0xDDDD, 0xDDDD, 0xDDDD}, 	//	2
+																		{0xCCCC, 0xCCCC, 0xCCCC}, 	//	3
+																		{0xBBBB, 0xBBBB, 0xBBBB}, 	//	4
+																		{0xAAAA, 0xAAAA, 0xAAAA}, 	//	5
+																		{0x9999, 0x9999, 0x9999}, 	//	6
+																		{0x8888, 0x8888, 0x8888},		//	7
+																		{0x7777, 0x7777, 0x7777},		//	8
+																		{0x6666, 0x6666, 0x6666},		//	9
+																		{0x5555, 0x5555, 0x5555},		//	10
+																		{0x4444, 0x4444, 0x4444},		//	11
+																		{0x2222, 0x2222, 0x2222},		//	12
+																		{0x0000, 0x0000, 0x0000}		//	B
+																	};
+
+char LAGADefaultOutline_mCorners[4][5][5] =	{
+																								//	topleft
+																								{
+																									{ -1, -1, -1, 12,  B },
+																									{ -1, -1,  B,  2,  2 },
+																									{ -1,  B,  2,  2,  5 },
+																									{ 12,  2,  2,  2,  8 },
+																									{  B,  2,  5,  8, -1 }
+																								},
+																								//	topright
+																								{
+																									{  B, 12, -1, -1, -1 },
+																									{  2,  3,  B, -1, -1 },
+																									{  5,  5,  4,  B, -1 },
+																									{  8,  5,  5,  7, 12 },
+																									{ -1,  8,  5,  8,  B }
+																								},
+																								//	bottomleft
+																								{
+																									{  B,  2,  5,  8, -1 },
+																									{ 12,  3,  5,  5,  8 },
+																									{ -1,  B,  4,  5,  5 },
+																									{ -1, -1,  B,  7,  8 },
+																									{ -1, -1, -1, 12,  B }
+																								},
+																								//	bottomright
+																								{
+																									{ -1,  8,  5,  8,  B },
+																									{  8,  5,  7,  8, 12 },
+																									{  5,  7,  8,  B, -1 },
+																									{  8,  8,  B, -1, -1 },
+																									{  B, 12, -1, -1, -1 }
+																								}
+																							};
+
+char LAGAPushButton_mCorners[3][4][4][4] =	{
+																							//	Enabled
+																							{
+																								//	topleft
+																								{
+																									{ -1, -1, 12,  B },
+																									{ -1,  B,  4,  2 },
+																									{ 12,  4,  W,  W },
+																									{  B,  2,  W,  W }
+																								},
+																								//	topright
+																								{
+																									{  B, 12, -1, -1 },
+																									{  2,  4,  B, -1 },
+																									{  W,  2,  5, 12 },
+																									{  2,  5,  8,  B }
+																								},
+																								//	bottomleft
+																								{
+																									{  B,  2,  W,  2 },
+																									{ 12,  4,  2,  5 },
+																									{ -1,  B,  4,  8 },
+																									{ -1, -1, 12,  B }
+																								},
+																								//	bottomright
+																								{
+																									{  5,  5,  8,  B },
+																									{  5,  8,  8, 12 },
+																									{  8,  8,  B, -1 },
+																									{  B, 12, -1, -1 }
+																								}
+																							},
+																							//	Pressed
+																							{
+																								//	topleft
+																								{
+																									{ -1, -1, 12,  B },
+																									{ -1,  B, 10,  8 },
+																									{ 12, 10,  8,  4 },
+																									{  B,  8,  4,  4 }
+																								},
+																								//	topright
+																								{
+																									{  B, 12, -1, -1 },
+																									{  8, 10,  B, -1 },
+																									{  4,  4,  8, 12 },
+																									{  4,  4,  4,  B }
+																								},
+																								//	bottomleft
+																								{
+																									{  B,  8,  4,  4 },
+																									{ 12, 10,  4,  4 },
+																									{ -1,  B, 10,  4 },
+																									{ -1, -1, 12,  B }
+																								},
+																								//	bottomright
+																								{
+																									{  4,  4,  4,  B },
+																									{  4,  4, 10, 12 },
+																									{  4, 10,  B, -1 },
+																									{  B, 12, -1, -1 }
+																								}
+																							},
+																							//	Disabled
+																							{
+																								//	topleft
+																								{
+																									{ -1, -1,  7,  7 },
+																									{ -1,  7,  4,  2 },
+																									{  7,  4,  1,  1 },
+																									{  7,  2,  1,  1 }
+																								},
+																								//	topright
+																								{
+																									{  7,  7, -1, -1 },
+																									{  2,  4,  7, -1 },
+																									{  1,  2,  4,  7 },
+																									{  2,  4,  5,  7 }
+																								},
+																								//	bottomleft
+																								{
+																									{  7,  2,  1,  2 },
+																									{  7,  4,  2,  4 },
+																									{ -1,  7,  4,  5 },
+																									{ -1, -1,  7,  7 }
+																								},
+																								//	bottomright
+																								{
+																									{  4,  4,  5,  7 },
+																									{  4,  5,  5,  7 },
+																									{  5,  5,  7, -1 },
+																									{  7,  7, -1, -1 }
+																								}
+																							}
+																						};
+
+RGBColor gAGARamp[] =
+{
+	/* black */
+	{ 0 , 0 , 0 } ,
+	/* white */
+	{ 65535 , 65535 , 65535 } ,
+	/* 1 */
+	{ 61166 , 61166 , 61166 } ,
+	/* 2 */
+	{ 56797 , 56797 , 56797 } ,
+	/* 3 */
+	{ 52428 , 52428 , 52428 } ,
+	/* 4 */
+	{ 48059 , 48059 , 48059 } ,
+	/* 5 */
+	{ 43690 , 43690 , 43690 } ,
+	/* 6 */
+	{ 39321 , 39321 , 39321 } ,
+	/* 7 */
+	{ 34952 , 34952 , 34952 } ,
+	/* 8 */
+	{ 30583 , 30583 , 30583 } ,
+	/* 9 */
+	{ 26214 , 26214 , 26214 } ,
+	/* 10 */
+	{ 21845 , 21845 , 21845 } ,
+	/* 11 */
+	{ 17476 , 17476 , 17476 } ,
+	/* 12 */
+	{ 13107 , 13107 , 13107 } ,
+	/* A1 */
+	{ 8738 , 8738 , 8738 } ,
+	/* A2 */
+	{ 4369 , 4369 , 4369 } ,
+	
+} ;
+
+RGBColor gAGABlueRamp[] =
+{
+	/* black */
+	{ 0 , 0 , 0 } ,
+	/* white */
+	{ 65535 , 65535 , 65535 } ,
+	/* 1 */
+	{ 61166 , 61166 , 65535 } ,
+	/* 2 */
+	{ 56797 , 56797 , 65535 } ,
+	/* 3 */
+	{ 52428 , 52428 , 65535 } ,
+	/* 4 */
+	{ 48059 , 48059 , 65535 } ,
+	/* 5 */
+	{ 43690 , 43690 , 65535 } ,
+	/* 6 */
+	{ 39321 , 39321 , 65535 } ,
+	/* 7 */
+	{ 34952 , 34952 , 65535 } ,
+	/* 8 */
+	{ 30583 , 30583 , 65535 } ,
+	/* 9 */
+	{ 26214 , 26214 , 65535 } ,
+	/* 10 */
+	{ 21845 , 21845 , 65535 } ,
+	/* 11 */
+	{ 17476 , 17476 , 65535 } ,
+	/* 12 */
+	{ 13107 , 13107 , 65535 } ,
+	/* A1 */
+	{ 8738 , 8738 , 65535 } ,
+	/* A2 */
+	{ 4369 , 4369 , 65535 } ,
+	
+} ;
+
+enum eAGARampColor { 
+	kAGATransparent = -1 ,
+	kAGABlack = 0 ,
+	kAGAWhite = 1 ,
+	kAGA1 = 2 ,
+	kAGA2 = 3 ,
+	kAGA3 = 4 ,
+	kAGA4 = 5 ,
+	kAGA5 = 6 ,
+	kAGA6 = 7 ,
+	kAGA7 = 8 ,
+	kAGA8 = 9 ,
+	kAGA9 = 10 ,
+	kAGA10 = 11 ,
+	kAGA11 = 12 ,
+	kAGA12 = 13 ,
+	kAGAA1 = 14 ,
+	kAGAA2 = 15 ,
+} ;
+// defprocs
+
+enum eAGAState {
+	kAGAStateEnabled = 0 ,
+	kAGAStatePressed = 1 ,
+	kAGAStateDisabled = 2 ,
+	kAGAStateInactive = 3 
+} ;
+
+/*
+typedef struct sControlData
+{
+	ControlPartCode 	m_part ;
+	ResType 					m_tag ;
+	Size 							m_size ;
+} ;
+
+OSErr AGAFindControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , long *outOffset) ;
+OSErr AGAFindControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , long *outOffset) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	long offset = 0 ;
+	long size = GetHandleSize( info->data ) ;
+	char* data = *(info->data) ;
+	sControlData* current ;
+	while( offset + sizeof( sControlData ) <= size )
+	{
+		current = (sControlData*) (data+offset ) ;
+		if ( ( inPart == kControlEntireControl || inPart == current->m_part ) && inTagName == current->m_tag )
+		{
+			*outOffset = offset ;
+			return noErr ;
+		}
+	}
+	return errDataNotSupported ; // nothing found
+}
+
+OSErr AGARemoveControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName ) ;
+OSErr AGARemoveControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName ) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	long offset = 0 ;
+	long size = GetHandleSize( info->data ) ;
+	char* data = *(info->data) ;
+	sControlData* current ;
+	while( offset + sizeof( sControlData ) <= size )
+	{
+		current = (sControlData*) (data+offset ) ;
+		if ( ( inPart == kControlEntireControl || inPart == current->m_part ) && inTagName == current->m_tag )
+		{
+			long chunkSize = current->m_size + sizeof ( sControlData ) ;
+			memcpy( data + offset , data + offset + chunkSize , size - offset - chunkSize ) ;
+			SetHandleSize( info->data , size - chunkSize ) ;
+			return noErr ;
+		}
+	}
+	return noErr ;
+}
+
+OSErr AGAAddControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , Size	inSize, Ptr inData) ;
+OSErr AGAAddControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , Size	inSize, Ptr inData) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	long offset = 0 ;
+	long size = GetHandleSize( info->data ) ;
+	SetHandleSize( info->data , size + sizeof( sControlData ) + inSize ) ;
+	if (  MemError() == noErr )
+	{
+		char* data = *(info->data) ;
+		sControlData* current = (sControlData*)( data + size ) ;
+		current->m_tag = inTagName ;
+		current->m_part = inPart ;
+		current->m_size = inSize ;
+		memcpy( data + size + sizeof( sControlData ) , inData , inSize ) ;
+		return noErr ;
+	}
+	return errDataNotSupported ;
+}
+
+
+OSErr AGAGetControlDataSize				(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size *					outMaxSize)
+{
+	long offset ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	char* data = *(info->data) ;
+	
+	OSErr err = AGAFindControlData( inControl , inPart , inTagName , &offset ) ;
+	if ( !err )
+	{
+		sControlData* current = (sControlData*) (data+offset ) ;
+		*outMaxSize = current->m_size ;
+	}
+	return err ;
+}
+
+OSErr AGAGetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inBufferSize,
+								 Ptr 					outBuffer,
+								 Size *					outActualSize)
+{
+	long offset ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	char* data = *(info->data) ;
+	
+	OSErr err = AGAFindControlData( inControl , inPart , inTagName , &offset ) ;
+	if ( !err )
+	{
+		sControlData* current = (sControlData*) (data+offset ) ;
+		*outActualSize = current->m_size ;
+		if ( outBuffer )
+		{
+			if ( inBufferSize <= current->m_size )
+				memcpy( outBuffer , data + offset + sizeof( sControlData )  , current->m_size ) ;
+			else
+				err = errDataNotSupported ;
+		}
+	}
+	return err ;	
+}
+
+OSErr AGASetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inSize,
+								 Ptr 					inData)
+{
+	long offset ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	char* data = *(info->data) ;
+	
+	OSErr err = AGAFindControlData( inControl , inPart , inTagName , &offset ) ;
+	if ( !err )
+	{
+		sControlData* current = (sControlData*) (data+offset ) ;
+		if ( current->m_size == inSize )
+		{
+				memcpy( data + offset + sizeof( sControlData )  , inData , inSize) ;
+		}
+		else
+		{
+			AGARemoveControlData( inControl , inPart , inTagName ) ;
+			AGAAddControlData( inControl , inPart , inTagName , inSize , inData ) ;
+		}
+	}
+	else
+	{
+		AGAAddControlData( inControl , inPart , inTagName , inSize , inData ) ;
+	}
+	return err ;	
+}
+*/
+
+OSErr AGASetControlFontStyle				(ControlHandle 			inControl,
+								 const ControlFontStyleRec * inStyle)	
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	if ( inStyle->flags == 0 )
+	{
+		// back to defaults
+	}
+	else
+	{
+		if ( inStyle->flags & kControlUseFontMask )
+		{
+			info->fontStyle.font = inStyle->font ;
+		}
+		if ( inStyle->flags & kControlUseSizeMask )
+		{
+			info->fontStyle.size = inStyle->size ;
+		}
+		if ( inStyle->flags & kControlUseFaceMask )
+		{
+			info->fontStyle.style = inStyle->style ;
+		}
+		if ( inStyle->flags & kControlUseModeMask )
+		{
+			info->fontStyle.mode = inStyle->mode ;
+		}
+		if ( inStyle->flags & kControlUseJustMask )
+		{
+			info->fontStyle.just = inStyle->just ;
+		}
+		if ( inStyle->flags & kControlUseForeColorMask )
+		{
+			info->fontStyle.foreColor = inStyle->foreColor ;
+		}
+		if ( inStyle->flags & kControlUseBackColorMask )
+		{
+			info->fontStyle.backColor = inStyle->backColor ;
+		}
+	}
+	return noErr ;
+}
+
+OSErr AGASetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inSize,
+								 Ptr 					inData)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	ControlDataAccessRec rec ;
+	
+	rec.tag = inTagName ;
+	rec.part = inPart ;
+	rec.size = inSize ;
+	rec.dataPtr = inData ;
+	
+	return info->defProc( info->procID , inControl , kControlMsgSetData , (long) &rec ) ;
+}
+
+SInt16 AGAHandleControlKey				(ControlHandle 			inControl,
+								 SInt16 				inKeyCode,
+								 SInt16 				inCharCode,
+								 SInt16 				inModifiers) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	ControlKeyDownRec rec ;
+	
+	rec.modifiers = inModifiers ;
+	rec.keyCode = inKeyCode ;
+	rec.charCode = inCharCode ;
+	
+	return info->defProc( info->procID , inControl , kControlMsgKeyDown , (long) &rec ) ;
+}
+
+ControlPartCode AGAHandleControlClick				(ControlHandle 			inControl,
+								 Point 					inWhere,
+								 SInt16 				inModifiers,
+								 ControlActionUPP 		inAction)	
+{
+	return TrackControl( inControl , inWhere , inAction ) ;
+}
+
+Boolean AGATestForNewControl( ControlHandle inControl )
+{
+	if ( (**inControl).contrlRfCon  > 0x100 && !( (**inControl).contrlRfCon % 2 ) )
+	{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+			return info->magic == kExtCDEFMagic ;
+	}
+	return FALSE ;
+}
+void AGAIdleControls					(WindowPtr 				inWindow) 
+{
+	ControlHandle iter = (ControlHandle) ((WindowPeek)inWindow)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->defProc( info->procID , iter , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+			{
+				if ( info->defProc( info->procID , iter , kControlMsgGetFeatures , 0 ) & kControlWantsIdle )
+				{
+					info->defProc( info->procID , iter , kControlMsgIdle , 0 ) ;
+				}
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+void AGAUpdateOneControl( ControlHandle control , RgnHandle inRgn )
+{
+	DrawOneControl( control ) ;
+	ControlHandle iter = (ControlHandle) ((WindowPeek)(**control).contrlOwner)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->containerControl == control )
+			{ 		
+				AGAUpdateOneControl( iter , inRgn ) ;
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+void AGAUpdateControls( WindowPtr inWindow , RgnHandle inRgn ) 
+{
+	ControlHandle root ;
+	AGAGetRootControl( inWindow , &root ) ;
+	AGAUpdateOneControl( root , inRgn ) ;
+	
+	// and then all others
+	
+	ControlHandle iter = (ControlHandle) ((WindowPeek)inWindow)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+		}
+		else
+		{
+			DrawOneControl( iter ) ;
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+OSErr AGAGetRootControl( WindowPtr inWindow , ControlHandle *outControl ) 
+{
+	ControlHandle iter = (ControlHandle) ((WindowPeek)inWindow)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->procID == kAGARootControlProcID )
+			{ 	
+				*outControl  = iter ;
+				return noErr ;
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+	return -1 ;
+}
+
+void AGADeactivateControl( ControlHandle inControl ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+		if ( info->defProc( info->procID , inControl , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+		{
+			if ( info->defProc( info->procID , inControl , kControlMsgGetFeatures , 0 ) & kControlWantsActivate )
+			{
+				info->defProc( info->procID , inControl , kControlMsgActivate , 0 ) ;
+			}
+		}
+	}
+}
+
+void AGAActivateControl( ControlHandle inControl ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+		if ( info->defProc( info->procID , inControl , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+		{
+			if ( info->defProc( info->procID , inControl , kControlMsgGetFeatures , 0 ) & kControlWantsActivate )
+			{
+				info->defProc( info->procID , inControl , kControlMsgActivate , 1 ) ;
+			}
+		}
+	}
+}
+
+OSErr AGASetKeyboardFocus				(WindowPtr 				inWindow,
+								 ControlHandle 			inControl,
+								 ControlFocusPart 		inPart)
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+		if ( info->defProc( info->procID , inControl , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+		{
+			if ( info->defProc( info->procID , inControl , kControlMsgGetFeatures , 0 ) & kControlSupportsFocus )
+			{
+				return info->defProc( info->procID , inControl , kControlMsgFocus , inPart ) ;
+			}
+		}
+	}
+	return errControlDoesntSupportFocus ;
+}
+
+OSErr AGAGetBestControlRect				(ControlHandle 			inControl,
+								 Rect *					outRect,
+								 SInt16 *				outBaseLineOffset)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	ControlCalcSizeRec rec ;
+	rec.width = (**inControl).contrlRect.right - (**inControl).contrlRect.left ;
+	rec.height = (**inControl).contrlRect.bottom - (**inControl).contrlRect.top ;
+	rec.baseLine = 0;
+	
+	OSErr err = info->defProc( info->procID , inControl , kControlMsgCalcBestRect , (long) &rec ) ;
+	if ( !err )
+	{
+		outRect->left = outRect->top = 0 ;
+		outRect->right = rec. width ;
+		outRect->bottom = rec. height ;
+		*outBaseLineOffset = rec. baseLine ;		
+	}
+	return err ;
+}
+
+
+OSErr AGAGetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inBufferSize,
+								 Ptr 					outBuffer,
+								 Size *					outActualSize)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon  ;
+	ControlDataAccessRec rec ;
+	
+	rec.tag = inTagName ;
+	rec.part = inPart ;
+	rec.size = inBufferSize ;
+	rec.dataPtr = outBuffer ;
+	
+	OSErr err = info->defProc( info->procID , inControl , kControlMsgGetData , (long) &rec ) ;
+	*outActualSize = rec.size ;
+	return err ;
+}
+
+OSErr AGAGetControlDataSize				(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size *					outMaxSize)
+{
+	return AGAGetControlData( inControl , inPart , inTagName , 0 , NULL , outMaxSize ) ;
+}
+
+
+void NewExtCDEFInfo( ControlHandle theControl , ControlDefProcPtr defproc , SInt16 procID , long refcon ) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* ) malloc( sizeof( ExtCDEFInfo ) ) ;
+	info->defProc = defproc ;
+	info->hasFocus = false ;
+	info->magic = kExtCDEFMagic ;
+	info->contrlRfCon = refcon ;
+	info->procID = procID ;
+	info->containerControl = NULL ;
+	info->children = NewHandle(0) ;
+	info->fontStyle.flags = 0 ;
+	info->fontStyle.font = 0 ;
+	info->fontStyle.size = 12 ;
+	info->fontStyle.style = 0 ;
+	info->fontStyle.mode = 0 ;
+	info->fontStyle.just = 0 ;
+	info->fontStyle.foreColor = gAGARamp[ kAGABlack ] ;
+	info->fontStyle.backColor = gAGARamp[ kAGA2 ] ;
+	(**theControl).contrlRfCon = (long) info ;	
+	defproc( info->procID, theControl, initCntl, 0) ;
+}
+
+void DisposeExtCDEFInfo( ControlHandle theControl) 
+{
+	if ( AGATestForNewControl( theControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;
+		if ( info )
+		{
+			DisposeHandle( info->children ) ;
+			info->children = NULL ;
+			free( (void*) (**theControl).contrlRfCon ) ;
+		}
+	}
+}
+
+const short kAGAProgressHeight = 14 ;
+
+void AGADrawRectPlacard( const Rect *inRect , eAGAState inState , bool fill = false ) ;
+void AGADrawRectProgress( const Rect *inRect , eAGAState inState , double percentage ) ;
+
+void AGADrawRectPlacard( const Rect *inRect , eAGAState inState , bool fill ) 
+{
+	Rect rect = *inRect ;
+	RGBColor pixelColor ;
+	if ( inState == kAGAStateInactive )
+	{
+		RGBForeColor( &gAGARamp[ kAGA10 ] ) ;
+		FrameRect( &rect ) ;
+		if ( fill )
+		{
+			InsetRect( &rect , 1 , 1 ) ;
+			RGBForeColor( &gAGARamp[ kAGA1 ] ) ;
+			PaintRect( &rect ) ;
+		}
+		return ;
+	}
+
+	RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+	FrameRect( &rect ) ;
+	InsetRect( &rect , 1 , 1 ) ;
+	
+	if ( inState == kAGAStateEnabled || inState == kAGAStateDisabled )
+		RGBForeColor( &gAGARamp[ kAGAWhite ] ) ;
+	else
+		RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+		
+	MoveTo( rect.left , rect.bottom - 1 -1 ) ;
+	LineTo( rect.left , rect.top ) ;
+	LineTo( rect.right-1-1  , rect.top ) ;
+	
+	if ( inState == kAGAStateEnabled || inState == kAGAStateDisabled )
+		pixelColor =  gAGARamp[ kAGA2 ] ;
+	else
+		pixelColor = gAGARamp[ kAGA8 ] ;
+
+	SetCPixel( rect.right-1  , rect.top , &pixelColor ) ;
+	SetCPixel( rect.left , rect.bottom-1  , &pixelColor ) ;
+	
+	if ( inState == kAGAStateEnabled )
+		RGBForeColor( &gAGARamp[ kAGA5 ] ) ;
+	else if ( inState == kAGAStateDisabled )
+		RGBForeColor( &gAGARamp[ kAGA4 ] ) ;
+	else
+		RGBForeColor( &gAGARamp[ kAGA6 ] ) ;
+	
+	MoveTo( rect.left + 1 , rect.bottom-1  ) ;
+	LineTo( rect.right-1  , rect.bottom-1  ) ;
+	LineTo( rect.right-1  , rect.top-1 ) ;
+	
+	if ( fill )
+	{
+		InsetRect( &rect , 1 , 1 ) ;
+		if ( inState == kAGAStateEnabled || inState == kAGAStateDisabled )
+			RGBForeColor( &gAGARamp[ kAGA2 ] ) ;
+		else
+			RGBForeColor( &gAGARamp[ kAGA8 ] ) ;
+		PaintRect( &rect ) ;
+	}
+}
+
+void AGADrawRectProgress( const Rect *inRect , eAGAState inState , double percentage ) 
+{
+	Rect rect = *inRect ;
+	rect.bottom = rect.top + 14 ; 
+	RGBColor pixelColor ;
+	
+	RGBForeColor( &gAGARamp[ kAGA5 ]) ;
+	MoveTo( rect.left , rect.bottom - 1 -1  ) ;
+	LineTo( rect.left , rect.top ) ;
+	LineTo( rect.right-1-1  , rect.top ) ;
+
+	RGBForeColor( &gAGARamp[ kAGAWhite ] ) ;
+	MoveTo( rect.left + 1 , rect.bottom -1 ) ;
+	LineTo( rect.right-1  , rect.bottom -1 ) ;
+	LineTo( rect.right-1  , rect.top-1 ) ;
+
+	InsetRect( &rect , 1 , 1 ) ;
+	RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+			
+	Rect barLeft = rect , barRight = rect ;
+	
+	int	position = percentage * ( rect.right - rect.left ) ;
+	barLeft.right = barLeft.left + position ;
+	barRight.left = barLeft.left + position ;
+	FrameRect( &barLeft ) ;
+	FrameRect( &barRight ) ;
+	
+	InsetRect( &barLeft , 1 , 1 ) ;
+
+	InsetRect( &barRight , 1 , 1 ) ;
+	
+	if ( !EmptyRect( &barRight ) )
+	{
+		RGBForeColor( &gAGARamp[ kAGA10 ] ) ;
+		MoveTo( barRight.left , barRight.bottom -1 ) ;
+		LineTo( barRight.left , barRight.top ) ;
+		barRight.left += 1 ;
+		if ( !EmptyRect( &barRight ) )
+		{
+			RGBForeColor( &gAGARamp[ kAGA7 ] ) ;
+			MoveTo( barRight.left , barRight.bottom-1  ) ;
+			LineTo( barRight.left , barRight.top ) ;
+			LineTo( barRight.right-1-1  , barRight.top ) ;
+			RGBForeColor( &gAGARamp[ kAGA2 ] ) ;
+			MoveTo( barRight.left + 1 , barRight.bottom -1 ) ;
+			LineTo( barRight.right-1  , barRight.bottom -1 ) ;
+			LineTo( barRight.right-1  , barRight.top - 1) ;
+			pixelColor = gAGARamp[ kAGA4 ]  ;
+			SetCPixel( barRight.right-1  , barRight.top , &pixelColor ) ;
+			InsetRect( &barRight , 1  , 1)  ;
+			if ( !EmptyRect( &barRight ) )
+			{
+				RGBForeColor( &gAGARamp[ kAGA4 ] ) ;
+				PaintRect( &barRight ) ;
+			}
+		}
+		if ( !EmptyRect( &barLeft ) )
+		{
+			RGBForeColor( &gAGABlueRamp[ kAGA8 ] ) ;
+			MoveTo( barLeft.left , barLeft.bottom -1 ) ;
+			LineTo( barLeft.left , barLeft.top ) ;
+			LineTo( barLeft.left+1 , barLeft.top ) ;
+			RGBForeColor( &gAGABlueRamp[ kAGA12 ] ) ;			
+			MoveTo( barLeft.left + 2, barLeft.bottom-1  ) ;
+			LineTo( barLeft.right-1   , barLeft.bottom-1  ) ;
+			LineTo( barLeft.right-1  , barLeft.top -1 ) ;
+			RGBForeColor( &gAGABlueRamp[ kAGA10 ] ) ;			
+			MoveTo( barLeft.left + 2, barLeft.top ) ;
+			LineTo( barLeft.right-1   , barLeft.top ) ;
+			pixelColor = gAGABlueRamp[ kAGA10] ;
+			SetCPixel( barLeft.left + 1, barLeft.bottom-1  , &pixelColor ) ;
+			InsetRect( &barLeft , 1 , 1 ) ;
+			if ( !EmptyRect( &barLeft ) )
+			{
+				// do more here
+				RGBForeColor( &gAGABlueRamp[ kAGA3 ] ) ;
+				PaintRect( &barLeft ) ;
+			}
+		}
+	}
+}
+
+SInt32 AGAGetDataHelper( ControlDataAccessRec *rec , Size size , Ptr data ) ;
+SInt32 AGAGetDataHelper( ControlDataAccessRec *rec , Size size , Ptr data ) 
+{
+	if ( rec->dataPtr == NULL )
+	{
+		rec->size = size ;
+		return noErr ;
+	}
+	else
+	{
+		if ( rec->size < size )
+			return errDataSizeMismatch ;
+		
+		rec->size = size ;
+		memcpy( rec->dataPtr , data , size ) ;
+		return noErr ;
+	}
+}
+
+void AGASetFontStyle( ControlFontStyleRec *fontstyle ) ;
+void AGASetFontStyle( ControlFontStyleRec *fontstyle )
+{
+		if( fontstyle->font >= 0 )
+		{
+			::TextFont( fontstyle->font ) ;
+			::TextSize( fontstyle->size ) ;
+			::TextFace( fontstyle->style ) ;
+		}
+		else
+		{
+			switch( fontstyle->font )
+			{
+				case kControlFontBigSystemFont :
+					::TextFont( systemFont ) ; 
+					::TextSize( 12 ) ;
+					::TextFace( 0 ) ;
+					break ;
+				case kControlFontSmallSystemFont :
+					::TextFont( kFontIDGeneva ) ; 
+					::TextSize( 10 ) ;
+					::TextFace( 0 ) ;
+					break ;
+				case kControlFontSmallBoldSystemFont :
+					::TextFont( kFontIDGeneva ) ; 
+					::TextSize( 10 ) ;
+					::TextFace( bold ) ;
+					break ;
+			}
+		}
+		::RGBForeColor( &fontstyle->foreColor ) ;
+		::RGBBackColor( &fontstyle->backColor ) ;
+} ;
+
+class AGAPortHelper 
+{
+public :
+	AGAPortHelper() 
+	{
+		GetPenState( &oldPenState ) ;
+		GetBackColor( &oldBackColor ) ;
+		GetForeColor( &oldForeColor ) ;
+
+		GetPort( &port ) ;
+		clip = NewRgn() ;
+		GetClip( clip );
+		font = port->txFont;
+		size = port->txSize;
+		style = port->txFace;
+		mode = port->txMode;	
+
+	}
+	~AGAPortHelper()
+	{
+			SetPort( port ) ;
+			SetClip( clip ) ;
+			DisposeRgn( clip ) ;
+			RGBForeColor(&oldForeColor);
+			RGBBackColor(&oldBackColor);
+			SetPenState(&oldPenState);				
+
+			TextFont( font );
+			TextSize( size );
+			TextFace( style );
+			TextMode( mode );
+	}
+
+private :
+				GrafPtr			port ;
+				PenState		oldPenState ;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RgnHandle		clip ;
+				short				font ;
+				short				size ;
+				short				style ;
+				short 			mode ;
+} ;
+
+pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{	
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				GetPenState( &oldPenState ) ;
+				GetBackColor( &oldBackColor ) ;
+				GetForeColor( &oldForeColor ) ;
+				
+				{
+					int			theValue = GetControlValue(theControl) ;
+					int			theMinimum = GetControlMinimum(theControl) ;
+					int			theMaximum = GetControlMaximum(theControl) ;
+					
+					AGADrawRectProgress( &(**theControl).contrlRect , kAGAStateEnabled , (( double )( theValue - theMinimum )) / ( theMaximum-theMinimum ) ) ;
+				}
+			
+				RGBForeColor(&oldForeColor);
+				RGBBackColor(&oldBackColor);
+				SetPenState(&oldPenState);				
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+
+pascal SInt32 AGAPlacardDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				GetPenState( &oldPenState ) ;
+				GetBackColor( &oldBackColor ) ;
+				GetForeColor( &oldForeColor ) ;
+				
+				{
+					AGADrawRectPlacard( &(**theControl).contrlRect , kAGAStateEnabled , true  ) ;
+				}
+			
+				RGBForeColor(&oldForeColor);
+				RGBBackColor(&oldBackColor);
+				SetPenState(&oldPenState);				
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGABevelButtonDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case initCntl :
+			info->privateData = (long) malloc( sizeof( ControlButtonContentInfo ) ) ;
+			memset( (char*) info->privateData , 0 , sizeof( ControlButtonContentInfo )  ) ;
+			break ;
+		case dispCntl :
+			free( (void*) info->privateData ) ;
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlBevelButtonContentTag )
+				{
+					memcpy( (char*) info->privateData , rec->dataPtr , rec->size ) ;
+					return noErr ;
+				}
+				return errDataNotSupported ;
+			}
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = 0 ;
+				rec->height = 20 ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					Boolean mRadioBehavior = false ;
+					
+					int	mValue = GetControlValue( theControl ) ;
+					long theValue = (mRadioBehavior ? mValue : 0);
+					Boolean inPushed = (**theControl).contrlHilite ;
+					Boolean down = inPushed || (theValue != 0);
+					Boolean hasColor = 1;
+					int mEnabled = 1 ;
+					int triState_Off = 3 ;
+					Boolean disabled = (mEnabled == triState_Off);
+				
+					Rect frame = (**theControl).contrlRect ;
+					
+					//	Draw the black frame;
+					::MoveTo(frame.left + 1, frame.top);
+					::LineTo(frame.right - 2, frame.top);
+					::MoveTo(frame.right - 1, frame.top + 1);
+					::LineTo(frame.right - 1, frame.bottom - 2);
+					::MoveTo(frame.right - 2, frame.bottom - 1);
+					::LineTo(frame.left + 1, frame.bottom - 1);
+					::MoveTo(frame.left, frame.bottom - 2);
+					::LineTo(frame.left, frame.top + 1);
+					
+					//	Draw the inside (w/o the Icon)
+					::InsetRect(&frame, 1, 1);
+					if (hasColor)
+						{
+							AGASetFontStyle( &info->fontStyle ) ;
+							if (down)
+								::RGBBackColor(&gAGAColorArray[4]);
+						}
+					::EraseRect(&frame);
+					
+					//	Draw the shadows
+					if (hasColor)
+						{
+							::RGBForeColor(&gAGAColorArray[7]);
+							if (down)
+								{
+									::MoveTo(frame.left, frame.bottom - 1);
+									::LineTo(frame.left, frame.top);
+									::LineTo(frame.right - 1, frame.top);
+								}
+							else
+								{
+									::MoveTo(frame.right - 1, frame.top);
+									::LineTo(frame.right - 1, frame.bottom - 1);
+									::LineTo(frame.left, frame.bottom - 1);
+									::MoveTo(frame.right - 2, frame.top + 1);
+									::LineTo(frame.right - 2, frame.bottom - 2);
+									::LineTo(frame.left + 1, frame.bottom - 2);
+									::ForeColor(whiteColor);
+									::MoveTo(frame.left, frame.bottom - 2);
+									::LineTo(frame.left, frame.top);
+									::LineTo(frame.right - 2, frame.top);
+								}
+						}
+					
+					//	Draw the Icon
+					
+					frame = (**theControl).contrlRect ;
+ 					PictInfo theInfo ;
+					PicHandle thePict = ((ControlButtonContentInfo*) info->privateData)->u.picture ;
+					if ( thePict )
+					{
+						GetPictInfo( thePict , &theInfo , 0 , 0 , systemMethod , 0 ) ;
+	   				Rect bitmaprect = { 0 , 0 , theInfo.sourceRect.bottom - theInfo.sourceRect.top , 
+	   																		theInfo.sourceRect.right - theInfo.sourceRect.left } ;
+						::OffsetRect( &bitmaprect , (frame.right + frame.left)/2 - bitmaprect.right / 2 , (frame.bottom + frame.top) / 2 - bitmaprect.bottom / 2 ) ;
+						if (inPushed)
+							::OffsetRect( &bitmaprect , 1 , 1 ) ;
+						::DrawPicture( thePict , &bitmaprect ) ;
+					}
+				}
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAButtonDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case initCntl :
+			(**theControl).contrlData = NULL ;
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				Boolean isDefault = *((Boolean*)rec->dataPtr ) ;
+				(**theControl).contrlData = (Handle) isDefault ;
+				return noErr ;
+			}
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = 0 ;
+				rec->height = 20 ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					Boolean mRadioBehavior = false ;
+					
+					Rect frame, tempRect;
+					int	mValue = GetControlValue( theControl ) ;
+					long theValue = (mRadioBehavior ? mValue : 0);
+					Boolean inPushed = (**theControl).contrlHilite ;
+					Boolean down = inPushed || (theValue != 0);
+					Boolean hasColor = 1;
+					int mEnabled = 1 ;
+					int triState_Off = 3 ;
+					Boolean disabled = (mEnabled == triState_Off);
+				
+//					theState.Normalize();
+//					CalcLocalFrameRect(frame);
+					frame= (**theControl).contrlRect ;
+					
+					if ( (**theControl).contrlData )
+					{
+						InsetRect( &frame , -3 , -3 ) ;
+						{
+							::MoveTo(frame.left + 3, frame.top);
+							::LineTo(frame.right - 4, frame.top);
+							::LineTo(frame.right - 1, frame.top + 3);
+							::LineTo(frame.right - 1, frame.bottom - 4);
+							::LineTo(frame.right - 4, frame.bottom - 1);
+							::LineTo(frame.left + 3, frame.bottom - 1);
+							::LineTo(frame.left, frame.bottom - 4);
+							::LineTo(frame.left, frame.top + 3);
+							::LineTo(frame.left + 3, frame.top);
+							
+							if (hasColor)
+								{
+									const RGBColor *col = gAGAColorArray;
+									for (int i = 0; i < 5; i++)
+										for (int j = 0; j < 5; j++)
+											{
+												if (LAGADefaultOutline_mCorners[0][i][j] != -1)
+													::SetCPixel(frame.left + j, frame.top + i, &col[LAGADefaultOutline_mCorners[0][i][j]]);
+												if (LAGADefaultOutline_mCorners[1][i][j] != -1)
+													::SetCPixel(frame.right - 5 + j, frame.top + i, &col[LAGADefaultOutline_mCorners[1][i][j]]);
+												if (LAGADefaultOutline_mCorners[2][i][j] != -1)
+													::SetCPixel(frame.left + j, frame.bottom - 5 + i, &col[LAGADefaultOutline_mCorners[2][i][j]]);
+												if (LAGADefaultOutline_mCorners[3][i][j] != -1)
+													::SetCPixel(frame.right - 5 + j, frame.bottom - 5 + i, &col[LAGADefaultOutline_mCorners[3][i][j]]);
+											}
+									
+									::RGBForeColor(&gAGAColorArray[2]);
+									::MoveTo(frame.left + 1, frame.top + 5);
+									::LineTo(frame.left + 1, frame.bottom - 6);
+									::MoveTo(frame.left + 5, frame.top + 1);
+									::LineTo(frame.right - 6, frame.top + 1);
+									
+									::RGBForeColor(&gAGAColorArray[5]);
+									::MoveTo(frame.left + 4, frame.top + 2);
+									::LineTo(frame.right - 5, frame.top + 2);
+									::LineTo(frame.right - 3, frame.top + 4);
+									::LineTo(frame.right - 3, frame.bottom - 5);
+									::LineTo(frame.right - 5, frame.bottom - 3);
+									::LineTo(frame.left + 4, frame.bottom - 3);
+									::LineTo(frame.left + 2, frame.bottom - 5);
+									::LineTo(frame.left + 2, frame.top + 4);
+									::LineTo(frame.left + 4, frame.top + 2);
+									
+									::RGBForeColor(&gAGAColorArray[8]);
+									::MoveTo(frame.right - 2, frame.top + 5);
+									::LineTo(frame.right - 2, frame.bottom - 6);
+									::MoveTo(frame.left + 5, frame.bottom - 2);
+									::LineTo(frame.right - 6, frame.bottom - 2);
+								}
+						}		
+					}
+					
+					AGASetFontStyle( &info->fontStyle ) ;
+					frame= (**theControl).contrlRect ;
+
+					tempRect = frame;
+					::InsetRect(&tempRect, 1, 1);
+					if (hasColor)
+						{
+							if (down)
+								::RGBBackColor(&gAGAColorArray[4]);
+						}
+					EraseRect(&tempRect);
+					
+					//	Draw the frame;
+					if (disabled)
+						{
+							if (hasColor)
+								::RGBForeColor(&gAGAColorArray[7]);
+							else
+								::PenPat(&qd.gray);
+						}
+					::MoveTo(frame.left + 2, frame.top);
+					::LineTo(frame.right - 3, frame.top);
+					::LineTo(frame.right - 1, frame.top + 2);
+					::LineTo(frame.right - 1, frame.bottom - 3);
+					::LineTo(frame.right - 3, frame.bottom - 1);
+					::LineTo(frame.left + 2, frame.bottom - 1);
+					::LineTo(frame.left, frame.bottom - 3);
+					::LineTo(frame.left, frame.top + 2);
+					::LineTo(frame.left + 2, frame.top);
+					if (disabled && !hasColor)
+						::PenNormal();
+					
+					//	Draw the four corners around
+					if (hasColor)
+						{
+							short pattern = (disabled ? 2 : (down ? 1 : 0));
+							const RGBColor *col = gAGAColorArray;
+							for (int i = 0; i < 4; i++)
+								for (int j = 0; j < 4; j++)
+									{
+										if (LAGAPushButton_mCorners[pattern][0][i][j] != -1)
+											::SetCPixel(frame.left + j, frame.top + i, &col[LAGAPushButton_mCorners[pattern][0][i][j]]);
+										if (LAGAPushButton_mCorners[pattern][1][i][j] != -1)
+											::SetCPixel(frame.right - 4 + j, frame.top + i, &col[LAGAPushButton_mCorners[pattern][1][i][j]]);
+										if (LAGAPushButton_mCorners[pattern][2][i][j] != -1)
+											::SetCPixel(frame.left + j, frame.bottom - 4 + i, &col[LAGAPushButton_mCorners[pattern][2][i][j]]);
+										if (LAGAPushButton_mCorners[pattern][3][i][j] != -1)
+											::SetCPixel(frame.right - 4 + j, frame.bottom - 4 + i, &col[LAGAPushButton_mCorners[pattern][3][i][j]]);
+									}
+							
+							if (down)
+								::RGBForeColor(&gAGAColorArray[8]);
+							else
+								::RGBForeColor(&gAGAColorArray[2]);
+							::MoveTo(frame.left + 1, frame.top + 4);
+							::LineTo(frame.left + 1, frame.bottom - 5);
+							::MoveTo(frame.left + 4, frame.top + 1);
+							::LineTo(frame.right - 5, frame.top + 1);
+							
+							if (!down)
+								{
+									if (disabled)
+										::RGBForeColor(&gAGAColorArray[1]);
+									else
+										::ForeColor(whiteColor);
+									::MoveTo(frame.left + 2, frame.bottom - 5);
+									::LineTo(frame.left + 2, frame.top + 2);
+									::LineTo(frame.right - 5, frame.top + 2);
+							
+									if (disabled)
+										::RGBForeColor(&gAGAColorArray[5]);
+									else
+										::RGBForeColor(&gAGAColorArray[8]);
+									::MoveTo(frame.left + 4, frame.bottom - 2);
+									::LineTo(frame.right - 5, frame.bottom - 2);
+									::MoveTo(frame.right - 2, frame.bottom - 5);
+									::LineTo(frame.right - 2, frame.top + 4);
+									
+									if (disabled)
+										::RGBForeColor(&gAGAColorArray[4]);
+									else
+										::RGBForeColor(&gAGAColorArray[5]);
+									::MoveTo(frame.left + 4, frame.bottom - 3);
+									::LineTo(frame.right - 5, frame.bottom - 3);
+									::MoveTo(frame.right - 3, frame.bottom - 5);
+									::LineTo(frame.right - 3, frame.top + 4);
+								}
+						}
+					AGASetFontStyle( &info->fontStyle ) ;
+					int x =	( (**theControl).contrlRect.left + (**theControl).contrlRect.right ) / 2 ;
+					int y =	( (**theControl).contrlRect.top + 	(**theControl).contrlRect.bottom ) / 2 ;
+					FontInfo fi ;
+					::GetFontInfo( &fi ) ;
+					
+					y += fi.ascent / 2 ;
+					int length = (**theControl).contrlTitle[0] ;
+					if ( length )
+					{
+						int width = TextWidth( &(**theControl).contrlTitle[1] , 0, length ) ;
+						x -= width / 2 ;
+						::MoveTo( x , y );
+						::DrawText( &(**theControl).contrlTitle[1] , 0, length);
+					}
+					
+				}
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+const int kAGACheckBoxWidth = 12 ;
+const int kAGACheckBoxHeigth = 12 ;
+
+pascal SInt32 AGACheckBoxDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				
+				{
+					if (!(**theControl).contrlVis)				
+						return 0 ;
+						
+					{
+						AGAPortHelper help() ;
+						Rect frame =  (**theControl).contrlRect ;
+						Boolean hasColor = true;
+						Boolean disabled = (*theControl)->contrlHilite == 255 ;
+						int	mValue = GetControlValue( theControl ) ;
+						Boolean inPushed = (**theControl).contrlHilite ;
+						int mEnabled = 1 ;
+						int triState_Off = 3 ;
+						
+						frame.right = frame.left + kAGACheckBoxWidth;
+						frame.bottom = frame.top + kAGACheckBoxHeigth;
+						
+						//	Draw the frame of the checkbox
+							if (disabled)
+								if (hasColor)
+									::RGBForeColor(&gAGAColorArray[7]);
+								else
+									PenPat(&qd.gray);
+							
+						::FrameRect(&frame);
+						
+						if (!hasColor)
+							PenNormal();
+							
+						::InsetRect(&frame, 1, 1);
+						if (hasColor)
+							::RGBBackColor(inPushed ? &gAGAColorArray[8] : &gAGAColorArray[2]);
+						::EraseRect(&frame);
+						
+						if (hasColor)
+							{
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[10]);
+								else
+									ForeColor(whiteColor);
+								::MoveTo(frame.left, frame.bottom - 2);
+								::LineTo(frame.left, frame.top);
+								::LineTo(frame.right - 2, frame.top);
+						
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[6]);
+								else
+									::RGBForeColor(mEnabled != triState_Off ? &gAGAColorArray[7] : &gAGAColorArray[5]);
+								::MoveTo(frame.left + 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.top + 1);
+							}
+						
+						if (mValue)
+							{
+								if (mValue == 1)
+									{
+										//	Checked state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.top + 3);
+												::MoveTo(frame.right - 2, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.bottom - 2);
+										
+												if (mEnabled != triState_Off)
+													::RGBForeColor(inPushed ? &gAGAColorArray[11] : &gAGAColorArray[8]);
+												::MoveTo(frame.left + 3, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.top + 2);
+												::MoveTo(frame.right - 2, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.bottom - 3);
+												
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 1);
+										::LineTo(frame.right - 3, frame.bottom - 4);
+										::MoveTo(frame.left + 2, frame.top + 2);
+										::LineTo(frame.right - 3, frame.bottom - 3);
+										::MoveTo(frame.left + 2, frame.bottom - 4);
+										::LineTo(frame.right - 3, frame.top + 1);
+										::MoveTo(frame.left + 2, frame.bottom - 3);
+										::LineTo(frame.right - 3, frame.top + 2);
+									}
+								else
+									{
+										//	Mixed state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 4);
+										
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 4);
+										::LineTo(frame.right - 3, frame.top + 4);
+										::MoveTo(frame.left + 2, frame.top + 5);
+										::LineTo(frame.right - 3, frame.top + 5);
+									}
+							}
+							
+						if (inPushed && !hasColor)
+							InvertRect(&frame);
+						
+						AGASetFontStyle( &info->fontStyle ) ;
+						int x =	(**theControl).contrlRect.left + kAGACheckBoxWidth + 5 ;
+						int y =	( (**theControl).contrlRect.top + (**theControl).contrlRect.bottom ) / 2 ;
+						FontInfo fi ;
+						::GetFontInfo( &fi ) ;
+						
+						y += fi.ascent / 2 ;
+						::MoveTo( x , y );
+						int length = (**theControl).contrlTitle[0] ;
+						if ( length )
+						{
+							::DrawText( &(**theControl).contrlTitle[1] , 0, length);
+						}
+					}
+				}
+			
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) && ((*theControl)->contrlVis != 0) && ((*theControl)->contrlHilite != 255) )
+					return kControlCheckBoxPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+			  {
+			  	if ( (**theControl).contrlValue )
+			  		(**theControl).contrlValue = 0 ;
+			  	else
+			  		(**theControl).contrlValue = 1 ;
+			  		
+					return 0 ;
+				}
+				else
+					return 0 ;
+			}
+			break ;
+		case calcThumbRgn :
+		case calcCntlRgn :
+			if ( !EmptyRect(&(**theControl).contrlRect ) )
+				RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = kAGACheckBoxHeigth ;
+				rec->baseLine = 0;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGARadioButtonDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+//TO DO
+/*	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				
+				{
+					if (!(**theControl).contrlVis)				
+						return 0 ;
+						
+					{
+						AGAPortHelper help() ;
+						Rect frame =  (**theControl).contrlRect ;
+						Boolean hasColor = true;
+						Boolean disabled = (*theControl)->contrlHilite == 255 ;
+						int	mValue = GetControlValue( theControl ) ;
+						Boolean inPushed = (**theControl).contrlHilite ;
+						int mEnabled = 1 ;
+						int triState_Off = 3 ;
+						
+						frame.right = frame.left + kAGACheckBoxWidth;
+						frame.bottom = frame.top + kAGACheckBoxHeigth;
+						
+						//	Draw the frame of the checkbox
+							if (disabled)
+								if (hasColor)
+									::RGBForeColor(&gAGAColorArray[7]);
+								else
+									PenPat(&qd.gray);
+							
+						::FrameRect(&frame);
+						
+						if (!hasColor)
+							PenNormal();
+							
+						::InsetRect(&frame, 1, 1);
+						if (hasColor)
+							::RGBBackColor(inPushed ? &gAGAColorArray[8] : &gAGAColorArray[2]);
+						::EraseRect(&frame);
+						
+						if (hasColor)
+							{
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[10]);
+								else
+									ForeColor(whiteColor);
+								::MoveTo(frame.left, frame.bottom - 2);
+								::LineTo(frame.left, frame.top);
+								::LineTo(frame.right - 2, frame.top);
+						
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[6]);
+								else
+									::RGBForeColor(mEnabled != triState_Off ? &gAGAColorArray[7] : &gAGAColorArray[5]);
+								::MoveTo(frame.left + 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.top + 1);
+							}
+						
+						if (mValue)
+							{
+								if (mValue == 1)
+									{
+										//	Checked state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.top + 3);
+												::MoveTo(frame.right - 2, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.bottom - 2);
+										
+												if (mEnabled != triState_Off)
+													::RGBForeColor(inPushed ? &gAGAColorArray[11] : &gAGAColorArray[8]);
+												::MoveTo(frame.left + 3, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.top + 2);
+												::MoveTo(frame.right - 2, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.bottom - 3);
+												
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 1);
+										::LineTo(frame.right - 3, frame.bottom - 4);
+										::MoveTo(frame.left + 2, frame.top + 2);
+										::LineTo(frame.right - 3, frame.bottom - 3);
+										::MoveTo(frame.left + 2, frame.bottom - 4);
+										::LineTo(frame.right - 3, frame.top + 1);
+										::MoveTo(frame.left + 2, frame.bottom - 3);
+										::LineTo(frame.right - 3, frame.top + 2);
+									}
+								else
+									{
+										//	Mixed state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 4);
+										
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 4);
+										::LineTo(frame.right - 3, frame.top + 4);
+										::MoveTo(frame.left + 2, frame.top + 5);
+										::LineTo(frame.right - 3, frame.top + 5);
+									}
+							}
+							
+						if (inPushed && !hasColor)
+							InvertRect(&frame);
+						
+						AGASetFontStyle( &info->fontStyle ) ;
+						int x =	(**theControl).contrlRect.left + kAGACheckBoxWidth + 5 ;
+						int y =	( (**theControl).contrlRect.top + (**theControl).contrlRect.bottom ) / 2 ;
+						FontInfo fi ;
+						::GetFontInfo( &fi ) ;
+						
+						y += fi.ascent / 2 ;
+						::MoveTo( x , y );
+						int length = (**theControl).contrlTitle[0] ;
+						if ( length )
+						{
+							::DrawText( &(**theControl).contrlTitle[1] , 0, length);
+						}
+					}
+				}
+			
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) && ((*theControl)->contrlVis != 0) && ((*theControl)->contrlHilite != 255) )
+					return kControlCheckBoxPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+			  {
+			  	if ( (**theControl).contrlValue )
+			  		(**theControl).contrlValue = 0 ;
+			  	else
+			  		(**theControl).contrlValue = 1 ;
+			  		
+					return 0 ;
+				}
+				else
+					return 0 ;
+			}
+			break ;
+		case calcThumbRgn :
+		case calcCntlRgn :
+			if ( !EmptyRect(&(**theControl).contrlRect ) )
+				RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = kAGACheckBoxHeigth ;
+				rec->baseLine = 0;
+			}
+			break ;
+		default :
+			break ;
+	}
+	*/
+	return 0 ;									
+}
+
+pascal SInt32 AGAStaticGroupBoxTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+
+	switch( message )
+	{
+		case initCntl :
+			break ;
+		case dispCntl :
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					bool disabled = false ;
+					bool hasColor = true ;
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					FontInfo fi ;
+					::GetFontInfo( &fi ) ;
+					
+					Rect labelRect = (**theControl).contrlRect ;
+					Rect theFrame = (**theControl).contrlRect ;
+					int width = StringWidth((**theControl).contrlTitle) ;
+					theFrame.top += fi.ascent + fi.leading >> 1 ;
+					labelRect.bottom = theFrame.top + 8 ;
+					labelRect.left += 10 ;
+					labelRect.right =labelRect.left + width + 6 ;
+					
+					theFrame.bottom--;
+					theFrame.right--;
+					
+					if (disabled)
+					{
+						RGBForeColor( &gAGAColorArray[4] ) ;
+					}
+					else
+					{
+						RGBForeColor( &gAGAColorArray[7] ) ;
+					}
+					FrameRect( &theFrame ) ;
+					
+					if (disabled)
+						::RGBForeColor(&gAGAColorArray[1]);
+					else
+						::ForeColor(whiteColor);
+					::MoveTo(theFrame.left + 1, theFrame.bottom - 2);
+					::LineTo(theFrame.left + 1, theFrame.top + 1);
+					::LineTo(theFrame.right - 2, theFrame.top + 1);
+					::MoveTo(theFrame.left , theFrame.bottom);
+					::LineTo(theFrame.right, theFrame.bottom);
+					::LineTo(theFrame.right, theFrame.top);
+					
+					AGASetFontStyle( &info->fontStyle ) ;
+					::EraseRect( &labelRect ) ;
+					::MoveTo(labelRect.left + 3, labelRect.top + fi.ascent + (fi.leading >> 1));
+					::DrawString((**theControl).contrlTitle);
+				}
+			}
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = (**theControl).contrlRect.bottom - (**theControl).contrlRect.top  ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case kControlMsgSetData :
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAStaticTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	Handle macText = (**theControl).contrlData ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+
+	switch( message )
+	{
+		case initCntl :
+			{
+				macText = NewHandle(0) ;
+				 (**theControl).contrlData = (Handle) macText ;
+			}
+			break ;
+		case dispCntl :
+			DisposeHandle( macText ) ;
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					int x =	(**theControl).contrlRect.left ;
+					int y =	(**theControl).contrlRect.top ;
+					int lineheight ;
+					FontInfo fi ;
+					::GetFontInfo( &fi ) ;
+					
+					y += fi.ascent ;
+					lineheight = fi.ascent + fi.descent + fi.leading ;
+					int length = GetHandleSize( macText ) ;
+					if ( length )
+					{
+						int laststop = 0 ;
+						int i = 0 ;
+						HLock( macText ) ;
+						RGBColor gray = { 0xDDDD , 0xDDDD, 0xDDDD } ;
+						::RGBBackColor( &gray ) ;
+						while( i < length )
+						{
+							if ( (*macText)[i] == 0x0d )
+							{
+								::MoveTo( x , y );
+								::DrawText( *macText , laststop, i-laststop);
+								laststop = i+1 ;
+								y += lineheight ;
+							}
+							i++ ;
+						}
+						::MoveTo( x , y );
+						::DrawText( *macText , laststop, i-laststop);
+						laststop = i+1 ;
+						HUnlock( macText ) ;
+					}
+				}
+			}
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = (**theControl).contrlRect.bottom - (**theControl).contrlRect.top  ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlStaticTextTextTag )
+				{
+					SetHandleSize( macText , rec->size ) ;
+					memcpy( *macText , rec->dataPtr , rec->size ) ;
+					return noErr ;
+				}
+				return errDataNotSupported ;
+			}
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+void AGAMoveControl(ControlHandle inControl , short x , short y ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;	
+		if ( info->magic == kExtCDEFMagic )
+		{
+			if ( info->procID == kControlEditTextProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - (**inControl).contrlRect.left  ;
+				dy= y - (**inControl).contrlRect.top ;
+				
+				MoveControl( inControl , x ,y  ) ;
+				TEHandle macTE ;
+	
+				macTE = (TEHandle) (**inControl).contrlData ;
+				(**macTE).destRect.left += dx ;
+				(**macTE).destRect.top += dy ;
+				(**macTE).destRect.right += dx ;
+				(**macTE).destRect.bottom += dy ;
+				(**macTE).viewRect.left += dx ;
+				(**macTE).viewRect.top += dy ;
+				(**macTE).viewRect.right += dx ;
+				(**macTE).viewRect.bottom += dy ;
+				return ;
+			}
+			if ( info->procID == kControlListBoxProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - (**inControl).contrlRect.left  ;
+				dy= y - (**inControl).contrlRect.top ;
+				
+				MoveControl( inControl , x ,y  ) ;
+				ListHandle macList ;
+	
+				macList = (ListHandle) (**inControl).contrlData ;
+				(**macList).rView.left += dx ;
+				(**macList).rView.top += dy ;
+				(**macList).rView.right += dx ;
+				(**macList).rView.bottom += dy ;
+				return ;
+			}
+		}
+	}
+	MoveControl( inControl , x ,y  ) ;
+}
+
+void AGASizeControl(ControlHandle inControl , short x , short y ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;	
+		if ( info->magic == kExtCDEFMagic )
+		{
+			if ( info->procID == kControlEditTextProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - ( (**inControl).contrlRect.right - (**inControl).contrlRect.left ) ;
+				dy= y - ( (**inControl).contrlRect.bottom - (**inControl).contrlRect.top ) ;
+				
+				SizeControl( inControl , x ,y  ) ;
+				TEHandle macTE ;
+	
+				macTE = (TEHandle) (**inControl).contrlData ;
+				(**macTE).destRect.right += dx ;
+				(**macTE).destRect.bottom += dy ;
+				(**macTE).viewRect.right += dx ;
+				(**macTE).viewRect.bottom += dy ;
+				return ;
+			}
+			if ( info->procID == kControlListBoxProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - ( (**inControl).contrlRect.right - (**inControl).contrlRect.left ) ;
+				dy= y - ( (**inControl).contrlRect.bottom - (**inControl).contrlRect.top ) ;
+				
+				SizeControl( inControl , x ,y  ) ;
+				ListHandle macList ;
+	
+				macList = (ListHandle) (**inControl).contrlData ;
+				(**macList).rView.right += dx ;
+				(**macList).rView.bottom += dy ;
+				return ;
+			}
+		}
+	}
+	SizeControl( inControl , x ,y  ) ;
+}
+
+pascal SInt32 AGARootControlDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+
+	switch( message )
+	{
+		case initCntl :
+			break ;
+		case dispCntl :
+			break ;
+		case drawCntl :
+			break ;
+		case kControlMsgCalcBestRect :
+			break ;
+		case kControlMsgSetData :
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAEditTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	Size result ;
+	TEHandle macTE ;
+	
+	macTE = (TEHandle) (**theControl).contrlData ;
+	
+	switch( message )
+	{
+		case initCntl :
+			{
+				AGAPortHelper help() ;
+				SetPort( (**theControl).contrlOwner ) ;
+				::TextFont( kFontIDGeneva ) ; 
+				::TextSize( 10 ) ;
+				::TextFace( 0 ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+				Rect bounds =  (**theControl).contrlRect ;				
+				InsetRect( &bounds , 4 , 1 ) ;
+				FontInfo fi ;
+				::GetFontInfo( &fi ) ;
+				
+				bounds.top = bounds.bottom - abs( fi.descent ) - fi.ascent - 3;
+				macTE = TENew( &bounds , &bounds) ;
+				 (**theControl).contrlData = (Handle) macTE ;
+			}
+			break ;
+		case dispCntl :
+			TEDispose( macTE ) ;
+			break ;
+		case drawCntl :
+			{
+				AGAPortHelper help() ;
+				AGASetFontStyle( &info->fontStyle ) ;
+				SetPort( (**theControl).contrlOwner ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+				EraseRect( &(**theControl).contrlRect ) ;
+				FrameRect( &(**theControl).contrlRect ) ;
+				TEUpdate( &(**theControl).contrlRect , macTE ) ;
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+			  {
+			  	TEClick( pt , false , macTE ) ;
+				}
+			}
+			break ;
+		case kControlMsgGetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlEditTextTEHandleTag )
+				{
+					return AGAGetDataHelper( rec , sizeof( TEHandle ) , (char*) &macTE ) ;
+				}
+				else if ( rec->tag == kControlEditTextTextTag )
+				{
+					return AGAGetDataHelper( rec , (**macTE).teLength , (char*) *(**macTE).hText ) ;
+				}
+				else if ( rec->tag == kControlEditTextSelectionTag )
+				{
+				}
+				return errDataNotSupported ;
+			}
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlEditTextTextTag )
+				{
+					TESetText( rec->dataPtr , rec->size ,  macTE ) ;
+					return noErr ;
+				}
+				return errDataNotSupported ;
+			}
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = (**theControl).contrlRect.bottom - (**theControl).contrlRect.top  ;
+				rec->baseLine = 0;
+			}
+		case kControlMsgFocus :
+			{
+				if ( param == kControlFocusNoPart )
+				{
+					info->hasFocus = false ;
+					TEDeactivate( macTE ) ;
+					return kControlFocusNoPart ;
+				}
+				else if ( param == kControlFocusNextPart || param == kControlFocusPrevPart )
+				{
+					if ( info->hasFocus )
+					{
+						info->hasFocus = false ;
+						TEDeactivate( macTE ) ;
+						return kControlFocusNoPart ;
+					}
+					else
+					{
+						info->hasFocus = true ;
+						TEActivate( macTE ) ;
+						return kControlEditTextPart ;
+					}
+				}
+				else if ( param == kControlEditTextPart )
+				{
+					if ( !info->hasFocus )
+					{
+						info->hasFocus = true ;
+						TEActivate( macTE ) ;
+						return kControlEditTextPart ;
+					}
+				}
+			}
+			break ;
+		case kControlMsgIdle :
+			{
+				TEIdle( macTE ) ;
+			}
+			break ;
+		case kControlMsgKeyDown :
+			{
+				AGAPortHelper help() ;
+				AGASetFontStyle( &info->fontStyle ) ;
+				SetPort( (**theControl).contrlOwner ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+				ControlKeyDownRec * rec = (ControlKeyDownRec*) param ;
+				TEKey( rec->charCode , macTE ) ;
+			}
+			break ;
+		case kControlMsgActivate :
+			{
+			 /*
+				if ( param )
+					TEActivate( macTE ) ;
+				else
+					TEDeactivate( macTE ) ;
+				*/
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case kControlMsgTestNewMsgSupport :
+			return kControlSupportsNewMessages ;
+		case kControlMsgGetFeatures :
+			return 
+//				kControlSupportsGhosting |
+//				kControlSupportsEmbedding |
+				kControlSupportsFocus | 
+				kControlWantsIdle | 
+				kControlWantsActivate | 
+//				kControlHandlesTracking |
+				kControlSupportsDataAccess |
+//				kControlHasSpecialBackground |
+//				kControlGetsFocusOnClick |
+				kControlSupportsCalcBestRect |
+//				kControlSupportsLiveFeedback |
+//				kControlHasRadioBehavior |
+				0 ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAListControlDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	Size result ;
+	ListHandle macList ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	
+	macList = (ListHandle) (**theControl).contrlData ;
+
+	static inLoop = false ;
+	static lastClick = NULL ;
+	
+	switch( message )
+	{
+		case initCntl :
+			{
+				Rect databounds = { 0,0,0,0} ;
+				Point cellsize = { 0,0} ;
+				Rect listBounds =  (**theControl).contrlRect ;
+				
+				InsetRect( &listBounds , 1 , 1 ) ;
+				
+				macList = LNew( &listBounds , &databounds , cellsize , 128 , 
+					(**theControl).contrlOwner , false /*drawit*/ , false /*hasGrow*/,
+					false /* horzScroll */, true /*vertScroll*/ ) ;
+				 (**theControl).contrlData = (Handle) macList ;
+				info->privateData = NULL ;
+			}
+			break ;
+		case dispCntl :
+			(**macList).vScroll = NULL ; // will be disposed by the window itself
+			(**macList).hScroll = NULL ; // will be disposed by the window itself
+			LDispose( macList ) ;
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  Rect	listRect ;
+			  Rect	allRect = (**theControl).contrlRect ;
+			  listRect = allRect ;
+			  if ( !inLoop )
+					allRect.right += 16 ;
+			  if ( PtInRect( pt , &allRect ) )
+			  {
+			  	if ( !inLoop && StillDown() )
+			  	{
+			  		inLoop = true ;
+			  		LActivate( true , macList ) ;
+					Boolean doubleClick = LClick( pt , 0 /* todo modifiers*/ , macList ) ;
+					info->privateData = doubleClick ;
+					inLoop = false ;
+				}
+				return kControlListBoxPart ;
+			  }
+			  else
+				return NULL ;
+			}
+			break ;
+		case drawCntl :
+			{
+				AGAPortHelper help() ;
+				AGASetFontStyle( &info->fontStyle ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				EraseRect( &(**theControl).contrlRect ) ;
+				FrameRect( &(**theControl).contrlRect ) ;
+				RgnHandle controlRgn = NewRgn() ;
+				SetRectRgn( controlRgn, (**theControl).contrlRect.left ,
+					(**theControl).contrlRect.top,
+					(**theControl).contrlRect.right,
+					(**theControl).contrlRect.bottom ) ;
+				LUpdate( controlRgn,  macList ) ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  Rect	listRect ;
+			  Rect	allRect = (**theControl).contrlRect ;
+			  listRect = allRect ;
+			  allRect.right += 16 ;
+			  if ( PtInRect( pt , &listRect ) )
+			  {
+			  	if ( !inLoop && StillDown() )
+			  	{
+			  		inLoop = true ;
+			  		LActivate( true , macList ) ;
+						Boolean doubleClick = LClick( pt , 0 /* todo modifiers*/ , macList ) ;
+						info->privateData = doubleClick ;
+						inLoop = false ;
+					}
+					return kControlListBoxPart ;
+				}
+				else if ( PtInRect( pt , &allRect ) )
+				{
+			  	if ( !inLoop && StillDown() )
+			  	{
+			  		inLoop = true ;
+			  		// LActivate( true , macList ) ;
+						Boolean doubleClick = LClick( pt , 0 /* todo modifiers*/ , macList ) ;
+						info->privateData = doubleClick ;
+						inLoop = false ;
+					}
+					return kControlPageDownPart ;
+				}
+				else
+					return NULL ;
+			}
+			break ;
+		case kControlMsgGetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlListBoxListHandleTag )
+				{
+					return AGAGetDataHelper( rec , sizeof( ListHandle ) , (char*) &macList ) ;
+				}
+				else if ( rec->tag == kControlListBoxDoubleClickTag )
+				{
+					Boolean doubleClick = info->privateData ;
+					return AGAGetDataHelper( rec , sizeof( Boolean ) , (char*) &doubleClick ) ;
+				}
+				return errDataNotSupported ;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+OSErr AGACreateRootControl				(WindowPtr 				inWindow,
+								 ControlHandle *		outControl) 
+{
+	ControlHandle theControl = NULL ;
+
+	SInt16 extCDEFID = kExtCDEFID << 4 + 0 ;
+
+ 	theControl = NewControl( inWindow , &inWindow->portRect , "\p" , true ,
+ 			0 , 0 , 1 , extCDEFID , 0 ) ;
+ 	NewExtCDEFInfo( theControl , AGARootControlDefProc , kAGARootControlProcID , 0 ) ;
+ 	
+ 	*outControl = theControl ;
+	return noErr ;
+}
+
+OSErr AGAEmbedControl					(ControlHandle 			inControl,
+								 ControlHandle 			inContainer) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;	
+		info->containerControl = inContainer ;
+	}
+	return noErr ;
+}
+
+void AGADrawControl( ControlHandle control )
+{
+	DrawOneControl( control ) ;
+	ControlHandle iter = (ControlHandle) ((WindowPeek)(**control).contrlOwner)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->containerControl == control )
+			{ 		
+				AGADrawControl( iter  ) ;
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+
+ControlHandle AGANewControl(WindowPtr 				owningWindow,
+								 const Rect *			bounds,
+								 ConstStr255Param 		controlTitle,
+								 Boolean 				initiallyVisible,
+								 SInt16 				initialValue,
+								 SInt16 				minimumValue,
+								 SInt16 				maximumValue,
+								 SInt16 				procID,
+								 SInt32 				controlReference)
+{
+	ControlHandle theControl = NULL ;
+	Rect boundsRect = *bounds ;
+	SInt16 extCDEFID = kExtCDEFID << 4 + 0 ;
+ 	SInt16 oldProcID = extCDEFID ;
+ 	switch( procID ) 
+ 	{
+ 		case kControlScrollBarProc :
+ 		case kControlScrollBarLiveProc :
+ 			oldProcID = scrollBarProc ;
+ 			break ;
+ 		case kControlListBoxProc :
+ 			initialValue = 0 ;
+		default :
+ 			break ;
+ 	}
+ 	if ( oldProcID == extCDEFID && procID == kControlListBoxProc )
+ 	{
+ 		boundsRect.right -= 16 ;
+	}
+ 	theControl = NewControl( owningWindow , &boundsRect , controlTitle , initiallyVisible ,
+ 			initialValue , minimumValue , maximumValue , oldProcID , controlReference ) ;
+ 	if ( oldProcID == extCDEFID )
+ 	{
+ 		ControlDefProcPtr theProcPtr = NULL ;
+ 		SInt16 theVarCode = 0 ;
+ 		switch( procID )
+ 		{
+ 			case kControlPushButtonProc :
+ 				theProcPtr = AGAButtonDefProc ;
+ 				break ;
+ 			case kControlCheckBoxProc :
+ 				theProcPtr = AGACheckBoxDefProc ;
+ 				break ;
+ 			case kControlRadioButtonProc :
+ 				theProcPtr = AGARadioButtonDefProc ;
+ 				break ;
+ 			case kControlProgressBarProc :
+ 				theProcPtr = AGAProgressBarDefProc ;
+ 				break ;
+ 			case kControlPlacardProc :
+ 				theProcPtr = AGAPlacardDefProc ;
+ 				break ;
+ 			case kControlStaticTextProc :
+ 				theProcPtr = AGAStaticTextDefProc ;
+ 				break ;
+ 			case kControlListBoxProc :
+ 				theProcPtr = AGAListControlDefProc ;
+ 				break ;
+ 			case kControlEditTextProc :
+ 				theProcPtr = AGAEditTextDefProc ;
+ 				break ;
+ 			case kControlGroupBoxTextTitleProc :
+ 				theProcPtr = AGAStaticGroupBoxTextDefProc ;
+ 				break ;
+ 			case kControlBevelButtonNormalBevelProc :
+ 				theProcPtr = AGABevelButtonDefProc ;
+ 				break ;
+ 		}
+ 		
+ 		if ( theProcPtr )
+ 		{
+ 			NewExtCDEFInfo( theControl , theProcPtr , procID , controlReference ) ;
+ 		}
+	}
+	return theControl ;
+}
+
+void			AGASetThemeWindowBackground		(WindowRef 				inWindow,
+								 ThemeBrush 			inBrush,
+								 Boolean 				inUpdate) 
+{
+	GrafPtr port ;
+	GetPort( &port ) ;
+	SetPort( inWindow ) ;
+	if ( inBrush == kThemeBrushDialogBackgroundActive )
+	{
+			gAGABackgroundColor = 2 ;
+	}
+	else
+	{
+			gAGABackgroundColor = 0 ;
+	}
+	RGBBackColor( &gAGAColorArray[gAGABackgroundColor] ) ;
+	SetPort( port ) ;
+}
+
+
diff --git a/src/mac/carbon/aga.cpp b/src/mac/carbon/aga.cpp
new file mode 100644
index 0000000000..40abb5cbb9
--- /dev/null
+++ b/src/mac/carbon/aga.cpp
@@ -0,0 +1,2581 @@
+#include <wx/mac/uma.h>
+#include <wx/mac/aga.h>
+#include <extcdef.h>
+#include <PictUtils.h>
+
+pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
+pascal SInt32 AGAPlacardDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param);
+pascal SInt32 AGAStaticTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+pascal SInt32 AGAListControlDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+pascal SInt32 AGAEditTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+pascal SInt32 AGAStaticGroupBoxTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param) ;
+
+#define B														13
+#define	W														0
+
+SInt16 kAGARootControlProcID ;
+int gAGABackgroundColor = 0 ;
+
+const RGBColor gAGAColorArray[] = {	{0xFFFF, 0xFFFF, 0xFFFF},		//	W
+																		{0xEEEE, 0xEEEE, 0xEEEE}, 	//	1
+																		{0xDDDD, 0xDDDD, 0xDDDD}, 	//	2
+																		{0xCCCC, 0xCCCC, 0xCCCC}, 	//	3
+																		{0xBBBB, 0xBBBB, 0xBBBB}, 	//	4
+																		{0xAAAA, 0xAAAA, 0xAAAA}, 	//	5
+																		{0x9999, 0x9999, 0x9999}, 	//	6
+																		{0x8888, 0x8888, 0x8888},		//	7
+																		{0x7777, 0x7777, 0x7777},		//	8
+																		{0x6666, 0x6666, 0x6666},		//	9
+																		{0x5555, 0x5555, 0x5555},		//	10
+																		{0x4444, 0x4444, 0x4444},		//	11
+																		{0x2222, 0x2222, 0x2222},		//	12
+																		{0x0000, 0x0000, 0x0000}		//	B
+																	};
+
+char LAGADefaultOutline_mCorners[4][5][5] =	{
+																								//	topleft
+																								{
+																									{ -1, -1, -1, 12,  B },
+																									{ -1, -1,  B,  2,  2 },
+																									{ -1,  B,  2,  2,  5 },
+																									{ 12,  2,  2,  2,  8 },
+																									{  B,  2,  5,  8, -1 }
+																								},
+																								//	topright
+																								{
+																									{  B, 12, -1, -1, -1 },
+																									{  2,  3,  B, -1, -1 },
+																									{  5,  5,  4,  B, -1 },
+																									{  8,  5,  5,  7, 12 },
+																									{ -1,  8,  5,  8,  B }
+																								},
+																								//	bottomleft
+																								{
+																									{  B,  2,  5,  8, -1 },
+																									{ 12,  3,  5,  5,  8 },
+																									{ -1,  B,  4,  5,  5 },
+																									{ -1, -1,  B,  7,  8 },
+																									{ -1, -1, -1, 12,  B }
+																								},
+																								//	bottomright
+																								{
+																									{ -1,  8,  5,  8,  B },
+																									{  8,  5,  7,  8, 12 },
+																									{  5,  7,  8,  B, -1 },
+																									{  8,  8,  B, -1, -1 },
+																									{  B, 12, -1, -1, -1 }
+																								}
+																							};
+
+char LAGAPushButton_mCorners[3][4][4][4] =	{
+																							//	Enabled
+																							{
+																								//	topleft
+																								{
+																									{ -1, -1, 12,  B },
+																									{ -1,  B,  4,  2 },
+																									{ 12,  4,  W,  W },
+																									{  B,  2,  W,  W }
+																								},
+																								//	topright
+																								{
+																									{  B, 12, -1, -1 },
+																									{  2,  4,  B, -1 },
+																									{  W,  2,  5, 12 },
+																									{  2,  5,  8,  B }
+																								},
+																								//	bottomleft
+																								{
+																									{  B,  2,  W,  2 },
+																									{ 12,  4,  2,  5 },
+																									{ -1,  B,  4,  8 },
+																									{ -1, -1, 12,  B }
+																								},
+																								//	bottomright
+																								{
+																									{  5,  5,  8,  B },
+																									{  5,  8,  8, 12 },
+																									{  8,  8,  B, -1 },
+																									{  B, 12, -1, -1 }
+																								}
+																							},
+																							//	Pressed
+																							{
+																								//	topleft
+																								{
+																									{ -1, -1, 12,  B },
+																									{ -1,  B, 10,  8 },
+																									{ 12, 10,  8,  4 },
+																									{  B,  8,  4,  4 }
+																								},
+																								//	topright
+																								{
+																									{  B, 12, -1, -1 },
+																									{  8, 10,  B, -1 },
+																									{  4,  4,  8, 12 },
+																									{  4,  4,  4,  B }
+																								},
+																								//	bottomleft
+																								{
+																									{  B,  8,  4,  4 },
+																									{ 12, 10,  4,  4 },
+																									{ -1,  B, 10,  4 },
+																									{ -1, -1, 12,  B }
+																								},
+																								//	bottomright
+																								{
+																									{  4,  4,  4,  B },
+																									{  4,  4, 10, 12 },
+																									{  4, 10,  B, -1 },
+																									{  B, 12, -1, -1 }
+																								}
+																							},
+																							//	Disabled
+																							{
+																								//	topleft
+																								{
+																									{ -1, -1,  7,  7 },
+																									{ -1,  7,  4,  2 },
+																									{  7,  4,  1,  1 },
+																									{  7,  2,  1,  1 }
+																								},
+																								//	topright
+																								{
+																									{  7,  7, -1, -1 },
+																									{  2,  4,  7, -1 },
+																									{  1,  2,  4,  7 },
+																									{  2,  4,  5,  7 }
+																								},
+																								//	bottomleft
+																								{
+																									{  7,  2,  1,  2 },
+																									{  7,  4,  2,  4 },
+																									{ -1,  7,  4,  5 },
+																									{ -1, -1,  7,  7 }
+																								},
+																								//	bottomright
+																								{
+																									{  4,  4,  5,  7 },
+																									{  4,  5,  5,  7 },
+																									{  5,  5,  7, -1 },
+																									{  7,  7, -1, -1 }
+																								}
+																							}
+																						};
+
+RGBColor gAGARamp[] =
+{
+	/* black */
+	{ 0 , 0 , 0 } ,
+	/* white */
+	{ 65535 , 65535 , 65535 } ,
+	/* 1 */
+	{ 61166 , 61166 , 61166 } ,
+	/* 2 */
+	{ 56797 , 56797 , 56797 } ,
+	/* 3 */
+	{ 52428 , 52428 , 52428 } ,
+	/* 4 */
+	{ 48059 , 48059 , 48059 } ,
+	/* 5 */
+	{ 43690 , 43690 , 43690 } ,
+	/* 6 */
+	{ 39321 , 39321 , 39321 } ,
+	/* 7 */
+	{ 34952 , 34952 , 34952 } ,
+	/* 8 */
+	{ 30583 , 30583 , 30583 } ,
+	/* 9 */
+	{ 26214 , 26214 , 26214 } ,
+	/* 10 */
+	{ 21845 , 21845 , 21845 } ,
+	/* 11 */
+	{ 17476 , 17476 , 17476 } ,
+	/* 12 */
+	{ 13107 , 13107 , 13107 } ,
+	/* A1 */
+	{ 8738 , 8738 , 8738 } ,
+	/* A2 */
+	{ 4369 , 4369 , 4369 } ,
+	
+} ;
+
+RGBColor gAGABlueRamp[] =
+{
+	/* black */
+	{ 0 , 0 , 0 } ,
+	/* white */
+	{ 65535 , 65535 , 65535 } ,
+	/* 1 */
+	{ 61166 , 61166 , 65535 } ,
+	/* 2 */
+	{ 56797 , 56797 , 65535 } ,
+	/* 3 */
+	{ 52428 , 52428 , 65535 } ,
+	/* 4 */
+	{ 48059 , 48059 , 65535 } ,
+	/* 5 */
+	{ 43690 , 43690 , 65535 } ,
+	/* 6 */
+	{ 39321 , 39321 , 65535 } ,
+	/* 7 */
+	{ 34952 , 34952 , 65535 } ,
+	/* 8 */
+	{ 30583 , 30583 , 65535 } ,
+	/* 9 */
+	{ 26214 , 26214 , 65535 } ,
+	/* 10 */
+	{ 21845 , 21845 , 65535 } ,
+	/* 11 */
+	{ 17476 , 17476 , 65535 } ,
+	/* 12 */
+	{ 13107 , 13107 , 65535 } ,
+	/* A1 */
+	{ 8738 , 8738 , 65535 } ,
+	/* A2 */
+	{ 4369 , 4369 , 65535 } ,
+	
+} ;
+
+enum eAGARampColor { 
+	kAGATransparent = -1 ,
+	kAGABlack = 0 ,
+	kAGAWhite = 1 ,
+	kAGA1 = 2 ,
+	kAGA2 = 3 ,
+	kAGA3 = 4 ,
+	kAGA4 = 5 ,
+	kAGA5 = 6 ,
+	kAGA6 = 7 ,
+	kAGA7 = 8 ,
+	kAGA8 = 9 ,
+	kAGA9 = 10 ,
+	kAGA10 = 11 ,
+	kAGA11 = 12 ,
+	kAGA12 = 13 ,
+	kAGAA1 = 14 ,
+	kAGAA2 = 15 ,
+} ;
+// defprocs
+
+enum eAGAState {
+	kAGAStateEnabled = 0 ,
+	kAGAStatePressed = 1 ,
+	kAGAStateDisabled = 2 ,
+	kAGAStateInactive = 3 
+} ;
+
+/*
+typedef struct sControlData
+{
+	ControlPartCode 	m_part ;
+	ResType 					m_tag ;
+	Size 							m_size ;
+} ;
+
+OSErr AGAFindControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , long *outOffset) ;
+OSErr AGAFindControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , long *outOffset) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	long offset = 0 ;
+	long size = GetHandleSize( info->data ) ;
+	char* data = *(info->data) ;
+	sControlData* current ;
+	while( offset + sizeof( sControlData ) <= size )
+	{
+		current = (sControlData*) (data+offset ) ;
+		if ( ( inPart == kControlEntireControl || inPart == current->m_part ) && inTagName == current->m_tag )
+		{
+			*outOffset = offset ;
+			return noErr ;
+		}
+	}
+	return errDataNotSupported ; // nothing found
+}
+
+OSErr AGARemoveControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName ) ;
+OSErr AGARemoveControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName ) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	long offset = 0 ;
+	long size = GetHandleSize( info->data ) ;
+	char* data = *(info->data) ;
+	sControlData* current ;
+	while( offset + sizeof( sControlData ) <= size )
+	{
+		current = (sControlData*) (data+offset ) ;
+		if ( ( inPart == kControlEntireControl || inPart == current->m_part ) && inTagName == current->m_tag )
+		{
+			long chunkSize = current->m_size + sizeof ( sControlData ) ;
+			memcpy( data + offset , data + offset + chunkSize , size - offset - chunkSize ) ;
+			SetHandleSize( info->data , size - chunkSize ) ;
+			return noErr ;
+		}
+	}
+	return noErr ;
+}
+
+OSErr AGAAddControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , Size	inSize, Ptr inData) ;
+OSErr AGAAddControlData( ControlHandle inControl , ControlPartCode inPart , ResType inTagName , Size	inSize, Ptr inData) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	long offset = 0 ;
+	long size = GetHandleSize( info->data ) ;
+	SetHandleSize( info->data , size + sizeof( sControlData ) + inSize ) ;
+	if (  MemError() == noErr )
+	{
+		char* data = *(info->data) ;
+		sControlData* current = (sControlData*)( data + size ) ;
+		current->m_tag = inTagName ;
+		current->m_part = inPart ;
+		current->m_size = inSize ;
+		memcpy( data + size + sizeof( sControlData ) , inData , inSize ) ;
+		return noErr ;
+	}
+	return errDataNotSupported ;
+}
+
+
+OSErr AGAGetControlDataSize				(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size *					outMaxSize)
+{
+	long offset ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	char* data = *(info->data) ;
+	
+	OSErr err = AGAFindControlData( inControl , inPart , inTagName , &offset ) ;
+	if ( !err )
+	{
+		sControlData* current = (sControlData*) (data+offset ) ;
+		*outMaxSize = current->m_size ;
+	}
+	return err ;
+}
+
+OSErr AGAGetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inBufferSize,
+								 Ptr 					outBuffer,
+								 Size *					outActualSize)
+{
+	long offset ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	char* data = *(info->data) ;
+	
+	OSErr err = AGAFindControlData( inControl , inPart , inTagName , &offset ) ;
+	if ( !err )
+	{
+		sControlData* current = (sControlData*) (data+offset ) ;
+		*outActualSize = current->m_size ;
+		if ( outBuffer )
+		{
+			if ( inBufferSize <= current->m_size )
+				memcpy( outBuffer , data + offset + sizeof( sControlData )  , current->m_size ) ;
+			else
+				err = errDataNotSupported ;
+		}
+	}
+	return err ;	
+}
+
+OSErr AGASetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inSize,
+								 Ptr 					inData)
+{
+	long offset ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	char* data = *(info->data) ;
+	
+	OSErr err = AGAFindControlData( inControl , inPart , inTagName , &offset ) ;
+	if ( !err )
+	{
+		sControlData* current = (sControlData*) (data+offset ) ;
+		if ( current->m_size == inSize )
+		{
+				memcpy( data + offset + sizeof( sControlData )  , inData , inSize) ;
+		}
+		else
+		{
+			AGARemoveControlData( inControl , inPart , inTagName ) ;
+			AGAAddControlData( inControl , inPart , inTagName , inSize , inData ) ;
+		}
+	}
+	else
+	{
+		AGAAddControlData( inControl , inPart , inTagName , inSize , inData ) ;
+	}
+	return err ;	
+}
+*/
+
+OSErr AGASetControlFontStyle				(ControlHandle 			inControl,
+								 const ControlFontStyleRec * inStyle)	
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	if ( inStyle->flags == 0 )
+	{
+		// back to defaults
+	}
+	else
+	{
+		if ( inStyle->flags & kControlUseFontMask )
+		{
+			info->fontStyle.font = inStyle->font ;
+		}
+		if ( inStyle->flags & kControlUseSizeMask )
+		{
+			info->fontStyle.size = inStyle->size ;
+		}
+		if ( inStyle->flags & kControlUseFaceMask )
+		{
+			info->fontStyle.style = inStyle->style ;
+		}
+		if ( inStyle->flags & kControlUseModeMask )
+		{
+			info->fontStyle.mode = inStyle->mode ;
+		}
+		if ( inStyle->flags & kControlUseJustMask )
+		{
+			info->fontStyle.just = inStyle->just ;
+		}
+		if ( inStyle->flags & kControlUseForeColorMask )
+		{
+			info->fontStyle.foreColor = inStyle->foreColor ;
+		}
+		if ( inStyle->flags & kControlUseBackColorMask )
+		{
+			info->fontStyle.backColor = inStyle->backColor ;
+		}
+	}
+	return noErr ;
+}
+
+OSErr AGASetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inSize,
+								 Ptr 					inData)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	ControlDataAccessRec rec ;
+	
+	rec.tag = inTagName ;
+	rec.part = inPart ;
+	rec.size = inSize ;
+	rec.dataPtr = inData ;
+	
+	return info->defProc( info->procID , inControl , kControlMsgSetData , (long) &rec ) ;
+}
+
+SInt16 AGAHandleControlKey				(ControlHandle 			inControl,
+								 SInt16 				inKeyCode,
+								 SInt16 				inCharCode,
+								 SInt16 				inModifiers) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	ControlKeyDownRec rec ;
+	
+	rec.modifiers = inModifiers ;
+	rec.keyCode = inKeyCode ;
+	rec.charCode = inCharCode ;
+	
+	return info->defProc( info->procID , inControl , kControlMsgKeyDown , (long) &rec ) ;
+}
+
+ControlPartCode AGAHandleControlClick				(ControlHandle 			inControl,
+								 Point 					inWhere,
+								 SInt16 				inModifiers,
+								 ControlActionUPP 		inAction)	
+{
+	return TrackControl( inControl , inWhere , inAction ) ;
+}
+
+Boolean AGATestForNewControl( ControlHandle inControl )
+{
+	if ( (**inControl).contrlRfCon  > 0x100 && !( (**inControl).contrlRfCon % 2 ) )
+	{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+			return info->magic == kExtCDEFMagic ;
+	}
+	return FALSE ;
+}
+void AGAIdleControls					(WindowPtr 				inWindow) 
+{
+	ControlHandle iter = (ControlHandle) ((WindowPeek)inWindow)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->defProc( info->procID , iter , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+			{
+				if ( info->defProc( info->procID , iter , kControlMsgGetFeatures , 0 ) & kControlWantsIdle )
+				{
+					info->defProc( info->procID , iter , kControlMsgIdle , 0 ) ;
+				}
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+void AGAUpdateOneControl( ControlHandle control , RgnHandle inRgn )
+{
+	DrawOneControl( control ) ;
+	ControlHandle iter = (ControlHandle) ((WindowPeek)(**control).contrlOwner)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->containerControl == control )
+			{ 		
+				AGAUpdateOneControl( iter , inRgn ) ;
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+void AGAUpdateControls( WindowPtr inWindow , RgnHandle inRgn ) 
+{
+	ControlHandle root ;
+	AGAGetRootControl( inWindow , &root ) ;
+	AGAUpdateOneControl( root , inRgn ) ;
+	
+	// and then all others
+	
+	ControlHandle iter = (ControlHandle) ((WindowPeek)inWindow)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+		}
+		else
+		{
+			DrawOneControl( iter ) ;
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+OSErr AGAGetRootControl( WindowPtr inWindow , ControlHandle *outControl ) 
+{
+	ControlHandle iter = (ControlHandle) ((WindowPeek)inWindow)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->procID == kAGARootControlProcID )
+			{ 	
+				*outControl  = iter ;
+				return noErr ;
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+	return -1 ;
+}
+
+void AGADeactivateControl( ControlHandle inControl ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+		if ( info->defProc( info->procID , inControl , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+		{
+			if ( info->defProc( info->procID , inControl , kControlMsgGetFeatures , 0 ) & kControlWantsActivate )
+			{
+				info->defProc( info->procID , inControl , kControlMsgActivate , 0 ) ;
+			}
+		}
+	}
+}
+
+void AGAActivateControl( ControlHandle inControl ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+		if ( info->defProc( info->procID , inControl , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+		{
+			if ( info->defProc( info->procID , inControl , kControlMsgGetFeatures , 0 ) & kControlWantsActivate )
+			{
+				info->defProc( info->procID , inControl , kControlMsgActivate , 1 ) ;
+			}
+		}
+	}
+}
+
+OSErr AGASetKeyboardFocus				(WindowPtr 				inWindow,
+								 ControlHandle 			inControl,
+								 ControlFocusPart 		inPart)
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+		if ( info->defProc( info->procID , inControl , kControlMsgTestNewMsgSupport , 0 ) == kControlSupportsNewMessages )
+		{
+			if ( info->defProc( info->procID , inControl , kControlMsgGetFeatures , 0 ) & kControlSupportsFocus )
+			{
+				return info->defProc( info->procID , inControl , kControlMsgFocus , inPart ) ;
+			}
+		}
+	}
+	return errControlDoesntSupportFocus ;
+}
+
+OSErr AGAGetBestControlRect				(ControlHandle 			inControl,
+								 Rect *					outRect,
+								 SInt16 *				outBaseLineOffset)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;
+	ControlCalcSizeRec rec ;
+	rec.width = (**inControl).contrlRect.right - (**inControl).contrlRect.left ;
+	rec.height = (**inControl).contrlRect.bottom - (**inControl).contrlRect.top ;
+	rec.baseLine = 0;
+	
+	OSErr err = info->defProc( info->procID , inControl , kControlMsgCalcBestRect , (long) &rec ) ;
+	if ( !err )
+	{
+		outRect->left = outRect->top = 0 ;
+		outRect->right = rec. width ;
+		outRect->bottom = rec. height ;
+		*outBaseLineOffset = rec. baseLine ;		
+	}
+	return err ;
+}
+
+
+OSErr AGAGetControlData					(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size 					inBufferSize,
+								 Ptr 					outBuffer,
+								 Size *					outActualSize)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon  ;
+	ControlDataAccessRec rec ;
+	
+	rec.tag = inTagName ;
+	rec.part = inPart ;
+	rec.size = inBufferSize ;
+	rec.dataPtr = outBuffer ;
+	
+	OSErr err = info->defProc( info->procID , inControl , kControlMsgGetData , (long) &rec ) ;
+	*outActualSize = rec.size ;
+	return err ;
+}
+
+OSErr AGAGetControlDataSize				(ControlHandle 			inControl,
+								 ControlPartCode 		inPart,
+								 ResType 				inTagName,
+								 Size *					outMaxSize)
+{
+	return AGAGetControlData( inControl , inPart , inTagName , 0 , NULL , outMaxSize ) ;
+}
+
+
+void NewExtCDEFInfo( ControlHandle theControl , ControlDefProcPtr defproc , SInt16 procID , long refcon ) 
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* ) malloc( sizeof( ExtCDEFInfo ) ) ;
+	info->defProc = defproc ;
+	info->hasFocus = false ;
+	info->magic = kExtCDEFMagic ;
+	info->contrlRfCon = refcon ;
+	info->procID = procID ;
+	info->containerControl = NULL ;
+	info->children = NewHandle(0) ;
+	info->fontStyle.flags = 0 ;
+	info->fontStyle.font = 0 ;
+	info->fontStyle.size = 12 ;
+	info->fontStyle.style = 0 ;
+	info->fontStyle.mode = 0 ;
+	info->fontStyle.just = 0 ;
+	info->fontStyle.foreColor = gAGARamp[ kAGABlack ] ;
+	info->fontStyle.backColor = gAGARamp[ kAGA2 ] ;
+	(**theControl).contrlRfCon = (long) info ;	
+	defproc( info->procID, theControl, initCntl, 0) ;
+}
+
+void DisposeExtCDEFInfo( ControlHandle theControl) 
+{
+	if ( AGATestForNewControl( theControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;
+		if ( info )
+		{
+			DisposeHandle( info->children ) ;
+			info->children = NULL ;
+			free( (void*) (**theControl).contrlRfCon ) ;
+		}
+	}
+}
+
+const short kAGAProgressHeight = 14 ;
+
+void AGADrawRectPlacard( const Rect *inRect , eAGAState inState , bool fill = false ) ;
+void AGADrawRectProgress( const Rect *inRect , eAGAState inState , double percentage ) ;
+
+void AGADrawRectPlacard( const Rect *inRect , eAGAState inState , bool fill ) 
+{
+	Rect rect = *inRect ;
+	RGBColor pixelColor ;
+	if ( inState == kAGAStateInactive )
+	{
+		RGBForeColor( &gAGARamp[ kAGA10 ] ) ;
+		FrameRect( &rect ) ;
+		if ( fill )
+		{
+			InsetRect( &rect , 1 , 1 ) ;
+			RGBForeColor( &gAGARamp[ kAGA1 ] ) ;
+			PaintRect( &rect ) ;
+		}
+		return ;
+	}
+
+	RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+	FrameRect( &rect ) ;
+	InsetRect( &rect , 1 , 1 ) ;
+	
+	if ( inState == kAGAStateEnabled || inState == kAGAStateDisabled )
+		RGBForeColor( &gAGARamp[ kAGAWhite ] ) ;
+	else
+		RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+		
+	MoveTo( rect.left , rect.bottom - 1 -1 ) ;
+	LineTo( rect.left , rect.top ) ;
+	LineTo( rect.right-1-1  , rect.top ) ;
+	
+	if ( inState == kAGAStateEnabled || inState == kAGAStateDisabled )
+		pixelColor =  gAGARamp[ kAGA2 ] ;
+	else
+		pixelColor = gAGARamp[ kAGA8 ] ;
+
+	SetCPixel( rect.right-1  , rect.top , &pixelColor ) ;
+	SetCPixel( rect.left , rect.bottom-1  , &pixelColor ) ;
+	
+	if ( inState == kAGAStateEnabled )
+		RGBForeColor( &gAGARamp[ kAGA5 ] ) ;
+	else if ( inState == kAGAStateDisabled )
+		RGBForeColor( &gAGARamp[ kAGA4 ] ) ;
+	else
+		RGBForeColor( &gAGARamp[ kAGA6 ] ) ;
+	
+	MoveTo( rect.left + 1 , rect.bottom-1  ) ;
+	LineTo( rect.right-1  , rect.bottom-1  ) ;
+	LineTo( rect.right-1  , rect.top-1 ) ;
+	
+	if ( fill )
+	{
+		InsetRect( &rect , 1 , 1 ) ;
+		if ( inState == kAGAStateEnabled || inState == kAGAStateDisabled )
+			RGBForeColor( &gAGARamp[ kAGA2 ] ) ;
+		else
+			RGBForeColor( &gAGARamp[ kAGA8 ] ) ;
+		PaintRect( &rect ) ;
+	}
+}
+
+void AGADrawRectProgress( const Rect *inRect , eAGAState inState , double percentage ) 
+{
+	Rect rect = *inRect ;
+	rect.bottom = rect.top + 14 ; 
+	RGBColor pixelColor ;
+	
+	RGBForeColor( &gAGARamp[ kAGA5 ]) ;
+	MoveTo( rect.left , rect.bottom - 1 -1  ) ;
+	LineTo( rect.left , rect.top ) ;
+	LineTo( rect.right-1-1  , rect.top ) ;
+
+	RGBForeColor( &gAGARamp[ kAGAWhite ] ) ;
+	MoveTo( rect.left + 1 , rect.bottom -1 ) ;
+	LineTo( rect.right-1  , rect.bottom -1 ) ;
+	LineTo( rect.right-1  , rect.top-1 ) ;
+
+	InsetRect( &rect , 1 , 1 ) ;
+	RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+			
+	Rect barLeft = rect , barRight = rect ;
+	
+	int	position = percentage * ( rect.right - rect.left ) ;
+	barLeft.right = barLeft.left + position ;
+	barRight.left = barLeft.left + position ;
+	FrameRect( &barLeft ) ;
+	FrameRect( &barRight ) ;
+	
+	InsetRect( &barLeft , 1 , 1 ) ;
+
+	InsetRect( &barRight , 1 , 1 ) ;
+	
+	if ( !EmptyRect( &barRight ) )
+	{
+		RGBForeColor( &gAGARamp[ kAGA10 ] ) ;
+		MoveTo( barRight.left , barRight.bottom -1 ) ;
+		LineTo( barRight.left , barRight.top ) ;
+		barRight.left += 1 ;
+		if ( !EmptyRect( &barRight ) )
+		{
+			RGBForeColor( &gAGARamp[ kAGA7 ] ) ;
+			MoveTo( barRight.left , barRight.bottom-1  ) ;
+			LineTo( barRight.left , barRight.top ) ;
+			LineTo( barRight.right-1-1  , barRight.top ) ;
+			RGBForeColor( &gAGARamp[ kAGA2 ] ) ;
+			MoveTo( barRight.left + 1 , barRight.bottom -1 ) ;
+			LineTo( barRight.right-1  , barRight.bottom -1 ) ;
+			LineTo( barRight.right-1  , barRight.top - 1) ;
+			pixelColor = gAGARamp[ kAGA4 ]  ;
+			SetCPixel( barRight.right-1  , barRight.top , &pixelColor ) ;
+			InsetRect( &barRight , 1  , 1)  ;
+			if ( !EmptyRect( &barRight ) )
+			{
+				RGBForeColor( &gAGARamp[ kAGA4 ] ) ;
+				PaintRect( &barRight ) ;
+			}
+		}
+		if ( !EmptyRect( &barLeft ) )
+		{
+			RGBForeColor( &gAGABlueRamp[ kAGA8 ] ) ;
+			MoveTo( barLeft.left , barLeft.bottom -1 ) ;
+			LineTo( barLeft.left , barLeft.top ) ;
+			LineTo( barLeft.left+1 , barLeft.top ) ;
+			RGBForeColor( &gAGABlueRamp[ kAGA12 ] ) ;			
+			MoveTo( barLeft.left + 2, barLeft.bottom-1  ) ;
+			LineTo( barLeft.right-1   , barLeft.bottom-1  ) ;
+			LineTo( barLeft.right-1  , barLeft.top -1 ) ;
+			RGBForeColor( &gAGABlueRamp[ kAGA10 ] ) ;			
+			MoveTo( barLeft.left + 2, barLeft.top ) ;
+			LineTo( barLeft.right-1   , barLeft.top ) ;
+			pixelColor = gAGABlueRamp[ kAGA10] ;
+			SetCPixel( barLeft.left + 1, barLeft.bottom-1  , &pixelColor ) ;
+			InsetRect( &barLeft , 1 , 1 ) ;
+			if ( !EmptyRect( &barLeft ) )
+			{
+				// do more here
+				RGBForeColor( &gAGABlueRamp[ kAGA3 ] ) ;
+				PaintRect( &barLeft ) ;
+			}
+		}
+	}
+}
+
+SInt32 AGAGetDataHelper( ControlDataAccessRec *rec , Size size , Ptr data ) ;
+SInt32 AGAGetDataHelper( ControlDataAccessRec *rec , Size size , Ptr data ) 
+{
+	if ( rec->dataPtr == NULL )
+	{
+		rec->size = size ;
+		return noErr ;
+	}
+	else
+	{
+		if ( rec->size < size )
+			return errDataSizeMismatch ;
+		
+		rec->size = size ;
+		memcpy( rec->dataPtr , data , size ) ;
+		return noErr ;
+	}
+}
+
+void AGASetFontStyle( ControlFontStyleRec *fontstyle ) ;
+void AGASetFontStyle( ControlFontStyleRec *fontstyle )
+{
+		if( fontstyle->font >= 0 )
+		{
+			::TextFont( fontstyle->font ) ;
+			::TextSize( fontstyle->size ) ;
+			::TextFace( fontstyle->style ) ;
+		}
+		else
+		{
+			switch( fontstyle->font )
+			{
+				case kControlFontBigSystemFont :
+					::TextFont( systemFont ) ; 
+					::TextSize( 12 ) ;
+					::TextFace( 0 ) ;
+					break ;
+				case kControlFontSmallSystemFont :
+					::TextFont( kFontIDGeneva ) ; 
+					::TextSize( 10 ) ;
+					::TextFace( 0 ) ;
+					break ;
+				case kControlFontSmallBoldSystemFont :
+					::TextFont( kFontIDGeneva ) ; 
+					::TextSize( 10 ) ;
+					::TextFace( bold ) ;
+					break ;
+			}
+		}
+		::RGBForeColor( &fontstyle->foreColor ) ;
+		::RGBBackColor( &fontstyle->backColor ) ;
+} ;
+
+class AGAPortHelper 
+{
+public :
+	AGAPortHelper() 
+	{
+		GetPenState( &oldPenState ) ;
+		GetBackColor( &oldBackColor ) ;
+		GetForeColor( &oldForeColor ) ;
+
+		GetPort( &port ) ;
+		clip = NewRgn() ;
+		GetClip( clip );
+		font = port->txFont;
+		size = port->txSize;
+		style = port->txFace;
+		mode = port->txMode;	
+
+	}
+	~AGAPortHelper()
+	{
+			SetPort( port ) ;
+			SetClip( clip ) ;
+			DisposeRgn( clip ) ;
+			RGBForeColor(&oldForeColor);
+			RGBBackColor(&oldBackColor);
+			SetPenState(&oldPenState);				
+
+			TextFont( font );
+			TextSize( size );
+			TextFace( style );
+			TextMode( mode );
+	}
+
+private :
+				GrafPtr			port ;
+				PenState		oldPenState ;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RgnHandle		clip ;
+				short				font ;
+				short				size ;
+				short				style ;
+				short 			mode ;
+} ;
+
+pascal SInt32 AGAProgressBarDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{	
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				GetPenState( &oldPenState ) ;
+				GetBackColor( &oldBackColor ) ;
+				GetForeColor( &oldForeColor ) ;
+				
+				{
+					int			theValue = GetControlValue(theControl) ;
+					int			theMinimum = GetControlMinimum(theControl) ;
+					int			theMaximum = GetControlMaximum(theControl) ;
+					
+					AGADrawRectProgress( &(**theControl).contrlRect , kAGAStateEnabled , (( double )( theValue - theMinimum )) / ( theMaximum-theMinimum ) ) ;
+				}
+			
+				RGBForeColor(&oldForeColor);
+				RGBBackColor(&oldBackColor);
+				SetPenState(&oldPenState);				
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+
+pascal SInt32 AGAPlacardDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				GetPenState( &oldPenState ) ;
+				GetBackColor( &oldBackColor ) ;
+				GetForeColor( &oldForeColor ) ;
+				
+				{
+					AGADrawRectPlacard( &(**theControl).contrlRect , kAGAStateEnabled , true  ) ;
+				}
+			
+				RGBForeColor(&oldForeColor);
+				RGBBackColor(&oldBackColor);
+				SetPenState(&oldPenState);				
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGABevelButtonDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case initCntl :
+			info->privateData = (long) malloc( sizeof( ControlButtonContentInfo ) ) ;
+			memset( (char*) info->privateData , 0 , sizeof( ControlButtonContentInfo )  ) ;
+			break ;
+		case dispCntl :
+			free( (void*) info->privateData ) ;
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlBevelButtonContentTag )
+				{
+					memcpy( (char*) info->privateData , rec->dataPtr , rec->size ) ;
+					return noErr ;
+				}
+				return errDataNotSupported ;
+			}
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = 0 ;
+				rec->height = 20 ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					Boolean mRadioBehavior = false ;
+					
+					int	mValue = GetControlValue( theControl ) ;
+					long theValue = (mRadioBehavior ? mValue : 0);
+					Boolean inPushed = (**theControl).contrlHilite ;
+					Boolean down = inPushed || (theValue != 0);
+					Boolean hasColor = 1;
+					int mEnabled = 1 ;
+					int triState_Off = 3 ;
+					Boolean disabled = (mEnabled == triState_Off);
+				
+					Rect frame = (**theControl).contrlRect ;
+					
+					//	Draw the black frame;
+					::MoveTo(frame.left + 1, frame.top);
+					::LineTo(frame.right - 2, frame.top);
+					::MoveTo(frame.right - 1, frame.top + 1);
+					::LineTo(frame.right - 1, frame.bottom - 2);
+					::MoveTo(frame.right - 2, frame.bottom - 1);
+					::LineTo(frame.left + 1, frame.bottom - 1);
+					::MoveTo(frame.left, frame.bottom - 2);
+					::LineTo(frame.left, frame.top + 1);
+					
+					//	Draw the inside (w/o the Icon)
+					::InsetRect(&frame, 1, 1);
+					if (hasColor)
+						{
+							AGASetFontStyle( &info->fontStyle ) ;
+							if (down)
+								::RGBBackColor(&gAGAColorArray[4]);
+						}
+					::EraseRect(&frame);
+					
+					//	Draw the shadows
+					if (hasColor)
+						{
+							::RGBForeColor(&gAGAColorArray[7]);
+							if (down)
+								{
+									::MoveTo(frame.left, frame.bottom - 1);
+									::LineTo(frame.left, frame.top);
+									::LineTo(frame.right - 1, frame.top);
+								}
+							else
+								{
+									::MoveTo(frame.right - 1, frame.top);
+									::LineTo(frame.right - 1, frame.bottom - 1);
+									::LineTo(frame.left, frame.bottom - 1);
+									::MoveTo(frame.right - 2, frame.top + 1);
+									::LineTo(frame.right - 2, frame.bottom - 2);
+									::LineTo(frame.left + 1, frame.bottom - 2);
+									::ForeColor(whiteColor);
+									::MoveTo(frame.left, frame.bottom - 2);
+									::LineTo(frame.left, frame.top);
+									::LineTo(frame.right - 2, frame.top);
+								}
+						}
+					
+					//	Draw the Icon
+					
+					frame = (**theControl).contrlRect ;
+ 					PictInfo theInfo ;
+					PicHandle thePict = ((ControlButtonContentInfo*) info->privateData)->u.picture ;
+					if ( thePict )
+					{
+						GetPictInfo( thePict , &theInfo , 0 , 0 , systemMethod , 0 ) ;
+	   				Rect bitmaprect = { 0 , 0 , theInfo.sourceRect.bottom - theInfo.sourceRect.top , 
+	   																		theInfo.sourceRect.right - theInfo.sourceRect.left } ;
+						::OffsetRect( &bitmaprect , (frame.right + frame.left)/2 - bitmaprect.right / 2 , (frame.bottom + frame.top) / 2 - bitmaprect.bottom / 2 ) ;
+						if (inPushed)
+							::OffsetRect( &bitmaprect , 1 , 1 ) ;
+						::DrawPicture( thePict , &bitmaprect ) ;
+					}
+				}
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAButtonDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case initCntl :
+			(**theControl).contrlData = NULL ;
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				Boolean isDefault = *((Boolean*)rec->dataPtr ) ;
+				(**theControl).contrlData = (Handle) isDefault ;
+				return noErr ;
+			}
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = 0 ;
+				rec->height = 20 ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					Boolean mRadioBehavior = false ;
+					
+					Rect frame, tempRect;
+					int	mValue = GetControlValue( theControl ) ;
+					long theValue = (mRadioBehavior ? mValue : 0);
+					Boolean inPushed = (**theControl).contrlHilite ;
+					Boolean down = inPushed || (theValue != 0);
+					Boolean hasColor = 1;
+					int mEnabled = 1 ;
+					int triState_Off = 3 ;
+					Boolean disabled = (mEnabled == triState_Off);
+				
+//					theState.Normalize();
+//					CalcLocalFrameRect(frame);
+					frame= (**theControl).contrlRect ;
+					
+					if ( (**theControl).contrlData )
+					{
+						InsetRect( &frame , -3 , -3 ) ;
+						{
+							::MoveTo(frame.left + 3, frame.top);
+							::LineTo(frame.right - 4, frame.top);
+							::LineTo(frame.right - 1, frame.top + 3);
+							::LineTo(frame.right - 1, frame.bottom - 4);
+							::LineTo(frame.right - 4, frame.bottom - 1);
+							::LineTo(frame.left + 3, frame.bottom - 1);
+							::LineTo(frame.left, frame.bottom - 4);
+							::LineTo(frame.left, frame.top + 3);
+							::LineTo(frame.left + 3, frame.top);
+							
+							if (hasColor)
+								{
+									const RGBColor *col = gAGAColorArray;
+									for (int i = 0; i < 5; i++)
+										for (int j = 0; j < 5; j++)
+											{
+												if (LAGADefaultOutline_mCorners[0][i][j] != -1)
+													::SetCPixel(frame.left + j, frame.top + i, &col[LAGADefaultOutline_mCorners[0][i][j]]);
+												if (LAGADefaultOutline_mCorners[1][i][j] != -1)
+													::SetCPixel(frame.right - 5 + j, frame.top + i, &col[LAGADefaultOutline_mCorners[1][i][j]]);
+												if (LAGADefaultOutline_mCorners[2][i][j] != -1)
+													::SetCPixel(frame.left + j, frame.bottom - 5 + i, &col[LAGADefaultOutline_mCorners[2][i][j]]);
+												if (LAGADefaultOutline_mCorners[3][i][j] != -1)
+													::SetCPixel(frame.right - 5 + j, frame.bottom - 5 + i, &col[LAGADefaultOutline_mCorners[3][i][j]]);
+											}
+									
+									::RGBForeColor(&gAGAColorArray[2]);
+									::MoveTo(frame.left + 1, frame.top + 5);
+									::LineTo(frame.left + 1, frame.bottom - 6);
+									::MoveTo(frame.left + 5, frame.top + 1);
+									::LineTo(frame.right - 6, frame.top + 1);
+									
+									::RGBForeColor(&gAGAColorArray[5]);
+									::MoveTo(frame.left + 4, frame.top + 2);
+									::LineTo(frame.right - 5, frame.top + 2);
+									::LineTo(frame.right - 3, frame.top + 4);
+									::LineTo(frame.right - 3, frame.bottom - 5);
+									::LineTo(frame.right - 5, frame.bottom - 3);
+									::LineTo(frame.left + 4, frame.bottom - 3);
+									::LineTo(frame.left + 2, frame.bottom - 5);
+									::LineTo(frame.left + 2, frame.top + 4);
+									::LineTo(frame.left + 4, frame.top + 2);
+									
+									::RGBForeColor(&gAGAColorArray[8]);
+									::MoveTo(frame.right - 2, frame.top + 5);
+									::LineTo(frame.right - 2, frame.bottom - 6);
+									::MoveTo(frame.left + 5, frame.bottom - 2);
+									::LineTo(frame.right - 6, frame.bottom - 2);
+								}
+						}		
+					}
+					
+					AGASetFontStyle( &info->fontStyle ) ;
+					frame= (**theControl).contrlRect ;
+
+					tempRect = frame;
+					::InsetRect(&tempRect, 1, 1);
+					if (hasColor)
+						{
+							if (down)
+								::RGBBackColor(&gAGAColorArray[4]);
+						}
+					EraseRect(&tempRect);
+					
+					//	Draw the frame;
+					if (disabled)
+						{
+							if (hasColor)
+								::RGBForeColor(&gAGAColorArray[7]);
+							else
+								::PenPat(&qd.gray);
+						}
+					::MoveTo(frame.left + 2, frame.top);
+					::LineTo(frame.right - 3, frame.top);
+					::LineTo(frame.right - 1, frame.top + 2);
+					::LineTo(frame.right - 1, frame.bottom - 3);
+					::LineTo(frame.right - 3, frame.bottom - 1);
+					::LineTo(frame.left + 2, frame.bottom - 1);
+					::LineTo(frame.left, frame.bottom - 3);
+					::LineTo(frame.left, frame.top + 2);
+					::LineTo(frame.left + 2, frame.top);
+					if (disabled && !hasColor)
+						::PenNormal();
+					
+					//	Draw the four corners around
+					if (hasColor)
+						{
+							short pattern = (disabled ? 2 : (down ? 1 : 0));
+							const RGBColor *col = gAGAColorArray;
+							for (int i = 0; i < 4; i++)
+								for (int j = 0; j < 4; j++)
+									{
+										if (LAGAPushButton_mCorners[pattern][0][i][j] != -1)
+											::SetCPixel(frame.left + j, frame.top + i, &col[LAGAPushButton_mCorners[pattern][0][i][j]]);
+										if (LAGAPushButton_mCorners[pattern][1][i][j] != -1)
+											::SetCPixel(frame.right - 4 + j, frame.top + i, &col[LAGAPushButton_mCorners[pattern][1][i][j]]);
+										if (LAGAPushButton_mCorners[pattern][2][i][j] != -1)
+											::SetCPixel(frame.left + j, frame.bottom - 4 + i, &col[LAGAPushButton_mCorners[pattern][2][i][j]]);
+										if (LAGAPushButton_mCorners[pattern][3][i][j] != -1)
+											::SetCPixel(frame.right - 4 + j, frame.bottom - 4 + i, &col[LAGAPushButton_mCorners[pattern][3][i][j]]);
+									}
+							
+							if (down)
+								::RGBForeColor(&gAGAColorArray[8]);
+							else
+								::RGBForeColor(&gAGAColorArray[2]);
+							::MoveTo(frame.left + 1, frame.top + 4);
+							::LineTo(frame.left + 1, frame.bottom - 5);
+							::MoveTo(frame.left + 4, frame.top + 1);
+							::LineTo(frame.right - 5, frame.top + 1);
+							
+							if (!down)
+								{
+									if (disabled)
+										::RGBForeColor(&gAGAColorArray[1]);
+									else
+										::ForeColor(whiteColor);
+									::MoveTo(frame.left + 2, frame.bottom - 5);
+									::LineTo(frame.left + 2, frame.top + 2);
+									::LineTo(frame.right - 5, frame.top + 2);
+							
+									if (disabled)
+										::RGBForeColor(&gAGAColorArray[5]);
+									else
+										::RGBForeColor(&gAGAColorArray[8]);
+									::MoveTo(frame.left + 4, frame.bottom - 2);
+									::LineTo(frame.right - 5, frame.bottom - 2);
+									::MoveTo(frame.right - 2, frame.bottom - 5);
+									::LineTo(frame.right - 2, frame.top + 4);
+									
+									if (disabled)
+										::RGBForeColor(&gAGAColorArray[4]);
+									else
+										::RGBForeColor(&gAGAColorArray[5]);
+									::MoveTo(frame.left + 4, frame.bottom - 3);
+									::LineTo(frame.right - 5, frame.bottom - 3);
+									::MoveTo(frame.right - 3, frame.bottom - 5);
+									::LineTo(frame.right - 3, frame.top + 4);
+								}
+						}
+					AGASetFontStyle( &info->fontStyle ) ;
+					int x =	( (**theControl).contrlRect.left + (**theControl).contrlRect.right ) / 2 ;
+					int y =	( (**theControl).contrlRect.top + 	(**theControl).contrlRect.bottom ) / 2 ;
+					FontInfo fi ;
+					::GetFontInfo( &fi ) ;
+					
+					y += fi.ascent / 2 ;
+					int length = (**theControl).contrlTitle[0] ;
+					if ( length )
+					{
+						int width = TextWidth( &(**theControl).contrlTitle[1] , 0, length ) ;
+						x -= width / 2 ;
+						::MoveTo( x , y );
+						::DrawText( &(**theControl).contrlTitle[1] , 0, length);
+					}
+					
+				}
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+const int kAGACheckBoxWidth = 12 ;
+const int kAGACheckBoxHeigth = 12 ;
+
+pascal SInt32 AGACheckBoxDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				
+				{
+					if (!(**theControl).contrlVis)				
+						return 0 ;
+						
+					{
+						AGAPortHelper help() ;
+						Rect frame =  (**theControl).contrlRect ;
+						Boolean hasColor = true;
+						Boolean disabled = (*theControl)->contrlHilite == 255 ;
+						int	mValue = GetControlValue( theControl ) ;
+						Boolean inPushed = (**theControl).contrlHilite ;
+						int mEnabled = 1 ;
+						int triState_Off = 3 ;
+						
+						frame.right = frame.left + kAGACheckBoxWidth;
+						frame.bottom = frame.top + kAGACheckBoxHeigth;
+						
+						//	Draw the frame of the checkbox
+							if (disabled)
+								if (hasColor)
+									::RGBForeColor(&gAGAColorArray[7]);
+								else
+									PenPat(&qd.gray);
+							
+						::FrameRect(&frame);
+						
+						if (!hasColor)
+							PenNormal();
+							
+						::InsetRect(&frame, 1, 1);
+						if (hasColor)
+							::RGBBackColor(inPushed ? &gAGAColorArray[8] : &gAGAColorArray[2]);
+						::EraseRect(&frame);
+						
+						if (hasColor)
+							{
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[10]);
+								else
+									ForeColor(whiteColor);
+								::MoveTo(frame.left, frame.bottom - 2);
+								::LineTo(frame.left, frame.top);
+								::LineTo(frame.right - 2, frame.top);
+						
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[6]);
+								else
+									::RGBForeColor(mEnabled != triState_Off ? &gAGAColorArray[7] : &gAGAColorArray[5]);
+								::MoveTo(frame.left + 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.top + 1);
+							}
+						
+						if (mValue)
+							{
+								if (mValue == 1)
+									{
+										//	Checked state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.top + 3);
+												::MoveTo(frame.right - 2, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.bottom - 2);
+										
+												if (mEnabled != triState_Off)
+													::RGBForeColor(inPushed ? &gAGAColorArray[11] : &gAGAColorArray[8]);
+												::MoveTo(frame.left + 3, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.top + 2);
+												::MoveTo(frame.right - 2, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.bottom - 3);
+												
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 1);
+										::LineTo(frame.right - 3, frame.bottom - 4);
+										::MoveTo(frame.left + 2, frame.top + 2);
+										::LineTo(frame.right - 3, frame.bottom - 3);
+										::MoveTo(frame.left + 2, frame.bottom - 4);
+										::LineTo(frame.right - 3, frame.top + 1);
+										::MoveTo(frame.left + 2, frame.bottom - 3);
+										::LineTo(frame.right - 3, frame.top + 2);
+									}
+								else
+									{
+										//	Mixed state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 4);
+										
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 4);
+										::LineTo(frame.right - 3, frame.top + 4);
+										::MoveTo(frame.left + 2, frame.top + 5);
+										::LineTo(frame.right - 3, frame.top + 5);
+									}
+							}
+							
+						if (inPushed && !hasColor)
+							InvertRect(&frame);
+						
+						AGASetFontStyle( &info->fontStyle ) ;
+						int x =	(**theControl).contrlRect.left + kAGACheckBoxWidth + 5 ;
+						int y =	( (**theControl).contrlRect.top + (**theControl).contrlRect.bottom ) / 2 ;
+						FontInfo fi ;
+						::GetFontInfo( &fi ) ;
+						
+						y += fi.ascent / 2 ;
+						::MoveTo( x , y );
+						int length = (**theControl).contrlTitle[0] ;
+						if ( length )
+						{
+							::DrawText( &(**theControl).contrlTitle[1] , 0, length);
+						}
+					}
+				}
+			
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) && ((*theControl)->contrlVis != 0) && ((*theControl)->contrlHilite != 255) )
+					return kControlCheckBoxPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+			  {
+			  	if ( (**theControl).contrlValue )
+			  		(**theControl).contrlValue = 0 ;
+			  	else
+			  		(**theControl).contrlValue = 1 ;
+			  		
+					return 0 ;
+				}
+				else
+					return 0 ;
+			}
+			break ;
+		case calcThumbRgn :
+		case calcCntlRgn :
+			if ( !EmptyRect(&(**theControl).contrlRect ) )
+				RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = kAGACheckBoxHeigth ;
+				rec->baseLine = 0;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGARadioButtonDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+//TO DO
+/*	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	switch( message )
+	{
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+				PenState		oldPenState;
+				RGBColor		oldForeColor ;
+				RGBColor		oldBackColor ;
+				RGBColor		backColor ;
+				RGBColor		foreColor ;
+				
+				
+				{
+					if (!(**theControl).contrlVis)				
+						return 0 ;
+						
+					{
+						AGAPortHelper help() ;
+						Rect frame =  (**theControl).contrlRect ;
+						Boolean hasColor = true;
+						Boolean disabled = (*theControl)->contrlHilite == 255 ;
+						int	mValue = GetControlValue( theControl ) ;
+						Boolean inPushed = (**theControl).contrlHilite ;
+						int mEnabled = 1 ;
+						int triState_Off = 3 ;
+						
+						frame.right = frame.left + kAGACheckBoxWidth;
+						frame.bottom = frame.top + kAGACheckBoxHeigth;
+						
+						//	Draw the frame of the checkbox
+							if (disabled)
+								if (hasColor)
+									::RGBForeColor(&gAGAColorArray[7]);
+								else
+									PenPat(&qd.gray);
+							
+						::FrameRect(&frame);
+						
+						if (!hasColor)
+							PenNormal();
+							
+						::InsetRect(&frame, 1, 1);
+						if (hasColor)
+							::RGBBackColor(inPushed ? &gAGAColorArray[8] : &gAGAColorArray[2]);
+						::EraseRect(&frame);
+						
+						if (hasColor)
+							{
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[10]);
+								else
+									ForeColor(whiteColor);
+								::MoveTo(frame.left, frame.bottom - 2);
+								::LineTo(frame.left, frame.top);
+								::LineTo(frame.right - 2, frame.top);
+						
+								if (inPushed)
+									::RGBForeColor(&gAGAColorArray[6]);
+								else
+									::RGBForeColor(mEnabled != triState_Off ? &gAGAColorArray[7] : &gAGAColorArray[5]);
+								::MoveTo(frame.left + 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.bottom - 1);
+								::LineTo(frame.right - 1, frame.top + 1);
+							}
+						
+						if (mValue)
+							{
+								if (mValue == 1)
+									{
+										//	Checked state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.top + 3);
+												::MoveTo(frame.right - 2, frame.bottom - 2);
+												::LineTo(frame.right - 2, frame.bottom - 2);
+										
+												if (mEnabled != triState_Off)
+													::RGBForeColor(inPushed ? &gAGAColorArray[11] : &gAGAColorArray[8]);
+												::MoveTo(frame.left + 3, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.top + 2);
+												::MoveTo(frame.right - 2, frame.bottom - 3);
+												::LineTo(frame.right - 2, frame.bottom - 3);
+												
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 1);
+										::LineTo(frame.right - 3, frame.bottom - 4);
+										::MoveTo(frame.left + 2, frame.top + 2);
+										::LineTo(frame.right - 3, frame.bottom - 3);
+										::MoveTo(frame.left + 2, frame.bottom - 4);
+										::LineTo(frame.right - 3, frame.top + 1);
+										::MoveTo(frame.left + 2, frame.bottom - 3);
+										::LineTo(frame.right - 3, frame.top + 2);
+									}
+								else
+									{
+										//	Mixed state
+										if (hasColor)
+											{
+												::RGBForeColor(inPushed ? &gAGAColorArray[10] : &gAGAColorArray[5]);
+												::MoveTo(frame.left + 3, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 6);
+												::LineTo(frame.right - 2, frame.top + 4);
+										
+												if (mEnabled != triState_Off)
+													::ForeColor(blackColor);
+												else
+													::RGBForeColor(&gAGAColorArray[7]);
+											}
+										::MoveTo(frame.left + 2, frame.top + 4);
+										::LineTo(frame.right - 3, frame.top + 4);
+										::MoveTo(frame.left + 2, frame.top + 5);
+										::LineTo(frame.right - 3, frame.top + 5);
+									}
+							}
+							
+						if (inPushed && !hasColor)
+							InvertRect(&frame);
+						
+						AGASetFontStyle( &info->fontStyle ) ;
+						int x =	(**theControl).contrlRect.left + kAGACheckBoxWidth + 5 ;
+						int y =	( (**theControl).contrlRect.top + (**theControl).contrlRect.bottom ) / 2 ;
+						FontInfo fi ;
+						::GetFontInfo( &fi ) ;
+						
+						y += fi.ascent / 2 ;
+						::MoveTo( x , y );
+						int length = (**theControl).contrlTitle[0] ;
+						if ( length )
+						{
+							::DrawText( &(**theControl).contrlTitle[1] , 0, length);
+						}
+					}
+				}
+			
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) && ((*theControl)->contrlVis != 0) && ((*theControl)->contrlHilite != 255) )
+					return kControlCheckBoxPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+			  {
+			  	if ( (**theControl).contrlValue )
+			  		(**theControl).contrlValue = 0 ;
+			  	else
+			  		(**theControl).contrlValue = 1 ;
+			  		
+					return 0 ;
+				}
+				else
+					return 0 ;
+			}
+			break ;
+		case calcThumbRgn :
+		case calcCntlRgn :
+			if ( !EmptyRect(&(**theControl).contrlRect ) )
+				RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = kAGACheckBoxHeigth ;
+				rec->baseLine = 0;
+			}
+			break ;
+		default :
+			break ;
+	}
+	*/
+	return 0 ;									
+}
+
+pascal SInt32 AGAStaticGroupBoxTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+
+	switch( message )
+	{
+		case initCntl :
+			break ;
+		case dispCntl :
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					bool disabled = false ;
+					bool hasColor = true ;
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					FontInfo fi ;
+					::GetFontInfo( &fi ) ;
+					
+					Rect labelRect = (**theControl).contrlRect ;
+					Rect theFrame = (**theControl).contrlRect ;
+					int width = StringWidth((**theControl).contrlTitle) ;
+					theFrame.top += fi.ascent + fi.leading >> 1 ;
+					labelRect.bottom = theFrame.top + 8 ;
+					labelRect.left += 10 ;
+					labelRect.right =labelRect.left + width + 6 ;
+					
+					theFrame.bottom--;
+					theFrame.right--;
+					
+					if (disabled)
+					{
+						RGBForeColor( &gAGAColorArray[4] ) ;
+					}
+					else
+					{
+						RGBForeColor( &gAGAColorArray[7] ) ;
+					}
+					FrameRect( &theFrame ) ;
+					
+					if (disabled)
+						::RGBForeColor(&gAGAColorArray[1]);
+					else
+						::ForeColor(whiteColor);
+					::MoveTo(theFrame.left + 1, theFrame.bottom - 2);
+					::LineTo(theFrame.left + 1, theFrame.top + 1);
+					::LineTo(theFrame.right - 2, theFrame.top + 1);
+					::MoveTo(theFrame.left , theFrame.bottom);
+					::LineTo(theFrame.right, theFrame.bottom);
+					::LineTo(theFrame.right, theFrame.top);
+					
+					AGASetFontStyle( &info->fontStyle ) ;
+					::EraseRect( &labelRect ) ;
+					::MoveTo(labelRect.left + 3, labelRect.top + fi.ascent + (fi.leading >> 1));
+					::DrawString((**theControl).contrlTitle);
+				}
+			}
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = (**theControl).contrlRect.bottom - (**theControl).contrlRect.top  ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case kControlMsgSetData :
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAStaticTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	Handle macText = (**theControl).contrlData ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+
+	switch( message )
+	{
+		case initCntl :
+			{
+				macText = NewHandle(0) ;
+				 (**theControl).contrlData = (Handle) macText ;
+			}
+			break ;
+		case dispCntl :
+			DisposeHandle( macText ) ;
+			break ;
+		case drawCntl :
+			{
+				if (!(**theControl).contrlVis)				
+					return 0 ;
+					
+				{
+					AGAPortHelper help() ;
+					AGASetFontStyle( &info->fontStyle ) ;
+					int x =	(**theControl).contrlRect.left ;
+					int y =	(**theControl).contrlRect.top ;
+					int lineheight ;
+					FontInfo fi ;
+					::GetFontInfo( &fi ) ;
+					
+					y += fi.ascent ;
+					lineheight = fi.ascent + fi.descent + fi.leading ;
+					int length = GetHandleSize( macText ) ;
+					if ( length )
+					{
+						int laststop = 0 ;
+						int i = 0 ;
+						HLock( macText ) ;
+						RGBColor gray = { 0xDDDD , 0xDDDD, 0xDDDD } ;
+						::RGBBackColor( &gray ) ;
+						while( i < length )
+						{
+							if ( (*macText)[i] == 0x0d )
+							{
+								::MoveTo( x , y );
+								::DrawText( *macText , laststop, i-laststop);
+								laststop = i+1 ;
+								y += lineheight ;
+							}
+							i++ ;
+						}
+						::MoveTo( x , y );
+						::DrawText( *macText , laststop, i-laststop);
+						laststop = i+1 ;
+						HUnlock( macText ) ;
+					}
+				}
+			}
+			break ;
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = (**theControl).contrlRect.bottom - (**theControl).contrlRect.top  ;
+				rec->baseLine = 0;
+			}
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlStaticTextTextTag )
+				{
+					SetHandleSize( macText , rec->size ) ;
+					memcpy( *macText , rec->dataPtr , rec->size ) ;
+					return noErr ;
+				}
+				return errDataNotSupported ;
+			}
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+void AGAMoveControl(ControlHandle inControl , short x , short y ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;	
+		if ( info->magic == kExtCDEFMagic )
+		{
+			if ( info->procID == kControlEditTextProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - (**inControl).contrlRect.left  ;
+				dy= y - (**inControl).contrlRect.top ;
+				
+				MoveControl( inControl , x ,y  ) ;
+				TEHandle macTE ;
+	
+				macTE = (TEHandle) (**inControl).contrlData ;
+				(**macTE).destRect.left += dx ;
+				(**macTE).destRect.top += dy ;
+				(**macTE).destRect.right += dx ;
+				(**macTE).destRect.bottom += dy ;
+				(**macTE).viewRect.left += dx ;
+				(**macTE).viewRect.top += dy ;
+				(**macTE).viewRect.right += dx ;
+				(**macTE).viewRect.bottom += dy ;
+				return ;
+			}
+			if ( info->procID == kControlListBoxProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - (**inControl).contrlRect.left  ;
+				dy= y - (**inControl).contrlRect.top ;
+				
+				MoveControl( inControl , x ,y  ) ;
+				ListHandle macList ;
+	
+				macList = (ListHandle) (**inControl).contrlData ;
+				(**macList).rView.left += dx ;
+				(**macList).rView.top += dy ;
+				(**macList).rView.right += dx ;
+				(**macList).rView.bottom += dy ;
+				return ;
+			}
+		}
+	}
+	MoveControl( inControl , x ,y  ) ;
+}
+
+void AGASizeControl(ControlHandle inControl , short x , short y ) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;	
+		if ( info->magic == kExtCDEFMagic )
+		{
+			if ( info->procID == kControlEditTextProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - ( (**inControl).contrlRect.right - (**inControl).contrlRect.left ) ;
+				dy= y - ( (**inControl).contrlRect.bottom - (**inControl).contrlRect.top ) ;
+				
+				SizeControl( inControl , x ,y  ) ;
+				TEHandle macTE ;
+	
+				macTE = (TEHandle) (**inControl).contrlData ;
+				(**macTE).destRect.right += dx ;
+				(**macTE).destRect.bottom += dy ;
+				(**macTE).viewRect.right += dx ;
+				(**macTE).viewRect.bottom += dy ;
+				return ;
+			}
+			if ( info->procID == kControlListBoxProc)
+			{
+				int dx ;
+				int dy ;
+				
+				dx= x - ( (**inControl).contrlRect.right - (**inControl).contrlRect.left ) ;
+				dy= y - ( (**inControl).contrlRect.bottom - (**inControl).contrlRect.top ) ;
+				
+				SizeControl( inControl , x ,y  ) ;
+				ListHandle macList ;
+	
+				macList = (ListHandle) (**inControl).contrlData ;
+				(**macList).rView.right += dx ;
+				(**macList).rView.bottom += dy ;
+				return ;
+			}
+		}
+	}
+	SizeControl( inControl , x ,y  ) ;
+}
+
+pascal SInt32 AGARootControlDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+
+	switch( message )
+	{
+		case initCntl :
+			break ;
+		case dispCntl :
+			break ;
+		case drawCntl :
+			break ;
+		case kControlMsgCalcBestRect :
+			break ;
+		case kControlMsgSetData :
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAEditTextDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	Size result ;
+	TEHandle macTE ;
+	
+	macTE = (TEHandle) (**theControl).contrlData ;
+	
+	switch( message )
+	{
+		case initCntl :
+			{
+				AGAPortHelper help() ;
+				SetPort( (**theControl).contrlOwner ) ;
+				::TextFont( kFontIDGeneva ) ; 
+				::TextSize( 10 ) ;
+				::TextFace( 0 ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+				Rect bounds =  (**theControl).contrlRect ;				
+				InsetRect( &bounds , 4 , 1 ) ;
+				FontInfo fi ;
+				::GetFontInfo( &fi ) ;
+				
+				bounds.top = bounds.bottom - abs( fi.descent ) - fi.ascent - 3;
+				macTE = TENew( &bounds , &bounds) ;
+				 (**theControl).contrlData = (Handle) macTE ;
+			}
+			break ;
+		case dispCntl :
+			TEDispose( macTE ) ;
+			break ;
+		case drawCntl :
+			{
+				AGAPortHelper help() ;
+				AGASetFontStyle( &info->fontStyle ) ;
+				SetPort( (**theControl).contrlOwner ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+				EraseRect( &(**theControl).contrlRect ) ;
+				FrameRect( &(**theControl).contrlRect ) ;
+				TEUpdate( &(**theControl).contrlRect , macTE ) ;
+			}
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+					return kControlButtonPart ;
+				else
+					return NULL ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  if ( PtInRect( pt , &(**theControl).contrlRect  ) )
+			  {
+			  	TEClick( pt , false , macTE ) ;
+				}
+			}
+			break ;
+		case kControlMsgGetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlEditTextTEHandleTag )
+				{
+					return AGAGetDataHelper( rec , sizeof( TEHandle ) , (char*) &macTE ) ;
+				}
+				else if ( rec->tag == kControlEditTextTextTag )
+				{
+					return AGAGetDataHelper( rec , (**macTE).teLength , (char*) *(**macTE).hText ) ;
+				}
+				else if ( rec->tag == kControlEditTextSelectionTag )
+				{
+				}
+				return errDataNotSupported ;
+			}
+			break ;
+		case kControlMsgSetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlEditTextTextTag )
+				{
+					TESetText( rec->dataPtr , rec->size ,  macTE ) ;
+					return noErr ;
+				}
+				return errDataNotSupported ;
+			}
+		case kControlMsgCalcBestRect :
+			{
+				ControlCalcSizeRec *rec = (ControlCalcSizeRec *) param ;
+				rec->width = (**theControl).contrlRect.right - (**theControl).contrlRect.left ;
+				rec->height = (**theControl).contrlRect.bottom - (**theControl).contrlRect.top  ;
+				rec->baseLine = 0;
+			}
+		case kControlMsgFocus :
+			{
+				if ( param == kControlFocusNoPart )
+				{
+					info->hasFocus = false ;
+					TEDeactivate( macTE ) ;
+					return kControlFocusNoPart ;
+				}
+				else if ( param == kControlFocusNextPart || param == kControlFocusPrevPart )
+				{
+					if ( info->hasFocus )
+					{
+						info->hasFocus = false ;
+						TEDeactivate( macTE ) ;
+						return kControlFocusNoPart ;
+					}
+					else
+					{
+						info->hasFocus = true ;
+						TEActivate( macTE ) ;
+						return kControlEditTextPart ;
+					}
+				}
+				else if ( param == kControlEditTextPart )
+				{
+					if ( !info->hasFocus )
+					{
+						info->hasFocus = true ;
+						TEActivate( macTE ) ;
+						return kControlEditTextPart ;
+					}
+				}
+			}
+			break ;
+		case kControlMsgIdle :
+			{
+				TEIdle( macTE ) ;
+			}
+			break ;
+		case kControlMsgKeyDown :
+			{
+				AGAPortHelper help() ;
+				AGASetFontStyle( &info->fontStyle ) ;
+				SetPort( (**theControl).contrlOwner ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				RGBForeColor( &gAGARamp[ kAGABlack ] ) ;
+				ControlKeyDownRec * rec = (ControlKeyDownRec*) param ;
+				TEKey( rec->charCode , macTE ) ;
+			}
+			break ;
+		case kControlMsgActivate :
+			{
+			 /*
+				if ( param )
+					TEActivate( macTE ) ;
+				else
+					TEDeactivate( macTE ) ;
+				*/
+			}
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case kControlMsgTestNewMsgSupport :
+			return kControlSupportsNewMessages ;
+		case kControlMsgGetFeatures :
+			return 
+//				kControlSupportsGhosting |
+//				kControlSupportsEmbedding |
+				kControlSupportsFocus | 
+				kControlWantsIdle | 
+				kControlWantsActivate | 
+//				kControlHandlesTracking |
+				kControlSupportsDataAccess |
+//				kControlHasSpecialBackground |
+//				kControlGetsFocusOnClick |
+				kControlSupportsCalcBestRect |
+//				kControlSupportsLiveFeedback |
+//				kControlHasRadioBehavior |
+				0 ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+pascal SInt32 AGAListControlDefProc (SInt16 procID, ControlHandle theControl, ControlDefProcMessage message, SInt32 param)
+{
+	Size result ;
+	ListHandle macList ;
+	ExtCDEFInfo* info = (ExtCDEFInfo* )  (**theControl).contrlRfCon ;	
+	
+	macList = (ListHandle) (**theControl).contrlData ;
+
+	static inLoop = false ;
+	static lastClick = NULL ;
+	
+	switch( message )
+	{
+		case initCntl :
+			{
+				Rect databounds = { 0,0,0,0} ;
+				Point cellsize = { 0,0} ;
+				Rect listBounds =  (**theControl).contrlRect ;
+				
+				InsetRect( &listBounds , 1 , 1 ) ;
+				
+				macList = LNew( &listBounds , &databounds , cellsize , 128 , 
+					(**theControl).contrlOwner , false /*drawit*/ , false /*hasGrow*/,
+					false /* horzScroll */, true /*vertScroll*/ ) ;
+				 (**theControl).contrlData = (Handle) macList ;
+				info->privateData = NULL ;
+			}
+			break ;
+		case dispCntl :
+			(**macList).vScroll = NULL ; // will be disposed by the window itself
+			(**macList).hScroll = NULL ; // will be disposed by the window itself
+			LDispose( macList ) ;
+			break ;
+		case calcCntlRgn :
+			RectRgn((RgnHandle) param , &(**theControl).contrlRect ) ;
+			break ;
+		case testCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  Rect	listRect ;
+			  Rect	allRect = (**theControl).contrlRect ;
+			  listRect = allRect ;
+			  if ( !inLoop )
+					allRect.right += 16 ;
+			  if ( PtInRect( pt , &allRect ) )
+			  {
+			  	if ( !inLoop && StillDown() )
+			  	{
+			  		inLoop = true ;
+			  		LActivate( true , macList ) ;
+					Boolean doubleClick = LClick( pt , 0 /* todo modifiers*/ , macList ) ;
+					info->privateData = doubleClick ;
+					inLoop = false ;
+				}
+				return kControlListBoxPart ;
+			  }
+			  else
+				return NULL ;
+			}
+			break ;
+		case drawCntl :
+			{
+				AGAPortHelper help() ;
+				AGASetFontStyle( &info->fontStyle ) ;
+				RGBBackColor( &gAGARamp[ kAGAWhite ] ) ;
+				EraseRect( &(**theControl).contrlRect ) ;
+				FrameRect( &(**theControl).contrlRect ) ;
+				RgnHandle controlRgn = NewRgn() ;
+				SetRectRgn( controlRgn, (**theControl).contrlRect.left ,
+					(**theControl).contrlRect.top,
+					(**theControl).contrlRect.right,
+					(**theControl).contrlRect.bottom ) ;
+				LUpdate( controlRgn,  macList ) ;
+			}
+			break ;
+		case posCntl :
+			{
+			  Point pt ;
+			  pt.h = LoWord( param ) ;
+			  pt.v = HiWord( param ) ;
+			  Rect	listRect ;
+			  Rect	allRect = (**theControl).contrlRect ;
+			  listRect = allRect ;
+			  allRect.right += 16 ;
+			  if ( PtInRect( pt , &listRect ) )
+			  {
+			  	if ( !inLoop && StillDown() )
+			  	{
+			  		inLoop = true ;
+			  		LActivate( true , macList ) ;
+						Boolean doubleClick = LClick( pt , 0 /* todo modifiers*/ , macList ) ;
+						info->privateData = doubleClick ;
+						inLoop = false ;
+					}
+					return kControlListBoxPart ;
+				}
+				else if ( PtInRect( pt , &allRect ) )
+				{
+			  	if ( !inLoop && StillDown() )
+			  	{
+			  		inLoop = true ;
+			  		// LActivate( true , macList ) ;
+						Boolean doubleClick = LClick( pt , 0 /* todo modifiers*/ , macList ) ;
+						info->privateData = doubleClick ;
+						inLoop = false ;
+					}
+					return kControlPageDownPart ;
+				}
+				else
+					return NULL ;
+			}
+			break ;
+		case kControlMsgGetData :
+			{
+				ControlDataAccessRec *rec = (ControlDataAccessRec *) param ;
+				if ( rec->tag == kControlListBoxListHandleTag )
+				{
+					return AGAGetDataHelper( rec , sizeof( ListHandle ) , (char*) &macList ) ;
+				}
+				else if ( rec->tag == kControlListBoxDoubleClickTag )
+				{
+					Boolean doubleClick = info->privateData ;
+					return AGAGetDataHelper( rec , sizeof( Boolean ) , (char*) &doubleClick ) ;
+				}
+				return errDataNotSupported ;
+			}
+			break ;
+		default :
+			break ;
+	}
+	
+	return 0 ;									
+}
+
+OSErr AGACreateRootControl				(WindowPtr 				inWindow,
+								 ControlHandle *		outControl) 
+{
+	ControlHandle theControl = NULL ;
+
+	SInt16 extCDEFID = kExtCDEFID << 4 + 0 ;
+
+ 	theControl = NewControl( inWindow , &inWindow->portRect , "\p" , true ,
+ 			0 , 0 , 1 , extCDEFID , 0 ) ;
+ 	NewExtCDEFInfo( theControl , AGARootControlDefProc , kAGARootControlProcID , 0 ) ;
+ 	
+ 	*outControl = theControl ;
+	return noErr ;
+}
+
+OSErr AGAEmbedControl					(ControlHandle 			inControl,
+								 ControlHandle 			inContainer) 
+{
+	if ( AGATestForNewControl( inControl ) )
+	{
+		ExtCDEFInfo* info = (ExtCDEFInfo* )  (**inControl).contrlRfCon ;	
+		info->containerControl = inContainer ;
+	}
+	return noErr ;
+}
+
+void AGADrawControl( ControlHandle control )
+{
+	DrawOneControl( control ) ;
+	ControlHandle iter = (ControlHandle) ((WindowPeek)(**control).contrlOwner)->controlList ; 
+	while ( iter )
+	{
+		if ( AGATestForNewControl( iter ) )
+		{
+			ExtCDEFInfo* info = (ExtCDEFInfo* )  (**iter).contrlRfCon ;
+			if ( info->containerControl == control )
+			{ 		
+				AGADrawControl( iter  ) ;
+			}
+		}
+	
+		iter = (**iter).nextControl ;
+	}
+}
+
+
+ControlHandle AGANewControl(WindowPtr 				owningWindow,
+								 const Rect *			bounds,
+								 ConstStr255Param 		controlTitle,
+								 Boolean 				initiallyVisible,
+								 SInt16 				initialValue,
+								 SInt16 				minimumValue,
+								 SInt16 				maximumValue,
+								 SInt16 				procID,
+								 SInt32 				controlReference)
+{
+	ControlHandle theControl = NULL ;
+	Rect boundsRect = *bounds ;
+	SInt16 extCDEFID = kExtCDEFID << 4 + 0 ;
+ 	SInt16 oldProcID = extCDEFID ;
+ 	switch( procID ) 
+ 	{
+ 		case kControlScrollBarProc :
+ 		case kControlScrollBarLiveProc :
+ 			oldProcID = scrollBarProc ;
+ 			break ;
+ 		case kControlListBoxProc :
+ 			initialValue = 0 ;
+		default :
+ 			break ;
+ 	}
+ 	if ( oldProcID == extCDEFID && procID == kControlListBoxProc )
+ 	{
+ 		boundsRect.right -= 16 ;
+	}
+ 	theControl = NewControl( owningWindow , &boundsRect , controlTitle , initiallyVisible ,
+ 			initialValue , minimumValue , maximumValue , oldProcID , controlReference ) ;
+ 	if ( oldProcID == extCDEFID )
+ 	{
+ 		ControlDefProcPtr theProcPtr = NULL ;
+ 		SInt16 theVarCode = 0 ;
+ 		switch( procID )
+ 		{
+ 			case kControlPushButtonProc :
+ 				theProcPtr = AGAButtonDefProc ;
+ 				break ;
+ 			case kControlCheckBoxProc :
+ 				theProcPtr = AGACheckBoxDefProc ;
+ 				break ;
+ 			case kControlRadioButtonProc :
+ 				theProcPtr = AGARadioButtonDefProc ;
+ 				break ;
+ 			case kControlProgressBarProc :
+ 				theProcPtr = AGAProgressBarDefProc ;
+ 				break ;
+ 			case kControlPlacardProc :
+ 				theProcPtr = AGAPlacardDefProc ;
+ 				break ;
+ 			case kControlStaticTextProc :
+ 				theProcPtr = AGAStaticTextDefProc ;
+ 				break ;
+ 			case kControlListBoxProc :
+ 				theProcPtr = AGAListControlDefProc ;
+ 				break ;
+ 			case kControlEditTextProc :
+ 				theProcPtr = AGAEditTextDefProc ;
+ 				break ;
+ 			case kControlGroupBoxTextTitleProc :
+ 				theProcPtr = AGAStaticGroupBoxTextDefProc ;
+ 				break ;
+ 			case kControlBevelButtonNormalBevelProc :
+ 				theProcPtr = AGABevelButtonDefProc ;
+ 				break ;
+ 		}
+ 		
+ 		if ( theProcPtr )
+ 		{
+ 			NewExtCDEFInfo( theControl , theProcPtr , procID , controlReference ) ;
+ 		}
+	}
+	return theControl ;
+}
+
+void			AGASetThemeWindowBackground		(WindowRef 				inWindow,
+								 ThemeBrush 			inBrush,
+								 Boolean 				inUpdate) 
+{
+	GrafPtr port ;
+	GetPort( &port ) ;
+	SetPort( inWindow ) ;
+	if ( inBrush == kThemeBrushDialogBackgroundActive )
+	{
+			gAGABackgroundColor = 2 ;
+	}
+	else
+	{
+			gAGABackgroundColor = 0 ;
+	}
+	RGBBackColor( &gAGAColorArray[gAGABackgroundColor] ) ;
+	SetPort( port ) ;
+}
+
+