WebHistoryController: Move ref deletion to RefController

That's why it's there, after all. This also makes the system
more robust and catches some more errors.

The next thing this enables is to also allow right-clicking
on refs in the commit list.
This commit is contained in:
Pieter de Bie
2008-11-01 22:20:22 +01:00
parent 8a399c0793
commit e02ee5231c
9 changed files with 158 additions and 118 deletions
+2 -2
View File
@@ -8,11 +8,11 @@
#import <Cocoa/Cocoa.h>
#import <WebKit/WebView.h>
#import "PBWebHistoryController.h"
#import "PBGitHistoryController.h"
@interface PBCommitList : NSTableView {
IBOutlet WebView* webView;
IBOutlet PBWebHistoryController* webController;
IBOutlet id webController;
IBOutlet PBGitHistoryController *controller;
NSPoint mouseDownPoint;
+2 -1
View File
@@ -8,6 +8,7 @@
#import "PBCommitList.h"
#import "PBGitRevisionCell.h"
#import "PBWebHistoryController.h"
@implementation PBCommitList
@@ -29,7 +30,7 @@
[webView scrollPageDown: self];
}
else if ([character rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@"jkcv"]].location == 0)
[webController sendKey: character];
[((PBWebHistoryController *)webController) sendKey: character];
else
[super keyDown: event];
}
+95 -78
View File
@@ -1030,7 +1030,7 @@
<object class="NSCustomObject" id="892732705">
<string key="NSClassName">PBRefController</string>
</object>
<object class="NSWindowTemplate" id="437613726">
<object class="NSWindowTemplate" id="788935875">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{196, 376}, {346, 134}}</string>
@@ -1039,26 +1039,26 @@
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
<object class="NSView" key="NSWindowView" id="565915384">
<object class="NSView" key="NSWindowView" id="485056960">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSTextField" id="186247158">
<reference key="NSNextResponder" ref="565915384"/>
<object class="NSTextField" id="464699398">
<reference key="NSNextResponder" ref="485056960"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{145, 61}, {96, 22}}</string>
<reference key="NSSuperview" ref="565915384"/>
<reference key="NSSuperview" ref="485056960"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="895374029">
<object class="NSTextFieldCell" key="NSCell" id="403186405">
<int key="NSCellFlags">-1804468671</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents"/>
<reference key="NSSupport" ref="924107556"/>
<string key="NSPlaceholderString">topic</string>
<reference key="NSControlView" ref="186247158"/>
<reference key="NSControlView" ref="464699398"/>
<bool key="NSDrawsBackground">YES</bool>
<object class="NSColor" key="NSBackgroundColor" id="643226565">
<object class="NSColor" key="NSBackgroundColor" id="436720888">
<int key="NSColorSpace">6</int>
<string key="NSCatalogName">System</string>
<string key="NSColorName">textBackgroundColor</string>
@@ -1072,50 +1072,50 @@
</object>
</object>
</object>
<object class="NSTextField" id="82170198">
<reference key="NSNextResponder" ref="565915384"/>
<object class="NSTextField" id="335058248">
<reference key="NSNextResponder" ref="485056960"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 63}, {123, 17}}</string>
<reference key="NSSuperview" ref="565915384"/>
<reference key="NSSuperview" ref="485056960"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="877044827">
<object class="NSTextFieldCell" key="NSCell" id="297815188">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">New Branch Name:</string>
<reference key="NSSupport" ref="924107556"/>
<reference key="NSControlView" ref="82170198"/>
<reference key="NSControlView" ref="335058248"/>
<reference key="NSBackgroundColor" ref="457244339"/>
<reference key="NSTextColor" ref="57062640"/>
</object>
</object>
<object class="NSTextField" id="514960587">
<reference key="NSNextResponder" ref="565915384"/>
<object class="NSTextField" id="743309379">
<reference key="NSNextResponder" ref="485056960"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{17, 97}, {134, 17}}</string>
<reference key="NSSuperview" ref="565915384"/>
<reference key="NSSuperview" ref="485056960"/>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="352434535">
<object class="NSTextFieldCell" key="NSCell" id="357185611">
<int key="NSCellFlags">68288064</int>
<int key="NSCellFlags2">272630784</int>
<string key="NSContents">Create a new branch</string>
<reference key="NSSupport" ref="924107556"/>
<reference key="NSControlView" ref="514960587"/>
<reference key="NSControlView" ref="743309379"/>
<reference key="NSBackgroundColor" ref="457244339"/>
<reference key="NSTextColor" ref="57062640"/>
</object>
</object>
<object class="NSButton" id="210739614">
<reference key="NSNextResponder" ref="565915384"/>
<object class="NSButton" id="205526588">
<reference key="NSNextResponder" ref="485056960"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{236, 12}, {96, 32}}</string>
<reference key="NSSuperview" ref="565915384"/>
<reference key="NSSuperview" ref="485056960"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="76541035">
<object class="NSButtonCell" key="NSCell" id="833703662">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">OK</string>
<reference key="NSSupport" ref="924107556"/>
<reference key="NSControlView" ref="210739614"/>
<reference key="NSControlView" ref="205526588"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
@@ -1124,18 +1124,18 @@
<int key="NSPeriodicInterval">25</int>
</object>
</object>
<object class="NSButton" id="641993559">
<reference key="NSNextResponder" ref="565915384"/>
<object class="NSButton" id="95435638">
<reference key="NSNextResponder" ref="485056960"/>
<int key="NSvFlags">268</int>
<string key="NSFrame">{{139, 13}, {96, 32}}</string>
<reference key="NSSuperview" ref="565915384"/>
<reference key="NSSuperview" ref="485056960"/>
<bool key="NSEnabled">YES</bool>
<object class="NSButtonCell" key="NSCell" id="835099729">
<object class="NSButtonCell" key="NSCell" id="898071955">
<int key="NSCellFlags">67239424</int>
<int key="NSCellFlags2">134217728</int>
<string key="NSContents">Cancel</string>
<reference key="NSSupport" ref="924107556"/>
<reference key="NSControlView" ref="641993559"/>
<reference key="NSControlView" ref="95435638"/>
<int key="NSButtonFlags">-2038284033</int>
<int key="NSButtonFlags2">129</int>
<string key="NSAlternateContents"/>
@@ -1220,7 +1220,7 @@
<bool key="NSToolbarIsUserRemovable">YES</bool>
<int key="NSToolbarItemVisibilityPriority">0</int>
</object>
<object class="NSToolbarItem" id="82631248">
<object class="NSToolbarItem" id="622965048">
<object class="NSMutableString" key="NSToolbarItemIdentifier">
<characters key="NS.bytes">6F542219-165D-4621-B546-D8E7DF547248</characters>
</object>
@@ -1264,7 +1264,7 @@
<reference key="NSControlView" ref="845792858"/>
<bool key="NSDrawsBackground">YES</bool>
<int key="NSTextBezelStyle">1</int>
<reference key="NSBackgroundColor" ref="643226565"/>
<reference key="NSBackgroundColor" ref="436720888"/>
<reference key="NSTextColor" ref="57062640"/>
<object class="NSButtonCell" key="NSSearchButtonCell">
<int key="NSCellFlags">130560</int>
@@ -1471,7 +1471,7 @@
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="215578734"/>
<reference ref="776753395"/>
<reference ref="82631248"/>
<reference ref="622965048"/>
<reference ref="455812118"/>
<reference ref="633367776"/>
<reference ref="479447135"/>
@@ -1481,7 +1481,7 @@
<reference ref="215578734"/>
<reference ref="776753395"/>
<reference ref="455812118"/>
<reference ref="82631248"/>
<reference ref="622965048"/>
<reference ref="633367776"/>
<reference ref="479447135"/>
</object>
@@ -2046,8 +2046,8 @@
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performClick:</string>
<reference key="source" ref="210739614"/>
<reference key="destination" ref="186247158"/>
<reference key="source" ref="205526588"/>
<reference key="destination" ref="464699398"/>
</object>
<int key="connectionID">248</int>
</object>
@@ -2055,7 +2055,7 @@
<object class="IBOutletConnection" key="connection">
<string key="label">newBranchSheet</string>
<reference key="source" ref="892732705"/>
<reference key="destination" ref="437613726"/>
<reference key="destination" ref="788935875"/>
</object>
<int key="connectionID">249</int>
</object>
@@ -2063,7 +2063,7 @@
<object class="IBOutletConnection" key="connection">
<string key="label">newBranchName</string>
<reference key="source" ref="892732705"/>
<reference key="destination" ref="186247158"/>
<reference key="destination" ref="464699398"/>
</object>
<int key="connectionID">250</int>
</object>
@@ -2071,7 +2071,7 @@
<object class="IBActionConnection" key="connection">
<string key="label">closeSheet:</string>
<reference key="source" ref="892732705"/>
<reference key="destination" ref="641993559"/>
<reference key="destination" ref="95435638"/>
</object>
<int key="connectionID">252</int>
</object>
@@ -2079,7 +2079,7 @@
<object class="IBActionConnection" key="connection">
<string key="label">saveSheet:</string>
<reference key="source" ref="892732705"/>
<reference key="destination" ref="210739614"/>
<reference key="destination" ref="205526588"/>
</object>
<int key="connectionID">253</int>
</object>
@@ -2087,10 +2087,18 @@
<object class="IBActionConnection" key="connection">
<string key="label">addRef:</string>
<reference key="source" ref="892732705"/>
<reference key="destination" ref="82631248"/>
<reference key="destination" ref="622965048"/>
</object>
<int key="connectionID">255</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">refController</string>
<reference key="source" ref="568231003"/>
<reference key="destination" ref="892732705"/>
</object>
<int key="connectionID">258</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
@@ -2475,95 +2483,95 @@
</object>
<object class="IBObjectRecord">
<int key="objectID">236</int>
<reference key="object" ref="437613726"/>
<reference key="object" ref="788935875"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="565915384"/>
<reference ref="485056960"/>
</object>
<reference key="parent" ref="1002"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">237</int>
<reference key="object" ref="565915384"/>
<reference key="object" ref="485056960"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="641993559"/>
<reference ref="210739614"/>
<reference ref="514960587"/>
<reference ref="82170198"/>
<reference ref="186247158"/>
<reference ref="95435638"/>
<reference ref="205526588"/>
<reference ref="743309379"/>
<reference ref="335058248"/>
<reference ref="464699398"/>
</object>
<reference key="parent" ref="437613726"/>
<reference key="parent" ref="788935875"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">238</int>
<reference key="object" ref="641993559"/>
<reference key="object" ref="95435638"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="835099729"/>
<reference ref="898071955"/>
</object>
<reference key="parent" ref="565915384"/>
<reference key="parent" ref="485056960"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">239</int>
<reference key="object" ref="210739614"/>
<reference key="object" ref="205526588"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="76541035"/>
<reference ref="833703662"/>
</object>
<reference key="parent" ref="565915384"/>
<reference key="parent" ref="485056960"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">240</int>
<reference key="object" ref="514960587"/>
<reference key="object" ref="743309379"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="352434535"/>
<reference ref="357185611"/>
</object>
<reference key="parent" ref="565915384"/>
<reference key="parent" ref="485056960"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">241</int>
<reference key="object" ref="82170198"/>
<reference key="object" ref="335058248"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="877044827"/>
<reference ref="297815188"/>
</object>
<reference key="parent" ref="565915384"/>
<reference key="parent" ref="485056960"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">242</int>
<reference key="object" ref="186247158"/>
<reference key="object" ref="464699398"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="895374029"/>
<reference ref="403186405"/>
</object>
<reference key="parent" ref="565915384"/>
<reference key="parent" ref="485056960"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">243</int>
<reference key="object" ref="895374029"/>
<reference key="parent" ref="186247158"/>
<reference key="object" ref="403186405"/>
<reference key="parent" ref="464699398"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">244</int>
<reference key="object" ref="877044827"/>
<reference key="parent" ref="82170198"/>
<reference key="object" ref="297815188"/>
<reference key="parent" ref="335058248"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">245</int>
<reference key="object" ref="352434535"/>
<reference key="parent" ref="514960587"/>
<reference key="object" ref="357185611"/>
<reference key="parent" ref="743309379"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">246</int>
<reference key="object" ref="76541035"/>
<reference key="parent" ref="210739614"/>
<reference key="object" ref="833703662"/>
<reference key="parent" ref="205526588"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">247</int>
<reference key="object" ref="835099729"/>
<reference key="parent" ref="641993559"/>
<reference key="object" ref="898071955"/>
<reference key="parent" ref="95435638"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">113</int>
@@ -2575,7 +2583,7 @@
<reference ref="479447135"/>
<reference ref="776753395"/>
<reference ref="215578734"/>
<reference ref="82631248"/>
<reference ref="622965048"/>
</object>
<reference key="parent" ref="1002"/>
<string key="objectName">History Toolbar</string>
@@ -2619,7 +2627,7 @@
</object>
<object class="IBObjectRecord">
<int key="objectID">254</int>
<reference key="object" ref="82631248"/>
<reference key="object" ref="622965048"/>
<reference key="parent" ref="65173285"/>
</object>
<object class="IBObjectRecord">
@@ -2931,7 +2939,7 @@
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">257</int>
<int key="maxID">258</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
@@ -3151,8 +3159,17 @@
<string key="className">PBWebHistoryController</string>
<string key="superclassName">PBWebController</string>
<object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">historyController</string>
<string key="NS.object.0">PBGitHistoryController</string>
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMutableArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>historyController</string>
<string>refController</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>PBGitHistoryController</string>
<string>PBRefController</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
-1
View File
@@ -39,7 +39,6 @@ extern NSString* PBGitRepositoryErrorDomain;
- (BOOL) reloadRefs;
- (void) addRef:(PBGitRef *)ref fromParameters:(NSArray *)params;
- (BOOL) removeRef:(NSString *)ref;
- (void) lazyReload;
- (PBGitRevSpecifier*) headRef;
-13
View File
@@ -387,17 +387,4 @@ NSString* PBGitRepositoryErrorDomain = @"GitXErrorDomain";
return nil;
}
- (BOOL) removeRef:(NSString *)ref
{
int i;
[self outputForArguments:[NSArray arrayWithObjects:@"branch", @"-D", ref, nil] retValue:&i];
if (i == 0) {
// Todo: We can do better than this!
[self reloadRefs];
[revisionList reload];
return YES;
}
return NO;
}
@end
+4 -1
View File
@@ -9,6 +9,8 @@
#import <Cocoa/Cocoa.h>
#import "PBGitHistoryController.h"
#import "PBCommitList.h"
#import "PBGitRef.h"
#import "PBGitCommit.h"
@interface PBRefController : NSObject {
IBOutlet __weak PBGitHistoryController *historyController;
@@ -19,8 +21,9 @@
IBOutlet NSTextField *newBranchName;
}
- (IBAction) addRef:(id)sender;
- (IBAction)addRef:(id)sender;
- (IBAction)closeSheet:(id) sender;
- (IBAction)saveSheet:(id) sender;
- (NSArray *) menuItemsForRef:(PBGitRef *)ref commit:(PBGitCommit *)commit;
@end
+43
View File
@@ -8,6 +8,17 @@
#import "PBRefController.h"
#import "PBGitRevisionCell.h"
@interface RefMenuItem : NSMenuItem
{
PBGitRef *ref;
PBGitCommit *commit;
}
@property (retain) PBGitCommit *commit;
@property (retain) PBGitRef *ref;
@end
@implementation RefMenuItem
@synthesize ref, commit;
@end
@implementation PBRefController
@@ -16,6 +27,32 @@
[commitList registerForDraggedTypes:[NSArray arrayWithObject:@"PBGitRef"]];
}
- (void) removeRef:(RefMenuItem *) sender
{
int ret = 1;
[historyController.repository outputForArguments:[NSArray arrayWithObjects:@"update-ref", @"-d", [[sender ref] ref], nil] retValue: &ret];
if (ret) {
NSLog(@"Removing ref failed!");
return;
}
[[sender commit] removeRef:[sender ref]];
[commitController rearrangeObjects];
}
- (NSArray *) menuItemsForRef:(PBGitRef *)ref commit:(PBGitCommit *)commit
{
RefMenuItem *item = [[RefMenuItem alloc] initWithTitle:@"Remove"
action:@selector(removeRef:)
keyEquivalent: @""];
[item setTarget: self];
[item setRef: ref];
[item setCommit:commit];
return [NSArray arrayWithObject: item];
}
# pragma mark Tableview delegate methods
- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard
{
NSPoint location = [tv convertPointFromBase:[(PBCommitList *)tv mouseDownPoint]];
@@ -116,6 +153,12 @@
PBGitCommit *commit = [[commitController selectedObjects] objectAtIndex:0];
int retValue = 1;
[historyController.repository outputForArguments:[NSArray arrayWithObjects:@"update-ref", @"-mCreate branch from GitX", branchName, [commit sha], NULL] retValue:&retValue];
if (retValue)
{
NSLog(@"Creating ref failed!");
return;
}
[commit addRef:[PBGitRef refFromString:branchName]];
[commitController rearrangeObjects];
}
+3
View File
@@ -11,9 +11,12 @@
#import "PBGitCommit.h"
#import "PBGitHistoryController.h"
#import "PBRefController.h"
@interface PBWebHistoryController : PBWebController {
IBOutlet PBGitHistoryController* historyController;
IBOutlet PBRefController *refController;
NSString* currentSha;
NSString* diff;
}
+9 -22
View File
@@ -7,16 +7,6 @@
//
#import "PBWebHistoryController.h"
@interface RefMenuItem : NSMenuItem
{
NSString *ref;
}
@property (copy) NSString *ref;
@end
@implementation RefMenuItem
@synthesize ref;
@end
@implementation PBWebHistoryController
@@ -78,12 +68,6 @@
[a setString:source forType: NSStringPboardType];
}
- (void) removeRef:(RefMenuItem *)sender
{
if (![historyController.repository removeRef: [sender ref]])
NSLog(@"Deletion failed!");
}
- (NSArray *) webView:(WebView *)sender
contextMenuItemsForElement:(NSDictionary *)element
defaultMenuItems:(NSArray *)defaultMenuItems
@@ -98,12 +82,15 @@ contextMenuItemsForElement:(NSDictionary *)element
if (![[node className] hasPrefix:@"refs "])
return defaultMenuItems;
RefMenuItem *item = [[RefMenuItem alloc] initWithTitle:@"Remove"
action:@selector(removeRef:)
keyEquivalent: @""];
[item setTarget: self];
[item setRef: [[[node childNodes] item:0] textContent]];
return [NSArray arrayWithObject: item];
NSString *selectedRefString = [[[node childNodes] item:0] textContent];
for (PBGitRef *ref in historyController.webCommit.refs)
{
if ([[ref shortName] isEqualToString:selectedRefString])
return [refController menuItemsForRef:ref commit:historyController.webCommit];
}
NSLog(@"Could not find selected ref!");
return defaultMenuItems;
}