]> granicus.if.org Git - handbrake/commitdiff
MacGui: remove some unused #import. Move again more things in HBController to HBJob.
authorritsuka <damiog@gmail.com>
Tue, 23 Dec 2014 10:26:39 +0000 (10:26 +0000)
committerritsuka <damiog@gmail.com>
Tue, 23 Dec 2014 10:26:39 +0000 (10:26 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6644 b64f7644-9d1e-0410-96f1-a4d463321fa5

macosx/Controller.h
macosx/Controller.m
macosx/English.lproj/MainMenu.xib
macosx/HBAddPresetController.h
macosx/HBAddPresetController.m
macosx/HBPreviewController.h
macosx/HBPreviewController.m
macosx/HBVideoController.h
macosx/HBVideoController.m
macosx/PictureController.h
macosx/PictureController.m

index 5e81c159594e0ac2c6ba18b8d8d753fd61af2f66..cb7610f2670eb37f4ce35ee78aafbe1013293774 100644 (file)
@@ -20,9 +20,6 @@
 
 #import "HBPreferencesController.h"
 
-extern NSString *HBContainerChangedNotification;
-extern NSString *keyContainerTag;
-
 @class HBOutputPanelController;
 @class HBPresetsViewController;
 @class HBPresetsManager;
@@ -176,9 +173,6 @@ extern NSString *keyContainerTag;
 
 - (IBAction) titlePopUpChanged: (id) sender;
 - (IBAction) chapterPopUpChanged: (id) sender;
-- (IBAction) startEndSecValueChanged: (id) sender;
-- (IBAction) startEndFrameValueChanged: (id) sender;
-
 
 - (IBAction) formatPopUpChanged: (id) sender;
 - (IBAction) autoSetM4vExtension: (id) sender;
index a138497489c0b71003c7f06569f3f6f3223e7eaa..17055ff647e6324f895a37e71fe2527eb443ba3d 100644 (file)
 #import "HBPresetsViewController.h"
 #import "HBAddPresetController.h"
 
+#import "HBPicture+UIAdditions.h"
+
 #import "HBAudioDefaults.h"
 #import "HBSubtitlesDefaults.h"
 
 #import "HBCore.h"
 #import "HBJob.h"
 
-NSString *HBContainerChangedNotification       = @"HBContainerChangedNotification";
-NSString *keyContainerTag                      = @"keyContainerTag";
-
 // DockTile update freqency in total percent increment
 #define dockTileUpdateFrequency                  0.1f
 
-@interface HBController () <HBPresetsViewControllerDelegate>
+@interface HBController () <HBPresetsViewControllerDelegate, HBPreviewControllerDelegate>
 
 // The current job.
 @property (nonatomic, retain) HBJob *job;
@@ -76,7 +75,7 @@ NSString *keyContainerTag                      = @"keyContainerTag";
         // Inits the controllers
         outputPanel = [[HBOutputPanelController alloc] init];
         fPictureController = [[HBPictureController alloc] init];
-        fPreviewController = [[HBPreviewController  alloc] init];
+        fPreviewController = [[HBPreviewController  alloc] initWithDelegate:self];
         fQueueController = [[HBQueueController alloc] init];
 
         // we init the HBPresetsManager class
@@ -123,7 +122,6 @@ NSString *keyContainerTag                      = @"keyContainerTag";
 
         [fPictureController setDelegate:self];
 
-        fPreviewController.delegate = self;
         [fPreviewController setCore:self.core];
 
         [fQueueController setHandle:self.queueCore.hb_handle];
@@ -132,6 +130,7 @@ NSString *keyContainerTag                      = @"keyContainerTag";
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(autoSetM4vExtension:) name:HBMixdownChangedNotification object:nil];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pictureSettingsDidChange) name:HBPictureChangedNotification object:nil];
         [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pictureSettingsDidChange) name:HBFiltersChangedNotification object:nil];
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(formatPopUpChanged:) name:HBContainerChangedNotification object:nil];
     }
 
     return self;
