OSDN Git Service

MacGui: Adds a popup menu item for Hadamard-transformed exhaustive motion estimation...
[handbrake-jp/handbrake-jp-git.git] / macosx / PictureController.mm
index e93840c..fa76a99 100644 (file)
@@ -7,7 +7,7 @@
 #import "PictureController.h"
 #import "Controller.h"
 #import "HBPreviewController.h"
-
+#import "HBFilterController.h"
 
 
 @implementation PictureController
@@ -27,6 +27,7 @@
         [self window];
         
        fPreviewController = [[PreviewController alloc] init];
+    //fPictureFilterController = [[PictureFilterController alloc] init];
     }
        return self;
 }
 //------------------------------------------------------------------------------------
 - (IBAction) showPictureWindow: (id)sender
 {
-    [self showWindow:sender];
-    if ([fPreviewController fullScreen] == YES)
+    if ([[self window] isVisible])
     {
-    [self setToFullScreenMode];
+        [[self window] close];
     }
     else
     {
-    [self setToWindowedMode];
+        [self showWindow:sender];
+        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"PictureSizeWindowIsOpen"];
+        if ([fPreviewController fullScreen] == YES)
+        {
+            [self setToFullScreenMode];
+        }
+        else
+        {
+            [self setToWindowedMode];
+        }
     }
 }
 
     [fPreviewController showWindow:sender];
 }
 
+- (IBAction) showFilterWindow: (id)sender
+{
+    [fHBController showFiltersPanel:sender];
+}
+
+
 - (void) setToFullScreenMode
 {
     int32_t shieldLevel = CGShieldingWindowLevel(); 
@@ -70,6 +85,7 @@
 - (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];
     
 
 }
        }
        
        /* 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];
     [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
 {
@@ -325,33 +310,6 @@ are maintained across different sources */
        }
        
     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 )
     {
@@ -414,10 +372,13 @@ are maintained across different sources */
          * 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];
@@ -425,6 +386,34 @@ are maintained across different sources */
     
 }
 
+- (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 -
@@ -448,52 +437,6 @@ are maintained across different sources */
     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];