]> granicus.if.org Git - handbrake/commitdiff
MacGui: moved the "add preset" window to its own window controller class. Keep the...
authorritsuka <damiog@gmail.com>
Sun, 23 Nov 2014 12:54:31 +0000 (12:54 +0000)
committerritsuka <damiog@gmail.com>
Sun, 23 Nov 2014 12:54:31 +0000 (12:54 +0000)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@6538 b64f7644-9d1e-0410-96f1-a4d463321fa5

12 files changed:
macosx/Controller.h
macosx/Controller.m
macosx/English.lproj/AddPreset.xib [new file with mode: 0644]
macosx/English.lproj/MainMenu.xib
macosx/HBAddPresetController.h [new file with mode: 0644]
macosx/HBAddPresetController.m [new file with mode: 0644]
macosx/HBPreset.h
macosx/HBPresetsManager.h
macosx/HBPresetsManager.m
macosx/HBQueueOutlineView.h [new file with mode: 0644]
macosx/HBQueueOutlineView.m [new file with mode: 0644]
macosx/HandBrake.xcodeproj/project.pbxproj

index 925aaab1005ee441b7be0d7a4ceb3c24c5d434fc..1dc56759dfd8ff22c156e613b08634b9923ebb45 100644 (file)
@@ -148,20 +148,10 @@ extern NSString *keyTitleTag;
        /* User Preset variables here */
        HBPresetsManager             * presetManager;
     HBPresetsViewController      * fPresetsView;
-    IBOutlet NSMenu              * presetsMenu;
 
+    IBOutlet NSMenu              * presetsMenu;
        IBOutlet NSDrawer            * fPresetDrawer;
-       IBOutlet NSTextField         * fPresetNewName;
-       IBOutlet NSTextField         * fPresetNewDesc;
-       IBOutlet NSPopUpButton       * fPresetNewPicSettingsPopUp;
-    IBOutlet NSTextField         * fPresetNewPicWidth;
-    IBOutlet NSTextField         * fPresetNewPicHeight;
-    IBOutlet NSBox               * fPresetNewPicWidthHeightBox;
-
-    IBOutlet NSButton            * fPresetNewPicFiltersCheck;
-       IBOutlet NSTextField         * fPresetSelectedDisplay;
-
-    IBOutlet NSPanel             * fAddPresetPanel;
+    IBOutlet NSTextField         * fPresetSelectedDisplay;
 
     hb_handle_t                  * fHandle;
     
@@ -184,6 +174,7 @@ extern NSString *keyTitleTag;
                of encode 0==idle, 1==encoding, 2==cancelled*/
     int                            fEncodeState;
     BOOL                           SuccessfulScan;
+    BOOL                           titleLoaded;
     BOOL                           applyQueueToScan;
        NSString                      * currentSource;
     NSString                      * browsedSourceDisplayName;
@@ -295,13 +286,9 @@ extern NSString *keyTitleTag;
 /* Manage User presets */    
 - (IBAction) customSettingUsed: (id) sender;
 - (IBAction) showAddPresetPanel: (id) sender;
-- (IBAction) addPresetPicDropdownChanged: (id) sender;
-- (IBAction) closeAddPresetPanel: (id) sender;
-- (NSDictionary *)createPreset;
 
 - (IBAction)selectDefaultPreset:(id)sender;
 - (IBAction)addFactoryPresets:(id)sender;
-- (IBAction)addUserPreset:(id)sender;
 
 -(void)sendToMetaX:(NSString *) filePath;
 // Growl methods
index b44b582650b01308322bad2d90aa20e7f302d22f..f22dfdee5b5f3ddbbd42ba48f1e82de6878c9dd3 100644 (file)
@@ -16,6 +16,7 @@
 #import "HBUtilities.h"
 
 #import "HBPresetsViewController.h"
+#import "HBAddPresetController.h"
 
 #import "HBAudioDefaults.h"
 #import "HBSubtitlesDefaults.h"
@@ -1818,6 +1819,12 @@ static NSString *        ChooseSourceIdentifier             = @"Choose Source It
     NSString *path = scanPath;
     HBDVDDetector *detector = [HBDVDDetector detectorForPath:path];
 
+    // Save the current settings
+    if (titleLoaded) {
+        self.selectedPreset = [self createPresetFromCurrentSettings];
+        titleLoaded = NO;
+    }
+
     [fPictureController setTitle:NULL];
 
        //      Notify anyone interested (audio/subtitles/chapters controller) that there's no title
@@ -2060,6 +2067,9 @@ static NSString *        ChooseSourceIdentifier             = @"Choose Source It
             SuccessfulScan = YES;
 
             [self titlePopUpChanged:nil];
+
+            titleLoaded = YES;
+
             [self encodeStartStopPopUpChanged:nil];
 
             [self enableUI: YES];
@@ -4270,6 +4280,12 @@ fWorkingCount = 0;
     hb_title_t * title = (hb_title_t*)
         hb_list_item( list, (int)[fSrcTitlePopUp indexOfSelectedItem] );
 
+    // If there is already a title load, save the current settings to a preset
+    if (titleLoaded)
+    {
+        self.selectedPreset = [self createPresetFromCurrentSettings];
+    }
+
     /* If we are a stream type and a batch scan, grok the output file name from title->name upon title change */
     if ((title->type == HB_STREAM_TYPE || title->type == HB_FF_STREAM_TYPE) &&
         hb_list_count( list ) > 1 )
@@ -4345,7 +4361,7 @@ fWorkingCount = 0;
         [self updateFileName];
        }
 
-   /* lets call tableViewSelected to make sure that any preset we have selected is enforced after a title change */
+   /* apply the current preset */
     [self applyPreset:self.selectedPreset];
 }
 
@@ -4907,147 +4923,84 @@ the user is using "Custom" settings by determining the sender*/
     }
 }
 
-- (IBAction) addPresetPicDropdownChanged: (id) sender
+- (IBAction)showAddPresetPanel:(id)sender
 {
-    if ([[fPresetNewPicSettingsPopUp selectedItem] tag] == 1)
-    {
-        [fPresetNewPicWidthHeightBox setHidden:NO];
-    }
-    else
-    {
-        [fPresetNewPicWidthHeightBox setHidden:YES];
-    }
-}
+       /* Show the add panel */
+    HBAddPresetController *addPresetController = [[HBAddPresetController alloc] initWithPreset:[self createPresetFromCurrentSettings]
+                                                                                     videoSize:NSMakeSize(fTitle->job->width, fTitle->job->height)];
 