@@ -1930,10 +1929,8 @@ static void queueFSEventStreamCallback(
 - (NSDictionary *)createQueueFileItem
 {
     NSMutableDictionary *queueFileJob = [[NSMutableDictionary alloc] init];
-    
-    hb_list_t  * list  = hb_get_titles(self.core.hb_handle);
-    hb_title_t * title = (hb_title_t *) hb_list_item( list,
-            (int)[fSrcTitlePopUp indexOfSelectedItem] );
+
+    hb_title_t *title = self.job.title.hb_title;
 
     /* We use a number system to set the encode status of the queue item
      * 0 == already encoded
@@ -2292,10 +2289,8 @@ static void queueFSEventStreamCallback(
     /* since the queue only scans a single title, its already been selected in showNewScan
        so do not try to reset it here. However if we do decide to do full source scans on
        a queue edit rescan, we would need it. So leaving in for now but commenting out. */
-    //[fSrcTitlePopUp selectItemAtIndex: [[queueToApply objectForKey:@"TitleNumber"] intValue] - 1];
-    
-    [fSrcChapterStartPopUp selectItemAtIndex: [[queueToApply objectForKey:@"ChapterStart"] intValue] - 1];
-    [fSrcChapterEndPopUp selectItemAtIndex: [[queueToApply objectForKey:@"ChapterEnd"] intValue] - 1];
+    self.job.range.chapterStart = [[queueToApply objectForKey:@"ChapterStart"] intValue] - 1;
+    self.job.range.chapterStop = [[queueToApply objectForKey:@"ChapterEnd"] intValue] - 1;
 
     /* File Format */
     [fDstFormatPopUp selectItemWithTag:[queueToApply[@"JobFileFormatMux"] integerValue]];
@@ -3317,7 +3312,7 @@ static void queueFSEventStreamCallback(
     // Generate a new file name
     NSString *fileName = [HBUtilities automaticNameForSource:title.name
                                                        title:title.hb_title->index
-                                                    chapters:NSMakeRange([fSrcChapterStartPopUp indexOfSelectedItem] + 1, [fSrcChapterEndPopUp indexOfSelectedItem] + 1)
+                                                    chapters:NSMakeRange(self.job.range.chapterStart + 1, self.job.range.chapterStop + 1)
                                                      quality:self.job.video.qualityType ? self.job.video.quality : 0
                                                      bitrate:!self.job.video.qualityType ? self.job.video.avgBitrate : 0
                                                   videoCodec:self.job.video.encoder];
@@ -3341,6 +3336,21 @@ static void queueFSEventStreamCallback(
     HBJob *job = [[[HBJob alloc] initWithTitle:hbtitle
                                    andPreset:self.selectedPreset] autorelease];
 
+    // Set the jobs info to the view controllers
+    fPictureController.picture = job.picture;
+    fPictureController.filters = job.filters;
+    fPreviewController.job = job;
+
+    fVideoController.video = job.video;
+    fAudioController.job = job;
+    fSubtitlesViewController.job = job;
+    fChapterTitlesController.job = job;
+
+    // Set Auto Crop to on upon selecting a new title
+    job.picture.autocrop = YES;
+
+    self.job = job;
+
     hb_title_t *title = hbtitle.hb_title;
 
     // If we are a stream type and a batch scan, grok the output file name from title->name upon title change
@@ -3355,27 +3365,7 @@ static void queueFSEventStreamCallback(
         // Change the source to read out the parent folder also
         [fSrcDVD2Field setStringValue:[NSString stringWithFormat:@"%@/%@", browsedSourceDisplayName,[NSString stringWithUTF8String: title->name]]];
     }
-    
-    // For point a to point b pts encoding, set the start and end fields to 0 and the title duration in seconds respectively
-    int duration = (title->hours * 3600) + (title->minutes * 60) + (title->seconds);
-    [fSrcTimeStartEncodingField setStringValue: [NSString stringWithFormat: @"%d", 0]];
-    [fSrcTimeEndEncodingField setStringValue: [NSString stringWithFormat: @"%d", duration]];
-    // For point a to point b frame encoding, set the start and end fields to 0 and the title duration * announced fps in seconds respectively
-    [fSrcFrameStartEncodingField setStringValue: [NSString stringWithFormat: @"%d", 1]];
-    [fSrcFrameEndEncodingField setStringValue: [NSString stringWithFormat: @"%d", duration * (title->vrate.num / title->vrate.den)]];
-
-    // Update chapter popups
-    [fSrcChapterStartPopUp removeAllItems];
-    [fSrcChapterEndPopUp   removeAllItems];
-
-    [hbtitle.chapters enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
-        NSString *title = [NSString stringWithFormat: @"%lu", idx + 1];
-        [fSrcChapterStartPopUp addItemWithTitle:title];
-        [fSrcChapterEndPopUp addItemWithTitle: title];
-    }];
 
-    [fSrcChapterStartPopUp selectItemAtIndex: 0];
-    [fSrcChapterEndPopUp   selectItemAtIndex:hbtitle.chapters.count - 1];
     [self chapterPopUpChanged:nil];
 
     [fSrcAnglePopUp removeAllItems];
@@ -3386,21 +3376,6 @@ static void queueFSEventStreamCallback(
     }
     [fSrcAnglePopUp selectItemAtIndex: 0];
 
-    // Set the jobs info to the view controllers
-    fPictureController.picture = job.picture;
-    fPictureController.filters = job.filters;
-    fPreviewController.job = job;
-
-    fVideoController.video = job.video;
-    fAudioController.job = job;
-    fSubtitlesViewController.job = job;
-    fChapterTitlesController.job = job;
-
-    // Set Auto Crop to on upon selecting a new title
-    job.picture.autocrop = YES;
-
-    self.job = job;
-
     // If Auto Naming is on. We create an output filename of dvd name - title number
     if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultAutoNaming"])
        {
@@ -3413,136 +3388,73 @@ static void queueFSEventStreamCallback(
 
 - (IBAction) encodeStartStopPopUpChanged: (id) sender;
 {
-    if( [fEncodeStartStopPopUp isEnabled] )
+    // We are chapters
+    if ([fEncodeStartStopPopUp indexOfSelectedItem] == 0)
     {
-        /* We are chapters */
-        if( [fEncodeStartStopPopUp indexOfSelectedItem] == 0 )
-        {
-            [fSrcChapterStartPopUp  setHidden: NO];
-            [fSrcChapterEndPopUp  setHidden: NO];
-            
-            [fSrcTimeStartEncodingField  setHidden: YES];
-            [fSrcTimeEndEncodingField  setHidden: YES];
-            
-            [fSrcFrameStartEncodingField  setHidden: YES];
-            [fSrcFrameEndEncodingField  setHidden: YES];
-            
-               [self chapterPopUpChanged:nil];   
-        }
-        /* We are time based (seconds) */
-        else if ([fEncodeStartStopPopUp indexOfSelectedItem] == 1)
-        {
-            [fSrcChapterStartPopUp  setHidden: YES];
-            [fSrcChapterEndPopUp  setHidden: YES];
-            
-            [fSrcTimeStartEncodingField  setHidden: NO];
-            [fSrcTimeEndEncodingField  setHidden: NO];
-            
-            [fSrcFrameStartEncodingField  setHidden: YES];
-            [fSrcFrameEndEncodingField  setHidden: YES];
-            
-            [self startEndSecValueChanged:nil];
-        }
-        /* We are frame based */
-        else if ([fEncodeStartStopPopUp indexOfSelectedItem] == 2)
-        {
-            [fSrcChapterStartPopUp  setHidden: YES];
-            [fSrcChapterEndPopUp  setHidden: YES];
-            
-            [fSrcTimeStartEncodingField  setHidden: YES];
-            [fSrcTimeEndEncodingField  setHidden: YES];
-            
-            [fSrcFrameStartEncodingField  setHidden: NO];
-            [fSrcFrameEndEncodingField  setHidden: NO];
-            
-            [self startEndFrameValueChanged:nil];
-        }
-    }
-}
+        self.job.range.type = HBRangeTypeChapters;
 
-- (IBAction) chapterPopUpChanged: (id) sender
-{
+        [fSrcChapterStartPopUp  setHidden: NO];
+        [fSrcChapterEndPopUp  setHidden: NO];
 
-       /* If start chapter popup is greater than end chapter popup,
-       we set the end chapter popup to the same as start chapter popup */
-       if ([fSrcChapterStartPopUp indexOfSelectedItem] > [fSrcChapterEndPopUp indexOfSelectedItem])
-       {
-               [fSrcChapterEndPopUp selectItemAtIndex: [fSrcChapterStartPopUp indexOfSelectedItem]];
+        [fSrcTimeStartEncodingField  setHidden: YES];
+        [fSrcTimeEndEncodingField  setHidden: YES];
+
+        [fSrcFrameStartEncodingField  setHidden: YES];
+        [fSrcFrameEndEncodingField  setHidden: YES];
+
+        [self chapterPopUpChanged:nil];
     }
+    // We are time based (seconds)
+    else if ([fEncodeStartStopPopUp indexOfSelectedItem] == 1)
+    {
+        self.job.range.type = HBRangeTypeSeconds;
 
-               
-       hb_list_t  * list  = hb_get_titles( self.core.hb_handle);
-    hb_title_t * title = (hb_title_t *)
-        hb_list_item( list, (int)[fSrcTitlePopUp indexOfSelectedItem] );
-
-    hb_chapter_t * chapter;
-    int64_t        duration = 0;
-    for( NSInteger i = [fSrcChapterStartPopUp indexOfSelectedItem];
-         i <= [fSrcChapterEndPopUp indexOfSelectedItem]; i++ )
+        [fSrcChapterStartPopUp  setHidden: YES];
+        [fSrcChapterEndPopUp  setHidden: YES];
+
+        [fSrcTimeStartEncodingField  setHidden: NO];
+        [fSrcTimeEndEncodingField  setHidden: NO];
+
+        [fSrcFrameStartEncodingField  setHidden: YES];
+        [fSrcFrameEndEncodingField  setHidden: YES];
+    }
+    // We are frame based
+    else if ([fEncodeStartStopPopUp indexOfSelectedItem] == 2)
     {
-        chapter = (hb_chapter_t *) hb_list_item( title->list_chapter, (int)i );
-        duration += chapter->duration;
+        self.job.range.type = HBRangeTypeFrames;
+
+        [fSrcChapterStartPopUp  setHidden: YES];
+        [fSrcChapterEndPopUp  setHidden: YES];
+
+        [fSrcTimeStartEncodingField  setHidden: YES];
+        [fSrcTimeEndEncodingField  setHidden: YES];
+
+        [fSrcFrameStartEncodingField  setHidden: NO];
+        [fSrcFrameEndEncodingField  setHidden: NO];
     }
-    
-    duration /= 90000; /* pts -> seconds */
-    [fSrcDuration2Field setStringValue: [NSString stringWithFormat:
-        @"%02lld:%02lld:%02lld", duration / 3600, ( duration / 60 ) % 60,
-        duration % 60]];
+}
 
-    /* We're changing the chapter range - we may need to flip the m4v/mp4 extension */
+- (IBAction) chapterPopUpChanged: (id) sender
+{
+    // We're changing the chapter range - we may need to flip the m4v/mp4 extension
     if ([[fDstFormatPopUp selectedItem] tag] & HB_MUX_MASK_MP4)
     {
         [self autoSetM4vExtension:sender];
     }
 
-    /* If Auto Naming is on it might need to be update if it includes the chapters range */
+    // If Auto Naming is on it might need to be update if it includes the chapters range
     if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultAutoNaming"])
        {
         [self updateFileName];
        }
 }
 
-- (IBAction) startEndSecValueChanged: (id) sender
-{
-
-       int duration = [fSrcTimeEndEncodingField intValue] - [fSrcTimeStartEncodingField intValue];
-    [fSrcDuration2Field setStringValue: [NSString stringWithFormat:
-        @"%02d:%02d:%02d", duration / 3600, ( duration / 60 ) % 60,
-        duration % 60]];
-}
-
-- (IBAction) startEndFrameValueChanged: (id) sender
-{
-    hb_list_t  * list  = hb_get_titles(self.core.hb_handle);
-    hb_title_t * title = (hb_title_t*)
-    hb_list_item( list, (int)[fSrcTitlePopUp indexOfSelectedItem] );
-    
-    int duration = ([fSrcFrameEndEncodingField intValue] - [fSrcFrameStartEncodingField intValue]) / (title->vrate.num / title->vrate.den);
-    [fSrcDuration2Field setStringValue: [NSString stringWithFormat:
-                                         @"%02d:%02d:%02d", duration / 3600, ( duration / 60 ) % 60,
-                                         duration % 60]];
-}
-
 - (IBAction) formatPopUpChanged: (id) sender
 {
     NSString *string   = [fDstFile2Field stringValue];
-    int videoContainer = (int)[[fDstFormatPopUp selectedItem] tag];
+    int videoContainer = self.job.container;
     const char *ext    = NULL;
 
-    // enable chapter markers and hide muxer-specific options
-    [fDstMp4HttpOptFileCheck setHidden:YES];
-    [fDstMp4iPodFileCheck    setHidden:YES];
-
-    switch (videoContainer)
-    {
-        case HB_MUX_AV_MP4:
-            [fDstMp4HttpOptFileCheck setHidden:NO];
-            [fDstMp4iPodFileCheck    setHidden:NO];
-            break;
-
-        default:
-            break;
-    }
     // set the file extension
     ext = hb_container_get_default_extension(videoContainer);
     [fDstFile2Field setStringValue:[NSString stringWithFormat:@"%@.%s",
@@ -3552,61 +3464,35 @@ static void queueFSEventStreamCallback(
     {
         [self autoSetM4vExtension:sender];
     }
-
-    /* post a notification for any interested observers to indicate that our video container has changed */
-    [[NSNotificationCenter defaultCenter] postNotification:
-     [NSNotification notificationWithName:HBContainerChangedNotification
-                                   object:self
-                                 userInfo:[NSDictionary dictionaryWithObjectsAndKeys:
-                                           [NSNumber numberWithInt:videoContainer], keyContainerTag,
-                                           nil]]];
-
-       [self customSettingUsed:sender];
 }
 
 - (void) autoSetM4vExtension:(NSNotification *)notification
 {
-    if (!([[fDstFormatPopUp selectedItem] tag] & HB_MUX_MASK_MP4))
+    if (!(self.job.container & HB_MUX_MASK_MP4))
         return;
     
-    NSString * extension = @"mp4";
+    NSString *extension = @"mp4";
     
     BOOL anyCodecAC3 = [fAudioController anyCodecMatches: HB_ACODEC_AC3] || [fAudioController anyCodecMatches: HB_ACODEC_AC3_PASS];
-    /* Chapter markers are enabled if the checkbox is ticked and we are doing p2p or we have > 1 chapter */
+    // Chapter markers are enabled if the checkbox is ticked and we are doing p2p or we have > 1 chapter
     BOOL chapterMarkers = (self.job.chaptersEnabled) &&
-                          ([fEncodeStartStopPopUp indexOfSelectedItem] != 0 ||
-                           [fSrcChapterStartPopUp indexOfSelectedItem] < [fSrcChapterEndPopUp indexOfSelectedItem]);
-       
+                          (self.job.range.type != HBRangeTypeChapters ||
+                           self.job.range.chapterStart < self.job.range.chapterStop);
+
     if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"DefaultMpegExtension"] isEqualToString: @".m4v"] || 
         ((YES == anyCodecAC3 || YES == chapterMarkers) &&
-         [[[NSUserDefaults standardUserDefaults] objectForKey:@"DefaultMpegExtension"] isEqualToString: @"Auto"] ))
+         [[[NSUserDefaults standardUserDefaults] objectForKey:@"DefaultMpegExtension"] isEqualToString: @"Auto"]))
     {
         extension = @"m4v";
     }
     
-    if[extension isEqualTo: [[fDstFile2Field stringValue] pathExtension]] )
+    if ([extension isEqualTo: [[fDstFile2Field stringValue] pathExtension]] )
         return;
     else
         [fDstFile2Field setStringValue: [NSString stringWithFormat:@"%@.%@",
                                          [[fDstFile2Field stringValue] stringByDeletingPathExtension], extension]];
 }
 
-- (void)updateMp4Checkboxes:(NSNotification *)notification
-{
-    if (self.job.video.encoder != HB_VCODEC_X264)
-    {
-        /* We set the iPod atom checkbox to disabled and uncheck it as its only for x264 in the mp4
-         * container. Format is taken care of in formatPopUpChanged method by hiding and unchecking
-         * anything other than MP4. */
-        [fDstMp4iPodFileCheck setEnabled: NO];
-        [fDstMp4iPodFileCheck setState: NSOffState];
-    }
-    else
-    {
-        [fDstMp4iPodFileCheck setEnabled: YES];
-    }
-}
-
 /* Method to determine if we should change the UI
 To reflect whether or not a Preset is being used or if
 the user is using "Custom" settings by determining the sender*/
@@ -3634,17 +3520,12 @@ the user is using "Custom" settings by determining the sender*/
 /**
  * Registers changes made in the Picture Settings Window.
  */
-
 - (void)pictureSettingsDidChange 
 {
     // align picture settings and video filters in the UI using tabs
     fVideoController.pictureSettings = [self pictureSettingsSummary];
     fVideoController.pictureFilters = self.job.filters.summary;
 
-    /* Store storage resolution for unparse */
-    fVideoController.video.widthForUnparse  = self.job.picture.width;
-    fVideoController.video.heightForUnparse = self.job.picture.height;
-
     [fPreviewController reloadPreviews];
 }
 
@@ -3671,18 +3552,14 @@ the user is using "Custom" settings by determining the sender*/
     return [NSString stringWithString:summary];
 }
 
-- (NSString*) muxerOptionsSummary
+- (NSString *) muxerOptionsSummary
 {
     NSMutableString *summary = [NSMutableString stringWithString:@""];
-    if ([fDstMp4HttpOptFileCheck  isHidden] == NO  &&
-        [fDstMp4HttpOptFileCheck isEnabled] == YES &&
-        [fDstMp4HttpOptFileCheck     state] == NSOnState)
+    if ((self.job.container & HB_MUX_MASK_MP4)  && self.job.mp4HttpOptimize)
     {
         [summary appendString:@" - Web optimized"];
     }
-    if ([fDstMp4iPodFileCheck  isHidden] == NO  &&
-        [fDstMp4iPodFileCheck isEnabled] == YES &&
-        [fDstMp4iPodFileCheck     state] == NSOnState)
+    if ((self.job.container & HB_MUX_MASK_MP4)  && self.job.mp4iPodCompatible)
     {
         [summary appendString:@" - iPod 5G support"];
     }
@@ -3797,31 +3674,18 @@ the user is using "Custom" settings by determining the sender*/
             [fPresetSelectedDisplay setStringValue:[chosenPreset objectForKey:@"PresetName"]];
         }
 
-        /* File Format */
-        /* map legacy container names via libhb */
-        int format = hb_container_get_from_name(hb_container_sanitize_name([chosenPreset[@"FileFormat"] UTF8String]));
-        [fDstFormatPopUp selectItemWithTag:format];
-        [self formatPopUpChanged:nil];
+        // Apply the preset to the current job
+        [self.job applyPreset:preset];
 
-        /* check to see if we have only one chapter */
+        // check to see if we have only one chapter
         [self chapterPopUpChanged:nil];
-        
-        /* Mux mp4 with http optimization */
-        [fDstMp4HttpOptFileCheck setState:[[chosenPreset objectForKey:@"Mp4HttpOptimize"] intValue]];
 
-        /* Lets run through the following functions to get variables set there */
-        /* Set the state of ipod compatible with Mp4iPodCompatible. Only for x264*/
-        [fDstMp4iPodFileCheck setState:[[chosenPreset objectForKey:@"Mp4iPodCompatible"] intValue]];
-
-        /* Audio */
+        // Audio
         [fAudioController applySettingsFromPreset: chosenPreset];
         
-        /*Subtitles*/
+        // Subtitles
         [fSubtitlesViewController applySettingsFromPreset:chosenPreset];
 
-        // Apply the preset to the current job
-        [self.job applyPreset:preset];
-
         [self pictureSettingsDidChange];
     }
 }
