OSDN Git Service

MacGui: Finally!! Nested Presets - Initial implementation
authordynaflash <dynaflash@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Tue, 14 Oct 2008 17:34:23 +0000 (17:34 +0000)
committerdynaflash <dynaflash@b64f7644-9d1e-0410-96f1-a4d463321fa5>
Tue, 14 Oct 2008 17:34:23 +0000 (17:34 +0000)
- Currently just in the Built In presets.
- Special thanks to jbrjake for updating the new built in presets :)
-- jbrjake's notes on built in preset changes:
--- no more blind, broke, bedlam, or deux six quatre presets
--- detelecine and decomb for animation and television high profile presets
--- new x264 settings for most presets, which are still in a state of flux
--- iPod Hi-Rez renamed iPod Legacy, iPod Low-Rez renamed iPod Classic & iPod Nano, iPhone / iPod Touch renamed iPhone & iPod Touch
- Make sure to Update your Built In presets.
- Selecting the default preset (whether user specified or the hb default) automatically expands the proper parent folders
- "Folders" are stored as a different type of preset with key "Folder" where a value of 1 is a folder and 0 is a regular preset.
- Children presets (which can also be folder presets with their own children) are stored in an array in the folder preset with key "ChildrenArray"
- Levels are limited to three (including the root level).
- Though most of the code for creating custom user specified folders and dragging and dropping user presets into those folders is done, its not fully tested so is not currently implemented. In other words custom presets are still only at the root level.
- Known issue: dragging and dropping within custom user presets seems a touch "glitchy". Though in testing presets have not been lost.

git-svn-id: svn://localhost/HandBrake/trunk@1831 b64f7644-9d1e-0410-96f1-a4d463321fa5

macosx/Controller.h
macosx/Controller.mm
macosx/English.lproj/MainMenu.xib
macosx/HBPresets.h
macosx/HBPresets.m

index 60f6ce0..2c6f0d1 100644 (file)
@@ -215,6 +215,7 @@ BOOL                        fIsDragging;
        IBOutlet NSTextField         * fPresetNewDesc;
        IBOutlet NSPopUpButton       * fPresetNewPicSettingsPopUp;
     IBOutlet NSButton            * fPresetNewPicFiltersCheck;
+    IBOutlet NSButton            * fPresetNewFolderCheck;
        IBOutlet NSTextField         * fPresetSelectedDisplay;
        
        NSString                     * AppSupportDirectory;
@@ -224,8 +225,10 @@ BOOL                        fIsDragging;
        NSMutableDictionary          * chosenPreset;
     int                            curUserPresetChosenNum;
         
-       int                            presetHbDefault; // this is 1 in "Default" preset key
-       int                            presetUserDefault;// this is 2 in "Default" preset key
+       NSMutableDictionary          *presetHbDefault; // this is 1 in "Default" preset key
+       NSMutableDictionary          *presetUserDefault;// this is 2 in "Default" preset key
+    NSMutableDictionary          *presetUserDefaultParent;
+    NSMutableDictionary          *presetUserDefaultParentParent;
     int                        presetCurrentBuiltInCount; // keeps track of the current number of built in presets
     IBOutlet NSPanel             * fAddPresetPanel;
        /* new NSOutline View for the presets */
index ac4bd77..452372f 100644 (file)
@@ -4714,35 +4714,112 @@ the user is using "Custom" settings by determining the sender*/
 #pragma mark Preset Outline View Methods
 #pragma mark - Required
 /* These are required by the NSOutlineView Datasource Delegate */
+
+
+/* used to specify the number of levels to show for each item */
+- (int)outlineView:(NSOutlineView *)fPresetsOutlineView numberOfChildrenOfItem:(id)item
+{
+    /* currently use no levels to test outline view viability */
+    if (item == nil) // for an outline view the root level of the hierarchy is always nil
+    {
+        return [UserPresets count];
+    }
+    else
+    {
+        /* we need to return the count of the array in ChildrenArray for this folder */
+        NSArray *children = nil;
+        children = [item objectForKey:@"ChildrenArray"];
+        if ([children count] > 0)
+        {
+            return [children count];
+        }
+        else
+        {
+            return 0;
+        }
+    }
+}
+
 /* We use this to deterimine children of an item */
-- (id)outlineView:(NSOutlineView *)fPresetsOutlineView child:(NSInteger)index ofItem:(id)item
+- (id)outlineView:(NSOutlineView *)fPresetsOutlineView child:(int)index ofItem:(id)item
 {
-if (item == nil)
-        return [UserPresets objectAtIndex:index];
+    
+    /* we need to return the count of the array in ChildrenArray for this folder */
+    NSArray *children = nil;
+    if (item == nil)
+    {
+        children = UserPresets;
+    }
+    else
+    {
+        if ([item objectForKey:@"ChildrenArray"])
+        {
+            children = [item objectForKey:@"ChildrenArray"];
+        }
+    }   
+    if ((children == nil) || ([children count] <= index))
+    {
+        return nil;
+    }
+    else
+    {
+        return [children objectAtIndex:index];
+    }
+    
     
     // We are only one level deep, so we can't be asked about children
-    NSAssert (NO, @"Presets View outlineView:child:ofItem: currently can't handle nested items.");
-    return nil;
+    //NSAssert (NO, @"Presets View outlineView:child:ofItem: currently can't handle nested items.");
+    //return nil;
 }
+
 /* We use this to determine if an item should be expandable */
 - (BOOL)outlineView:(NSOutlineView *)fPresetsOutlineView isItemExpandable:(id)item
 {
-
-    /* For now, we maintain one level, so set to no
-    * when nested, we set to yes for any preset "folders"
-    */
-    return NO;
-
-}
-/* used to specify the number of levels to show for each item */
-- (int)outlineView:(NSOutlineView *)fPresetsOutlineView numberOfChildrenOfItem:(id)item
-{
-    /* currently use no levels to test outline view viability */
+    
+    /* we need to return the count of the array in ChildrenArray for this folder */
+    NSArray *children= nil;
     if (item == nil)
-        return [UserPresets count];
+    {
+        children = UserPresets;
+    }
+    else
+    {
+        if ([item objectForKey:@"ChildrenArray"])
+        {
+            children = [item objectForKey:@"ChildrenArray"];
+        }
+    }   
+    
+    /* To deterimine if an item should show a disclosure triangle
+     * we could do it by the children count as so:
+     * if ([children count] < 1)
+     * However, lets leave the triangle show even if there are no
+     * children to help indicate a folder, just like folder in the
+     * finder can show a disclosure triangle even when empty
+     */
+    
+    /* We need to determine if the item is a folder */
+   if ([[item objectForKey:@"Folder"] intValue] == 1)
+   {
+        return YES;
+    }
     else
-        return 0;
+    {
+        return NO;
+    }
+    
 }
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView shouldExpandItem:(id)item
+{
+    // Our outline view has no levels, but we can still expand every item. Doing so
+    // just makes the row taller. See heightOfRowByItem below.
+//return ![(HBQueueOutlineView*)outlineView isDragging];
+
+return YES;
+}
+
+
 /* Used to tell the outline view which information is to be displayed per item */
 - (id)outlineView:(NSOutlineView *)fPresetsOutlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
 {
@@ -4754,7 +4831,8 @@ if (item == nil)
     }
     else
     {
-        return @"something";
+        //return @"";
+        return nil;
     }
 }
 
@@ -4764,7 +4842,6 @@ if (item == nil)
 {
     if ([[tableColumn identifier] isEqualToString:@"PresetName"])
     {
-        NSDictionary *userPresetDict = item;
         NSFont *txtFont;
         NSColor *fontColor;
         NSColor *shadowColor;
@@ -4778,7 +4855,7 @@ if (item == nil)
         }
         else
         {
-            if ([[userPresetDict objectForKey:@"Type"] intValue] == 0)
+            if ([[item objectForKey:@"Type"] intValue] == 0)
             {
                 fontColor = [NSColor blueColor];
             }
@@ -4786,15 +4863,21 @@ if (item == nil)
             {
                 fontColor = [NSColor blackColor];
             }
-            shadowColor = nil;
+            /* check to see if its a folder */
+            //if ([[item objectForKey:@"Folder"] intValue] == 1)
+            //{
+            //fontColor = [NSColor greenColor];
+            //}
+            
+            
         }
         /* We use Bold Text for the HB Default */
-        if ([[userPresetDict objectForKey:@"Default"] intValue] == 1)// 1 is HB default
+        if ([[item objectForKey:@"Default"] intValue] == 1)// 1 is HB default
         {
             txtFont = [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]];
         }
         /* We use Bold Text for the User Specified Default */
-        if ([[userPresetDict objectForKey:@"Default"] intValue] == 2)// 2 is User default
+        if ([[item objectForKey:@"Default"] intValue] == 2)// 2 is User default
         {
             txtFont = [NSFont boldSystemFontOfSize: [NSFont smallSystemFontSize]];
         }
