OSDN Git Service

BuildSystem: darwin
[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
231     fPictureFilterSettings.detelecine  = [fDetelecinePopUp indexOfSelectedItem];
232     [self adjustFilterDisplay:fDetelecinePopUp];
233     
234     fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem];
235     [self adjustFilterDisplay:fDecombPopUp];
236     
237     fPictureFilterSettings.deinterlace = [fDeinterlacePopUp indexOfSelectedItem];
238     [self adjustFilterDisplay:fDeinterlacePopUp];
239     
240     fPictureFilterSettings.denoise = [fDenoisePopUp indexOfSelectedItem];
241     [self adjustFilterDisplay:fDenoisePopUp];
242     
243     if ([fDeblockField stringValue] == @"Off")
244     {
245         fPictureFilterSettings.deblock  = 0;
246     }
247     else
248     {
249         fPictureFilterSettings.deblock  = [fDeblockField intValue];
250     }
251     
252     fPictureFilterSettings.grayscale = [fGrayscaleCheck state];
253     
254     if (sender != nil)
255     {
256         [fHBController pictureSettingsDidChange];
257         
258     }   
259
260 }
261
262 - (void) adjustFilterDisplay: (id) sender
263 {
264     
265     NSBox * filterBox = nil;
266     NSTextField * filterField;
267     if (sender == fDetelecinePopUp)
268     {
269         filterBox = fDetelecineBox;
270         filterField = fDetelecineField;
271     }
272     if (sender == fDecombPopUp)
273     {
274         filterBox = fDecombBox;
275         filterField = fDecombField;
276     }
277     if (sender == fDeinterlacePopUp)
278     {
279         filterBox = fDeinterlaceBox;
280         filterField = fDeinterlaceField;
281     }
282     
283     if (sender == fDenoisePopUp)
284     {
285         filterBox = fDenoiseBox;
286         filterField = fDenoiseField;
287     }
288     
289     NSSize currentSize = [filterBox frame].size;
290     if ([sender titleOfSelectedItem] == @"Custom")
291     {
292         currentSize.height = 60;
293     }
294     else
295     {
296         currentSize.height = 30;
297     }
298     /* Check to see if we have changed the size from current */
299     if (currentSize.height != [filterBox frame].size.height)
300     {
301         /* We are changing the size of the box, so recalc the origin */
302         NSPoint origin = [filterBox frame].origin;
303         /* See if we are expanding the box downwards */
304         if (currentSize.height > [filterBox frame].size.height)
305         {
306             origin.y = origin.y - currentSize.height / 2;
307         }
308         else
309         {
310             origin.y = origin.y + currentSize.height;
311         }
312         /* go ahead and resize the box */
313         [filterBox setFrameSize:currentSize];
314         [filterBox setFrameOrigin:origin];
315     }
316     
317 }
318
319 #pragma mark -
320
321
322
323 - (int) detelecine
324 {
325     return fPictureFilterSettings.detelecine;
326 }
327
328 - (NSString*) detelecineCustomString
329 {
330     return [fDetelecineField stringValue];
331 }
332
333 - (void) setDetelecine: (int) setting
334 {
335     fPictureFilterSettings.detelecine = setting;
336 }
337
338 - (void) setDetelecineCustomString: (NSString*) string 
339 {
340     [fDetelecineField setStringValue:string];
341 }
342
343 - (int) deinterlace
344 {
345     return fPictureFilterSettings.deinterlace;
346 }
347 - (NSString*) deinterlaceCustomString
348 {
349     return [fDeinterlaceField stringValue];
350 }
351
352 - (void) setDeinterlaceCustomString: (NSString*) string 
353 {
354     [fDeinterlaceField setStringValue:string];
355 }
356
357 - (void) setDeinterlace: (int) setting 
358 {
359     fPictureFilterSettings.deinterlace = setting;
360 }
361 - (int) decomb
362 {
363     return fPictureFilterSettings.decomb;
364 }
365
366 - (NSString*) decombCustomString
367 {
368     return [fDecombField stringValue];
369 }
370
371 - (int) useDecomb
372 {
373     return fPictureFilterSettings.usedecomb;
374 }
375
376 - (void) setUseDecomb: (int) setting
377 {
378     fPictureFilterSettings.usedecomb = setting;
379     if (fPictureFilterSettings.usedecomb == 1)
380     {
381         [fDecombDeinterlaceSlider setFloatValue:0.0];
382     }
383     else
384     {
385         [fDecombDeinterlaceSlider setFloatValue:1.0];
386     }
387     [self modeDecombDeinterlaceSliderChanged:nil];
388 }
389
390 - (void) setDecomb: (int) setting {
391     fPictureFilterSettings.decomb = setting;
392 }
393
394 - (void) setDecombCustomString: (NSString*) string 
395 {
396     [fDecombField setStringValue:string];
397 }
398
399 - (int) denoise
400 {
401     return fPictureFilterSettings.denoise;
402 }
403
404 - (NSString*) denoiseCustomString
405 {
406     return [fDenoiseField stringValue];
407 }
408
409 - (void) setDenoiseCustomString: (NSString*) string 
410 {
411     [fDenoiseField setStringValue:string];
412 }
413
414 - (void) setDenoise: (int) setting
415 {
416     fPictureFilterSettings.denoise = setting;
417 }
418
419 - (int) deblock
420 {
421     return fPictureFilterSettings.deblock;
422 }
423
424 - (void) setDeblock: (int) setting
425 {
426     fPictureFilterSettings.deblock = setting;
427 }
428
429 - (int) grayscale
430 {
431     return fPictureFilterSettings.grayscale;
432 }
433
434 - (void) setGrayscale: (int) setting
435 {
436     fPictureFilterSettings.grayscale = setting;
437 }
438
439 - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title
440 {
441     [self SetTitle:title];
442     [self showWindow:sender];
443
444 }
445
446 @end
447