-- (IBAction) showAddPresetPanel: (id) sender
-{
-    /*
-     * Populate the preset picture settings popup.
-     *
-     * Custom is not applicable when the anamorphic mode is Strict.
-     *
-     * Use [NSMenuItem tag] to store preset values for each option.
-     */
-    [fPresetNewPicSettingsPopUp removeAllItems];
-    [fPresetNewPicSettingsPopUp addItemWithTitle:@"None"];
-    [[fPresetNewPicSettingsPopUp lastItem] setTag: 0];
-    if (fTitle->job->anamorphic.mode != HB_ANAMORPHIC_STRICT)
-    {
-        // not Strict, Custom is applicable
-        [fPresetNewPicSettingsPopUp addItemWithTitle:@"Custom"];
-        [[fPresetNewPicSettingsPopUp lastItem] setTag: 1];
-    }
-    [fPresetNewPicSettingsPopUp addItemWithTitle:@"Source Maximum (post source scan)"];
-    [[fPresetNewPicSettingsPopUp lastItem] setTag: 2];
-    /*
-     * Default to Source Maximum for anamorphic Strict
-     * Default to Custom for all other anamorphic modes
-     */
-    [fPresetNewPicSettingsPopUp selectItemWithTag: (1 + (fTitle->job->anamorphic.mode == HB_ANAMORPHIC_STRICT))];
-    /* Save the current filters in the preset by default */
-    [fPresetNewPicFiltersCheck setState:NSOnState];
-    /* Erase info from the input fields*/
-       [fPresetNewName setStringValue: @""];
-       [fPresetNewDesc setStringValue: @""];
-    
-    /* Initialize custom height and width settings to current values */
-    
-       [fPresetNewPicWidth setStringValue: [NSString stringWithFormat:@"%d",fTitle->job->width]];
-       [fPresetNewPicHeight setStringValue: [NSString stringWithFormat:@"%d",fTitle->job->height]];
-    [self addPresetPicDropdownChanged:nil];
-       /* Show the panel */
-       [NSApp beginSheet:fAddPresetPanel modalForWindow:fWindow modalDelegate:nil didEndSelector:NULL contextInfo:NULL];
+    [NSApp beginSheet:addPresetController.window modalForWindow:fWindow modalDelegate:self didEndSelector:@selector(sheetDidEnd:returnCode:contextInfo:) contextInfo:addPresetController];
 }
 
-- (IBAction) closeAddPresetPanel: (id) sender
+- (void)sheetDidEnd:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
 {
-    [NSApp endSheet: fAddPresetPanel];
-    [fAddPresetPanel orderOut: self];
-}
+    HBAddPresetController *addPresetController = (HBAddPresetController *)contextInfo;
 
-- (IBAction)addUserPreset:(id)sender
-{
-    if (![[fPresetNewName stringValue] length])
+    if (returnCode == NSModalResponseContinue)
     {
-        NSAlert *alert = [[NSAlert alloc] init];
-        [alert setMessageText:@"Warning!"];
-        [alert setInformativeText:@"You need to insert a name for the preset."];
-        [alert runModal];
-        [alert release];
+        [presetManager addPreset:addPresetController.preset];
     }
-    else
-    {
-        /* Here we create a custom user preset */
-        [presetManager addPreset:[self createPreset]];
 
-        [self closeAddPresetPanel:nil];
-    }
+    [addPresetController release];
 }
 
-- (NSDictionary *)createPreset
+- (HBPreset *)createPresetFromCurrentSettings
 {
-    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
-    /* Preset build number */
-    [preset setObject:[NSString stringWithFormat: @"%d", [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] intValue]] forKey:@"PresetBuildNumber"];
-    [preset setObject:[fPresetNewName stringValue] forKey:@"PresetName"];
-       /* 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:NO] 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 numberWithInteger:[[fPresetNewPicSettingsPopUp selectedItem] tag]] forKey:@"UsesPictureSettings"];
-    /* Get whether or not to use the current Picture Filter settings for the preset */
-    [preset setObject:[NSNumber numberWithInteger:[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:@(fChapterTitlesController.createChapterMarkers) forKey:@"ChapterMarkers"];
-    /* Mux mp4 with http optimization */
-    [preset setObject:[NSNumber numberWithInteger:[fDstMp4HttpOptFileCheck state]] forKey:@"Mp4HttpOptimize"];
-    /* Add iPod uuid atom */
-    [preset setObject:[NSNumber numberWithInteger:[fDstMp4iPodFileCheck state]] forKey:@"Mp4iPodCompatible"];
-    
-    /* Codecs */
-    /* Video encoder */
+    NSMutableDictionary *preset = [NSMutableDictionary dictionary];
+    NSDictionary *currentPreset = self.selectedPreset.content;
+
+    preset[@"PresetBuildNumber"] = [NSString stringWithFormat: @"%d", [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] intValue]];
+    preset[@"PresetName"] = fPresetSelectedDisplay.stringValue;
+    preset[@"Folder"] = @NO;
+
+       // Set whether or not this is a user preset or factory 0 is factory, 1 is user
+    preset[@"Type"] = @1;
+    preset[@"Default"] = @0;
+
+    // Get the whether or not to apply pic Size and Cropping (includes Anamorphic)
+    preset[@"UsesPictureSettings"] = currentPreset[@"UsesPictureSettings"];
+    // Get whether or not to use the current Picture Filter settings for the preset
+    preset[@"UsesPictureFilters"] = currentPreset[@"UsesPictureFilters"];
+
+    preset[@"PresetDescription"] = currentPreset[@"PresetDescription"];
+    preset[@"FileFormat"] = fDstFormatPopUp.titleOfSelectedItem;
+    preset[@"ChapterMarkers"] = @(fChapterTitlesController.createChapterMarkers);
+
+    // Mux mp4 with http optimization
+    preset[@"Mp4HttpOptimize"] = @(fDstMp4HttpOptFileCheck.state);
+    // Add iPod uuid atom
+    preset[@"Mp4iPodCompatible"] = @(fDstMp4iPodFileCheck.state);
+
+    // Video encoder
     [fVideoController prepareVideoForPreset:preset];
 
-    /*Picture Settings*/
-    hb_job_t * job = fTitle->job;
-    
-    /* Picture Sizing */
-    [preset setObject:[NSNumber numberWithInt:0] forKey:@"UsesMaxPictureSettings"];
-    [preset setObject:[NSNumber numberWithInt:[fPresetNewPicWidth intValue]] forKey:@"PictureWidth"];
-    [preset setObject:[NSNumber numberWithInt:[fPresetNewPicHeight intValue]] forKey:@"PictureHeight"];
-    [preset setObject:[NSNumber numberWithInt:fTitle->job->anamorphic.keep_display_aspect] forKey:@"PictureKeepRatio"];
-    [preset setObject:[NSNumber numberWithInt:fTitle->job->anamorphic.mode] forKey:@"PicturePAR"];
-    [preset setObject:[NSNumber numberWithInt:fTitle->job->modulus] forKey:@"PictureModulus"];
+    // Picture Sizing
+    preset[@"PictureWidth"]  = currentPreset[@"PictureWidth"];
+    preset[@"PictureHeight"] = currentPreset[@"PictureHeight"];
 
-    /* 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 */
+    hb_job_t *job = fTitle->job;
+    preset[@"PictureKeepRatio"] = @(job->anamorphic.keep_display_aspect);
+    preset[@"PicturePAR"]       = @(job->anamorphic.mode);
+    preset[@"PictureModulus"]   = @(job->modulus);
+
+    // Set crop settings
+    preset[@"PictureAutoCrop"] = @(fPictureController.autoCrop);
+
+    preset[@"PictureTopCrop"]    = @(job->crop[0]);
+    preset[@"PictureBottomCrop"] = @(job->crop[1]);
+    preset[@"PictureLeftCrop"]   = @(job->crop[2]);
+    preset[@"PictureRightCrop"]  = @(job->crop[3]);
+
+    // Picture Filters
     [fPictureController.filters prepareFiltersForPreset:preset];
 
-    /* Audio */
+    // Audio
     [fAudioController.settings prepareAudioDefaultsForPreset:preset];
 
-    /* Subtitles */
+    // Subtitles
     [fSubtitlesViewController.settings prepareSubtitlesDefaultsForPreset:preset];
 
-    [preset autorelease];
-    return preset;
+    return [[[HBPreset alloc] initWithName:preset[@"PresetName"] content:preset builtIn:NO] autorelease];
     
 }
 
