OSDN Git Service

import jp-0.9.3
[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
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         @"",                @"DefAdvancedx264Flags",
45         @"YES",             @"DefaultPresetsDrawerShow",
46         desktopDirectory,   @"LastDestinationDirectory",
47         desktopDirectory,   @"LastSourceDirectory",
48         @"NO",              @"DefaultAutoNaming",
49         @"NO",              @"DisableDvdAutoDetect",
50         @"Alert Window",    @"AlertWhenDone",
51         @"1",               @"LoggingLevel",
52         @"4:10:15:9:10:35:9",    @"DecombCustomString",
53         @"NO",    @"EncodeLogLocation",
54         nil]];
55 }
56
57 /**
58  * Initializes the preferences controller by loading Preferences.nib file.
59  */
60 - (id)init
61 {
62     if (self = [super initWithWindowNibName:@"Preferences"])
63     {
64         NSAssert([self window], @"[HBPreferencesController init] window outlet is not connected in Preferences.nib");
65     }
66     return self;
67 }
68
69 - (void) awakeFromNib
70 {
71     NSToolbar * toolbar = [[[NSToolbar alloc] initWithIdentifier: @"Preferences Toolbar"] autorelease];
72     [toolbar setDelegate: self];
73     [toolbar setAllowsUserCustomization: NO];
74     [toolbar setDisplayMode: NSToolbarDisplayModeIconAndLabel];
75     [toolbar setSizeMode: NSToolbarSizeModeRegular];
76     [[self window] setToolbar: toolbar];
77
78     [toolbar setSelectedItemIdentifier: TOOLBAR_GENERAL];
79     [self setPrefView:nil];
80 }
81
82 - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) ident
83                     willBeInsertedIntoToolbar: (BOOL) flag
84 {
85     NSToolbarItem * item;
86     item = [[[NSToolbarItem alloc] initWithItemIdentifier: ident] autorelease];
87
88     if ([ident isEqualToString: TOOLBAR_GENERAL])
89     {
90         [item setLabel: NSLocalizedStringFromTable(@"General", @"Preferences", "General")];
91         [item setImage: [NSImage imageNamed: @"NSPreferencesGeneral"]];
92         [item setTarget: self];
93         [item setAction: @selector(setPrefView:)];
94         [item setAutovalidates: NO];
95     }
96     else if ([ident isEqualToString: TOOLBAR_PICTURE])
97     {
98         [item setLabel: NSLocalizedStringFromTable(@"Picture", @"Preferences", "Picture")];
99         [item setImage: [NSImage imageNamed: @"pref-picture"]];
100         [item setTarget: self];
101         [item setAction: @selector(setPrefView:)];
102         [item setAutovalidates: NO];
103     }
104     else if ([ident isEqualToString: TOOLBAR_AUDIO])
105     {
106         [item setLabel: NSLocalizedStringFromTable(@"Audio", @"Preferences", "Audio")];
107         [item setImage: [NSImage imageNamed: @"pref-audio"]];
108         [item setTarget: self];
109         [item setAction: @selector(setPrefView:)];
110         [item setAutovalidates: NO];
111     }
112     else if ([ident isEqualToString: TOOLBAR_ADVANCED])
113     {
114         [item setLabel: NSLocalizedStringFromTable(@"Advanced", @"Preferences", "Advanced")];
115         [item setImage: [NSImage imageNamed: @"NSAdvanced"]];
116         [item setTarget: self];
117         [item setAction: @selector(setPrefView:)];
118         [item setAutovalidates: NO];
119     }
120     else
121     {
122         return nil;
123     }
124
125     return item;
126 }
127
128 - (NSArray *) toolbarSelectableItemIdentifiers: (NSToolbar *) toolbar
129 {
130     return [self toolbarDefaultItemIdentifiers: toolbar];
131 }
132
133 - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar
134 {
135     return [self toolbarAllowedItemIdentifiers: toolbar];
136 }
137
138 - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar
139 {
140     return [NSArray arrayWithObjects: TOOLBAR_GENERAL, TOOLBAR_PICTURE,
141                                         TOOLBAR_AUDIO, TOOLBAR_ADVANCED, nil];
142 }
143
144 @end
145
146 @implementation HBPreferencesController (Private)
147
148 - (void) setPrefView: (id) sender
149 {
150     NSView * view = fGeneralView;
151     if( sender )
152     {
153         NSString * identifier = [sender itemIdentifier];
154         if( [identifier isEqualToString: TOOLBAR_PICTURE] )
155             view = fPictureView;
156         else if( [identifier isEqualToString: TOOLBAR_AUDIO] )
157             view = fAudioView;
158         else if( [identifier isEqualToString: TOOLBAR_ADVANCED] )
159             view = fAdvancedView;
160         else;
161     }
162
163     NSWindow * window = [self window];
164     if( [window contentView] == view )
165         return;
166
167     NSRect windowRect = [window frame];
168     CGFloat difference = ( [view frame].size.height - [[window contentView] frame].size.height ) * [window userSpaceScaleFactor];
169     windowRect.origin.y -= difference;
170     windowRect.size.height += difference;
171
172     [view setHidden: YES];
173     [window setContentView: view];
174     [window setFrame: windowRect display: YES animate: YES];
175     [view setHidden: NO];
176
177     //set title label
178     if( sender )
179         [window setTitle: [sender label]];
180     else
181     {
182         NSToolbar * toolbar = [window toolbar];
183         NSString * itemIdentifier = [toolbar selectedItemIdentifier];
184         for( NSToolbarItem * item in [toolbar items] )
185             if( [[item itemIdentifier] isEqualToString: itemIdentifier] )
186             {
187                 [window setTitle: [item label]];
188                 break;
189             }
190     }
191 }
192
193 @end