@@ -3896,35 +3760,14 @@ the user is using "Custom" settings by determining the sender*/
     // Get whether or not to use the current Picture Filter settings for the preset
     preset[@"UsesPictureFilters"] = currentPreset[@"UsesPictureFilters"];
 
-    preset[@"PresetDescription"] = currentPreset[@"PresetDescription"];
-    preset[@"FileFormat"] = fDstFormatPopUp.titleOfSelectedItem;
-    preset[@"ChapterMarkers"] = @(self.job.chaptersEnabled);
-
-    // Mux mp4 with http optimization
-    preset[@"Mp4HttpOptimize"] = @(fDstMp4HttpOptFileCheck.state);
-    // Add iPod uuid atom
-    preset[@"Mp4iPodCompatible"] = @(fDstMp4iPodFileCheck.state);
-
-    // Video encoder
-    [self.job.video prepareVideoForPreset:preset];
-
     preset[@"PictureWidth"]  = currentPreset[@"PictureWidth"];
     preset[@"PictureHeight"] = currentPreset[@"PictureHeight"];
 
-    // Picture Filters
-    [self.job.filters prepareFiltersForPreset:preset];
-
-    // Picture Size
-    [self.job.picture preparePictureForPreset:preset];
-
-    // Audio
-    [self.job.audioDefaults prepareAudioDefaultsForPreset:preset];
+    preset[@"PresetDescription"] = currentPreset[@"PresetDescription"];
 
