Files
gitx/PBSourceViewItem.m
T
Pieter de Bie 692a79c3ad Sidebar: Add "Commit" action
When this tree leaf is selected, the view switches
to the commit view.
2009-09-10 02:39:51 +02:00

114 lines
2.3 KiB
Objective-C

//
// PBSourceViewItem.m
// GitX
//
// Created by Pieter de Bie on 9/8/09.
// Copyright 2009 __MyCompanyName__. All rights reserved.
//
#import "PBSourceViewItem.h"
#import "PBGitRevSpecifier.h"
@implementation PBSourceViewItem
@synthesize parent, title, isGroupItem, children, revSpecifier, isUncollapsible;
- (id)init
{
if (!(self = [super init]))
return nil;
children = [NSMutableArray array];
return self;
}
+ (id)groupItemWithTitle:(NSString *)title
{
PBSourceViewItem *item = [[[self class] alloc] init];
item.title = title;
item.isGroupItem = YES;
return item;
}
+ (id)itemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
{
PBSourceViewItem *item = [[[self class] alloc] init];
item.revSpecifier = revSpecifier;
return item;
}
+ (id)itemWithTitle:(NSString *)title;
{
PBSourceViewItem *item = [[[self class] alloc] init];
item.title = title;
return item;
}
- (void)addChild:(PBSourceViewItem *)child
{
[self.children addObject:child];
child.parent = self;
}
- (void)addRev:(PBGitRevSpecifier *)theRevSpecifier toPath:(NSArray *)path
{
if ([path count] == 1) {
PBSourceViewItem *item = [PBSourceViewItem itemWithRevSpec:theRevSpecifier];
[self addChild:item];
return;
}
NSString *firstTitle = [path objectAtIndex:0];
PBSourceViewItem *node = nil;
for (PBSourceViewItem *child in [self children])
if ([child.title isEqualToString:firstTitle])
node = child;
if (!node) {
node = [PBSourceViewItem itemWithTitle:firstTitle];
[self addChild:node];
}
[node addRev:theRevSpecifier toPath:[path subarrayWithRange:NSMakeRange(1, [path count] - 1)]];
}
- (PBSourceViewItem *)findRev:(PBGitRevSpecifier *)rev
{
if (rev == revSpecifier)
return self;
PBSourceViewItem *item = nil;
for (PBSourceViewItem *child in children)
if (item = [child findRev:rev])
return item;
return nil;
}
- (NSString *)title
{
if (title)
return title;
return [[revSpecifier description] lastPathComponent];
}
- (NSImage *)icon
{
if ([self isGroupItem])
return nil;
if (self.parent && !self.parent.parent && [self.parent.title isEqualToString:@"Remotes"])
return [NSImage imageNamed:@"remote"];
if (self.parent && !self.parent.parent && [self.parent.title isEqualToString:@"Tags"])
return [NSImage imageNamed:@"tag"];
if ([[self children] count])
return [NSImage imageNamed:@"folder"];
return [NSImage imageNamed:@"branch"];
}
@end