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;
26 - (NSToolbarItem *)toolbarItemWithIdentifier: (NSString *)identifier
27 label: (NSString *)label
28 image: (NSImage *)image;
32 @implementation HBPreferencesController
35 * +[HBPreferencesController registerUserDefaults]
37 * Registers default values to user defaults. This is called immediately
38 * when HandBrake starts, from [HBController init].
40 + (void)registerUserDefaults
42 NSString *desktopDirectory = [@"~/Desktop" stringByExpandingTildeInPath];
44 [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
45 @"YES", @"CheckForUpdates",
46 @"Open Source", @"LaunchSourceBehavior",
47 @"English", @"DefaultLanguage",
48 @"YES", @"UseCoreAudio",
49 @"NO", @"DefaultMpegName",
51 @"", @"DefAdvancedx264Flags",
52 @"YES", @"DefaultPresetsDrawerShow",
53 desktopDirectory, @"LastDestinationDirectory",
54 desktopDirectory, @"LastSourceDirectory",
55 @"NO", @"DefaultAutoNaming",
56 @"NO", @"DisableDvdAutoDetect",
57 @"Alert Window", @"AlertWhenDone",
58 @"1", @"LoggingLevel",
59 @"NO", @"EncodeLogLocation",
60 @"10", @"PreviewsNumber",
62 @"0.25", @"x264CqSliderFractional",
63 @"YES", @"AlertBuiltInPresetUpdate",
68 * -[HBPreferencesController init]
70 * Initializes the preferences controller by loading Preferences.nib file.
75 if (self = [super initWithWindowNibName:@"Preferences"])
77 NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
83 * -[HBPreferencesController awakeFromNib]
85 * Called after all the outlets in the nib file have been attached. Sets up the
86 * toolbar and shows the "General" pane.
91 NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
92 [toolbar setDelegate: self];
93 [toolbar setAllowsUserCustomization: NO];
94 [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
95 [toolbar setSizeMode: NSToolbarSizeModeRegular];
96 [[self window] setToolbar: toolbar];
98 [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
99 [self setPrefView:nil];
102 - (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
103 itemForItemIdentifier: (NSString *)ident
104 willBeInsertedIntoToolbar: (BOOL)flag
107 NSToolbarItem * item;
108 item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
110 if ([ident isEqualToString: TOOLBAR_GENERAL])
112 [item setLabel: NSLocalizedStringFromTable(@"General", @"Preferences", "General")];
113 [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
114 [item setTarget: self];
115 [item setAction: @selector(setPrefView:)];
116 [item setAutovalidates: NO];
118 else if ([ident isEqualToString: TOOLBAR_PICTURE])
120 [item setLabel: NSLocalizedStringFromTable(@"Picture", @"Preferences", "Picture")];
121 [item setImage: [NSImage imageNamed: @"pref-picture"]];
122 [item setTarget: self];
123 [item setAction: @selector(setPrefView:)];
124 [item setAutovalidates: NO];
126 if ( [ident isEqualToString:TOOLBAR_GENERAL] )
128 return [self toolbarItemWithIdentifier:ident
129 label:NSLocalizedString(@"General", @"Preferences General Toolbar Item")
130 image:[NSImage imageNamed:NSImageNamePreferencesGeneral]];
132 else if ( [ident isEqualToString:TOOLBAR_PICTURE] )
135 [item setLabel: NSLocalizedStringFromTable(@"Audio", @"Preferences", "Audio")];
136 [item setImage: [NSImage imageNamed: @"pref-audio"]];
137 [item setTarget: self];
138 [item setAction: @selector(setPrefView:)];
139 [item setAutovalidates: NO];
141 return [self toolbarItemWithIdentifier:ident
142 label:NSLocalizedString(@"Picture", @"Preferences Picture Toolbar Item")
143 image:[NSImage imageNamed:@"pref-picture"]];
145 else if ( [ident isEqualToString:TOOLBAR_AUDIO] )
148 [item setLabel: NSLocalizedStringFromTable(@"Advanced", @"Preferences", "Advanced")];
149 [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
150 [item setTarget: self];
151 [item setAction: @selector(setPrefView:)];
152 [item setAutovalidates: NO];
154 return [self toolbarItemWithIdentifier:ident
155 label:NSLocalizedString(@"Audio", @"Preferences Audio Toolbar Item")
156 image:[NSImage imageNamed:@"pref-audio"]];
158 else if ( [ident isEqualToString:TOOLBAR_ADVANCED] )
160 return [self toolbarItemWithIdentifier:ident
161 label:NSLocalizedString(@"Advanced", @"Preferences Advanced Toolbar Item")
162 image:[NSImage imageNamed:NSImageNameAdvanced]];
168 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
170 return [self toolbarDefaultItemIdentifiers: toolbar];
173 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
175 return [self toolbarAllowedItemIdentifiers: toolbar];
178 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
180 return [NSArray arrayWithObjects: TOOLBAR_GENERAL, /*TOOLBAR_PICTURE, */
181 TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
186 @implementation HBPreferencesController (Private)
188 - (void) setPrefView: (id) sender
190 NSView * view = fGeneralView;
193 NSString * identifier = [sender itemIdentifier];
194 if( [identifier isEqualToString: TOOLBAR_PICTURE] )
196 else if( [identifier isEqualToString: TOOLBAR_AUDIO] )
198 else if( [identifier isEqualToString: TOOLBAR_ADVANCED] )
199 view = fAdvancedView;
203 NSWindow * window = [self window];
204 if( [window contentView] == view )
207 NSRect windowRect = [window frame];
208 CGFloat difference = ( [view frame].size.height - [[window contentView] frame].size.height ) * [window userSpaceScaleFactor];
209 windowRect.origin.y -= difference;
210 windowRect.size.height += difference;
212 [view setHidden: YES];
213 [window setContentView: view];
214 [window setFrame: windowRect display: YES animate: YES];
215 [view setHidden: NO];
219 [window setTitle: [sender label]];
222 NSToolbar * toolbar = [window toolbar];
223 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
224 for( NSToolbarItem * item in [toolbar items] )
225 if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
227 [window setTitle: [item label]];
234 * -[HBPreferencesController(Private) toolbarItemWithIdentifier:label:image:]
236 * Shared code for creating the NSToolbarItems for the Preferences toolbar.
239 - (NSToolbarItem *)toolbarItemWithIdentifier: (NSString *)identifier
240 label: (NSString *)label
241 image: (NSImage *)image
243 NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:identifier];
244 [item setLabel:label];
245 [item setImage:image];
246 [item setAction:@selector(setPrefView:)];
247 [item setAutovalidates:NO];
248 return [item autorelease];