Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
SimpleText.h
/* |
** File: SimpleText.h |
** |
** Contains: defines input for both .c and .r files. |
** structured so as to compile corrected in both. |
** |
** Version: SimpleText 1.4 or later |
** |
** Copyright 1993-1999 Apple Computer. All rights reserved. |
** |
** You may incorporate this sample code into your applications without |
** restriction, though the sample code has been provided "AS IS" and the |
** responsibility for its operation is 100% yours. However, what you are |
** not permitted to do is to redistribute the source as "DSC Sample Code" |
** after having made changes. If you're going to re-distribute the source, |
** we require that you make it clear in the source that the code was |
** descended from Apple Sample Code, but that you've made changes. |
*/ |
#ifndef __SIMPLETEXT__ |
#define __SIMPLETEXT__ |
#define kScrollBarSize 15 // size of a scroll bar, in pixels |
// Internal errors -- WARNING: some also appear in SimpleText.r |
#define eActionAlreadyHandled 100 // the action was handled by the object, don't report an error |
#define eUserCanceled 101 // user canceled an operation |
#define eDocumentTooLarge 200 // document too large to be opened |
#define eDocumentWrongKind 201 // document cannot be opened by this application |
#define eErrorWhileDrawing 202 // error while drawing the document |
#define eDocumentContainsPS 203 // document contains PostScript, it may not display properly |
#define eMachineToOld 204 |
#define eDocumentNotModifiable 205 // document can't be modified |
#define eDocumentAlreadyOpen 206 |
#define eDocumentContainsNoPages 207 |
#define eDocumentHasNoContentsEntries 208 |
// icon IDs -- WARNING: Also appear in SimpleText.r |
#define kTextIcon 129 |
#define kReadOnlyIcon 130 |
#define kPICTIcon 131 |
#define kStationeryIcon 132 |
// menu and item defines -- define 'MENU' 'MCMD' 'hmnu' and 'STR#' IDs for menus! |
#define rMenuBar 128 |
#define mApple 128 |
#define mFile 129 |
#define mEdit 130 |
#define mFont 131 |
#define mSize 132 |
#define mStyle 133 |
#define mSound 134 |
#define mVoices 135 |
#define mContents 136 |
#define mLastMenu mContents |
#define mNumberMenus 9 |
#define mFontSubMenusStart 200 |
// Command numbers |
#define cNull 0 |
#define cAbout 1 |
#define cDeskAccessory 2 |
#define cTypingCommand 3 |
#define cNew 10 |
#define cOpen 11 |
#define cClose 12 |
#define cSave 13 |
#define cSaveAs 14 |
#define cPageSetup 15 |
#define cPrint 16 |
#define cPrintOneCopy 17 |
#define cQuit 18 |
#define cUndo 20 |
#define cCut 21 |
#define cCopy 22 |
#define cPaste 23 |
#define cClear 24 |
#define cSelectAll 25 |
#define cFind 26 |
#define cFindAgain 27 |
#define cFindSelection 28 |
#define cReplace 29 |
#define cReplaceAgain 30 |
#define cNextPage 31 |
#define cPreviousPage 32 |
#define cGotoPage 33 |
#define cGotoLast 32767 |
#define cGotoFirst -32767 |
#define cShowClipboard 34 |
#define cSelectFont 35 |
#define cSelectFontStyle 36 |
#define cSize9 40 |
#define cSize10 41 |
#define cSize12 42 |
#define cSize14 43 |
#define cSize18 44 |
#define cSize24 45 |
#define cSize36 46 |
#define cPlain 50 |
#define cBold 51 |
#define cItalic 52 |
#define cUnderline 53 |
#define cOutline 54 |
#define cShadow 55 |
#define cCondensed 56 |
#define cExtended 57 |
#define cRecord 60 |
#define cPlay 61 |
#define cErase 62 |
#define cSpeak 63 |
#define cStopSpeaking 64 |
#define cSelectVoice 65 |
#define cSelectVoiceSubMenu 66 |
#define cSelectContents 75 |
// windows, dialogs, alerts, and other items of that sort |
#define kDefaultWindowID 128 |
#define kSaveChangesWindowID 129 |
#define kFindWindowID 130 |
#define kReplaceWindowID 131 |
#define iFindEdit 4 |
#define iCaseSensitive 5 |
#define iWrapAround 6 |
#define iReplaceEdit 8 |
#define iReplaceAll 9 |
// Error STR# base |
#define kErrorBaseID 1000 |
// Help for window STR# |
#define kWindowHelpID 2000 |
#define iDidTheBalloon -1 |
#define iNoBalloon 0 |
#define iHelpActiveScroll 1 |
#define iHelpDimHorizScroll 2 |
#define iHelpDimVertScroll 3 |
#define iHelpGrowBox 4 |
#define iHelpGenericContent 5 |
#define iHelpPictContent 6 |
#define iHelpPictSelection 7 |
#define iHelpTextContent 8 |
// Miscellaneous strings (STR#) |
#define kMiscStrings 3000 |
#define iFirstNewDocumentTitle 1 |
#define iHelpMenuCommand 2 |
#define iSelectAllCommand 3 |
#define iSelectNoneCommand 4 |
// Patterns used for selections |
#define kPatternListID 128 |
// for disabling menu items |
#define AllItems 0b1111111111111111111111111111111 /* 31 flags */ |
#define NoItems 0b0000000000000000000000000000000 |
#define MenuItem1 0b0000000000000000000000000000001 |
#define MenuItem2 0b0000000000000000000000000000010 |
#define MenuItem3 0b0000000000000000000000000000100 |
#define MenuItem4 0b0000000000000000000000000001000 |
#define MenuItem5 0b0000000000000000000000000010000 |
#define MenuItem6 0b0000000000000000000000000100000 |
#define MenuItem7 0b0000000000000000000000001000000 |
#define MenuItem8 0b0000000000000000000000010000000 |
#define MenuItem9 0b0000000000000000000000100000000 |
#define MenuItem10 0b0000000000000000000001000000000 |
#define MenuItem11 0b0000000000000000000010000000000 |
#define MenuItem12 0b0000000000000000000100000000000 |
#define MenuItem13 0b0000000000000000001000000000000 |
#define MenuItem14 0b0000000000000000010000000000000 |
#define MenuItem15 0b0000000000000000100000000000000 |
#define MenuItem16 0b0000000000000001000000000000000 |
#define MenuItem17 0b0000000000000010000000000000000 |
#define MenuItem18 0b0000000000000100000000000000000 |
#define MenuItem19 0b0000000000001000000000000000000 |
// Size resource information |
#define kPreferredSize 512*1024 |
#define kMinimumSize 192*1024 |
#ifndef REZ |
enum { |
// Keyboard virtual keycode constants |
kHome = 0x73, |
kEnd = 0x77, |
kPageUp = 0x74, |
kPageDown = 0x79, |
kUpArrow = 0x7E, |
kDownArrow = 0x7D, |
kLeftArrow = 0x7B, |
kRightArrow = 0x7C, |
kF1 = 0x7A, |
kF2 = 0x78, |
kF3 = 0x63, |
kF4 = 0x76, |
kFromTopTipOffset = 20, // offset from top/left of balloons |
kFromBottomTipOffset = 7, // offset from bottom/right of balloons |
kRAMNeededForNew = 64*1024, // amount of RAM free before we allow New documents |
kGrowScrollAdjust = 13, // amount to cull scroll bar to make room for growbox |
kMinDocSize = 128 // min window size in pixels |
}; |
enum |
{ |
kMaxWaitTime = 5*60*60 // maximum time to pass to WaitNextEvent() |
}; |
struct MachineInfoRec |
{ |
SysEnvRec theEnvirons; // SysEnvirons for this machine |
Boolean amInBackground; // are we running in the background or foreground |
long documentCount; // # of new docs we have made |
short lastBalloonIndex; // identifier of last balloon we displayed |
Boolean haveQuickTime; // do we have QuickTime installed? |
Boolean haveRecording; // do we have sound input? |
Boolean haveTTS; // do we have text to speech? |
Boolean haveTSM; // do we have text services? |
Boolean haveTSMTE; // have inline support for TE? |
Boolean haveDragMgr; // do we have the Drag Manager? |
Boolean haveThreeD; // do we have 3D on this machine? |
Boolean haveThreads; // do we have threads? |
}; |
typedef struct MachineInfoRec MachineInfoRec, *MachineInfoPtr; |
#ifndef CompilingMain |
extern MachineInfoRec gMachineInfo; |
extern EventRecord gEvent; |
extern Str255 gFindString, gReplaceString; |
extern Boolean gWrapAround, gCaseSensitive; |
#endif |
struct PreflightRecord |
{ |
Boolean continueWithOpen; // continue with the opening of the window |
Boolean needResFork; // create resfork if none exists |
SignedByte openKind; // kind of opening of this file |
short resourceID; // resource ID of the 'WIND' resource |
Boolean wantHScroll; // want a horizontal scroll bar |
Boolean wantVScroll; // want a vertical scroll bar |
Boolean doZoom; // want window opened large |
long storageSize; // data for the window's refCon |
void * makeProcPtr; // pointer to the make proc |
OSType fileType; // file type of document |
}; |
typedef struct PreflightRecord PreflightRecord, *PreflightPtr; |
struct LongRect |
{ |
long top; |
long left; |
long bottom; |
long right; |
}; |
typedef struct LongRect LongRect; |
typedef OSErr (*PreflightWindowProc) (PreflightPtr pPreflightData); |
typedef OSErr (*MakeWindowProc) (WindowRef pWindow, void* refCon); |
typedef OSErr (*UpdateWindowProc) (WindowRef pWindow, void* refCon); |
typedef OSErr (*AdjustMenusProc) (WindowRef pWindow, void* refCon); |
typedef OSErr (*CloseWindowProc) (WindowRef pWindow, void* refCon); |
typedef OSErr (*GetDocumentRectProc) (WindowRef pWindow, void* refCon, LongRect * documentRectangle, Boolean forGrow); |
typedef OSErr (*ContentClickProc) (WindowRef pWindow, void* refCon, EventRecord * event); |
typedef OSErr (*ScrollContentProc) (WindowRef pWindow, void* refCon, short deltaH, short deltaV); |
typedef Boolean (*FilterEventProc) (WindowRef pWindow, void* refCon, EventRecord * event); |
typedef OSErr (*ActivateEventProc) (WindowRef pWindow, void* refCon, Boolean activating); |
typedef OSErr (*KeyEventProc) (WindowRef pWindow, void* refCon, EventRecord * event, Boolean isMotionKey); |
typedef OSErr (*AdjustSizeProc) (WindowRef pWindow, void* refCon, Boolean *didResize); |
typedef OSErr (*CommandProc) (WindowRef pWindow, void* refCon, short commandID, long menuResult); |
typedef OSErr (*AdjustCursorProc) (WindowRef pWindow, void* refCon, Point * localMouse, Rect *globalRect); |
typedef OSErr (*PrintPageProc) (WindowRef pWindow, void* refCon, Rect* pageRect, long* pageNum); |
typedef OSErr (*GetBalloonProc) (WindowRef pWindow, void* refCon, Point *localMouse, short * returnedBalloonIndex, Rect *returnedRectangle); |
typedef OSErr (*DragTrackingProc) (WindowRef pWindow, void *refCon, DragReference theDragRef, short message); |
typedef OSErr (*DragReceiveProc) (WindowRef pWindow, void *refCon, DragReference theDragRef); |
typedef OSErr (*DragAddFlavorsProc) (WindowRef pWindow, void *refCon, DragReference theDragRef); |
typedef long (*CalculateIdleTimeProc) (WindowRef pWindow, void* refCon); |
typedef OSErr (*GetCoachRectangleProc) (WindowRef pWindow, void* refCon, Rect *pRect, Ptr name); |
struct WindowDataRecord |
{ |
WindowRecord theWindow; // toolbox storage |
ResType windowKind; // and kind to identify window type |
OSType originalFileType; // original source of file |
FSSpec fileSpec; // file spec of the file |
short dataRefNum; // data fork refNum |
short resRefNum; // res fork refNum |
Boolean isWritable; // can you write to this file? |
Boolean bumpUntitledCount; // does this kind of document use up an "untitled" number? |
Boolean openAsNew; // open as an untitled document? |
Boolean changed; // has content changed? |
Boolean documentOutputsGX; // document provides GX printing |
Boolean documentAcceptsText; // document allows typing |
Boolean dragWindowAligned; // drag using DragAlignedWindow |
// Standard procedure entry points, may be NIL to get default behavior |
PreflightWindowProc pPreflightWindow; |
MakeWindowProc pMakeWindow; |
CloseWindowProc pCloseWindow; |
GetDocumentRectProc pGetDocumentRect; |
ScrollContentProc pScrollContent; |
AdjustSizeProc pAdjustSize; |
AdjustCursorProc pAdjustCursor; |
GetBalloonProc pGetBalloon; |
DragTrackingProc pDragTracking; |
DragReceiveProc pDragReceive; |
DragAddFlavorsProc pDragAddFlavors; |
FilterEventProc pFilterEvent; |
ActivateEventProc pActivateEvent; |
UpdateWindowProc pUpdateWindow; |
AdjustMenusProc pAdjustMenus; |
KeyEventProc pKeyEvent; |
ContentClickProc pContentClick; |
CommandProc pCommand; |
PrintPageProc pPrintPage; |
CalculateIdleTimeProc pCalculateIdleTime; |
GetCoachRectangleProc pGetCoachRectangle; |
// controls that the default implementations use |
void* hPrint; // print record, gxJob, or NIL for none |
Boolean hasGrow; // has a grow box? |
Rect contentRect; // content area, minus the scroll bars |
short minHSize; // minimum window X size, 0 default |
short minVSize; // minimum window Y size, 0 default |
ControlRef hScroll; // horizontal scroll bar |
ControlRef vScroll; // vertical scroll bar |
short hScrollAmount; // amount to scroll in left/right arrow |
short vScrollAmount; // amount to scroll in up/down arrow |
short hScrollOffset; // offset of scrollbar from left side of window |
short vScrollOffset; // offset of scrollbar from top of window |
// variables having to do with input support |
TSMTERecHandle docTSMRecHandle; // TSM info stored here |
TSMDocumentID docTSMDoc; // TSM document id |
// Custom data follows here |
}; |
typedef struct WindowDataRecord WindowDataRecord, *WindowDataPtr; |
// Window adjustment routines |
OSErr AdjustScrollBars(WindowRef pWindow, Boolean moveControls, Boolean didGrow, Boolean *needInvalidate); |
void SetControlAndClipAmount(ControlRef control, short * amount); |
OSErr DoScrollContent(WindowRef pWindow, WindowDataPtr pData, short deltaH, short deltaV); |
// document rectangle utilities |
void LongRectToRect(LongRect* longRect, Rect *rect); |
void RectToLongRect(Rect *rect, LongRect *longRect); |
void MovableModalDialog(ModalFilterProcPtr filterProc, short * pItem); |
void BeginMovableModal(void); |
void EndMovableModal(void); |
void GetPICTRectangleAt72dpi(PicHandle hPicture, Rect *pictureRect); |
// menu command utilities |
void EnableCommand(short commandID); |
void EnableCommandCheck(short commandID, Boolean check); |
void EnableCommandCheckStyle(short commandID, Boolean check, short style); |
void ChangeCommandName(short commandID, short resourceID, short resourceIndex); |
Boolean IsCommandEnabled(short commandID); |
// printing utility routines |
OSErr DoDefault(WindowDataPtr pData); |
OSErr DoPageSetup(WindowRef pWindow); |
// event handling routines |
void HandleEvent(EventRecord *); |
void DragAndDropArea(WindowRef pWindow, WindowDataPtr pData, EventRecord* event, Rect *pFrameRect); |
short ConductFindOrReplaceDialog(short dialogID); |
Boolean PerformSearch( |
Handle h, // handle to search |
long start, // offset to begin with |
Str255 searchString, // string to search for |
Boolean isCaseSensitive, // case sensitive search |
Boolean isBackwards, // search backwards from starting point |
Boolean isWraparound, // wrap search around from end->begining |
long * pNewStart, // returned new selection start |
long * pNewEnd); // returned new selection end |
// Drag utils |
Boolean IsOnlyThisFlavor(DragReference theDragRef, FlavorType theType); |
Boolean IsDropInFinderTrash(AEDesc *dropLocation); |
Boolean DragText(WindowRef pWindow, void *pData, EventRecord *pEvent, RgnHandle hilightRgn); |
OSErr TextDragTracking(WindowRef pWindow, void *pData, DragReference theDragRef, short message); |
OSErr TextDragReceive(WindowRef pWindow, void *pData, DragReference theDragRef); |
// TEClick utilities |
pascal void TextClickLoop(void); |
pascal TEClickLoopUPP GetOldClickLoop(void); |
void AdjustTE(WindowDataPtr pData, Boolean doScroll); |
// error utilities |
void ConductErrorDialog(OSErr error, short commandID, short alertType); |
// generic utilities |
void SetWatchCursor(void); |
OSErr SaveCurrentUndoState(WindowDataPtr pData, short newCommandID); |
#if GENERATINGPOWERPC |
pascal void MyDrawHook ( unsigned short offset, unsigned short textLen, |
Ptr textPtr, TEPtr tePtr, TEHandle teHdl ); |
#else |
pascal void MyDrawHook ( TEHandle teHdl, TEPtr tePtr, Ptr textPtr, short textLen, short offset ); |
#endif |
// Preflight routines for the windows we support |
OSErr AboutPreflightWindow(PreflightPtr pPreflightData); |
OSErr PICTPreflightWindow(PreflightPtr pPreflightData); |
OSErr MoviePreflightWindow(PreflightPtr pPreflightData); |
OSErr ClipboardPreflightWindow(PreflightPtr pPreflightData); |
OSErr TextPreflightWindow(PreflightPtr pPreflightData); |
OSErr GXPreflightWindow(PreflightPtr pPreflightData); |
OSErr ThreeDPreflightWindow(PreflightPtr pPreflightData); |
// File type routines for the document kinds we support |
void AboutGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
void PICTGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
void MovieGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
void ClipboardGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
void TextGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
void GXGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
void ThreeDGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes); |
// selection rectangle utilities |
#define MOVESELECTION(X) (((X) & 0x7) == 0x4) |
void DrawSelection(WindowDataPtr pData, Rect *pSelection, short * pPhase, Boolean bumpPhase); |
OSErr SelectContents(WindowRef pWindow, WindowDataPtr pData, EventRecord *pEvent, Rect *pSelection, Rect *pContent, short *pPhase); |
// Exported globals |
struct FontMappingRecord |
{ |
// gxFont fontID; |
short qdFont; |
Style qdStyle; |
}; |
typedef struct FontMappingRecord FontMappingRecord, *FontMappingPtr, **FontMappingHandle; |
extern FontMappingHandle gFontMappingList; |
#endif |
// defined window kinds and resource ranges for windows we support |
#define kAboutWindow 'ABOT' |
#define kAboutBaseID 200 |
#define kPICTWindow 'PICT' |
#define kPICTBaseID 300 |
#define kMovieWindow 'MooV' |
#define kMovieBaseID 400 |
#define kClipboardWindow 'Clip' |
#define kClipboardBaseID 500 |
#define kTextWindow 'TEXT' |
#define kTextBaseID 600 |
#define kGXWindow 'qdgx' |
#define kGXBaseID 700 |
#define kThreeDWindow '3DMF' |
#define kThreeDBaseID 800 |
#endif |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-03-26