OSDN Git Service

MacGui: Add "Auto" to audio sample rate selections
[handbrake-jp/handbrake-jp-git.git] / macosx / HBPreferencesController.m
1 /**
2  * @file
3  * Implementation of class HBPreferencesController.
4  */
5
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"
11
12 /**
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.
17  *
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).
21  */
22
23 @interface HBPreferencesController (Private)
24
25 - (void) setPrefView: (id) sender;
26
27 @end
28
29 @implementation HBPreferencesController
30
31 /**
32  * Registers default values to user defaults. This is called immediately
33  * when HandBrake starts, from [HBController init].
34  */
35 + (void)registerUserDefaults
36 {
37     NSString *desktopDirectory =  [@"~/Desktop" stringByExpandingTildeInPath];
38
39     [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
40         @"YES",             @"CheckForUpdates",
41         @"English",         @"DefaultLanguage",
42         @"NO",              @"DefaultMpegName",
43         @"YES",             @"DefaultCrf",
44         @"NO",              @"DefaultDeinterlaceOn",
45         @"NO",              @"PixelRatio",
46         @"",                @"DefAdvancedx264Flags",
47         @"YES",             @"DefaultPresetsDrawerShow",
48         desktopDirectory,   @"LastDestinationDirectory",
49         desktopDirectory,   @"LastSourceDirectory",
50         @"NO",              @"DefaultAutoNaming",
51         @"NO",              @"DefaultChapterMarkers",
52         @"NO",              @"DisableDvdAutoDetect",
53                 @"Alert Window",    @"AlertWhenDone",
54         @"4:10:15:9:10:35:9",    @"DecombCustomString",
55         nil]];
56 }
57
58 /**
59  * Initializes the preferences controller by loading Preferences.nib file.
60  */
61 - (id)init
62 {
63     if (self = [super initWithWindowNibName:@"Preferences"])
64     {
65         NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
66     }
67     return self;
68 }
69
70 - (void) awakeFromNib
71 {
72     NSToolbar * toolbar = [[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"];
73     [toolbar setDelegate: self];
74     [toolbar setAllowsUserCustomization: NO];
75     [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
76     [toolbar setSizeMode: NSToolbarSizeModeRegular];
77     [[self window] setToolbar: toolbar];
78
79     [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
80     [self setPrefView:nil];
81 }
82
83 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
84                     willBeInsertedIntoToolbar: (BOOL) flag
85 {
86     NSToolbarItem * item;
87     item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
88
89     if ([ident isEqualToString: TOOLBAR_GENERAL])
90     {
91         [item setLabel: NSLocalizedString(@"General", "General")];
92         [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
93         [item setTarget: self];
94         [item setAction: @selector(setPrefView:)];
95         [item setAutovalidates: NO];
96     }
97     else if ([ident isEqualToString: TOOLBAR_PICTURE])
98     {
99         [item setLabel: NSLocalizedString(@"Picture", "Picture")];
100         [item setImage: [NSImage imageNamed: @"pref-picture"]];
101         [item setTarget: self];
102         [item setAction: @selector(setPrefView:)];
103         [item setAutovalidates: NO];
104     }
105     else if ([ident isEqualToString: TOOLBAR_AUDIO])
106     {
107         [item setLabel: NSLocalizedString(@"Audio", "Audio")];
108         [item setImage: [NSImage imageNamed: @"pref-audio"]];
109         [item setTarget: self];
110         [item setAction: @selector(setPrefView:)];
111         [item setAutovalidates: NO];
112     }
113     else if ([ident isEqualToString: TOOLBAR_ADVANCED])
114     {
115         [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
116         [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
117         [item setTarget: self];
118         [item setAction: @selector(setPrefView:)];
119         [item setAutovalidates: NO];
120     }
121     else
122     {
123         return nil;
124     }
125
126     return item;
127 }
128
129 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
130 {
131     return [self toolbarDefaultItemIdentifiers: toolbar];
132 }
133
134 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
135 {
136     return [self toolbarAllowedItemIdentifiers: toolbar];
137 }
138
139 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
140 {
141     return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
142                                         TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
143 }
144
145 @end
146
147 @implementation HBPreferencesController (Private)
148
149 - (void) setPrefView: (id) sender
150 {
151     NSView * view = fGeneralView;
152     if (sender)
153     {
154         NSString * identifier = [sender itemIdentifier];
155         if ([identifier isEqualToString: TOOLBAR_PICTURE])
156             view = fPictureView;
157         else if ([identifier isEqualToString: TOOLBAR_AUDIO])
158             view = fAudioView;
159         else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
160             view = fAdvancedView;
161         else;
162     }
163
164     NSWindow * window = [self window];
165     if ([window contentView] == view)
166         return;
167
168     NSRect windowRect = [window frame];
169     float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
170     windowRect.origin.y -= difference;
171     windowRect.size.height += difference;
172
173     [view setHidden: YES];
174     [window setContentView: view];
175     [window setFrame: windowRect display: YES animate: YES];
176     [view setHidden: NO];
177
178     //set title label
179     if (sender)
180         [window setTitle: [sender label]];
181     else
182     {
183         NSToolbar * toolbar = [window toolbar];
184         NSString * itemIdentifier = [toolbar selectedItemIdentifier];
185         NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
186         NSToolbarItem * item;
187         while ((item = [enumerator nextObject]))
188             if ([[item itemIdentifier] isEqualToString: itemIdentifier])
189             {
190                 [window setTitle: [item label]];
191                 break;
192             }
193     }
194 }
195
196 @end