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
231 fPictureFilterSettings.detelecine = [fDetelecinePopUp indexOfSelectedItem];
232 [self adjustFilterDisplay:fDetelecinePopUp];
234 fPictureFilterSettings.decomb = [fDecombPopUp indexOfSelectedItem];
235 [self adjustFilterDisplay:fDecombPopUp];
237 fPictureFilterSettings.deinterlace = [fDeinterlacePopUp indexOfSelectedItem];
238 [self adjustFilterDisplay:fDeinterlacePopUp];
240 fPictureFilterSettings.denoise = [fDenoisePopUp indexOfSelectedItem];
241 [self adjustFilterDisplay:fDenoisePopUp];
243 if ([fDeblockField stringValue] == @"Off")
245 fPictureFilterSettings.deblock = 0;
249 fPictureFilterSettings.deblock = [fDeblockField intValue];
252 fPictureFilterSettings.grayscale = [fGrayscaleCheck state];
256 [fHBController pictureSettingsDidChange];
262 - (void) adjustFilterDisplay: (id) sender
265 NSBox * filterBox = nil;
266 NSTextField * filterField;
267 if (sender == fDetelecinePopUp)
269 filterBox = fDetelecineBox;
270 filterField = fDetelecineField;
272 if (sender == fDecombPopUp)
274 filterBox = fDecombBox;
275 filterField = fDecombField;
277 if (sender == fDeinterlacePopUp)
279 filterBox = fDeinterlaceBox;
280 filterField = fDeinterlaceField;
283 if (sender == fDenoisePopUp)
285 filterBox = fDenoiseBox;
286 filterField = fDenoiseField;
289 NSSize currentSize = [filterBox frame].size;
290 if ([sender titleOfSelectedItem] == @"Custom")
292 currentSize.height = 60;
296 currentSize.height = 30;
298 /* Check to see if we have changed the size from current */
299 if (currentSize.height != [filterBox frame].size.height)
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)
306 origin.y = origin.y - currentSize.height / 2;
310 origin.y = origin.y + currentSize.height;
312 /* go ahead and resize the box */
313 [filterBox setFrameSize:currentSize];
314 [filterBox setFrameOrigin:origin];
325 return fPictureFilterSettings.detelecine;
328 - (NSString*) detelecineCustomString
330 return [fDetelecineField stringValue];
333 - (void) setDetelecine: (int) setting
335 fPictureFilterSettings.detelecine = setting;
338 - (void) setDetelecineCustomString: (NSString*) string
340 [fDetelecineField setStringValue:string];
345 return fPictureFilterSettings.deinterlace;
347 - (NSString*) deinterlaceCustomString
349 return [fDeinterlaceField stringValue];
352 - (void) setDeinterlaceCustomString: (NSString*) string
354 [fDeinterlaceField setStringValue:string];
357 - (void) setDeinterlace: (int) setting
359 fPictureFilterSettings.deinterlace = setting;
363 return fPictureFilterSettings.decomb;
366 - (NSString*) decombCustomString
368 return [fDecombField stringValue];
373 return fPictureFilterSettings.usedecomb;
376 - (void) setUseDecomb: (int) setting
378 fPictureFilterSettings.usedecomb = setting;
379 if (fPictureFilterSettings.usedecomb == 1)
381 [fDecombDeinterlaceSlider setFloatValue:0.0];
385 [fDecombDeinterlaceSlider setFloatValue:1.0];
387 [self modeDecombDeinterlaceSliderChanged:nil];
390 - (void) setDecomb: (int) setting {
391 fPictureFilterSettings.decomb = setting;
394 - (void) setDecombCustomString: (NSString*) string
396 [fDecombField setStringValue:string];
401 return fPictureFilterSettings.denoise;
404 - (NSString*) denoiseCustomString
406 return [fDenoiseField stringValue];
409 - (void) setDenoiseCustomString: (NSString*) string
411 [fDenoiseField setStringValue:string];
414 - (void) setDenoise: (int) setting
416 fPictureFilterSettings.denoise = setting;
421 return fPictureFilterSettings.deblock;
424 - (void) setDeblock: (int) setting
426 fPictureFilterSettings.deblock = setting;
431 return fPictureFilterSettings.grayscale;
434 - (void) setGrayscale: (int) setting
436 fPictureFilterSettings.grayscale = setting;
439 - (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title
441 [self SetTitle:title];
442 [self showWindow:sender];