@@ -5121,9 +5074,9 @@ the user is using "Custom" settings by determining the sender*/
         [[NSUserDefaults standardUserDefaults] setURL:importPresetsDirectory forKey:@"LastPresetImportDirectoryURL"];
 
         /* NOTE: here we need to do some sanity checking to verify we do not hose up our presets file   */
-        NSMutableArray * presetsToImport = [[NSMutableArray alloc] initWithContentsOfURL:importPresetsFile];
+        NSMutableArray *presetsToImport = [[NSMutableArray alloc] initWithContentsOfURL:importPresetsFile];
         /* iterate though the new array of presets to import and add them to our presets array */
-        for (id tempObject in presetsToImport)
+        for (NSMutableDictionary *tempObject in presetsToImport)
         {
             /* make any changes to the incoming preset we see fit */
             /* make sure the incoming preset is not tagged as default */
@@ -5133,7 +5086,7 @@ the user is using "Custom" settings by determining the sender*/
             [tempObject setObject:prependedName forKey:@"PresetName"];
             
             /* actually add the new preset to our presets array */
-            [presetManager addPreset:tempObject];
+            [presetManager addPresetFromDictionary:tempObject];
         }
         [presetsToImport autorelease];
     }];
diff --git a/macosx/English.lproj/AddPreset.xib b/macosx/English.lproj/AddPreset.xib
new file mode 100644 (file)
index 0000000..64ed003
--- /dev/null
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14C68k" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+    <dependencies>
+        <deployment version="1060" identifier="macosx"/>
+        <development version="5100" identifier="xcode"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6250"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="HBAddPresetController">
+            <connections>
+                <outlet property="desc" destination="8kl-Sh-Gh7" id="Go1-hY-VFV"/>
+                <outlet property="name" destination="aKg-n4-OUS" id="FXa-ee-AN8"/>
+                <outlet property="picFilters" destination="zJI-d5-0k8" id="caQ-ST-efg"/>
+                <outlet property="picHeight" destination="Mga-dS-8BF" id="blD-Jx-MtN"/>
+                <outlet property="picSettingsPopUp" destination="z6B-ig-ouq" id="Nxq-Lm-dmh"/>
+                <outlet property="picWidth" destination="gOg-oO-8ar" id="oOu-qH-C4Q"/>
+                <outlet property="picWidthHeightBox" destination="H9n-64-GXz" id="aUH-bq-e2x"/>
+                <outlet property="window" destination="dbZ-Wo-9nG" id="BGs-m9-Ptx"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Create A New Preset" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="dbZ-Wo-9nG" userLabel="AddPresetPanel">
+            <windowStyleMask key="styleMask" titled="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="421" y="536" width="338" height="281"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
+            <value key="minSize" type="size" width="338" height="232"/>
+            <view key="contentView" id="AcO-9f-fnb">
+                <rect key="frame" x="0.0" y="0.0" width="338" height="281"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <button verticalHuggingPriority="750" id="fLU-xs-0du">
+                        <rect key="frame" x="239" y="13" width="85" height="32"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <buttonCell key="cell" type="push" title="Add" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="Deg-rS-mRc">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+DQ
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="add:" target="-2" id="8sP-tP-fJv"/>
+                        </connections>
+                    </button>
+                    <button verticalHuggingPriority="750" id="Y03-Ts-ZA4">
+                        <rect key="frame" x="155" y="13" width="84" height="32"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="5Xb-gz-QEa">
+                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="system"/>
+                            <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                        </buttonCell>
+                        <connections>
+                            <action selector="cancel:" target="-2" id="Ygd-gd-Yd0"/>
+                        </connections>
+                    </button>
+                    <textField verticalHuggingPriority="750" id="aKg-n4-OUS">
+                        <rect key="frame" x="20" y="229" width="298" height="19"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="xe0-bj-f3Z">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <popUpButton verticalHuggingPriority="750" id="z6B-ig-ouq">
+                        <rect key="frame" x="128" y="180" width="193" height="22"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" id="Mi7-V1-sSf">
+                            <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
+                            <font key="font" metaFont="smallSystem"/>
+                            <menu key="menu" title="OtherViews" id="qsA-gt-zdK"/>
+                        </popUpButtonCell>
+                        <connections>
+                            <action selector="addPresetPicDropdownChanged:" target="-2" id="tfe-c5-8JF"/>
+                        </connections>
+                    </popUpButton>
+                    <textField verticalHuggingPriority="750" id="Wy7-cF-tGv">
+                        <rect key="frame" x="17" y="252" width="303" height="14"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="Preset Name:" id="jhj-Et-ncF">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="Wpk-WC-aVk">
+                        <rect key="frame" x="17" y="201" width="98" height="20"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="Picture Settings:" id="75B-xq-Qbe">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="zDq-QP-LAu">
+                        <rect key="frame" x="17" y="106" width="84" height="14"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Description:" id="hc8-1h-Jye">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="8kl-Sh-Gh7">
+                        <rect key="frame" x="20" y="61" width="298" height="41"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="HKY-Cq-VyU">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <textField verticalHuggingPriority="750" id="PBQ-YN-YLi">
+                        <rect key="frame" x="18" y="185" width="108" height="14"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Use Picture Size:" id="yYI-zX-ctL">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <button id="zJI-d5-0k8">
+                        <rect key="frame" x="128" y="132" width="24" height="18"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="a3h-LA-LEO">
+                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
+                            <font key="font" metaFont="smallSystem"/>
+                        </buttonCell>
+                    </button>
+                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="uCB-5u-Rt4">
+                        <rect key="frame" x="113" y="210" width="205" height="5"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
+                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                        <font key="titleFont" metaFont="system"/>
+                    </box>
+                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="GHj-H0-hyS">
+                        <rect key="frame" x="91" y="108" width="227" height="5"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
+                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                        <font key="titleFont" metaFont="system"/>
+                    </box>
+                    <textField verticalHuggingPriority="750" id="sep-4m-XLj">
+                        <rect key="frame" x="17" y="134" width="109" height="15"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Use Picture Filters:" id="GNd-Vz-0ao">
+                            <font key="font" metaFont="smallSystem"/>
+                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                        </textFieldCell>
+                    </textField>
+                    <box autoresizesSubviews="NO" title="Box" borderType="none" titlePosition="noTitle" id="H9n-64-GXz">
+                        <rect key="frame" x="128" y="153" width="155" height="32"/>
+                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                        <view key="contentView">
+                            <rect key="frame" x="0.0" y="0.0" width="155" height="32"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField verticalHuggingPriority="750" id="gOg-oO-8ar">
+                                    <rect key="frame" x="3" y="6" width="52" height="16"/>
+                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                    <textFieldCell key="cell" controlSize="mini" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="ExG-3m-WxY">
+                                        <font key="font" metaFont="miniSystem"/>
+                                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField verticalHuggingPriority="750" id="mQk-Ua-wzc">
+                                    <rect key="frame" x="53" y="6" width="29" height="15"/>
+                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                    <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" title="X" id="Nfk-ix-xIv">
+                                        <font key="font" metaFont="smallSystem"/>
+                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField verticalHuggingPriority="750" id="Mga-dS-8BF">
+                                    <rect key="frame" x="82" y="6" width="52" height="16"/>
+                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                                    <textFieldCell key="cell" controlSize="mini" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="tBe-1m-0r9">
+                                        <font key="font" metaFont="miniSystem"/>
+                                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                            </subviews>
+                        </view>
+                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
+                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                    </box>
+                </subviews>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="YgD-Uk-vtp"/>
+            </connections>
+            <point key="canvasLocation" x="570" y="406.5"/>
+        </window>
+    </objects>
+</document>
index 4fe7a91f00bf04588d25dd5f651663aeaa5b226c..f302ba8fa27ac493195d00dca3ad5fa7b2a34d5d 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14B23" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6250" systemVersion="14C68k" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
         <deployment version="1060" identifier="macosx"/>
         <development version="5100" identifier="xcode"/>
