2010-04-29 5 views
2

J'ai du mal à trouver une manière élégante d'afficher verticalement les en-têtes de colonne pour une vue de table (rotation de 90 degrés dans le sens inverse des aiguilles d'une montre). Je ne suis pas marié à faire cela en tant que NSTableHeaderCell réel, j'ai pensé qu'il pourrait être plus facile de le faire en remplaçant NSTextFieldCell ou NSCell.NSTextFieldCell ou simplement NSCell avec texte vertical (et teinte colorée)

Les cellules ne contiennent que du texte non éditable, mais il s'agit généralement de deux lignes, et il est parfois teinté avec le reste de la colonne en fonction du contexte.

Je n'arrive pas à trouver des applications de cacao qui le font, et encore moins un exemple open source. Des pensées?

Répondre

2
#import "VerticalTextCell.h" 

@implementation VerticalTextCell 

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 

    NSMutableDictionary *atr = [NSMutableDictionary dictionary]; 
    NSFont *font = [NSFont fontWithName:@"Lucida Grande" size:12]; 
    [atr setObject:font forKey:NSFontAttributeName]; 

    [[[self backgroundColor] colorWithAlphaComponent:0.7] set]; 
    NSRectFillUsingOperation(cellFrame, NSCompositeSourceOver); 

    NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; 
    [currentContext saveGraphicsState]; 

    NSAffineTransform *transform = [NSAffineTransform transform]; 
    [transform translateXBy:NSMinX(cellFrame) yBy:NSMinY(cellFrame)]; 
    [transform rotateByDegrees:-90]; 
    [transform concat]; 

    // vertical inset 5 pixels 
    [[self stringValue] drawInRect:NSMakeRect(-NSHeight(cellFrame),5,NSHeight(cellFrame),NSWidth(cellFrame)) withAttributes:atr]; 

    [currentContext restoreGraphicsState]; 

} 


@end