Row Parameters in Table with Expanders

Description: Row parameters in table. It is used in data source for creating an arras with rows containing expanders.

The GridRow.h File

@interface GridRow : NSObject{
    NSMutableArray *children; // Array of child rows
}
@property (nonatomic, readonly) NSString *title; // Row header
@property (nonatomic, readonly) NSArray *values; // Row value
@property (nonatomic, readonly) GridRow *parent; // Parent row
@property (nonatomic) BOOL isExpanded; // Indicates whether row is expanded
// Initializes row by header and data
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data;
// Initializes row by header, data and parent
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data andParent:(GridRow *)parentRow;
// Returns child row by its index
- (GridRow *)childAtIndex:(NSInteger)index;
// Returns the number of child rows
- (NSInteger)childrenCount;
// Adds child row
- (void)addChild:(GridRow *)row;
// Returns row level in hierarchy of all table rows
- (NSInteger)level;
@end

The GridRow.m File

#import "GridRow.h"
@implementation GridRow
@synthesize title, values, parent, isExpanded;
// Initializes row by header and data
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data{
    if ((self = [super init])) {
        title = [[NSString stringWithString:header] retain];
        values = [[NSArray arrayWithArray:data] retain];
        parent = nil;
        isExpanded = NO;
        return self;
    }
    else
    return nil;
}
// Initializes row by header, data and parent
- (id)initWithHeader:(NSString *)header andData:(NSArray *)data andParent:(GridRow *)parentRow {
    if ((self = [self initWithHeader:header andData:data])) {
        parent = parentRow;
        [parent addChild:self];
        return self;
    }
    else
    return nil;
}
// Returns child row by its index
- (GridRow *)childAtIndex:(NSInteger)index {
    if (children && index < [children count ])
    return [children objectAtIndex:index];
    else
    return nil;
}
// Returns the number of child rows
- (NSInteger)childrenCount {
    return [children count];
}
// Adds child row
- (void)addChild:(GridRow *)row {
    if (!children)
    children = [[NSMutableArray new] retain];
    [children addObject:row];
}
// Returns row level in hierarchy of all table rows
- (NSInteger)level {
    if (parent)
    return [parent level] + 1;
    else
    return 0;
}
// Determines whether table row is expanded
- (void)setIsExpanded:(BOOL)expanded {
    if ([children count])
    isExpanded = expanded;
    else
    isExpanded = NO;
}
- (void)dealloc {
    [title release];
    [values release];
    [children release];
    [super dealloc];
}
@end

See also:

Creating a Table with Expanders