-    // Subtitles
-    [self.job.subtitlesDefaults prepareSubtitlesDefaultsForPreset:preset];
+    [self.job applyCurrentSettingsToPreset:preset];
 
     return [[[HBPreset alloc] initWithName:preset[@"PresetName"] content:preset builtIn:NO] autorelease];
-    
 }
 
 #pragma mark -
index 61e9daaecfb34a9e7a162ffd448f3d7ba10ed4d9..439f95472ee3914dda53665934e0956d86de54ba 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="14C68k" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="14C81f" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
         <deployment version="1060" identifier="macosx"/>
         <development version="5100" identifier="xcode"/>
                             <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
                             <color key="backgroundColor" red="0.76630436999999996" green="0.0" blue="0.0" alpha="0.0" colorSpace="calibratedRGB"/>
                         </textFieldCell>
+                        <connections>
+                            <binding destination="240" name="value" keyPath="self.job.range.duration" id="D3F-S5-u15"/>
+                        </connections>
                     </textField>
                     <textField verticalHuggingPriority="750" id="1555">
                         <rect key="frame" x="20" y="486" width="70" height="14"/>
                         </popUpButtonCell>
                         <accessibility description="Format"/>
                         <connections>
-                            <action selector="formatPopUpChanged:" target="240" id="1614"/>
+                            <binding destination="240" name="selectedTag" keyPath="self.job.container" id="ful-Gq-2mt"/>
                         </connections>
                     </popUpButton>
                     <button verticalHuggingPriority="750" id="1562">
                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                         </textFieldCell>
                         <connections>
