MAC OS X Cocoa NSToolbar 的使用
//向NSToolbar控件添加自定义的NSToolbarItem项 - (NSToolbarItem *) toolbar: (NSToolbar *)toolbar itemForItemIdentifIEr: (NSString *) itemIdent willBeInsertedIntoToolbar:(BOOL) willBeInserted { // Required delegate method Given an item identifier, self method returns an item // The toolbar will use self method to obtain toolbar items that can be displayed in the customization sheet, or in the toolbar itself NSToolbarItem *toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdent] autorelease];
if ([itemIdent isEqual: SquareDotViewItemIdentifier]) { SquareDotView *dv = [[SquareDotView alloc] initWithFrame: NSMakeRect(0,0,100,32)];
[toolbarItem setView: dv];
// set a reasonable minimum size [toolbarItem setMinSize: NSMakeSize(100,32)]; // set a maximum size that allows us to stretch. [toolbarItem setMaxSize: NSMakeSize(300,32)];
[toolbarItem setLabel: @"Dot View"]; [toolbarItem setPaletteLabel: @"A Dot View"]; [toolbarItem setToolTip: @"This is a dot view"]; } ..... }
//返回单击后能被选中且为高亮显示的NSToolbarItem的集合。 - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar {// return an array of all the items that can be highlight display after selected return [NSArray arrayWithObjects: NSColorToolbarItemIdentifier, NSFontToolbarItemIdentifier,nil]; }
//返回程序加载后的默认的NSToolbarItem的集合。 - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar { // return an array of the items found in the default toolbar return [NSArray arrayWithObjects: NSToolbarSeparatorItemIdentifier, NSFontToolbarItemIdentifier, NSToolbarCustomizeToolbarItemIdentifier, nil]; }
//以下是作为NSToolbarItem出现的自定义类 The "SquareDotView" class:
@interface SquareDotView : NSView { @private float sdSide; NSPoint sdLocation; } @end
@implementation SquareDotView
#define START_SIDE 10 #define START_LOCATION NSMakePoint(10,10)
- (id)initWithFrame:(NSRect)frame { self = [super initWithFrame:frame]; if (self) { sdSide = START_SIDE; sdLocation = START_LOCATION; } return self; }
- (void)mouseDown:(NSEvent *)theEvent { sdLocation = [self convertPoint: [theEvent locationInWindow] fromView: nil]; [self setNeedsDisplay: YES]; }
- (void)drawRect:(NSRect)rect { [[NSColor redColor] set]; [[NSBezierPath bezierPathWithRect: NSMakeRect(sdLocation.x, sdLocation.y, sdSide, sdSide)] fill];
[[NSColor blackColor] set]; [[NSBezierPath bezierPathWithRect: [self bounds]] stroke]; }
- (id)initWithCoder:(NSCoder *)coder { self = [super initWithCoder: coder]; if (self) { [coder decodeValuesOfObjCTypes: "fff", &sdSide, &sdLocation.x, &sdLocation.y]; } return self; }
- (void)encodeWithCoder:(NSCoder *)coder { [super encodeWithCoder: coder]; if (self) { [coder encodeValuesOfObjCTypes: "fff", &sdSide, &sdLocation.x, &sdLocation.y]; } }
@end |