OSDN Git Service

Update ffmpeg to svn r15974, fixed up minor incompatiblities in the ffmpeg LATM diff...
[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 - (NSToolbarItem *)toolbarItemWithIdentifier: (NSString *)identifier
27                                        label: (NSString *)label
28                                        image: (NSImage *)image;
29
30 @end
31
32 @implementation HBPreferencesController
33
34 /**
35  * +[HBPreferencesController registerUserDefaults]
36  *
37  * Registers default values to user defaults. This is called immediately
38  * when HandBrake starts, from [HBController init].
39  */
40 + (void)registerUserDefaults
41 {
42     NSString *desktopDirectory =  [@"~/Desktop" stringByExpandingTildeInPath];
43
44     [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
45         @"YES",             @"CheckForUpdates",
46         @"English",         @"DefaultLanguage",
47         @"NO",              @"DefaultMpegName",
48         @"YES",             @"DefaultCrf",
49         @"",                @"DefAdvancedx264Flags",
50         @"YES",             @"DefaultPresetsDrawerShow",
51         desktopDirectory,   @"LastDestinationDirectory",
52         desktopDirectory,   @"LastSourceDirectory",
53         @"NO",              @"DefaultAutoNaming",
54         @"NO",              @"DisableDvdAutoDetect",
55         @"Alert Window",    @"AlertWhenDone",
56         @"1",               @"LoggingLevel",
57         @"NO",    @"EncodeLogLocation",
58         @"10",    @"PreviewsNumber",
59         nil]];
60 }
61
62 /**
63  * -[HBPreferencesController init]
64  *
65  * Initializes the preferences controller by loading Preferences.nib file.
66  *
67  */
68 - (id)init
69 {
70     if (self = [super initWithWindowNibName:@"Preferences"])
71     {
72         NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
73     }
74     return self;
75 }
76
77 /**
78  * -[HBPreferencesController awakeFromNib]
79  *
80  * Called after all the outlets in the nib file have been attached. Sets up the
81  * toolbar and shows the "General" pane.
82  *
83  */
84 - (void) awakeFromNib
85 {
86     NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
87     [toolbar setDelegate: self];
88     [toolbar setAllowsUserCustomization: NO];
89     [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
90     [toolbar setSizeMode: NSToolbarSizeModeRegular];
91     [[self window] setToolbar: toolbar];
92
93     [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
94     [self setPrefView:nil];
95 }
96
97 - (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
98      itemForItemIdentifier: (NSString *)ident
99  willBeInsertedIntoToolbar: (BOOL)flag
100 {
101     if ( [ident isEqualToString:TOOLBAR_GENERAL] )
102     {
103         return [self toolbarItemWithIdentifier:ident
104                                          label:NSLocalizedString(@"General", @"Preferences General Toolbar Item")
105                                          image:[NSImage imageNamed:NSImageNamePreferencesGeneral]];
106     }
107     else if ( [ident isEqualToString:TOOLBAR_PICTURE] )
108     {
109         return [self toolbarItemWithIdentifier:ident
110                                          label:NSLocalizedString(@"Picture", @"Preferences Picture Toolbar Item")
111                                          image:[NSImage imageNamed:@"pref-picture"]];
112     }
113     else if ( [ident isEqualToString:TOOLBAR_AUDIO] )
114     {
115         return [self toolbarItemWithIdentifier:ident
116                                          label:NSLocalizedString(@"Audio", @"Preferences Audio Toolbar Item")
117                                          image:[NSImage imageNamed:@"pref-audio"]];
118     }
119     else if ( [ident isEqualToString:TOOLBAR_ADVANCED] )
120     {
121         return [self toolbarItemWithIdentifier:ident
122                                          label:NSLocalizedString(@"Advanced", @"Preferences Advanced Toolbar Item")
123                                          image:[NSImage imageNamed:NSImageNameAdvanced]];
124     }
125
126     return nil;
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     CGFloat 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         for( NSToolbarItem * item in [toolbar items] )
186             if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
187             {
188                 [window setTitle: [item label]];
189                 break;
190             }
191     }
192 }
193
194 /**
195  * -[HBPreferencesController(Private) toolbarItemWithIdentifier:label:image:]
196  *
197  * Shared code for creating the NSToolbarItems for the Preferences toolbar.
198  *
199  */
200 - (NSToolbarItem *)toolbarItemWithIdentifier: (NSString *)identifier
201                                        label: (NSString *)label
202                                        image: (NSImage *)image
203 {
204     NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:identifier];
205     [item setLabel:label];
206     [item setImage:image];
207     [item setAction:@selector(setPrefView:)];
208     [item setAutovalidates:NO];
209     return [item autorelease];
210 }
211
212 @end