-                            <action selector="startEndSecValueChanged:" target="240" id="5528"/>
+                            <binding destination="240" name="value" keyPath="self.job.range.secondsStart" id="yuS-GN-avp"/>
                         </connections>
                     </textField>
                     <textField hidden="YES" verticalHuggingPriority="750" id="5521">
                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                         </textFieldCell>
                         <connections>
-                            <action selector="startEndFrameValueChanged:" target="240" id="5530"/>
+                            <binding destination="240" name="value" keyPath="self.job.range.frameStart" id="7yg-HW-q0R"/>
                         </connections>
                     </textField>
                     <textField hidden="YES" verticalHuggingPriority="750" id="5493">
                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                         </textFieldCell>
                         <connections>
-                            <action selector="startEndSecValueChanged:" target="240" id="5529"/>
+                            <binding destination="240" name="value" keyPath="self.job.range.secondsStop" id="BUI-Zz-m1A"/>
                         </connections>
                     </textField>
                     <textField hidden="YES" verticalHuggingPriority="750" id="5523">
                             <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
                         </textFieldCell>
                         <connections>
-                            <action selector="startEndFrameValueChanged:" target="240" id="5531"/>
+                            <binding destination="240" name="value" keyPath="self.job.range.frameStop" id="8G6-K0-vyD"/>
                         </connections>
                     </textField>
                     <textField verticalHuggingPriority="750" id="1627">
                             <font key="font" metaFont="smallSystem"/>
                         </buttonCell>
                         <connections>
