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 @"NO", @"DefaultDeinterlaceOn",
46 @"", @"DefAdvancedx264Flags",
47 @"YES", @"DefaultPresetsDrawerShow",
48 desktopDirectory, @"LastDestinationDirectory",
49 desktopDirectory, @"LastSourceDirectory",
50 @"NO", @"DefaultAutoNaming",
51 @"NO", @"DefaultChapterMarkers",
52 @"NO", @"DisableDvdAutoDetect",
53 @"Alert Window", @"AlertWhenDone",
54 @"4:10:15:9:10:35:9", @"DecombCustomString",
59 * Initializes the preferences controller by loading Preferences.nib file.
63 if (self = [super initWithWindowNibName:@"Preferences"])
65 NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
72 NSToolbar * toolbar = [[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"];
73 [toolbar setDelegate: self];
74 [toolbar setAllowsUserCustomization: NO];
75 [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
76 [toolbar setSizeMode: NSToolbarSizeModeRegular];
77 [[self window] setToolbar: toolbar];
79 [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
80 [self setPrefView:nil];
83 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
84 willBeInsertedIntoToolbar: (BOOL) flag
87 item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
89 if ([ident isEqualToString: TOOLBAR_GENERAL])
91 [item setLabel: NSLocalizedString(@"General", "General")];
92 [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
93 [item setTarget: self];
94 [item setAction: @selector(setPrefView:)];
95 [item setAutovalidates: NO];
97 else if ([ident isEqualToString: TOOLBAR_PICTURE])
99 [item setLabel: NSLocalizedString(@"Picture", "Picture")];
100 [item setImage: [NSImage imageNamed: @"pref-picture"]];
101 [item setTarget: self];
102 [item setAction: @selector(setPrefView:)];
103 [item setAutovalidates: NO];
105 else if ([ident isEqualToString: TOOLBAR_AUDIO])
107 [item setLabel: NSLocalizedString(@"Audio", "Audio")];
108 [item setImage: [NSImage imageNamed: @"pref-audio"]];
109 [item setTarget: self];
110 [item setAction: @selector(setPrefView:)];
111 [item setAutovalidates: NO];
113 else if ([ident isEqualToString: TOOLBAR_ADVANCED])
115 [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
116 [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
117 [item setTarget: self];
118 [item setAction: @selector(setPrefView:)];
119 [item setAutovalidates: NO];
129 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
131 return [self toolbarDefaultItemIdentifiers: toolbar];
134 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
136 return [self toolbarAllowedItemIdentifiers: toolbar];
139 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
141 return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
142 TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
147 @implementation HBPreferencesController (Private)
149 - (void) setPrefView: (id) sender
151 NSView * view = fGeneralView;
154 NSString * identifier = [sender itemIdentifier];
155 if ([identifier isEqualToString: TOOLBAR_PICTURE])
157 else if ([identifier isEqualToString: TOOLBAR_AUDIO])
159 else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
160 view = fAdvancedView;
164 NSWindow * window = [self window];
165 if ([window contentView] == view)
168 NSRect windowRect = [window frame];
169 float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
170 windowRect.origin.y -= difference;
171 windowRect.size.height += difference;
173 [view setHidden: YES];
174 [window setContentView: view];
175 [window setFrame: windowRect display: YES animate: YES];
176 [view setHidden: NO];
180 [window setTitle: [sender label]];
183 NSToolbar * toolbar = [window toolbar];
184 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
185 NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
186 NSToolbarItem * item;
187 while ((item = [enumerator nextObject]))
188 if ([[item itemIdentifier] isEqualToString: itemIdentifier])
190 [window setTitle: [item label]];