#import "InboxCell.h"
#import <appkit/Text.h>

@implementation InboxCell

- loadValues: (Inbox *) inbox
{
    int i;
    /* Create the cells if they don't exist */
    if (!name) name = [Cell newTextCell: ""];
    if (!messageCount) messageCount = [[Cell newTextCell: ""]
				        setAlignment: NX_RIGHTALIGNED];
    if (!unreadCount)  unreadCount  = [[Cell newTextCell: ""]
				        setAlignment: NX_RIGHTALIGNED];

    /* Set the values, making numerics blank when zero. */
    [name setStringValueNoCopy: [inbox name]];
    if (i = [inbox messageCount]) [messageCount setIntValue: i];
    else [messageCount setStringValue: ""];
    if (i = [inbox unreadCount]) [unreadCount setIntValue: i];
    else [unreadCount setStringValue: ""];
    return self;
}

/* This doesn't actually draw this cell at all. Instead, it asks the
   component cells to draw their insides in the right places.
*/

- drawInside: (const NXRect *) cellFrame inView: controlView
{
    NXRect tempRect;
    [super drawInside: cellFrame inView: controlView];

    tempRect = *cellFrame;
    tempRect.size.width = cellFrame->size.width / 6 - 12;
    [messageCount drawInside: &tempRect inView: controlView];

    tempRect.origin.x += cellFrame->size.width / 6;
    [unreadCount drawInside: &tempRect inView: controlView];

    tempRect.origin.x += cellFrame->size.width / 6;
    tempRect.size.width = cellFrame->size.width * 2.0 / 3.0;
    [name drawInside: &tempRect inView: controlView];

    return self;
}

- copy
{
    InboxCell *newCell = [super copy];
    newCell->name = [name copy];
    newCell->messageCount = [messageCount copy];
    newCell->unreadCount = [unreadCount copy];
    return newCell;
}

- free
{
    if (name) [name free];
    if (messageCount) [messageCount free];
    if (unreadCount) [unreadCount free];
    return [super free];
}

@end