-                            <action selector="customSettingUsed:" target="240" id="4971"/>
+                            <binding destination="240" name="value" keyPath="self.job.mp4HttpOptimize" id="b1e-md-dT3"/>
+                            <binding destination="240" name="hidden" keyPath="self.job.mp4OptionsEnabled" id="D27-Mk-6hO">
+                                <dictionary key="options">
+                                    <string key="NSValueTransformerName">NSNegateBoolean</string>
+                                </dictionary>
+                            </binding>
                         </connections>
                     </button>
                     <button toolTip="This option adds an atom to the MP4 file which allows older iPods (5th Generation classic style) to play the file." id="4967">
                             <font key="font" metaFont="smallSystem"/>
                         </buttonCell>
                         <connections>
-                            <action selector="customSettingUsed:" target="240" id="4970"/>
+                            <binding destination="240" name="hidden" keyPath="self.job.mp4OptionsEnabled" id="Vlg-uB-45p">
+                                <dictionary key="options">
+                                    <string key="NSValueTransformerName">NSNegateBoolean</string>
+                                </dictionary>
+                            </binding>
+                            <binding destination="240" name="value" keyPath="self.job.mp4iPodCompatible" id="GWA-QG-Bfu"/>
                         </connections>
                     </button>
                     <textField verticalHuggingPriority="750" id="5505">
                         <accessibility description="Start Chapter"/>
                         <connections>
                             <action selector="chapterPopUpChanged:" target="240" id="1615"/>