@@ -76,9 +76,9 @@
                         </tabViewItems>
                     </tabView>
                     <textField verticalHuggingPriority="750" id="1538">
-                        <rect key="frame" x="20" y="540" width="45" height="14"/>
+                        <rect key="frame" x="20" y="540" width="54" height="14"/>
                         <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Source:" id="4905">
+                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="Source:" id="4905">
                             <font key="font" metaFont="smallSystemBold"/>
                             <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
                             <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
             <connections>
                 <outlet property="delegate" destination="240" id="433"/>
             </connections>
+            <point key="canvasLocation" x="507" y="501"/>
         </window>
         <menu title="MainMenu" systemMenu="main" id="29" userLabel="MainMenu">
             <items>
                 <outlet property="parentWindow" destination="21" id="1842"/>
             </connections>
         </drawer>
-        <window title="Create A New Preset" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="1867" userLabel="AddPresetPanel" customClass="NSPanel">
-            <windowStyleMask key="styleMask" titled="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="421" y="536" width="338" height="281"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1178"/>
-            <value key="minSize" type="size" width="338" height="232"/>
-            <view key="contentView" id="1868">
-                <rect key="frame" x="0.0" y="0.0" width="338" height="281"/>
-                <autoresizingMask key="autoresizingMask"/>
-                <subviews>
-                    <button verticalHuggingPriority="750" id="1870">
-                        <rect key="frame" x="239" y="13" width="85" height="32"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
-                        <buttonCell key="cell" type="push" title="Add" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="4934">
-                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="system"/>
-                            <string key="keyEquivalent" base64-UTF8="YES">
-DQ
-</string>
-                        </buttonCell>
-                        <connections>
-                            <action selector="addUserPreset:" target="240" id="1907"/>
-                        </connections>
-                    </button>
-                    <button verticalHuggingPriority="750" id="1871">
-                        <rect key="frame" x="155" y="13" width="84" height="32"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
-                        <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" inset="2" id="4935">
-                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="system"/>
-                            <string key="keyEquivalent" base64-UTF8="YES">
-Gw
-</string>
-                        </buttonCell>
-                        <connections>
-                            <action selector="closeAddPresetPanel:" target="240" id="1878"/>
-                        </connections>
-                    </button>
-                    <textField verticalHuggingPriority="750" id="1872">
-                        <rect key="frame" x="20" y="229" width="298" height="19"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="4936">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <popUpButton verticalHuggingPriority="750" id="2008">
-                        <rect key="frame" x="128" y="180" width="193" height="22"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                        <popUpButtonCell key="cell" type="push" title="Item1" bezelStyle="rounded" alignment="left" controlSize="small" lineBreakMode="truncatingTail" state="on" borderStyle="borderAndBezel" inset="2" arrowPosition="arrowAtCenter" preferredEdge="maxY" selectedItem="2012" id="4937">
-                            <behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
-                            <font key="font" metaFont="smallSystem"/>
-                            <menu key="menu" title="OtherViews" id="2009">
-                                <items>
-                                    <menuItem title="Item1" state="on" id="2012"/>
-                                    <menuItem title="Item2" id="2011"/>
-                                    <menuItem title="Item3" id="2010"/>
-                                </items>
-                            </menu>
-                        </popUpButtonCell>
-                        <connections>
-                            <action selector="addPresetPicDropdownChanged:" target="240" id="5672"/>
-                        </connections>
-                    </popUpButton>
-                    <textField verticalHuggingPriority="750" id="2670">
-                        <rect key="frame" x="17" y="252" width="303" height="14"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="Preset Name:" id="4938">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <textField verticalHuggingPriority="750" id="2671">
-                        <rect key="frame" x="17" y="207" width="91" height="14"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" title="Picture Settings:" id="4939">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <textField verticalHuggingPriority="750" id="2672">
-                        <rect key="frame" x="17" y="106" width="84" height="14"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" title="Description:" id="4940">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <textField verticalHuggingPriority="750" id="2673">
-                        <rect key="frame" x="20" y="61" width="298" height="41"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <textFieldCell key="cell" controlSize="small" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="4941">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <textField verticalHuggingPriority="750" id="2833">
-                        <rect key="frame" x="18" y="185" width="108" height="14"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Use Picture Size:" id="4942">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <button id="2837">
-                        <rect key="frame" x="128" y="132" width="24" height="18"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <buttonCell key="cell" type="check" bezelStyle="regularSquare" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="4943">
-                            <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                            <font key="font" metaFont="smallSystem"/>
-                        </buttonCell>
-                    </button>
-                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="2839">
-                        <rect key="frame" x="113" y="210" width="205" height="5"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                        <font key="titleFont" metaFont="system"/>
-                    </box>
-                    <box verticalHuggingPriority="750" title="Box" boxType="separator" titlePosition="noTitle" id="2840">
-                        <rect key="frame" x="91" y="108" width="227" height="5"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                        <font key="titleFont" metaFont="system"/>
-                    </box>
-                    <textField verticalHuggingPriority="750" id="2957">
-                        <rect key="frame" x="17" y="134" width="109" height="15"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="right" title="Use Picture Filters:" id="4944">
-                            <font key="font" metaFont="smallSystem"/>
-                            <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                            <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                        </textFieldCell>
-                    </textField>
-                    <box autoresizesSubviews="NO" title="Box" borderType="none" titlePosition="noTitle" id="5670">
-                        <rect key="frame" x="128" y="153" width="155" height="32"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                        <view key="contentView">
-                            <rect key="frame" x="0.0" y="0.0" width="155" height="32"/>
-                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                            <subviews>
-                                <textField verticalHuggingPriority="750" id="5549">
-                                    <rect key="frame" x="3" y="6" width="52" height="16"/>
-                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                                    <textFieldCell key="cell" controlSize="mini" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="right" drawsBackground="YES" id="5550">
-                                        <font key="font" metaFont="miniSystem"/>
-                                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                    </textFieldCell>
-                                </textField>
-                                <textField verticalHuggingPriority="750" id="5553">
-                                    <rect key="frame" x="53" y="6" width="29" height="15"/>
-                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
-                                    <textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="center" title="X" id="5554">
-                                        <font key="font" metaFont="smallSystem"/>
-                                        <color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
-                                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                                    </textFieldCell>
-                                </textField>
-                                <textField verticalHuggingPriority="750" id="5551">
-                                    <rect key="frame" x="82" y="6" width="52" height="16"/>
-                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
-                                    <textFieldCell key="cell" controlSize="mini" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" alignment="left" drawsBackground="YES" id="5552">
-                                        <font key="font" metaFont="miniSystem"/>
-                                        <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
-                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
-                                    </textFieldCell>
-                                </textField>
-                            </subviews>
-                        </view>
-                        <color key="borderColor" white="0.0" alpha="0.41999999999999998" colorSpace="calibratedWhite"/>
-                        <color key="fillColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
-                    </box>
-                </subviews>
-            </view>
-        </window>
         <window title="SourceTitlePanel" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="2701" userLabel="SourceTitlePanel" customClass="NSPanel">
             <windowStyleMask key="styleMask" titled="YES"/>
             <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
