Modernize PreferencesController.
[macgdbp.git] / Source / PreferencesController.m
1 /*
2 * MacGDBp
3 * Copyright (c) 2007 - 2011, Blue Static <http://www.bluestatic.org>
4 *
5 * This program is free software; you can redistribute it and/or modify it under the terms of the GNU
6 * General Public License as published by the Free Software Foundation; either version 2 of the
7 * License, or (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
10 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License along with this program; if not,
14 * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
15 */
16
17 #import "PreferencesController.h"
18
19 @implementation PreferencesController {
20 NSView* _blankView;
21 }
22
23 /**
24 * Loads the NIB and shows the preferences
25 */
26 - (id)init
27 {
28 if (self = [super initWithWindowNibName:@"Preferences"])
29 {
30 _blankView = [[NSView alloc] init];
31 }
32 return self;
33 }
34
35 /**
36 * Shows the preferences controller window
37 */
38 - (void)showPreferencesWindow
39 {
40 NSWindow* window = self.window; // Force the window to load.
41 [self showGeneral:self];
42 [window center];
43 [window makeKeyAndOrderFront:self];
44 }
45
46 #pragma mark Panel Switching
47
48 /**
49 * Shows the general panel
50 */
51 - (IBAction)showGeneral:(id)sender
52 {
53 [self _switchToView:self.generalPreferencesView forToolbarItem:self.generalPreferencesItem];
54 }
55
56 /**
57 * Shows the path replacement panel
58 */
59 - (IBAction)showPaths:(id)sender
60 {
61 [self _switchToView:self.pathsPreferencesView forToolbarItem:self.pathsPreferencesItem];
62 }
63
64 #pragma mark NSToolbar Delegate
65
66 /**
67 * Returns the selection names
68 */
69 - (NSArray*)toolbarSelectableItemIdentifiers:(NSToolbar*)toolbar
70 {
71 return @[
72 self.generalPreferencesItem.itemIdentifier,
73 self.pathsPreferencesItem.itemIdentifier,
74 ];
75 }
76
77 #pragma mark Private
78
79 - (void)_switchToView:(NSView*)contentView forToolbarItem:(NSToolbarItem*)item {
80 if (self.window.contentView == contentView)
81 return;
82 [self _resizeWindowToSize:contentView.frame.size];
83 self.window.contentView = contentView;
84 self.toolbar.selectedItemIdentifier = item.itemIdentifier;
85 }
86
87 /**
88 * Resizes the preferences window to be the size of the given preferences panel
89 */
90 - (void)_resizeWindowToSize:(NSSize)size
91 {
92 // Hide the current view when animating, to avoid weird artifacts.
93 self.window.contentView = _blankView;
94
95 NSWindowStyleMask styleMask = self.window.styleMask;
96 NSRect newFrame = [NSWindow contentRectForFrameRect:self.window.frame styleMask:styleMask];
97
98 CGFloat height = size.height + 55;
99 newFrame.origin.y += newFrame.size.height;
100 newFrame.origin.y -= height;
101 newFrame.size.height = height;
102 newFrame.size.width = size.width;
103
104 newFrame = [NSWindow frameRectForContentRect:newFrame styleMask:styleMask];
105
106 [[self window] setFrame:newFrame display:YES animate:YES];
107 }
108
109 @end