+                            <binding destination="240" name="content" keyPath="self.job.range.chapters" id="6kP-TS-bEc"/>
+                            <binding destination="240" name="selectedIndex" keyPath="self.job.range.chapterStart" previousBinding="6kP-TS-bEc" id="U76-2W-TvD"/>
                         </connections>
                     </popUpButton>
                     <popUpButton verticalHuggingPriority="750" id="1548">
                         <accessibility description="End Chapter"/>
                         <connections>
                             <action selector="chapterPopUpChanged:" target="240" id="1616"/>
+                            <binding destination="240" name="content" keyPath="self.job.range.chapters" id="Yqp-Sg-lBf"/>
+                            <binding destination="240" name="selectedIndex" keyPath="self.job.range.chapterStop" previousBinding="Yqp-Sg-lBf" id="4k2-Sm-RoJ"/>
                         </connections>
                     </popUpButton>
                 </subviews>
index 3fa4bf92132271ba48d4e9430dcd0a969c353595..f86b2e4f4f52d585c36b5a39ca1b5d325086fbaf 100644 (file)
@@ -7,7 +7,6 @@
 //
 
 #import <Cocoa/Cocoa.h>
-#include "hb.h"
 
 @class HBPreset;
 
index a53482c0c4d1ef8d4adaa4e586443b350776fbee..82d96585422c7b3f885527a56621ed4ba2700881 100644 (file)
@@ -8,6 +8,7 @@
 
 #import "HBAddPresetController.h"
 #import "HBPreset.h"
+#include "hb.h"
 
 @interface HBAddPresetController ()
 
index 36a71faed696aade9de85ea30a01971caa501d74..a90f8f957ae18871d4d712040741f511387899c7 100644 (file)
 @class HBCore;
 @class HBJob;
 
+@protocol HBPreviewControllerDelegate <NSObject>
+
+- (IBAction)showPicturePanel:(id)sender;
+
+@end
+
 @interface HBPreviewController : NSWindowController <NSWindowDelegate>
 
-@property (nonatomic, assign) HBController *delegate;
+- (id)initWithDelegate:(id <HBPreviewControllerDelegate>)delegate;
+
 @property (nonatomic, assign) HBCore *core;
 @property (nonatomic, assign) HBJob *job;
 
index 96a631d8046d38fe873dc8a996233b5958cb8010..b31dc255a9cbbbaa5b99582d6488cdbb59dd7cf9 100644 (file)
@@ -7,11 +7,10 @@
 #import "HBPreviewController.h"
 #import "HBPreviewGenerator.h"
 #import "HBUtilities.h"
-#import "Controller.h"
 #import <QTKit/QTKit.h>
 
-#import "HBPicture.h"
 #import "HBJob.h"
+#import "HBPicture+UIAdditions.h"
 
 @implementation QTMovieView (HBQTMovieViewExtensions)
 
@@ -98,6 +97,8 @@ typedef enum ViewMode : NSUInteger {
     IBOutlet NSPopUpButton          * fPreviewMovieLengthPopUp;
 }
 