@@ -1070,7 +888,6 @@ DQ
         </window>
         <customObject id="240" userLabel="HBController" customClass="HBController">
             <connections>
-                <outlet property="fAddPresetPanel" destination="1867" id="1869"/>
                 <outlet property="fAdvancedTab" destination="2015" id="4eO-Lg-7cH"/>
                 <outlet property="fAudioTab" destination="1475" id="AuZ-Uf-bla"/>
                 <outlet property="fChaptersTitlesTab" destination="1989" id="oUt-8L-Ag2"/>
@@ -1085,13 +902,6 @@ DQ
                 <outlet property="fMainTabView" destination="1474" id="XMU-Vi-8QM"/>
                 <outlet property="fOpenSourceTitleMMenu" destination="2698" id="2700"/>
                 <outlet property="fPresetDrawer" destination="1841" id="1889"/>
-                <outlet property="fPresetNewDesc" destination="2673" id="2674"/>
-                <outlet property="fPresetNewName" destination="1872" id="1875"/>
-                <outlet property="fPresetNewPicFiltersCheck" destination="2837" id="2841"/>
-                <outlet property="fPresetNewPicHeight" destination="5551" id="5669"/>
-                <outlet property="fPresetNewPicSettingsPopUp" destination="2008" id="2013"/>
-                <outlet property="fPresetNewPicWidth" destination="5549" id="5668"/>
-                <outlet property="fPresetNewPicWidthHeightBox" destination="5670" id="5671"/>
                 <outlet property="fPresetSelectedDisplay" destination="1882" id="1883"/>
                 <outlet property="fQueueStatus" destination="2006" id="2007"/>
                 <outlet property="fRipIndicator" destination="1373" id="1374"/>
