OSDN Git Service

merge 0.9.4 to jp
[handbrake-jp/handbrake-jp.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         @"Open Source",     @"LaunchSourceBehavior",
47         @"English",         @"DefaultLanguage",
48         @"YES",              @"UseCoreAudio",
49         @"NO",              @"DefaultMpegName",
50         @"YES",              @"UseDvdNav",
51         @"",                @"DefAdvancedx264Flags",
52         @"YES",             @"DefaultPresetsDrawerShow",
53         desktopDirectory,   @"LastDestinationDirectory",
54         desktopDirectory,   @"LastSourceDirectory",
55         @"NO",              @"DefaultAutoNaming",
56         @"NO",              @"DisableDvdAutoDetect",
57         @"Alert Window",    @"AlertWhenDone",
58         @"1",               @"LoggingLevel",
59         @"NO",              @"EncodeLogLocation",
60         @"10",              @"PreviewsNumber",
61         @"",                @"Drawer Size",
62         @"0.25",            @"x264CqSliderFractional",
63         @"YES",              @"AlertBuiltInPresetUpdate",
64         nil]];
65 }
66
67 /**
68  * -[HBPreferencesController init]
69  *
70  * Initializes the preferences controller by loading Preferences.nib file.
71  *
72  */
73 - (id)init
74 {
75     if (self = [super initWithWindowNibName:@"Preferences"])
76     {
77         NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
78     }
79     return self;
80 }
81
82 /**
83  * -[HBPreferencesController awakeFromNib]
84  *
85  * Called after all the outlets in the nib file have been attached. Sets up the
86  * toolbar and shows the "General" pane.
87  *
88  */
89 - (void) awakeFromNib
90 {
91     NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
92     [toolbar setDelegate: self];
93     [toolbar setAllowsUserCustomization: NO];
94     [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
95     [toolbar setSizeMode: NSToolbarSizeModeRegular];
96     [[self window] setToolbar: toolbar];
97
98     [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
99     [self setPrefView:nil];
100 }
101
102 - (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
103      itemForItemIdentifier: (NSString *)ident
104  willBeInsertedIntoToolbar: (BOOL)flag
105 {
106     /*
107     NSToolbarItem * item;
108     item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
109
110     if ([ident isEqualToString: TOOLBAR_GENERAL])
111     {
112         [item setLabel: NSLocalizedStringFromTable(@"General", @"Preferences", "General")];
113         [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
114         [item setTarget: self];
115         [item setAction: @selector(setPrefView:)];
116         [item setAutovalidates: NO];
117     }
118     else if ([ident isEqualToString: TOOLBAR_PICTURE])
119     {
120         [item setLabel: NSLocalizedStringFromTable(@"Picture", @"Preferences", "Picture")];
121         [item setImage: [NSImage imageNamed: @"pref-picture"]];
122         [item setTarget: self];
123         [item setAction: @selector(setPrefView:)];
124         [item setAutovalidates: NO];
125     */
126     if ( [ident isEqualToString:TOOLBAR_GENERAL] )
127     {
128         return [self toolbarItemWithIdentifier:ident
129                                          label:NSLocalizedString(@"General", @"Preferences General Toolbar Item")
130                                          image:[NSImage imageNamed:NSImageNamePreferencesGeneral]];
131     }
132     else if ( [ident isEqualToString:TOOLBAR_PICTURE] )
133     {
134         /*
135         [item setLabel: NSLocalizedStringFromTable(@"Audio", @"Preferences", "Audio")];
136         [item setImage: [NSImage imageNamed: @"pref-audio"]];
137         [item setTarget: self];
138         [item setAction: @selector(setPrefView:)];
139         [item setAutovalidates: NO];
140         */
141         return [self toolbarItemWithIdentifier:ident
142                                          label:NSLocalizedString(@"Picture", @"Preferences Picture Toolbar Item")
143                                          image:[NSImage imageNamed:@"pref-picture"]];
144     }
145     else if ( [ident isEqualToString:TOOLBAR_AUDIO] )
146     {
147         /*
148         [item setLabel: NSLocalizedStringFromTable(@"Advanced", @"Preferences", "Advanced")];
149         [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
150         [item setTarget: self];
151         [item setAction: @selector(setPrefView:)];
152         [item setAutovalidates: NO];
153         */
154         return [self toolbarItemWithIdentifier:ident
155                                          label:NSLocalizedString(@"Audio", @"Preferences Audio Toolbar Item")
156                                          image:[NSImage imageNamed:@"pref-audio"]];
157     }
158     else if ( [ident isEqualToString:TOOLBAR_ADVANCED] )
159     {
160         return [self toolbarItemWithIdentifier:ident
161                                          label:NSLocalizedString(@"Advanced", @"Preferences Advanced Toolbar Item")
162                                          image:[NSImage imageNamed:NSImageNameAdvanced]];
163     }
164
165     return nil;
166 }
167
168 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
169 {
170     return [self toolbarDefaultItemIdentifiers: toolbar];
171 }
172
173 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
174 {
175     return [self toolbarAllowedItemIdentifiers: toolbar];
176 }
177
178 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
179 {
180     return [NSArray arrayWithObjects: TOOLBAR_GENERAL, /*TOOLBAR_PICTURE, */
181                                         TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
182 }
183
184 @end
185
186 @implementation HBPreferencesController (Private)
187
188 - (void) setPrefView: (id) sender
189 {
190     NSView * view = fGeneralView;
191     if( sender )
192     {
193         NSString * identifier = [sender itemIdentifier];
194         if( [identifier isEqualToString: TOOLBAR_PICTURE] )
195             view = fPictureView;
196         else if( [identifier isEqualToString: TOOLBAR_AUDIO] )
197             view = fAudioView;
198         else if( [identifier isEqualToString: TOOLBAR_ADVANCED] )
199             view = fAdvancedView;
200         else;
201     }
202
203     NSWindow * window = [self window];
204     if( [window contentView] == view )
205         return;
206
207     NSRect windowRect = [window frame];
208     CGFloat difference = ( [view frame].size.height - [[window contentView] frame].size.height ) * [window userSpaceScaleFactor];
209     windowRect.origin.y -= difference;
210     windowRect.size.height += difference;
211
212     [view setHidden: YES];
213     [window setContentView: view];
214     [window setFrame: windowRect display: YES animate: YES];
215     [view setHidden: NO];
216
217     //set title label
218     if( sender )
219         [window setTitle: [sender label]];
220     else
221     {
222         NSToolbar * toolbar = [window toolbar];
223         NSString * itemIdentifier = [toolbar selectedItemIdentifier];
224         for( NSToolbarItem * item in [toolbar items] )
225             if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
226             {
227                 [window setTitle: [item label]];
228                 break;
229             }
230     }
231 }
232
233 /**
234  * -[HBPreferencesController(Private) toolbarItemWithIdentifier:label:image:]
235  *
236  * Shared code for creating the NSToolbarItems for the Preferences toolbar.
237  *
238  */
239 - (NSToolbarItem *)toolbarItemWithIdentifier: (NSString *)identifier
240                                        label: (NSString *)label
241                                        image: (NSImage *)image
242 {
243     NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:identifier];
244     [item setLabel:label];
245     [item setImage:image];
246     [item setAction:@selector(setPrefView:)];
247     [item setAutovalidates:NO];
248     return [item autorelease];
249 }
250
251 @end