1 /* $Id: PictureController.mm,v 1.11 2005/08/01 15:10:44 titer Exp $
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. */
7 #import "HBFilterController.h"
8 #import "PictureController.h"
10 #import "HBPreviewController.h"
14 @implementation PictureFilterController
18 if (self = [super initWithWindowNibName:@"PictureFilters"])
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
26 // If/when we switch a lot of this stuff to bindings, this can probably
30 fPreviewController = [[PreviewController alloc] init];
35 //------------------------------------------------------------------------------------
36 // Displays and brings the picture window to the front
37 //------------------------------------------------------------------------------------
38 - (IBAction) showFilterWindow: (id)sender
41 if ([[self window] isVisible])
43 [[self window] close];
47 [self showWindow:sender];
48 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PictureFiltersWindowIsOpen"];
49 if ([fPreviewController fullScreen] == YES)
51 [self setToFullScreenMode];
55 [self setToWindowedMode];
60 - (IBAction) showPictureSettingsWindow: (id)sender
62 [fHBController showPicturePanel:sender];
65 - (IBAction) showPreviewWindow: (id)sender
67 [fHBController showPreviewWindow:sender];
70 - (void) setToFullScreenMode
72 int32_t shieldLevel = CGShieldingWindowLevel();
74 [fFilterWindow setLevel:shieldLevel + 1];
76 [fFilterWindow makeKeyAndOrderFront:self];
79 - (void) setToWindowedMode
81 /* Set the window back to regular level */
82 [[self window] setLevel:NSNormalWindowLevel];
85 - (void)setHBController: (HBController *)controller
88 fHBController = controller;
94 [fFilterWindow setDelegate:self];
96 if( ![[self window] setFrameUsingName:@"PictureFilters"] )
97 [[self window] center];
98 [self setWindowFrameAutosaveName:@"PictureFilters"];
99 [[self window] setExcludedFromWindowsMenu:YES];
101 [self setInitialPictureFilters];
106 - (void)windowWillClose:(NSNotification *)aNotification
108 [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PictureFiltersWindowIsOpen"];
111 - (BOOL)windowShouldClose:(id)fPictureWindow
118 [fPreviewController release];
122 - (void) SetHandle: (hb_handle_t *) handle
128 //[fPreviewController SetHandle: fHandle];
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
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];
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];
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"];
160 /* Set deinterlaces level according to the integer in the main window */
161 [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
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];
176 - (void) SetTitle: (hb_title_t *) title
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];
186 [self deblockSliderChanged: nil];
189 - (IBAction) deblockSliderChanged: (id) sender
191 if ([fDeblockSlider floatValue] == 4.0)
193 [fDeblockField setStringValue: [NSString stringWithFormat: @"Off"]];
197 [fDeblockField setStringValue: [NSString stringWithFormat: @"%.0f", [fDeblockSlider floatValue]]];
199 [self FilterSettingsChanged: sender];
203 - (IBAction) modeDecombDeinterlaceSliderChanged: (id) sender
206 if ([fDecombDeinterlaceSlider floatValue] == 0.0)
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];
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];
225 [self FilterSettingsChanged: sender];
228 - (IBAction) FilterSettingsChanged: (id) sender
230 fPictureFilterSettings.detelecine = [fDetelecinePopUp indexOfSelectedItem];
231 [self adjustFilterDisplay:fDetelecinePopUp];
233 fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem];
234 [self adjustFilterDisplay:fDecombPopUp];
236 fPictureFilterSettings.deinterlace = [fDeinterlacePopUp indexOfSelectedItem];
237 [self adjustFilterDisplay:fDeinterlacePopUp];
239 fPictureFilterSettings.denoise = [fDenoisePopUp indexOfSelectedItem];
240 [self adjustFilterDisplay:fDenoisePopUp];
242 if ([fDeblockField stringValue] == @"Off")
244 fPictureFilterSettings.deblock = 0;
248 fPictureFilterSettings.deblock = [fDeblockField intValue];
251 fPictureFilterSettings.grayscale = [fGrayscaleCheck state];
255 [fHBController pictureSettingsDidChange];
261 - (void) adjustFilterDisplay: (id) sender
265 NSTextField * filterField;
266 if (sender == fDetelecinePopUp)
268 filterBox = fDetelecineBox;
269 filterField = fDetelecineField;
271 if (sender == fDecombPopUp)
273 filterBox = fDecombBox;
274 filterField = fDecombField;
276 if (sender == fDeinterlacePopUp)
278 filterBox = fDeinterlaceBox;
279 filterField = fDeinterlaceField;
282 if (sender == fDenoisePopUp)
284 filterBox = fDenoiseBox;
285 filterField = fDenoiseField;
288 NSSize currentSize = [filterBox frame].size;
289 if ([sender titleOfSelectedItem] == @"Custom")
291 currentSize.height = 60;
295 currentSize.height = 30;
297 /* Check to see if we have changed the size from current */
298 if (currentSize.height != [filterBox frame].size.height)
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)
305 origin.y = origin.y - currentSize.height / 2;
309 origin.y = origin.y + currentSize.height;
311 /* go ahead and resize the box */
312 [filterBox setFrameSize:currentSize];
313 [filterBox setFrameOrigin:origin];
324 return fPictureFilterSettings.detelecine;
327 - (NSString*) detelecineCustomString
329 return [fDetelecineField stringValue];
332 - (void) setDetelecine: (int) setting
334 fPictureFilterSettings.detelecine = setting;
339 return fPictureFilterSettings.deinterlace;
341 - (NSString*) deinterlaceCustomString
343 return [fDeinterlaceField stringValue];
345 - (void) setDeinterlace: (int) setting
347 fPictureFilterSettings.deinterlace = setting;
351 return fPictureFilterSettings.decomb;
354 - (NSString*) decombCustomString
356 return [fDecombField stringValue];
361 return fPictureFilterSettings.usedecomb;
364 - (void) setUseDecomb: (int) setting
366 fPictureFilterSettings.usedecomb = setting;
369 - (void) setDecomb: (int) setting {
370 fPictureFilterSettings.decomb = setting;
374 return fPictureFilterSettings.denoise;
377 - (NSString*) denoiseCustomString
379 return [fDenoiseField stringValue];
382 - (void) setDenoise: (int) setting
384 fPictureFilterSettings.denoise = setting;
389 return fPictureFilterSettings.deblock;
392 - (void) setDeblock: (int) setting
394 fPictureFilterSettings.deblock = setting;
399 return fPictureFilterSettings.grayscale;
402 - (void) setGrayscale: (int) setting
404 fPictureFilterSettings.grayscale = setting;
407 - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title
409 [self SetTitle:title];
410 [self showWindow:sender];