OSDN Git Service

MacGui: Oops, only trellis can hide psy-trellis now so it has to hide when sender...
[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         @"Open Source",     @"LaunchSourceBehavior",
47         @"English",         @"DefaultLanguage",
48         @"NO",              @"DefaultMpegName",
49         @"YES",             @"DefaultCrf",
50         @"",                @"DefAdvancedx264Flags",
51         @"YES",             @"DefaultPresetsDrawerShow",
52         desktopDirectory,   @"LastDestinationDirectory",
53         desktopDirectory,   @"LastSourceDirectory",
54         @"NO",              @"DefaultAutoNaming",
55         @"NO",              @"DisableDvdAutoDetect",
56         @"Alert Window",    @"AlertWhenDone",
57         @"1",               @"LoggingLevel",
58         @"NO",              @"EncodeLogLocation",
59         @"10",              @"PreviewsNumber",
60         @"",                @"Drawer Size",
61         @"0.25",              @"x264CqSliderFractional",
62         nil]];
63 }
64
65 /**
66  * -[HBPreferencesController init]
67  *
68  * Initializes the preferences controller by loading Preferences.nib file.
69  *
70  */
71 - (id)init
72 {
73     if (self = [super initWithWindowNibName:@"Preferences"])
74     {
75         NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
76     }
77     return self;
78 }
79
80 /**
81  * -[HBPreferencesController awakeFromNib]
82  *
83  * Called after all the outlets in the nib file have been attached. Sets up the
84  * toolbar and shows the "General" pane.
85  *
86  */
87 - (void) awakeFromNib
88 {
89     NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
90     [toolbar setDelegate: self];
91     [toolbar setAllowsUserCustomization: NO];
92     [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
93     [toolbar setSizeMode: NSToolbarSizeModeRegular];
94     [[self window] setToolbar: toolbar];
95
96     [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
97     [self setPrefView:nil];
98 }
99
100 - (NSToolbarItem *)toolbar: (NSToolbar *)toolbar
101      itemForItemIdentifier: (NSString *)ident
102  willBeInsertedIntoToolbar: (BOOL)flag
103 {
104     if ( [ident isEqualToString:TOOLBAR_GENERAL] )
105     {
106         return [self toolbarItemWithIdentifier:ident
107                                          label:NSLocalizedString(@"General", @"Preferences General Toolbar Item")
108                                          image:[NSImage imageNamed:NSImageNamePreferencesGeneral]];
109     }
110     else if ( [ident isEqualToString:TOOLBAR_PICTURE] )
111     {
112         return [self toolbarItemWithIdentifier:ident
113                                          label:NSLocalizedString(@"Picture", @"Preferences Picture Toolbar Item")
114                                          image:[NSImage imageNamed:@"pref-picture"]];
115     }
116     else if ( [ident isEqualToString:TOOLBAR_AUDIO] )
117     {
118         return [self toolbarItemWithIdentifier:ident
119                                          label:NSLocalizedString(@"Audio", @"Preferences Audio Toolbar Item")
120                                          image:[NSImage imageNamed:@"pref-audio"]];
121     }
122     else if ( [ident isEqualToString:TOOLBAR_ADVANCED] )
123     {
124         return [self toolbarItemWithIdentifier:ident
125                                          label:NSLocalizedString(@"Advanced", @"Preferences Advanced Toolbar Item")
126                                          image:[NSImage imageNamed:NSImageNameAdvanced]];
127     }
128
129     return nil;
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 @end
149
150 @implementation HBPreferencesController (Private)
151
152 - (void) setPrefView: (id) sender
153 {
154     NSView * view = fGeneralView;
155     if( sender )
156     {
157         NSString * identifier = [sender itemIdentifier];
158         if( [identifier isEqualToString: TOOLBAR_PICTURE] )
159             view = fPictureView;
160         else if( [identifier isEqualToString: TOOLBAR_AUDIO] )
161             view = fAudioView;
162         else if( [identifier isEqualToString: TOOLBAR_ADVANCED] )
163             view = fAdvancedView;
164         else;
165     }
166
167     NSWindow * window = [self window];
168     if( [window contentView] == view )
169         return;
170
171     NSRect windowRect = [window frame];
172     CGFloat difference = ( [view frame].size.height - [[window contentView] frame].size.height ) * [window userSpaceScaleFactor];
173     windowRect.origin.y -= difference;
174     windowRect.size.height += difference;
175
176     [view setHidden: YES];
177     [window setContentView: view];
178     [window setFrame: windowRect display: YES animate: YES];
179     [view setHidden: NO];
180
181     //set title label
182     if( sender )
183         [window setTitle: [sender label]];
184     else
185     {
186         NSToolbar * toolbar = [window toolbar];
187         NSString * itemIdentifier = [toolbar selectedItemIdentifier];
188         for( NSToolbarItem * item in [toolbar items] )
189             if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
190             {
191                 [window setTitle: [item label]];
192                 break;
193             }
194     }
195 }
196
197 /**
198  * -[HBPreferencesController(Private) toolbarItemWithIdentifier:label:image:]
199  *
200  * Shared code for creating the NSToolbarItems for the Preferences toolbar.
201  *
202  */
203 - (NSToolbarItem *)toolbarItemWithIdentifier: (NSString *)identifier
204                                        label: (NSString *)label
205                                        image: (NSImage *)image
206 {
207     NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:identifier];
208     [item setLabel:label];
209     [item setImage:image];
210     [item setAction:@selector(setPrefView:)];
211     [item setAutovalidates:NO];
212     return [item autorelease];
213 }
214
215 @end