diff --git a/macosx/HBAddPresetController.h b/macosx/HBAddPresetController.h
new file mode 100644 (file)
index 0000000..3fa4bf9
--- /dev/null
@@ -0,0 +1,20 @@
+//
+//  HBAddPresetController.h
+//  HandBrake
+//
+//  Created by Damiano Galassi on 23/11/14.
+//
+//
+
+#import <Cocoa/Cocoa.h>
+#include "hb.h"
+
+@class HBPreset;
+
+@interface HBAddPresetController : NSWindowController
+
+- (instancetype)initWithPreset:(HBPreset *)preset videoSize:(NSSize)size;
+
+@property (readonly) HBPreset *preset;
+
+@end
diff --git a/macosx/HBAddPresetController.m b/macosx/HBAddPresetController.m
new file mode 100644 (file)
index 0000000..c336104
--- /dev/null
@@ -0,0 +1,138 @@
+//
+//  HBAddPresetController.m
+//  HandBrake
+//
+//  Created by Damiano Galassi on 23/11/14.
+//
+//
+
+#import "HBAddPresetController.h"
+#import "HBPreset.h"
+
+@interface HBAddPresetController ()
+
+@property (assign) IBOutlet NSTextField *name;
+@property (assign) IBOutlet NSTextField *desc;
+
+@property (assign) IBOutlet NSPopUpButton *picSettingsPopUp;
+@property (assign) IBOutlet NSTextField *picWidth;
+@property (assign) IBOutlet NSTextField *picHeight;
+@property (assign) IBOutlet NSBox *picWidthHeightBox;
+
+@property (assign) IBOutlet NSButton *picFilters;
+
+@property (retain) HBPreset *preset;
+@property NSSize size;
+
+@end
+
+@implementation HBAddPresetController
+
+- (instancetype)initWithPreset:(HBPreset *)preset videoSize:(NSSize)size;
+{
+    self = [super initWithWindowNibName:@"AddPreset"];
+    if (self)
+    {
+        NSParameterAssert(preset);
+        _preset = [preset retain];
+        _size = size;
+    }
+    return self;
+}
+
+- (void)dealloc
+{
+    self.preset = nil;;
+    [super dealloc];
+}
+
+- (void)windowDidLoad {
+    [super windowDidLoad];
+
+    /*
+     * Populate the preset picture settings popup.
+     *
+     * Custom is not applicable when the anamorphic mode is Strict.
+     *
+     * Use [NSMenuItem tag] to store preset values for each option.
+     */
+    [self.picSettingsPopUp addItemWithTitle:NSLocalizedString(@"None", @"")];
+    [[self.picSettingsPopUp lastItem] setTag: 0];
+
+    if ([self.preset.content[@"PicturePAR"] integerValue] != HB_ANAMORPHIC_STRICT)
+    {
+        // not Strict, Custom is applicable
+        [self.picSettingsPopUp addItemWithTitle:NSLocalizedString(@"Custom", @"")];
+        [[self.picSettingsPopUp lastItem] setTag: 1];
+    }
+    [self.picSettingsPopUp addItemWithTitle:NSLocalizedString(@"Source Maximum (post source scan)", @"")];
+    [[self.picSettingsPopUp lastItem] setTag: 2];
+
+    /*
+     * Default to Source Maximum for anamorphic Strict
+     * Default to Custom for all other anamorphic modes
+     */
+    [self.picSettingsPopUp selectItemWithTag: (1 + ([self.preset.content[@"PicturePAR"] integerValue] == HB_ANAMORPHIC_STRICT))];
+    /* Save the current filters in the preset by default */
+    [self.picFilters setState:NSOnState];
+
+    /* Initialize custom height and width settings to current values */
+
+    [self.picWidth setStringValue: [NSString stringWithFormat:@"%d", (int)self.size.width]];
+    [self.picHeight setStringValue: [NSString stringWithFormat:@"%d",(int)self.size.height]];
+    [self addPresetPicDropdownChanged:nil];
+}
+
+- (IBAction)addPresetPicDropdownChanged:(id)sender
+{
+    if (self.picSettingsPopUp.selectedItem.tag == 1)
+    {
+        self.picWidthHeightBox.hidden = NO;
+    }
+    else
+    {
+        self.picWidthHeightBox.hidden = YES;
+    }
+}
+
+- (IBAction)add:(id)sender
+{
+    if (self.name.stringValue.length == 0)
+    {
+        NSAlert *alert = [[NSAlert alloc] init];
+        [alert setMessageText:NSLocalizedString(@"Warning!", @"")];
+        [alert setInformativeText:NSLocalizedString(@"You need to insert a name for the preset.", @"")];
+        [alert runModal];
+        [alert release];
+    }
+    else
+    {
+        self.preset.name = self.name.stringValue;
+        self.preset.presetDescription = self.name.stringValue;
+
+        NSMutableDictionary *dict = [[self.preset.content mutableCopy] autorelease];
+
+        // Get the picture size
+        dict[@"PictureWidth"] = @(self.picWidth.integerValue);
+        dict[@"PictureHeight"] = @(self.picHeight.integerValue);
+
+        //Get the whether or not to apply pic Size and Cropping (includes Anamorphic)
+        dict[@"UsesPictureSettings"] = @(self.picSettingsPopUp.selectedItem.tag);
+
+        // Get whether or not to use the current Picture Filter settings for the preset
+        dict[@"UsesPictureFilters"] = @(self.picFilters.state);
+
+        self.preset.content = [[dict copy] autorelease];
+
+        [[self window] orderOut:nil];
+        [NSApp endSheet:[self window] returnCode:NSModalResponseContinue];
+    }
+}
+
+- (IBAction)cancel:(id)sender
+{
+    [[self window] orderOut:nil];
+    [NSApp endSheet:[self window] returnCode:NSModalResponseAbort];
+}
+
+@end
index 73f4321c465769be02ae65c60a69065461c1299d..25c1e3b5dc9a5413a15cc4614a451d1c0a5d4ec0 100644 (file)
 - (instancetype)initWithFolderName:(NSString *)title builtIn:(BOOL)builtIn;
 
 @property (nonatomic, copy) NSString *name;