@@ -4851,7 +4934,8 @@ if (item == nil)
 - (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard
 {
        // Dragging is only allowed for custom presets.
-       if ([[[UserPresets objectAtIndex:[fPresetsOutlineView selectedRow]] objectForKey:@"Type"] intValue] == 0) // 0 is built in preset
+    //[[[fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]] objectForKey:@"Default"] intValue] != 1
+       if ([[[fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]] objectForKey:@"Type"] intValue] == 0) // 0 is built in preset
     {
         return NO;
     }
@@ -4869,16 +4953,15 @@ if (item == nil)
 
 - (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(int)index
 {
+       
        // Don't allow dropping ONTO an item since they can't really contain any children.
     
     BOOL isOnDropTypeProposal = index == NSOutlineViewDropOnItemIndex;
     if (isOnDropTypeProposal)
         return NSDragOperationNone;
     
-    
-       // Don't allow dropping INTO an item since they can't really contain any children as of yet.
-       
-    if (item != nil)
+    // Don't allow dropping INTO an item since they can't really contain any children as of yet.
+       if (item != nil)
        {
                index = [fPresetsOutlineView rowForItem: item] + 1;
                item = nil;
@@ -4889,7 +4972,7 @@ if (item == nil)
     {
         return NSDragOperationNone;
         index = MAX (index, presetCurrentBuiltInCount);
-       }
+       }    
        
     [outlineView setDropItem:item dropChildIndex:index];
     return NSDragOperationGeneric;
@@ -4899,16 +4982,27 @@ if (item == nil)
 
 - (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(int)index
 {
-    NSMutableIndexSet *moveItems = [NSMutableIndexSet indexSet];
-    
-    id obj;
-    NSEnumerator *enumerator = [fDraggedNodes objectEnumerator];
-    while (obj = [enumerator nextObject])
-    {
-        [moveItems addIndex:[UserPresets indexOfObject:obj]];
+    /* first, lets see if we are dropping into a folder */
+    if ([[fPresetsOutlineView itemAtRow:index] objectForKey:@"Folder"] && [[[fPresetsOutlineView itemAtRow:index] objectForKey:@"Folder"] intValue] == 1) // if its a folder
+       {
+    NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+    childrenArray = [[fPresetsOutlineView itemAtRow:index] objectForKey:@"ChildrenArray"];
+    [childrenArray addObject:item];
+    [[fPresetsOutlineView itemAtRow:index] setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
+    [childrenArray autorelease];
+    }
+    else // We are not, so we just move the preset into the existing array 
+    {
+        NSMutableIndexSet *moveItems = [NSMutableIndexSet indexSet];
+        id obj;
+        NSEnumerator *enumerator = [fDraggedNodes objectEnumerator];
+        while (obj = [enumerator nextObject])
+        {
+            [moveItems addIndex:[UserPresets indexOfObject:obj]];
+        }
+        // Successful drop, lets rearrange the view and save it all
+        [self moveObjectsInPresetsArray:UserPresets fromIndexes:moveItems toIndex: index];
     }
-    // Successful drop, lets rearrange the view and save it all
-    [self moveObjectsInPresetsArray:UserPresets fromIndexes:moveItems toIndex: index];
     [fPresetsOutlineView reloadData];
     [self savePreset];
     return YES;
@@ -4949,12 +5043,12 @@ if (item == nil)
 
 - (IBAction)selectPreset:(id)sender
 {
-
-    if ([fPresetsOutlineView selectedRow] >= 0)
+    
+    if ([fPresetsOutlineView selectedRow] >= 0 && [[[fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]] objectForKey:@"Folder"] intValue] != 1)
     {
         chosenPreset = [fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]];
-        /* we set the preset display field in main window here */
         [fPresetSelectedDisplay setStringValue:[chosenPreset objectForKey:@"PresetName"]];
+        
         if ([[chosenPreset objectForKey:@"Default"] intValue] == 1)
         {
             [fPresetSelectedDisplay setStringValue:[NSString stringWithFormat:@"%@ (Default)", [chosenPreset objectForKey:@"PresetName"]]];
@@ -4963,17 +5057,18 @@ if (item == nil)
         {
             [fPresetSelectedDisplay setStringValue:[chosenPreset objectForKey:@"PresetName"]];
         }
+        
         /* File Format */
         [fDstFormatPopUp selectItemWithTitle:[chosenPreset objectForKey:@"FileFormat"]];
         [self formatPopUpChanged:nil];
-
+        
         /* Chapter Markers*/
         [fCreateChapterMarkers setState:[[chosenPreset objectForKey:@"ChapterMarkers"] intValue]];
         /* Allow Mpeg4 64 bit formatting +4GB file sizes */
         [fDstMp4LargeFileCheck setState:[[chosenPreset objectForKey:@"Mp4LargeFile"] intValue]];
         /* Mux mp4 with http optimization */
         [fDstMp4HttpOptFileCheck setState:[[chosenPreset objectForKey:@"Mp4HttpOptimize"] intValue]];
-
+        
         /* Video encoder */
         /* We set the advanced opt string here if applicable*/
         [fAdvancedOptions setOptions:[chosenPreset objectForKey:@"x264Option"]];
@@ -5008,22 +5103,22 @@ if (item == nil)
         {
             [fVidEncoderPopUp selectItemWithTitle:[chosenPreset objectForKey:@"VideoEncoder"]];
         }
-
+        
         /* Lets run through the following functions to get variables set there */
         [self videoEncoderPopUpChanged:nil];
         /* Set the state of ipod compatible with Mp4iPodCompatible. Only for x264*/
         [fDstMp4iPodFileCheck setState:[[chosenPreset objectForKey:@"Mp4iPodCompatible"] intValue]];
         [self calculateBitrate:nil];
-
+        
         /* Video quality */
         [fVidQualityMatrix selectCellAtRow:[[chosenPreset objectForKey:@"VideoQualityType"] intValue] column:0];
-
+        
         [fVidTargetSizeField setStringValue:[chosenPreset objectForKey:@"VideoTargetSize"]];
         [fVidBitrateField setStringValue:[chosenPreset objectForKey:@"VideoAvgBitrate"]];
         [fVidQualitySlider setFloatValue:[[chosenPreset objectForKey:@"VideoQualitySlider"] floatValue]];
-
+        
         [self videoMatrixChanged:nil];
-
+        
         /* Video framerate */
         /* For video preset video framerate, we want to make sure that Same as source does not conflict with the
          detected framerate in the fVidRatePopUp so we use index 0*/
@@ -5035,16 +5130,16 @@ if (item == nil)
         {
             [fVidRatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"VideoFramerate"]];
         }
-
+        
         /* GrayScale */
         [fVidGrayscaleCheck setState:[[chosenPreset objectForKey:@"VideoGrayScale"] intValue]];
-
+        
         /* 2 Pass Encoding */
         [fVidTwoPassCheck setState:[[chosenPreset objectForKey:@"VideoTwoPass"] intValue]];
         [self twoPassCheckboxChanged:nil];
         /* Turbo 1st pass for 2 Pass Encoding */
         [fVidTurboPassCheck setState:[[chosenPreset objectForKey:@"VideoTurboTwoPass"] intValue]];
-
+        
         /*Audio*/
         if ([chosenPreset objectForKey:@"FileCodecs"])
         {
@@ -5163,7 +5258,7 @@ if (item == nil)
                 }
             }
             /* We detect here if we have the old audio sample rate and if so we apply samplerate and bitrate to the existing four tracks if chosen
-            * UNLESS the CodecPopUp is AC3 in which case the preset values are ignored in favor of rates set in audioTrackMixdownChanged*/
+             * UNLESS the CodecPopUp is AC3 in which case the preset values are ignored in favor of rates set in audioTrackMixdownChanged*/
             if ([chosenPreset objectForKey:@"AudioSampleRate"])
             {
                 if ([fAudLang1PopUp indexOfSelectedItem] > 0 && [fAudTrack1CodecPopUp titleOfSelectedItem] != @"AC3 Passthru")
@@ -5314,10 +5409,10 @@ if (item == nil)
                 [fAudTrack4DrcSlider setFloatValue:[[chosenPreset objectForKey:@"Audio4TrackDRCSlider"] floatValue]];
                 [self audioDRCSliderChanged: fAudTrack4DrcSlider];
             }
-
-
+            
+            
         }
-
+        
         /* We now cleanup any extra audio tracks that may be previously set if we need to, we do it here so we don't have to
          * duplicate any code for legacy presets.*/
         /* First we handle the legacy Codecs crazy AVC/H.264 Video / AAC + AC3 Audio atv hybrid */
@@ -5346,12 +5441,12 @@ if (item == nil)
                 [self audioTrackPopUpChanged: fAudLang4PopUp];
             }
         }
-
+        
         /*Subtitles*/
         [fSubPopUp selectItemWithTitle:[chosenPreset objectForKey:@"Subtitles"]];
         /* Forced Subtitles */
         [fSubForcedCheck setState:[[chosenPreset objectForKey:@"SubtitlesForced"] intValue]];
-
+        
         /* Picture Settings */
         /* Note: objectForKey:@"UsesPictureSettings" now refers to picture size, this encompasses:
          * height, width, keep ar, anamorphic and crop settings.
@@ -5489,21 +5584,21 @@ if (item == nil)
                     /* Deblock */
                     if ([[chosenPreset objectForKey:@"PictureDeblock"] intValue] == 1)
                     {
-                       /* since we used to use 1 to turn on deblock, we now use a 5 in our sliding scale */
-                         [fPictureController setDeblock:5];
+                        /* since we used to use 1 to turn on deblock, we now use a 5 in our sliding scale */
+                        [fPictureController setDeblock:5];
                     }
                     else
                     {
                         [fPictureController setDeblock:0];
-                     
+                        
                     }
-
-                   [self calculatePictureSizing:nil];
+                    
+                    [self calculatePictureSizing:nil];
                 }
-
+                
             }
-
-
+            
+            
         }
         /* If the preset has an objectForKey:@"UsesPictureFilters", then we know it is a newer style filters preset
          * and handle the filters here depending on whether or not the preset specifies applying the filter.
@@ -5614,6 +5709,8 @@ if (item == nil)
     [fPresetNewPicSettingsPopUp selectItemAtIndex: 0]; 
     /* Uncheck the preset use filters checkbox */
     [fPresetNewPicFiltersCheck setState:NSOffState];
+    // fPresetNewFolderCheck
+    [fPresetNewFolderCheck setState:NSOffState];
     /* Erase info from the input fields*/
        [fPresetNewName setStringValue: @""];
        [fPresetNewDesc setStringValue: @""];
@@ -5685,130 +5782,141 @@ if (item == nil)
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
        /* Get the New Preset Name from the field in the AddPresetPanel */
     [preset setObject:[fPresetNewName stringValue] forKey:@"PresetName"];
