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 @"1", @"LoggingLevel",
52 @"4:10:15:9:10:35:9", @"DecombCustomString",
57 * Initializes the preferences controller by loading Preferences.nib file.
61 if (self = [super initWithWindowNibName:@"Preferences"])
63 NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
70 NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
71 [toolbar setDelegate: self];
72 [toolbar setAllowsUserCustomization: NO];
73 [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
74 [toolbar setSizeMode: NSToolbarSizeModeRegular];
75 [[self window] setToolbar: toolbar];
77 [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
78 [self setPrefView:nil];
81 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
82 willBeInsertedIntoToolbar: (BOOL) flag
85 item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
87 if ([ident isEqualToString: TOOLBAR_GENERAL])
89 [item setLabel: NSLocalizedString(@"General", "General")];
90 [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
91 [item setTarget: self];
92 [item setAction: @selector(setPrefView:)];
93 [item setAutovalidates: NO];
95 else if ([ident isEqualToString: TOOLBAR_PICTURE])
97 [item setLabel: NSLocalizedString(@"Picture", "Picture")];
98 [item setImage: [NSImage imageNamed: @"pref-picture"]];
99 [item setTarget: self];
100 [item setAction: @selector(setPrefView:)];
101 [item setAutovalidates: NO];
103 else if ([ident isEqualToString: TOOLBAR_AUDIO])
105 [item setLabel: NSLocalizedString(@"Audio", "Audio")];
106 [item setImage: [NSImage imageNamed: @"pref-audio"]];
107 [item setTarget: self];
108 [item setAction: @selector(setPrefView:)];
109 [item setAutovalidates: NO];
111 else if ([ident isEqualToString: TOOLBAR_ADVANCED])
113 [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
114 [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
115 [item setTarget: self];
116 [item setAction: @selector(setPrefView:)];
117 [item setAutovalidates: NO];
127 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
129 return [self toolbarDefaultItemIdentifiers: toolbar];
132 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
134 return [self toolbarAllowedItemIdentifiers: toolbar];
137 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
139 return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
140 TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
145 @implementation HBPreferencesController (Private)
147 - (void) setPrefView: (id) sender
149 NSView * view = fGeneralView;
152 NSString * identifier = [sender itemIdentifier];
153 if( [identifier isEqualToString: TOOLBAR_PICTURE] )
155 else if( [identifier isEqualToString: TOOLBAR_AUDIO] )
157 else if( [identifier isEqualToString: TOOLBAR_ADVANCED] )
158 view = fAdvancedView;
162 NSWindow * window = [self window];
163 if( [window contentView] == view )
166 NSRect windowRect = [window frame];
167 CGFloat difference = ( [view frame].size.height - [[window contentView] frame].size.height ) * [window userSpaceScaleFactor];
168 windowRect.origin.y -= difference;
169 windowRect.size.height += difference;
171 [view setHidden: YES];
172 [window setContentView: view];
173 [window setFrame: windowRect display: YES animate: YES];
174 [view setHidden: NO];
178 [window setTitle: [sender label]];
181 NSToolbar * toolbar = [window toolbar];
182 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
183 for( NSToolbarItem * item in [toolbar items] )
184 if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
186 [window setTitle: [item label]];