home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.mactech.com 2010
/
ftp.mactech.com.tar
/
ftp.mactech.com
/
macintosh-c
/
macc-carbon-demos-nonbinhex.sit
/
macc-carbon-demos-nonbinhex
/
chap15-demo
/
CarbonPrinting.c
< prev
next >
Wrap
C/C++ Source or Header
|
2001-06-25
|
25KB
|
878 lines
// *******************************************************************************************
// CarbonPrinting.c
// *******************************************************************************************
// ………………………………………………………………………………………………………………………………………………………………………………………………………………………… includes
#include "CarbonPrinting.h"
// …………………………………………………………………………………………………………………………………………………………………………………………………… global variables
Boolean gRunningOnX = false;
WindowRef gDocumentWindowRef, gPrintInfoWindowRef;
SInt16 gFontNumber;
SInt16 gFontSize;
Boolean gDone;
PMItemUPP gNewItemEvaluateFunctionUPP;
ModalFilterUPP gEventFilterUPP;
PMPrintSettings gPrintSettings = kPMNoPrintSettings;
PMDialog gPMDialog;
UInt32 gFirstPage, gLastPage, gCopies;
Boolean gDrawPrintSettingsStuff;
// ************************************************************************************** main
void main(void)
{
MenuBarHandle menubarHdl;
SInt32 response;
MenuRef menuRef;
docStructureHdl docStrucHdl;
SInt16 fontNum;
RGBColor whiteColour = { 0xFFFF, 0xFFFF, 0xFFFF };
RGBColor blueColour = { 0x4444, 0x4444, 0x9999 };
Rect portRect;
EventRecord eventStructure;
Boolean gotEvent;
// ………………………………………………………………………………………………………………………………………………………………………………………………… 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);
}
gRunningOnX = true;
}
// …………………………………………………………………………………………………… open document window and attach document structure
if(!(gDocumentWindowRef = GetNewCWindow(rDocWindow,NULL,(WindowRef)-1)))
ExitToShell();
SetPortWindowPort(gDocumentWindowRef);
GetFNum("\pGeneva",&fontNum);
TextFont(fontNum);
TextSize(10);
gFontNumber = fontNum;
gFontSize = 10;
if(!(docStrucHdl = (docStructureHdl) NewHandle(sizeof(docStructure))))
ExitToShell();
SetWRefCon(gDocumentWindowRef,(SInt32) docStrucHdl);
(*docStrucHdl)->printSession = NULL;
(*docStrucHdl)->pageFormat = kPMNoPageFormat;
(*docStrucHdl)->printSettings = kPMNoPrintSettings;
// …………………………………………………………………………………………………………………………………………………… open printing information window
if(!(gPrintInfoWindowRef = GetNewCWindow(rInfoWindow,NULL,(WindowRef)-1)))
ExitToShell();
SetPortWindowPort(gPrintInfoWindowRef);
TextFont(fontNum);
TextSize(10);
RGBForeColor(&whiteColour);
RGBBackColor(&blueColour);
GetWindowPortBounds(gPrintInfoWindowRef,&portRect);
EraseRect(&portRect);
// …………………………………………………………………………………………………………………………………………… load and display simulated document
doGetDocument();
// ……………………………………………………………………………………………………………………………………………………………………………………………………………… event loop
gDone = false;
while(!gDone)
{
gotEvent = WaitNextEvent(everyEvent,&eventStructure,MAX_UINT32,NULL);
if(gotEvent)
doEvents(&eventStructure);
}
}
// *************************************************************************** doPreliminaries
void doPreliminaries(void)
{
OSErr osError;
MoreMasterPointers(128);
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;
}
// ***************************************************************************** doGetDocument
void doGetDocument(void)
{
docStructureHdl docStrucHdl;
Rect portRect, destRect, viewRect;
Handle textHdl;
SetPortWindowPort(gDocumentWindowRef);
docStrucHdl = (docStructureHdl) GetWRefCon(gDocumentWindowRef);
GetWindowPortBounds(gDocumentWindowRef,&portRect);
destRect = portRect;
InsetRect(&destRect,4,4);
destRect.bottom +=4;
viewRect = destRect;
(*docStrucHdl)->editTextStrucHdl = TENew(&destRect,&viewRect);
textHdl = GetResource('TEXT',rText);
if(textHdl == NULL)
ExitToShell();
HLock(textHdl);
TEInsert(*textHdl,GetHandleSize(textHdl),(*docStrucHdl)->editTextStrucHdl);
HUnlock(textHdl);
ReleaseResource(textHdl);
(*docStrucHdl)->pictureHdl = GetPicture(rPicture);
if((*docStrucHdl)->pictureHdl == NULL)
ExitToShell();
InvalWindowRect(gDocumentWindowRef,&portRect);
}
// ********************************************************************************** doEvents
void doEvents(EventRecord *eventStrucPtr)
{
WindowRef windowRef;
WindowPartCode partCode;
windowRef = (WindowRef) eventStrucPtr->message;
switch(eventStrucPtr->what)
{
case kHighLevelEvent:
AEProcessAppleEvent(eventStrucPtr);
break;
case mouseDown:
partCode = FindWindow(eventStrucPtr->where,&windowRef);
switch(partCode)
{
case inMenuBar:
doMenuChoice(MenuSelect(eventStrucPtr->where));
break;
case inContent:
if(windowRef != FrontWindow())
SelectWindow(windowRef);
break;
case inDrag:
DragWindow(windowRef,eventStrucPtr->where,NULL);
break;
}
break;
case keyDown:
if((eventStrucPtr->modifiers & cmdKey) != 0)
doMenuChoice(MenuEvent(eventStrucPtr));
break;
case updateEvt:
doUpdate(eventStrucPtr);
break;
}
}
// ********************************************************************************** doUpdate
void doUpdate(EventRecord *eventStrucPtr)
{
WindowRef windowRef;
GrafPtr oldPort;
Rect portRect;
windowRef = (WindowRef) eventStrucPtr->message;
GetPort(&oldPort);
BeginUpdate(windowRef);
if(windowRef == gDocumentWindowRef)
doUpdateDocumentWindow(windowRef);
else if(windowRef == gPrintInfoWindowRef)
{
SetPortWindowPort(gPrintInfoWindowRef);
GetWindowPortBounds(gPrintInfoWindowRef,&portRect);
EraseRect(&portRect);
doDrawPrintInfo();
}
EndUpdate(windowRef);
SetPort(oldPort);
}
// ******************************************************************** doUpdateDocumentWindow
void doUpdateDocumentWindow(WindowRef windowRef)
{
Rect portRect, pictureRect, savedDestRect;
docStructureHdl docStrucHdl;
SInt16 savedFontNum, savedFontSize, savedLineHeight, fontNum;
SetPortWindowPort(windowRef);
GetWindowPortBounds(gDocumentWindowRef,&portRect);
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
savedDestRect = (*(*docStrucHdl)->editTextStrucHdl)->destRect;
savedFontNum = (*(*docStrucHdl)->editTextStrucHdl)->txFont;
savedFontSize = (*(*docStrucHdl)->editTextStrucHdl)->txSize;
savedLineHeight = (*(*docStrucHdl)->editTextStrucHdl)->lineHeight;
(*(*docStrucHdl)->editTextStrucHdl)->destRect = portRect;
InsetRect(&(*(*docStrucHdl)->editTextStrucHdl)->destRect,4,4);
(*(*docStrucHdl)->editTextStrucHdl)->destRect.bottom += 4;
GetFNum("\pGeneva",&fontNum);
(*(*docStrucHdl)->editTextStrucHdl)->txFont = fontNum;
(*(*docStrucHdl)->editTextStrucHdl)->txSize = 10;
(*(*docStrucHdl)->editTextStrucHdl)->lineHeight = 13;
TECalText((*docStrucHdl)->editTextStrucHdl);
TEUpdate(&portRect,(*docStrucHdl)->editTextStrucHdl);
(*(*docStrucHdl)->editTextStrucHdl)->destRect = savedDestRect;
(*(*docStrucHdl)->editTextStrucHdl)->txFont = savedFontNum;
(*(*docStrucHdl)->editTextStrucHdl)->txFont = savedFontSize;
(*(*docStrucHdl)->editTextStrucHdl)->lineHeight = savedLineHeight;
SetRect(&pictureRect,2,2,180,134);
DrawPicture((*docStrucHdl)->pictureHdl,&pictureRect);
}
// ****************************************************************************** doMenuChoice
void doMenuChoice(SInt32 menuChoice)
{
MenuID menuID;
MenuItemIndex menuItem;
OSStatus osStatus;
Rect portRect;
menuID = HiWord(menuChoice);
menuItem = LoWord(menuChoice);
if(menuID == 0)
return;
switch(menuID)
{
case mAppleApplication:
if(menuItem == iAbout)
SysBeep(10);
break;
case mFile:
if(menuItem == iPageSetup)
{
osStatus = doPageSetUpDialog(gDocumentWindowRef);
if(osStatus != kPMNoError)
doErrorAlert(osStatus);
}
if(menuItem == iPrint)
{
osStatus = doPrintSettingsDialog(gDocumentWindowRef);
if(osStatus == kPMNoError)
{
osStatus = doPrinting(gDocumentWindowRef);
if(osStatus != kPMNoError)
doErrorAlert(osStatus);
}
else if(osStatus != kPMCancel)
doErrorAlert(osStatus);
}
GetWindowPortBounds(gPrintInfoWindowRef,&portRect);
InvalWindowRect(gPrintInfoWindowRef,&portRect);
if(menuItem == iQuit)
gDone = true;
break;
}
HiliteMenu(0);
}
// ************************************************************** doCreateOrValidatePageFormat
OSStatus doCreateOrValidatePageFormat(WindowRef windowRef)
{
docStructureHdl docStrucHdl;
OSStatus osStatus = kPMNoError;
PMPrintSession printSession = NULL;
PMPageFormat pageFormat = kPMNoPageFormat;
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
HLock((Handle) docStrucHdl);
// …………………………………………………………………………………………………………………………………………………………………………… create printing session
osStatus = PMCreateSession(&printSession);
// ………………………… if necessary, create and store page format object, otherwise validate existing
if(osStatus == noErr)
{
if((*docStrucHdl)->pageFormat == kPMNoPageFormat)
{
osStatus = PMCreatePageFormat(&pageFormat);
if((osStatus == kPMNoError) && (pageFormat != kPMNoPageFormat))
{
osStatus = PMSessionDefaultPageFormat(printSession,pageFormat);
if(osStatus == kPMNoError)
(*docStrucHdl)->pageFormat = pageFormat;
}
else
{
if(osStatus == kPMNoError)
osStatus = kPMGeneralError;
}
}
else
{
osStatus = PMSessionValidatePageFormat(printSession,(*docStrucHdl)->pageFormat,
kPMDontWantBoolean);
}
}
// …………………………………………………………………………………………………………………… store printing session, or clean up if error
if(osStatus == kPMNoError)
(*docStrucHdl)->printSession = printSession;
else
{
if(pageFormat != kPMNoPageFormat)
PMRelease(pageFormat);
if(printSession != NULL)
PMRelease(printSession);
}
HUnlock((Handle) docStrucHdl);
return osStatus;
}
// ************************************************************************* doPageSetUpDialog
OSStatus doPageSetUpDialog(WindowRef windowRef)
{
OSStatus osStatus = kPMNoError;
docStructureHdl docStrucHdl;
Boolean userClickedOKButton;
osStatus = doCreateOrValidatePageFormat(windowRef);
if(osStatus != kPMNoError)
return osStatus;
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
HLock((Handle) docStrucHdl);
osStatus = PMSessionPageSetupDialog((*docStrucHdl)->printSession,(*docStrucHdl)->pageFormat,
&userClickedOKButton);
if((*docStrucHdl)->printSession != NULL)
{
PMRelease((*docStrucHdl)->printSession);
(*docStrucHdl)->printSession = NULL;
}
HUnlock((Handle) docStrucHdl);
gDrawPrintSettingsStuff = false;
return osStatus;
}
// ********************************************************************* doPrintSettingsDialog
OSStatus doPrintSettingsDialog(WindowRef windowRef)
{
OSStatus osStatus = kPMNoError;
docStructureHdl docStrucHdl;
PMPrintSettings printSettings = kPMNoPrintSettings;
CFStringRef stringRef;
PMPrintDialogInitUPP initialisationFunctionUPP;
Boolean userClickedPrintButton;
osStatus = doCreateOrValidatePageFormat(windowRef);
if(osStatus != kPMNoError)
return osStatus;
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
HLock((Handle) docStrucHdl);
osStatus = PMCreatePrintSettings(&printSettings);
if((osStatus == kPMNoError) && (printSettings != kPMNoPrintSettings))
{
osStatus = CopyWindowTitleAsCFString(windowRef,&stringRef);
if(osStatus == noErr)
{
osStatus = PMSetJobNameCFString(printSettings,stringRef);
CFRelease(stringRef);
}
if(osStatus == noErr)
osStatus = PMSessionDefaultPrintSettings((*docStrucHdl)->printSession,printSettings);
if(osStatus == kPMNoError)
{
(*docStrucHdl)->printSettings = printSettings;
printSettings = kPMNoPrintSettings;
}
}
if(osStatus == kPMNoError)
{
if(gRunningOnX)
{
PMSetPageRange((*docStrucHdl)->printSettings,1,kPMPrintAllPages);
PMSetFirstPage((*docStrucHdl)->printSettings,1,false);
PMSetLastPage((*docStrucHdl)->printSettings,9999,false);
}
}
if(osStatus == kPMNoError)
{
initialisationFunctionUPP = NewPMPrintDialogInitUPP((PMPrintDialogInitProcPtr)
initialisationFunction);
gNewItemEvaluateFunctionUPP = NewPMItemUPP((PMItemProcPtr) itemEvaluationFunction);
gEventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
osStatus = PMSessionPrintDialogInit((*docStrucHdl)->printSession,
(*docStrucHdl)->printSettings,
(*docStrucHdl)->pageFormat,&gPMDialog);
if(osStatus == kPMNoError)
osStatus = PMSessionPrintDialogMain((*docStrucHdl)->printSession,
(*docStrucHdl)->printSettings,
(*docStrucHdl)->pageFormat,
&userClickedPrintButton,initialisationFunctionUPP);
if(osStatus == kPMNoError && !userClickedPrintButton)
osStatus = kPMCancel;
DisposePMPrintDialogInitUPP(initialisationFunctionUPP);
DisposePMItemUPP(gNewItemEvaluateFunctionUPP);
DisposeModalFilterUPP(gEventFilterUPP);
}
if(osStatus != kPMNoError || osStatus == kPMCancel)
{
if((*docStrucHdl)->printSettings != kPMNoPrintSettings)
{
PMRelease((*docStrucHdl)->printSettings);
(*docStrucHdl)->printSettings = kPMNoPrintSettings;
}
if((*docStrucHdl)->printSession != NULL)
{
PMRelease((*docStrucHdl)->printSession);
(*docStrucHdl)->printSession = NULL;
}
}
HUnlock((Handle) docStrucHdl);
gDrawPrintSettingsStuff = userClickedPrintButton;
return osStatus;
}
// ******************************************************************************** doPrinting
OSStatus doPrinting(WindowRef windowRef)
{
docStructureHdl docStrucHdl;
OSStatus osStatus = kPMNoError;
UInt32 firstPage, lastPage, numberOfPages;
PMRect adjustedPageRect;
Rect pageRect;
SInt16 page;
GrafPtr oldPort, currentPort, printingPort;
GetPort(&oldPort);
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
HLock((Handle) docStrucHdl);
// ………………………………………………………………… get first and last page to print as set by user in Print dialog
osStatus = PMGetFirstPage((*docStrucHdl)->printSettings,&firstPage);
if(osStatus == kPMNoError)
osStatus = PMGetLastPage((*docStrucHdl)->printSettings,&lastPage);
// for demo purposes, store first, last page and copies for Some Printing Information window
gFirstPage = firstPage;
gLastPage = lastPage;
PMGetCopies((*docStrucHdl)->printSettings,&gCopies);
// …………………………………… get actual number of pages in document and, if necessary, adjust last page
if(osStatus == kPMNoError)
osStatus = PMGetAdjustedPageRect((*docStrucHdl)->pageFormat,&adjustedPageRect);
if(osStatus == kPMNoError)
{
pageRect.top = adjustedPageRect.top;
pageRect.left = adjustedPageRect.left;
pageRect.bottom = adjustedPageRect.bottom;
pageRect.right = adjustedPageRect.right;
numberOfPages = doCalcNumberOfPages(windowRef,pageRect);
if(numberOfPages < lastPage)
lastPage = numberOfPages;
}
// ………………………………………………………………………………… for Mac OS X, set first and last page for progress dialog
if(gRunningOnX)
{
if(osStatus == kPMNoError)
osStatus = PMSetFirstPage((*docStrucHdl)->printSettings,firstPage,false);
if(osStatus == kPMNoError)
osStatus = PMSetLastPage((*docStrucHdl)->printSettings,lastPage,false);
}
// ……………………………………………………………………………………………………………………………………………………………………………………………………… printing loop
if(osStatus == kPMNoError)
{
osStatus = PMSessionBeginDocument((*docStrucHdl)->printSession,
(*docStrucHdl)->printSettings,
(*docStrucHdl)->pageFormat);
if(osStatus == kPMNoError)
{
page = 1;
while((page <= lastPage) && (osStatus == kPMNoError) &&
(PMSessionError((*docStrucHdl)->printSession) == kPMNoError))
{
osStatus = PMSessionBeginPage((*docStrucHdl)->printSession,
(*docStrucHdl)->pageFormat,NULL);
if(osStatus != kPMNoError)
break;
GetPort(¤tPort);
osStatus = PMSessionGetGraphicsContext((*docStrucHdl)->printSession,
kPMGraphicsContextQuickdraw,
(void **) &printingPort);
if(osStatus == kPMNoError)
{
SetPort(printingPort);
doDrawPage(windowRef,pageRect,page,numberOfPages);
SetPort(currentPort);
}
osStatus = PMSessionEndPage((*docStrucHdl)->printSession);
if(osStatus != kPMNoError)
break;
page++;
}
}
PMSessionEndDocument((*docStrucHdl)->printSession);
}
// …………………………………………………………………………………………………………………………………………………………………………………………………………………… clean up
if((*docStrucHdl)->printSettings != kPMNoPrintSettings)
{
PMRelease((*docStrucHdl)->printSettings);
(*docStrucHdl)->printSettings = kPMNoPrintSettings;
}
if((*docStrucHdl)->printSession != NULL)
{
PMRelease((*docStrucHdl)->printSession);
(*docStrucHdl)->printSession = NULL;
}
HUnlock((Handle) docStrucHdl);
SetPort(oldPort);
return osStatus;
}
// *********************************************************************** doCalcNumberOfPages
SInt16 doCalcNumberOfPages(WindowRef windowRef,Rect pageRect)
{
docStructureHdl docStrucHdl;
FontInfo fontInfo;
Rect destRect;
SInt16 heightDestRect, linesPerPage, numberOfPages;
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
TextFont(gFontNumber);
TextSize(gFontSize);
GetFontInfo(&fontInfo);
(*(*docStrucHdl)->editTextStrucHdl)->txFont = gFontNumber;
(*(*docStrucHdl)->editTextStrucHdl)->txSize = gFontSize;
(*(*docStrucHdl)->editTextStrucHdl)->lineHeight = fontInfo.ascent + fontInfo.descent
+ fontInfo.leading;
SetRect(&destRect,pageRect.left + kMargin,pageRect.top + (kMargin * 1.5),
pageRect.right - kMargin,pageRect.bottom - (kMargin * 1.5));
(*(*docStrucHdl)->editTextStrucHdl)->destRect = destRect;
TECalText((*docStrucHdl)->editTextStrucHdl);
heightDestRect = destRect.bottom - destRect.top;
linesPerPage = heightDestRect / (*(*docStrucHdl)->editTextStrucHdl)->lineHeight;
numberOfPages = ((*(*docStrucHdl)->editTextStrucHdl)->nLines / linesPerPage) + 1;
return(numberOfPages);
}
// ******************************************************************************** doDrawPage
void doDrawPage(WindowRef windowRef,Rect pageRect,SInt16 pageNumber,SInt16 numberOfpages)
{
docStructureHdl docStrucHdl;
TEHandle docEditTextStrucHdl, pageEditTextStrucHdl;
PicHandle pictureHdl;
Rect destRect, pictureRect;
SInt16 heightDestRect, linesPerPage, numberOfLines;
Handle textHdl;
SInt32 startOffset, endOffset;
Str255 theString;
TextFont(gFontNumber);
TextSize(gFontSize);
docStrucHdl = (docStructureHdl) GetWRefCon(windowRef);
docEditTextStrucHdl = (*docStrucHdl)->editTextStrucHdl;
pictureHdl = (*docStrucHdl)->pictureHdl;
destRect = (*docEditTextStrucHdl)->destRect;
heightDestRect = destRect.bottom - destRect.top;
linesPerPage = heightDestRect / (*docEditTextStrucHdl)->lineHeight;
numberOfLines = (*docEditTextStrucHdl)->nLines;
startOffset = (*docEditTextStrucHdl)->lineStarts[(pageNumber - 1) * linesPerPage];
if(pageNumber == numberOfpages)
endOffset = (*docEditTextStrucHdl)->lineStarts[numberOfLines];
else
endOffset = (*docEditTextStrucHdl)->lineStarts[pageNumber * linesPerPage];
pageEditTextStrucHdl = TENew(&destRect,&destRect);
textHdl = (*docEditTextStrucHdl)->hText;
HLock(textHdl);
TEInsert(*textHdl + startOffset,endOffset - startOffset,pageEditTextStrucHdl);
TEDispose(pageEditTextStrucHdl);
if(pageNumber == 1)
{
SetRect(&pictureRect,destRect.left,destRect.top,
destRect.left + ((*pictureHdl)->picFrame.right - (*pictureHdl)->picFrame.left),
destRect.top + ((*pictureHdl)->picFrame.bottom - (*pictureHdl)->picFrame.top));
DrawPicture(pictureHdl,&pictureRect);
}
MoveTo(destRect.left,pageRect.bottom - 25);
NumToString((SInt32) pageNumber,theString);
DrawString(theString);
}
// *************************************************************************** doDrawPrintInfo
void doDrawPrintInfo(void)
{
docStructureHdl docStrucHdl;
OSStatus osStatus = kPMNoError;
PMRect theRect;
Str255 s2, s3;
PMResolution resolution;
double scale;
PMOrientation orientation;
docStrucHdl = (docStructureHdl) GetWRefCon(gDocumentWindowRef);
if((*docStrucHdl)->pageFormat == kPMNoPageFormat)
return;
HLock((Handle) docStrucHdl);
MoveTo(20,25);
TextFace(bold);
DrawString("\pFrom PMPageFormat Object:");
TextFace(normal);
PMGetAdjustedPaperRect((*docStrucHdl)->pageFormat,&theRect);
NumToString((SInt32) theRect.top,s2);
NumToString((SInt32) theRect.left,s3);
doDrawRectStrings("\pPaper Rectangle (top,left):",20,45,s2,190,45,s3);
NumToString((SInt32) theRect.bottom,s2);
NumToString((SInt32) theRect.right,s3);
doDrawRectStrings("\pPaper Rectangle (bottom,right):",20,60,s2,190,60,s3);
PMGetAdjustedPageRect((*docStrucHdl)->pageFormat,&theRect);
NumToString((SInt32) theRect.top,s2);
NumToString((SInt32) theRect.left,s3);
doDrawRectStrings("\pPage Rectangle (top,left):",20,75,s2,190,75,s3);
NumToString((SInt32) theRect.bottom,s2);
NumToString((SInt32) theRect.right,s3);
doDrawRectStrings("\pPage Rectangle (bottom,right):",20,90,s2,190,90,s3);
PMGetResolution((*docStrucHdl)->pageFormat,&resolution);
MoveTo(20,105);
DrawString("\pDrawing Resolution (Vertical):");
NumToString((SInt32) resolution.vRes,s2);
MoveTo(190,105);
DrawString(s2);
DrawString("\p dpi");
MoveTo(20,120);
DrawString("\pDrawing Resolution (Horizontal):");
NumToString((SInt32) resolution.hRes,s2);
MoveTo(190,120);
DrawString(s2);
DrawString("\p dpi");
PMGetScale((*docStrucHdl)->pageFormat,&scale);
MoveTo(20,135);
DrawString("\pScale:");
NumToString((SInt32) scale,s2);
MoveTo(190,135);
DrawString(s2);
DrawString("\p%");
PMGetOrientation((*docStrucHdl)->pageFormat,&orientation);
MoveTo(20,150);
DrawString("\pPage Orientation:");
MoveTo(190,150);
if(orientation == kPMPortrait)
DrawString("\pPortrait");
else if(orientation == kPMLandscape)
DrawString("\pLandscape");
if(gDrawPrintSettingsStuff)
{
MoveTo(20,170);
TextFace(bold);
DrawString("\pFrom PMPrintSettings Object:");
TextFace(normal);
MoveTo(20,190);
DrawString("\pFirst Page:");
NumToString((SInt32) gFirstPage,s2);
MoveTo(190,190);
DrawString(s2);
MoveTo(20,205);
DrawString("\pLast Page:");
NumToString((SInt32) gLastPage,s2);
MoveTo(190,205);
DrawString(s2);
MoveTo(20,220);
DrawString("\pNumber of Copies:");
NumToString((SInt32) gCopies,s2);
MoveTo(190,220);
DrawString(s2);
}
HUnlock((Handle) docStrucHdl);
}
// ************************************************************************* doDrawRectStrings
void doDrawRectStrings(Str255 s1,SInt16 x1,SInt16 y1,Str255 s2,SInt16 x2,SInt16 y2,Str255 s3)
{
MoveTo(x1,y1);
DrawString(s1);
MoveTo(x2,y2);
DrawString("\p(");
DrawString(s2);
DrawString("\p,");
DrawString(s3);
DrawString("\p)");
}
// ****************************************************************************** doErrorAlert
void doErrorAlert(OSStatus errorType)
{
Str255 theString, errorString = "\pCarbon Printing Manager Error ";
SInt16 itemHit;
NumToString((SInt32) errorType,theString);
doConcatPStrings(errorString,theString);
StandardAlert(kAlertCautionAlert,errorString,NULL,NULL,&itemHit);
}
// ************************************************************************** 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;
}
}
// *******************************************************************************************