-@property (nonatomic, readwrite, retain) NSString *presetDescription;
+@property (nonatomic, copy) NSString *presetDescription;
 @property (nonatomic, retain) NSDictionary *content;
 
-@property (nonatomic, readwrite) BOOL isDefault;
+@property (nonatomic) BOOL isDefault;
 @property (nonatomic, readonly) BOOL isBuiltIn;
 
 @end
index 74427f550de32b84c0faa297839f59420ee2aada..4eddec36570df969925d46c1ebdb29b2c41ecb85 100644 (file)
@@ -55,7 +55,14 @@ extern NSString *HBPresetsChangedNotification;
  *
  *  @param preset the preset dict.
  */
-- (void)addPreset:(NSDictionary *)preset;
+- (void)addPresetFromDictionary:(NSDictionary *)preset;
+
+/**
+ *  Adds a given preset to the manager.
+ *
+ *  @param preset the preset dict.
+ */
+- (void)addPreset:(HBPreset *)preset;
 
 /**
  *  Deletes the presets at the specified index path.
index 86bd7f4fa113dde174997c60d733b3707fa919f7..778963b7d73f07c1d9841b6f59739af9776ace7d 100644 (file)
@@ -229,7 +229,7 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     return retValue;
 }
 
-- (void)addPreset:(NSDictionary *)preset
+- (void)addPresetFromDictionary:(NSDictionary *)preset
 {
     HBPreset *presetNode = [[HBPreset alloc] initWithName:preset[@"PresetName"]
                                                    content:preset
@@ -241,6 +241,13 @@ NSString *HBPresetsChangedNotification = @"HBPresetsChangedNotification";
     [self savePresets];
 }
 
+- (void)addPreset:(HBPreset *)preset
+{
+    [self.root insertObject:preset inChildrenAtIndex:[self.root countOfChildren]];
+
+    [self savePresets];
+}
+
 - (void)deletePresetAtIndexPath:(NSIndexPath *)idx
 {
     HBPreset *parentNode = self.root;
diff --git a/macosx/HBQueueOutlineView.h b/macosx/HBQueueOutlineView.h
new file mode 100644 (file)
index 0000000..964c4f0
--- /dev/null
@@ -0,0 +1,46 @@
+//
+//  HBQueueOutlineView.h
+//  HandBrake
+//
+//  Created by Damiano Galassi on 23/11/14.
+//
+//
+
+#import <Cocoa/Cocoa.h>
+
+//------------------------------------------------------------------------------------
+// As usual, we need to subclass NSOutlineView to handle a few special cases:
+//
+// (1) variable row heights during live resizes
+// HBQueueOutlineView exists solely to get around a bug in variable row height outline
+// views in which row heights get messed up during live resizes. See this discussion:
+// http://lists.apple.com/archives/cocoa-dev/2005/Oct/msg00871.html
+// However, the recommeneded fix (override drawRect:) does not work. Instead, this
+// subclass implements viewDidEndLiveResize in order to recalculate all row heights.
+//
+// (2) prevent expanding of items during drags
+// During dragging operations, we don't want outline items to expand, since a queue
+// doesn't really have children items.
+//
+// (3) generate a drag image that incorporates more than just the first column
+// By default, NSTableView only drags an image of the first column. Change this to
+// drag an image of the queue's icon and desc columns.
+
+@protocol HBQueueOutlineViewDelegate
+
+@optional
+- (void)HB_deleteSelectionFromTableView:(NSTableView *)tableView;
+@end
+
+@interface HBQueueOutlineView : NSOutlineView
+
+@property (nonatomic, readonly) BOOL isDragging;
+
+/**
+ *  An index set containing the indexes of the targeted rows.
+ *  If the selected row indexes contain the clicked row index, it returns every selected row,
+ *  otherwise it returns only the clicked row index.
+ */
+- (NSIndexSet *)targetedRowIndexes;
+
+@end
\ No newline at end of file
diff --git a/macosx/HBQueueOutlineView.m b/macosx/HBQueueOutlineView.m
new file mode 100644 (file)
index 0000000..2408f91
--- /dev/null
@@ -0,0 +1,97 @@
+//
+//  HBQueueOutlineView.m
+//  HandBrake
+//
+//  Created by Damiano Galassi on 23/11/14.
+//
+//
+
+#import "HBQueueOutlineView.h"
+
+@implementation HBQueueOutlineView
+
+- (void)viewDidEndLiveResize
+{
+    // Since we disabled calculating row heights during a live resize, force them to
+    // recalculate now.
+    [self noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, [self numberOfRows])]];
+    [super viewDidEndLiveResize];
+}
+
+/* This should be for dragging, we take this info from the presets right now */
+- (NSImage *)dragImageForRowsWithIndexes:(NSIndexSet *)dragRows
+                            tableColumns:(NSArray *)tableColumns
+                                   event:(NSEvent *)dragEvent
+                                  offset:(NSPointPointer)dragImageOffset
+{
+    _isDragging = YES;
+
+    // By default, NSTableView only drags an image of the first column. Change this to
+    // drag an image of the queue's icon and desc and action columns.
+    NSArray *cols = @[[self tableColumnWithIdentifier:@"desc"],
+                      [self tableColumnWithIdentifier:@"icon"],
+                      [self tableColumnWithIdentifier:@"action"]];
+
+    return [super dragImageForRowsWithIndexes:dragRows tableColumns:cols event:dragEvent offset:dragImageOffset];
+}
+
+- (void)mouseDown:(NSEvent *)theEvent
+{
+    [super mouseDown:theEvent];
+    _isDragging = NO;
+}
+
+- (void)keyDown:(NSEvent *)event
+{
+    id delegate = [self delegate];
+
+    unichar key = [[event charactersIgnoringModifiers] characterAtIndex:0];
+    if ((key == NSDeleteCharacter || key == NSDeleteFunctionKey) &&
+        [delegate respondsToSelector:@selector(HB_deleteSelectionFromTableView:)])
+    {
+        if ([self selectedRow] == -1)
+        {
+            NSBeep();
+        }
+        else
+        {
+            [delegate HB_deleteSelectionFromTableView:self];
+        }
+        return;
+    }
+    else
+    {
+        [super keyDown:event];
+    }
+}
+
+/**
+ *  An index set containing the indexes of the targeted rows.
+ *  If the selected row indexes contain the clicked row index, it returns every selected row,
+ *  otherwise it returns only the clicked row index.
+ */
+- (NSIndexSet *)targetedRowIndexes
+{
+    NSMutableIndexSet *rowIndexes = [NSMutableIndexSet indexSet];
+    NSIndexSet *selectedRowIndexes = [self selectedRowIndexes];
+    NSInteger clickedRow = [self clickedRow];
+
+    if (clickedRow != -1)
+    {
+        [rowIndexes addIndex:clickedRow];
+
+        // If we clicked on a selected row, then we want to consider all rows in the selection. Otherwise, we only consider the clicked on row.
+        if ([selectedRowIndexes containsIndex:clickedRow])
+        {
+            [rowIndexes addIndexes:selectedRowIndexes];
+        }
+    }
+    else
+    {
+        [rowIndexes addIndexes:selectedRowIndexes];
+    }
+
+    return [[rowIndexes copy] autorelease];
+}
+
+@end
index 15c4c5b758673f36019944bd9d5ba50175d95fd4..b8094601fc473bd64efd03778c0da5371492b9b9 100644 (file)
                A9E1468116BC2AD800C307BC /* pause-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467D16BC2AD800C307BC /* pause-p.pdf */; };
                A9E1468216BC2AD800C307BC /* play-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467E16BC2AD800C307BC /* play-p.pdf */; };
                A9E1468316BC2AD800C307BC /* prev-p.pdf in Resources */ = {isa = PBXBuildFile; fileRef = A9E1467F16BC2AD800C307BC /* prev-p.pdf */; };
