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",
53 @"NO", @"EncodeLogLocation",
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"] autorelease];
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] autorelease];
88 if ([ident isEqualToString: TOOLBAR_GENERAL])
90 [item setLabel: NSLocalizedStringFromTable(@"General", @"Preferences", "General")];
91 [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
92 [item setTarget: self];
93 [item setAction: @selector(setPrefView:)];
94 [item setAutovalidates: NO];
96 else if ([ident isEqualToString: TOOLBAR_PICTURE])
98 [item setLabel: NSLocalizedStringFromTable(@"Picture", @"Preferences", "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: NSLocalizedStringFromTable(@"Audio", @"Preferences", "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: NSLocalizedStringFromTable(@"Advanced", @"Preferences", "Advanced")];
115 [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
116 [item setTarget: self];
117 [item setAction: @selector(setPrefView:)];
118 [item setAutovalidates: NO];
128 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
130 return [self toolbarDefaultItemIdentifiers: toolbar];
133 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
135 return [self toolbarAllowedItemIdentifiers: toolbar];
138 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
140 return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
141 TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
146 @implementation HBPreferencesController (Private)
148 - (void) setPrefView: (id) sender
150 NSView * view = fGeneralView;
153 NSString * identifier = [sender itemIdentifier];
154 if( [identifier isEqualToString: TOOLBAR_PICTURE] )
156 else if( [identifier isEqualToString: TOOLBAR_AUDIO] )
158 else if( [identifier isEqualToString: TOOLBAR_ADVANCED] )
159 view = fAdvancedView;
163 NSWindow * window = [self window];
164 if( [window contentView] == view )
167 NSRect windowRect = [window frame];
168 CGFloat difference = ( [view frame].size.height - [[window contentView] frame].size.height ) * [window userSpaceScaleFactor];
169 windowRect.origin.y -= difference;
170 windowRect.size.height += difference;
172 [view setHidden: YES];
173 [window setContentView: view];
174 [window setFrame: windowRect display: YES animate: YES];
175 [view setHidden: NO];
179 [window setTitle: [sender label]];
182 NSToolbar * toolbar = [window toolbar];
183 NSString * itemIdentifier = [toolbar selectedItemIdentifier];
184 for( NSToolbarItem * item in [toolbar items] )
185 if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
187 [window setTitle: [item label]];