OSDN Git Service

Change the fifo size from being statically tuned for a Mac Pro with 4 CPUs to dynamic...
[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         @"YES",             @"DefaultPicSizeAutoiPod",
46         @"NO",              @"PixelRatio",
47         @"",                @"DefAdvancedx264Flags",
48         @"YES",             @"DefaultPresetsDrawerShow",
49         desktopDirectory,   @"LastDestinationDirectory",
50         desktopDirectory,   @"LastSourceDirectory",
51         @"NO",              @"DefaultAutoNaming",
52         @"NO",              @"DefaultChapterMarkers",
53         @"YES",              @"ShowVerboseOutput",
54                 @"NO",              @"AllowLargeFiles",
55                 @"NO",              @"DisableDvdAutoDetect",
56                 @"Alert Window",    @"AlertWhenDone",
57         nil]];
58 }
59
60 /**
61  * Initializes the preferences controller by loading Preferences.nib file.
62  */
63 - (id)init
64 {
65     if (self = [super initWithWindowNibName:@"Preferences"])
66     {
67         NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
68     }
69     return self; 
70 }
71
72 - (void) awakeFromNib
73 {
74     NSToolbar * toolbar = [[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"];
75     [toolbar setDelegate: self];
76     [toolbar setAllowsUserCustomization: NO];
77     [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
78     [toolbar setSizeMode: NSToolbarSizeModeRegular];
79     [[self window] setToolbar: toolbar];
80     
81     [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
82     [self setPrefView:nil];
83 }
84
85 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
86                     willBeInsertedIntoToolbar: (BOOL) flag
87 {
88     NSToolbarItem * item;
89     item = [[NSToolbarItem alloc] initWithItemIdentifier: ident];
90
91     if ([ident isEqualToString: TOOLBAR_GENERAL])
92     {
93         [item setLabel: NSLocalizedString(@"General", "General")];
94         [item setImage: [NSImage imageNamed: @"pref-general"]];
95         [item setTarget: self];
96         [item setAction: @selector(setPrefView:)];
97         [item setAutovalidates: NO];
98     }
99     else if ([ident isEqualToString: TOOLBAR_PICTURE])
100     {
101         [item setLabel: NSLocalizedString(@"Picture", "Picture")];
102         [item setImage: [NSImage imageNamed: @"pref-picture"]];
103         [item setTarget: self];
104         [item setAction: @selector(setPrefView:)];
105         [item setAutovalidates: NO];
106     }
107     else if ([ident isEqualToString: TOOLBAR_AUDIO])
108     {
109         [item setLabel: NSLocalizedString(@"Audio", "Audio")];
110         [item setImage: [NSImage imageNamed: @"pref-audio"]];
111         [item setTarget: self];
112         [item setAction: @selector(setPrefView:)];
113         [item setAutovalidates: NO];
114     }
115     else if ([ident isEqualToString: TOOLBAR_ADVANCED])
116     {
117         [item setLabel: NSLocalizedString(@"Advanced", "Advanced")];
118         [item setImage: [NSImage imageNamed: @"pref-advanced"]];
119         [item setTarget: self];
120         [item setAction: @selector(setPrefView:)];
121         [item setAutovalidates: NO];
122     }
123     else
124     {
125         [item release];
126         return nil;
127     }
128
129     return item;
130 }
131
132 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
133 {
134     return [self toolbarDefaultItemIdentifiers: toolbar];
135 }
136
137 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
138 {
139     return [self toolbarAllowedItemIdentifiers: toolbar];
140 }
141
142 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
143 {
144     return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
145                                         TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
146 }
147
148 /**
149  * Closes the window and stops modal state. Any changes made in field editor
150  * are saved by [NSWindow endEditingFor:] before closing the window.
151  */
152 - (IBAction)close:(id)sender
153 {
154     //[self makeFirstResponder: nil];
155 }
156
157 @end
158
159 @implementation HBPreferencesController (Private)
160
161 - (void) setPrefView: (id) sender
162 {
163     NSView * view = fGeneralView;
164     if (sender)
165     {
166         NSString * identifier = [sender itemIdentifier];
167         if ([identifier isEqualToString: TOOLBAR_PICTURE])
168             view = fPictureView;
169         else if ([identifier isEqualToString: TOOLBAR_AUDIO])
170             view = fAudioView;
171         else if ([identifier isEqualToString: TOOLBAR_ADVANCED])
172             view = fAdvancedView;
173         else;
174     }
175     
176     NSWindow * window = [self window];
177     if ([window contentView] == view)
178         return;
179     
180     NSRect windowRect = [window frame];
181     float difference = ([view frame].size.height - [[window contentView] frame].size.height) * [window userSpaceScaleFactor];
182     windowRect.origin.y -= difference;
183     windowRect.size.height += difference;
184     
185     [view setHidden: YES];
186     [window setContentView: view];
187     [window setFrame: windowRect display: YES animate: YES];
188     [view setHidden: NO];
189     
190     //set title label
191     if (sender)
192         [window setTitle: [sender label]];
193     else
194     {
195         NSToolbar * toolbar = [window toolbar];
196         NSString * itemIdentifier = [toolbar selectedItemIdentifier];
197         NSEnumerator * enumerator = [[toolbar items] objectEnumerator];
198         NSToolbarItem * item;
199         while ((item = [enumerator nextObject]))
200             if ([[item itemIdentifier] isEqualToString: itemIdentifier])
201             {
202                 [window setTitle: [item label]];
203                 break;
204             }
205     }
206 }
207
208 @end