/********************************************
*
* Control Manager
*
* Copyright Apple Computer, Inc.1986-91
* All Rights Reserved
*
* Copyright 1992, 1993, Byte Works, Inc.
*
********************************************/

#ifndef __TYPES__
#include <TYPES.h>
#endif

#ifndef __CONTROL__
#define __CONTROL__

/* Axis Parameters */
#define noConstraint 0x0000             /* No constraint on movement. */
#define hAxisOnly 0x0001                /* Horizontal axis only. */
#define vAxisOnly 0x0002                /* Vertical axis only. */

/* CtlFlag */
#define simpRound 0x0000                /* Simple button flag */
#define upFlag 0x0001                   /* Scroll bar flag. */
#define boldButton 0x0001               /* Bold round cornered outlined button. */
#define simpBRound 0x0001               /* Simple button flag */
#define downFlag 0x0002                 /* Scroll bar flag. */
#define simpSquare 0x0002               /* Simple button flag */
#define simpDropSquare 0x0003           /* Simple button flag */
#define leftFlag 0x0004                 /* Scroll bar flag. */
#define rightFlag 0x0008                /* Scroll bar flag. */
#define dirScroll 0x0010                /* Scroll bar flag. */
#define horScroll 0x0010                /* Scroll bar flag. */
#define family 0x007F                   /* Mask for radio button family number */
#define ctlInVis 0x0080                 /* invisible mask for any type of control  */
#define fCallWindowMgr 0x0001           /* Control Template flag value */
#define fSubstituteText 0x0002
#define fSubTextType 0x0001
#define inListBox 0x88
#define fBlastText 0x0004               /* static text control */
#define fTextCanDim 0x0008	        /* static text control */
#define fSquishText 0x0010	        /* static text control */
#define fNoTrackIcon 0x0008             /* make Icon Button play dead */

/* CtlProc Codes */
#define simpleProc 0x00000000L
#define checkProc 0x02000000L
#define radioProc 0x04000000L
#define scrollProc 0x06000000L
#define growProc 0x08000000L

/* DefProc Commands */
#define drawCtl 0x0000                  /* Draw control command. */
#define calcCRect 0x0001                /* Compute drag RECT command. */
#define testCtl 0x0002                  /* Hit test command. */
#define initCtl 0x0003                  /* Initialize command. */
#define dispCtl 0x0004                  /* Dispose command. */
#define posCtl 0x0005                   /* Move indicator command. */
#define thumbCtl 0x0006                 /* Compute drag parameters command. */
#define dragCtl 0x0007                  /* Drag command. */
#define autoTrack 0x0008                /* Action command. */
#define newValue 0x0009                 /* Set new value command. */
#define setParams 0x000A                /* Set new parameters command. */
#define moveCtl 0x000B                  /* Move command. */
#define recSize 0x000C                  /* Return record size command. */
#define ctlHandleEvent 0x000D           /* Handle a keystroke or menu selection */
#define ctlChangeTarget 0x000E          /* Issued when control's target status has changed */
#define ctlChangeBounds 0x000F          /* Issued when control's boundary rectangle has changed */
#define ctlWindChangeSize 0x0010        /* Window has been grown or zoomed */
#define ctlHandleTab 0x0011             /* Control has been tabbed to */
#define ctlNotifyMultiPart 0x0012       /* A multipart control has been hidden, drawn or shown */
#define ctlWinStateChange 0x0013        /* Window state has changed */

/* hiliteState Codes */
#define noHilite 0x0000                 /* Param to HiliteControl */
#define inactiveHilite 0x00FF           /* Param to HiliteControl */

/* PartCode Numbers */
#define noPart 0x0000
#define simpleButton 0x0002
#define checkBox 0x0003
#define radioButton 0x0004
#define upArrow 0x0005
#define downArrow 0x0006
#define pageUp 0x0007
#define pageDown 0x0008
#define growBox 0x000A
#define thumb 0x0081

