mirror of
https://github.com/kennethreitz-archive/gitx.git
synced 2026-06-05 15:30:18 +00:00
17a4935f66
Commit on CMD+ENTER Added images for group items in sidebar menu
140 lines
3.0 KiB
Objective-C
140 lines
3.0 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 "PBSourceViewItems.h"
|
|
#import "PBGitRef.h"
|
|
|
|
@implementation PBSourceViewItem
|
|
@synthesize parent, title, isGroupItem, children, revSpecifier, isUncollapsible;
|
|
@synthesize showsActionButton;
|
|
@dynamic icon;
|
|
|
|
- (id)init
|
|
{
|
|
if (!(self = [super init]))
|
|
return nil;
|
|
|
|
children = [NSMutableArray array];
|
|
return self;
|
|
}
|
|
|
|
+ (id)itemWithTitle:(NSString *)title
|
|
{
|
|
PBSourceViewItem *item = [[[self class] alloc] init];
|
|
item.title = title;
|
|
return item;
|
|
}
|
|
|
|
+ (id)groupItemWithTitle:(NSString *)title
|
|
{
|
|
PBSourceViewItem *item = [self itemWithTitle:[title uppercaseString]];
|
|
item.isGroupItem = YES;
|
|
return item;
|
|
}
|
|
|
|
+ (id)itemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
|
|
{
|
|
PBGitRef *ref = [revSpecifier ref];
|
|
|
|
if ([ref isTag])
|
|
return [PBGitSVTagItem tagItemWithRevSpec:revSpecifier];
|
|
else if ([ref isBranch])
|
|
return [PBGitSVBranchItem branchItemWithRevSpec:revSpecifier];
|
|
else if ([ref isRemoteBranch])
|
|
return [PBGitSVRemoteBranchItem remoteBranchItemWithRevSpec:revSpecifier];
|
|
|
|
return [PBGitSVOtherRevItem otherItemWithRevSpec:revSpecifier];
|
|
}
|
|
|
|
- (void)addChild:(PBSourceViewItem *)child
|
|
{
|
|
if (!child)
|
|
return;
|
|
|
|
[self.children addObject:child];
|
|
child.parent = self;
|
|
[self.children sortUsingDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]]];
|
|
}
|
|
|
|
- (void)removeChild:(PBSourceViewItem *)child
|
|
{
|
|
if (!child)
|
|
return;
|
|
|
|
[self.children removeObject:child];
|
|
if (!self.isGroupItem && ([self.children count] == 0))
|
|
[self.parent removeChild: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) {
|
|
if ([firstTitle isEqualToString:[[theRevSpecifier ref] remoteName]])
|
|
node = [PBGitSVRemoteItem remoteItemWithTitle:firstTitle];
|
|
else
|
|
node = [PBGitSVFolderItem folderItemWithTitle: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]) != nil )
|
|
return item;
|
|
|
|
return nil;
|
|
}
|
|
|
|
- (NSImage *) icon
|
|
{
|
|
return nil;
|
|
}
|
|
|
|
- (NSString *)title
|
|
{
|
|
if (title)
|
|
return title;
|
|
|
|
return [[revSpecifier description] lastPathComponent];
|
|
}
|
|
|
|
- (NSString *) stringValue
|
|
{
|
|
return self.title;
|
|
}
|
|
|
|
- (PBGitRef *) ref
|
|
{
|
|
if (self.revSpecifier)
|
|
return [self.revSpecifier ref];
|
|
|
|
return nil;
|
|
}
|
|
|
|
@end
|