Apologies all for the mis-titled e-mail. Resending for the sake of the archives. ---
This is the relevant part of my cell subclass: - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { if(hasCount) { NSString * number = [NSString stringWithFormat:@"%i", count]; // Use the current font point size as a guide for the count font size CGFloat pointSize = [[self font] pointSize]; // Create attributes for drawing the count. NSDictionary* attributes = [[NSDictionaryalloc] initWithObjectsAndKeys:[NSFontnonNilFontWithName:@"Helvetica-Bold"size:pointSize], NSFontAttributeName, (countTextColor!= nil? countTextColor: [NSColorwhiteColor]), NSForegroundColorAttributeName, nil]; NSSize numSize = [number sizeWithAttributes:attributes]; // Compute the dimensions of the count rectangle. NSInteger cellWidth = MAX(numSize.width + 6, 20.0); NSRect countFrame; CGFloat rightPadding = 5.0; NSDivideRect(cellFrame, &countFrame, &cellFrame, cellWidth+rightPadding, NSMaxXEdge); countFrame.size.width -= rightPadding; if([selfdrawsBackground]) { [[selfbackgroundColor] set]; NSRectFill(cellFrame); } countFrame.origin.y += 1; countFrame.size.height -= 2; CGFloat radius = numSize.height / 2; NSBezierPath * roundedRect = [NSBezierPath bezierPathWithRoundedRect:countFrame cornerRadius:radius]; [(countBackgroundColor!= nil? countBackgroundColor: [NSColorgrayColor]) set]; [roundedRect fill]; // Draw the count in the rounded rectangle we just created. //NSPoint point = NSMakePoint(NSMidX(countFrame) - numSize.width / 2.0f, NSMidY(countFrame) - numSize.height / 2.0f ); NSPoint point = NSMakePoint(countFrame.origin.x + (countFrame.size.width-numSize.width)/2.0, countFrame.origin.y + (countFrame.size.height-numSize.height)/2.0); [number drawAtPoint:point withAttributes:attributes]; [attributes release]; } [superdrawInteriorWithFrame:cellFrame inView:controlView]; } Note the NSBezierPath method is from Andreas Meyer's category because I support 10.4, so could be replaced with the equivalent 10.5 AppKit method. The accessors it uses (hasCount, count etc) should all be fairly straightforward, and nonNilFontForFont: just returns the system or user font if the font passed in is nil. (I would have included the whole class but it's long and does a lot more than you need, including handling centring vertically, drawing icons and labels and so on.) I set the countBackgroundColor in -willDisplayCell depending on whether the outline has the focus or not. I set it to [NSColor colorWithCalibratedWhite:0.604 alpha:1.0] if the outline view doesn't have the focus or [NSColor colorWithCalibratedRed:0.51 green:0.592 blue:0.741 alpha:1.0] if it does (which closely matches the colour in Mail). All the best, Keith --------- Message: 13 Date: Thu, 11 Mar 2010 01:35:34 +1100 From: Graham Cox <em...@hidden> Subject: Custom cell wanted To: Cocoa-Dev List <em...@hidden> Message-ID: <em...@hidden> Content-Type: text/plain; charset=us-ascii Hi, I need a custom cell for a table/outline view that is exactly like Mail's 'unread' count - the grey lozenge with a number in it. It's probably only a few hours work but maybe someone has already done it and would be willing to share? --Graham _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com