#import "PictureController.h"
#import "Controller.h"
#import "HBPreviewController.h"
-
+#import "HBFilterController.h"
@implementation PictureController
[self window];
fPreviewController = [[PreviewController alloc] init];
+ //fPictureFilterController = [[PictureFilterController alloc] init];
}
return self;
}
//------------------------------------------------------------------------------------
- (IBAction) showPictureWindow: (id)sender
{
- [self showWindow:sender];
+ if ([[self window] isVisible])
+ {
+ [[self window] close];
+ }
+ else
+ {
+ [self showWindow:sender];
+ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PictureSizeWindowIsOpen"];
+ if ([fPreviewController fullScreen] == YES)
+ {
+ [self setToFullScreenMode];
+ }
+ else
+ {
+ [self setToWindowedMode];
+ }
+ }
}
- (IBAction) showPreviewWindow: (id)sender
[fPreviewController showWindow:sender];
}
+- (IBAction) showFilterWindow: (id)sender
+{
+ [fHBController showFiltersPanel:sender];
+}
+
+
- (void) setToFullScreenMode
{
- [self showWindow:nil];
int32_t shieldLevel = CGShieldingWindowLevel();
- [fPictureWindow setLevel:shieldLevel];
+ [fPictureWindow setLevel:shieldLevel + 1];
// Show the window.
[fPictureWindow makeKeyAndOrderFront:self];
}
- (void) setToWindowedMode
{
/* Set the window back to regular level */
-
- [self showWindow:nil];
-
[[self window] setLevel:NSNormalWindowLevel];
}
- (void)setHBController: (HBController *)controller
{
fHBController = controller;
+ //[fPictureFilterController setHBController: controller];
[fPreviewController setHBController: controller];
}
- (void)awakeFromNib
{
[fPictureWindow setDelegate:self];
+ if( ![[self window] setFrameUsingName:@"PictureSizing"] )
+ [[self window] center];
+ [self setWindowFrameAutosaveName:@"PictureSizing"];
+ [[self window] setExcludedFromWindowsMenu:YES];
}
- (void)windowWillClose:(NSNotification *)aNotification
{
-
+[[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"PictureSizeWindowIsOpen"];
}
- (BOOL)windowShouldClose:(id)fPictureWindow
- (void) dealloc
{
+ [fPictureFilterController release];
[fPreviewController release];
[super dealloc];
}
[fCropRightStepper setMinValue: 0];
[fPreviewController SetHandle: fHandle];
+ [fPictureFilterController SetHandle: fHandle];
}
{
[fAnamorphicPopUp addItemWithTitle: @"Loose"];
}
- [fAnamorphicPopUp selectItemAtIndex: job->pixel_ratio];
+ [fAnamorphicPopUp selectItemAtIndex: job->anamorphic.mode];
/* We initially set the previous state of keep ar to on */
keepAspectRatioPreviousState = 1;
}
/* Set filters widgets according to the filters struct */
+ /* this has now been movied to the filters controller */
+ /*
[fDetelecineCheck setState:fPictureFilterSettings.detelecine];
[fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
[fDenoisePopUp selectItemAtIndex: fPictureFilterSettings.denoise];
[fDeblockCheck setState: fPictureFilterSettings.deblock];
[fDecombCheck setState: fPictureFilterSettings.decomb];
+ */
fPicture = 0;
MaxOutputWidth = title->width - job->crop[2] - job->crop[3];
MaxOutputHeight = title->height - job->crop[0] - job->crop[1];
- //[fPreviewController SetTitle:fTitle];
-
[self SettingsChanged: nil];
}
-/* we use this to setup the initial picture filters upon first launch, after that their states
-are maintained across different sources */
-- (void) setInitialPictureFilters
-{
- /* we use a popup to show the deinterlace settings */
- [fDeinterlacePopUp removeAllItems];
- [fDeinterlacePopUp addItemWithTitle: @"None"];
- [fDeinterlacePopUp addItemWithTitle: @"Fast"];
- [fDeinterlacePopUp addItemWithTitle: @"Slow"];
- [fDeinterlacePopUp addItemWithTitle: @"Slower"];
-
- /* Set deinterlaces level according to the integer in the main window */
- [fDeinterlacePopUp selectItemAtIndex: fPictureFilterSettings.deinterlace];
-
- /* we use a popup to show the denoise settings */
- [fDenoisePopUp removeAllItems];
- [fDenoisePopUp addItemWithTitle: @"None"];
- [fDenoisePopUp addItemWithTitle: @"Weak"];
- [fDenoisePopUp addItemWithTitle: @"Medium"];
- [fDenoisePopUp addItemWithTitle: @"Strong"];
- /* Set denoises level according to the integer in the main window */
- [fDenoisePopUp selectItemAtIndex: fPictureFilterSettings.denoise];
-
-
-}
-
-
-- (IBAction) deblockSliderChanged: (id) sender
-{
- if ([fDeblockSlider floatValue] == 4.0)
- {
- [fDeblockField setStringValue: [NSString stringWithFormat: @"Off"]];
- }
- else
- {
- [fDeblockField setStringValue: [NSString stringWithFormat: @"%.0f", [fDeblockSlider floatValue]]];
- }
- [self SettingsChanged: sender];
-}
-
- (IBAction) SettingsChanged: (id) sender
{
hb_job_t * job = fTitle->job;
{
if ([fAnamorphicPopUp indexOfSelectedItem] == 2) // Loose anamorphic
{
- job->pixel_ratio = 2;
+ job->anamorphic.mode = 2;
[fWidthStepper setEnabled: YES];
[fWidthField setEnabled: YES];
/* We set job->width and call hb_set_anamorphic_size in libhb to do a "dry run" to get
job->width = [fWidthStepper intValue];
job->height = [fHeightStepper intValue];
- job->pixel_ratio = 1;
+ job->anamorphic.mode = 1;
[fWidthStepper setEnabled: NO];
[fWidthField setEnabled: NO];
}
{
job->width = [fWidthStepper intValue];
job->height = [fHeightStepper intValue];
- job->pixel_ratio = 0;
+ job->anamorphic.mode = 0;
[fWidthStepper setEnabled: YES];
[fWidthField setEnabled: YES];
[fHeightStepper setEnabled: YES];
}
job->keep_ratio = ( [fRatioCheck state] == NSOnState );
-
- fPictureFilterSettings.deinterlace = [fDeinterlacePopUp indexOfSelectedItem];
- /* if the gui deinterlace settings are fast through slowest, the job->deinterlace
- value needs to be set to one, for the job as well as the previews showing deinterlacing
- otherwise set job->deinterlace to 0 or "off" */
- if (fPictureFilterSettings.deinterlace > 0)
- {
- job->deinterlace = 1;
- }
- else
- {
- job->deinterlace = 0;
- }
- fPictureFilterSettings.denoise = [fDenoisePopUp indexOfSelectedItem];
-
- fPictureFilterSettings.detelecine = [fDetelecineCheck state];
-
- if ([fDeblockField stringValue] == @"Off")
- {
- fPictureFilterSettings.deblock = 0;
- }
- else
- {
- fPictureFilterSettings.deblock = [fDeblockField intValue];
- }
-
- fPictureFilterSettings.decomb = [fDecombCheck state];
if( job->keep_ratio )
{
* our picture preview slider in sync with the previews being shown
*/
- [fPreviewController pictureSliderChanged:nil];
-
+ //[fPreviewController pictureSliderChanged:nil];
+ [self reloadStillPreview];
}
+ /* we get the sizing info to display from fPreviewController */
+ [fSizeInfoField setStringValue: [fPreviewController pictureSizeInfoString]];
+
if (sender != nil)
{
[fHBController pictureSettingsDidChange];
}
+- (NSString*) getPictureSizeInfoString
+{
+ return [fSizeInfoField stringValue];
+}
+
+- (void)reloadStillPreview
+{
+ hb_job_t * job = fTitle->job;
+
+ [fPreviewController SetTitle:fTitle];
+ /* Sanity Check Here for < 16 px preview to avoid
+ crashing hb_get_preview. In fact, just for kicks
+ lets getting previews at a min limit of 32, since
+ no human can see any meaningful detail below that */
+ if (job->width >= 64 && job->height >= 64)
+ {
+
+ // Purge the existing picture previews so they get recreated the next time
+ // they are needed.
+ [fPreviewController purgeImageCache];
+ /* We actually call displayPreview now from pictureSliderChanged which keeps
+ * our picture preview slider in sync with the previews being shown
+ */
+
+ [fPreviewController pictureSliderChanged:nil];
+ }
+
+}
#pragma mark -
allowLooseAnamorphic = setting;
}
-- (int) detelecine
-{
- return fPictureFilterSettings.detelecine;
-}
-
-- (void) setDetelecine: (int) setting
-{
- fPictureFilterSettings.detelecine = setting;
-}
-
-- (int) deinterlace
-{
- return fPictureFilterSettings.deinterlace;
-}
-
-- (void) setDeinterlace: (int) setting {
- fPictureFilterSettings.deinterlace = setting;
-}
-- (int) decomb
-{
- return fPictureFilterSettings.decomb;
-}
-
-- (void) setDecomb: (int) setting {
- fPictureFilterSettings.decomb = setting;
-}
-- (int) denoise
-{
- return fPictureFilterSettings.denoise;
-}
-
-- (void) setDenoise: (int) setting
-{
- fPictureFilterSettings.denoise = setting;
-}
-
-- (int) deblock
-{
- return fPictureFilterSettings.deblock;
-}
-
-- (void) setDeblock: (int) setting
-{
- fPictureFilterSettings.deblock = setting;
-}
-
- (IBAction)showPreviewPanel: (id)sender forTitle: (hb_title_t *)title
{
[self SetTitle:title];