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",
45 @"YES", @"DefaultPicSizeAutoiPod",
47 @"", @"DefAdvancedx264Flags",
48 @"YES", @"DefaultPresetsDrawerShow",
49 desktopDirectory, @"LastDestinationDirectory",
50 desktopDirectory, @"LastSourceDirectory",
51 @"NO", @"DefaultAutoNaming",
52 @"NO", @"DefaultChapterMarkers",
53 @"YES", @"ShowVerboseOutput",
54 @"NO", @"AllowLargeFiles",
55 @"NO", @"DisableDvdAutoDetect",
56 @"Alert Window", @"AlertWhenDone",
61 * Initializes the preferences controller by loading Preferences.nib file.
65 if (self = [super initWithWindowNibName:@"Preferences"])
67 NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
74 NSToolbar * toolbar = [[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"];
75 [toolbar setDelegate: self];
76 [toolbar setAllowsUserCustomization: NO];
77 [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
78 [toolbar setSizeMode: NSToolbarSizeModeRegular];
79 [[self window] setToolbar: toolbar];
81 [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
82 [self setPrefView:nil];
85 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
86 willBeInsertedIntoToolbar: (BOOL) flag
89 item = [[NSToolbarItem alloc] initWithItemIdentifier: ident];
91 if ([ident isEqualToString: TOOLBAR_GENERAL])
93 [item setLabel: NSLocalizedString(@"General", "General")];
94 [item setImage: [NSImage imageNamed: @"pref-general"]];
95 [item setTarget: self];
96 [item setAction: @selector(setPrefView:)];
97 [item setAutovalidates: NO];
99 else if ([ident isEqualToString: TOOLBAR_PICTURE])
101 [item setLabel: NSLocalizedString(@"Picture", "Picture")];
102 [item setImage: [NSImage imageNamed: @"pref-picture"]];
103 [item setTarget: self];
104 [item setAction: @selector(setPrefView:)];
105 [item setAutovalidates: NO];
107 else if ([ident isEqualToString: TOOLBAR_AUDIO])
109 [item setLabel: NSLocalizedString(@"Audio", "Audio")];
110 [item setImage: [NSImage imageNamed: @"pref-audio"]];
111 [item setTarget: self];
112 [item setAction: @selector(setPrefView:)];
113 [item setAutovalidates: NO];
115 else if ([ident isEqualToString: TOOLBAR_ADVANCED])
117 [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
118 [item setImage: [NSImage imageNamed: @"pref-advanced"]];
119 [item setTarget: self];
120 [item setAction: @selector(setPrefView:)];
121 [item setAutovalidates: NO];
132 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
134 return [self toolbarDefaultItemIdentifiers: toolbar];
137 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
139 return [self toolbarAllowedItemIdentifiers: toolbar];
142 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
144 return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
145 TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
149 * Closes the window and stops modal state. Any changes made in field editor
150 * are saved by [NSWindow endEditingFor:] before closing the window.
152 - (IBAction)close:(id)sender
154 //[self makeFirstResponder: nil];
159 @implementation HBPreferencesController (Private)
161 - (void) setPrefView: (id) sender
163 NSView * view = fGeneralView;
166 NSString * identifier = [sender itemIdentifier];
167 if ([identifier isEqualToString: TOOLBAR_PICTURE])
169 else if ([identifier isEqualToString: TOOLBAR_AUDIO])
171 else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
172 view = fAdvancedView;
176 NSWindow * window = [self window];
177 if ([window contentView] == view)
180 NSRect windowRect = [window frame];
181 float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
182 windowRect.origin.y -= difference;
183 windowRect.size.height += difference;
185 [view setHidden: YES];
186 [window setContentView: view];
187 [window setFrame: windowRect display: YES animate: YES];
188 [view setHidden: NO];
192 [window setTitle: [sender label]];
195 NSToolbar * toolbar = [window toolbar];
196 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
197 NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
198 NSToolbarItem * item;
199 while ((item = [enumerator nextObject]))
200 if ([[item itemIdentifier] isEqualToString: itemIdentifier])
202 [window setTitle: [item label]];