Much better B-frame muxing frame-reordering. This will preserve the sps/pps info...
[HandBrake.git] / macosx / PrefsController.m
blob9ce02435a4ee4f241b7d301e4b7a0f8b9552ec9c
1 #import "PrefsController.h"
3 @implementation PrefsController
5 - (void) awakeFromNib
7     NSUserDefaults * defaults;
8     NSDictionary   * appDefaults;
9     
10     /* Unless the user specified otherwise, default is to check
11        for update  DefAdvancedx264Flags*/
12     defaults    = [NSUserDefaults standardUserDefaults];
13     appDefaults = [NSDictionary dictionaryWithObject:@"YES"
14                    forKey:@"CheckForUpdates"];
15         appDefaults = [NSDictionary dictionaryWithObject:@"English"
16                    forKey:@"DefaultLanguage"];
17         appDefaults = [NSDictionary dictionaryWithObject:@"NO"
18                    forKey:@"DefaultMpegName"];
19         appDefaults = [NSDictionary dictionaryWithObject:@"NO"
20                    forKey:@"DefaultCrf"];
21         appDefaults = [NSDictionary dictionaryWithObject:@"NO"
22                    forKey:@"DefaultDeinterlaceOn"];
23         appDefaults = [NSDictionary dictionaryWithObject:@"YES"
24                    forKey:@"DefaultPicSizeAutoiPod"];
25         appDefaults = [NSDictionary dictionaryWithObject:@"NO"
26                    forKey:@"PixelRatio"];
27           appDefaults = [NSDictionary dictionaryWithObject:@"NO"
28                    forKey:@"DefaultSurroundSound"];
29         appDefaults = [NSDictionary dictionaryWithObject:@""
30                    forKey:@"DefAdvancedx264Flags"];
31         appDefaults = [NSDictionary dictionaryWithObject:@"YES"
32                    forKey:@"DefaultPresetsDrawerShow"];
33         NSString *defDestDirectory =  @"~/Desktop";
34         defDestDirectory = [defDestDirectory stringByExpandingTildeInPath];
35         appDefaults = [NSDictionary dictionaryWithObject:defDestDirectory forKey:@"LastDestinationDirectory"];
36         
37         NSString *defSrcDirectory =  @"~/Desktop";
38         defSrcDirectory = [defSrcDirectory stringByExpandingTildeInPath];
39         appDefaults = [NSDictionary dictionaryWithObject:defSrcDirectory forKey:@"LastSourceDirectory"];
40         
41         appDefaults = [NSDictionary dictionaryWithObject:@"NO"
42                    forKey:@"DefaultAutoNaming"];
43         appDefaults = [NSDictionary dictionaryWithObject:@"NO"
44                    forKey:@"DefaultChapterMarkers"];
45     [defaults registerDefaults: appDefaults];
47         /* fUpdateCheck Check or uncheck according to the preferences */
48     [fUpdateCheck setState: [defaults boolForKey:@"CheckForUpdates"] ?
49         NSOnState : NSOffState];
51         // Fill the languages combobox
52     [fdefaultlanguage removeAllItems];
53         [fdefaultlanguage addItemWithObjectValue: @"Afar"];
54         [fdefaultlanguage addItemWithObjectValue: @"Abkhazian"];
55         [fdefaultlanguage addItemWithObjectValue: @"Afrikaans"];
56         [fdefaultlanguage addItemWithObjectValue: @"Albanian"];
57         [fdefaultlanguage addItemWithObjectValue: @"Amharic"];
58         [fdefaultlanguage addItemWithObjectValue: @"Arabic"];
59         [fdefaultlanguage addItemWithObjectValue: @"Armenian"];
60         [fdefaultlanguage addItemWithObjectValue: @"Assamese"];
61         [fdefaultlanguage addItemWithObjectValue: @"Avestan"];
62         [fdefaultlanguage addItemWithObjectValue: @"Aymara"];
63         [fdefaultlanguage addItemWithObjectValue: @"Azerbaijani"];
64         [fdefaultlanguage addItemWithObjectValue: @"Bashkir"];
65         [fdefaultlanguage addItemWithObjectValue: @"Basque"];
66         [fdefaultlanguage addItemWithObjectValue: @"Belarusian"];
67         [fdefaultlanguage addItemWithObjectValue: @"Bengali"];
68         [fdefaultlanguage addItemWithObjectValue: @"Bihari"];
69         [fdefaultlanguage addItemWithObjectValue: @"Bislama"];
70         [fdefaultlanguage addItemWithObjectValue: @"Bosnian"];
71         [fdefaultlanguage addItemWithObjectValue: @"Breton"];
72         [fdefaultlanguage addItemWithObjectValue: @"Bulgarian"];
73         [fdefaultlanguage addItemWithObjectValue: @"Burmese"];
74         [fdefaultlanguage addItemWithObjectValue: @"Catalan"];
75         [fdefaultlanguage addItemWithObjectValue: @"Chamorro"];
76         [fdefaultlanguage addItemWithObjectValue: @"Chechen"];
77         [fdefaultlanguage addItemWithObjectValue: @"Chichewa; Nyanja"];
78         [fdefaultlanguage addItemWithObjectValue: @"Chinese"];
79         [fdefaultlanguage addItemWithObjectValue: @"Church Slavic"];
80         [fdefaultlanguage addItemWithObjectValue: @"Chuvash"];
81         [fdefaultlanguage addItemWithObjectValue: @"Cornish"];
82         [fdefaultlanguage addItemWithObjectValue: @"Corsican"];
83         [fdefaultlanguage addItemWithObjectValue: @"Croatian"];
84         [fdefaultlanguage addItemWithObjectValue: @"Czech"];
85         [fdefaultlanguage addItemWithObjectValue: @"Dansk"];
86         [fdefaultlanguage addItemWithObjectValue: @"Deutsch"];
87         [fdefaultlanguage addItemWithObjectValue: @"Dzongkha"];
88         [fdefaultlanguage addItemWithObjectValue: @"English"];
89         [fdefaultlanguage addItemWithObjectValue: @"Espanol"];
90         [fdefaultlanguage addItemWithObjectValue: @"Esperanto"];
91         [fdefaultlanguage addItemWithObjectValue: @"Estonian"];
92         [fdefaultlanguage addItemWithObjectValue: @"Faroese"];
93         [fdefaultlanguage addItemWithObjectValue: @"Fijian"];
94         [fdefaultlanguage addItemWithObjectValue: @"Francais"];
95         [fdefaultlanguage addItemWithObjectValue: @"Frisian"];
96         [fdefaultlanguage addItemWithObjectValue: @"Georgian"];
97         [fdefaultlanguage addItemWithObjectValue: @"Gaelic (Scots)"];
98         [fdefaultlanguage addItemWithObjectValue: @"Gallegan"];
99         [fdefaultlanguage addItemWithObjectValue: @"Greek, Modern ()"];
100         [fdefaultlanguage addItemWithObjectValue: @"Guarani"];
101         [fdefaultlanguage addItemWithObjectValue: @"Gujarati"];
102         [fdefaultlanguage addItemWithObjectValue: @"Hebrew"];
103         [fdefaultlanguage addItemWithObjectValue: @"Herero"];
104         [fdefaultlanguage addItemWithObjectValue: @"Hindi"];
105         [fdefaultlanguage addItemWithObjectValue: @"Hiri Motu"];
106         [fdefaultlanguage addItemWithObjectValue: @"Inuktitut"];
107         [fdefaultlanguage addItemWithObjectValue: @"Interlingue"];
108         [fdefaultlanguage addItemWithObjectValue: @"Interlingua"];
109         [fdefaultlanguage addItemWithObjectValue: @"Indonesian"];
110         [fdefaultlanguage addItemWithObjectValue: @"Inupiaq"];
111         [fdefaultlanguage addItemWithObjectValue: @"Irish"];
112         [fdefaultlanguage addItemWithObjectValue: @"Islenska"];
113         [fdefaultlanguage addItemWithObjectValue: @"Italian"];
114         [fdefaultlanguage addItemWithObjectValue: @"Javanese"];
115         [fdefaultlanguage addItemWithObjectValue: @"Japanese"];
116         [fdefaultlanguage addItemWithObjectValue: @"Kalaallisut (Greenlandic)"];
117         [fdefaultlanguage addItemWithObjectValue: @"Kannada"];
118         [fdefaultlanguage addItemWithObjectValue: @"Kashmiri"];
119         [fdefaultlanguage addItemWithObjectValue: @"Kazakh"];
120         [fdefaultlanguage addItemWithObjectValue: @"Khmer"];
121         [fdefaultlanguage addItemWithObjectValue: @"Kikuyu"];
122         [fdefaultlanguage addItemWithObjectValue: @"Kinyarwanda"];
123         [fdefaultlanguage addItemWithObjectValue: @"Kirghiz"];
124         [fdefaultlanguage addItemWithObjectValue: @"Komi"];
125         [fdefaultlanguage addItemWithObjectValue: @"Korean"];
126         [fdefaultlanguage addItemWithObjectValue: @"Kuanyama"];
127         [fdefaultlanguage addItemWithObjectValue: @"Kurdish"];
128         [fdefaultlanguage addItemWithObjectValue: @"Lao"];
129         [fdefaultlanguage addItemWithObjectValue: @"Latin"];
130         [fdefaultlanguage addItemWithObjectValue: @"Latvian"];
131         [fdefaultlanguage addItemWithObjectValue: @"Lingala"];
132         [fdefaultlanguage addItemWithObjectValue: @"Lithuanian"];
133         [fdefaultlanguage addItemWithObjectValue: @"Letzeburgesch"];
134         [fdefaultlanguage addItemWithObjectValue: @"Macedonian"];
135         [fdefaultlanguage addItemWithObjectValue: @"Magyar"];
136         [fdefaultlanguage addItemWithObjectValue: @"Malay"];
137         [fdefaultlanguage addItemWithObjectValue: @"Malayalam"];
138         [fdefaultlanguage addItemWithObjectValue: @"Malagasy"];
139         [fdefaultlanguage addItemWithObjectValue: @"Maltese"];
140         [fdefaultlanguage addItemWithObjectValue: @"Manx"];
141         [fdefaultlanguage addItemWithObjectValue: @"Maori"];
142         [fdefaultlanguage addItemWithObjectValue: @"Marathi"];
143         [fdefaultlanguage addItemWithObjectValue: @"Marshall"];
144         [fdefaultlanguage addItemWithObjectValue: @"Moldavian"];
145         [fdefaultlanguage addItemWithObjectValue: @"Mongolian"];
146         [fdefaultlanguage addItemWithObjectValue: @"Nauru"];
147         [fdefaultlanguage addItemWithObjectValue: @"Navajo"];
148         [fdefaultlanguage addItemWithObjectValue: @"Ndebele, South"];
149         [fdefaultlanguage addItemWithObjectValue: @"Ndebele, North"];
150         [fdefaultlanguage addItemWithObjectValue: @"Ndonga"];
151         [fdefaultlanguage addItemWithObjectValue: @"Nederlands"];
152         [fdefaultlanguage addItemWithObjectValue: @"Nepali"];
153         [fdefaultlanguage addItemWithObjectValue: @"Northern Sami"];
154         [fdefaultlanguage addItemWithObjectValue: @"Norwegian"];
155         [fdefaultlanguage addItemWithObjectValue: @"Norwegian Bokmal"];
156         [fdefaultlanguage addItemWithObjectValue: @"Norwegian Nynorsk"];
157         [fdefaultlanguage addItemWithObjectValue: @"Occitan (post 1500); Provencal"];
158         [fdefaultlanguage addItemWithObjectValue: @"Oriya"];
159         [fdefaultlanguage addItemWithObjectValue: @"Oromo"];
160         [fdefaultlanguage addItemWithObjectValue: @"Ossetian; Ossetic"];
161         [fdefaultlanguage addItemWithObjectValue: @"Panjabi"];
162         [fdefaultlanguage addItemWithObjectValue: @"Persian"];
163         [fdefaultlanguage addItemWithObjectValue: @"Pali"];
164         [fdefaultlanguage addItemWithObjectValue: @"Polish"];
165         [fdefaultlanguage addItemWithObjectValue: @"Portugues"];
166         [fdefaultlanguage addItemWithObjectValue: @"Pushto"];
167         [fdefaultlanguage addItemWithObjectValue: @"Quechua"];
168         [fdefaultlanguage addItemWithObjectValue: @"Raeto-Romance"];
169         [fdefaultlanguage addItemWithObjectValue: @"Romanian"];
170         [fdefaultlanguage addItemWithObjectValue: @"Rundi"];
171         [fdefaultlanguage addItemWithObjectValue: @"Russian"];
172         [fdefaultlanguage addItemWithObjectValue: @"Sango"];
173         [fdefaultlanguage addItemWithObjectValue: @"Sanskrit"];
174         [fdefaultlanguage addItemWithObjectValue: @"Sardinian"];
175         [fdefaultlanguage addItemWithObjectValue: @"Serbian"];
176         [fdefaultlanguage addItemWithObjectValue: @"Sinhalese"];
177         [fdefaultlanguage addItemWithObjectValue: @"Slovak"];
178         [fdefaultlanguage addItemWithObjectValue: @"Slovenian"];
179         [fdefaultlanguage addItemWithObjectValue: @"Samoan"];
180         [fdefaultlanguage addItemWithObjectValue: @"Shona"];
181         [fdefaultlanguage addItemWithObjectValue: @"Sindhi"];
182         [fdefaultlanguage addItemWithObjectValue: @"Somali"];
183         [fdefaultlanguage addItemWithObjectValue: @"Sotho, Southern"];
184         [fdefaultlanguage addItemWithObjectValue: @"Sundanese"];
185         [fdefaultlanguage addItemWithObjectValue: @"Suomi"];
186         [fdefaultlanguage addItemWithObjectValue: @"Svenska"];
187         [fdefaultlanguage addItemWithObjectValue: @"Swahili"];
188         [fdefaultlanguage addItemWithObjectValue: @"Swati"];
189         [fdefaultlanguage addItemWithObjectValue: @"Tahitian"];
190         [fdefaultlanguage addItemWithObjectValue: @"Tamil"];
191         [fdefaultlanguage addItemWithObjectValue: @"Tatar"];
192         [fdefaultlanguage addItemWithObjectValue: @"Telugu"];
193         [fdefaultlanguage addItemWithObjectValue: @"Tajik"];
194         [fdefaultlanguage addItemWithObjectValue: @"Tagalog"];
195         [fdefaultlanguage addItemWithObjectValue: @"Thai"];
196         [fdefaultlanguage addItemWithObjectValue: @"Tibetan"];
197         [fdefaultlanguage addItemWithObjectValue: @"Tigrinya"];
198         [fdefaultlanguage addItemWithObjectValue: @"Tonga (Tonga Islands)"];
199         [fdefaultlanguage addItemWithObjectValue: @"Tswana"];
200         [fdefaultlanguage addItemWithObjectValue: @"Tsonga"];
201         [fdefaultlanguage addItemWithObjectValue: @"Turkish"];
202         [fdefaultlanguage addItemWithObjectValue: @"Turkmen"];
203         [fdefaultlanguage addItemWithObjectValue: @"Twi"];
204         [fdefaultlanguage addItemWithObjectValue: @"Uighur"];
205         [fdefaultlanguage addItemWithObjectValue: @"Ukrainian"];
206         [fdefaultlanguage addItemWithObjectValue: @"Urdu"];
207         [fdefaultlanguage addItemWithObjectValue: @"Uzbek"];
208         [fdefaultlanguage addItemWithObjectValue: @"Vietnamese"];
209         [fdefaultlanguage addItemWithObjectValue: @"Volapk"];
210         [fdefaultlanguage addItemWithObjectValue: @"Welsh"];
211         [fdefaultlanguage addItemWithObjectValue: @"Wolof"];
212         [fdefaultlanguage addItemWithObjectValue: @"Xhosa"];
213         [fdefaultlanguage addItemWithObjectValue: @"Yiddish"];
214         [fdefaultlanguage addItemWithObjectValue: @"Yoruba"];
215         [fdefaultlanguage addItemWithObjectValue: @"Zhuang"];
216         [fdefaultlanguage addItemWithObjectValue: @"Zulu"];
217         [fdefaultlanguage setStringValue:@"English"];
218         
219         /* If a Default Language is selected then write it otherwise let English as default */
220         
221         if ([defaults stringForKey:@"DefaultLanguage"]!=NULL)
222         {
223                 [fdefaultlanguage setStringValue:[defaults stringForKey:@"DefaultLanguage"]];
224     }
225         [fdefaultlanguage selectItemWithObjectValue:[defaults stringForKey:@"DefaultLanguage"]];
227     
230         /* fFileExtItunes Check or uncheck according to the preferences */
231     [fFileExtItunes setState: [defaults boolForKey:@"DefaultMpegName"] ?
232                                   NSOnState : NSOffState];
233         
234         /* fDefCrf Check or uncheck according to the preferences*/
235     [fDefCrf setState: [defaults boolForKey:@"DefaultCrf"] ?
236                    NSOnState : NSOffState];
237         
238         /* fDefDeinterlace Check or uncheck according to the preferences*/
239     [fDefDeinterlace setState: [defaults boolForKey:@"DefaultDeinterlaceOn"] ?
240                                    NSOnState : NSOffState];
241         
242         /* fDefPicSizeAutoSetipod Check or uncheck according to the preferences*/
243     [fDefPicSizeAutoSetipod setState: [defaults boolForKey:@"DefaultPicSizeAutoiPod"] ?
244                                                   NSOnState : NSOffState];
245         /* fDefPixelRatio */
246     [fDefPixelRatio setState: [defaults boolForKey:@"PixelRatio"] ?
247                                   NSOnState : NSOffState];
248         
249         /* fDefAudioSurround Check or uncheck according to the preferences */
250     [fDefAudioSurround setState: [defaults boolForKey:@"DefaultSurroundSound"] ?
251                                          NSOnState : NSOffState];
252                 
253         /* Insert default DefAdvanced x264 Flag here */
254         if ([defaults stringForKey:@"DefAdvancedx264Flags"]!=NULL)
255         {
256         [fDefAdvancedx264FlagsView setString:[defaults stringForKey:@"DefAdvancedx264Flags"]];
257         }
258         
259         /* fDefPresetDrawerShow Check or uncheck according to the preferences*/
260     [fDefPresetDrawerShow setState: [defaults boolForKey:@"DefaultPresetsDrawerShow"] ?
261                    NSOnState : NSOffState];
262         /* fDefAutoNaming Check or uncheck according to the preferences*/
263     [fDefAutoNaming setState: [defaults boolForKey:@"DefaultAutoNaming"] ?
264                    NSOnState : NSOffState];
265         /* fDefChapterMarkers Check or uncheck according to the preferences*/
266     [fDefChapterMarkers setState: [defaults boolForKey:@"DefaultChapterMarkers"] ?
267                    NSOnState : NSOffState];
271 - (IBAction) OpenPanel: (id) sender;
273     [NSApp runModalForWindow: fPanel];
276 - (IBAction) ClosePanel: (id) sender;
278     [self CheckChanged: sender]; 
279     [NSApp stopModal];
280     [fPanel orderOut: sender];
283 - (IBAction) CheckChanged: (id) sender
285     NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
286     
287     /* Check Update CheckForUpdates Set */
288         if( [fUpdateCheck state] == NSOnState )
289     {
290         [defaults setObject:@"YES" forKey:@"CheckForUpdates"];
291     }
292     else
293     {
294         [defaults setObject:@"NO" forKey:@"CheckForUpdates"];
295     }
296         
297         /* Preferred Language Combobox Set */
299         [defaults setObject:[fdefaultlanguage objectValueOfSelectedItem]  forKey:@"DefaultLanguage"];
302         /* File Extension Itunes Set */
303         
304         if( [fFileExtItunes state] == NSOnState )
305     {
306         [defaults setObject:@"YES" forKey:@"DefaultMpegName"];
307     }
308     else
309     {
310         [defaults setObject:@"NO" forKey:@"DefaultMpegName"];
311     }
312         
313         /* Use CRF for constant mode */
314         
315         if( [fDefCrf state] == NSOnState )
316     {
317         [defaults setObject:@"YES" forKey:@"DefaultCrf"];
318     }
319     else
320     {
321         [defaults setObject:@"NO" forKey:@"DefaultCrf"];
322     }
324   /* Use Deinterlace on as a default*/
325         
326         if( [fDefDeinterlace state] == NSOnState )
327     {
328         [defaults setObject:@"YES" forKey:@"DefaultDeinterlaceOn"];
329     }
330     else
331     {
332         [defaults setObject:@"NO" forKey:@"DefaultDeinterlaceOn"];
333     }
334         
335           /* Use Picture size set to 640 upon x264 (iPod) Selection as a default*/
336         
337         if( [fDefPicSizeAutoSetipod state] == NSOnState )
338     {
339         [defaults setObject:@"YES" forKey:@"DefaultPicSizeAutoiPod"];
340     }
341     else
342     {
343         [defaults setObject:@"NO" forKey:@"DefaultPicSizeAutoiPod"];
344     }
345         
346           /* Use Pixel Ratio*/
347         
348         if( [fDefPixelRatio state] == NSOnState )
349     {
350         [defaults setObject:@"YES" forKey:@"PixelRatio"];
351     }
352     else
353     {
354         [defaults setObject:@"NO" forKey:@"PixelRatio"];
355     }
357   
358         /* Use Surround Sound if available*/
359         
360         if( [fDefAudioSurround state] == NSOnState )
361     {
362         [defaults setObject:@"YES" forKey:@"DefaultSurroundSound"];
363     }
364     else
365     {
366         [defaults setObject:@"NO" forKey:@"DefaultSurroundSound"];
367     }   
368     
369                 
370         /*Advanced x264 Flag string into */
371       [defaults setObject:[fDefAdvancedx264FlagsView string]  forKey:@"DefAdvancedx264Flags"];  
372           
373             /* Show Presets Drawer upon launch*/
374         
375         if( [fDefPresetDrawerShow state] == NSOnState )
376     {
377         [defaults setObject:@"YES" forKey:@"DefaultPresetsDrawerShow"];
378     }
379     else
380     {
381         [defaults setObject:@"NO" forKey:@"DefaultPresetsDrawerShow"];
382     }
384     /* Use Auto Naming */
385         
386         if( [fDefAutoNaming state] == NSOnState )
387     {
388         [defaults setObject:@"YES" forKey:@"DefaultAutoNaming"];
389     }
390     else
391     {
392         [defaults setObject:@"NO" forKey:@"DefaultAutoNaming"];
393     }
394         /* Chapter Markers */
395         if( [fDefChapterMarkers state] == NSOnState )
396     {
397         [defaults setObject:@"YES" forKey:@"DefaultChapterMarkers"];
398     }
399     else
400     {
401         [defaults setObject:@"NO" forKey:@"DefaultChapterMarkers"];
402     }
406 @end