3 * Copyright (c) 2007 - 2011, Blue Static <http://www.bluestatic.org>
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.
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.
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
17 #import "PreferencesController.h"
19 @implementation PreferencesController
{
24 * Loads the NIB and shows the preferences
28 if (self = [super initWithWindowNibName
:@
"Preferences"])
30 _blankView
= [[NSView alloc
] init
];
36 * Shows the preferences controller window
38 - (void)showPreferencesWindow
40 NSWindow
* window
= self.window
; // Force the window to load.
41 [self showGeneral
:self];
43 [window makeKeyAndOrderFront
:self];
46 #pragma mark Panel Switching
49 * Shows the general panel
51 - (IBAction
)showGeneral
:(id)sender
53 [self _switchToView
:self.generalPreferencesView forToolbarItem
:self.generalPreferencesItem
];
57 * Shows the path replacement panel
59 - (IBAction
)showPaths
:(id)sender
61 [self _switchToView
:self.pathsPreferencesView forToolbarItem
:self.pathsPreferencesItem
];
64 #pragma mark NSToolbar Delegate
67 * Returns the selection names
69 - (NSArray
*)toolbarSelectableItemIdentifiers
:(NSToolbar
*)toolbar
72 self.generalPreferencesItem.itemIdentifier
,
73 self.pathsPreferencesItem.itemIdentifier
,
79 - (void)_switchToView
:(NSView
*)contentView forToolbarItem
:(NSToolbarItem
*)item
{
80 if (self.window.contentView
== contentView
)
82 [self _resizeWindowToSize
:contentView.frame.size
];
83 self.window.contentView
= contentView
;
84 self.toolbar.selectedItemIdentifier
= item.itemIdentifier
;
88 * Resizes the preferences window to be the size of the given preferences panel
90 - (void)_resizeWindowToSize
:(NSSize
)size
92 // Hide the current view when animating, to avoid weird artifacts.
93 self.window.contentView
= _blankView
;
95 NSWindowStyleMask styleMask
= self.window.styleMask
;
96 NSRect newFrame
= [NSWindow contentRectForFrameRect
:self.window.frame styleMask
:styleMask
];
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
;
104 newFrame
= [NSWindow frameRectForContentRect
:newFrame styleMask
:styleMask
];
106 [[self window
] setFrame
:newFrame display
:YES animate
:YES
];