+    /* Set whether or not this is to be a folder fPresetNewFolderCheck*/
+    [preset setObject:[NSNumber numberWithBool:[fPresetNewFolderCheck state]] forKey:@"Folder"];
        /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
        [preset setObject:[NSNumber numberWithInt:1] forKey:@"Type"];
        /*Set whether or not this is default, at creation set to 0*/
        [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-       /*Get the whether or not to apply pic Size and Cropping (includes Anamorphic)*/
-       [preset setObject:[NSNumber numberWithInt:[fPresetNewPicSettingsPopUp indexOfSelectedItem]] forKey:@"UsesPictureSettings"];
-    /* Get whether or not to use the current Picture Filter settings for the preset */
-    [preset setObject:[NSNumber numberWithInt:[fPresetNewPicFiltersCheck state]] forKey:@"UsesPictureFilters"];
-    /* Get New Preset Description from the field in the AddPresetPanel*/
-       [preset setObject:[fPresetNewDesc stringValue] forKey:@"PresetDescription"];
-       /* File Format */
-    [preset setObject:[fDstFormatPopUp titleOfSelectedItem] forKey:@"FileFormat"];
-       /* Chapter Markers fCreateChapterMarkers*/
-       [preset setObject:[NSNumber numberWithInt:[fCreateChapterMarkers state]] forKey:@"ChapterMarkers"];
-       /* Allow Mpeg4 64 bit formatting +4GB file sizes */
-       [preset setObject:[NSNumber numberWithInt:[fDstMp4LargeFileCheck state]] forKey:@"Mp4LargeFile"];
-    /* Mux mp4 with http optimization */
-    [preset setObject:[NSNumber numberWithInt:[fDstMp4HttpOptFileCheck state]] forKey:@"Mp4HttpOptimize"];
-    /* Add iPod uuid atom */
-    [preset setObject:[NSNumber numberWithInt:[fDstMp4iPodFileCheck state]] forKey:@"Mp4iPodCompatible"];
-
-    /* Codecs */
-       /* Video encoder */
-       [preset setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
-       /* x264 Option String */
-       [preset setObject:[fAdvancedOptions optionsString] forKey:@"x264Option"];
-
-       [preset setObject:[NSNumber numberWithInt:[fVidQualityMatrix selectedRow]] forKey:@"VideoQualityType"];
-       [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
-       [preset setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
-       [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
-
-       /* Video framerate */
-    if ([fVidRatePopUp indexOfSelectedItem] == 0) // Same as source is selected
-       {
-        [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
-    }
-    else // we can record the actual titleOfSelectedItem
+    if ([fPresetNewFolderCheck state] == YES)
     {
-    [preset setObject:[fVidRatePopUp titleOfSelectedItem] forKey:@"VideoFramerate"];
+        /* initialize and set an empty array for children here since we are a new folder */
+        NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+        [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
+        [childrenArray autorelease];
     }
-       /* GrayScale */
-       [preset setObject:[NSNumber numberWithInt:[fVidGrayscaleCheck state]] forKey:@"VideoGrayScale"];
-       /* 2 Pass Encoding */
-       [preset setObject:[NSNumber numberWithInt:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
-       /* Turbo 2 pass Encoding fVidTurboPassCheck*/
-       [preset setObject:[NSNumber numberWithInt:[fVidTurboPassCheck state]] forKey:@"VideoTurboTwoPass"];
-       /*Picture Settings*/
-       hb_job_t * job = fTitle->job;
-       /* Picture Sizing */
-       /* Use Max Picture settings for whatever the dvd is.*/
-       [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
-       [preset setObject:[NSNumber numberWithInt:fTitle->job->width] forKey:@"PictureWidth"];
-       [preset setObject:[NSNumber numberWithInt:fTitle->job->height] forKey:@"PictureHeight"];
-       [preset setObject:[NSNumber numberWithInt:fTitle->job->keep_ratio] forKey:@"PictureKeepRatio"];
-       [preset setObject:[NSNumber numberWithInt:fTitle->job->pixel_ratio] forKey:@"PicturePAR"];
-    
-    /* Set crop settings here */
-       [preset setObject:[NSNumber numberWithInt:[fPictureController autoCrop]] forKey:@"PictureAutoCrop"];
-    [preset setObject:[NSNumber numberWithInt:job->crop[0]] forKey:@"PictureTopCrop"];
-    [preset setObject:[NSNumber numberWithInt:job->crop[1]] forKey:@"PictureBottomCrop"];
-       [preset setObject:[NSNumber numberWithInt:job->crop[2]] forKey:@"PictureLeftCrop"];
-       [preset setObject:[NSNumber numberWithInt:job->crop[3]] forKey:@"PictureRightCrop"];
-    
-    /* Picture Filters */
-    [preset setObject:[NSNumber numberWithInt:[fPictureController deinterlace]] forKey:@"PictureDeinterlace"];
-       [preset setObject:[NSNumber numberWithInt:[fPictureController detelecine]] forKey:@"PictureDetelecine"];
-    //[preset setObject:[NSNumber numberWithInt:[fPictureController vfr]] forKey:@"VFR"];
-       [preset setObject:[NSNumber numberWithInt:[fPictureController denoise]] forKey:@"PictureDenoise"];
-    [preset setObject:[NSNumber numberWithInt:[fPictureController deblock]] forKey:@"PictureDeblock"]; 
-    [preset setObject:[NSNumber numberWithInt:[fPictureController decomb]] forKey:@"PictureDecomb"];
-    
-    
-    /*Audio*/
-    if ([fAudLang1PopUp indexOfSelectedItem] > 0)
+    else // we are not creating a preset folder, so we go ahead with the rest of the preset info
     {
-        [preset setObject:[NSNumber numberWithInt:[fAudLang1PopUp indexOfSelectedItem]] forKey:@"Audio1Track"];
-        [preset setObject:[fAudLang1PopUp titleOfSelectedItem] forKey:@"Audio1TrackDescription"];
-        [preset setObject:[fAudTrack1CodecPopUp titleOfSelectedItem] forKey:@"Audio1Encoder"];
-        [preset setObject:[fAudTrack1MixPopUp titleOfSelectedItem] forKey:@"Audio1Mixdown"];
-        [preset setObject:[fAudTrack1RatePopUp titleOfSelectedItem] forKey:@"Audio1Samplerate"];
-        [preset setObject:[fAudTrack1BitratePopUp titleOfSelectedItem] forKey:@"Audio1Bitrate"];
-        [preset setObject:[NSNumber numberWithFloat:[fAudTrack1DrcSlider floatValue]] forKey:@"Audio1TrackDRCSlider"];
-    }
-    if ([fAudLang2PopUp indexOfSelectedItem] > 0)
-    {
-        [preset setObject:[NSNumber numberWithInt:[fAudLang2PopUp indexOfSelectedItem]] forKey:@"Audio2Track"];
-        [preset setObject:[fAudLang2PopUp titleOfSelectedItem] forKey:@"Audio2TrackDescription"];
-        [preset setObject:[fAudTrack2CodecPopUp titleOfSelectedItem] forKey:@"Audio2Encoder"];
-        [preset setObject:[fAudTrack2MixPopUp titleOfSelectedItem] forKey:@"Audio2Mixdown"];
-        [preset setObject:[fAudTrack2RatePopUp titleOfSelectedItem] forKey:@"Audio2Samplerate"];
-        [preset setObject:[fAudTrack2BitratePopUp titleOfSelectedItem] forKey:@"Audio2Bitrate"];
-        [preset setObject:[NSNumber numberWithFloat:[fAudTrack2DrcSlider floatValue]] forKey:@"Audio2TrackDRCSlider"];
-    }
-    if ([fAudLang3PopUp indexOfSelectedItem] > 0)
-    {
-        [preset setObject:[NSNumber numberWithInt:[fAudLang3PopUp indexOfSelectedItem]] forKey:@"Audio3Track"];
-        [preset setObject:[fAudLang3PopUp titleOfSelectedItem] forKey:@"Audio3TrackDescription"];
-        [preset setObject:[fAudTrack3CodecPopUp titleOfSelectedItem] forKey:@"Audio3Encoder"];
-        [preset setObject:[fAudTrack3MixPopUp titleOfSelectedItem] forKey:@"Audio3Mixdown"];
-        [preset setObject:[fAudTrack3RatePopUp titleOfSelectedItem] forKey:@"Audio3Samplerate"];
-        [preset setObject:[fAudTrack3BitratePopUp titleOfSelectedItem] forKey:@"Audio3Bitrate"];
-        [preset setObject:[NSNumber numberWithFloat:[fAudTrack3DrcSlider floatValue]] forKey:@"Audio3TrackDRCSlider"];
-    }
-    if ([fAudLang4PopUp indexOfSelectedItem] > 0)
-    {
-        [preset setObject:[NSNumber numberWithInt:[fAudLang4PopUp indexOfSelectedItem]] forKey:@"Audio4Track"];
-        [preset setObject:[fAudLang4PopUp titleOfSelectedItem] forKey:@"Audio4TrackDescription"];
-        [preset setObject:[fAudTrack4CodecPopUp titleOfSelectedItem] forKey:@"Audio4Encoder"];
-        [preset setObject:[fAudTrack4MixPopUp titleOfSelectedItem] forKey:@"Audio4Mixdown"];
-        [preset setObject:[fAudTrack4RatePopUp titleOfSelectedItem] forKey:@"Audio4Samplerate"];
-        [preset setObject:[fAudTrack4BitratePopUp titleOfSelectedItem] forKey:@"Audio4Bitrate"];
-        [preset setObject:[NSNumber numberWithFloat:[fAudTrack4DrcSlider floatValue]] forKey:@"Audio4TrackDRCSlider"];
+        /*Get the whether or not to apply pic Size and Cropping (includes Anamorphic)*/
+        [preset setObject:[NSNumber numberWithInt:[fPresetNewPicSettingsPopUp indexOfSelectedItem]] forKey:@"UsesPictureSettings"];
+        /* Get whether or not to use the current Picture Filter settings for the preset */
+        [preset setObject:[NSNumber numberWithInt:[fPresetNewPicFiltersCheck state]] forKey:@"UsesPictureFilters"];
+        
+        /* Get New Preset Description from the field in the AddPresetPanel*/
+        [preset setObject:[fPresetNewDesc stringValue] forKey:@"PresetDescription"];
+        /* File Format */
+        [preset setObject:[fDstFormatPopUp titleOfSelectedItem] forKey:@"FileFormat"];
+        /* Chapter Markers fCreateChapterMarkers*/
+        [preset setObject:[NSNumber numberWithInt:[fCreateChapterMarkers state]] forKey:@"ChapterMarkers"];
+        /* Allow Mpeg4 64 bit formatting +4GB file sizes */
+        [preset setObject:[NSNumber numberWithInt:[fDstMp4LargeFileCheck state]] forKey:@"Mp4LargeFile"];
+        /* Mux mp4 with http optimization */
+        [preset setObject:[NSNumber numberWithInt:[fDstMp4HttpOptFileCheck state]] forKey:@"Mp4HttpOptimize"];
+        /* Add iPod uuid atom */
+        [preset setObject:[NSNumber numberWithInt:[fDstMp4iPodFileCheck state]] forKey:@"Mp4iPodCompatible"];
+        
+        /* Codecs */
+        /* Video encoder */
+        [preset setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
+        /* x264 Option String */
+        [preset setObject:[fAdvancedOptions optionsString] forKey:@"x264Option"];
+        
+        [preset setObject:[NSNumber numberWithInt:[fVidQualityMatrix selectedRow]] forKey:@"VideoQualityType"];
+        [preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+        [preset setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
+        [preset setObject:[NSNumber numberWithFloat:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+        
+        /* Video framerate */
+        if ([fVidRatePopUp indexOfSelectedItem] == 0) // Same as source is selected
+        {
+            [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+        }
+        else // we can record the actual titleOfSelectedItem
+        {
+            [preset setObject:[fVidRatePopUp titleOfSelectedItem] forKey:@"VideoFramerate"];
+        }
+        /* GrayScale */
+        [preset setObject:[NSNumber numberWithInt:[fVidGrayscaleCheck state]] forKey:@"VideoGrayScale"];
+        /* 2 Pass Encoding */
+        [preset setObject:[NSNumber numberWithInt:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
+        /* Turbo 2 pass Encoding fVidTurboPassCheck*/
+        [preset setObject:[NSNumber numberWithInt:[fVidTurboPassCheck state]] forKey:@"VideoTurboTwoPass"];
+        /*Picture Settings*/
+        hb_job_t * job = fTitle->job;
+        /* Picture Sizing */
+        /* Use Max Picture settings for whatever the dvd is.*/
+        [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
+        [preset setObject:[NSNumber numberWithInt:fTitle->job->width] forKey:@"PictureWidth"];
+        [preset setObject:[NSNumber numberWithInt:fTitle->job->height] forKey:@"PictureHeight"];
+        [preset setObject:[NSNumber numberWithInt:fTitle->job->keep_ratio] forKey:@"PictureKeepRatio"];
+        [preset setObject:[NSNumber numberWithInt:fTitle->job->pixel_ratio] forKey:@"PicturePAR"];
+        
+        /* Set crop settings here */
+        [preset setObject:[NSNumber numberWithInt:[fPictureController autoCrop]] forKey:@"PictureAutoCrop"];
+        [preset setObject:[NSNumber numberWithInt:job->crop[0]] forKey:@"PictureTopCrop"];
+        [preset setObject:[NSNumber numberWithInt:job->crop[1]] forKey:@"PictureBottomCrop"];
+        [preset setObject:[NSNumber numberWithInt:job->crop[2]] forKey:@"PictureLeftCrop"];
+        [preset setObject:[NSNumber numberWithInt:job->crop[3]] forKey:@"PictureRightCrop"];
+        
+        /* Picture Filters */
+        [preset setObject:[NSNumber numberWithInt:[fPictureController deinterlace]] forKey:@"PictureDeinterlace"];
+        [preset setObject:[NSNumber numberWithInt:[fPictureController detelecine]] forKey:@"PictureDetelecine"];
+        //[preset setObject:[NSNumber numberWithInt:[fPictureController vfr]] forKey:@"VFR"];
+        [preset setObject:[NSNumber numberWithInt:[fPictureController denoise]] forKey:@"PictureDenoise"];
+        [preset setObject:[NSNumber numberWithInt:[fPictureController deblock]] forKey:@"PictureDeblock"]; 
+        [preset setObject:[NSNumber numberWithInt:[fPictureController decomb]] forKey:@"PictureDecomb"];
+        
+        
+        /*Audio*/
+        if ([fAudLang1PopUp indexOfSelectedItem] > 0)
+        {
+            [preset setObject:[NSNumber numberWithInt:[fAudLang1PopUp indexOfSelectedItem]] forKey:@"Audio1Track"];
+            [preset setObject:[fAudLang1PopUp titleOfSelectedItem] forKey:@"Audio1TrackDescription"];
+            [preset setObject:[fAudTrack1CodecPopUp titleOfSelectedItem] forKey:@"Audio1Encoder"];
+            [preset setObject:[fAudTrack1MixPopUp titleOfSelectedItem] forKey:@"Audio1Mixdown"];
+            [preset setObject:[fAudTrack1RatePopUp titleOfSelectedItem] forKey:@"Audio1Samplerate"];
+            [preset setObject:[fAudTrack1BitratePopUp titleOfSelectedItem] forKey:@"Audio1Bitrate"];
+            [preset setObject:[NSNumber numberWithFloat:[fAudTrack1DrcSlider floatValue]] forKey:@"Audio1TrackDRCSlider"];
+        }
+        if ([fAudLang2PopUp indexOfSelectedItem] > 0)
+        {
+            [preset setObject:[NSNumber numberWithInt:[fAudLang2PopUp indexOfSelectedItem]] forKey:@"Audio2Track"];
+            [preset setObject:[fAudLang2PopUp titleOfSelectedItem] forKey:@"Audio2TrackDescription"];
+            [preset setObject:[fAudTrack2CodecPopUp titleOfSelectedItem] forKey:@"Audio2Encoder"];
+            [preset setObject:[fAudTrack2MixPopUp titleOfSelectedItem] forKey:@"Audio2Mixdown"];
+            [preset setObject:[fAudTrack2RatePopUp titleOfSelectedItem] forKey:@"Audio2Samplerate"];
+            [preset setObject:[fAudTrack2BitratePopUp titleOfSelectedItem] forKey:@"Audio2Bitrate"];
+            [preset setObject:[NSNumber numberWithFloat:[fAudTrack2DrcSlider floatValue]] forKey:@"Audio2TrackDRCSlider"];
+        }
+        if ([fAudLang3PopUp indexOfSelectedItem] > 0)
+        {
+            [preset setObject:[NSNumber numberWithInt:[fAudLang3PopUp indexOfSelectedItem]] forKey:@"Audio3Track"];
+            [preset setObject:[fAudLang3PopUp titleOfSelectedItem] forKey:@"Audio3TrackDescription"];
+            [preset setObject:[fAudTrack3CodecPopUp titleOfSelectedItem] forKey:@"Audio3Encoder"];
+            [preset setObject:[fAudTrack3MixPopUp titleOfSelectedItem] forKey:@"Audio3Mixdown"];
+            [preset setObject:[fAudTrack3RatePopUp titleOfSelectedItem] forKey:@"Audio3Samplerate"];
+            [preset setObject:[fAudTrack3BitratePopUp titleOfSelectedItem] forKey:@"Audio3Bitrate"];
+            [preset setObject:[NSNumber numberWithFloat:[fAudTrack3DrcSlider floatValue]] forKey:@"Audio3TrackDRCSlider"];
+        }
+        if ([fAudLang4PopUp indexOfSelectedItem] > 0)
+        {
+            [preset setObject:[NSNumber numberWithInt:[fAudLang4PopUp indexOfSelectedItem]] forKey:@"Audio4Track"];
+            [preset setObject:[fAudLang4PopUp titleOfSelectedItem] forKey:@"Audio4TrackDescription"];
+            [preset setObject:[fAudTrack4CodecPopUp titleOfSelectedItem] forKey:@"Audio4Encoder"];
+            [preset setObject:[fAudTrack4MixPopUp titleOfSelectedItem] forKey:@"Audio4Mixdown"];
+            [preset setObject:[fAudTrack4RatePopUp titleOfSelectedItem] forKey:@"Audio4Samplerate"];
+            [preset setObject:[fAudTrack4BitratePopUp titleOfSelectedItem] forKey:@"Audio4Bitrate"];
+            [preset setObject:[NSNumber numberWithFloat:[fAudTrack4DrcSlider floatValue]] forKey:@"Audio4TrackDRCSlider"];
+        }
+        
+        /* Subtitles*/
+        [preset setObject:[fSubPopUp titleOfSelectedItem] forKey:@"Subtitles"];
+        /* Forced Subtitles */
+        [preset setObject:[NSNumber numberWithInt:[fSubForcedCheck state]] forKey:@"SubtitlesForced"];
     }
-    
-       /* Subtitles*/
-       [preset setObject:[fSubPopUp titleOfSelectedItem] forKey:@"Subtitles"];
-    /* Forced Subtitles */
-       [preset setObject:[NSNumber numberWithInt:[fSubForcedCheck state]] forKey:@"SubtitlesForced"];
-    
     [preset autorelease];
     return preset;
-
+    
 }
 
 - (void)savePreset
@@ -5821,30 +5929,49 @@ if (item == nil)
 
 - (IBAction)deletePreset:(id)sender
 {
-    int status;
-    NSEnumerator *enumerator;
-    NSNumber *index;
-    NSMutableArray *tempArray;
-    id tempObject;
+    
     
     if ( [fPresetsOutlineView numberOfSelectedRows] == 0 )
+    {
         return;
+    }
     /* Alert user before deleting preset */
-       /* Comment out for now, tie to user pref eventually */
-
-    //NSBeep();
+       int status;
     status = NSRunAlertPanel(@"Warning!", @"Are you sure that you want to delete the selected preset?", @"OK", @"Cancel", nil);
     
-    if ( status == NSAlertDefaultReturn ) {
-        enumerator = [fPresetsOutlineView selectedRowEnumerator];
+    if ( status == NSAlertDefaultReturn ) 
+    {
+        int presetToModLevel = [fPresetsOutlineView levelForItem: [fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]]];
+        NSDictionary *presetToMod = [fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]];
+        NSDictionary *presetToModParent = [fPresetsOutlineView parentForItem: presetToMod];
+        
+        NSEnumerator *enumerator;
+        NSMutableArray *presetsArrayToMod;
+        NSMutableArray *tempArray;
+        id tempObject;
+        /* If we are a root level preset, we are modding the UserPresets array */
+        if (presetToModLevel == 0)
+        {
+            presetsArrayToMod = UserPresets;
+        }
+        else // We have a parent preset, so we modify the chidren array object for key
+        {
+            presetsArrayToMod = [presetToModParent objectForKey:@"ChildrenArray"]; 
+        }
+        
+        enumerator = [presetsArrayToMod objectEnumerator];
         tempArray = [NSMutableArray array];
         
-        while ( (index = [enumerator nextObject]) ) {
-            tempObject = [UserPresets objectAtIndex:[index intValue]];
-            [tempArray addObject:tempObject];
+        while (tempObject = [enumerator nextObject]) 
+        {
+            NSDictionary *thisPresetDict = tempObject;
+            if (thisPresetDict == presetToMod)
+            {
+                [tempArray addObject:tempObject];
+            }
         }
         
-        [UserPresets removeObjectsInArray:tempArray];
+        [presetsArrayToMod removeObjectsInArray:tempArray];
         [fPresetsOutlineView reloadData];
         [self savePreset];   
     }
@@ -5855,72 +5982,224 @@ if (item == nil)
 
 - (IBAction)getDefaultPresets:(id)sender
 {
-       int i = 0;
+       presetHbDefault = nil;
+    presetUserDefault = nil;
+    presetUserDefaultParent = nil;
+    presetUserDefaultParentParent = nil;
+    NSMutableDictionary *presetHbDefaultParent = nil;
+    NSMutableDictionary *presetHbDefaultParentParent = nil;
+    
+    int i = 0;
+    BOOL userDefaultFound = NO;
     presetCurrentBuiltInCount = 0;
+    /* First we iterate through the root UserPresets array to check for defaults */
     NSEnumerator *enumerator = [UserPresets objectEnumerator];
        id tempObject;
        while (tempObject = [enumerator nextObject])
        {
-               NSDictionary *thisPresetDict = tempObject;
+               NSMutableDictionary *thisPresetDict = tempObject;
                if ([[thisPresetDict objectForKey:@"Default"] intValue] == 1) // 1 is HB default
                {
-                       presetHbDefault = i;    
+                       presetHbDefault = thisPresetDict;       
                }
                if ([[thisPresetDict objectForKey:@"Default"] intValue] == 2) // 2 is User specified default
                {
-                       presetUserDefault = i;  
-               }
+                       presetUserDefault = thisPresetDict;
+            userDefaultFound = YES;
+        }
         if ([[thisPresetDict objectForKey:@"Type"] intValue] == 0) // Type 0 is a built in preset              
         {
                        presetCurrentBuiltInCount++; // <--increment the current number of built in presets     
                }
                i++;
+        
+        /* if we run into a folder, go to level 1 and iterate through the children arrays for the default */
+        if ([thisPresetDict objectForKey:@"ChildrenArray"])
+        {
+            NSMutableDictionary *thisPresetDictParent = thisPresetDict;
+            NSEnumerator *enumerator = [[thisPresetDict objectForKey:@"ChildrenArray"] objectEnumerator];
+            id tempObject;
+            while (tempObject = [enumerator nextObject])
+            {
+                NSMutableDictionary *thisPresetDict = tempObject;
+                if ([[thisPresetDict objectForKey:@"Default"] intValue] == 1) // 1 is HB default
+                {
+                    presetHbDefault = thisPresetDict;
+                    presetHbDefaultParent = thisPresetDictParent;
+                }
+                if ([[thisPresetDict objectForKey:@"Default"] intValue] == 2) // 2 is User specified default
+                {
+                    presetUserDefault = thisPresetDict;
+                    presetUserDefaultParent = thisPresetDictParent;
+                    userDefaultFound = YES;
+                }
+                
+                /* if we run into a folder, go to level 2 and iterate through the children arrays for the default */
+                if ([thisPresetDict objectForKey:@"ChildrenArray"])
+                {
+                    NSMutableDictionary *thisPresetDictParentParent = thisPresetDict;
+                    NSEnumerator *enumerator = [[thisPresetDict objectForKey:@"ChildrenArray"] objectEnumerator];
+                    id tempObject;
+                    while (tempObject = [enumerator nextObject])
+                    {
+                        NSMutableDictionary *thisPresetDict = tempObject;
+                        if ([[thisPresetDict objectForKey:@"Default"] intValue] == 1) // 1 is HB default
+                        {
+                            presetHbDefault = thisPresetDict;
+                            presetHbDefaultParent = thisPresetDictParent;
+                            presetHbDefaultParentParent = thisPresetDictParentParent;  
+                        }
+                        if ([[thisPresetDict objectForKey:@"Default"] intValue] == 2) // 2 is User specified default
+                        {
+                            presetUserDefault = thisPresetDict;
+                            presetUserDefaultParent = thisPresetDictParent;
+                            presetUserDefaultParentParent = thisPresetDictParentParent;
+                            userDefaultFound = YES;    
+                        }
+                        
+                    }
+                }
+            }
+        }
+        
        }
+    /* check to see if a user specified preset was found, if not then assign the parents for
+     * the presetHbDefault so that we can open the parents for the nested presets
+     */
+    if (userDefaultFound == NO)
+    {
+        presetUserDefaultParent = presetHbDefaultParent;
+        presetUserDefaultParentParent = presetHbDefaultParentParent;
+    }
 }
 
 - (IBAction)setDefaultPreset:(id)sender
 {
+/* We need to determine if the item is a folder */
+   if ([[[fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]] objectForKey:@"Folder"] intValue] == 1)
+   {
+   return;
+   }
+
     int i = 0;
     NSEnumerator *enumerator = [UserPresets objectEnumerator];
        id tempObject;
        /* First make sure the old user specified default preset is removed */
-       while (tempObject = [enumerator nextObject])
+    while (tempObject = [enumerator nextObject])
        {
-               /* make sure we are not removing the default HB preset */
-               if ([[[UserPresets objectAtIndex:i] objectForKey:@"Default"] intValue] != 1) // 1 is HB default
+               NSMutableDictionary *thisPresetDict = tempObject;
+               if ([[tempObject objectForKey:@"Default"] intValue] != 1) // if not the default HB Preset, set to 0
                {
-                       [[UserPresets objectAtIndex:i] setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+                       [[UserPresets objectAtIndex:i] setObject:[NSNumber numberWithInt:0] forKey:@"Default"]; 
                }
-               i++;
-       }
-       /* Second, go ahead and set the appropriate user specfied preset */
-       /* we get the chosen preset from the UserPresets array */
-       if ([[[UserPresets objectAtIndex:[fPresetsOutlineView selectedRow]] objectForKey:@"Default"] intValue] != 1) // 1 is HB default
-       {
-               [[UserPresets objectAtIndex:[fPresetsOutlineView selectedRow]] setObject:[NSNumber numberWithInt:2] forKey:@"Default"];
+               
+               /* if we run into a folder, go to level 1 and iterate through the children arrays for the default */
+        if ([thisPresetDict objectForKey:@"ChildrenArray"])
+        {
+            NSEnumerator *enumerator = [[thisPresetDict objectForKey:@"ChildrenArray"] objectEnumerator];
+            id tempObject;
+            int ii = 0;
+            while (tempObject = [enumerator nextObject])
+            {
+                NSMutableDictionary *thisPresetDict1 = tempObject;
+                if ([[tempObject objectForKey:@"Default"] intValue] != 1) // if not the default HB Preset, set to 0
+                {
+                    [[[thisPresetDict objectForKey:@"ChildrenArray"] objectAtIndex:ii] setObject:[NSNumber numberWithInt:0] forKey:@"Default"];        
+                }
+                /* if we run into a folder, go to level 2 and iterate through the children arrays for the default */
+                if ([thisPresetDict1 objectForKey:@"ChildrenArray"])
+                {
+                    NSEnumerator *enumerator = [[thisPresetDict1 objectForKey:@"ChildrenArray"] objectEnumerator];
+                    id tempObject;
+                    int iii = 0;
+                    while (tempObject = [enumerator nextObject])
+                    {
+                        if ([[tempObject objectForKey:@"Default"] intValue] != 1) // if not the default HB Preset, set to 0
+                        {
+                            [[[thisPresetDict1 objectForKey:@"ChildrenArray"] objectAtIndex:iii] setObject:[NSNumber numberWithInt:0] forKey:@"Default"];      
+                        }
+                        iii++;
+                    }
+                }
+                ii++;
+            }
+            
+        }
+        i++; 
        }
-       /*FIX ME: I think we now need to use the items not rows in NSOutlineView */
-    presetUserDefault = [fPresetsOutlineView selectedRow];
-       
-       /* We save all of the preset data here */
+    
+    
+    int presetToModLevel = [fPresetsOutlineView levelForItem: [fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]]];
+    NSDictionary *presetToMod = [fPresetsOutlineView itemAtRow:[fPresetsOutlineView selectedRow]];
+    NSDictionary *presetToModParent = [fPresetsOutlineView parentForItem: presetToMod];
+    
+    
+    NSMutableArray *presetsArrayToMod;
+    NSMutableArray *tempArray;
+    
+    /* If we are a root level preset, we are modding the UserPresets array */
+    if (presetToModLevel == 0)
+    {
+        presetsArrayToMod = UserPresets;
+    }
+    else // We have a parent preset, so we modify the chidren array object for key
+    {
+        presetsArrayToMod = [presetToModParent objectForKey:@"ChildrenArray"]; 
+    }
+    
+    enumerator = [presetsArrayToMod objectEnumerator];
+    tempArray = [NSMutableArray array];
+    int iiii = 0;
+    while (tempObject = [enumerator nextObject]) 
+    {
+        NSDictionary *thisPresetDict = tempObject;
+        if (thisPresetDict == presetToMod)
+        {
+            if ([[tempObject objectForKey:@"Default"] intValue] != 1) // if not the default HB Preset, set to 2
+            {
+                [[presetsArrayToMod objectAtIndex:iiii] setObject:[NSNumber numberWithInt:2] forKey:@"Default"];       
+            }
+        }
+     iiii++;
+     }
+    
+    
+    /* We save all of the preset data here */
     [self savePreset];
-       /* We Reload the New Table data for presets */
+    /* We Reload the New Table data for presets */
     [fPresetsOutlineView reloadData];
 }
 
 - (IBAction)selectDefaultPreset:(id)sender
 {
-       /* if there is a user specified default, we use it */
+       NSMutableDictionary *presetToMod;
+    /* if there is a user specified default, we use it */
        if (presetUserDefault)
        {
-       [fPresetsOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetUserDefault] byExtendingSelection:NO];
-       [self selectPreset:nil];
-       }
+        presetToMod = presetUserDefault;
+    }
        else if (presetHbDefault) //else we use the built in default presetHbDefault
        {
-       [fPresetsOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:presetHbDefault] byExtendingSelection:NO];
-       [self selectPreset:nil];
+        presetToMod = presetHbDefault;
        }
+    else
+    {
+    return;
+    }
+    
+    if (presetUserDefaultParent != nil)
+    {
+        [fPresetsOutlineView expandItem:presetUserDefaultParent];
+        
+    }
+    if (presetUserDefaultParentParent != nil)
+    {
+        [fPresetsOutlineView expandItem:presetUserDefaultParentParent];
+        
+    }
+    
+    [fPresetsOutlineView selectRowIndexes:[NSIndexSet indexSetWithIndex:[fPresetsOutlineView rowForItem: presetToMod]] byExtendingSelection:NO];
+       [self selectPreset:nil];
 }
 
 
@@ -5988,7 +6267,7 @@ if (item == nil)
 
     // By default, NSTableView only drags an image of the first column. Change this to
     // drag an image of the queue's icon and PresetName columns.
-    NSArray * cols = [NSArray arrayWithObjects: [self tableColumnWithIdentifier:@"icon"], [self tableColumnWithIdentifier:@"PresetName"], nil];
+    NSArray * cols = [NSArray arrayWithObjects: [self tableColumnWithIdentifier:@"PresetName"], nil];
     return [super dragImageForRowsWithIndexes:dragRows tableColumns:cols event:dragEvent offset:dragImageOffset];
 }
 
index d1c7464..f40841a 100644 (file)
@@ -8,7 +8,7 @@
                <string key="IBDocument.HIToolboxVersion">352.00</string>
                <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
                        <bool key="EncodedWithXMLCoder">YES</bool>
-                       <integer value="2"/>
+                       <integer value="1868"/>
                </object>
                <object class="NSArray" key="IBDocument.PluginDependencies">
                        <bool key="EncodedWithXMLCoder">YES</bool>
@@ -40,7 +40,7 @@
                                <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
                                <string key="NSWindowContentMinSize">{213, 107}</string>
                                <object class="NSView" key="NSWindowView" id="168918359">
-                                       <reference key="NSNextResponder"/>
+                                       <nil key="NSNextResponder"/>
                                        <int key="NSvFlags">256</int>
                                        <object class="NSMutableArray" key="NSSubviews">
                                                <bool key="EncodedWithXMLCoder">YES</bool>
                                                </object>
                                        </object>
                                        <string key="NSFrameSize">{760, 550}</string>
-                                       <reference key="NSSuperview"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
                                <string key="NSMinSize">{213, 129}</string>
                                                                                </object>
                                                                                <object class="NSMutableArray" key="NSTableColumns">
                                                                                        <bool key="EncodedWithXMLCoder">YES</bool>
-                                                                                       <object class="NSTableColumn" id="353294161">
-                                                                                               <string key="NSIdentifier">icon</string>
-                                                                                               <double key="NSWidth">1.600000e+01</double>
-                                                                                               <double key="NSMinWidth">1.600000e+01</double>
-                                                                                               <double key="NSMaxWidth">1.000000e+03</double>
-                                                                                               <object class="NSTableHeaderCell" key="NSHeaderCell">
-                                                                                                       <int key="NSCellFlags">75628032</int>
-                                                                                                       <int key="NSCellFlags2">0</int>
-                                                                                                       <string key="NSContents"/>
-                                                                                                       <reference key="NSSupport" ref="26"/>
-                                                                                                       <object class="NSColor" key="NSBackgroundColor" id="68749412">
-                                                                                                               <int key="NSColorSpace">3</int>
-                                                                                                               <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
-                                                                                                       </object>
-                                                                                                       <reference key="NSTextColor" ref="188451177"/>
-                                                                                               </object>
-                                                                                               <object class="NSTextFieldCell" key="NSDataCell" id="952769800">
-                                                                                                       <int key="NSCellFlags">337772096</int>
-                                                                                                       <int key="NSCellFlags2">2048</int>
-                                                                                                       <string key="NSContents">Text Cell</string>
-                                                                                                       <reference key="NSSupport" ref="995413175"/>
-                                                                                                       <reference key="NSControlView" ref="807972370"/>
-                                                                                                       <reference key="NSBackgroundColor" ref="355843302"/>
-                                                                                                       <reference key="NSTextColor" ref="701609070"/>
-                                                                                               </object>
-                                                                                               <int key="NSResizingMask">1</int>
-                                                                                               <bool key="NSIsResizeable">YES</bool>
-                                                                                               <bool key="NSIsEditable">YES</bool>
-                                                                                               <reference key="NSTableView" ref="807972370"/>
-                                                                                       </object>
                                                                                        <object class="NSTableColumn" id="658438499">
                                                                                                <string key="NSIdentifier">PresetName</string>
-                                                                                               <double key="NSWidth">2.250000e+02</double>
+                                                                                               <double key="NSWidth">2.440000e+02</double>
                                                                                                <double key="NSMinWidth">4.000000e+01</double>
                                                                                                <double key="NSMaxWidth">1.000000e+03</double>
                                                                                                <object class="NSTableHeaderCell" key="NSHeaderCell">
                                                                                                        <int key="NSCellFlags2">0</int>
                                                                                                        <string key="NSContents">Presets</string>
                                                                                                        <reference key="NSSupport" ref="26"/>
-                                                                                                       <reference key="NSBackgroundColor" ref="68749412"/>
+                                                                                                       <object class="NSColor" key="NSBackgroundColor">
+                                                                                                               <int key="NSColorSpace">3</int>
+                                                                                                               <bytes key="NSWhite">MC4zMzMzMzI5OQA</bytes>
+                                                                                                       </object>
                                                                                                        <reference key="NSTextColor" ref="188451177"/>
                                                                                                </object>
                                                                                                <object class="NSTextFieldCell" key="NSDataCell" id="384895213">
                                                                </object>
                                                                <string key="NSFrame">{{1, 1}, {247, 506}}</string>
                                                                <reference key="NSSuperview" ref="33643505"/>
+                                                               <reference key="NSNextKeyView" ref="807972370"/>
                                                                <reference key="NSDocView" ref="807972370"/>
                                                                <reference key="NSBGColor" ref="355843302"/>
                                                                <int key="NScvFlags">4</int>
                                                </object>
                                                <string key="NSFrame">{{4, 31}, {260, 508}}</string>
                                                <reference key="NSSuperview" ref="621751818"/>
+                                               <reference key="NSNextKeyView" ref="421228634"/>
                                                <int key="NSsFlags">18</int>
                                                <reference key="NSVScroller" ref="475123229"/>
                                                <reference key="NSHScroller" ref="573337548"/>
                                <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
                                <string key="NSWindowContentMinSize">{338, 232}</string>
                                <object class="NSView" key="NSWindowView" id="69290042">
-                                       <nil key="NSNextResponder"/>
+                                       <reference key="NSNextResponder"/>
                                        <int key="NSvFlags">256</int>
                                        <object class="NSMutableArray" key="NSSubviews">
                                                <bool key="EncodedWithXMLCoder">YES</bool>
                                                <object class="NSPopUpButton" id="167356719">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">266</int>
-                                                       <string key="NSFrame">{{166, 208}, {155, 22}}</string>
+                                                       <string key="NSFrame">{{166, 183}, {155, 22}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSPopUpButtonCell" key="NSCell" id="17688962">
                                                <object class="NSTextField" id="340554114">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{17, 242}, {91, 14}}</string>
+                                                       <string key="NSFrame">{{17, 217}, {91, 14}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="70981869">
                                                <object class="NSTextField" id="384547934">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{17, 135}, {114, 14}}</string>
+                                                       <string key="NSFrame">{{17, 100}, {114, 14}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="207651610">
                                                <object class="NSTextField" id="511645357">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">274</int>
-                                                       <string key="NSFrame">{{20, 51}, {298, 76}}</string>
+                                                       <string key="NSFrame">{{20, 51}, {298, 41}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="855042909">
                                                <object class="NSTextField" id="31472093">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{17, 212}, {147, 14}}</string>
+                                                       <string key="NSFrame">{{17, 187}, {147, 14}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="31665321">
                                                <object class="NSButton" id="1024752086">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{166, 182}, {24, 18}}</string>
+                                                       <string key="NSFrame">{{166, 157}, {24, 18}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSButtonCell" key="NSCell" id="625635488">
                                                                <int key="NSPeriodicInterval">25</int>
                                                        </object>
                                                </object>
+                                               <object class="NSButton" id="786415813">
+                                                       <reference key="NSNextResponder" ref="69290042"/>
+                                                       <int key="NSvFlags">-2147483380</int>
+                                                       <string key="NSFrame">{{17, 240}, {303, 18}}</string>
+                                                       <reference key="NSSuperview" ref="69290042"/>
+                                                       <bool key="NSEnabled">YES</bool>
+                                                       <object class="NSButtonCell" key="NSCell" id="977106207">
+                                                               <int key="NSCellFlags">67239424</int>
+                                                               <int key="NSCellFlags2">131072</int>
+                                                               <string key="NSContents">Preset Folder ( if checked disregard below )</string>
+                                                               <reference key="NSSupport" ref="26"/>
+                                                               <reference key="NSControlView" ref="786415813"/>
+                                                               <int key="NSButtonFlags">1211912703</int>
+                                                               <int key="NSButtonFlags2">2</int>
+                                                               <reference key="NSNormalImage" ref="887198214"/>
+                                                               <reference key="NSAlternateImage" ref="624832340"/>
+                                                               <string key="NSAlternateContents"/>
+                                                               <string key="NSKeyEquivalent"/>
+                                                               <int key="NSPeriodicDelay">200</int>
+                                                               <int key="NSPeriodicInterval">25</int>
+                                                       </object>
+                                               </object>
                                                <object class="NSBox" id="5085381">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{113, 245}, {205, 5}}</string>
+                                                       <string key="NSFrame">{{113, 220}, {205, 5}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <string key="NSOffsets">{0, 0}</string>
                                                        <object class="NSTextFieldCell" key="NSTitleCell">
                                                <object class="NSBox" id="988499754">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{20, 155}, {298, 5}}</string>
+                                                       <string key="NSFrame">{{20, 130}, {298, 5}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <string key="NSOffsets">{0, 0}</string>
                                                        <object class="NSTextFieldCell" key="NSTitleCell">
                                                <object class="NSTextField" id="59653352">
                                                        <reference key="NSNextResponder" ref="69290042"/>
                                                        <int key="NSvFlags">268</int>
-                                                       <string key="NSFrame">{{17, 184}, {147, 15}}</string>
+                                                       <string key="NSFrame">{{17, 159}, {147, 15}}</string>
                                                        <reference key="NSSuperview" ref="69290042"/>
                                                        <bool key="NSEnabled">YES</bool>
                                                        <object class="NSTextFieldCell" key="NSCell" id="155469085">
                                                </object>
                                        </object>
                                        <string key="NSFrameSize">{338, 318}</string>
+                                       <reference key="NSSuperview"/>
                                </object>
                                <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
                                <string key="NSMinSize">{338, 254}</string>
                                        </object>
                                        <int key="connectionID">5152</int>
                                </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">fPresetNewFolderCheck</string>
+                                               <reference key="source" ref="2258723"/>
+                                               <reference key="destination" ref="786415813"/>
+                                       </object>
+                                       <int key="connectionID">5155</int>
+                               </object>
                        </object>
                        <object class="IBMutableOrderedSet" key="objectRecords">
                                <object class="NSArray" key="orderedObjects">
                                                <object class="NSMutableArray" key="children">
                                                        <bool key="EncodedWithXMLCoder">YES</bool>
                                                        <reference ref="658438499"/>
-                                                       <reference ref="353294161"/>
                                                </object>
                                                <reference key="parent" ref="33643505"/>
                                        </object>
                                                <reference key="parent" ref="658438499"/>
                                        </object>
                                        <object class="IBObjectRecord">
-                                               <int key="objectID">4184</int>
-                                               <reference key="object" ref="353294161"/>
-                                               <object class="NSMutableArray" key="children">
-                                                       <bool key="EncodedWithXMLCoder">YES</bool>
-                                                       <reference ref="952769800"/>
-                                               </object>
-                                               <reference key="parent" ref="807972370"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
-                                               <int key="objectID">4185</int>
-                                               <reference key="object" ref="952769800"/>
-                                               <reference key="parent" ref="353294161"/>
-                                       </object>
-                                       <object class="IBObjectRecord">
                                                <int key="objectID">4317</int>
                                                <reference key="object" ref="241719587"/>
                                                <object class="NSMutableArray" key="children">
                                                        <reference ref="167356719"/>
                                                        <reference ref="343391844"/>
                                                        <reference ref="340554114"/>
-                                                       <reference ref="384547934"/>
                                                        <reference ref="511645357"/>
                                                        <reference ref="31472093"/>
                                                        <reference ref="1024752086"/>
                                                        <reference ref="5085381"/>
                                                        <reference ref="988499754"/>
                                                        <reference ref="59653352"/>
+                                                       <reference ref="384547934"/>
+                                                       <reference ref="786415813"/>
                                                </object>
                                                <reference key="parent" ref="888992113"/>
                                        </object>
                                                <reference key="object" ref="583192244"/>
                                                <reference key="parent" ref="717227898"/>
                                        </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">5153</int>
+                                               <reference key="object" ref="786415813"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="977106207"/>
+                                               </object>
+                                               <reference key="parent" ref="69290042"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">5154</int>
+                                               <reference key="object" ref="977106207"/>
+                                               <reference key="parent" ref="786415813"/>
+                                       </object>
                                </object>
                        </object>
                        <object class="NSMutableDictionary" key="flattenedProperties">
                                        <string>4182.ImportedFromIB2</string>
                                        <string>4183.IBPluginDependency</string>
                                        <string>4183.ImportedFromIB2</string>
-                                       <string>4184.IBPluginDependency</string>
-                                       <string>4184.ImportedFromIB2</string>
-                                       <string>4185.IBPluginDependency</string>
-                                       <string>4185.ImportedFromIB2</string>
                                        <string>4186.IBPluginDependency</string>
                                        <string>4186.ImportedFromIB2</string>
                                        <string>4317.IBPluginDependency</string>
                                        <string>5133.IBPluginDependency</string>
                                        <string>5134.IBPluginDependency</string>
                                        <string>5135.IBPluginDependency</string>
+                                       <string>5153.IBPluginDependency</string>
+                                       <string>5153.ImportedFromIB2</string>
                                        <string>56.IBPluginDependency</string>
                                        <string>56.ImportedFromIB2</string>
                                        <string>57.IBPluginDependency</string>
                                        <integer value="0" id="8"/>
                                        <reference ref="9"/>
                                        <string>{{720, 261}, {270, 550}}</string>
-                                       <string>{{122, 631}, {338, 318}}</string>
+                                       <string>{{275, 198}, {338, 318}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <string>{{122, 631}, {338, 318}}</string>
+                                       <string>{{275, 198}, {338, 318}}</string>
                                        <reference ref="9"/>
                                        <string>{{421, 536}, {338, 318}}</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <reference ref="9"/>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-                                       <reference ref="9"/>
-                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <string>{{57, 766}, {300, 233}}</string>
                                        <reference ref="9"/>
                                        <string>{{57, 766}, {300, 233}}</string>
                                        <reference ref="9"/>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <reference ref="9"/>
                                        <string>{{75, 683}, {235, 153}}</string>
                                        <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
                                        <reference ref="9"/>
                                </object>
                        </object>
                        <nil key="sourceID"/>
-                       <int key="maxID">5152</int>
+                       <int key="maxID">5155</int>
                </object>
                <object class="IBClassDescriber" key="IBDocument.Classes">
                        <object class="NSMutableArray" key="referencedPartialClassDescriptions">
                                                        <string>fPictureButton</string>
                                                        <string>fPresetDrawer</string>
                                                        <string>fPresetNewDesc</string>
+                                                       <string>fPresetNewFolderCheck</string>
                                                        <string>fPresetNewName</string>
                                                        <string>fPresetNewPicFiltersCheck</string>
                                                        <string>fPresetNewPicSettingsPopUp</string>
                                                        <string>NSButton</string>
                                                        <string>NSDrawer</string>
                                                        <string>NSTextField</string>
+                                                       <string>NSButton</string>
                                                        <string>NSTextField</string>
                                                        <string>NSButton</string>
                                                        <string>NSPopUpButton</string>
index e3b872c..e91041b 100644 (file)
 - (NSMutableArray *) generateBuiltinPresets: (NSMutableArray *) UserPresets;
 
 /* Built-In Preset Dictionaries (one for each built in preset) */
+- (NSDictionary *)createApplePresetFolder;
+- (NSDictionary *)createAppleIpodFamilyPresetFolder;
+- (NSDictionary *)createBasicPresetFolder;
+- (NSDictionary *)createGamingConsolesPresetFolder;
+- (NSDictionary *)createHiProfilePresetFolder;
+
 - (NSDictionary *)create360Preset;
 - (NSDictionary *)createAnimationPreset;
 - (NSDictionary *)createAppleTVPreset;
-- (NSDictionary *)createBedlamPreset;
-- (NSDictionary *)createBlindPreset;
-- (NSDictionary *)createBrokePreset;
+- (NSDictionary *)createAppleUniversalPreset;
 - (NSDictionary *)createClassicPreset;
 - (NSDictionary *)createCRFPreset;
-- (NSDictionary *)createDeuxSixQuatrePreset;
 - (NSDictionary *)createFilmPreset;
 - (NSDictionary *)createiPhonePreset;
 - (NSDictionary *)createIpodHighPreset;
index 893112b..a1fac57 100644 (file)
 {
     /* We receive the user presets array of dictionaries from controller.mm */
     /* We re-create new built in presets programmatically and add them to our presets array */
-    [UserPresets addObject:[self createAnimationPreset]];
-    [UserPresets addObject:[self createAppleTVPreset]];
-    [UserPresets addObject:[self createBedlamPreset]];
-    [UserPresets addObject:[self createBlindPreset]];
-    [UserPresets addObject:[self createBrokePreset]];
-    [UserPresets addObject:[self createClassicPreset]];
-    [UserPresets addObject:[self createCRFPreset]];
-    [UserPresets addObject:[self createDeuxSixQuatrePreset]];
-    [UserPresets addObject:[self createFilmPreset]];
-    [UserPresets addObject:[self createiPhonePreset]];
-    [UserPresets addObject:[self createIpodHighPreset]];
-    [UserPresets addObject:[self createIpodLowPreset]];
-    [UserPresets addObject:[self createNormalPreset]];
-    [UserPresets addObject:[self createPSPPreset]];
-    [UserPresets addObject:[self createPSThreePreset]];
-    [UserPresets addObject:[self createQuickTimePreset]];
-    [UserPresets addObject:[self createTelevisionPreset]];
-    [UserPresets addObject:[self create360Preset]];
+    
+    /* Note: the built in presets will *not* sort themselves alphabetically, so they will
+     * appear in the order you create them
+     */
+    /* Built in preset folders at the root of the hierarchy */
+    [UserPresets addObject:[self createApplePresetFolder]];
+    [UserPresets addObject:[self createBasicPresetFolder]];
+    [UserPresets addObject:[self createHiProfilePresetFolder]];
+    [UserPresets addObject:[self createGamingConsolesPresetFolder]];
+    
+    /* Independent presets at the root hierarchy level would go here */
+    
     /* return the newly regenerated preset array back to Controller.mm */
     return UserPresets;
 }
 
 #pragma mark -
 
-#pragma mark Built In Preset Definitions
-
-/* These NSDictionary Buit-In Preset definitions contain all of the settings for one built in preset */
-/* Note: For now, you can no longer have reference to any main window fields in your key values */
+#pragma mark Built In Preset Folder Definitions
 
-- (NSDictionary *)create360Preset
+- (NSDictionary *)createApplePresetFolder
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+/*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
+
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"Xbox 360" forKey:@"PresetName"];
+    [preset setObject:@"Apple" forKey:@"PresetName"];
 
     /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
 
     /*Set whether or not this is default, at creation set to 0*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
-    /*Get the whether or not to apply pic settings in the AddPresetPanel*/
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
-
-    /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's settings for the Microsoft Xbox 360." forKey:@"PresetDescription"];
-
-    /* File Format */
-    [preset setObject:@"MP4 file" forKey:@"FileFormat"];
-
-    /* Chapter Markers*/
-     [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
-
-    /* Video encoder */
-    [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
     
-    /* x264 Option String */
-    [preset setObject:@"level=40:ref=2:mixed-refs:bframes=3:weightb:subme=7:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1" forKey:@"x264Option"];
+    /* Lets initalize the child array of dictionaries for folders, this
+     is an array of dictionaries much like the root level of presets and
+     may contain folders and presets alike, etc.*/
+    NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+    /* we actually call the methods for the nests here */
+    [childrenArray addObject:[self createAppleUniversalPreset]];
+    [childrenArray addObject:[self createAppleTVPreset]];
+    [childrenArray addObject:[self createAppleIpodFamilyPresetFolder]];
+    [childrenArray addObject:[self createQuickTimePreset]];
+    [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
+    
+    [childrenArray autorelease];
 
-    /* Video quality */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
-    [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
 
-    /* Video framerate */
-    [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
 
-    /* GrayScale */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+    [preset autorelease];
+    return preset;
+}
 
-    /* 2 Pass Encoding */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
+- (NSDictionary *)createAppleIpodFamilyPresetFolder
+{
+    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+/*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
 
-    /*Picture Settings*/
-    /* Use Max Picture settings for whatever the dvd is.*/
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
 
-    /* Explicitly set the filters for built-in presets */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
+    /* Get the New Preset Name from the field in the AddPresetPanel */
+    [preset setObject:@"iPod & iPhone" forKey:@"PresetName"];
 
-    /* Set crop settings here */
-    /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+    /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
 
-    /* Audio - Is done on a track by track basis, ONLY specifiy the tracks we want set as any track
-     * not listed will be set to "None" and not encoded */
+    /*Set whether or not this is default, at creation set to 0*/
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
     
-    /* Track 1 */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio1Track"];
-    [preset setObject:@"AAC (faac)" forKey:@"Audio1Encoder"];
-    [preset setObject:@"Dolby Pro Logic II" forKey:@"Audio1Mixdown"];
-    [preset setObject:@"48" forKey:@"Audio1Samplerate"];
-    [preset setObject:@"160" forKey:@"Audio1Bitrate"];
-    [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
+    /* Lets initalize the child array of dictionaries for folders, this
+     is an array of dictionaries much like the root level of presets and
+     may contain folders and presets alike, etc.*/
+    NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+    /* we actually call the methods for the nests here */
+    [childrenArray addObject:[self createIpodLowPreset]];
+    [childrenArray addObject:[self createiPhonePreset]];
+    [childrenArray addObject:[self createIpodHighPreset]];
     
-    /* Subtitles*/
-    [preset setObject:@"None" forKey:@"Subtitles"];
+    [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
+    
+    [childrenArray autorelease];
+
+
 
     [preset autorelease];
     return preset;
 }
 
-- (NSDictionary *)createAnimationPreset
+- (NSDictionary *)createGamingConsolesPresetFolder
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+/*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
+
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"Animation" forKey:@"PresetName"];
+    [preset setObject:@"Gaming Consoles" forKey:@"PresetName"];
 
-    /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+    /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
 
     /*Set whether or not this is default, at creation set to 0*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+    
+    /* Lets initalize the child array of dictionaries for folders, this
+     is an array of dictionaries much like the root level of presets and
+     may contain folders and presets alike, etc.*/
+    NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+    /* we actually call the methods for the nests here */
+    [childrenArray addObject:[self createPSPPreset]];
+    [childrenArray addObject:[self createPSThreePreset]];
+    [childrenArray addObject:[self create360Preset]];
+    [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
+    
+    [childrenArray autorelease];
 
-    /*Get the whether or not to apply pic settings in the AddPresetPanel*/
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
-    /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's settings for cartoons, anime, and CGI." forKey:@"PresetDescription"];
 
-    /* File Format */
-    [preset setObject:@"MKV file" forKey:@"FileFormat"];
+    [preset autorelease];
+    return preset;
+}
 
-    /* Chapter Markers*/
-     [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
 
-    /* Video encoder */
-    [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
+- (NSDictionary *)createBasicPresetFolder
+{
+    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+/*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
 
-    /* x264 Option String */
-    [preset setObject:@"ref=5:mixed-refs:bframes=6:subme=7:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2" forKey:@"x264Option"];
 
-    /* Video quality */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
-    [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
+    /* Get the New Preset Name from the field in the AddPresetPanel */
+    [preset setObject:@"Basic" forKey:@"PresetName"];
 
-    /* Video framerate */
-    [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
+    /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
 
-    /* GrayScale */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
+    /*Set whether or not this is default, at creation set to 0*/
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
+    
+    /* Lets initalize the child array of dictionaries for folders, this
+     is an array of dictionaries much like the root level of presets and
+     may contain folders and presets alike, etc.*/
+    NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+    /* we actually call the methods for the nests here */
+    [childrenArray addObject:[self createNormalPreset]];
+    [childrenArray addObject:[self createClassicPreset]];
+    [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
+    
+    [childrenArray autorelease];
 
-    /* 2 Pass Encoding */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
 
-    /*Picture Settings*/
-    /* Basic Picture Settings */
-    /* Use Max Picture settings for whatever the dvd is.*/
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
 
-    /* Filters. For animation, use slower deinterlacing. */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
-    [preset setObject:[NSNumber numberWithInt:3] forKey:@"PictureDeinterlace"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
+    [preset autorelease];
+    return preset;
+}
 
-    /* Set crop settings here */
-    /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
+- (NSDictionary *)createHiProfilePresetFolder
+{
+    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+/*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: YES] forKey:@"Folder"];
 
-    /* Audio - Is done on a track by track basis, ONLY specifiy the tracks we want set as any track
-     * not listed will be set to "None" and not encoded */
+
+    /* Get the New Preset Name from the field in the AddPresetPanel */
+    [preset setObject:@"High Profile" forKey:@"PresetName"];
+
+    /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
+
+    /*Set whether or not this is default, at creation set to 0*/
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
     
-    /* Track 1 */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio1Track"];
-    [preset setObject:@"AAC (faac)" forKey:@"Audio1Encoder"];
-    [preset setObject:@"Dolby Pro Logic II" forKey:@"Audio1Mixdown"];
-    [preset setObject:@"Auto" forKey:@"Audio1Samplerate"];
-    [preset setObject:@"160" forKey:@"Audio1Bitrate"];
-    [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
+    /* Lets initalize the child array of dictionaries for folders, this
+     is an array of dictionaries much like the root level of presets and
+     may contain folders and presets alike, etc.*/
+    NSMutableArray *childrenArray = [[NSMutableArray alloc] init];
+    /* we actually call the methods for the nests here */
+    [childrenArray addObject:[self createAnimationPreset]];
+    [childrenArray addObject:[self createCRFPreset]];
+    [childrenArray addObject:[self createFilmPreset]];
+    [childrenArray addObject:[self createTelevisionPreset]];
+    [preset setObject:[NSMutableArray arrayWithArray: childrenArray] forKey:@"ChildrenArray"];
     
-    /* Subtitles*/
-    [preset setObject:@"None" forKey:@"Subtitles"];
-
+    [childrenArray autorelease];
     [preset autorelease];
     return preset;
 }
 
-- (NSDictionary *)createAppleTVPreset
+
+#pragma mark -
+
+#pragma mark Built In Preset Definitions
+
+/* These NSDictionary Buit-In Preset definitions contain all of the settings for one built in preset */
+/* Note: For now, you can no longer have reference to any main window fields in your key values */
+
+- (NSDictionary *)create360Preset
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"AppleTV" forKey:@"PresetName"];
+    [preset setObject:@"Xbox 360" forKey:@"PresetName"];
 
     /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
     /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's settings for the AppleTV, including Dolby Digital 5.1 AC3 sound. Provides a good balance between quality and file size, and optimizes performance." forKey:@"PresetDescription"];
+    [preset setObject:@"HandBrake's settings for the Microsoft Xbox 360." forKey:@"PresetDescription"];
 
     /* File Format */
     [preset setObject:@"MP4 file" forKey:@"FileFormat"];
 
-    /* 64-bit MP4 file */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
-
     /* Chapter Markers*/
-     [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
+     [preset setObject:[NSNumber numberWithInt:0] forKey:@"ChapterMarkers"];
 
     /* Video encoder */
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
-
-    /* x264 Option String (We can use this to tweak the appleTV output)*/
-    [preset setObject:@"bframes=3:ref=1:me=umh:no-fast-pskip=1:trellis=1:cabac=0" forKey:@"x264Option"];
+    
+    /* x264 Option String */
+    [preset setObject:@"level=40:ref=2:mixed-refs:bframes=3:weightb:subme=7:direct=auto:b-pyramid:me=umh:analyse=all:no-fast-pskip:filter=-2,-1" forKey:@"x264Option"];
 
     /* Video quality */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
     [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+    [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
     [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
 
     /* Video framerate */
     /* 2 Pass Encoding */
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
 
-    /* Basic Picture Settings */
+    /*Picture Settings*/
     /* Use Max Picture settings for whatever the dvd is.*/
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
     [preset setObject:@"48" forKey:@"Audio1Samplerate"];
     [preset setObject:@"160" forKey:@"Audio1Bitrate"];
     [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
-
-    /* Track 2 */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio2Track"];
-    [preset setObject:@"AC3 Passthru" forKey:@"Audio2Encoder"];
-    [preset setObject:@"AC3 Passthru" forKey:@"Audio2Mixdown"];
-    [preset setObject:@"Auto" forKey:@"Audio2Samplerate"];
-    /* Note: we ignore specified bitrate for AC3 Passthru in libhb and use
-     * the sources bitrate, however we need to initially set the value to something so
-     * the macgui doesnt barf, so 160 seems as good as anything */
-    [preset setObject:@"160" forKey:@"Audio2Bitrate"];
-    [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio2TrackDRCSlider"];
-
+    
     /* Subtitles*/
     [preset setObject:@"None" forKey:@"Subtitles"];
 
     return preset;
 }
 
-- (NSDictionary *)createBedlamPreset
+- (NSDictionary *)createAnimationPreset
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"Bedlam" forKey:@"PresetName"];
+    [preset setObject:@"Animation" forKey:@"PresetName"];
 
     /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
     /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's settings maxed out for slowest encoding and highest quality. Use at your own risk. So slow it's not just insane...it's a trip to the looney bin." forKey:@"PresetDescription"];
+    [preset setObject:@"HandBrake's settings for cartoons, anime, and CGI." forKey:@"PresetDescription"];
 
     /* File Format */
     [preset setObject:@"MKV file" forKey:@"FileFormat"];
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
     /* x264 Option String */
-    [preset setObject:@"ref=16:mixed-refs:bframes=16:weightb:direct=auto:b-pyramid:me=esa:subme=9:me-range=64:analyse=all:8x8dct:trellis=1:no-fast-pskip:no-dct-decimate:filter=-2,-1" forKey:@"x264Option"];
+    [preset setObject:@"ref=5:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip:filter=2,2:psy-rd=1,1:subme=9" forKey:@"x264Option"];
 
     /* Video quality */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
     [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"1800" forKey:@"VideoAvgBitrate"];
+    [preset setObject:@"1000" forKey:@"VideoAvgBitrate"];
     [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
 
     /* Video framerate */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
 
     /*Picture Settings*/
+    /* Basic Picture Settings */
     /* Use Max Picture settings for whatever the dvd is.*/
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
 
-    /* Explicitly set the filters for built-in presets */
+    /* Filters. For animation, use slower deinterlacing. */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDecomb"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDetelecine"];
 
     /* Set crop settings here */
     /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
     
     /* Track 1 */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio1Track"];
-    [preset setObject:@"AC3 Passthru" forKey:@"Audio1Encoder"];
-    [preset setObject:@"AC3 Passthru" forKey:@"Audio1Mixdown"];
+    [preset setObject:@"AAC (faac)" forKey:@"Audio1Encoder"];
+    [preset setObject:@"Dolby Pro Logic II" forKey:@"Audio1Mixdown"];
     [preset setObject:@"Auto" forKey:@"Audio1Samplerate"];
-    /* Note: we ignore specified bitrate for AC3 Passthru in libhb and use
-     * the sources bitrate, however we need to initially set the value to something so
-     * the macgui doesnt barf, so 160 seems as good as anything */
     [preset setObject:@"160" forKey:@"Audio1Bitrate"];
     [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
-
+    
     /* Subtitles*/
     [preset setObject:@"None" forKey:@"Subtitles"];
 
     return preset;
 }
 
-- (NSDictionary *)createBlindPreset
+- (NSDictionary *)createAppleTVPreset
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"Blind" forKey:@"PresetName"];
+    [preset setObject:@"AppleTV" forKey:@"PresetName"];
 
-    /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+    /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
+    /*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
     /*Set whether or not this is default, at creation set to 0*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
 
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
     /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's preset for impatient people who don't care about picture quality." forKey:@"PresetDescription"];
+    [preset setObject:@"HandBrake's settings for the AppleTV, including Dolby Digital 5.1 AC3 sound. Provides a good balance between quality and file size, and optimizes performance." forKey:@"PresetDescription"];
 
     /* File Format */
     [preset setObject:@"MP4 file" forKey:@"FileFormat"];
 
+    /* 64-bit MP4 file */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+
     /* Chapter Markers*/
      [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
 
     /* Video encoder */
-    [preset setObject:@"MPEG-4 (FFmpeg)" forKey:@"VideoEncoder"];
+    [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
-    /* x264 Option String */
-    [preset setObject:@"" forKey:@"x264Option"];
+    /* x264 Option String (We can use this to tweak the appleTV output)*/
+    [preset setObject:@"level=30:cabac=0:ref=3:mixed-refs=1:bframes=6:weightb=1:direct=auto:no-fast-pskip=1:me=umh:subq=9:analyse=all" forKey:@"x264Option"];
 
     /* Video quality */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
+    [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
     [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"512" forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
+    [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+    [preset setObject:[NSNumber numberWithFloat:0.59] forKey:@"VideoQualitySlider"];
 
     /* Video framerate */
     [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
 
     /* 2 Pass Encoding */
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTurboTwoPass"];
 
-    /*Picture Settings*/
-    /* Use a width of 512 to save on space for Blind */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
-    [preset setObject:[NSNumber numberWithInt:512] forKey:@"PictureWidth"];
+    /* Basic Picture Settings */
+    /* Use Max Picture settings for whatever the dvd is.*/
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+    [preset setObject:[NSNumber numberWithInt:960] forKey:@"PictureWidth"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+    [preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
 
     /* Explicitly set the filters for built-in presets */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
 
     /* Set crop settings here */
     /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];    
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio1Track"];
     [preset setObject:@"AAC (faac)" forKey:@"Audio1Encoder"];
     [preset setObject:@"Dolby Pro Logic II" forKey:@"Audio1Mixdown"];
-    [preset setObject:@"Auto" forKey:@"Audio1Samplerate"];
-    [preset setObject:@"128" forKey:@"Audio1Bitrate"];
+    [preset setObject:@"48" forKey:@"Audio1Samplerate"];
+    [preset setObject:@"160" forKey:@"Audio1Bitrate"];
     [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
 
+    /* Track 2 */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio2Track"];
+    [preset setObject:@"AC3 Passthru" forKey:@"Audio2Encoder"];
+    [preset setObject:@"AC3 Passthru" forKey:@"Audio2Mixdown"];
+    [preset setObject:@"Auto" forKey:@"Audio2Samplerate"];
+    /* Note: we ignore specified bitrate for AC3 Passthru in libhb and use
+     * the sources bitrate, however we need to initially set the value to something so
+     * the macgui doesnt barf, so 160 seems as good as anything */
+    [preset setObject:@"160" forKey:@"Audio2Bitrate"];
+    [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio2TrackDRCSlider"];
+
     /* Subtitles*/
     [preset setObject:@"None" forKey:@"Subtitles"];
 
     return preset;
 }
 
-- (NSDictionary *)createBrokePreset
+- (NSDictionary *)createAppleUniversalPreset
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"Broke" forKey:@"PresetName"];
+    [preset setObject:@"Universal" forKey:@"PresetName"];
 
-    /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
+    /*Set whether or not this is a user preset where 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
+    /*Set whether or not this is a folder, 1 is bool for folder*/
+    [preset setObject:[NSNumber numberWithBool: NO] forKey:@"Folder"];
     /*Set whether or not this is default, at creation set to 0*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
 
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
     /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's preset for people without a lot of money to waste on hard drives. Tries to maximize quality for burning to CDs, so you can party like it's 1999." forKey:@"PresetDescription"];
+    [preset setObject:@"HandBrake's universally compatible, full resolution settings for all current Apple devices: iPod, iPhone, AppleTV, and Macs" forKey:@"PresetDescription"];
 
     /* File Format */
     [preset setObject:@"MP4 file" forKey:@"FileFormat"];
 
+    /* 64-bit MP4 file */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Mp4LargeFile"];
+
     /* Chapter Markers*/
      [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
 
     /* Video encoder */
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
-    /* x264 Option String */
-    [preset setObject:@"ref=3:mixed-refs:bframes=16:weightb:b-pyramid:direct=auto:subme=7:me=umh:trellis=1:analyse=all:8x8dct:no-fast-pskip" forKey:@"x264Option"];
+    /* x264 Option String (We can use this to tweak the appleTV output)*/
+    [preset setObject:@"level=30:cabac=0:ref=3:mixed-refs=1:analyse=all:me=umh:no-fast-pskip=1:subme=8" forKey:@"x264Option"];
 
     /* Video quality */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoQualityType"];
-    [preset setObject:@"695" forKey:@"VideoTargetSize"];
-    [preset setObject:@"1600" forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
+    [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
+    [preset setObject:@"700" forKey:@"VideoTargetSize"];
+    [preset setObject:@"2500" forKey:@"VideoAvgBitrate"];
+    [preset setObject:[NSNumber numberWithFloat:0.59] forKey:@"VideoQualitySlider"];
 
     /* Video framerate */
     [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
 
     /* 2 Pass Encoding */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoTwoPass"];
 
-    /*Picture Settings*/
-    /* Use a width of 640 for Broke */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
-    [preset setObject:[NSNumber numberWithInt:640] forKey:@"PictureWidth"];
+    /* Basic Picture Settings */
+    /* Use Max Picture settings for whatever the dvd is.*/
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
+    [preset setObject:[NSNumber numberWithInt:720] forKey:@"PictureWidth"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+    [preset setObject:[NSNumber numberWithInt:2] forKey:@"PicturePAR"];
 
     /* Explicitly set the filters for built-in presets */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
 
     /* Set crop settings here */
     /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];    
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio1Track"];
     [preset setObject:@"AAC (faac)" forKey:@"Audio1Encoder"];
     [preset setObject:@"Dolby Pro Logic II" forKey:@"Audio1Mixdown"];
-    [preset setObject:@"Auto" forKey:@"Audio1Samplerate"];
-    [preset setObject:@"128" forKey:@"Audio1Bitrate"];
+    [preset setObject:@"48" forKey:@"Audio1Samplerate"];
+    [preset setObject:@"160" forKey:@"Audio1Bitrate"];
     [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
 
+    /* Track 2 */
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio2Track"];
+    [preset setObject:@"AC3 Passthru" forKey:@"Audio2Encoder"];
+    [preset setObject:@"AC3 Passthru" forKey:@"Audio2Mixdown"];
+    [preset setObject:@"Auto" forKey:@"Audio2Samplerate"];
+    /* Note: we ignore specified bitrate for AC3 Passthru in libhb and use
+     * the sources bitrate, however we need to initially set the value to something so
+     * the macgui doesnt barf, so 160 seems as good as anything */
+    [preset setObject:@"160" forKey:@"Audio2Bitrate"];
+    [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio2TrackDRCSlider"];
+
     /* Subtitles*/
     [preset setObject:@"None" forKey:@"Subtitles"];
 
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
     /* x264 Option String */
-    [preset setObject:@"ref=3:mixed-refs:bframes=3:b-pyramid:subme=7:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh" forKey:@"x264Option"];
+    [preset setObject:@"ref=3:mixed-refs:bframes=3:b-pyramid:weightb:filter=-2,-1:trellis=1:analyse=all:8x8dct:me=umh:subme=9:psy-rd=1,1" forKey:@"x264Option"];
 
     /* Video quality */
     [preset setObject:[NSNumber numberWithInt:2] forKey:@"VideoQualityType"];
     [preset setObject:@"700" forKey:@"VideoTargetSize"];
     [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
+    [preset setObject:[NSNumber numberWithFloat:0.60] forKey:@"VideoQualitySlider"];
 
     /* Video framerate */
     [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
     return preset;
 }
 
-- (NSDictionary *)createDeuxSixQuatrePreset
-{
-    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-
-    /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"Deux Six Quatre" forKey:@"PresetName"];
-
-    /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
-
-    /*Set whether or not this is default, at creation set to 0*/
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"Default"];
-
-    /*Get the whether or not to apply pic settings in the AddPresetPanel*/
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
-
-    /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's preset for true high profile x264 quality. A good balance of quality and speed, based on community standards found in the wild. This preset will give you a much better sense of x264's capabilities than vanilla main profile." forKey:@"PresetDescription"];
-
-    /* File Format */
-    [preset setObject:@"MKV file" forKey:@"FileFormat"];
-
-    /* Chapter Markers*/
-     [preset setObject:[NSNumber numberWithInt:1] forKey:@"ChapterMarkers"];
-
-    /* Video encoder */
-    [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
-
-    /* x264 Option String */
-    [preset setObject:@"ref=5:mixed-refs:bframes=3:weightb:b-pyramid:me=umh:subme=8:trellis=1:analyse=all:8x8dct:no-fast-pskip" forKey:@"x264Option"];
-
-    /* Video quality */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
-    [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"1600" forKey:@"VideoAvgBitrate"];
-    [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
-
-    /* Video framerate */
-    [preset setObject:@"Same as source" forKey:@"VideoFramerate"];
-
-    /* GrayScale */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VideoGrayScale"];
-
-    /* 2 Pass Encoding */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTwoPass"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoTurboTwoPass"];
-
-    /*Picture Settings*/
-    /* Use Max Picture settings for whatever the dvd is.*/
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesMaxPictureSettings"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
-
-    /* Explicitly set the filters for built-in presets */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
-
-    /* Set crop settings here */
-    /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureRightCrop"];
-
-    /* Audio - Is done on a track by track basis, ONLY specifiy the tracks we want set as any track
-     * not listed will be set to "None" and not encoded */
-    
-    /* Track 1 */
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"Audio1Track"];
-    [preset setObject:@"AC3 Passthru" forKey:@"Audio1Encoder"];
-    [preset setObject:@"AC3 Passthru" forKey:@"Audio1Mixdown"];
-    [preset setObject:@"Auto" forKey:@"Audio1Samplerate"];
-    /* Note: we ignore specified bitrate for AC3 Passthru in libhb and use
-     * the sources bitrate, however we need to initially set the value to something so
-     * the macgui doesnt barf, so 160 seems as good as anything */
-    [preset setObject:@"160" forKey:@"Audio1Bitrate"];
-    [preset setObject:[NSNumber numberWithFloat:1.0] forKey:@"Audio1TrackDRCSlider"];
-
-    /* Subtitles*/
-    [preset setObject:@"None" forKey:@"Subtitles"];
-
-    [preset autorelease];
-    return preset;
-}
-
 - (NSDictionary *)createFilmPreset
 {
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
     /* x264 Option String */
-    [preset setObject:@"ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=8:analyse=all:8x8dct:trellis=1:no-fast-pskip" forKey:@"x264Option"];
+    [preset setObject:@"ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=9:analyse=all:8x8dct:trellis=1:no-fast-pskip:psy-rd=1,1" forKey:@"x264Option"];
 
     /* Video quality */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"iPhone / iPod Touch" forKey:@"PresetName"];
+    [preset setObject:@"iPhone & iPod Touch" forKey:@"PresetName"];
 
     /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"iPod High-Rez" forKey:@"PresetName"];
+    [preset setObject:@"iPod Legacy" forKey:@"PresetName"];
 
     /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
     /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's high resolution settings for the iPod. Good video quality, great for viewing on a TV using your iPod" forKey:@"PresetDescription"];
+    [preset setObject:@"HandBrake's high resolution settings for older 5 and 5.5G iPods. Good video quality, great for viewing on a TV using your iPod" forKey:@"PresetDescription"];
 
     /* File Format */
     [preset setObject:@"MP4 file" forKey:@"FileFormat"];
     NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
 
     /* Get the New Preset Name from the field in the AddPresetPanel */
-    [preset setObject:@"iPod Low-Rez" forKey:@"PresetName"];
+    [preset setObject:@"iPod Classic & iPod Nano" forKey:@"PresetName"];
 
     /*Set whether or not this is a user preset or factory 0 is factory, 1 is user*/
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"Type"];
 
     /* Set crop settings here */
     /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureAutoCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureTopCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureBottomCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureLeftCrop"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureSettings"];
 
     /* Get the New Preset Description from the field in the AddPresetPanel */
-    [preset setObject:@"HandBrake's high quality settings for use with QuickTime. It can be slow, so use it when the Normal preset doesn't look good enough." forKey:@"PresetDescription"];
+    [preset setObject:@"HandBrake's high profile settings for use with QuickTime. It can be slow, so use it when the Normal preset doesn't look good enough." forKey:@"PresetDescription"];
 
     /* File Format */
     [preset setObject:@"MP4 file" forKey:@"FileFormat"];
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
     /* x264 Option String */
-    [preset setObject:@"ref=3:mixed-refs:bframes=3:subme=7:weightb:direct=auto:me=umh:analyse=all:trellis=1:no-fast-pskip" forKey:@"x264Option"];
+    [preset setObject:@"ref=3:mixed-refs:bframes=3:weightb:direct=auto:me=umh:subme=7:analyse=all:8x8dct:trellis=1:no-fast-pskip=1:psy-rd=1,1" forKey:@"x264Option"];
 
     /* Video quality */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
     [preset setObject:@"700" forKey:@"VideoTargetSize"];
-    [preset setObject:@"2000" forKey:@"VideoAvgBitrate"];
+    [preset setObject:@"1800" forKey:@"VideoAvgBitrate"];
     [preset setObject:[NSNumber numberWithFloat:0.6471] forKey:@"VideoQualitySlider"];
 
     /* Video framerate */
     [preset setObject:@"H.264 (x264)" forKey:@"VideoEncoder"];
 
     /* x264 Option String */
-    [preset setObject:@"ref=3:mixed-refs:bframes=6:subme=7:weightb:direct=auto:b-pyramid:me=umh:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip" forKey:@"x264Option"];
+    [preset setObject:@"ref=3:mixed-refs:bframes=6:weightb:direct=auto:b-pyramid:me=umh:subme=9:analyse=all:8x8dct:trellis=1:nr=150:no-fast-pskip=1:psy-rd=1,1" forKey:@"x264Option"];
 
     /* Video quality */
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"VideoQualityType"];
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureAutoCrop"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureWidth"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PicturePAR"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureKeepRatio"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PicturePAR"];
 
     [preset setObject:[NSNumber numberWithInt:1] forKey:@"UsesPictureFilters"];
-    [preset setObject:[NSNumber numberWithInt:3] forKey:@"PictureDeinterlace"];
-    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDenoise"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeinterlace"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDecomb"];
+    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDenoise"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"VFR"];
     [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDeblock"];
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"PictureDetelecine"];
+    [preset setObject:[NSNumber numberWithInt:1] forKey:@"PictureDetelecine"];
 
     /* Set crop settings here */
     /* The Auto Crop Matrix in the Picture Window autodetects differences in crop settings */