/* moreFlags Codes */
#define fCtlTarget 0x8000               /* is current target of typing commands */
#define fCtlCanBeTarget 0x4000          /* can be made the target control */
#define fCtlWantEvent 0x2000            /* control can be called view SendEventToCtl */
#define fCtlWantsEvent 0x2000           /* control can be called view SendEventToCtl */
#define fCtlWantEvents 0x2000           /* control can be called view SendEventToCtl */
#define fCtlWantsEvents 0x2000          /* control can be called view SendEventToCtl */
#define fCtlProcRefNotPtr 0x1000        /* set = ID of defproc, clear = pointer to defproc */
#define fCtlTellAboutSize 0x0800        /* set if ctl needs notification when size of owning window changes */
#define fCtlIsMultiPart 0x0400          /* set if ctl needs notification to be hidden */
#define fMenuDefIsText 0x0004
#define fDrawIconInResult 0x0020
#define fDrawPopDownIcon 0x0080
#define colorDescriptor 0x000C          /* indicates type of reference in colorRef */
#define styleDescriptor 0x0003          /* indicates type of reference in styleRef */

/* Ctl Verbs */
#define titleIsPtr 0x00
#define titleIsHandle 0x01
#define titleIsResource 0x02
#define colorTableIsPtr 0x00
#define colorTableIsHandle 0x04
#define colorTableIsResource 0x08
#define ctlHideCtl 0x12

/* InputVerb Codes */
#define singlePtr 0x0000
#define singleHandle 0x0001
#define singleResource 0x0002
#define ptrToPtr 0x0003
#define ptrToHandle 0x0004
#define ptrToResource 0x0005
#define handleToPtr 0x0006
#define handleToHandle 0x0007
#define handleToResource 0x0008
#define resourceToResource 0x0009

/* ProcRefs */
#define simpleButtonControl 0x80000000L
#define checkControl 0x82000000L
#define radioControl 0x84000000L
#define scrollBarControl 0x86000000L
#define growControl 0x88000000L
#define statTextControl 0x81000000L
#define editLineControl 0x83000000L
#define editTextControl 0x85000000L
#define popUpControl 0x87000000L
#define listControl 0x89000000L
#define pictureControl 0x8D000000L
#define iconButtonControl 0x87FF0001L
#define thermometerControl 0x87FF0002L
#define rectangleControl 0x87FF0003L

/* Error Codes */
#define wmNotStartedUp 0x1001           /* Window manager was not initialized */
#define cmNotInitialized 0x1002         /* Control manager was not initialized */
#define noCtlInList 0x1003              /* Control not in window list */
#define noCtlError 0x1004               /* no controls in window */
#define noSuperCtlError 0x1005          /* no super controls in window */
#define noCtlTargetError 0x1006         /* no target super control */
#define notSuperCtlError 0x1007         /* action can only be done on super control */
#define canNotBeTargetError 0x1008      /* conrol cannot be made target */
#define noSuchIDError 0x1009            /* specified ID cannot be found */
#define tooFewParmsError 0x100A         /* not enough params specified */
#define noCtlToBeTargetError 0x100B     /* NextCtl call, no ctl could be target */
#define noFrontWindowError 0x100C       /* there is no front window */

/* displayMode flags */
#define selectedIcon 0x0001
#define openIcon 0x0002
#define offline 0x0004

/* listType values */
#define fListString 0x0001
#define fListSelect 0x0002
#define fListScrollBar 0x0004

/* PopUp control flag values */
#define fRightJustifyResult 0x0001
#define fRightJustifyTitle 0x0002
#define fInWindowOnly 0x0004
#define fDontDrawResult 0x0008
#define fDontDrawTitle 0x0010
#define fDontHiliteTitle 0x0020
#define fType2PopUp 0x0040

struct BoxColors {
   Word boxReserved;                    /* reserved */
   Word boxNor;                         /* color of box when not checked */
   Word boxSel;                         /* color of box when checked */
   Word boxTitle;                       /* color of check box's title */
   };
