diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m
index ddd96941..a1e73189 100644
--- a/MacPass/MPAppDelegate.m
+++ b/MacPass/MPAppDelegate.m
@@ -16,6 +16,10 @@
@property (retain) MPSettingsController *settingsController;
@property (retain) MPMainWindowController *mainWindowController;
+@property (assign) IBOutlet NSMenuItem *toggleOutlineViewMenuItem;
+@property (assign) IBOutlet NSMenuItem *toggleInspectorViewMenuItem;
+
+- (void)_setupMenues;
- (IBAction)showPreferences:(id)sender;
@end
@@ -25,6 +29,8 @@
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.mainWindowController = [[[MPMainWindowController alloc] init] autorelease];
[self.mainWindowController showWindow:[self.mainWindowController window]];
+ [self _setupMenues];
+
}
- (void)dealloc {
@@ -37,6 +43,13 @@
return [[NSBundle mainBundle] infoDictionary][@"CFBundleName"];
}
+#pragma mark Setup
+
+- (void)_setupMenues {
+ [self.toggleInspectorViewMenuItem setAction:@selector(toggleInspector:)];
+ [self.toggleOutlineViewMenuItem setAction:@selector(toggleOutlineView:)];
+}
+
#pragma mark Menu Actions
- (void)showMainWindow:(id)sender {
diff --git a/MacPass/MPMainWindowController.h b/MacPass/MPMainWindowController.h
index 87049aa7..94f11103 100644
--- a/MacPass/MPMainWindowController.h
+++ b/MacPass/MPMainWindowController.h
@@ -31,5 +31,6 @@
*/
- (void)clearFilter:(id)sender;
- (void)toggleInspector:(id)sender;
+- (void)toggleOutlineView:(id)sender;
@end
diff --git a/MacPass/MPMainWindowController.m b/MacPass/MPMainWindowController.m
index 2d0cbdf2..b401ff5d 100644
--- a/MacPass/MPMainWindowController.m
+++ b/MacPass/MPMainWindowController.m
@@ -17,8 +17,9 @@
#import "MPInspectorTabViewController.h"
#import "MPAppDelegate.h"
+#define MIN_WINDOW_WIDTH MPMainWindowSplitViewDelegateMinimumContentWidth + MPMainWindowSplitViewDelegateMinimumOutlineWidth + [self.splitView dividerThickness]
+
static CGFloat _outlineSplitterPosition;
-static CGFloat _inspectorSplitterPosition;
@interface MPMainWindowController ()
@@ -46,6 +47,10 @@ static CGFloat _inspectorSplitterPosition;
- (void)_setContentViewController:(MPViewController *)viewController;
- (void)_updateWindowTitle;
+/* window reszing and content checks */
+- (BOOL)_windowsIsLargeEnoughForInspectorView;
+- (void)_resizeWindowForInspectorView;
+
@end
@implementation MPMainWindowController
@@ -94,8 +99,7 @@ static CGFloat _inspectorSplitterPosition;
[[self.welcomeText cell] setBackgroundStyle:NSBackgroundStyleRaised];
- const CGFloat minimumWindowWidth = MPMainWindowSplitViewDelegateMinimumContentWidth + MPMainWindowSplitViewDelegateMinimumOutlineWidth + [self.splitView dividerThickness];
- [self.window setMinSize:NSMakeSize( minimumWindowWidth, 400)];
+ [self.window setMinSize:NSMakeSize( MIN_WINDOW_WIDTH, 400)];
_toolbar = [[NSToolbar alloc] initWithIdentifier:@"MainWindowToolbar"];
[self.toolbar setAllowsUserCustomization:YES];
@@ -191,18 +195,47 @@ static CGFloat _inspectorSplitterPosition;
NSView *inspectorView = [self.splitView subviews][MPSplitViewInspectorViewIndex];
const BOOL collapsed = [self.splitView isSubviewCollapsed:inspectorView];
if(collapsed) {
- CGFloat splitterPosition = MAX(MPMainWindowSplitViewDelegateMinimumInspectorWidth, _inspectorSplitterPosition);
+ if( NO == [self _windowsIsLargeEnoughForInspectorView]) {
+ [self _resizeWindowForInspectorView];
+ }
+ CGFloat splitterPosition = [self.splitView frame].size.width - MPMainWindowSplitViewDelegateMinimumInspectorWidth;
[self.splitView setPosition:splitterPosition ofDividerAtIndex:MPSplitViewInspectorDividerIndex];
}
else {
- _inspectorSplitterPosition = [inspectorView frame].origin.x;
- CGFloat splitterPosition = [inspectorView frame].origin.x * [inspectorView frame].size.width;
- [[NSAnimationContext currentContext] setDuration:2];
- [[self.splitView animator] setPosition:splitterPosition ofDividerAtIndex:MPSplitViewInspectorDividerIndex];
+ CGFloat splitterPosition = [self.splitView frame].size.width;
+ [self.splitView setPosition:splitterPosition ofDividerAtIndex:MPSplitViewInspectorDividerIndex];
}
[inspectorView setHidden:!collapsed];
}
+- (void)toggleOutlineView:(id)sender {
+
+}
+
+- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
+ SEL menuAction = [menuItem action];
+ if(menuAction == @selector(toggleOutlineView:)) {
+ NSView *outlineView = [self.splitView subviews][MPSplitViewOutlineViewIndex];
+ BOOL outlineIsHidden = [self.splitView isSubviewCollapsed:outlineView];
+ if(outlineIsHidden) {
+ [menuItem setTitle:@"Show Outline View"];
+ }
+ [menuItem setTitle:@"Hide Outline View"];
+ return YES;
+ }
+
+ if( menuAction == @selector(toggleInspector:) ) {
+ NSView *inspectorView = [self.splitView subviews][MPSplitViewInspectorViewIndex];
+ BOOL inspectorIsHidden = [self.splitView isSubviewCollapsed:inspectorView];
+ if(inspectorIsHidden) {
+ [menuItem setTitle:@"Show Inspecotr"];
+ }
+ [menuItem setTitle:@"Hide Inspector"];
+ return YES;
+ }
+ return YES;
+}
+
- (void)performFindPanelAction:(id)sender {
[self.window makeFirstResponder:[self.toolbarDelegate.searchItem view]];
}
@@ -268,6 +301,24 @@ static CGFloat _inspectorSplitterPosition;
return nil;
}
+- (BOOL)_windowsIsLargeEnoughForInspectorView {
+ return ( MPMainWindowSplitViewDelegateMinimumInspectorWidth
+ < ([self.splitView frame].size.width
+ - MPMainWindowSplitViewDelegateMinimumContentWidth
+ - MPMainWindowSplitViewDelegateMinimumOutlineWidth
+ - 2 * [self.splitView dividerThickness]) );
+}
+
+- (void)_resizeWindowForInspectorView {
+ NSRect frame = [self.window frame];
+ NSView *outlinView = [self.splitView subviews][MPSplitViewOutlineViewIndex];
+ NSView *contentView = [self.splitView subviews][MPSplitViewContentViewIndex];
+
+ CGFloat outlineWidth = [self.splitView isSubviewCollapsed:outlinView] ? 0 : [outlinView frame].size.width;
+ frame.size.width = outlineWidth + [contentView frame].size.width + MPMainWindowSplitViewDelegateMinimumInspectorWidth;
+ [self.window setFrame:frame display:YES animate:YES];
+}
+
#pragma mark Notifications
- (void)didOpenDocument:(NSNotification *)notification {
diff --git a/MacPass/MPMainWindowSplitViewDelegate.m b/MacPass/MPMainWindowSplitViewDelegate.m
index 7e9c3556..84af83b8 100644
--- a/MacPass/MPMainWindowSplitViewDelegate.m
+++ b/MacPass/MPMainWindowSplitViewDelegate.m
@@ -9,8 +9,8 @@
#import "MPMainWindowSplitViewDelegate.h"
const CGFloat MPMainWindowSplitViewDelegateMinimumOutlineWidth = 150.0;
-const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 400.0;
-const CGFloat MPMainWindowSplitViewDelegateMinimumInspectorWidth = 200.0;
+const CGFloat MPMainWindowSplitViewDelegateMinimumContentWidth = 250.0;
+const CGFloat MPMainWindowSplitViewDelegateMinimumInspectorWidth = 250.0;
@interface MPMainWindowSplitViewDelegate ()
@@ -26,22 +26,51 @@ const CGFloat MPMainWindowSplitViewDelegateMinimumInspectorWidth = 200.0;
}
- (BOOL)splitView:(NSSplitView *)splitView canCollapseSubview:(NSView *)subview {
- return (subview != [self _subViewOfType:MPSplitViewContentViewIndex splitView:splitView]);
+ return (subview == [self _subViewOfType:MPSplitViewInspectorViewIndex splitView:splitView]);
}
- (CGFloat)splitView:(NSSplitView *)splitView constrainMinCoordinate:(CGFloat)proposedMinimumPosition ofSubviewAt:(NSInteger)dividerIndex {
- return proposedMinimumPosition;
-
- // Update to take inspector into account
- return (proposedMinimumPosition < MPMainWindowSplitViewDelegateMinimumOutlineWidth) ? MPMainWindowSplitViewDelegateMinimumOutlineWidth : proposedMinimumPosition;
+ switch (dividerIndex) {
+ case MPSplitViewOutlineDividerIndex:
+ return (proposedMinimumPosition < MPMainWindowSplitViewDelegateMinimumOutlineWidth) ? MPMainWindowSplitViewDelegateMinimumOutlineWidth : proposedMinimumPosition;
+ break;
+
+ case MPSplitViewInspectorDividerIndex: {
+ return [self splitView:splitView constrainSplitPosition:proposedMinimumPosition ofSubviewAt:dividerIndex];
+ }
+
+ default:
+ return proposedMinimumPosition;
+ break;
+ }
+}
+
+- (CGFloat)splitView:(NSSplitView *)splitView constrainSplitPosition:(CGFloat)proposedPosition ofSubviewAt:(NSInteger)dividerIndex {
+ if(dividerIndex == MPSplitViewInspectorDividerIndex) {
+ return [splitView frame].size.width - MPMainWindowSplitViewDelegateMinimumInspectorWidth;
+ }
+ return proposedPosition;
}
- (CGFloat)splitView:(NSSplitView *)splitView constrainMaxCoordinate:(CGFloat)proposedMaximumPosition ofSubviewAt:(NSInteger)dividerIndex {
- return proposedMaximumPosition;
// Update to take inpspector into account
- CGFloat availableWidth = [splitView frame].size.width - [splitView dividerThickness];
- return (availableWidth - MPMainWindowSplitViewDelegateMinimumOutlineWidth);
+ NSView *outlineView = [self _subViewOfType:MPSplitViewOutlineViewIndex splitView:splitView];
+ NSView *inspectorView = [self _subViewOfType:MPSplitViewInspectorViewIndex splitView:splitView];
+ NSUInteger outlineMultiplicator = [splitView isSubviewCollapsed:outlineView] ? 0 : 1;
+ NSUInteger inpsectorMulitplicator = [splitView isSubviewCollapsed:inspectorView] ? 0 : 1;
+ NSUInteger dividerMultiplicator = inpsectorMulitplicator + outlineMultiplicator;
+ CGFloat availableWidth = [splitView frame].size.width - (dividerMultiplicator * [splitView dividerThickness]);
+ switch (dividerIndex) {
+ case MPSplitViewOutlineDividerIndex:
+ return availableWidth - (outlineMultiplicator * [outlineView frame].size.width ) - MPMainWindowSplitViewDelegateMinimumContentWidth;
+
+ case MPSplitViewInspectorDividerIndex:
+ return availableWidth - MPMainWindowSplitViewDelegateMinimumInspectorWidth;
+
+ default:
+ return proposedMaximumPosition;
+ }
}
- (void)splitView:(NSSplitView *)splitView resizeSubviewsWithOldSize:(NSSize)oldSize {
diff --git a/MacPass/MacPass-Info.plist b/MacPass/MacPass-Info.plist
index 92495455..beef99cc 100644
--- a/MacPass/MacPass-Info.plist
+++ b/MacPass/MacPass-Info.plist
@@ -21,7 +21,7 @@
CFBundleSignature
????
CFBundleVersion
- 475
+ 48A
LSMinimumSystemVersion
${MACOSX_DEPLOYMENT_TARGET}
NSHumanReadableCopyright
diff --git a/MacPass/en.lproj/MainMenu.xib b/MacPass/en.lproj/MainMenu.xib
index 7f877f74..c4116d0b 100644
--- a/MacPass/en.lproj/MainMenu.xib
+++ b/MacPass/en.lproj/MainMenu.xib
@@ -2,7 +2,7 @@
1070
- 12C60
+ 12C3103
3084
1187.34
625.00
@@ -708,6 +708,33 @@
+
+
+
+ toggleInspectorViewMenuItem
+
+
+
+ 1183
+
@@ -1686,6 +1729,9 @@
+
+
+
@@ -1882,6 +1928,21 @@
+
+ 1179
+
+
+
+
+ 1180
+
+
+
+
+ 1181
+
+
+
@@ -1891,6 +1952,9 @@
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
@@ -1985,7 +2049,7 @@
- 1178
+ 1183
@@ -2006,6 +2070,20 @@
id
+
+ NSMenuItem
+ NSMenuItem
+
+
+
+ toggleInspectorViewMenuItem
+ NSMenuItem
+
+
+ toggleOutlineViewMenuItem
+ NSMenuItem
+
+
IBProjectSource
./Classes/MPAppDelegate.h