From 1551084b169d07df5f00963675a9a0bb4cd9be18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Berg?= Date: Sat, 7 Nov 2009 04:25:12 +0100 Subject: [PATCH] Update context menu to include remote target and other dynamic title changes. When right-clicking on a ref label, if the ref has a default remote configured , a new greyed out menu entry with the remote's name is put above all other menu entries and separated by a menu item separator. --- PBRefMenuItem.h | 1 + PBRefMenuItem.m | 25 ++++++++++++---- RepositoryWindow.xib | 69 ++++++++++++++++++++++---------------------- 3 files changed, 55 insertions(+), 40 deletions(-) diff --git a/PBRefMenuItem.h b/PBRefMenuItem.h index 5d00f5d..0946f37 100644 --- a/PBRefMenuItem.h +++ b/PBRefMenuItem.h @@ -20,5 +20,6 @@ + (PBRefMenuItem *)addRemoteMethod:(BOOL)isRemote title:(NSString *)title action:(SEL)selector; + (NSArray *)defaultMenuItemsForRef:(PBGitRef *)ref commit:(PBGitCommit *)commit target:(id)target; ++ (PBRefMenuItem *)separatorItem; @end diff --git a/PBRefMenuItem.m b/PBRefMenuItem.m index b8f1e58..a407c42 100644 --- a/PBRefMenuItem.m +++ b/PBRefMenuItem.m @@ -29,12 +29,21 @@ type = @"branch"; NSString *remote = [[[commit repository] config] valueForKeyPath:[NSString stringWithFormat:@"branch.%@.remote", [ref shortName]]]; - BOOL hasRemote = (remote ? YES : NO); - + BOOL hasRemote = (remote ? YES : NO); + NSString * targetRef = [ref shortName]; + if ([type isEqualToString:@"branch"]) { - [array addObject:[self addRemoteMethod:hasRemote title:@"Push branch to remote" action:@selector(pushRef:)]]; - [array addObject:[self addRemoteMethod:hasRemote title:@"Pull down latest" action:@selector(pullRef:)]]; - [array addObject:[self addRemoteMethod:hasRemote title:@"Rebase local changes with latest" action:@selector(rebaseRef:)]]; + if (hasRemote) { + PBRefMenuItem *item = [[PBRefMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"Remote: %@", remote] action:nil keyEquivalent:@""]; + [item setEnabled:NO]; + [array addObject:item]; + PBRefMenuItem *sepItem = [PBRefMenuItem separatorItem]; + [array addObject:sepItem]; + } + + [array addObject:[self addRemoteMethod:hasRemote title:[NSString stringWithFormat:@"Push %@ to remote", targetRef] action:@selector(pushRef:)]]; + [array addObject:[self addRemoteMethod:hasRemote title:[NSString stringWithFormat:@"Pull down latest"] action:@selector(pullRef:)]]; + [array addObject:[self addRemoteMethod:hasRemote title:[NSString stringWithFormat:@"Rebase local changes with latest"] action:@selector(rebaseRef:)]]; } if ([type isEqualToString:@"branch"]) @@ -59,4 +68,10 @@ return array; } + ++ (PBRefMenuItem *)separatorItem { + PBRefMenuItem * item = (PBRefMenuItem *) [super separatorItem]; + return item; +} + @end diff --git a/RepositoryWindow.xib b/RepositoryWindow.xib index e7005e4..c8a5253 100644 --- a/RepositoryWindow.xib +++ b/RepositoryWindow.xib @@ -12,7 +12,7 @@ YES - + YES @@ -81,11 +81,9 @@ View selector - + 268 {{0, 14}, {87, 25}} - - 3 YES @@ -143,11 +141,9 @@ Clone Clone a repository - + 268 {{1, 14}, {36, 25}} - - YES -2080244224 @@ -188,11 +184,9 @@ - + 265 {{0, 14}, {183, 22}} - - YES 343014976 @@ -285,11 +279,9 @@ Create Branch - + 268 {{21, 14}, {40, 25}} - - YES -2080244224 @@ -328,11 +320,9 @@ Branch - + 268 {{0, 14}, {134, 26}} - - YES -2076049856 @@ -416,13 +406,14 @@ Push Push - Push local changes to remote + J2dpdCBwdXNoIDxyZW1vdGU+PGxvY2FsIGJyYW5jaD4nCgo8cmVtb3RlPiBpcyB0aGUgZGVmYXVsdCBy +ZW1vdGUgY29uZmlndXJlZCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBicmFuY2ggZnJvbSB0aGUg +YnJhbmNoIHBvcHVwIG1lbnUuIAoKTm90ZTogdGhlIGJyYW5jaCBoYXMgdG8gYmUgc3BlY2lmaWMuIAon +QWxsIGJyYW5jaGVzJyBvciAnTG9jYWwgYnJhbmNoZXMnIHdpbGwgbm90IHdvcmsuA - + 268 {{0, 14}, {35, 25}} - - YES -2080244224 @@ -459,13 +450,15 @@ Pull Pull - Pull latest changes from remote + J2dpdCBwdWxsIDxyZW1vdGU+PGxvY2FsIGJyYW5jaD4nCgo8cmVtb3RlPiBpcyB0aGUgZGVmYXVsdCBy +ZW1vdGUgY29uZmlndXJlZCBmb3IgPGxvY2FsIGJyYW5jaD4KPGxvY2FsIGJyYW5jaD4gaXMgdGhlIHNl +bGVjdGVkIGJyYW5jaCBmcm9tIHRoZSBicmFuY2ggcG9wdXAgbWVudQoKTm90ZTogdGhlIGJyYW5jaCBo +YXMgdG8gYmUgc3BlY2lmaWMuIAonQWxsIGJyYW5jaGVzJyBvciAnTG9jYWwgYnJhbmNoZXMnIHdpbGwg +bm90IHdvcms - + 268 {{0, 14}, {35, 25}} - - YES -2080244224 @@ -502,13 +495,19 @@ Rebase Rebase - Rebase local changes with latest + J2dpdCBwdWxsIC0tcmViYXNlIDxyZW1vdGU+IDxyZW1vdGUgYnJhbmNoPicKCkluc3RlYWQgb2YgYSBt +ZXJnZSwgcGVyZm9ybSBhIHJlYmFzZSBhZnRlciBmZXRjaGluZwoKPHJlbW90ZT4gd2lsbCBiZSB0aGUg +ZGVmYXVsdCByZW1vdGUgY29uZmlndXJlZCBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBicmFuY2gg +aW4gdGhlIGJyYW5jaCBwb3B1cCBtZW51LiAKCjxyZW1vdGUgYnJhbmNoPiB3aWxsIGJlIHRoZSByZW1v +dGUgSEVBRAoKSWYgdGhlcmUgaXMgYSByZW1vdGUgcmVmIGZvciB0aGUgdXBzdHJlYW0gYnJhbmNoLCBh +bmQgdGhpcyBicmFuY2ggd2FzIHJlYmFzZWQgc2luY2UgbGFzdCBmZXRjaGVkLCB0aGUgcmViYXNlIHVz +ZXMgdGhhdCBpbmZvcm1hdGlvbiB0byBhdm9pZCByZWJhc2luZyBub24tbG9jYWwgY2hhbmdlcwoKTm90 +ZTogdGhlIGxvY2FsIGJyYW5jaCBoYXMgdG8gYmUgc3BlY2lmaWMuIAonQWxsIGJyYW5jaGVzJyBvciAn +TG9jYWwgYnJhbmNoZXMnIHdpbGwgbm90IHdvcmsuA - + 268 {{5, 14}, {35, 25}} - - YES -2080244224 @@ -603,9 +602,9 @@ - - + + @@ -615,9 +614,9 @@ - - + + @@ -1007,9 +1006,9 @@ YES com.apple.InterfaceBuilder.CocoaPlugin - {{702, 557}, {850, 550}} + {{180, 303}, {850, 550}} com.apple.InterfaceBuilder.CocoaPlugin - {{702, 557}, {850, 550}} + {{180, 303}, {850, 550}} {{15, 196}, {850, 418}} @@ -1017,7 +1016,7 @@ {3.40282e+38, 3.40282e+38} {213, 107} - {{819, 1107}, {616, 0}} + {{297, 853}, {616, 0}} com.apple.InterfaceBuilder.CocoaPlugin {{132, 614}, {616, 0}} com.apple.InterfaceBuilder.CocoaPlugin