+//------------------------------------------------------------------------------------
+// Displays and brings the picture window to the front
+//------------------------------------------------------------------------------------
+- (IBAction) showPictureWindow: (id)sender
+{
+ if ([fPreviewController fullScreen] == YES)
+ {
+ [self showWindow:sender];
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PictureSizeWindowIsOpen"];
+ [self setToFullScreenMode];
+ }
+ else
+ {
+ if ([[self window] isVisible])
+ {
+ [[self window] close];
+ }
+ else
+ {
+ [self showWindow:sender];
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PictureSizeWindowIsOpen"];
+ [self setToWindowedMode];
+ }
+ }
+ [self adjustFilterDisplay:nil];
+ [self adjustSizingDisplay:nil];
+}
+
+- (BOOL) previewFullScreenMode
+{
+ return [fPreviewController fullScreen];
+}
+
+/* this method is used to detect clicking on a tab in fSizeFilterView */
+- (void)tabView:(NSTabView *)tabView didSelectTabViewItem:(NSTabViewItem *)tabViewItem
+{
+
+[self resizeInspectorForTab:nil];
+
+}
+
+#pragma mark -
+
+/* resizeInspectorForTab is called at launch, and each time either the
+ * Size or Filters tab is clicked. Size gives a horizontally oriented
+ * inspector and Filters is a vertically aligned inspector.
+ */
+- (IBAction) resizeInspectorForTab: (id)sender
+{
+ NSRect frame = [[self window] frame];
+ NSPoint windowOrigin = [[self window] frame].origin;
+ NSSize screenSize = [[[self window] screen] frame].size;
+ NSPoint screenOrigin = [[[self window] screen] frame].origin;
+
+ /* We base our inspector size/layout on which tab is active for fSizeFilterView */
+ /* we are 1 which is Filters*/
+ if ([fSizeFilterView indexOfTabViewItem: [fSizeFilterView selectedTabViewItem]] == 1)
+ {
+ frame.size.width = 314;
+ /* we glean the height from the size of the boxes plus the extra window space
+ * needed for non boxed display
+ */
+ frame.size.height = 110.0 + [fDetelecineBox frame].size.height + [fDecombDeinterlaceBox frame].size.height + [fDenoiseBox frame].size.height + [fDeblockBox frame].size.height;
+ /* Hide the size readout at the bottom as the vertical inspector is not wide enough */
+ [fSizeInfoField setHidden:YES];
+ }
+ else // we are Tab index 0 which is size
+ {
+ frame.size.width = 50.0 + [fPictureSizeBox frame].size.width + [fPictureCropBox frame].size.width;
+ frame.size.height = [fPictureSizeBox frame].size.height + 85;
+ /* hide the size summary field at the bottom */
+ [fSizeInfoField setHidden:NO];
+ }
+ /* get delta's for the change in window size */
+ CGFloat deltaX = frame.size.width - [[self window] frame].size.width;
+ CGFloat deltaY = frame.size.height - [[self window] frame].size.height;
+
+ /* Check to see if we have changed the height from current */
+ //if (frame.size.height != [[self window] frame].size.height)
+ //{
+ /* change the inspector origin via the deltaY */
+ frame.origin.y -= deltaY;
+ /* keep the inspector centered so the tabs stay in place */
+ frame.origin.x -= deltaX / 2.0;
+ //}
+
+ /* we make sure we are not horizontally off of our screen.
+ * this would be the case if we are on the vertical filter tab
+ * and we hit the size tab and the inspector grows horizontally
+ * off the screen to the right
+ */
+ if ((frame.origin.x + frame.size.width) > (screenOrigin.x + screenSize.width))
+ {
+ /* the right side of the preview is off the screen, so shift to the left */
+ frame.origin.x = (screenOrigin.x + screenSize.width) - frame.size.width;
+ }
+
+ [[self window] setFrame:frame display:YES animate:YES];
+}
+
+- (IBAction) adjustSizingDisplay: (id) sender
+{
+ NSSize pictureSizingBoxSize = [fPictureSizeBox frame].size;
+
+ NSPoint fPictureSizeBoxOrigin = [fPictureSizeBox frame].origin;
+ NSSize pictureCropBoxSize = [fPictureCropBox frame].size;
+ NSPoint fPictureCropBoxOrigin = [fPictureCropBox frame].origin;
+
+ if ([fAnamorphicPopUp indexOfSelectedItem] == 3) // custom / power user jamboree
+ {
+ pictureSizingBoxSize.width = 530;
+
+ /* Set visibility of capuj widgets */
+ [fParWidthField setHidden: NO];
+ [fParHeightField setHidden: NO];
+ [fParWidthLabel setHidden: NO];
+ [fParHeightLabel setHidden: NO];
+ [fDisplayWidthField setHidden: NO];
+ [fDisplayWidthLabel setHidden: NO];
+ [fModulusLabel setHidden: NO];
+ [fModulusPopUp setHidden: NO];
+ /* adjust/move keep ar checkbox */
+ [fRatioLabel setHidden: YES];
+ [fRatioLabel2 setHidden: NO];
+
+ /* Optionally swith the Storage and Display width positions*/
+ /*
+ NSPoint fWidthLabelOrigin = [fWidthLabel frame].origin;
+ NSPoint fWidthFieldOrigin = [fWidthField frame].origin;
+ NSPoint fWidthStepperOrigin = [fWidthStepper frame].origin;
+ fWidthFieldOrigin.x = [fRatioLabel2 frame].origin.x + [fRatioLabel2 frame].size.width + 4;
+ [fWidthField setFrameOrigin:fWidthFieldOrigin];
+
+ fWidthStepperOrigin.x = [fWidthField frame].origin.x + [fWidthField frame].size.width + 4;
+ [fWidthStepper setFrameOrigin:fWidthStepperOrigin];
+
+ fWidthLabelOrigin.x = [fWidthField frame].origin.x - [fWidthLabel frame].size.width - 4;
+ [fWidthLabel setFrameOrigin:fWidthLabelOrigin];
+ [fWidthLabel setStringValue:@"Storage Width:"];
+ */
+
+ /* set the origin for fRatioCheck so origin.y == fRatioLabel2
+ * and origin.x == fDisplayWidthField
+ */
+ NSPoint fRatioCheckOrigin = [fRatioCheck frame].origin;
+ fRatioCheckOrigin.y = [fRatioLabel2 frame].origin.y - 2;
+ fRatioCheckOrigin.x = [fRatioLabel2 frame].origin.x + [fRatioLabel2 frame].size.width + 4;
+ [fRatioCheck setFrameOrigin:fRatioCheckOrigin];
+
+ }
+ else
+ {
+ pictureSizingBoxSize.width = 200;
+
+ /* Set visibility of capuj widgets */
+ [fParWidthField setHidden: YES];
+ [fParHeightField setHidden: YES];
+ [fParWidthLabel setHidden: YES];
+ [fParHeightLabel setHidden: YES];
+ [fDisplayWidthField setHidden: YES];
+ [fDisplayWidthLabel setHidden: YES];
+ [fModulusLabel setHidden: YES];
+ [fModulusPopUp setHidden: YES];
+ /* adjust/move keep ar checkbox */
+ [fRatioLabel setHidden: NO];
+ [fRatioLabel2 setHidden: YES];
+
+ /* Optionally swith the Storage and Display width positions*/
+
+ /*
+ NSPoint fWidthLabelOrigin = [fWidthLabel frame].origin;
+ NSPoint fWidthFieldOrigin = [fWidthField frame].origin;
+ NSPoint fWidthStepperOrigin = [fWidthStepper frame].origin;
+
+ fWidthFieldOrigin.x = [fHeightField frame].origin.x;
+ [fWidthField setFrameOrigin:fWidthFieldOrigin];
+
+ fWidthStepperOrigin.x = [fHeightStepper frame].origin.x;
+ [fWidthStepper setFrameOrigin:fWidthStepperOrigin];
+
+ fWidthLabelOrigin.x = [fWidthField frame].origin.x - [fWidthLabel frame].size.width -4;
+ [fWidthLabel setFrameOrigin:fWidthLabelOrigin];
+ [fWidthLabel setStringValue:@"Width:"];
+ */
+
+
+ /* set the origin for fRatioCheck so origin.y == fRatioLabel
+ * and origin.x == fWidthStepper
+ */
+ NSPoint fRatioCheckOrigin = [fRatioCheck frame].origin;
+ fRatioCheckOrigin.y = [fRatioLabel frame].origin.y - 2;
+ fRatioCheckOrigin.x = [fWidthStepper frame].origin.x - 2;
+ [fRatioCheck setFrameOrigin:fRatioCheckOrigin];
+
+ }
+
+ /* Check to see if we have changed the size from current */
+ if (pictureSizingBoxSize.height != [fPictureSizeBox frame].size.height || pictureSizingBoxSize.width != [fPictureSizeBox frame].size.width)
+ {
+ /* Get our delta for the change in picture size box height */
+ CGFloat deltaYSizeBoxShift = pictureSizingBoxSize.height - [fPictureSizeBox frame].size.height;
+ fPictureSizeBoxOrigin.y -= deltaYSizeBoxShift;
+ /* Get our delta for the change in picture size box width */
+ CGFloat deltaXSizeBoxShift = pictureSizingBoxSize.width - [fPictureSizeBox frame].size.width;
+ //fPictureSizeBoxOrigin.x += deltaXSizeBoxShift;
+ /* set our new Picture size box size */
+ [fPictureSizeBox setFrameSize:pictureSizingBoxSize];
+ [fPictureSizeBox setFrameOrigin:fPictureSizeBoxOrigin];
+
+ pictureCropBoxSize.height += deltaYSizeBoxShift;
+ fPictureCropBoxOrigin.y -= deltaYSizeBoxShift;
+ fPictureCropBoxOrigin.x += deltaXSizeBoxShift;
+
+ [fPictureCropBox setFrameSize:pictureCropBoxSize];
+ [[fPictureCropBox animator] setFrameOrigin:fPictureCropBoxOrigin];
+ }
+
+
+ /* now we call to resize the entire inspector window */
+ [self resizeInspectorForTab:nil];
+}
+
+- (IBAction) adjustFilterDisplay: (id) sender
+{
+
+ NSBox * filterBox = nil;
+ NSTextField * filterField;
+ if (sender == fDetelecinePopUp)
+ {
+ filterBox = fDetelecineBox;
+ filterField = fDetelecineField;
+ }
+
+ if (sender == fDecombDeinterlaceSlider)
+ {
+ if ([fDecombDeinterlaceSlider floatValue] == 0.0)
+ {
+ filterBox = fDecombBox;
+ filterField = fDecombField;
+ }
+ else
+ {
+ filterBox = fDeinterlaceBox;
+ filterField = fDeinterlaceField;
+ }
+ }
+
+ if (sender == fDecombPopUp)
+ {
+ filterBox = fDecombBox;
+ filterField = fDecombField;
+ }
+ if (sender == fDeinterlacePopUp)
+ {
+ filterBox = fDeinterlaceBox;
+ filterField = fDeinterlaceField;
+ }
+
+ if (sender == fDenoisePopUp)
+ {
+ filterBox = fDenoiseBox;
+ filterField = fDenoiseField;
+ }
+
+ NSSize currentSize = [filterBox frame].size;
+ NSRect boxFrame = [filterBox frame];
+
+ if ([sender titleOfSelectedItem] == @"Custom")
+ {
+
+ currentSize.height = 60;
+
+ }
+ else
+ {
+ currentSize.height = 30;
+
+ }
+ /* Check to see if we have changed the size from current */
+ if (currentSize.height != [filterBox frame].size.height)
+ {
+ /* We are changing the size of the box, so recalc the origin */
+ NSPoint boxOrigin = [filterBox frame].origin;
+ /* We get the deltaY here for how much we are expanding/contracting the box vertically */
+ CGFloat deltaYBoxShift = currentSize.height - [filterBox frame].size.height;
+ boxOrigin.y -= deltaYBoxShift;
+
+ boxFrame.size.height = currentSize.height;
+ boxFrame.origin.y = boxOrigin.y;
+ [filterBox setFrame:boxFrame];
+
+ /* go ahead and resize the box */
+ //[[filterBox animator] setFrameSize:currentSize];
+ //[[filterBox animator] setFrameOrigin:origin];
+
+
+ if (filterBox == fDecombBox || filterBox == fDeinterlaceBox)
+ {
+ /* fDecombDeinterlaceBox*/
+ NSSize decombDeinterlaceBoxSize = [fDecombDeinterlaceBox frame].size;
+ NSPoint decombDeinterlaceBoxOrigin = [fDecombDeinterlaceBox frame].origin;
+
+ //decombDeinterlaceBoxSize.height = [filterBox frame].size.height + 50;
+ if (sender == fDecombDeinterlaceSlider)
+ {
+ [fHBController writeToActivityLog: "Sender is deinterlace decomb slider"];
+ }
+
+ if ([fDeinterlaceBox isHidden] == YES)
+ {
+ decombDeinterlaceBoxSize.height = [fDecombBox frame].size.height + 50;
+ [fHBController writeToActivityLog: "Resize by Decomb box"];
+ }
+ else
+ {
+ decombDeinterlaceBoxSize.height = [fDeinterlaceBox frame].size.height + 50;
+ [fHBController writeToActivityLog: "Resize by Deinterlace box"];
+ }
+ /* get delta's for the change in window size */
+
+ CGFloat deltaYdecombDeinterlace = decombDeinterlaceBoxSize.height - [fDecombDeinterlaceBox frame].size.height;
+
+ deltaYBoxShift = deltaYdecombDeinterlace;
+
+ decombDeinterlaceBoxOrigin.y -= deltaYdecombDeinterlace;
+
+ [fDecombDeinterlaceBox setFrameSize:decombDeinterlaceBoxSize];
+ [fDecombDeinterlaceBox setFrameOrigin:decombDeinterlaceBoxOrigin];
+ }
+
+ /* now we must reset the origin of each box below the adjusted box*/
+ NSPoint decombDeintOrigin = [fDecombDeinterlaceBox frame].origin;
+ NSPoint denoiseOrigin = [fDenoiseBox frame].origin;
+ NSPoint deblockOrigin = [fDeblockBox frame].origin;
+ if (sender == fDetelecinePopUp)
+ {
+ decombDeintOrigin.y -= deltaYBoxShift;
+ [fDecombDeinterlaceBox setFrameOrigin:decombDeintOrigin];
+
+ denoiseOrigin.y -= deltaYBoxShift;
+ [fDenoiseBox setFrameOrigin:denoiseOrigin];
+
+ deblockOrigin.y -= deltaYBoxShift;
+ [fDeblockBox setFrameOrigin:deblockOrigin];
+ }
+ if (sender == fDecombPopUp || sender == fDeinterlacePopUp)
+ {
+ denoiseOrigin.y -= deltaYBoxShift;
+ [fDenoiseBox setFrameOrigin:denoiseOrigin];
+
+ deblockOrigin.y -= deltaYBoxShift;
+ [fDeblockBox setFrameOrigin:deblockOrigin];
+ }
+
+ if (sender == fDenoisePopUp)
+ {
+ deblockOrigin.y -= deltaYBoxShift;
+ [fDeblockBox setFrameOrigin:deblockOrigin];
+ }
+
+ /* now we call to resize the entire inspector window */
+ [self resizeInspectorForTab:nil];
+ }
+
+}
+
+
+#pragma mark -
+
+- (IBAction) previewGoWindowed: (id)sender
+{
+ [fPreviewController goWindowedScreen:self];
+}
+
+- (IBAction) showPreviewWindow: (id)sender
+{
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PreviewWindowIsOpen"];
+ [fPreviewController showWindow:sender];
+}
+
+
+
+
+- (void) setToFullScreenMode
+{
+ int32_t shieldLevel = CGShieldingWindowLevel();
+
+ [fPictureWindow setLevel:shieldLevel + 1];
+ // Show the window.
+ [fPictureWindow makeKeyAndOrderFront:self];
+}
+
+- (void) setToWindowedMode
+{
+ /* Set the window back to Floating Window mode
+ * This will put the window always on top, but
+ * since we have Hide on Deactivate set in our
+ * xib, if other apps are put in focus we will
+ * hide properly to stay out of the way
+ */
+ [[self window] setLevel:NSFloatingWindowLevel];
+}
+
+- (void)setHBController: (HBController *)controller
+{
+ fHBController = controller;
+ [fPreviewController setHBController: controller];
+
+}
+
+- (void)awakeFromNib
+{
+ [fPictureWindow setDelegate:self];
+ if( ![[self window] setFrameUsingName:@"PictureSizing"] )
+ [[self window] center];
+ [self setWindowFrameAutosaveName:@"PictureSizing"];
+ [[self window] setExcludedFromWindowsMenu:YES];
+
+ [self setInitialPictureFilters];
+
+ /* Setup our layers for core animation */
+ [fSizeFilterView setWantsLayer:YES];
+ [fPictureSizeBox setWantsLayer:YES];
+ [fPictureCropBox setWantsLayer:YES];
+
+}
+
+
+- (void)windowWillClose:(NSNotification *)aNotification
+{
+[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PictureSizeWindowIsOpen"];
+}
+
+- (BOOL)windowShouldClose:(id)fPictureWindow
+{
+ return YES;
+}
+