OSDN Git Service

x264 bump to r1101
[handbrake-jp/handbrake-jp-git.git] / macosx / HBFilterController.mm
1 /* $Id: PictureController.mm,v 1.11 2005/08/01 15:10:44 titer Exp $
2
3    This file is part of the HandBrake source code.
4    Homepage: <http://handbrake.fr/>.
5    It may be used under the terms of the GNU General Public License. */
6
7 #import "HBFilterController.h"
8 #import "PictureController.h"
9 #import "Controller.h"
10 #import "HBPreviewController.h"
11
12
13
14 @implementation PictureFilterController
15
16 - (id)init
17 {
18         if (self = [super initWithWindowNibName:@"PictureFilters"])
19         {
20         // NSWindowController likes to lazily load its window. However since
21         // this controller tries to set all sorts of outlets before the window
22         // is displayed, we need it to load immediately. The correct way to do
23         // this, according to the documentation, is simply to invoke the window
24         // getter once.
25         //
26         // If/when we switch a lot of this stuff to bindings, this can probably
27         // go away.
28         [self window];
29         
30         fPreviewController = [[PreviewController alloc] init];
31     }
32         return self;
33 }
34
35 //------------------------------------------------------------------------------------
36 // Displays and brings the picture window to the front
37 //------------------------------------------------------------------------------------
38 - (IBAction) showFilterWindow: (id)sender
39 {
40     
41     if ([[self window] isVisible])
42     {
43         [[self window] close];
44     }
45     else
46     {
47         [self showWindow:sender];
48         [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PictureFiltersWindowIsOpen"];
49         if ([fPreviewController fullScreen] == YES)
50         {
51             [self setToFullScreenMode];
52         }
53         else
54         {
55             [self setToWindowedMode];
56         }
57     }
58 }
59
60 - (IBAction) showPictureSettingsWindow: (id)sender
61 {
62     [fHBController showPicturePanel:sender];
63 }
64
65 - (IBAction) showPreviewWindow: (id)sender
66 {
67     [fHBController showPreviewWindow:sender];
68 }
69
70 - (void) setToFullScreenMode
71 {
72     int32_t shieldLevel = CGShieldingWindowLevel(); 
73     
74     [fFilterWindow setLevel:shieldLevel + 1]; 
75     // Show the window. 
76     [fFilterWindow makeKeyAndOrderFront:self];
77 }
78
79 - (void) setToWindowedMode
80 {
81     /* Set the window back to regular level */
82     [[self window] setLevel:NSNormalWindowLevel];
83 }
84
85 - (void)setHBController: (HBController *)controller
86 {
87     
88     fHBController = controller;
89     
90 }
91
92 - (void)awakeFromNib
93 {
94     [fFilterWindow setDelegate:self];
95     
96     if( ![[self window] setFrameUsingName:@"PictureFilters"] )
97         [[self window] center];
98     [self setWindowFrameAutosaveName:@"PictureFilters"];
99     [[self window] setExcludedFromWindowsMenu:YES];
100     
101     [self setInitialPictureFilters];
102
103 }
104
105
106 - (void)windowWillClose:(NSNotification *)aNotification
107 {
108 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PictureFiltersWindowIsOpen"];
109 }
110
111 - (BOOL)windowShouldClose:(id)fPictureWindow
112 {
113     return YES;
114 }
115
116 - (void) dealloc
117 {
118     [fPreviewController release];
119     [super dealloc];
120 }
121
122 - (void) SetHandle: (hb_handle_t *) handle
123 {
124     fHandle = handle;
125     
126
127     
128     //[fPreviewController SetHandle: fHandle];
129     
130
131 }
132
133 /* we use this to setup the initial picture filters upon first launch, after that their states
134 are maintained across different sources */
135 - (void) setInitialPictureFilters
136 {
137         /* we use a popup to show the detelecine settings */
138         [fDetelecinePopUp removeAllItems];
139     [fDetelecinePopUp addItemWithTitle: @"Off"];
140     [fDetelecinePopUp addItemWithTitle: @"Default"];
141     [fDetelecinePopUp addItemWithTitle: @"Custom"];
142     [fDetelecinePopUp selectItemAtIndex: fPictureFilterSettings.detelecine];
143     
144     [self modeDecombDeinterlaceSliderChanged:nil];
145     /* we use a popup to show the decomb settings */
146         [fDecombPopUp removeAllItems];
147     [fDecombPopUp addItemWithTitle: @"Off"];
148     [fDecombPopUp addItemWithTitle: @"Default"];
149     [fDecombPopUp addItemWithTitle: @"Custom"];
150     [fDecombPopUp selectItemAtIndex: fPictureFilterSettings.decomb];
151     
152     /* we use a popup to show the deinterlace settings */
153         [fDeinterlacePopUp removeAllItems];
154     [fDeinterlacePopUp addItemWithTitle: @"None"];
155     [fDeinterlacePopUp addItemWithTitle: @"Fast"];
156     [fDeinterlacePopUp addItemWithTitle: @"Slow"];
157         [fDeinterlacePopUp addItemWithTitle: @"Slower"];
158     [fDeinterlacePopUp addItemWithTitle: @"Custom"];
159     
160         /* Set deinterlaces level according to the integer in the main window */
161         [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
162
163         /* we use a popup to show the denoise settings */
164         [fDenoisePopUp removeAllItems];
165     [fDenoisePopUp addItemWithTitle: @"None"];
166     [fDenoisePopUp addItemWithTitle: @"Weak"];
167         [fDenoisePopUp addItemWithTitle: @"Medium"];
168     [fDenoisePopUp addItemWithTitle: @"Strong"];
169     [fDenoisePopUp addItemWithTitle: @"Custom"];
170         /* Set denoises level according to the integer in the main window */
171         [fDenoisePopUp selectItemAtIndex: fPictureFilterSettings.denoise];
172     
173
174 }
175
176 - (void) SetTitle: (hb_title_t *) title
177 {
178     /* Set filters widgets according to the filters struct */
179     [fDetelecinePopUp selectItemAtIndex:fPictureFilterSettings.detelecine];
180     [fDecombPopUp selectItemAtIndex:fPictureFilterSettings.decomb];
181     [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
182     [fDenoisePopUp selectItemAtIndex: fPictureFilterSettings.denoise];
183     [fDeblockSlider setFloatValue:fPictureFilterSettings.deblock];
184     [fGrayscaleCheck setState:fPictureFilterSettings.grayscale];
185     
186     [self deblockSliderChanged: nil];
187 }
188
189 - (IBAction) deblockSliderChanged: (id) sender
190 {
191     if ([fDeblockSlider floatValue] == 4.0)
192     {
193     [fDeblockField setStringValue: [NSString stringWithFormat: @"Off"]];
194     }
195     else
196     {
197     [fDeblockField setStringValue: [NSString stringWithFormat: @"%.0f", [fDeblockSlider floatValue]]];
198     }
199         [self FilterSettingsChanged: sender];
200 }
201
202
203 - (IBAction) modeDecombDeinterlaceSliderChanged: (id) sender
204 {
205     /* Decomb selected*/
206     if ([fDecombDeinterlaceSlider floatValue] == 0.0)
207     {
208     [fDecombBox setHidden:NO];
209     [fDeinterlaceBox setHidden:YES];
210     fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem];
211     fPictureFilterSettings.usedecomb = 1;
212     fPictureFilterSettings.deinterlace = 0;
213     [self adjustFilterDisplay:fDecombPopUp];
214     [fDecombPopUp selectItemAtIndex:fPictureFilterSettings.decomb];
215     }
216     else
217     {
218     [fDecombBox setHidden:YES];
219     [fDeinterlaceBox setHidden:NO];
220     fPictureFilterSettings.usedecomb = 0;
221     fPictureFilterSettings.decomb = 0;
222     [self adjustFilterDisplay:fDeinterlacePopUp];
223     [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
224     }
225         [self FilterSettingsChanged: sender];
226 }
227
228 - (IBAction) FilterSettingsChanged: (id) sender
229 {
230     fPictureFilterSettings.detelecine  = [fDetelecinePopUp indexOfSelectedItem];
231     [self adjustFilterDisplay:fDetelecinePopUp];
232     
233     fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem];
234     [self adjustFilterDisplay:fDecombPopUp];
235     
236     fPictureFilterSettings.deinterlace = [fDeinterlacePopUp indexOfSelectedItem];
237     [self adjustFilterDisplay:fDeinterlacePopUp];
238     
239     fPictureFilterSettings.denoise = [fDenoisePopUp indexOfSelectedItem];
240     [self adjustFilterDisplay:fDenoisePopUp];
241     
242     if ([fDeblockField stringValue] == @"Off")
243     {
244         fPictureFilterSettings.deblock  = 0;
245     }
246     else
247     {
248         fPictureFilterSettings.deblock  = [fDeblockField intValue];
249     }
250     
251     fPictureFilterSettings.grayscale = [fGrayscaleCheck state];
252     
253     if (sender != nil)
254     {
255         [fHBController pictureSettingsDidChange];
256         
257     }   
258
259 }
260
261 - (void) adjustFilterDisplay: (id) sender
262 {
263     
264     NSBox * filterBox;
265     NSTextField * filterField;
266     if (sender == fDetelecinePopUp)
267     {
268         filterBox = fDetelecineBox;
269         filterField = fDetelecineField;
270     }
271     if (sender == fDecombPopUp)
272     {
273         filterBox = fDecombBox;
274         filterField = fDecombField;
275     }
276     if (sender == fDeinterlacePopUp)
277     {
278         filterBox = fDeinterlaceBox;
279         filterField = fDeinterlaceField;
280     }
281     
282     if (sender == fDenoisePopUp)
283     {
284         filterBox = fDenoiseBox;
285         filterField = fDenoiseField;
286     }
287     
288     NSSize currentSize = [filterBox frame].size;
289     if ([sender titleOfSelectedItem] == @"Custom")
290     {
291         currentSize.height = 60;
292     }
293     else
294     {
295         currentSize.height = 30;
296     }
297     /* Check to see if we have changed the size from current */
298     if (currentSize.height != [filterBox frame].size.height)
299     {
300         /* We are changing the size of the box, so recalc the origin */
301         NSPoint origin = [filterBox frame].origin;
302         /* See if we are expanding the box downwards */
303         if (currentSize.height > [filterBox frame].size.height)
304         {
305             origin.y = origin.y - currentSize.height / 2;
306         }
307         else
308         {
309             origin.y = origin.y + currentSize.height;
310         }
311         /* go ahead and resize the box */
312         [filterBox setFrameSize:currentSize];
313         [filterBox setFrameOrigin:origin];
314     }
315     
316 }
317
318 #pragma mark -
319
320
321
322 - (int) detelecine
323 {
324     return fPictureFilterSettings.detelecine;
325 }
326
327 - (NSString*) detelecineCustomString
328 {
329     return [fDetelecineField stringValue];
330 }
331
332 - (void) setDetelecine: (int) setting
333 {
334     fPictureFilterSettings.detelecine = setting;
335 }
336
337 - (int) deinterlace
338 {
339     return fPictureFilterSettings.deinterlace;
340 }
341 - (NSString*) deinterlaceCustomString
342 {
343     return [fDeinterlaceField stringValue];
344 }
345 - (void) setDeinterlace: (int) setting 
346 {
347     fPictureFilterSettings.deinterlace = setting;
348 }
349 - (int) decomb
350 {
351     return fPictureFilterSettings.decomb;
352 }
353
354 - (NSString*) decombCustomString
355 {
356     return [fDecombField stringValue];
357 }
358
359 - (int) useDecomb
360 {
361     return fPictureFilterSettings.usedecomb;
362 }
363
364 - (void) setUseDecomb: (int) setting
365 {
366     fPictureFilterSettings.usedecomb = setting;
367 }
368
369 - (void) setDecomb: (int) setting {
370     fPictureFilterSettings.decomb = setting;
371 }
372 - (int) denoise
373 {
374     return fPictureFilterSettings.denoise;
375 }
376
377 - (NSString*) denoiseCustomString
378 {
379     return [fDenoiseField stringValue];
380 }
381
382 - (void) setDenoise: (int) setting
383 {
384     fPictureFilterSettings.denoise = setting;
385 }
386
387 - (int) deblock
388 {
389     return fPictureFilterSettings.deblock;
390 }
391
392 - (void) setDeblock: (int) setting
393 {
394     fPictureFilterSettings.deblock = setting;
395 }
396
397 - (int) grayscale
398 {
399     return fPictureFilterSettings.grayscale;
400 }
401
402 - (void) setGrayscale: (int) setting
403 {
404     fPictureFilterSettings.grayscale = setting;
405 }
406
407 - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title
408 {
409     [self SetTitle:title];
410     [self showWindow:sender];
411
412 }
413
414 @end
415