typedef struct BoxColors BoxColors, *BoxColorsPtr, **BoxColorsHndl;

struct BttnColors {
   Word bttnOutline;                    /* color of outline */
   Word bttnNorBack;                    /* color of background when not selected */
   Word bttnSelBack;                    /* color of background when selected */
   Word bttnNorText;                    /* color of title's text when not selected */
   Word bttnSelText;                    /* color of title's text when selected */
   };
typedef struct BttnColors BttnColors, *BttnColorsPtr, **BttnColorsHndl;

struct LimitBlk {
   Rect boundRect;                      /* Drag bounds. */
   Rect slopRect;                       /* Cursor bounds. */
   Word axisParam;                      /* Movement constrains. */
   Pointer dragPatt;                    /* Pointer to 32 byte Pattern for drag outline. */
   };
typedef struct LimitBlk LimitBlk, *LimitBlkPtr, **LimitBlkHndl;

struct RadioColors {
   Word radReserved;                    /* reserved */
   Word radNor;                         /* color of radio button when off */
   Word radSel;                         /* color of radio button when on */
   Word radTitle;                       /* color of radio button's title text */
   };
typedef struct RadioColors RadioColors, *RadioColorsPtr, **RadioColorsHndl;

struct KeystrokeRec {
   Byte key1;
   Byte key2;
   Word keyModifiers;
   Word keyCareBits;
   };
typedef struct KeystrokeRec KeystrokeRec;

struct ControlTemplate {
   Word pCount;
   LongWord ID;
   Rect rect;
   LongWord procRef;
   Word flag;
   Word moreFlags;
   LongWord refCon;
   };
typedef struct ControlTemplate ControlTemplate;

struct SimpleButtonTemplate {
   ControlTemplate ctlTemplate;
   Ref titleRef;
   Ref colorTableRef;
   KeystrokeRec keyEquivalent;
   };
typedef struct SimpleButtonTemplate SimpleButtonTemplate;

struct CheckBoxTemplate {
   ControlTemplate ctlTemplate;
   Ref titleRef;
   Word initalValue;
   Ref colorTableRef;
   KeystrokeRec keyEquivalent;
   };
typedef struct CheckBoxTemplate CheckBoxTemplate;

struct IconButtonTemplate {
   ControlTemplate ctlTemplate;
   Ref iconRef;
   Ref titleRef;
   Ref colorTableRef;
   Word displayMode;
   KeystrokeRec keyEquivalent;
   };
typedef struct IconButtonTemplate IconButtonTemplate;

struct LineEditTemplate {
   ControlTemplate ctlTemplate;
   Word maxSize;
   Ref defaultRef;
   Word passwordChar;
   };
typedef struct LineEditTemplate LineEditTemplate;

struct ListTemplate {
   ControlTemplate ctlTemplate;
   Word listSize;
   Word listView;
   Word listType;
   Word listStart;
   ProcPtr listDraw;
   Word listMemHeight;
   Word listMemSize;
   Ref listRef;
   Ref colorTableRef;
   };
typedef struct ListTemplate ListTemplate;

struct PictureTemplate {
   ControlTemplate ctlTemplate;
   Ref pictureRef;
   };
typedef struct PictureTemplate PictureTemplate;

struct PopupTemplate {
   ControlTemplate ctlTemplate;
   Word titleWidth;
   Ref menuRef;
   Word initialValue;
   Ref colorTableRef;
   };
typedef struct PopupTemplate PopupTemplate;

struct RadioButtonTemplate {
   ControlTemplate ctlTemplate;
   Ref titleRef;
   Word initalValue;
   Ref colorTableRef;
   KeystrokeRec keyEquivalent;
   };
typedef struct RadioButtonTemplate RadioButtonTemplate;

struct RectangleTemplate {
   ControlTemplate ctlTemplate;
   Word penHeight;
   Word penWidth;
   Mask penMask;
   Pattern penPattern;
   };
typedef struct RectangleTemplate RectangleTemplate;

