Demonstration Program Controls3
// *******************************************************************************************
// Controls3.h CLASSIC EVENT MODEL
// *******************************************************************************************
//
// This program demonstrates the creation and handling of those controls not demonstrated in
// the programs Controls1 and Controls2 (Chapter 7), with the exception of List boxes
// and determinate progress bars.
//
// The program utilises the following resources:
//
// o A 'plst' resource.
//
// o An 'MBAR' resource, and 'MENU' resources for Apple, File, Edit, and Demonstration menus
// (preload, non-purgeable).
//
// o 'MENU' resources (non-purgeable) for bevel button menus and for a pop-up group box.
//
// o A 'WIND' resource (purgeable) (initially not visible).
//
// o 'DLOG' resources and associated 'DITL', 'dlgx' and 'dftb' resources (purgeable).
//
// o 'CNTL' resources (purgeable).
//
// o A 'tab#' resource (purgeable.
//
// o An icon family resource (purgeable).
//
// o 'PICT' resources (purgeable).
//
// o 'cicn' resources (purgeable).
//
// o 'STR#' resources (purgeable).
//
// o 'TEXT' and 'styl' resources (purgeable).
//
// o 'hrct' and an 'hwin' resources (preload, purgeable), which provide help balloons
// describing the various controls.
//
// o A 'SIZE' resource with the acceptSuspendResumeEvents, canBackground,
// doesActivateOnFGSwitch, and isHighLevelEventAware flags set.
//
// *******************************************************************************************
// .................................................................................. includes
#include <Carbon.h>
#include <string.h>
// ................................................................................... defines
#define rMenubar 128
#define mAppleApplication 128
#define iAbout 1
#define mFile 129
#define iQuit 12
#define mDemonstration 131
#define iBevelAndImage 1
#define iTabEditClock 2
#define iGroupArrowsProgress 3
#define iSliders 4
#define iTextBoxes 5
#define iSmallControls 6
#define rBevelImageWindow 128
#define cBevelButton1 128
#define cBevelButton2 129
#define cBevelButton3 130
#define cBevelButton4 131
#define cBevelButton5 132
#define cBevelButton6 133
#define cBevelButton7 134
#define cBevelButton8 135
#define cBevelButton9 136
#define cBevelButton10 137
#define cBevelButton11 138
#define cBevelButton12 139
#define cBevelButton13 140
#define cBevelButton14 141
#define cBevelButton15 142
#define cBevelButton16 143
#define cBevelButton17 144
#define cBevelButton18 145
#define cBevelButton19 146
#define cBevelButton20 147
#define cBevelButton21 148
#define cImageWell1 149
#define cImageWell2 150
#define cPicture1 151
#define cPicture2 152
#define cColourIcon1 153
#define cColourIcon2 154
#define cIconSuite1 155
#define cIconSuite2 156
#define cWindowHeader 157
#define rPartCodeStrings 128
#define rGraphicAlignStrings 129
#define rTextAlignStrings 130
#define rTextPlacementStrings 131
#define rTabEditClockDialog 128
#define iTabs 2
#define tabEditText 1
#define tabClocks 2
#define iEditTextUserPane 3
#define iEditText1 5
#define iEditText2 7
#define iEditText3 9
#define iExtractEditText 10
#define iClocksUserPane 12
#define iImageWellEditText 11
#define iClocks1 14
#define iClocks2 16
#define iClocks3 18
#define iExtractClocks 19
#define iImageWellClocks 20
#define kLeftArrow 0x1C
#define kRightArrow 0x1D
#define kUpArrow 0x1E
#define kDownArrow 0x1F
#define kBackspace 0x08
#define kDelete 0x7F
#define rGroupArrowsProgDialog 129
#define iCheckboxGroup 2
#define iRadioGroupColour 3
#define iStaticTextColourDepth 7
#define iPopupGroup 8
#define iUserPaneNamesInitials 9
#define iRadioGroupNames 10
#define iCheckboxShowInitials 13
#define iUserPaneScoreAverage 15
#define iRadioGroupScores 16
#define iCheckboxShowAverages 19
#define iStaticTextCache 26
#define iLittleArrows 27
#define iPushButtonExtract 28
#define iImageWell 29
#define iDisclosureTriangle 31
#define iStaticTextDisclosure 32
#define iProgressBar 34
#define rSlidersDialog 131
#define iSlider1 2
#define iSlider2 3
#define iSlider3 4
#define iSlider4 5
#define iSlider1StaticText 9
#define iSlider2StaticText 11
#define iSlider3StaticText 13
#define iSlider4StaticText 15
#define iSlider5 17
#define iUserPane1 18
#define iSlider6 19
#define cSmallPopup 203
#define rSmallControlsString 136
#define rAboutDialog 132
#define MAX_UINT32 0xFFFFFFFF
#define MIN(a,b) ((a) < (b) ? (a) : (b))
// .................................................................................. typedefs
typedef struct
{
ControlRef bevelButton1Ref;
ControlRef bevelButton2Ref;
ControlRef bevelButton3Ref;
ControlRef bevelButton4Ref;
ControlRef bevelButton5Ref;
ControlRef bevelButton6Ref;
ControlRef bevelButton7Ref;
ControlRef bevelButton8Ref;
ControlRef bevelButton9Ref;
ControlRef bevelButton10Ref;
ControlRef bevelButton11Ref;
ControlRef bevelButton12Ref;
ControlRef bevelButton13Ref;
ControlRef bevelButton14Ref;
ControlRef bevelButton15Ref;
ControlRef bevelButton16Ref;
ControlRef bevelButton17Ref;
ControlRef bevelButton18Ref;
ControlRef bevelButton19Ref;
ControlRef bevelButton20Ref;
ControlRef bevelButton21Ref;
ControlRef imageWell1Ref;
ControlRef imageWell2Ref;
ControlRef picture1Ref;
ControlRef picture2Ref;
ControlRef colourIcon1Ref;
ControlRef colourIcon2Ref;
ControlRef iconSuite1Ref;
ControlRef iconSuite2Ref;
ControlRef windowHeaderRef;
} BevelDocStruc;
typedef BevelDocStruc **BevelDocStrucHandle;
// ....................................................................... function prototypes
void main (void);
void doPreliminaries (void);
OSErr quitAppEventHandler (AppleEvent *,AppleEvent *,SInt32);
void doGetControls (WindowRef);
void doEvents (EventRecord *);
void doMouseDown (EventRecord *);
void doMenuChoice (SInt32);
void doUpdate (EventRecord *);
void doActivate (EventRecord *);
void doActivateWindow (WindowRef,Boolean);
void doConcatPStrings (Str255,Str255);
void doCopyPString (Str255,Str255);
void doBevelImagePictIcon (void);
void doBevelImagePictIconContent (EventRecord *,WindowRef);
void doDrawPartCode (WindowRef,ControlRef,SInt16,SInt16);
void doGraphicAlignment (WindowRef,ControlRef,ControlRef);
void doTextAlignment (WindowRef,ControlRef,ControlRef);
void doTextOffset (WindowRef,ControlRef,ControlRef);
void doTextPlacement (WindowRef,ControlRef,ControlRef);
void doDrawMessage (WindowRef,Boolean);
void doDrawLegends (WindowRef,Boolean);
void helpTagsBevelImagePictIcon (WindowRef);
void doTabEditClock (void);
void doExtractEditText (DialogRef);
void doExtractDateTime (DialogRef);
void helpTagsTabEditClock (DialogRef);
void doGroupArrowsProgress (void);
void doCheckBoxGroupBox (DialogRef);
void doPopupGroupBox (DialogRef);
void doChasingAndProgress (DialogRef);
void doExtractCurrentStatus (DialogRef);
void helpTagsGroupArrowsProgress (DialogRef);
void doSliderUserPane (void);
void doDrawSliderValues (DialogRef,ControlRef);
void helpTagsSliders (DialogRef);
void doTextBox (void);
void doSmallControls (void);
void doMouseDownSmallControls (WindowRef,EventRecord *);
Boolean eventFilter (DialogRef,EventRecord *,SInt16 *);
void editTextValidator (ControlRef);
ControlKeyFilterResult numericFilter (ControlRef,SInt16 *,SInt16 *,EventModifiers *);
void arrowsActionFunction (ControlRef,SInt16);
void sliderActionFunction1 (ControlRef,SInt16);
void sliderActionFunction2 (ControlRef,SInt16);
void userPaneDrawFunction (ControlRef,SInt16);
void userPaneActivateFunction (ControlRef,Boolean);
// *******************************************************************************************
// Controls3.c
// *******************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// .......................................................................... global variables
Boolean gRunningOnX = false;
Boolean gInBackground = false;
Boolean gDone;
Str255 gCurrentString;
Boolean gBevelAndImageActive = false;
Boolean gGroupArrowsProgressActive = false;
Boolean gSlidersActive = false;
// ************************************************************************************** main
void main(void)
{
MenuBarHandle menubarHdl;
SInt32 response;
MenuRef menuRef;
EventRecord eventStructure;
// ......................................................................... do prelimiaries
doPreliminaries();
// ............................................................... set up menu bar and menus
menubarHdl = GetNewMBar(rMenubar);
if(menubarHdl == NULL)
ExitToShell();
SetMenuBar(menubarHdl);
DrawMenuBar();
Gestalt(gestaltMenuMgrAttr,&response);
if(response & gestaltMenuMgrAquaLayoutMask)
{
menuRef = GetMenuRef(mFile);
if(menuRef != NULL)
{
DeleteMenuItem(menuRef,iQuit);
DeleteMenuItem(menuRef,iQuit - 1);
DisableMenuItem(menuRef,0);
}
menuRef = GetMenuRef(mDemonstration);
if(menuRef != NULL)
EnableMenuItem(menuRef,iSmallControls);
gRunningOnX = true;
}
// ........................................................................ enter eventLoop
gDone = false;
while(!gDone)
{
if(WaitNextEvent(everyEvent,&eventStructure,MAX_UINT32,NULL))
doEvents(&eventStructure);
}
}
// *************************************************************************** doPreliminaries
void doPreliminaries(void)
{
OSErr osError;
MoreMasterPointers(512);
InitCursor();
FlushEvents(everyEvent,0);
osError = AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,
NewAEEventHandlerUPP((AEEventHandlerProcPtr) quitAppEventHandler),
0L,false);
if(osError != noErr)
ExitToShell();
}
// **************************************************************************** doQuitAppEvent
OSErr quitAppEventHandler(AppleEvent *appEvent,AppleEvent *reply,SInt32 handlerRefcon)
{
OSErr osError;
DescType returnedType;
Size actualSize;
osError = AEGetAttributePtr(appEvent,keyMissedKeywordAttr,typeWildCard,&returnedType,NULL,0,
&actualSize);
if(osError == errAEDescNotFound)
{
gDone = true;
osError = noErr;
}
else if(osError == noErr)
osError = errAEParamMissed;
return osError;
}
// ********************************************************************************** doEvents
void doEvents(EventRecord *eventStrucPtr)
{
SInt32 menuChoice;
SInt16 menuID, menuItem;
switch(eventStrucPtr->what)
{
case kHighLevelEvent:
AEProcessAppleEvent(eventStrucPtr);
break;
case keyDown:
if((eventStrucPtr->modifiers & cmdKey) != 0)
{
menuChoice = MenuEvent(eventStrucPtr);
menuID = HiWord(menuChoice);
menuItem = LoWord(menuChoice);
if(menuID == mFile && menuItem == iQuit)
gDone = true;
}
break;
case mouseDown:
doMouseDown(eventStrucPtr);
break;
case updateEvt:
doUpdate(eventStrucPtr);
break;
case activateEvt:
doActivate(eventStrucPtr);
break;
case osEvt:
switch((eventStrucPtr->message >> 24) & 0x000000FF)
{
case suspendResumeMessage:
if((eventStrucPtr->message & resumeFlag) == 1)
{
SetThemeCursor(kThemeArrowCursor);
gInBackground = false;
}
else
gInBackground = true;
}
break;
}
}
// ******************************************************************************* doMouseDown
void doMouseDown(EventRecord *eventStrucPtr)
{
WindowPartCode partCode;
WindowRef windowRef;
MenuRef menuRef;
WindowClass windowClass;
partCode = FindWindow(eventStrucPtr->where,&windowRef);
switch(partCode)
{
case inMenuBar:
menuRef = GetMenuRef(mDemonstration);
if(gBevelAndImageActive)
DisableMenuItem(menuRef,iBevelAndImage);
else
EnableMenuItem(menuRef,iBevelAndImage);
doMenuChoice(MenuSelect(eventStrucPtr->where));
break;
case inContent:
GetWindowClass(windowRef,&windowClass);
if(windowClass == kFloatingWindowClass)
doMouseDownSmallControls(windowRef,eventStrucPtr);
else if(windowRef != FrontNonFloatingWindow())
SelectWindow(windowRef);
else
{
if(gBevelAndImageActive)
doBevelImagePictIconContent(eventStrucPtr,windowRef);
}
break;
case inDrag:
DragWindow(windowRef,eventStrucPtr->where,NULL);
break;
case inGoAway:
if(TrackGoAway(windowRef,eventStrucPtr->where) == true)
{
DisposeWindow(windowRef);
gBevelAndImageActive = false;
}
break;
}
}
// ****************************************************************************** doMenuChoice
void doMenuChoice(SInt32 menuChoice)
{
MenuID menuID;
MenuItemIndex menuItem;
MenuRef menuRef;
menuID = HiWord(menuChoice);
menuItem = LoWord(menuChoice);
if(menuID == 0)
return;
switch(menuID)
{
case mAppleApplication:
if(menuItem == iAbout)
SysBeep(10);
break;
case mFile:
if(menuItem == iQuit)
gDone = true;
break;
case mDemonstration:
switch(menuItem)
{
case iBevelAndImage:
gBevelAndImageActive = true;
doBevelImagePictIcon();
break;
case iTabEditClock:
doTabEditClock();
break;
case iGroupArrowsProgress:
gGroupArrowsProgressActive = true;
doGroupArrowsProgress();
break;
case iSliders:
gSlidersActive = true;
doSliderUserPane();
break;
case iTextBoxes:
doTextBox();
break;
case iSmallControls:
doSmallControls();
menuRef = GetMenuRef(mDemonstration);
DisableMenuItem(menuRef,iSmallControls);
break;
}
break;
}
HiliteMenu(0);
}
// ********************************************************************************** doUpdate
void doUpdate(EventRecord *eventStrucPtr)
{
WindowRef windowRef;
RgnHandle visibleRegionHdl = NewRgn();
Boolean drawMode = false;
windowRef = (WindowRef) eventStrucPtr->message;
BeginUpdate(windowRef);
SetPortWindowPort(windowRef);
GetPortVisibleRegion(GetWindowPort(windowRef),visibleRegionHdl);
UpdateControls(windowRef,visibleRegionHdl);
if(gBevelAndImageActive)
{
if(windowRef == FrontNonFloatingWindow())
{
doDrawMessage(windowRef,!gInBackground);
doDrawLegends(windowRef,!gInBackground);
}
else
{
doDrawMessage(windowRef,gInBackground);
doDrawLegends(windowRef,gInBackground);
}
}
EndUpdate(windowRef);
}
// ******************************************************************************** doActivate
void doActivate(EventRecord *eventStrucPtr)
{
WindowRef windowRef;
Boolean becomingActive;
windowRef = (WindowRef) eventStrucPtr->message;
becomingActive = ((eventStrucPtr->modifiers & activeFlag) == activeFlag);
doActivateWindow(windowRef,becomingActive);
}
// ************************************************************************** doActivateWindow
void doActivateWindow(WindowRef windowRef,Boolean becomingActive)
{
ControlRef controlRef;
GetRootControl(windowRef,&controlRef);
if(becomingActive)
{
if(gBevelAndImageActive)
{
ActivateControl(controlRef);
doDrawMessage(windowRef,becomingActive);
doDrawLegends(windowRef,becomingActive);
}
}
else
{
if(gBevelAndImageActive)
{
DeactivateControl(controlRef);
doDrawMessage(windowRef,becomingActive);
doDrawLegends(windowRef,becomingActive);
}
}
}
// ************************************************************************** doConcatPStrings
void doConcatPStrings(Str255 targetString,Str255 appendString)
{
SInt16 appendLength;
appendLength = MIN(appendString[0],255 - targetString[0]);
if(appendLength > 0)
{
BlockMoveData(appendString+1,targetString+targetString[0]+1,(SInt32) appendLength);
targetString[0] += appendLength;
}
}
// ***************************************************************************** doCopyPString
void doCopyPString(Str255 sourceString,Str255 destinationString)
{
SInt16 stringLength;
stringLength = sourceString[0];
BlockMove(sourceString + 1,destinationString + 1,stringLength);
destinationString[0] = stringLength;
}
// *******************************************************************************************
// BevelImagePictIcon.c
// *******************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// .......................................................................... global variables
WindowRef gWindowRef;
extern Boolean gRunningOnX;
extern Str255 gCurrentString;
extern Boolean gInBackground;
// ********************************************************************** doBevelImagePictIcon
void doBevelImagePictIcon(void)
{
BevelDocStrucHandle bevelDocStrucHdl;
// ................................................. initial advisory text for window header
doCopyPString("\pBalloon (OS 8/9) and Help tag (OS X) help is available",gCurrentString);
// ............. open a window, set font size, set theme-compliant colour/pattern for window
if(!(gWindowRef = GetNewCWindow(rBevelImageWindow,NULL,(WindowRef)-1)))
ExitToShell();
SetPortWindowPort(gWindowRef);
UseThemeFont(kThemeSmallSystemFont,smSystemScript);
SetThemeWindowBackground(gWindowRef,kThemeBrushDialogBackgroundActive,true);
// ........... get block for document structure, assign handle to window record refCon field
if(!(bevelDocStrucHdl = (BevelDocStrucHandle) NewHandle(sizeof(BevelDocStruc))))
ExitToShell();
SetWRefCon(gWindowRef,(SInt32) bevelDocStrucHdl);
// ........................................ get controls, help tags if OS X, and show window
doGetControls(gWindowRef);
if(gRunningOnX)
helpTagsBevelImagePictIcon(gWindowRef);
ShowWindow(gWindowRef);
}
// ***************************************************************************** doGetControls
void doGetControls(WindowRef windowRef)
{
ControlRef controlRef;
BevelDocStrucHandle bevelDocStrucHdl;
ThemeButtonKind buttonKind = kThemeRoundedBevelButton;
ControlButtonTextPlacement textPlacementBelow = kControlBevelButtonPlaceBelowGraphic;
ControlButtonTextPlacement textPlacementAbove = kControlBevelButtonPlaceAboveGraphic;
Boolean centrePopupGlyph = true;
ControlFontStyleRec controlFontStyleStruc;
// ............... create root control for window, get handle to window's document structure
if(!gRunningOnX)
CreateRootControl(windowRef,&controlRef);
bevelDocStrucHdl = (BevelDocStrucHandle) (GetWRefCon(windowRef));
// ........................................................................ get the controls
if(!((*bevelDocStrucHdl)->bevelButton1Ref = GetNewControl(cBevelButton1,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton2Ref = GetNewControl(cBevelButton2,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton3Ref = GetNewControl(cBevelButton3,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton4Ref = GetNewControl(cBevelButton4,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton5Ref = GetNewControl(cBevelButton5,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton6Ref = GetNewControl(cBevelButton6,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton7Ref = GetNewControl(cBevelButton7,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton8Ref = GetNewControl(cBevelButton8,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton9Ref = GetNewControl(cBevelButton9,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton10Ref = GetNewControl(cBevelButton10,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton11Ref = GetNewControl(cBevelButton11,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton12Ref = GetNewControl(cBevelButton12,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton13Ref = GetNewControl(cBevelButton13,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton14Ref = GetNewControl(cBevelButton14,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton15Ref = GetNewControl(cBevelButton15,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton16Ref = GetNewControl(cBevelButton16,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton17Ref = GetNewControl(cBevelButton17,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton18Ref = GetNewControl(cBevelButton18,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton19Ref = GetNewControl(cBevelButton19,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton20Ref = GetNewControl(cBevelButton20,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->bevelButton21Ref = GetNewControl(cBevelButton21,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->imageWell1Ref = GetNewControl(cImageWell1,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->imageWell2Ref = GetNewControl(cImageWell2,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->picture1Ref = GetNewControl(cPicture1,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->picture2Ref = GetNewControl(cPicture2,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->colourIcon1Ref = GetNewControl(cColourIcon1,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->colourIcon2Ref = GetNewControl(cColourIcon2,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->iconSuite1Ref= GetNewControl(cIconSuite1,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->iconSuite2Ref= GetNewControl(cIconSuite2,windowRef)))
ExitToShell();
if(!((*bevelDocStrucHdl)->windowHeaderRef = GetNewControl(cWindowHeader,windowRef)))
ExitToShell();
// ............................... if running on OS X, make first four bevel buttons rounded
if(gRunningOnX)
{
SetControlData((*bevelDocStrucHdl)->bevelButton1Ref,kControlEntireControl,
kControlBevelButtonKindTag,sizeof(buttonKind),&buttonKind);
SetControlData((*bevelDocStrucHdl)->bevelButton2Ref,kControlEntireControl,
kControlBevelButtonKindTag,sizeof(buttonKind),&buttonKind);
SetControlData((*bevelDocStrucHdl)->bevelButton3Ref,kControlEntireControl,
kControlBevelButtonKindTag,sizeof(buttonKind),&buttonKind);
SetControlData((*bevelDocStrucHdl)->bevelButton4Ref,kControlEntireControl,
kControlBevelButtonKindTag,sizeof(buttonKind),&buttonKind);
}
// ........................................ set text placement for 2nd and 21st bevel button
SetControlData((*bevelDocStrucHdl)->bevelButton2Ref,kControlEntireControl,
kControlBevelButtonTextPlaceTag,sizeof(textPlacementBelow),
&textPlacementBelow);
SetControlData((*bevelDocStrucHdl)->bevelButton21Ref,kControlEntireControl,
kControlBevelButtonTextPlaceTag,sizeof(textPlacementAbove),
&textPlacementAbove);
// ........................................ set position of pop-up arrow in 6th bevel button
SetControlData((*bevelDocStrucHdl)->bevelButton6Ref,kControlEntireControl,
kControlBevelButtonCenterPopupGlyphTag,sizeof(centrePopupGlyph),
¢rePopupGlyph);
// ................................ set font for 20th bevel button to small bold system font
controlFontStyleStruc.flags = kControlUseFontMask;
controlFontStyleStruc.font = kControlFontSmallBoldSystemFont;
SetControlFontStyle((*bevelDocStrucHdl)->bevelButton20Ref,&controlFontStyleStruc);
// ................................................. set 3rd bevel button to the mixed state
SetControlValue((*bevelDocStrucHdl)->bevelButton3Ref,2);
}
// *************************************************************** doBevelImagePictIconContent
void doBevelImagePictIconContent(EventRecord *eventStrucPtr,WindowRef windowRef)
{
BevelDocStrucHandle bevelDocStrucHdl;
ControlRef controlRef;
SInt16 partCode, menuItem;
bevelDocStrucHdl = (BevelDocStrucHandle) (GetWRefCon(windowRef));
SetPortWindowPort(windowRef);
GlobalToLocal(&eventStrucPtr->where);
partCode = FindControl(eventStrucPtr->where,windowRef,&controlRef);
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,1234);
if(partCode)
{
partCode = TrackControl(controlRef,eventStrucPtr->where,NULL);
if(controlRef == (*bevelDocStrucHdl)->bevelButton1Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton2Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton3Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton4Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton9Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton13Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton14Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton15Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton16Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton17Ref)
{
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
}
else if(controlRef == (*bevelDocStrucHdl)->bevelButton5Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton6Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton7Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton8Ref)
{
if(partCode == kControlMenuPart)
{
GetBevelButtonMenuValue(controlRef,&menuItem);
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,menuItem);
}
else
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
}
else if(controlRef == (*bevelDocStrucHdl)->bevelButton10Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton11Ref ||
controlRef == (*bevelDocStrucHdl)->bevelButton12Ref)
{
if(partCode != kControlEntireControl)
{
SetControlValue((*bevelDocStrucHdl)->bevelButton10Ref,0);
SetControlValue((*bevelDocStrucHdl)->bevelButton11Ref,0);
SetControlValue((*bevelDocStrucHdl)->bevelButton12Ref,0);
SetControlValue(controlRef,1);
}
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
}
else if(controlRef == (*bevelDocStrucHdl)->bevelButton18Ref)
{
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
doGraphicAlignment(windowRef,controlRef,(*bevelDocStrucHdl)->windowHeaderRef);
}
else if(controlRef == (*bevelDocStrucHdl)->bevelButton19Ref)
{
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
doTextAlignment(windowRef,controlRef,(*bevelDocStrucHdl)->windowHeaderRef);
}
else if(controlRef == (*bevelDocStrucHdl)->bevelButton20Ref)
{
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
doTextOffset(windowRef,controlRef,(*bevelDocStrucHdl)->windowHeaderRef);
}
else if(controlRef == (*bevelDocStrucHdl)->bevelButton21Ref)
{
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
doTextPlacement(windowRef,controlRef,(*bevelDocStrucHdl)->windowHeaderRef);
}
else
doDrawPartCode(windowRef,(*bevelDocStrucHdl)->windowHeaderRef,partCode,4321);
}
}
// **************************************************************************** doDrawPartCode
void doDrawPartCode(WindowRef windowRef,ControlRef windowHeaderRef,SInt16 partCode,
SInt16 menuItem)
{
SInt16 stringIndex;
Str255 theString;
if(partCode == kControlEntireControl)
stringIndex = 1;
else if(partCode == kControlMenuPart)
stringIndex = 2;
else if(partCode == kControlTrianglePart)
stringIndex = 3;
else if(partCode == kControlEditTextPart)
stringIndex = 4;
else if(partCode == kControlPicturePart)
stringIndex = 5;
else if(partCode == kControlIconPart)
stringIndex = 6;
else if(partCode == kControlClockPart)
stringIndex = 7;
else if(partCode == kControlListBoxPart)
stringIndex = 8;
else if(partCode == kControlListBoxDoubleClickPart)
stringIndex = 9;
else if(partCode == kControlImageWellPart)
stringIndex = 10;
else if(partCode == kControlRadioGroupPart)
stringIndex = 11;
else if(partCode == kControlButtonPart)
stringIndex = 12;
else if(partCode == kControlIndicatorPart)
stringIndex = 13;
if(menuItem > 0 && menuItem < 1234)
{
doCopyPString("\pTrackControl returned ",gCurrentString);
GetIndString(theString,rPartCodeStrings,stringIndex);
doConcatPStrings(gCurrentString,theString);
doConcatPStrings(gCurrentString,"\p GetBevelButtonMenuValue returned menu item ");
NumToString((SInt32) menuItem,theString);
doConcatPStrings(gCurrentString,theString);
}
else if(menuItem == 1234 || menuItem == 4321)
{
if(menuItem == 1234)
doCopyPString("\pMouse-down in ",gCurrentString);
else if(menuItem == 4321)
doCopyPString("\pTrackControl returned ",gCurrentString);
GetIndString(theString,rPartCodeStrings,stringIndex);
doConcatPStrings(gCurrentString,theString);
}
Draw1Control(windowHeaderRef);
doDrawMessage(windowRef,true);
}
// ************************************************************************ doGraphicAlignment
void doGraphicAlignment(WindowRef windowRef,ControlRef controlRef,ControlRef windowHeaderRef)
{
SInt16 a, b;
UInt32 finalTicks;
ControlButtonGraphicAlignment alignmentConstant = 0;
if(!gRunningOnX)
SetThemeCursor(kThemeWatchCursor);
for(a=1;a<10;a++)
{
Delay(60,&finalTicks);
alignmentConstant++;
if(alignmentConstant == 9)
alignmentConstant = 0;
Draw1Control(windowHeaderRef);
GetIndString(gCurrentString,rGraphicAlignStrings,a);
doDrawMessage(windowRef,true);
for(b=0;b<=52;b++)
{
SetBevelButtonGraphicAlignment(controlRef,alignmentConstant,b,b);
Delay(2,&finalTicks);
Draw1Control(controlRef);
QDFlushPortBuffer(GetWindowPort(FrontNonFloatingWindow()),NULL);
}
}
if(!gRunningOnX)
SetThemeCursor(kThemeArrowCursor);
}
// *************************************************************************** doTextAlignment
void doTextAlignment(WindowRef windowRef,ControlRef controlRef,ControlRef windowHeaderRef)
{
SInt16 a, b;
UInt32 finalTicks;
ControlButtonTextAlignment alignmentConstant = -3;
if(!gRunningOnX)
SetThemeCursor(kThemeWatchCursor);
for(a=1;a<4;a++)
{
Delay(60,&finalTicks);
alignmentConstant++;
if(alignmentConstant == 0)
alignmentConstant++;
Draw1Control(windowHeaderRef);
GetIndString(gCurrentString,rTextAlignStrings,a);
doDrawMessage(windowRef,true);
for(b=0;b<=40;b++)
{
SetBevelButtonTextAlignment(controlRef,alignmentConstant,b);
Delay(2,&finalTicks);
Draw1Control(controlRef);
QDFlushPortBuffer(GetWindowPort(FrontNonFloatingWindow()),NULL);
}
}
if(!gRunningOnX)
SetThemeCursor(kThemeArrowCursor);
}
// ****************************************************************************** doTextOffset
void doTextOffset(WindowRef windowRef,ControlRef controlRef,ControlRef windowHeaderRef)
{
ControlButtonTextAlignment alignmentConstant;
SInt16 offset;
UInt32 finalTicks;
if(!gRunningOnX)
SetThemeCursor(kThemeWatchCursor);
Draw1Control(windowHeaderRef);
doCopyPString("\pOffset from left",gCurrentString);
doDrawMessage(windowRef,true);
alignmentConstant = kControlBevelButtonAlignTextFlushLeft;
SetControlData(controlRef,kControlEntireControl,kControlBevelButtonTextAlignTag,
sizeof(alignmentConstant),&alignmentConstant);
Draw1Control(controlRef);
for(offset=1;offset<27;offset++)
{
Delay(15,&finalTicks);
SetControlData(controlRef,kControlEntireControl,kControlBevelButtonTextOffsetTag,
sizeof(offset),&offset);
Draw1Control(controlRef);
QDFlushPortBuffer(GetWindowPort(FrontNonFloatingWindow()),NULL);
}
Delay(60,&finalTicks);
Draw1Control(windowHeaderRef);
doCopyPString("\pOffset from right",gCurrentString);
doDrawMessage(windowRef,true);
alignmentConstant = kControlBevelButtonAlignTextFlushRight;
SetControlData(controlRef,kControlEntireControl,kControlBevelButtonTextAlignTag,
sizeof(alignmentConstant),&alignmentConstant);
for(offset=0;offset<13;offset++)
{
Delay(15,&finalTicks);
SetControlData(controlRef,kControlEntireControl,kControlBevelButtonTextOffsetTag,
sizeof(offset),&offset);
Draw1Control(controlRef);
QDFlushPortBuffer(GetWindowPort(FrontNonFloatingWindow()),NULL);
}
if(!gRunningOnX)
SetThemeCursor(kThemeArrowCursor);
}
// *************************************************************************** doTextPlacement
void doTextPlacement(WindowRef windowRef,ControlRef controlRef,ControlRef windowHeaderRef)
{
ControlButtonTextPlacement placementConstant;
UInt32 finalTicks;
if(!gRunningOnX)
SetThemeCursor(kThemeWatchCursor);
for(placementConstant = 1;placementConstant < 5;placementConstant++)
{
Delay(60,&finalTicks);
SetBevelButtonTextPlacement(controlRef,placementConstant);
Draw1Control(controlRef);
Draw1Control(windowHeaderRef);
GetIndString(gCurrentString,rTextPlacementStrings,placementConstant);
doDrawMessage(windowRef,true);
QDFlushPortBuffer(GetWindowPort(FrontNonFloatingWindow()),NULL);
}
if(!gRunningOnX)
SetThemeCursor(kThemeArrowCursor);
}
// ***************************************************************************** doDrawMessage
void doDrawMessage(WindowRef windowRef,Boolean inState)
{
Rect portRect;
CFStringRef stringRef;
Rect textBoxRect;
if(windowRef == gWindowRef)
{
SetPortWindowPort(windowRef);
GetWindowPortBounds(windowRef,&portRect);
stringRef = CFStringCreateWithPascalString(NULL,gCurrentString,kCFStringEncodingMacRoman);
SetRect(&textBoxRect,portRect.left,7,portRect.right,22);
if(inState == kThemeStateActive)
TextMode(srcOr);
else
TextMode(grayishTextOr);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,inState,true,&textBoxRect,teJustCenter,
NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
}
// ***************************************************************************** doDrawLegends
void doDrawLegends(WindowRef windowRef,Boolean inState)
{
Rect theRect;
if(windowRef == gWindowRef)
{
SetPortWindowPort(windowRef);
if(gRunningOnX)
{
SetRect(&theRect,30,54,585,67);
EraseRect(&theRect);
OffsetRect(&theRect,0,91);
EraseRect(&theRect);
OffsetRect(&theRect,0,92);
EraseRect(&theRect);
}
if(inState == kThemeStateActive)
TextMode(srcOr);
else
TextMode(grayishTextOr);
SetRect(&theRect,30,53,220,68);
if(gRunningOnX)
DrawThemeTextBox(CFSTR("Bevel button content"),kThemeSmallSystemFont,inState,false,
&theRect,teJustLeft,NULL);
else
DrawThemeTextBox(CFSTR("Bevel sizes and bevel button content"),kThemeSmallSystemFont,
inState,false,&theRect,teJustLeft,NULL);
SetRect(&theRect,313,53,513,68);
DrawThemeTextBox(CFSTR("Menu position and behaviour"),kThemeSmallSystemFont,inState,
false,&theRect,teJustLeft,NULL);
SetRect(&theRect,30,144,180,159);
DrawThemeTextBox(CFSTR("Bevel button behaviour"),kThemeSmallSystemFont,inState,false,
&theRect,teJustLeft,NULL);
SetRect(&theRect,313,144,513,159);
DrawThemeTextBox(CFSTR("Graphic/text alignment & offset"),kThemeSmallSystemFont,inState,
false,&theRect,teJustLeft,NULL);
SetRect(&theRect,490,144,640,159);
DrawThemeTextBox(CFSTR("Text placement"),kThemeSmallSystemFont,inState,false,&theRect,
teJustLeft,NULL);
SetRect(&theRect,30,235,180,250);
DrawThemeTextBox(CFSTR("Image wells"),kThemeSmallSystemFont,inState,false,&theRect,
teJustLeft,NULL);
SetRect(&theRect,168,235,308,250);
DrawThemeTextBox(CFSTR("Picture controls"),kThemeSmallSystemFont,inState,false,&theRect,
teJustLeft,NULL);
SetRect(&theRect,313,235,463,250);
DrawThemeTextBox(CFSTR("Icon controls (cicn)"),kThemeSmallSystemFont,inState,false,
&theRect,teJustLeft,NULL);
SetRect(&theRect,451,235,601,250);
DrawThemeTextBox(CFSTR("Icon controls (icon suite)"),kThemeSmallSystemFont,inState,false,
&theRect,teJustLeft,NULL);
}
}
// **************************************************************** helpTagsBevelImagePictIcon
void helpTagsBevelImagePictIcon(WindowRef windowRef)
{
BevelDocStrucHandle bevelDocStrucHdl;
HMHelpContentRec helpContent;
bevelDocStrucHdl = (BevelDocStrucHandle) (GetWRefCon(windowRef));
memset(&helpContent,0,sizeof(helpContent));
HMSetTagDelay(500);
HMSetHelpTagsDisplayed(true);
helpContent.version = kMacHelpVersion;
helpContent.tagSide = kHMOutsideTopCenterAligned;
helpContent.content[kHMMinimumContentIndex].contentType = kHMStringResContent;
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmResID = 132;
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 1;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton1Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 2;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton2Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 3;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton3Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 4;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton4Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 5;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton5Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 6;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton6Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 7;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton7Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 8;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton8Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 9;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton9Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 10;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton10Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 10;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton11Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 10;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton12Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 11;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton13Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 11;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton14Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 11;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton15Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 12;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton16Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 13;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton17Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 14;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton18Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 15;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton19Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 16;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton20Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 17;
HMSetControlHelpContent((*bevelDocStrucHdl)->bevelButton21Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 18;
HMSetControlHelpContent((*bevelDocStrucHdl)->imageWell1Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 19;
HMSetControlHelpContent((*bevelDocStrucHdl)->imageWell2Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 20;
HMSetControlHelpContent((*bevelDocStrucHdl)->picture1Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 21;
HMSetControlHelpContent((*bevelDocStrucHdl)->picture2Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 22;
HMSetControlHelpContent((*bevelDocStrucHdl)->colourIcon1Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 23;
HMSetControlHelpContent((*bevelDocStrucHdl)->colourIcon2Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 24;
HMSetControlHelpContent((*bevelDocStrucHdl)->iconSuite1Ref,&helpContent);
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = 25;
HMSetControlHelpContent((*bevelDocStrucHdl)->iconSuite2Ref,&helpContent);
}
// *******************************************************************************************
// TabEditClock.c
// *******************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// .......................................................................... global variables
extern Boolean gRunningOnX;
// **************************************************************************** doTabEditClock
void doTabEditClock(void)
{
DialogRef dialogRef;
ControlRef controlRef;
Str255 initialName = "\pYour name here";
ControlEditTextSelectionRec selectionRec;
ControlKeyFilterUPP numericFilterUPP;
ModalFilterUPP eventFilterUPP;
ControlEditTextValidationUPP editTextValidatorUPP;
SInt16 tabHit, itemHit;
if(FrontNonFloatingWindow())
doActivateWindow(FrontNonFloatingWindow(),false);
if(!(dialogRef = GetNewDialog(rTabEditClockDialog,NULL,(WindowRef) -1)))
ExitToShell();
SetWTitle(GetDialogWindow(dialogRef),"\pTab, Edit Text, and Clock Controls");
SetPortDialogPort(dialogRef);
// .................................................. set default button and cursor tracking
SetDialogDefaultItem(dialogRef,kStdOkItemIndex);
SetDialogTracksCursor(dialogRef,true);
// ..................................................... hide user pane with embedded clocks
GetDialogItemAsControl(dialogRef,iClocksUserPane,&controlRef);
HideControl(controlRef);
// ............... assign some text to the first edit text control and select the whole text
GetDialogItemAsControl(dialogRef,iEditText1,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlEditTextTextTag,initialName[0],
&initialName[1]);
selectionRec.selStart = 0;
selectionRec.selEnd = 32767;
SetControlData(controlRef,kControlEntireControl,kControlEditTextSelectionTag,
sizeof(selectionRec),&selectionRec);
// create universal procedure pointers for event filter, key filter, and edit text validator
eventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
numericFilterUPP = NewControlKeyFilterUPP((ControlKeyFilterProcPtr) numericFilter);
editTextValidatorUPP = NewControlEditTextValidationUPP((ControlEditTextValidationProcPtr)
editTextValidator);
// .................. attach an edit text validation function to the first edit text control
GetDialogItemAsControl(dialogRef,iEditText1,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlEditTextValidationProcTag,
sizeof(editTextValidatorUPP),&editTextValidatorUPP);
// .............................. attach a key filter function to the second edit text control
GetDialogItemAsControl(dialogRef,iEditText2,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlEditTextKeyFilterTag,
sizeof(numericFilterUPP),&numericFilterUPP);
// ................................. set help tags, show dialog, and enter modal dialog loop
if(gRunningOnX)
helpTagsTabEditClock(dialogRef);
ShowWindow(GetDialogWindow(dialogRef));
do
{
ModalDialog(eventFilterUPP,&itemHit);
if(itemHit == iTabs)
{
GetDialogItemAsControl(dialogRef,iTabs,&controlRef);
tabHit = GetControlValue(controlRef);
if(tabHit == tabEditText)
{
SetWTitle(GetDialogWindow(dialogRef),"\pTab, Edit Text, and Clock Controls");
GetDialogItemAsControl(dialogRef,iClocksUserPane,&controlRef);
HideControl(controlRef);
GetDialogItemAsControl(dialogRef,iEditTextUserPane,&controlRef);
ActivateControl(controlRef);
ShowControl(controlRef);
GetDialogItemAsControl(dialogRef,iEditText1,&controlRef);
SetKeyboardFocus(GetDialogWindow(dialogRef),controlRef,kControlFocusNextPart);
}
else if(tabHit == tabClocks)
{
SetWTitle(GetDialogWindow(dialogRef),"\pTab, Clock, and Edit Text Controls");
GetDialogItemAsControl(dialogRef,iEditTextUserPane,&controlRef);
DeactivateControl(controlRef);
HideControl(controlRef);
GetDialogItemAsControl(dialogRef,iClocksUserPane,&controlRef);
ShowControl(controlRef);
GetDialogItemAsControl(dialogRef,iClocks1,&controlRef);
SetKeyboardFocus(GetDialogWindow(dialogRef),controlRef,kControlFocusNextPart);
}
}
else if(itemHit == iExtractEditText)
{
GetDialogItemAsControl(dialogRef,iImageWellEditText,&controlRef);
Draw1Control(controlRef);
doExtractEditText(dialogRef);
}
else if(itemHit == iExtractClocks)
{
GetDialogItemAsControl(dialogRef,iImageWellClocks,&controlRef);
Draw1Control(controlRef);
doExtractDateTime(dialogRef);
}
} while(itemHit != kStdOkItemIndex);
DisposeDialog(dialogRef);
DisposeModalFilterUPP(eventFilterUPP);
DisposeControlKeyFilterUPP(numericFilterUPP);
DisposeControlEditTextValidationUPP(editTextValidatorUPP);
}
// ************************************************************************* doExtractEditText
void doExtractEditText(DialogRef dialogRef)
{
GrafPtr oldPort;
RGBColor saveBackColour, whiteColour = { 0xFFFF, 0xFFFF, 0xFFFF };
SInt16 iType;
Handle theHandle;
Rect theRect;
Str255 theString;
CFStringRef stringRef;
ControlRef controlRef;
Size actualSize;
GetPort(&oldPort);
SetPortDialogPort(dialogRef);
GetBackColor(&saveBackColour);
RGBBackColor(&whiteColour);
GetDialogItem(dialogRef,iEditText1,&iType,&theHandle,&theRect);
GetDialogItemText(theHandle,theString);
if(!gRunningOnX)
{
MoveTo(124,177);
DrawString(theString);
}
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,124,166,314,181);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
}
GetDialogItem(dialogRef,iEditText2,&iType,&theHandle,&theRect);
GetDialogItemText(theHandle,theString);
if(!gRunningOnX)
{
MoveTo(124,190);
DrawString(theString);
}
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,124,179,314,194);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
}
GetDialogItemAsControl(dialogRef,iEditText3,&controlRef);
GetControlDataSize(controlRef,kControlEditTextPart,kControlEditTextTextTag,&actualSize);
GetControlData(controlRef,kControlEntireControl,kControlEditTextPasswordTag,actualSize,
&theString[1],NULL);
theString[0] = actualSize;
if(!gRunningOnX)
{
MoveTo(124,203);
DrawString(theString);
}
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,124,192,314,207);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
}
if(gRunningOnX)
{
if(stringRef != NULL)
CFRelease(stringRef);
}
RGBBackColor(&saveBackColour);
SetPort(oldPort);
}
// ************************************************************************* doExtractDateTime
void doExtractDateTime(DialogRef dialogRef)
{
GrafPtr oldPort;
RGBColor saveBackColour, whiteColour = { 0xFFFF, 0xFFFF, 0xFFFF };
ControlRef controlRef;
LongDateRec longDateTimeStruc;
SInt16 second, minute, hour, day, month, year;
Str255 theString, tempString;
CFStringRef stringRef;
Rect theRect;
GetPort(&oldPort);
SetPortDialogPort(dialogRef);
GetBackColor(&saveBackColour);
RGBBackColor(&whiteColour);
GetDialogItemAsControl(dialogRef,iClocks1,&controlRef);
GetControlData(controlRef,kControlEntireControl,kControlClockLongDateTag,
sizeof(longDateTimeStruc),&longDateTimeStruc,NULL);
hour = longDateTimeStruc.ld.hour;
minute = longDateTimeStruc.ld.minute;
second = longDateTimeStruc.ld.second;
doCopyPString("\pHour ",theString);
NumToString((SInt32) hour,tempString);
doConcatPStrings(theString,tempString);
doConcatPStrings(theString,"\p, Minute ");
NumToString((SInt32) minute,tempString);
doConcatPStrings(theString,tempString);
doConcatPStrings(theString,"\p, Second ");
NumToString((SInt32) second,tempString);
doConcatPStrings(theString,tempString);
MoveTo(124,177);
if(!gRunningOnX)
DrawString(theString);
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,124,166,314,181);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
GetDialogItemAsControl(dialogRef,iClocks2,&controlRef);
GetControlData(controlRef,kControlEntireControl,kControlClockLongDateTag,
sizeof(longDateTimeStruc),&longDateTimeStruc,NULL);
day = longDateTimeStruc.ld.day;
month = longDateTimeStruc.ld.month;
year = longDateTimeStruc.ld.year;
doCopyPString("\pDay ",theString);
NumToString((SInt32) day,tempString);
doConcatPStrings(theString,tempString);
doConcatPStrings(theString,"\p, Month ");
NumToString((SInt32) month,tempString);
doConcatPStrings(theString,tempString);
doConcatPStrings(theString,"\p, Year ");
NumToString((SInt32) year,tempString);
doConcatPStrings(theString,tempString);
MoveTo(124,190);
if(!gRunningOnX)
DrawString(theString);
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,124,179,314,194);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
GetDialogItemAsControl(dialogRef,iClocks3,&controlRef);
GetControlData(controlRef,kControlEntireControl,kControlClockLongDateTag,
sizeof(longDateTimeStruc),&longDateTimeStruc,NULL);
month = longDateTimeStruc.ld.month;
year = longDateTimeStruc.ld.year;
doCopyPString("\pMonth ",theString);
NumToString((SInt32) month,tempString);
doConcatPStrings(theString,tempString);
doConcatPStrings(theString,"\p, Year ");
NumToString((SInt32) year,tempString);
doConcatPStrings(theString,tempString);
MoveTo(124,203);
if(!gRunningOnX)
DrawString(theString);
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,124,192,314,207);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
RGBBackColor(&saveBackColour);
SetPort(oldPort);
}
// ***************************************************************************** numericFilter
ControlKeyFilterResult numericFilter(ControlRef controlRef,SInt16* keyCode,SInt16 *charCode,
EventModifiers *modifiers)
{
if(((char) *charCode >= '0') && ((char) *charCode <= '9') ||
(BitTst(modifiers,15 - cmdKeyBit)))
{
return kControlKeyFilterPassKey;
}
switch(*charCode)
{
case kLeftArrow:
case kRightArrow:
case kUpArrow:
case kDownArrow:
case kBackspace:
case kDelete:
return kControlKeyFilterPassKey;
break;
}
SysBeep(10);
return kControlKeyFilterBlockKey;
}
// ************************************************************************* editTextValidator
void editTextValidator(ControlRef controlRef)
{
Str255 oldText, newText;
Size actualSize;
UInt8 a, count = 0;
GetControlData(controlRef,kControlEntireControl,kControlEditTextTextTag,sizeof(oldText) -1,
&oldText[1],&actualSize);
if(actualSize <= 255)
oldText[0] = actualSize;
else
oldText[0] = 255;
for(a=1;a<=oldText[0];a++)
{
if(((oldText[a] >= 'A') && (oldText[a] <= 'Z') ||
(oldText[a] >= 'a') && (oldText[a] <= 'z')) ||
(oldText[a] == ' ') || (oldText[a] == '.'))
{
newText[count + 1] = oldText[a];
count++;
}
}
newText[0] = count;
SetControlData(controlRef,kControlEntireControl,kControlEditTextTextTag,newText[0],
&newText[1]);
Draw1Control(controlRef);
}
// ********************************************************************** helpTagsTabEditClock
void helpTagsTabEditClock(DialogRef dialogRef)
{
HMHelpContentRec helpContent;
SInt16 a;
static SInt16 itemNumber[10] = { 2,5,7,9,11,21,14,16,18,20 };
ControlRef controlRef;
memset(&helpContent,0,sizeof(helpContent));
HMSetTagDelay(500);
HMSetHelpTagsDisplayed(true);
helpContent.version = kMacHelpVersion;
helpContent.tagSide = kHMOutsideTopCenterAligned;
helpContent.content[kHMMinimumContentIndex].contentType = kHMStringResContent;
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmResID = 133;
for(a = 1;a <= 10; a++)
{
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = a;
GetDialogItemAsControl(dialogRef,itemNumber[a - 1],&controlRef);
HMSetControlHelpContent(controlRef,&helpContent);
}
}
// *******************************************************************************************
// GroupArrowsProgress.c
// *******************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// .......................................................................... global variables
ControlRef gCacheSizeControlRef;
ControlRef gLittleArrowsControlRef;
ControlActionUPP gArrowsActionFunctionUPP;
extern Boolean gRunningOnX;
extern Boolean gGroupArrowsProgressActive;
// ********************************************************************* doGroupArrowsProgress
void doGroupArrowsProgress(void)
{
DialogRef dialogRef;
ControlRef controlRef;
ModalFilterUPP eventFilterUPP;
SInt16 controlValue, itemHit;
Str255 theString;
if(FrontNonFloatingWindow())
doActivateWindow(FrontNonFloatingWindow(),false);
if(!(dialogRef = GetNewDialog(rGroupArrowsProgDialog,NULL,(WindowRef) -1)))
ExitToShell();
SetPortDialogPort(dialogRef);
// ........................................................... set default button, help tags
SetDialogDefaultItem(dialogRef,kStdOkItemIndex);
// .. create universal procedure pointers for event filter and little arrows action function
eventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
gArrowsActionFunctionUPP = NewControlActionUPP((ControlActionProcPtr) arrowsActionFunction);
// ................................................ set initial value for checkbox group box
GetDialogItemAsControl(dialogRef,iCheckboxGroup,&controlRef);
SetControlValue(controlRef,1);
// ....................................... get and set initial cache value for little arrows
GetDialogItemAsControl(dialogRef,iLittleArrows,&gLittleArrowsControlRef);
NumToString((SInt32) GetControlValue(gLittleArrowsControlRef),theString);
doConcatPStrings(theString,"\pK");
GetDialogItemAsControl(dialogRef,iStaticTextCache,&gCacheSizeControlRef);
SetControlData(gCacheSizeControlRef,kControlEntireControl,kControlStaticTextTextTag,
theString[0],&theString[1]);
// ............................................... hide second user pane in pop-up group box
GetDialogItemAsControl(dialogRef,iUserPaneScoreAverage,&controlRef);
HideControl(controlRef);
// .................................. set help tags, show dialog, and enter ModalDialog loop
if(gRunningOnX)
helpTagsGroupArrowsProgress(dialogRef);
ShowWindow(GetDialogWindow(dialogRef));
do
{
ModalDialog(eventFilterUPP,&itemHit);
if(itemHit == iCheckboxGroup)
{
doCheckBoxGroupBox(dialogRef);
}
else if(itemHit == iPopupGroup)
{
doPopupGroupBox(dialogRef);
}
else if(itemHit == iCheckboxShowInitials)
{
GetDialogItemAsControl(dialogRef,iCheckboxShowInitials,&controlRef);
controlValue = (!(GetControlValue(controlRef)));
SetControlValue(controlRef,controlValue);
}
else if(itemHit == iCheckboxShowAverages)
{
GetDialogItemAsControl(dialogRef,iCheckboxShowAverages,&controlRef);
controlValue = (!(GetControlValue(controlRef)));
SetControlValue(controlRef,controlValue);
}
else if(itemHit == iDisclosureTriangle)
{
doChasingAndProgress(dialogRef);
}
else if(itemHit == iPushButtonExtract)
{
GetDialogItemAsControl(dialogRef,iImageWell,&controlRef);
Draw1Control(controlRef);
doExtractCurrentStatus(dialogRef);
}
} while(itemHit != kStdOkItemIndex);
// ................................................................................ clean up
DisposeDialog(dialogRef);
DisposeModalFilterUPP(eventFilterUPP);
DisposeControlActionUPP(gArrowsActionFunctionUPP);
gGroupArrowsProgressActive = false;
}
// ************************************************************************ doCheckBoxGroupBox
void doCheckBoxGroupBox(DialogRef dialogRef)
{
ControlRef controlRef;
SInt16 controlValue;
GetDialogItemAsControl(dialogRef,iCheckboxGroup,&controlRef);
controlValue = (!(GetControlValue(controlRef)));
SetControlValue(controlRef,controlValue);
if(controlValue == 0)
{
GetDialogItemAsControl(dialogRef,iRadioGroupColour,&controlRef);
DeactivateControl(controlRef);
GetDialogItemAsControl(dialogRef,iStaticTextColourDepth,&controlRef);
DeactivateControl(controlRef);
}
else if(controlValue == 1)
{
GetDialogItemAsControl(dialogRef,iRadioGroupColour,&controlRef);
ActivateControl(controlRef);
GetDialogItemAsControl(dialogRef,iStaticTextColourDepth,&controlRef);
ActivateControl(controlRef);
}
}
// *************************************************************************** doPopupGroupBox
void doPopupGroupBox(DialogRef dialogRef)
{
ControlRef controlRef;
SInt16 controlValue;
GetDialogItemAsControl(dialogRef,iPopupGroup,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
{
GetDialogItemAsControl(dialogRef,iUserPaneScoreAverage,&controlRef);
HideControl(controlRef);
GetDialogItemAsControl(dialogRef,iUserPaneNamesInitials,&controlRef);
ShowControl(controlRef);
}
else if(controlValue == 2)
{
GetDialogItemAsControl(dialogRef,iUserPaneNamesInitials,&controlRef);
HideControl(controlRef);
GetDialogItemAsControl(dialogRef,iUserPaneScoreAverage,&controlRef);
ShowControl(controlRef);
}
}
// ********************************************************************** doChasingAndProgress
void doChasingAndProgress(DialogRef dialogRef)
{
ControlRef controlRef;
SInt16 controlValue;
Handle ditlHdl;
Boolean indeterminateFlag = 1;
Str255 expandString = "\pHide Progress Bar and Chasing Arrows";
Str255 collapseString = "\pShow Progress Bar and Chasing Arrows";
GetDialogItemAsControl(dialogRef,iDisclosureTriangle,&controlRef);
controlValue = (!(GetControlValue(controlRef)));
SetControlValue(controlRef,controlValue);
if(controlValue == 1)
{
ditlHdl = GetResource('DITL',130);
AppendDITL(dialogRef,ditlHdl,appendDITLBottom);
ReleaseResource(ditlHdl);
GetDialogItemAsControl(dialogRef,iProgressBar,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlProgressBarIndeterminateTag,
sizeof(indeterminateFlag),&indeterminateFlag);
GetDialogItemAsControl(dialogRef,kStdOkItemIndex,&controlRef);
MoveControl(controlRef,277,351);
GetDialogItemAsControl(dialogRef,iStaticTextDisclosure,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlStaticTextTextTag,
expandString[0],&expandString[1]);
Draw1Control(controlRef);
}
else if(controlValue == 0)
{
GetDialogItemAsControl(dialogRef,kStdOkItemIndex,&controlRef);
MoveControl(controlRef,277,280);
ShortenDITL(dialogRef,3);
SizeWindow(GetDialogWindow(dialogRef),362,321,false);
GetDialogItemAsControl(dialogRef,iStaticTextDisclosure,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlStaticTextTextTag,
collapseString[0],&collapseString[1]);
Draw1Control(controlRef);
}
}
// ******************************************************************** doExtractCurrentStatus
void doExtractCurrentStatus(DialogRef dialogRef)
{
GrafPtr oldPort;
RGBColor saveBackColour, whiteColour = { 0xFFFF, 0xFFFF, 0xFFFF };
ControlRef controlRef;
SInt16 controlValue;
Str255 theString;
CFStringRef stringRef;
Rect theRect;
GetPort(&oldPort);
SetPortDialogPort(dialogRef);
GetBackColor(&saveBackColour);
RGBBackColor(&whiteColour);
GetDialogItemAsControl(dialogRef,iCheckboxGroup,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue)
{
doCopyPString("\pUse colour,",theString);
GetDialogItemAsControl(dialogRef,iRadioGroupColour,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
doConcatPStrings(theString,"\p 8 bit.");
else if(controlValue == 2)
doConcatPStrings(theString,"\p 16 bit.");
else if(controlValue == 3)
doConcatPStrings(theString,"\p 32 bit.");
}
else
doCopyPString("\pDont use colour.",theString);
if(!gRunningOnX)
{
MoveTo(108,216);
DrawString(theString);
}
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,108,205,347,220);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
GetDialogItemAsControl(dialogRef,iPopupGroup,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
{
doCopyPString("\pPlayer, ",theString);
GetDialogItemAsControl(dialogRef,iRadioGroupNames,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
doConcatPStrings(theString,"\pname first,");
else if(controlValue == 2)
doConcatPStrings(theString,"\pname last,");
GetDialogItemAsControl(dialogRef,iCheckboxShowInitials,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
doConcatPStrings(theString,"\p show number.");
else if(controlValue == 0)
doConcatPStrings(theString,"\p no number.");
}
else if(controlValue == 2)
{
doCopyPString("\pScore, ",theString);
GetDialogItemAsControl(dialogRef,iRadioGroupScores,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
doConcatPStrings(theString,"\pbatting, ");
else if(controlValue == 2)
doConcatPStrings(theString,"\pbowling, ");
GetDialogItemAsControl(dialogRef,iCheckboxShowAverages,&controlRef);
controlValue = GetControlValue(controlRef);
if(controlValue == 1)
doConcatPStrings(theString,"\pshow average.");
else if(controlValue == 0)
doConcatPStrings(theString,"\pno average.");
}
if(!gRunningOnX)
{
MoveTo(108,229);
DrawString(theString);
}
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,108,219,347,234);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
if(!gRunningOnX)
{
MoveTo(108,242);
DrawString("\pCache size: ");
}
else
{
stringRef = CFStringCreateWithPascalString(NULL,"\pCache size: ",
kCFStringEncodingMacRoman);
SetRect(&theRect,108,232,347,247);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
GetDialogItemAsControl(dialogRef,iLittleArrows,&controlRef);
NumToString((SInt32) GetControlValue(controlRef),theString);
if(!gRunningOnX)
DrawString(theString);
else
{
stringRef = CFStringCreateWithPascalString(NULL,theString,kCFStringEncodingMacRoman);
SetRect(&theRect,174,232,347,247);
DrawThemeTextBox(stringRef,kThemeSmallSystemFont,true,false,&theRect,teJustLeft,NULL);
if(stringRef != NULL)
CFRelease(stringRef);
}
RGBBackColor(&saveBackColour);
SetPort(oldPort);
}
// *************************************************************** helpTagsGroupArrowsProgress
void helpTagsGroupArrowsProgress(DialogRef dialogRef)
{
HMHelpContentRec helpContent;
SInt16 a;
static SInt16 itemNumber[8] = { 2,9,21,25,27,29,31,32 };
ControlRef controlRef;
memset(&helpContent,0,sizeof(helpContent));
HMSetTagDelay(500);
HMSetHelpTagsDisplayed(true);
helpContent.version = kMacHelpVersion;
helpContent.tagSide = kHMOutsideTopCenterAligned;
helpContent.content[kHMMinimumContentIndex].contentType = kHMStringResContent;
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmResID = 134;
for(a = 1;a <= 8; a++)
{
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = a;
GetDialogItemAsControl(dialogRef,itemNumber[a - 1],&controlRef);
HMSetControlHelpContent(controlRef,&helpContent);
}
}
// *******************************************************************************************
// Sliders.c
// *******************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// .......................................................................... global variables
extern Boolean gRunningOnX;
// .......................................................................... global variables
ControlActionUPP gSliderActionFunction1UPP;
ControlActionUPP gSliderActionFunction2UPP;
ControlUserPaneDrawUPP gUserPaneDrawFunctionUPP;
ControlUserPaneActivateUPP gUserPaneActivateFunctionUPP;
ControlRef gSlider1Ref;
ControlRef gSlider2Ref;
ControlRef gSlider3Ref;
ControlRef gSlider4Ref;
ControlRef gSlider5Ref;
ControlRef gSlider6Ref;
RGBColor gRedColour;
RGBColor gBlueColour;
RGBColor gBlackColour = { 0x0000, 0x0000, 0x0000 };
Boolean gDrawActivated = true;
extern Boolean gSlidersActive;
// ************************************************************************** doSliderUserPane
void doSliderUserPane(void)
{
DialogRef dialogRef;
ModalFilterUPP eventFilterUPP;
ControlRef controlRef;
SInt16 itemHit;
if(FrontNonFloatingWindow())
doActivateWindow(FrontNonFloatingWindow(),false);
if(!(dialogRef = GetNewDialog(rSlidersDialog,NULL,(WindowRef) -1)))
ExitToShell();
// ...................................................................... set default button
SetDialogDefaultItem(dialogRef,kStdOkItemIndex);
// ............................ create universal procedure pointer for event filter function
eventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
// ......................... create universal procedure pointers for slider action functions
gSliderActionFunction1UPP = NewControlActionUPP((ControlActionProcPtr)
sliderActionFunction1);
gSliderActionFunction2UPP = NewControlActionUPP((ControlActionProcPtr)
sliderActionFunction2);
// .... create universal procedure pointers for user pane functions, set user pane functions
gUserPaneDrawFunctionUPP = NewControlUserPaneDrawUPP((ControlUserPaneDrawProcPtr)
userPaneDrawFunction);
GetDialogItemAsControl(dialogRef,iUserPane1,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlUserPaneDrawProcTag,
sizeof(gUserPaneDrawFunctionUPP),&gUserPaneDrawFunctionUPP);
gUserPaneActivateFunctionUPP = NewControlUserPaneActivateUPP((ControlUserPaneActivateProcPtr)
userPaneActivateFunction);
GetDialogItemAsControl(dialogRef,iUserPane1,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlUserPaneActivateProcTag,
sizeof(gUserPaneActivateFunctionUPP),&gUserPaneActivateFunctionUPP);
// ........... get control handles of, and draw initial control values for, top four sliders
GetDialogItemAsControl(dialogRef,iSlider1,&gSlider1Ref);
doDrawSliderValues(dialogRef,gSlider1Ref);
GetDialogItemAsControl(dialogRef,iSlider2,&gSlider2Ref);
doDrawSliderValues(dialogRef,gSlider2Ref);
GetDialogItemAsControl(dialogRef,iSlider3,&gSlider3Ref);
doDrawSliderValues(dialogRef,gSlider3Ref);
GetDialogItemAsControl(dialogRef,iSlider4,&gSlider4Ref);
doDrawSliderValues(dialogRef,gSlider4Ref);
// ....................... get control handles and values for bottom two sliders, set colour
GetDialogItemAsControl(dialogRef,iSlider5,&gSlider5Ref);
gRedColour.red = 2 * GetControlValue(gSlider5Ref);
GetDialogItemAsControl(dialogRef,iSlider6,&gSlider6Ref);
gBlueColour.blue = 2 * GetControlValue(gSlider5Ref);
// .................................. set help tags, show dialog, and enter ModalDialog loop
if(gRunningOnX)
helpTagsSliders(dialogRef);
ShowWindow(GetDialogWindow(dialogRef));
do
{
ModalDialog(eventFilterUPP,&itemHit);
} while(itemHit != kStdOkItemIndex);
// ................................................................................ clean up
DisposeDialog(dialogRef);
DisposeModalFilterUPP(eventFilterUPP);
DisposeControlActionUPP(gSliderActionFunction1UPP);
DisposeControlActionUPP(gSliderActionFunction2UPP);
DisposeControlUserPaneDrawUPP(gUserPaneDrawFunctionUPP);
DisposeControlUserPaneActivateUPP(gUserPaneActivateFunctionUPP);
gSlidersActive = false;
}
// ************************************************************************ doDrawSliderValues
void doDrawSliderValues(DialogRef dialogRef,ControlRef controlRef)
{
Str255 theString;
SInt16 staticTextItem;
NumToString((SInt32) GetControlValue(controlRef),theString);
if(controlRef == gSlider1Ref)
staticTextItem = iSlider1StaticText;
else if(controlRef == gSlider2Ref)
staticTextItem = iSlider2StaticText;
else if(controlRef == gSlider3Ref)
staticTextItem = iSlider3StaticText;
else if(controlRef == gSlider4Ref)
staticTextItem = iSlider4StaticText;
GetDialogItemAsControl(dialogRef,staticTextItem,&controlRef);
SetControlData(controlRef,kControlEntireControl,kControlStaticTextTextTag,theString[0],
&theString[1]);
Draw1Control(controlRef);
}
// ********************************************************************** userPaneDrawFunction
void userPaneDrawFunction(ControlRef theControl,SInt16 thePart)
{
Rect theRect;
SetRect(&theRect,218,175,238,195);
DrawThemePlacard(&theRect,gDrawActivated);
InsetRect(&theRect,2,2);
if(gDrawActivated)
{
RGBForeColor(&gRedColour);
PaintRect(&theRect);
}
SetRect(&theRect,218,196,238,216);
DrawThemePlacard(&theRect,gDrawActivated);
InsetRect(&theRect,2,2);
if(gDrawActivated)
{
RGBForeColor(&gBlueColour);
PaintRect(&theRect);
}
}
// ****************************************************************** userPaneActivateFunction
void userPaneActivateFunction(ControlRef control,Boolean activating)
{
if(activating)
gDrawActivated = true;
else
gDrawActivated = false;
}
// *************************************************************************** helpTagsSliders
void helpTagsSliders(DialogRef dialogRef)
{
HMHelpContentRec helpContent;
SInt16 a;
static SInt16 itemNumber[7] = { 2,3,4,5,17,19,18 };
ControlRef controlRef;
memset(&helpContent,0,sizeof(helpContent));
HMSetTagDelay(500);
HMSetHelpTagsDisplayed(true);
helpContent.version = kMacHelpVersion;
helpContent.tagSide = kHMOutsideTopCenterAligned;
helpContent.content[kHMMinimumContentIndex].contentType = kHMStringResContent;
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmResID = 135;
for(a = 1;a <= 7; a++)
{
helpContent.content[kHMMinimumContentIndex].u.tagStringRes.hmmIndex = a;
GetDialogItemAsControl(dialogRef,itemNumber[a - 1],&controlRef);
HMSetControlHelpContent(controlRef,&helpContent);
}
}
// *******************************************************************************************
// TextBox.c
//********************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// ********************************************************************************* doTextBox
void doTextBox(void)
{
DialogRef dialogRef;
ModalFilterUPP eventFilterUPP;
SInt16 itemHit;
if(FrontNonFloatingWindow())
doActivateWindow(FrontNonFloatingWindow(),false);
if(!(dialogRef = GetNewDialog(rAboutDialog,NULL,(WindowRef) -1)))
ExitToShell();
// ...................................................................... set default button
SetDialogDefaultItem(dialogRef,kStdOkItemIndex);
// ..................................... create universal procedure pointer for event filter
eventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
// ................................................. show dialog and enter modal dialog loop
ShowWindow(GetDialogWindow(dialogRef));
do
{
ModalDialog(eventFilterUPP,&itemHit);
} while(itemHit != kStdOkItemIndex);
DisposeDialog(dialogRef);
DisposeModalFilterUPP(eventFilterUPP);
}
// *******************************************************************************************
// Callbacks.c
//********************************************************************************************
// .................................................................................. includes
#include "Controls3.h"
// .......................................................................... global variables
extern Boolean gGroupArrowsProgressActive;
extern Boolean gSlidersActive;
extern ControlActionUPP gArrowsActionFunctionUPP;
extern ControlActionUPP gSliderActionFunction1UPP;
extern ControlActionUPP gSliderActionFunction2UPP;
extern ControlRef gLittleArrowsControlRef;
extern ControlRef gCacheSizeControlRef;
extern ControlRef gSlider1Ref;
extern ControlRef gSlider2Ref;
extern ControlRef gSlider3Ref;
extern ControlRef gSlider4Ref;
extern ControlRef gSlider5Ref;
extern ControlRef gSlider6Ref;
extern RGBColor gRedColour;
extern RGBColor gBlueColour;
extern RGBColor gBlackColour;
// ******************************************************************************* eventFilter
Boolean eventFilter(DialogRef dialogRef,EventRecord *eventStrucPtr,SInt16 *itemHit)
{
Boolean handledEvent;
GrafPtr oldPort;
Point mouseXY;
ControlRef controlRef;
handledEvent = false;
if((eventStrucPtr->what == updateEvt) &&
((WindowRef) eventStrucPtr->message != GetDialogWindow(dialogRef)))
{
doUpdate(eventStrucPtr);
}
else if((eventStrucPtr->what == autoKey) && ((eventStrucPtr->modifiers & cmdKey) != 0))
{
handledEvent = true;
return handledEvent;
}
else
{
GetPort(&oldPort);
SetPortDialogPort(dialogRef);
if(gGroupArrowsProgressActive)
{
if(eventStrucPtr->what == mouseDown)
{
mouseXY = eventStrucPtr->where;
GlobalToLocal(&mouseXY);
if(FindControl(mouseXY,GetDialogWindow(dialogRef),&controlRef))
{
if(controlRef == gLittleArrowsControlRef)
{
TrackControl(controlRef,mouseXY,gArrowsActionFunctionUPP);
handledEvent = true;
}
}
}
}
else if(gSlidersActive)
{
if(eventStrucPtr->what == mouseDown)
{
mouseXY = eventStrucPtr->where;
GlobalToLocal(&mouseXY);
if(FindControl(mouseXY,GetDialogWindow(dialogRef),&controlRef))
{
if(controlRef == gSlider1Ref || controlRef == gSlider2Ref)
{
TrackControl(controlRef,mouseXY,NULL);
doDrawSliderValues(dialogRef,controlRef);
handledEvent = true;
}
else if(controlRef == gSlider3Ref || controlRef == gSlider4Ref)
{
TrackControl(controlRef,mouseXY,gSliderActionFunction1UPP);
handledEvent = true;
}
else if(controlRef == gSlider5Ref || controlRef == gSlider6Ref)
{
TrackControl(controlRef,mouseXY,gSliderActionFunction2UPP);
handledEvent = true;
}
}
}
}
else
{
handledEve |