3 * Implementation of class HBPreferencesController.
6 #import "HBPreferencesController.h"
7 #define TOOLBAR_GENERAL @"TOOLBAR_GENERAL"
8 #define TOOLBAR_PICTURE @"TOOLBAR_PICTURE"
9 #define TOOLBAR_AUDIO @"TOOLBAR_AUDIO"
10 #define TOOLBAR_ADVANCED @"TOOLBAR_ADVANCED"
13 * This class controls the preferences window of HandBrake. Default values for
14 * all preferences and user defaults are specified in class method
15 * @c registerUserDefaults. The preferences window is loaded from
16 * Preferences.nib file when HBPreferencesController is initialized.
18 * All preferences are bound to user defaults in Interface Builder, therefore
19 * no getter/setter code is needed in this file (unless more complicated
20 * preference settings are added that cannot be handled with Cocoa bindings).
23 @interface HBPreferencesController (Private)
25 - (void) setPrefView: (id) sender;
29 @implementation HBPreferencesController
32 * Registers default values to user defaults. This is called immediately
33 * when HandBrake starts, from [HBController init].
35 + (void)registerUserDefaults
37 NSString *desktopDirectory = [@"~/Desktop" stringByExpandingTildeInPath];
39 [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
40 @"YES", @"CheckForUpdates",
41 @"English", @"DefaultLanguage",
42 @"NO", @"DefaultMpegName",
43 @"YES", @"DefaultCrf",
44 @"", @"DefAdvancedx264Flags",
45 @"YES", @"DefaultPresetsDrawerShow",
46 desktopDirectory, @"LastDestinationDirectory",
47 desktopDirectory, @"LastSourceDirectory",
48 @"NO", @"DefaultAutoNaming",
49 @"NO", @"DisableDvdAutoDetect",
50 @"Alert Window", @"AlertWhenDone",
51 @"4:10:15:9:10:35:9", @"DecombCustomString",
56 * Initializes the preferences controller by loading Preferences.nib file.
60 if (self = [super initWithWindowNibName:@"Preferences"])
62 NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
69 NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
70 [toolbar setDelegate: self];
71 [toolbar setAllowsUserCustomization: NO];
72 [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
73 [toolbar setSizeMode: NSToolbarSizeModeRegular];
74 [[self window] setToolbar: toolbar];
76 [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
77 [self setPrefView:nil];
80 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
81 willBeInsertedIntoToolbar: (BOOL) flag
84 item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
86 if ([ident isEqualToString: TOOLBAR_GENERAL])
88 [item setLabel: NSLocalizedString(@"General", "General")];
89 [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
90 [item setTarget: self];
91 [item setAction: @selector(setPrefView:)];
92 [item setAutovalidates: NO];
94 else if ([ident isEqualToString: TOOLBAR_PICTURE])
96 [item setLabel: NSLocalizedString(@"Picture", "Picture")];
97 [item setImage: [NSImage imageNamed: @"pref-picture"]];
98 [item setTarget: self];
99 [item setAction: @selector(setPrefView:)];
100 [item setAutovalidates: NO];
102 else if ([ident isEqualToString: TOOLBAR_AUDIO])
104 [item setLabel: NSLocalizedString(@"Audio", "Audio")];
105 [item setImage: [NSImage imageNamed: @"pref-audio"]];
106 [item setTarget: self];
107 [item setAction: @selector(setPrefView:)];
108 [item setAutovalidates: NO];
110 else if ([ident isEqualToString: TOOLBAR_ADVANCED])
112 [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
113 [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
114 [item setTarget: self];
115 [item setAction: @selector(setPrefView:)];
116 [item setAutovalidates: NO];
126 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
128 return [self toolbarDefaultItemIdentifiers: toolbar];
131 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
133 return [self toolbarAllowedItemIdentifiers: toolbar];
136 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
138 return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
139 TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
144 @implementation HBPreferencesController (Private)
146 - (void) setPrefView: (id) sender
148 NSView * view = fGeneralView;
151 NSString * identifier = [sender itemIdentifier];
152 if ([identifier isEqualToString: TOOLBAR_PICTURE])
154 else if ([identifier isEqualToString: TOOLBAR_AUDIO])
156 else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
157 view = fAdvancedView;
161 NSWindow * window = [self window];
162 if ([window contentView] == view)
165 NSRect windowRect = [window frame];
166 float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
167 windowRect.origin.y -= difference;
168 windowRect.size.height += difference;
170 [view setHidden: YES];
171 [window setContentView: view];
172 [window setFrame: windowRect display: YES animate: YES];
173 [view setHidden: NO];
177 [window setTitle: [sender label]];
180 NSToolbar * toolbar = [window toolbar];
181 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
182 NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
183 NSToolbarItem * item;
184 while ((item = [enumerator nextObject]))
185 if ([[item itemIdentifier] isEqualToString: itemIdentifier])
187 [window setTitle: [item label]];