OSDN Git Service

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