Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion Classes/Controllers/PBGitSidebarController.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,16 @@ - (void)awakeFromNib
[self selectStage];
else
[self selectCurrentBranch];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(expandCollapseItem:) name:NSOutlineViewItemWillExpandNotification object:sourceView];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(expandCollapseItem:) name:NSOutlineViewItemWillCollapseNotification object:sourceView];

}

- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSOutlineViewItemWillExpandNotification object:sourceView];
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSOutlineViewItemWillCollapseNotification object:sourceView];
}

- (void)closeView
Expand Down Expand Up @@ -250,7 +260,8 @@ - (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(PBSourceViewCe
{
cell.isCheckedOut = [item.revSpecifier isEqual:[repository headRef]];

[cell setImage:[item icon]];
NSImage* iconImage = ([cell isHighlighted]) ? [item highlightedIcon] : [item icon];
[cell setImage:iconImage];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView shouldSelectItem:(id)item
Expand Down Expand Up @@ -303,6 +314,14 @@ - (void)populateList
[sourceView reloadItem:nil reloadChildren:YES];
}

- (void)expandCollapseItem:(NSNotification*)aNotification
{
NSObject* child = [[aNotification userInfo] valueForKey:@"NSObject"];
if ([child isKindOfClass:[PBSourceViewItem class]]) {
((PBSourceViewItem*)child).isExpanded = [aNotification.name isEqualToString:NSOutlineViewItemWillExpandNotification];
}
}

#pragma mark NSOutlineView Datasource methods

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
Expand Down
5 changes: 4 additions & 1 deletion Classes/Views/PBSourceViewItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

- (void)addChild:(PBSourceViewItem *)child;
- (void)removeChild:(PBSourceViewItem *)child;
- (NSImage*)iconNamed:(NSString*)name;

// This adds the ref to the path, which should match the item's title,
// so "refs/heads/pu/pb/sidebar" would have the path [@"pu", @"pb", @"sidebare"]
Expand All @@ -38,9 +39,11 @@

@property NSString *title;
@property(nonatomic, readonly) NSArray *sortedChildren;
@property(assign) BOOL isGroupItem, isUncollapsible;
@property(assign) BOOL isGroupItem, isUncollapsible, isExpanded;
@property PBGitRevSpecifier *revSpecifier;
@property (assign)PBSourceViewItem *parent;
@property(readonly) NSString *iconName;
@property(readonly) NSImage *icon;
@property(readonly) NSImage *highlightedIcon;

@end
23 changes: 19 additions & 4 deletions Classes/Views/PBSourceViewItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ @interface PBSourceViewItem ()

@implementation PBSourceViewItem

@synthesize parent, isGroupItem, revSpecifier, isUncollapsible;
@dynamic icon;
@synthesize parent, isGroupItem, revSpecifier, isUncollapsible, isExpanded;
@dynamic icon, highlightedIcon;

- (id)init
{
Expand Down Expand Up @@ -107,8 +107,10 @@ - (void)addRev:(PBGitRevSpecifier *)theRevSpecifier toPath:(NSArray *)path
if (!node) {
if ([firstTitle isEqualToString:[[theRevSpecifier ref] remoteName]])
node = [PBGitSVRemoteItem remoteItemWithTitle:firstTitle];
else
else {
node = [PBGitSVFolderItem folderItemWithTitle:firstTitle];
node.isExpanded = [[self title] isEqualToString:@"BRANCHES"];
}
[self addChild:node];
}

Expand All @@ -130,7 +132,20 @@ - (PBSourceViewItem *)findRev:(PBGitRevSpecifier *)rev

- (NSImage *) icon
{
return nil;
return [self iconNamed:[self iconName]];
}

- (NSImage *) highlightedIcon
{
return [self iconNamed:[[self iconName] stringByAppendingString:@"Highlighted"]];
}

- (NSImage *)iconNamed:(NSString*)name
{
NSImage* iconImage = [NSImage imageNamed:name];
[iconImage setSize:NSMakeSize(16,16)];
[iconImage setCacheMode:NSImageCacheAlways];
return iconImage;
}

- (NSString *)title
Expand Down
8 changes: 2 additions & 6 deletions Classes/git/PBGitSVBranchItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,9 @@ + (id)branchItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *branchImage = nil;
if (!branchImage)
branchImage = [NSImage imageNamed:@"Branch"];

return branchImage;
return @"Branch";
}

@end
13 changes: 2 additions & 11 deletions Classes/git/PBGitSVFolderItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,16 @@

@implementation PBGitSVFolderItem


+ (id)folderItemWithTitle:(NSString *)title
{
PBGitSVFolderItem *item = [self itemWithTitle:title];

return item;
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *folderImage = nil;
if (!folderImage) {
//folderImage = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kGenericFolderIcon)];
folderImage = [NSImage imageNamed:@"Folder"];
[folderImage setSize:NSMakeSize(16,16)];
}

return folderImage;
return (self.isExpanded) ? @"Folder" : @"FolderClosed";
}

@end
9 changes: 2 additions & 7 deletions Classes/git/PBGitSVOtherRevItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,9 @@ + (id)otherItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
return item;
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *otherRevImage = nil;
if (!otherRevImage)
otherRevImage = [NSImage imageNamed:@"Branch"];

return otherRevImage;
return @"Branch";
}

@end
9 changes: 2 additions & 7 deletions Classes/git/PBGitSVRemoteBranchItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,9 @@ + (id)remoteBranchItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
return item;
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *remoteBranchImage = nil;
if (!remoteBranchImage)
remoteBranchImage = [NSImage imageNamed:@"RemoteBranch"];

return remoteBranchImage;
return @"RemoteBranch";
}

@end
12 changes: 2 additions & 10 deletions Classes/git/PBGitSVRemoteItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,11 @@ + (id)remoteItemWithTitle:(NSString *)title
return item;
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *networkImage = nil;
if (!networkImage) {
networkImage = [NSImage imageNamed:@"Remote"];
[networkImage setSize:NSMakeSize(16,16)];
}

return networkImage;
return @"Remote";
}


- (PBGitRef *) ref
{
return [PBGitRef refFromString:[kGitXRemoteRefPrefix stringByAppendingString:self.title]];
Expand Down
8 changes: 2 additions & 6 deletions Classes/git/PBGitSVStageItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,9 @@ + (id) stageItem
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *stageImage = nil;
if (!stageImage)
stageImage = [NSImage imageNamed:@"StageView"];

return stageImage;
return @"StageView";
}

@end
9 changes: 2 additions & 7 deletions Classes/git/PBGitSVTagItem.m
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,9 @@ + (id)tagItemWithRevSpec:(PBGitRevSpecifier *)revSpecifier
return item;
}


- (NSImage *) icon
- (NSString*) iconName
{
static NSImage *tagImage = nil;
if (!tagImage)
tagImage = [NSImage imageNamed:@"Tag.png"];

return tagImage;
return @"Tag";
}

@end
Loading