+               A9E2FD271A21BC4A000E8D3F /* HBAddPresetController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9E2FD251A21BC4A000E8D3F /* HBAddPresetController.m */; };
+               A9E2FD2B1A21BC6F000E8D3F /* AddPreset.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9E2FD291A21BC6F000E8D3F /* AddPreset.xib */; };
                A9F2EB6F196F12C800066546 /* Audio.xib in Resources */ = {isa = PBXBuildFile; fileRef = A9F2EB6D196F12C800066546 /* Audio.xib */; };
                A9F472891976B7F30009EC65 /* HBSubtitlesDefaultsController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F472871976B7F30009EC65 /* HBSubtitlesDefaultsController.m */; };
                A9F4728D1976BAA70009EC65 /* HBSubtitlesDefaults.m in Sources */ = {isa = PBXBuildFile; fileRef = A9F4728C1976BAA70009EC65 /* HBSubtitlesDefaults.m */; };
                A9E1467D16BC2AD800C307BC /* pause-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "pause-p.pdf"; sourceTree = "<group>"; };
                A9E1467E16BC2AD800C307BC /* play-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "play-p.pdf"; sourceTree = "<group>"; };
                A9E1467F16BC2AD800C307BC /* prev-p.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "prev-p.pdf"; sourceTree = "<group>"; };
+               A9E2FD241A21BC4A000E8D3F /* HBAddPresetController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBAddPresetController.h; sourceTree = "<group>"; };
+               A9E2FD251A21BC4A000E8D3F /* HBAddPresetController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBAddPresetController.m; sourceTree = "<group>"; };
+               A9E2FD2A1A21BC6F000E8D3F /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = AddPreset.xib; sourceTree = "<group>"; };
                A9F2EB6E196F12C800066546 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = Audio.xib; sourceTree = "<group>"; };
                A9F472861976B7F30009EC65 /* HBSubtitlesDefaultsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HBSubtitlesDefaultsController.h; sourceTree = "<group>"; };
                A9F472871976B7F30009EC65 /* HBSubtitlesDefaultsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HBSubtitlesDefaultsController.m; sourceTree = "<group>"; };
                                273F217C14ADDDA10021BE6D /* InfoPlist.strings */,
                                273F217E14ADDDA10021BE6D /* MainMenu.xib */,
                                A9CF25EF1990D62C0023F727 /* Presets.xib */,
+                               A9E2FD291A21BC6F000E8D3F /* AddPreset.xib */,
                                A93E0ED51972958C00FD67FB /* Video.xib */,
                                A9F2EB6D196F12C800066546 /* Audio.xib */,
                                A932E26A1988334B0047D13E /* AudioDefaults.xib */,
                                273F20AA14ADBE670021BE6D /* PictureController.m */,
                                273F20A314ADBE670021BE6D /* HBPreviewController.h */,
                                273F20A414ADBE670021BE6D /* HBPreviewController.m */,
+                               A9E2FD241A21BC4A000E8D3F /* HBAddPresetController.h */,
+                               A9E2FD251A21BC4A000E8D3F /* HBAddPresetController.m */,
                        );
                        name = Controllers;
                        sourceTree = "<group>";
                                273F216814ADCBF80021BE6D /* RevealHighlight.png in Resources */,
                                A91C02521A165EA200DEA6F3 /* EncodeComplete.png in Resources */,
                                273F216914ADCBF80021BE6D /* RevealHighlightPressed.png in Resources */,
+                               A9E2FD2B1A21BC6F000E8D3F /* AddPreset.xib in Resources */,
                                273F216A14ADCBF80021BE6D /* RevealPressed.png in Resources */,
                                273F218A14ADDDA10021BE6D /* AdvancedView.xib in Resources */,
                                273F218B14ADDDA10021BE6D /* InfoPlist.strings in Resources */,
                                A9C9F88919A733FE00DC8923 /* HBHUDView.m in Sources */,
                                A932E26F198833920047D13E /* HBAudioDefaultsController.m in Sources */,
                                46AB433515F98A2B009C0961 /* DockTextField.m in Sources */,
+                               A9E2FD271A21BC4A000E8D3F /* HBAddPresetController.m in Sources */,
                                A9D488A51996270300E9B1BA /* HBTreeNode.m in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                        name = Subtitles.xib;
                        sourceTree = "<group>";
                };
+               A9E2FD291A21BC6F000E8D3F /* AddPreset.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               A9E2FD2A1A21BC6F000E8D3F /* English */,
+                       );
+                       name = AddPreset.xib;
+                       sourceTree = "<group>";
+               };
                A9F2EB6D196F12C800066546 /* Audio.xib */ = {
                        isa = PBXVariantGroup;
                        children = (