+@property (nonatomic, assign) id <HBPreviewControllerDelegate> delegate;
+
 @property (nonatomic) CALayer *backLayer;
 @property (nonatomic) CALayer *pictureLayer;
 
@@ -134,7 +135,7 @@ typedef enum ViewMode : NSUInteger {
 
 @implementation HBPreviewController
 
-- (id) init
+- (id)initWithDelegate:(id <HBPreviewControllerDelegate>)delegate
 {
        if (self = [super initWithWindowNibName:@"PicturePreview"])
        {
@@ -147,6 +148,7 @@ typedef enum ViewMode : NSUInteger {
         // If/when we switch a lot of this stuff to bindings, this can probably
         // go away.
         [self window];
+        _delegate = delegate;
 
     }
        return self;
index 9ebc2cb54356f34d5fa09cfa1091c66547669b5b..3289b58eec4c9046a850cf84e8bb9d41b0522e65 100644 (file)
@@ -14,8 +14,6 @@
 
 /**
  *  HBVideoController
- *
- *  Responds to HBContainerChangedNotification notifications.
  */
 @interface HBVideoController : NSViewController <HBViewValidation>
 
index 42ee4d542534c39a3eec998024dd29758c99354a..8819ac93e4ccfdf37277e722cad16d4afc97caab 100644 (file)
@@ -5,9 +5,8 @@
  It may be used under the terms of the GNU General Public License. */
 
 #import "HBVideoController.h"
-#import "Controller.h"
 #import "HBAdvancedController.h"
-#import "HBVideo.h"
+#import "HBVideo+UIAdditions.h"
 
 #include "hb.h"
 
@@ -67,9 +66,6 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
         // will use the HBJob one in the future.
         _video = [[HBVideo alloc] init];
 
-        // register that we are interested in changes made to the video container.
-        [[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(containerChanged:) name:HBContainerChangedNotification object:nil];
-
         // Observe the advanced tab pref shown/hided state.
         [[NSUserDefaultsController sharedUserDefaultsController] addObserver:self
                                                                   forKeyPath:@"values.HBShowAdvancedTab"
@@ -92,12 +88,6 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
     return self;
 }
 
-- (void)loadView
-{
-    [super loadView];
-    [self switchPresetView];
-}
-
 - (void)setEnabled:(BOOL)flag
 {
     _enabled = flag;
@@ -182,11 +172,6 @@ static void *HBVideoControllerContext = &HBVideoControllerContext;
     }
 }
 
-- (void)containerChanged:(NSNotification *)aNotification
-{
-    self.video.container = [[aNotification userInfo][keyContainerTag] intValue];
-}
-
 #pragma mark - Interface setup
 
 /*
index c2ea23d5ca2fbea82b1dd801f0f4c99fb5fa66cc..6328cc7abddb67f3c4190fcbb818e83f971224c9 100644 (file)
@@ -6,8 +6,8 @@
 
 #import <Cocoa/Cocoa.h>
 
-#import "HBFilters.h"
-#import "HBPicture.h"
+@class HBFilters;
+@class HBPicture;
 
 @protocol HBPictureControllerDelegate <NSObject>
 
index c1a813ae5fbea0b1e05ef7631313267b97f582a2..7d65d566498de8e8c93f51d1c6ba428b2b500d64 100644 (file)
@@ -4,36 +4,9 @@
  Homepage: <http://handbrake.fr/>.
  It may be used under the terms of the GNU General Public License. */
 
-#import "Controller.h"
 #import "PictureController.h"
-#import "HBPreviewController.h"
-
-#import "HBTitle.h"
-
-@interface HBCustomFilterTransformer : NSValueTransformer
-@end
-
-@implementation HBCustomFilterTransformer
-
-+ (Class)transformedValueClass
-{
-    return [NSNumber class];
-}
-
-- (id)transformedValue:(id)value
-{
-    if ([value intValue] == 1)
-        return @NO;
-    else
-        return @YES;
-}
-
-+ (BOOL)allowsReverseTransformation
-{
-    return NO;
-}
-
-@end
+#import "HBFilters.h"
+#import "HBPicture.h"
 
 static void *HBPictureControllerContext = &HBPictureControllerContext;
 
@@ -308,7 +281,7 @@ static void *HBPictureControllerContext = &HBPictureControllerContext;
     NSSize pictureCropBoxSize = [fPictureCropBox frame].size;
     NSPoint fPictureCropBoxOrigin = [fPictureCropBox frame].origin;
 
-    if ([fAnamorphicPopUp indexOfSelectedItem] == HB_ANAMORPHIC_CUSTOM)
+    if ([fAnamorphicPopUp indexOfSelectedItem] == 3)
     {   // custom / power user jamboree
         pictureSizingBoxSize.width = 350;
     }