*/
#import "HBPreferencesController.h"
+#define TOOLBAR_GENERAL @"TOOLBAR_GENERAL"
+#define TOOLBAR_PICTURE @"TOOLBAR_PICTURE"
+#define TOOLBAR_AUDIO @"TOOLBAR_AUDIO"
+#define TOOLBAR_ADVANCED @"TOOLBAR_ADVANCED"
/**
* This class controls the preferences window of HandBrake. Default values for
* no getter/setter code is needed in this file (unless more complicated
* preference settings are added that cannot be handled with Cocoa bindings).
*/
+
+@interface HBPreferencesController (Private)
+
+- (void) setPrefView: (id) sender;
+
+@end
+
@implementation HBPreferencesController
/**
+ (void)registerUserDefaults
{
NSString *desktopDirectory = [@"~/Desktop" stringByExpandingTildeInPath];
-
+
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
@"YES", @"CheckForUpdates",
@"English", @"DefaultLanguage",
@"NO", @"DefaultMpegName",
@"YES", @"DefaultCrf",
@"NO", @"DefaultDeinterlaceOn",
- @"YES", @"DefaultPicSizeAutoiPod",
@"NO", @"PixelRatio",
@"", @"DefAdvancedx264Flags",
@"YES", @"DefaultPresetsDrawerShow",
desktopDirectory, @"LastSourceDirectory",
@"NO", @"DefaultAutoNaming",
@"NO", @"DefaultChapterMarkers",
- @"NO", @"ShowVerboseOutput",
- @"NO", @"AllowLargeFiles",
- @"NO", @"DisableDvdAutoDetect",
- @"Alert Window", @"AlertWhenDone",
+ @"NO", @"DisableDvdAutoDetect",
+ @"Alert Window", @"AlertWhenDone",
+ @"4:10:15:9:10:35:9", @"DecombCustomString",
nil]];
}
{
NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
}
- return self;
+ return self;
}
-/**
- * Shows the preferences window in modal state.
- */
-- (IBAction)runModal:(id)sender
+- (void) awakeFromNib
{
- [NSApp runModalForWindow:[self window]];
+ NSToolbar * toolbar = [[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"];
+ [toolbar setDelegate: self];
+ [toolbar setAllowsUserCustomization: NO];
+ [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
+ [toolbar setSizeMode: NSToolbarSizeModeRegular];
+ [[self window] setToolbar: toolbar];
+
+ [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
+ [self setPrefView:nil];
}
-/**
- * Closes the window and stops modal state. Any changes made in field editor
- * are saved by [NSWindow endEditingFor:] before closing the window.
- */
-- (IBAction)close:(id)sender
+- (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
+ willBeInsertedIntoToolbar: (BOOL) flag
+{
+ NSToolbarItem * item;
+ item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
+
+ if ([ident isEqualToString: TOOLBAR_GENERAL])
+ {
+ [item setLabel: NSLocalizedString(@"General", "General")];
+ [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
+ [item setTarget: self];
+ [item setAction: @selector(setPrefView:)];
+ [item setAutovalidates: NO];
+ }
+ else if ([ident isEqualToString: TOOLBAR_PICTURE])
+ {
+ [item setLabel: NSLocalizedString(@"Picture", "Picture")];
+ [item setImage: [NSImage imageNamed: @"pref-picture"]];
+ [item setTarget: self];
+ [item setAction: @selector(setPrefView:)];
+ [item setAutovalidates: NO];
+ }
+ else if ([ident isEqualToString: TOOLBAR_AUDIO])
+ {
+ [item setLabel: NSLocalizedString(@"Audio", "Audio")];
+ [item setImage: [NSImage imageNamed: @"pref-audio"]];
+ [item setTarget: self];
+ [item setAction: @selector(setPrefView:)];
+ [item setAutovalidates: NO];
+ }
+ else if ([ident isEqualToString: TOOLBAR_ADVANCED])
+ {
+ [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
+ [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
+ [item setTarget: self];
+ [item setAction: @selector(setPrefView:)];
+ [item setAutovalidates: NO];
+ }
+ else
+ {
+ return nil;
+ }
+
+ return item;
+}
+
+- (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
+{
+ return [self toolbarDefaultItemIdentifiers: toolbar];
+}
+
+- (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
{
- [[self window] endEditingFor:nil];
- [[self window] orderOut:sender];
- [NSApp stopModal];
+ return [self toolbarAllowedItemIdentifiers: toolbar];
+}
+
+- (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
+{
+ return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
+ TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
+}
+
+@end
+
+@implementation HBPreferencesController (Private)
+
+- (void) setPrefView: (id) sender
+{
+ NSView * view = fGeneralView;
+ if (sender)
+ {
+ NSString * identifier = [sender itemIdentifier];
+ if ([identifier isEqualToString: TOOLBAR_PICTURE])
+ view = fPictureView;
+ else if ([identifier isEqualToString: TOOLBAR_AUDIO])
+ view = fAudioView;
+ else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
+ view = fAdvancedView;
+ else;
+ }
+
+ NSWindow * window = [self window];
+ if ([window contentView] == view)
+ return;
+
+ NSRect windowRect = [window frame];
+ float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
+ windowRect.origin.y -= difference;
+ windowRect.size.height += difference;
+
+ [view setHidden: YES];
+ [window setContentView: view];
+ [window setFrame: windowRect display: YES animate: YES];
+ [view setHidden: NO];
+
+ //set title label
+ if (sender)
+ [window setTitle: [sender label]];
+ else
+ {
+ NSToolbar * toolbar = [window toolbar];
+ NSString * itemIdentifier = [toolbar selectedItemIdentifier];
+ NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
+ NSToolbarItem * item;
+ while ((item = [enumerator nextObject]))
+ if ([[item itemIdentifier] isEqualToString: itemIdentifier])
+ {
+ [window setTitle: [item label]];
+ break;
+ }
+ }
}
@end