From fe7c647bcf9fabbf23a4bb8c9c8254ffb89cd836 Mon Sep 17 00:00:00 2001 From: Michael Starke Date: Tue, 30 Jun 2020 23:49:06 +0200 Subject: [PATCH] Added custom MPTabViewController to resize window to tab sizes on change --- MacPass.xcodeproj/project.pbxproj | 6 +++ MacPass/Base.lproj/GeneralPreferences.xib | 2 +- MacPass/MPPreferencesWindowController.m | 8 +++- MacPass/MPTabViewController.h | 17 +++++++ MacPass/MPTabViewController.m | 58 +++++++++++++++++++++++ MacPass/PreferencesWindow.xib | 6 +-- 6 files changed, 91 insertions(+), 6 deletions(-) create mode 100644 MacPass/MPTabViewController.h create mode 100644 MacPass/MPTabViewController.m diff --git a/MacPass.xcodeproj/project.pbxproj b/MacPass.xcodeproj/project.pbxproj index 4200c9f1..d97f2153 100644 --- a/MacPass.xcodeproj/project.pbxproj +++ b/MacPass.xcodeproj/project.pbxproj @@ -189,6 +189,7 @@ 4C7B637F1C0CB57300D7038C /* KeePassKit.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B63791C0CB55600D7038C /* KeePassKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4C7B63801C0CB57300D7038C /* Sparkle.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 4C7B637A1C0CB55600D7038C /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4C7BD07619FE94C900C7AA5C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */; }; + 4C7D9D5424ABE6FD00907034 /* MPTabViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */; }; 4C7F8B681A10B68400CCB83D /* WelcomeView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4C7F8B6A1A10B68400CCB83D /* WelcomeView.xib */; }; 4C80304A1E2FBAA300133E4C /* MPTestKeyMapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C8030491E2FBAA300133E4C /* MPTestKeyMapper.m */; }; 4C81867D216664C70068DAFB /* MPPluginRepositoryItemVersionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C81867C216664C70068DAFB /* MPPluginRepositoryItemVersionInfo.m */; }; @@ -671,6 +672,8 @@ 4C7B63791C0CB55600D7038C /* KeePassKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = KeePassKit.framework; path = Carthage/Build/Mac/KeePassKit.framework; sourceTree = ""; }; 4C7B637A1C0CB55600D7038C /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Carthage/Build/Mac/Sparkle.framework; sourceTree = ""; }; 4C7BD07519FE94C900C7AA5C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 4C7D9D5224ABE6FD00907034 /* MPTabViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPTabViewController.h; sourceTree = ""; }; + 4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPTabViewController.m; sourceTree = ""; }; 4C7F8B691A10B68400CCB83D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/WelcomeView.xib; sourceTree = ""; }; 4C7F8B741A10B69300CCB83D /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/WelcomeView.strings; sourceTree = ""; }; 4C7F8B761A10B69400CCB83D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/WelcomeView.strings"; sourceTree = ""; }; @@ -1671,6 +1674,8 @@ 4C20E4BE23E4753A00807FAE /* MPDocumentSplitViewController.h */, 4C20E4BF23E4753A00807FAE /* MPDocumentSplitViewController.m */, 4C20E4C023E4753A00807FAE /* DocumentSplitView.xib */, + 4C7D9D5224ABE6FD00907034 /* MPTabViewController.h */, + 4C7D9D5324ABE6FD00907034 /* MPTabViewController.m */, ); name = "View Controller"; sourceTree = ""; @@ -2191,6 +2196,7 @@ 4C0949591FD6B89B004F2971 /* NSUserNotification+MPAdditions.m in Sources */, 4C2057EE23CDF6F900C731EC /* MPPathCell.m in Sources */, 4C3B42871F935316007B04FD /* MPDayCountFormatter.m in Sources */, + 4C7D9D5424ABE6FD00907034 /* MPTabViewController.m in Sources */, 3C0CDECF21CFEDD200B2A10B /* NSTextView+MPTouchBarExtension.m in Sources */, 4C57AE1417BA422B00CA4F34 /* MPSegmentedContextCell.m in Sources */, 4CE2961518429AA5005F01CE /* MPAutotypeKeyPress.m in Sources */, diff --git a/MacPass/Base.lproj/GeneralPreferences.xib b/MacPass/Base.lproj/GeneralPreferences.xib index 9bec4daa..8b1c0b45 100644 --- a/MacPass/Base.lproj/GeneralPreferences.xib +++ b/MacPass/Base.lproj/GeneralPreferences.xib @@ -338,7 +338,7 @@ - + diff --git a/MacPass/MPPreferencesWindowController.m b/MacPass/MPPreferencesWindowController.m index 2e200493..8632075e 100644 --- a/MacPass/MPPreferencesWindowController.m +++ b/MacPass/MPPreferencesWindowController.m @@ -29,10 +29,11 @@ #import "MPWorkflowPreferencesController.h" #import "MPUpdatePreferencesController.h" #import "MPPluginPreferencesController.h" +#import "MPTabViewController.h" @interface MPPreferencesWindowController () -@property (strong) NSTabViewController *tabViewController; +@property (strong) MPTabViewController *tabViewController; @end @@ -45,7 +46,7 @@ -(id)init { self = [super initWithWindow:nil]; if(self) { - _tabViewController = [[NSTabViewController alloc] init]; + _tabViewController = [[MPTabViewController alloc] init]; _tabViewController.tabStyle = NSTabViewControllerTabStyleToolbar; _tabViewController.transitionOptions = NSViewControllerTransitionNone | NSViewControllerTransitionAllowUserInteraction; @@ -84,6 +85,7 @@ [(id)item.viewController willShowTab]; } self.tabViewController.selectedTabViewItemIndex = index; + if([item.viewController respondsToSelector:@selector(didShowTab)]) { [(id)item.viewController didShowTab]; } @@ -146,4 +148,6 @@ [self.tabViewController addTabViewItem:item]; } } + + @end diff --git a/MacPass/MPTabViewController.h b/MacPass/MPTabViewController.h new file mode 100644 index 00000000..19da88c5 --- /dev/null +++ b/MacPass/MPTabViewController.h @@ -0,0 +1,17 @@ +// +// MPTabViewController.h +// MacPass +// +// Created by Michael Starke on 30.06.20. +// Copyright © 2020 HicknHack Software GmbH. All rights reserved. +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface MPTabViewController : NSTabViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/MacPass/MPTabViewController.m b/MacPass/MPTabViewController.m new file mode 100644 index 00000000..464831cc --- /dev/null +++ b/MacPass/MPTabViewController.m @@ -0,0 +1,58 @@ +// +// MPTabViewController.m +// MacPass +// +// Created by Michael Starke on 30.06.20. +// Copyright © 2020 HicknHack Software GmbH. All rights reserved. +// + +#import "MPTabViewController.h" + +@interface MPTabViewController () +@property (strong) NSMutableDictionary *tabViewSizes; +@end + +@implementation MPTabViewController + +- (instancetype)initWithNibName:(NSNibName)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if(self) { + _tabViewSizes = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (instancetype)initWithCoder:(NSCoder *)coder { + self = [super initWithCoder:coder]; + if(self) { + _tabViewSizes = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem { + [super tabView:tabView didSelectTabViewItem:tabViewItem]; + [self _resizeWindowToFitTabView:tabViewItem]; +} + +- (void)tabView:(NSTabView *)tabView willSelectTabViewItem:(NSTabViewItem *)tabViewItem { + [super tabView:tabView willSelectTabViewItem:tabViewItem]; + if(tabViewItem.view) { + self.tabViewSizes[tabViewItem.identifier] = @(tabViewItem.view.frame.size); + } +} + + +- (void)_resizeWindowToFitTabView:(NSTabViewItem *)tabViewItem { + NSSize size = self.tabViewSizes[tabViewItem.identifier].sizeValue; + NSWindow *window = self.view.window; + + NSRect contentRect = NSMakeRect(0, 0, size.width, size.height); + NSRect contentFrame = [window frameRectForContentRect:contentRect]; + CGFloat toolbarHeight = CGRectGetHeight(window.frame) - CGRectGetHeight(contentFrame); + NSPoint newOrigin = NSMakePoint(CGRectGetMinX(window.frame), CGRectGetMinY(window.frame) + toolbarHeight); + NSRect newFrame = NSMakeRect(newOrigin.x,newOrigin.y, CGRectGetWidth(contentFrame), CGRectGetHeight(contentFrame)); + [window setFrame:newFrame display:NO animate:YES]; +} + +@end diff --git a/MacPass/PreferencesWindow.xib b/MacPass/PreferencesWindow.xib index 3772b63a..a4c54584 100644 --- a/MacPass/PreferencesWindow.xib +++ b/MacPass/PreferencesWindow.xib @@ -15,13 +15,13 @@ - + - + - +