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",
58 * Initializes the preferences controller by loading Preferences.nib file.
62 if (self = [super initWithWindowNibName:@"Preferences"])
64 NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
71 NSToolbar * toolbar = [[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"];
72 [toolbar setDelegate: self];
73 [toolbar setAllowsUserCustomization: NO];
74 [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
75 [toolbar setSizeMode: NSToolbarSizeModeRegular];
76 [[self window] setToolbar: toolbar];
78 [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
79 [self setPrefView:nil];
82 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
83 willBeInsertedIntoToolbar: (BOOL) flag
86 item = [[NSToolbarItem alloc] initWithItemIdentifier: ident];
88 if ([ident isEqualToString: TOOLBAR_GENERAL])
90 [item setLabel: NSLocalizedString(@"General", "General")];
91 [item setImage: [NSImage imageNamed: @"pref-general"]];
92 [item setTarget: self];
93 [item setAction: @selector(setPrefView:)];
94 [item setAutovalidates: NO];
96 else if ([ident isEqualToString: TOOLBAR_PICTURE])
98 [item setLabel: NSLocalizedString(@"Picture", "Picture")];
99 [item setImage: [NSImage imageNamed: @"pref-picture"]];
100 [item setTarget: self];
101 [item setAction: @selector(setPrefView:)];
102 [item setAutovalidates: NO];
104 else if ([ident isEqualToString: TOOLBAR_AUDIO])
106 [item setLabel: NSLocalizedString(@"Audio", "Audio")];
107 [item setImage: [NSImage imageNamed: @"pref-audio"]];
108 [item setTarget: self];
109 [item setAction: @selector(setPrefView:)];
110 [item setAutovalidates: NO];
112 else if ([ident isEqualToString: TOOLBAR_ADVANCED])
114 [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
115 [item setImage: [NSImage imageNamed: @"pref-advanced"]];
116 [item setTarget: self];
117 [item setAction: @selector(setPrefView:)];
118 [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];
146 * Closes the window and stops modal state. Any changes made in field editor
147 * are saved by [NSWindow endEditingFor:] before closing the window.
149 - (IBAction)close:(id)sender
151 //[self makeFirstResponder: nil];
156 @implementation HBPreferencesController (Private)
158 - (void) setPrefView: (id) sender
160 NSView * view = fGeneralView;
163 NSString * identifier = [sender itemIdentifier];
164 if ([identifier isEqualToString: TOOLBAR_PICTURE])
166 else if ([identifier isEqualToString: TOOLBAR_AUDIO])
168 else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
169 view = fAdvancedView;
173 NSWindow * window = [self window];
174 if ([window contentView] == view)
177 NSRect windowRect = [window frame];
178 float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
179 windowRect.origin.y -= difference;
180 windowRect.size.height += difference;
182 [view setHidden: YES];
183 [window setContentView: view];
184 [window setFrame: windowRect display: YES animate: YES];
185 [view setHidden: NO];
189 [window setTitle: [sender label]];
192 NSToolbar * toolbar = [window toolbar];
193 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
194 NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
195 NSToolbarItem * item;
196 while ((item = [enumerator nextObject]))
197 if ([[item itemIdentifier] isEqualToString: itemIdentifier])
199 [window setTitle: [item label]];