diff --git a/English.lproj/RepositoryWindow.xib b/English.lproj/RepositoryWindow.xib index 02b6c5f..7a5139c 100644 --- a/English.lproj/RepositoryWindow.xib +++ b/English.lproj/RepositoryWindow.xib @@ -2,10 +2,10 @@ 1050 - 10J567 + 10J869 1305 1038.35 - 462.00 + 461.00 com.apple.InterfaceBuilder.CocoaPlugin 1305 @@ -109,11 +109,9 @@ Clone Repository To - + 268 {{38, 14}, {40, 25}} - - YES -2080244224 @@ -156,11 +154,9 @@ Refresh - + 268 {{8, 14}, {32, 25}} - - YES -2080244224 @@ -199,11 +195,9 @@ View - + 268 {{0, 14}, {94, 25}} - - YES 67239424 @@ -402,6 +396,7 @@ {184, 483} + NSView @@ -410,12 +405,14 @@ {{185, 0}, {705, 483}} + NSView {{0, 31}, {890, 483}} + YES 2 sourceSplitView @@ -426,6 +423,7 @@ {{0, 1}, {515, 31}} + NSView @@ -440,6 +438,7 @@ {{20, 7}, {16, 16}} + 20746 100 @@ -449,6 +448,7 @@ {{41, 8}, {188, 14}} + YES 67239488 @@ -484,14 +484,16 @@ {{552, 0}, {246, 31}} + NSView {{7, 11}, {890, 514}} + - {{0, 0}, {1440, 878}} + {{0, 0}, {1680, 1028}} {600, 528} {1e+13, 1e+13} GitX @@ -533,14 +535,6 @@ 356 - - - splitView - - - - 357 - sourceListControlsView @@ -621,6 +615,14 @@ 423 + + + mainSplitView + + + + 424 + @@ -945,7 +947,7 @@ - 423 + 424 @@ -1026,10 +1028,10 @@ YES contentSplitView finderItem + mainSplitView progressIndicator sourceListControlsView sourceSplitView - splitView statusField terminalItem @@ -1037,10 +1039,10 @@ YES NSView NSToolbarItem + NSSplitView NSProgressIndicator NSView NSView - NSSplitView NSTextField NSToolbarItem @@ -1051,10 +1053,10 @@ YES contentSplitView finderItem + mainSplitView progressIndicator sourceListControlsView sourceSplitView - splitView statusField terminalItem @@ -1068,6 +1070,10 @@ finderItem NSToolbarItem + + mainSplitView + NSSplitView + progressIndicator NSProgressIndicator @@ -1080,10 +1086,6 @@ sourceSplitView NSView - - splitView - NSSplitView - statusField NSTextField diff --git a/GLFileView.m b/GLFileView.m index 52c677d..d51fa6a 100644 --- a/GLFileView.m +++ b/GLFileView.m @@ -219,6 +219,7 @@ [[view mainFrame] reload]; } } + lastFile=nil; } - (NSView *)accessoryViewForScopeBar:(MGScopeBar *)scopeBar diff --git a/GitX.xcodeproj/project.pbxproj b/GitX.xcodeproj/project.pbxproj index f4effcb..4fb3606 100644 --- a/GitX.xcodeproj/project.pbxproj +++ b/GitX.xcodeproj/project.pbxproj @@ -62,7 +62,6 @@ 31460CD6124185BA00B90AED /* TODO in Resources */ = {isa = PBXBuildFile; fileRef = 31460CB1124185BA00B90AED /* TODO */; }; 316E7202131EE9C600AFBB36 /* list_Template.png in Resources */ = {isa = PBXBuildFile; fileRef = 316E7200131EE9C600AFBB36 /* list_Template.png */; }; 316E7203131EE9C600AFBB36 /* sidebar_Template.png in Resources */ = {isa = PBXBuildFile; fileRef = 316E7201131EE9C600AFBB36 /* sidebar_Template.png */; }; - 3177607D133554A80025876E /* SearchWebView.js in Sources */ = {isa = PBXBuildFile; fileRef = 3177607C133554A80025876E /* SearchWebView.js */; }; 31776089133569350025876E /* SearchWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = 31776088133569350025876E /* SearchWebView.m */; }; 31DAA7ED1317737100463846 /* gitx_l_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 31DAA7EC1317737100463846 /* gitx_l_pub.pem */; }; 3BC07F4C0ED5A5C5009A7768 /* HistoryViewTemplate.png in Resources */ = {isa = PBXBuildFile; fileRef = 3BC07F4A0ED5A5C5009A7768 /* HistoryViewTemplate.png */; }; @@ -142,10 +141,6 @@ D8FDDA6F114335E8005647F6 /* PBGitSVStageItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA67114335E8005647F6 /* PBGitSVStageItem.m */; }; D8FDDA70114335E8005647F6 /* PBGitSVTagItem.m in Sources */ = {isa = PBXBuildFile; fileRef = D8FDDA69114335E8005647F6 /* PBGitSVTagItem.m */; }; D8FDDBF41143F318005647F6 /* AddRemote.png in Resources */ = {isa = PBXBuildFile; fileRef = D8FDDBF31143F318005647F6 /* AddRemote.png */; }; - EB2A734A0FEE3F09006601CF /* PBCollapsibleSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = EB2A73490FEE3F09006601CF /* PBCollapsibleSplitView.m */; }; - F50A411F0EBB874C00208746 /* mainSplitterBar.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F50A411D0EBB874C00208746 /* mainSplitterBar.tiff */; }; - F50A41200EBB874C00208746 /* mainSplitterDimple.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F50A411E0EBB874C00208746 /* mainSplitterDimple.tiff */; }; - F50A41230EBB875D00208746 /* PBNiceSplitView.m in Sources */ = {isa = PBXBuildFile; fileRef = F50A41220EBB875D00208746 /* PBNiceSplitView.m */; }; F50FE0E30E07BE9600854FCD /* PBGitRevisionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F50FE0E20E07BE9600854FCD /* PBGitRevisionCell.m */; }; F513085B0E0740F2000C8BCD /* PBQLOutlineView.m in Sources */ = {isa = PBXBuildFile; fileRef = F513085A0E0740F2000C8BCD /* PBQLOutlineView.m */; }; F5140DC90E8A8EB20091E9F3 /* RoundedRectangle.m in Sources */ = {isa = PBXBuildFile; fileRef = F5140DC80E8A8EB20091E9F3 /* RoundedRectangle.m */; }; @@ -355,7 +350,6 @@ 31460CB1124185BA00B90AED /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = ""; }; 316E7200131EE9C600AFBB36 /* list_Template.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = list_Template.png; sourceTree = ""; }; 316E7201131EE9C600AFBB36 /* sidebar_Template.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = sidebar_Template.png; sourceTree = ""; }; - 3177607C133554A80025876E /* SearchWebView.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; name = SearchWebView.js; path = html/lib/SearchWebView.js; sourceTree = ""; }; 31776087133569350025876E /* SearchWebView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SearchWebView.h; sourceTree = ""; }; 31776088133569350025876E /* SearchWebView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchWebView.m; sourceTree = ""; }; 31DAA7EC1317737100463846 /* gitx_l_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gitx_l_pub.pem; sourceTree = ""; }; @@ -477,12 +471,6 @@ D8FDDA69114335E8005647F6 /* PBGitSVTagItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitSVTagItem.m; sourceTree = ""; }; D8FDDA7311433634005647F6 /* PBSourceViewItems.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBSourceViewItems.h; sourceTree = ""; }; D8FDDBF31143F318005647F6 /* AddRemote.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = AddRemote.png; path = Images/AddRemote.png; sourceTree = ""; }; - EB2A73480FEE3F09006601CF /* PBCollapsibleSplitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBCollapsibleSplitView.h; sourceTree = ""; }; - EB2A73490FEE3F09006601CF /* PBCollapsibleSplitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBCollapsibleSplitView.m; sourceTree = ""; }; - F50A411D0EBB874C00208746 /* mainSplitterBar.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = mainSplitterBar.tiff; path = Images/mainSplitterBar.tiff; sourceTree = ""; }; - F50A411E0EBB874C00208746 /* mainSplitterDimple.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = mainSplitterDimple.tiff; path = Images/mainSplitterDimple.tiff; sourceTree = ""; }; - F50A41210EBB875D00208746 /* PBNiceSplitView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBNiceSplitView.h; sourceTree = ""; }; - F50A41220EBB875D00208746 /* PBNiceSplitView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBNiceSplitView.m; sourceTree = ""; }; F50FE0E10E07BE9600854FCD /* PBGitRevisionCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBGitRevisionCell.h; sourceTree = ""; }; F50FE0E20E07BE9600854FCD /* PBGitRevisionCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBGitRevisionCell.m; sourceTree = ""; }; F51308590E0740F2000C8BCD /* PBQLOutlineView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBQLOutlineView.h; sourceTree = ""; }; @@ -766,7 +754,6 @@ 29B97314FDCFA39411CA2CEA /* GitTest */ = { isa = PBXGroup; children = ( - 3177607C133554A80025876E /* SearchWebView.js */, F5886A080ED5D26B0066E74C /* SpeedTest */, 913D5E420E5563FD00CECEA2 /* cli */, D89E9B4C1218C22A0097A90B /* GitXScripting */, @@ -835,7 +822,6 @@ 02B41A5F123E307F00DFC531 /* PBCommitHookFailedSheet.xib */, F5F7D0641062E7940072C81C /* UpdateKey.pem */, 31DAA7EC1317737100463846 /* gitx_l_pub.pem */, - F50A41130EBB872D00208746 /* Widgets */, 47DBDB920E94F47200671A1E /* Preference Icons */, D26DC6440E782C9000C777B2 /* gitx.icns */, 8D1107310486CEB800E47090 /* Info.plist */, @@ -992,15 +978,6 @@ name = "Source View Items"; sourceTree = ""; }; - F50A41130EBB872D00208746 /* Widgets */ = { - isa = PBXGroup; - children = ( - F50A411D0EBB874C00208746 /* mainSplitterBar.tiff */, - F50A411E0EBB874C00208746 /* mainSplitterDimple.tiff */, - ); - name = Widgets; - sourceTree = ""; - }; F56174540E05887E001DCD79 /* Git */ = { isa = PBXGroup; children = ( @@ -1075,10 +1052,6 @@ F5140DC80E8A8EB20091E9F3 /* RoundedRectangle.m */, F56244070E9684B0002B6C44 /* PBUnsortableTableHeader.h */, F56244080E9684B0002B6C44 /* PBUnsortableTableHeader.m */, - F50A41210EBB875D00208746 /* PBNiceSplitView.h */, - F50A41220EBB875D00208746 /* PBNiceSplitView.m */, - EB2A73480FEE3F09006601CF /* PBCollapsibleSplitView.h */, - EB2A73490FEE3F09006601CF /* PBCollapsibleSplitView.m */, F5FC41F20EBCBD4300191D80 /* PBGitXProtocol.h */, F5FC41F30EBCBD4300191D80 /* PBGitXProtocol.m */, D823487410CB382C00944BDE /* Terminal.h */, @@ -1399,8 +1372,6 @@ F59116E60E843BB50072CCB1 /* PBGitCommitView.xib in Resources */, F5E92A230E88569500056E75 /* new_file.png in Resources */, F5E424110EA3E4D60046E362 /* PBDiffWindow.xib in Resources */, - F50A411F0EBB874C00208746 /* mainSplitterBar.tiff in Resources */, - F50A41200EBB874C00208746 /* mainSplitterDimple.tiff in Resources */, 056438B70ED0C40B00985397 /* DetailViewTemplate.png in Resources */, F56ADDD90ED19F9E002AC78F /* AddBranchTemplate.png in Resources */, F56ADDDA0ED19F9E002AC78F /* AddLabelTemplate.png in Resources */, @@ -1564,7 +1535,6 @@ F5E424150EA3E4E10046E362 /* PBDiffWindowController.m in Sources */, F5E424180EA3E4EB0046E362 /* PBWebDiffController.m in Sources */, F5FE6C030EB13BC900F30D12 /* PBServicesController.m in Sources */, - F50A41230EBB875D00208746 /* PBNiceSplitView.m in Sources */, F5FC41F40EBCBD4300191D80 /* PBGitXProtocol.m in Sources */, F574A2850EAE2EAC003F2CB1 /* PBRefController.m in Sources */, F5FC43FE0EBD08EE00191D80 /* PBRefMenuItem.m in Sources */, @@ -1573,7 +1543,6 @@ 47DBDB670E94EE8B00671A1E /* PBPrefsWindowController.m in Sources */, 47DBDBCA0E95016F00671A1E /* PBNSURLPathUserDefaultsTransfomer.m in Sources */, F562C8870FE1766C000EC528 /* NSString_RegEx.m in Sources */, - EB2A734A0FEE3F09006601CF /* PBCollapsibleSplitView.m in Sources */, F59F1DD5105C4FF300115F88 /* PBGitIndex.m in Sources */, D854948610D5C01B0083B917 /* PBCreateBranchSheet.m in Sources */, D8E3B34D10DCA958001096A3 /* PBCreateTagSheet.m in Sources */, @@ -1624,7 +1593,6 @@ 217FF0BB12A1CB3300785A65 /* PBGitResetController.m in Sources */, 217FF0BE12A1CB3E00785A65 /* PBRevealWithFinderCommand.m in Sources */, 65D58BC7132D48C2003F7290 /* PBResetSheet.m in Sources */, - 3177607D133554A80025876E /* SearchWebView.js in Sources */, 31776089133569350025876E /* SearchWebView.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Images/mainSplitterBar.tiff b/Images/mainSplitterBar.tiff deleted file mode 100644 index 0e7425d..0000000 Binary files a/Images/mainSplitterBar.tiff and /dev/null differ diff --git a/Images/mainSplitterDimple.tiff b/Images/mainSplitterDimple.tiff deleted file mode 100644 index 8f69b30..0000000 Binary files a/Images/mainSplitterDimple.tiff and /dev/null differ diff --git a/PBCollapsibleSplitView.h b/PBCollapsibleSplitView.h deleted file mode 100644 index 1a52c0d..0000000 --- a/PBCollapsibleSplitView.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// PBCollapsibleSplitView.h -// GitX -// -// This is a limited subclass of a SplitView. It adds methods to aid in -// collapsing/uncollapsing subviews using the mouse or programmatically. -// Right now it only works for vertical layouts and with two subviews. -// -// Created by Johannes Gilger on 6/21/09. -// Copyright 2009 Johannes Gilger. All rights reserved. -// - -#import -#import "PBNiceSplitView.h" - -@interface PBCollapsibleSplitView : PBNiceSplitView { - CGFloat topViewMin; - CGFloat bottomViewMin; - CGFloat splitterPosition; -} - -@property (readonly) CGFloat topViewMin; -@property (readonly) CGFloat bottomViewMin; - -- (void)setTopMin:(CGFloat)topMin andBottomMin:(CGFloat)bottomMin; -- (void)uncollapse; -- (void)keyDown:(NSEvent *)event; - -@end diff --git a/PBCollapsibleSplitView.m b/PBCollapsibleSplitView.m deleted file mode 100644 index 9665cac..0000000 --- a/PBCollapsibleSplitView.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// PBCollapsibleSplitView.m -// GitX -// -// Created by Johannes Gilger on 6/21/09. -// Copyright 2009 Johannes Gilger. All rights reserved. -// - -#import "PBCollapsibleSplitView.h" - -@implementation PBCollapsibleSplitView -@synthesize topViewMin, bottomViewMin; - -- (void)setTopMin:(CGFloat)topMin andBottomMin:(CGFloat)bottomMin { - topViewMin = topMin; - bottomViewMin = bottomMin; -} - -- (void)uncollapse { - for (NSView *subview in [self subviews]) { - if([self isSubviewCollapsed:subview]) { - [self setPosition:[self frame].size.height / 3 ofDividerAtIndex:0]; - [self adjustSubviews]; - } - } -} - -- (void)collapseSubview:(NSInteger)index { - // Already collapsed, just uncollapse - if ([self isSubviewCollapsed:[[self subviews] objectAtIndex:index]]) { - [self setPosition:splitterPosition ofDividerAtIndex:0]; - return; - } - - // Store splitterposition if the other view isn't collapsed - if (![self isSubviewCollapsed:[[self subviews] objectAtIndex:(index + 1) % 2]]) - splitterPosition = [[[self subviews] objectAtIndex:0] frame].size.height; - - if (index == 0) // Top view - [self setPosition:0.0 ofDividerAtIndex:0]; - else // Bottom view - [self setPosition:[self frame].size.height ofDividerAtIndex:0]; -} - -- (void)keyDown:(NSEvent *)event { - if (!([event modifierFlags] & NSShiftKeyMask && [event modifierFlags] & NSCommandKeyMask)) - return [super keyDown:event]; - - if ([event keyCode] == 0x07E) { // Up-Key - [self collapseSubview:0]; - [[self window] makeFirstResponder:[[self subviews] objectAtIndex:1]]; - } else if ([event keyCode] == 0x07D) { // Down-Key - [self collapseSubview:1]; - [[self window] makeFirstResponder:[[self subviews] objectAtIndex:0]]; - } -} -@end diff --git a/PBGitCommitController.m b/PBGitCommitController.m index f0e42e0..6ea4c95 100644 --- a/PBGitCommitController.m +++ b/PBGitCommitController.m @@ -11,7 +11,6 @@ #import "PBChangedFile.h" #import "PBWebChangesController.h" #import "PBGitIndex.h" -#import "PBNiceSplitView.h" #define kCommitSplitViewPositionDefault @"Commit SplitView Position" @@ -229,16 +228,16 @@ - (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex { - if (splitView == commitSplitView) + if (proposedMin < kCommitSplitViewTopViewMin) return kCommitSplitViewTopViewMin; - return proposedMin; } - (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex { - if (splitView == commitSplitView) - return [splitView frame].size.height - [splitView dividerThickness] - kCommitSplitViewBottomViewMin; + CGFloat max=[splitView frame].size.height - [splitView dividerThickness] - kCommitSplitViewBottomViewMin; + if (max < proposedMax) + return max; return proposedMax; } diff --git a/PBGitHistoryController.h b/PBGitHistoryController.h index 8d9472c..fe373f5 100644 --- a/PBGitHistoryController.h +++ b/PBGitHistoryController.h @@ -10,7 +10,6 @@ #import "PBGitCommit.h" #import "PBGitTree.h" #import "PBViewController.h" -#import "PBCollapsibleSplitView.h" @class PBGitSidebarController; @class PBWebHistoryController; @@ -32,7 +31,7 @@ IBOutlet NSOutlineView* fileBrowser; NSArray *currentFileBrowserSelectionPath; IBOutlet PBCommitList* commitList; - IBOutlet PBCollapsibleSplitView *historySplitView; + IBOutlet NSSplitView *historySplitView; IBOutlet PBWebHistoryController *webHistoryController; QLPreviewPanel* previewPanel; IBOutlet PBHistorySearchController *searchController; @@ -59,7 +58,7 @@ } @property (readonly) NSTreeController* treeController; -@property (readonly) PBCollapsibleSplitView *historySplitView; +@property (readonly) NSSplitView *historySplitView; @property (assign) int selectedCommitDetailsIndex; @property (retain) PBGitCommit *webCommit; @property (retain) PBGitTree* gitTree; @@ -107,7 +106,5 @@ - (BOOL)splitView:(NSSplitView *)sender canCollapseSubview:(NSView *)subview; - (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex; -- (CGFloat)splitView:(NSSplitView *)sender constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)offset; -- (CGFloat)splitView:(NSSplitView *)sender constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)offset; @end diff --git a/PBGitHistoryController.m b/PBGitHistoryController.m index 657b2df..ff1c597 100644 --- a/PBGitHistoryController.m +++ b/PBGitHistoryController.m @@ -83,7 +83,7 @@ // Add a menu that allows a user to select which columns to view [[commitList headerView] setMenu:[self tableColumnMenu]]; - [historySplitView setTopMin:58.0 andBottomMin:100.0]; +// [historySplitView setTopMin:58.0 andBottomMin:100.0]; [historySplitView setHidden:YES]; [self performSelector:@selector(restoreSplitViewPositiion) withObject:nil afterDelay:0]; @@ -628,42 +628,6 @@ return FALSE; } -- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex -{ - return historySplitView.topViewMin; -} - -- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex -{ - return [splitView frame].size.height - [splitView dividerThickness] - historySplitView.bottomViewMin; -} - -// while the user resizes the window keep the upper (history) view constant and just resize the lower view -// unless the lower view gets too small -- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize -{ - NSRect newFrame = [splitView frame]; - - float dividerThickness = [splitView dividerThickness]; - - NSView *upperView = [[splitView subviews] objectAtIndex:0]; - NSRect upperFrame = [upperView frame]; - upperFrame.size.width = newFrame.size.width; - - if ((newFrame.size.height - upperFrame.size.height - dividerThickness) < historySplitView.bottomViewMin) { - upperFrame.size.height = newFrame.size.height - historySplitView.bottomViewMin - dividerThickness; - } - - NSView *lowerView = [[splitView subviews] objectAtIndex:1]; - NSRect lowerFrame = [lowerView frame]; - lowerFrame.origin.y = upperFrame.size.height + dividerThickness; - lowerFrame.size.height = newFrame.size.height - lowerFrame.origin.y; - lowerFrame.size.width = newFrame.size.width; - - [upperView setFrame:upperFrame]; - [lowerView setFrame:lowerFrame]; -} - // NSSplitView does not save and restore the position of the SplitView correctly so do it manually - (void)saveSplitViewPosition { @@ -684,6 +648,23 @@ } +- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex +{ + if (proposedMin < 100) + return 100; + return proposedMin; +} + +- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMax ofSubviewAt:(NSInteger)dividerIndex +{ + CGFloat max=[splitView frame].size.height - [splitView dividerThickness] - 100; + if (max < proposedMax) + return max; + + return proposedMax; +} + + #pragma mark Repository Methods - (IBAction) createBranch:(id)sender diff --git a/PBGitWindowController.h b/PBGitWindowController.h index c481fa3..0eb02df 100644 --- a/PBGitWindowController.h +++ b/PBGitWindowController.h @@ -21,7 +21,7 @@ PBGitSidebarController *sidebarController; IBOutlet NSView *sourceListControlsView; - IBOutlet NSSplitView *splitView; + IBOutlet NSSplitView *mainSplitView; IBOutlet NSView *sourceSplitView; IBOutlet NSView *contentSplitView; @@ -30,6 +30,9 @@ IBOutlet NSToolbarItem *terminalItem; IBOutlet NSToolbarItem *finderItem; + + NSArray *splitViews; + NSMutableArray *splitViewsSize; } @property (assign) __weak PBGitRepository *repository; @@ -42,7 +45,9 @@ - (void)showMessageSheet:(NSString *)messageText infoText:(NSString *)infoText; - (void)showErrorSheet:(NSError *)error; - (void)showErrorSheetTitle:(NSString *)title message:(NSString *)message arguments:(NSArray *)arguments output:(NSString *)output; -- (void)collapseSplitView:(NSSplitView *)sp show:(BOOL)show; + +-(void)initChangeLayout; +-(IBAction)changeLayout:(id)sender; - (IBAction) showCommitView:(id)sender; - (IBAction) showHistoryView:(id)sender; @@ -50,7 +55,6 @@ - (IBAction) openInTerminal:(id)sender; - (IBAction) cloneTo:(id)sender; - (IBAction) refresh:(id)sender; -- (IBAction) changeLayout:(id)sender; - (void)setHistorySearch:(NSString *)searchString mode:(NSInteger)mode; diff --git a/PBGitWindowController.m b/PBGitWindowController.m index 929bf61..bca2b1f 100644 --- a/PBGitWindowController.m +++ b/PBGitWindowController.m @@ -25,19 +25,19 @@ { if (!(self = [self initWithWindowNibName:@"RepositoryWindow"])) return nil; - + self.repository = theRepository; - + return self; } - (void)windowWillClose:(NSNotification *)notification { //DLog(@"Window will close!"); - + if (sidebarController) [sidebarController closeView]; - + if (contentController) [contentController removeObserver:self forKeyPath:@"status"]; } @@ -59,22 +59,23 @@ [[self window] setDelegate:self]; [[self window] setAutorecalculatesContentBorderThickness:NO forEdge:NSMinYEdge]; [[self window] setContentBorderThickness:31.0f forEdge:NSMinYEdge]; - + sidebarController = [[PBGitSidebarController alloc] initWithRepository:repository superController:self]; [[sidebarController view] setFrame:[sourceSplitView bounds]]; [sourceSplitView addSubview:[sidebarController view]]; [sourceListControlsView addSubview:sidebarController.sourceListControlsView]; - + [[statusField cell] setBackgroundStyle:NSBackgroundStyleRaised]; [progressIndicator setUsesThreadedAnimation:YES]; - + NSImage *finderImage = [[NSWorkspace sharedWorkspace] iconForFileType:NSFileTypeForHFSTypeCode(kFinderIcon)]; [finderItem setImage:finderImage]; - + NSImage *terminalImage = [[NSWorkspace sharedWorkspace] iconForFile:@"/Applications/Utilities/Terminal.app/"]; [terminalItem setImage:terminalImage]; - + [self showWindow:nil]; + [self initChangeLayout]; } - (void) removeAllContentSubViews @@ -88,17 +89,17 @@ { if (!controller || (contentController == controller)) return; - + if (contentController) [contentController removeObserver:self forKeyPath:@"status"]; - + [self removeAllContentSubViews]; - + contentController = controller; [[contentController view] setFrame:[contentSplitView bounds]]; [contentSplitView addSubview:[contentController view]]; - + [self setNextResponder: contentController]; [[self window] makeFirstResponder:[contentController firstResponder]]; [contentController updateView]; @@ -183,14 +184,14 @@ { NSString *status = contentController.status; BOOL isBusy = contentController.isBusy; - + if (!status) { status = @""; isBusy = NO; } - + [statusField setStringValue:status]; - + if (isBusy) { [progressIndicator startAnimation:self]; [progressIndicator setHidden:NO]; @@ -207,7 +208,7 @@ [self updateStatus]; return; } - + [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; } @@ -216,46 +217,77 @@ [sidebarController setHistorySearch:searchString mode:mode]; } -- (IBAction) changeLayout:(id)sender{ - NSSplitView *sp=nil; - switch ([sender selectedSegment]) { - case 0: - sp=splitView; - break; - case 1: - sp=[[sidebarController historyViewController] historySplitView]; - break; - } - DLog(@"sp=%@",sp); - if(sp!=nil) { - [self collapseSplitView:sp show:[sender isSelectedForSegment:[sender selectedSegment]]]; - } +#pragma mark - SplitView changeLayout +-(void)initChangeLayout +{ + splitViews=[NSArray arrayWithObjects:mainSplitView,[[sidebarController historyViewController] historySplitView], nil]; + splitViewsSize=[NSMutableArray arrayWithCapacity:[splitViews count]]; + for (int n=0; n<[splitViews count]; n++) { + NSSplitView *splitView=[splitViews objectAtIndex:n]; + NSView *left=[[splitView subviews] objectAtIndex:0]; + [splitViewsSize addObject:[NSNumber numberWithInt:[left frame].size.width]]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(resizeSubviewsHandler:) + name:NSSplitViewWillResizeSubviewsNotification + object:splitView + ]; + } } -- (void)collapseSplitView:(NSSplitView *)sp show:(BOOL)show{ - NSView *clipview = [[sp subviews] objectAtIndex:0]; - NSRect clipFrame = [clipview frame]; +- (IBAction)changeLayout:(id)sender +{ + NSInteger index=[sender selectedSegment]; + NSSplitView *splitView=[splitViews objectAtIndex:index]; + NSView *left=[[splitView subviews] objectAtIndex:0]; + + CGFloat pos; + if ([splitView isSubviewCollapsed:left]) + pos=[[splitViewsSize objectAtIndex:index] intValue]; + else + pos=[splitView minPossiblePositionOfDividerAtIndex:0]; - if ([sp isVertical]) { - clipFrame.size.width = kGitSplitViewMinWidth * show; - }else{ - clipFrame.size.height = kGitSplitViewMinWidth * show; - } + [splitView setPosition:pos ofDividerAtIndex:0 ]; +} - [[clipview animator] setFrame:clipFrame]; - [sp adjustSubviews]; +- (void)resizeSubviewsHandler:(NSNotification *)notif +{ + NSSplitView *splitView=[notif object]; + NSInteger index=[splitViews indexOfObject:splitView]; + NSView *left=[[splitView subviews] objectAtIndex:0]; + + NSNumber *pos; + if([splitView isVertical]){ + pos=[NSNumber numberWithInt:[left frame].size.width]; + }else{ + pos=[NSNumber numberWithInt:[left frame].size.height]; + } + + [splitViewsSize removeObjectAtIndex:index]; + [splitViewsSize insertObject:pos atIndex:index]; } #pragma mark - #pragma mark SplitView Delegates +- (BOOL)splitView:(NSSplitView *)sp canCollapseSubview:(NSView *)subview +{ + return TRUE; +} + +- (BOOL)splitView:(NSSplitView *)splitView shouldCollapseSubview:(NSView *)subview forDoubleClickOnDividerAtIndex:(NSInteger)dividerIndex +{ + NSUInteger index = [[splitView subviews] indexOfObject:subview]; + return index==0; +} + #pragma mark min/max widths while moving the divider - (CGFloat)splitView:(NSSplitView *)view constrainMinCoordinate:(CGFloat)proposedMin ofSubviewAt:(NSInteger)dividerIndex { if (proposedMin < kGitSplitViewMinWidth) return kGitSplitViewMinWidth; - + return proposedMin; } @@ -263,7 +295,7 @@ { if (dividerIndex == 0) return kGitSplitViewMaxWidth; - + return proposedMax; } @@ -272,19 +304,19 @@ - (void)splitView:(NSSplitView *)sender resizeSubviewsWithOldSize:(NSSize)oldSize { NSRect newFrame = [sender frame]; - + float dividerThickness = [sender dividerThickness]; - + NSView *sourceView = [[sender subviews] objectAtIndex:0]; NSRect sourceFrame = [sourceView frame]; sourceFrame.size.height = newFrame.size.height; - + NSView *mainView = [[sender subviews] objectAtIndex:1]; NSRect mainFrame = [mainView frame]; mainFrame.origin.x = sourceFrame.size.width + dividerThickness; mainFrame.size.width = newFrame.size.width - mainFrame.origin.x; mainFrame.size.height = newFrame.size.height; - + [sourceView setFrame:sourceFrame]; [mainView setFrame:mainFrame]; } diff --git a/PBNiceSplitView.h b/PBNiceSplitView.h deleted file mode 100644 index f5969e7..0000000 --- a/PBNiceSplitView.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// PBNiceSplitView.h -// GitX -// -// Created by Pieter de Bie on 31-10-08. -// Copyright 2008 Pieter de Bie. All rights reserved. -// - -#import - -@interface PBNiceSplitView : NSSplitView { - -} - -@end diff --git a/PBNiceSplitView.m b/PBNiceSplitView.m deleted file mode 100644 index 994e6d4..0000000 --- a/PBNiceSplitView.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// PBNiceSplitView.m -// GitX -// -// Created by Pieter de Bie on 31-10-08. -// Copyright 2008 Pieter de Bie. All rights reserved. -// - -#import "PBNiceSplitView.h" - -static NSImage *bar; -static NSImage *grip; - -@implementation PBNiceSplitView - -+(void) initialize -{ - NSString *barPath = [[NSBundle mainBundle] pathForResource:@"mainSplitterBar" ofType:@"tiff"]; - bar = [[NSImage alloc] initWithContentsOfFile: barPath]; - [bar setFlipped: YES]; - - NSString *gripPath = [[NSBundle mainBundle] pathForResource:@"mainSplitterDimple" ofType:@"tiff"]; - grip = [[NSImage alloc] initWithContentsOfFile: gripPath]; - [grip setFlipped: YES]; -} - -- (void)drawDividerInRect:(NSRect)aRect -{ - // Draw bar and grip onto the canvas - NSRect gripRect = aRect; - gripRect.origin.x = (NSMidX(aRect) - ([grip size].width/2)); - gripRect.size.width = 8; - - [self lockFocus]; - [bar drawInRect:aRect fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0]; - [grip drawInRect:gripRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0]; - [self unlockFocus]; -} - -- (CGFloat)dividerThickness -{ - return 10.0; -} - -@end