struct ScrollBarTemplate {
   ControlTemplate ctlTemplate;
   Word maxSize;
   Word viewSize;
   Word initalValue;
   Ref colorTableRef;
   };
typedef struct ScrollBarTemplate ScrollBarTemplate;

struct SizeBoxTemplate {
   ControlTemplate ctlTemplate;
   Ref colorTableRef;
   };
typedef struct SizeBoxTemplate SizeBoxTemplate;

struct StaticTextTemplate {
   ControlTemplate ctlTemplate;
   Ref textRef;
   Word textSize;
   Word just;
   };
typedef struct StaticTextTemplate StaticTextTemplate;

struct TextEditTemplate {
   ControlTemplate ctlTemplate;
   LongWord textFlags;
   Rect indentRect;
   CtlRecHndl vertBar;
   Word vertAmount;
   CtlRecHndl horzBar;
   Word horzAmount;
   Ref styleRef;
   Word textDescriptor;
   Ref textRef;
   LongWord textLength;
   LongWord maxChars;
   LongWord maxLines;
   Word maxCharsPerLine;
   Word maxHeight;
   Ref colorRef;
   Word drawMode;
   ProcPtr filterProcPtr;
   };
typedef struct TextEditTemplate TextEditTemplate;

struct ThermometerTemplate {
   ControlTemplate ctlTemplate;
   Word value;
   Word data;
   Ref colorTableRef;
   };
typedef struct ThermometerTemplate ThermometerTemplate;

extern pascal void CtlBootInit(void) inline(0x0110,dispatcher);
extern pascal void CtlStartUp(Word, Word) inline(0x0210,dispatcher);
extern pascal void CtlShutDown(void) inline(0x0310,dispatcher);
extern pascal Word CtlVersion(void) inline(0x0410,dispatcher);
extern pascal void CtlReset(void) inline(0x0510,dispatcher);
extern pascal Boolean CtlStatus(void) inline(0x0610,dispatcher);
extern pascal void CtlNewRes(void) inline(0x1210,dispatcher);
extern pascal void DisposeControl(CtlRecHndl) inline(0x0A10,dispatcher);
extern pascal void DragControl(Integer, Integer, Rect *, Rect *, Word, CtlRecHndl) inline(0x1710,dispatcher);
extern pascal Point DragRect(VoidProcPtr, Pattern, Integer, Integer, Rect *, Rect *, Rect *, Word) inline(0x1D10,dispatcher);
extern pascal void DrawControls(GrafPortPtr) inline(0x1010,dispatcher);
extern pascal void DrawOneCtl(CtlRecHndl) inline(0x2510,dispatcher);
extern pascal void EraseControl(CtlRecHndl) inline(0x2410,dispatcher);
extern pascal Word FindControl(CtlRecHndl *, Integer, Integer, GrafPortPtr) inline(0x1310,dispatcher);
extern pascal LongProcPtr GetCtlAction(CtlRecHndl) inline(0x2110,dispatcher);
extern pascal Word GetCtlDPage(void) inline(0x1F10,dispatcher);
extern pascal LongWord GetCtlParams(CtlRecHndl) inline(0x1C10,dispatcher);
extern pascal LongWord GetCtlRefCon(CtlRecHndl) inline(0x2310,dispatcher);
extern pascal Pointer GetCtlTitle(CtlRecHndl) inline(0x0D10,dispatcher);
extern pascal Word GetCtlValue(CtlRecHndl) inline(0x1A10,dispatcher);
extern pascal LongWord GrowSize(void) inline(0x1E10,dispatcher);
extern pascal void HideControl(CtlRecHndl) inline(0x0E10,dispatcher);
extern pascal void HiliteControl(Word, CtlRecHndl) inline(0x1110,dispatcher);
extern pascal void KillControls(GrafPortPtr) inline(0x0B10,dispatcher);
extern pascal void MoveControl(Integer, Integer, CtlRecHndl) inline(0x1610,dispatcher);
extern pascal CtlRecHndl NewControl(GrafPortPtr, Rect *, Pointer, Word, Word, Word, Word, LongProcPtr, Longint, Pointer) inline(0x0910,dispatcher);
extern pascal void SetCtlAction(LongProcPtr, CtlRecHndl) inline(0x2010,dispatcher);
extern pascal FontHndl SetCtlIcons(FontHndl) inline(0x1810,dispatcher);
extern pascal void SetCtlParams(Word, Word, CtlRecHndl) inline(0x1B10,dispatcher);
extern pascal void SetCtlRefCon(Longint, CtlRecHndl) inline(0x2210,dispatcher);
extern pascal void SetCtlTitle(Pointer, Handle) inline(0x0C10,dispatcher);
extern pascal void SetCtlValue(Word, CtlRecHndl) inline(0x1910,dispatcher);
extern pascal void ShowControl(CtlRecHndl) inline(0x0F10,dispatcher);
extern pascal Word TestControl(Integer, Integer, CtlRecHndl) inline(0x1410,dispatcher);
extern pascal Word TrackControl(Integer, Integer, LongProcPtr, CtlRecHndl) inline(0x1510,dispatcher);

