OSDN Git Service

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