views:

42

answers:

0

Hi,

Can you help me to fix this problem.

I am customizing my table view to show various images in the background of the cells accordingly as

Selected : Font Changed to While Colour, Background image, Highlighted.png Deselected/Normal: Font -> Black colour, Bg Image: Default.png

I tried to override - (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlView

of NSCell to change the Font Color and BgImage according to the state as I mentioned earlier.

Result: Once the application launched it is ok. Once I select col1 and select col2, my Col1 still shows the Highlighted image, infact it is deselected and supposed to show the Default Image. This because my Default image is a transparent image. Even after overlapping Default.png on Highlighted.png it is showing the same Highlighted.png.

I guess what I need to do is to remove the image from the Cell before redrawing it. How to do I really don't know.

Kindly look into this and help me in this regards.

//// CustomTableCell

@interface CustomTableCell : NSCell {

}

@end

import "CustomTableCell.h"

@implementation CustomTableCell - (void)drawInteriorWithFrame:(NSRect)theCellFrame inView:(NSView *)theControlView { NSLog(@"CustomTableCell drawInteriorWithFrame"); NSImage *bgImage = [NSImage imageNamed:@"DefaultCell"];

// Make attributes for our strings
NSMutableParagraphStyle * aParagraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
[aParagraphStyle setLineBreakMode:NSLineBreakByTruncatingTail];
[aParagraphStyle setAlignment:NSCenterTextAlignment];



// Title attributes: system font, 14pt, black, truncate tail
NSMutableDictionary * aTitleAttributes = [[[NSMutableDictionary alloc] initWithObjectsAndKeys:
             [NSColor blackColor],NSForegroundColorAttributeName,
             [NSFont systemFontOfSize:21.0],NSFontAttributeName,
             aParagraphStyle, NSParagraphStyleAttributeName,
             nil] autorelease];

// Make a Title string
NSString * aTitle = [self stringValue];
NSLog(@"CellFrame:[%f %f] [%f %f]", theCellFrame.origin.x, theCellFrame.origin.y, theCellFrame.size.width, theCellFrame.size.height);
NSRect anIconBox = theCellFrame;
NSRect aTitleBox = NSMakeRect(theCellFrame.origin.x, 
         theCellFrame.origin.y + theCellFrame.size.height/2-10,
         theCellFrame.size.width,
         theCellFrame.size.height);


if( [self isHighlighted])
{
 // if the cell is highlighted, draw the text white
 [aTitleAttributes setValue:[NSColor whiteColor] forKey:NSForegroundColorAttributeName];
 bgImage = [NSImage imageNamed:@"FocusedCell"];
}
else
{
 // if the cell is not highlighted, draw the title black and the subtile gray
 [aTitleAttributes setValue:[NSColor orangeColor] forKey:NSForegroundColorAttributeName];
}

// Draw the icon
[bgImage drawInRect:anIconBox fromRect:NSZeroRect operation:NSCompositePlusLighter fraction:1.0];

// Draw the text
[aTitle drawInRect:aTitleBox withAttributes:aTitleAttributes];

} @end

//// CustomTableView @interface CustomTableView : NSTableView {

}

@end

import "CustomTableView.h"

@implementation CustomTableView

  • (void)awakeFromNib { NSLog(@"CustomTableView awakeFromNib"); [[self enclosingScrollView] setDrawsBackground:NO]; }

  • (void)drawBackgroundInClipRect:(NSRect)clipRect { NSLog(@"CustomTableView drawBackgroundInClipRect"); }

pragma mark -

pragma mark Selection Highlighting

  • (id)_highlightColorForCell:(NSCell *)cell { // we need to override this to return nil // or we'll see the default selection rectangle when the app is running // in any OS before leopard

    // you can also return a color if you simply want to change the table's default selection color return nil; }

@end

Thanks in advance

Regards [email protected]