extern pascal LongWord CallCtlDefProc(CtlRecHndl, Word, Long) inline(0x2C10,dispatcher);
extern pascal Handle CMLoadResource(Word, Long) inline(0x3210,dispatcher);
extern pascal void CMReleaseResource(Word, Long) inline(0x3310,dispatcher);
extern pascal CtlRecHndl FindTargetCtl(void) inline(0x2610,dispatcher);
extern pascal CtlRecHndl GetCtlHandleFromID(WindowPtr, Long) inline(0x3010,dispatcher);
extern pascal LongWord GetCtlID(CtlRecHndl) inline(0x2A10,dispatcher);
extern pascal Word GetCtlMoreFlags(CtlRecHndl) inline(0x2E10,dispatcher);
extern pascal Pointer GetCtlParamPtr(void) inline(0x3510,dispatcher);
extern pascal void InvalCtls(WindowPtr) inline(0x3710,dispatcher);
extern pascal CtlRecHndl MakeNextCtlTarget(void) inline(0x2710,dispatcher);
extern pascal void MakeThisCtlTarget(CtlRecHndl) inline(0x2810,dispatcher);
extern pascal CtlRecHndl NewControl2(WindowPtr, Word, Ref) inline(0x3110,dispatcher);
extern pascal void NotifyControls(Word, Word, Long, WindowPtr) inline(0x2D10,dispatcher);
extern pascal void NotifyCtls(Word, Word, Long, WindowPtr) inline(0x2D10,dispatcher);
extern pascal Boolean SendEventToCtl(Boolean, WindowPtr, EventRecordPtr) inline(0x2910,dispatcher);
extern pascal void SetCtlID(Long, CtlRecHndl) inline(0x2B10,dispatcher);
extern pascal void SetCtlMoreFlags(Word, CtlRecHndl) inline(0x2F10,dispatcher);
extern pascal void SetCtlParamPtr(Pointer) inline(0x3410,dispatcher);

extern pascal Word FindRadioButton(WindowPtr, Word) inline(0x3910,dispatcher);
extern pascal void GetLETextByID(WindowPtr, Long, StringPtr) inline(0x3B10,dispatcher);
extern pascal void SetLETextByID(WindowPtr, Long, StringPtr) inline(0x3A10,dispatcher);

extern pascal void SetCtlValueByID(Word, GrafPortPtr, Long) inline(0x3C10,dispatcher);
extern pascal Word GetCtlValueByID(GrafPortPtr, Long) inline(0x3D10,dispatcher);
extern pascal void InvalOneCtlByID(GrafPortPtr, Long) inline(0x3E10,dispatcher);
extern pascal void HiliteCtlByID(Word, GrafPortPtr, Long) inline(0x3F10,dispatcher);

#endif             
