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.
mylistdef.c
/* |
File: mylistdef.c |
Contains: This LDEF displays small icons to the left of text in a list. |
The small icon is stored in the first 16 bytes of each cell. |
Written by: Steven Falkenburg |
Copyright: Copyright © 1991-1999 by Apple Computer, Inc., All Rights Reserved. |
You may incorporate this Apple sample source code into your program(s) without |
restriction. This Apple sample source code has been provided "AS IS" and the |
responsibility for its operation is yours. You are not permitted to redistribute |
this Apple sample source code as "Apple sample source 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 source |
code, but that you've made changes. |
Change History (most recent first): |
8/10/1999 Karl Groethe Updated for Metrowerks Codewarror Pro 2.1 |
*/ |
#include <Types.h> |
#include <QuickDraw.h> |
#include <Lists.h> |
#include <Memory.h> |
/* constants for spacing */ |
#define kLeftOffset 2 |
#define kTopOffset 0 |
#define kIconSpace 2 |
/* prototypes */ |
void DrawSICN(Ptr theSICN,short left,short top,GrafPtr drawPort); |
pascal void theLDEF(short lMessage,Boolean lSelect,Rect *lRect,Cell lCell, |
short lDataOffset,short lDataLen,ListHandle lHandle); |
/* main LDEF entry point */ |
pascal void theLDEF(short lMessage,Boolean lSelect,Rect *lRect,Cell lCell, |
short lDataOffset,short lDataLen,ListHandle lHandle) |
{ |
#pragma unused(lCell) |
FontInfo fontInfo; /* font information (ascent/descent/etc) */ |
ListPtr listPtr; /* pointer to store dereferenced list */ |
SignedByte hStateList,hStateCells; /* state variables for HGetState/SetState */ |
Ptr cellData; /* points to start of cell data for list */ |
Ptr theSICN; /* points to SICN to be drawn */ |
short leftDraw,topDraw; /* left/top offsets from topleft of cell */ |
/* lock and dereference list mgr handles */ |
hStateList = HGetState((Handle)lHandle); |
HLock((Handle)lHandle); |
listPtr = *lHandle; |
hStateCells = HGetState(listPtr->cells); |
HLock(listPtr->cells); |
cellData = *(listPtr->cells); |
switch (lMessage) { |
case lInitMsg: |
/* we don't need any initialization */ |
break; |
case lDrawMsg: |
EraseRect(lRect); |
if (lDataLen > 0) { |
/* determine starting point for drawing */ |
leftDraw = lRect->left+listPtr->indent.h+kLeftOffset; |
topDraw = lRect->top+listPtr->indent.v+kTopOffset; |
/* plot SICN (first 32 bytes) */ |
if (lDataLen > 32) { |
theSICN = cellData+lDataOffset; |
DrawSICN(theSICN,leftDraw,topDraw,listPtr->port); |
lDataOffset += 32; |
lDataLen -= 32; |
} |
leftDraw += 16+kIconSpace; |
/* plot text (offset 32 bytes onward) */ |
GetFontInfo(&fontInfo); |
MoveTo(leftDraw,topDraw+fontInfo.ascent); |
/* set condensed mode if necessary (if the text doesn't fit otherwise) */ |
TextFace(0); |
if (TextWidth(cellData,lDataOffset,lDataLen) > (lRect->right - leftDraw)) |
TextFace(condense); |
DrawText(cellData,lDataOffset,lDataLen); |
} |
if (!lSelect) |
break; |
case lHiliteMsg: |
InvertRect(lRect); |
break; |
case lCloseMsg: |
break; |
} |
HSetState((Handle)listPtr->cells,hStateCells); |
HSetState((Handle)lHandle,hStateList); |
} |
/* this procedure draws a small icon using CopyBits */ |
void DrawSICN(Ptr theSICN,short left,short top,GrafPtr drawPort) |
{ |
BitMap iconMap; |
Rect destRect; |
iconMap.baseAddr = theSICN; |
iconMap.rowBytes = 2; |
SetRect(&iconMap.bounds,0,0,16,16); |
SetRect(&destRect,0,0,16,16); |
OffsetRect(&destRect,left,top); |
CopyBits(&iconMap,&drawPort->portBits,&iconMap.bounds,&destRect, |
srcCopy,nil); |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-30