]> granicus.if.org Git - handbrake/commitdiff
MacGui: Initial User Presets Implementation
authordynaflash <dynaflashtech@gmail.com>
Wed, 21 Feb 2007 22:40:28 +0000 (22:40 +0000)
committerdynaflash <dynaflashtech@gmail.com>
Wed, 21 Feb 2007 22:40:28 +0000 (22:40 +0000)
- Presets displayed in drawer in main window
- Presets stored in ~Libraries/Application Support/MediaFork/userpresets.plist
- Preference to show/hide presets drawer upon launch
- Confirmation window comes up when you delete a preset
Also added creation of x264profiles.plist in anticipation of x264 custom profiles

ToDo- Upcoming changes/additons:
- Alphabetize Presets List
- Change ugly button on main window to toggle drawer
- Specify a preset as default to set upon launch
- Deselect preset after it has been clicked
- Incorporate Picture settings into preset
- Pref on whether or not to alert upon Preset deletion
- Some more I can think of right now!

git-svn-id: svn://svn.handbrake.fr/HandBrake/branches/0.8.0_beta2_5.1@388 b64f7644-9d1e-0410-96f1-a4d463321fa5

macosx/Controller.h
macosx/Controller.mm
macosx/English.lproj/MainMenu.nib/classes.nib
macosx/English.lproj/MainMenu.nib/info.nib
macosx/English.lproj/MainMenu.nib/keyedobjects.nib
macosx/PrefsController.h
macosx/PrefsController.m

index 9f38e00c265fd821ba0caac3b74ac2a6a752a63d..8d002a1a499be13579ab5f39d2baa3c032e0fc3a 100644 (file)
     IBOutlet NSButton            * fPauseButton;
     IBOutlet NSButton            * fRipButton;
 
+       /* User Preset variables here*/
+       
+       IBOutlet NSDrawer            * fPresetDrawer;
+       IBOutlet NSTextField         * fPresetNewName;
+       IBOutlet NSTextField         * fPresetSelectedDisplay;
+       
+       NSString * AppSupportDirectory;
+       NSString * UserPresetsFile;
+       NSString * x264ProfilesFile;
+       NSMutableArray * UserPresets;
+       NSMutableArray * x264Profiles;
+       NSMutableArray *UserPresetssortedArray;
+       NSMutableDictionary * chosenPreset;
+
+       
+    IBOutlet NSPanel            * fAddPresetPanel;
+       IBOutlet NSTableView         * tableView;
+       IBOutlet NSButton            * fPresetsAdd;
+       IBOutlet NSButton            * fPresetsDelete;
     hb_handle_t                  * fHandle;
        hb_title_t                   * fTitle;
 }
 - (IBAction) OpenHomepage: (id) sender;
 - (IBAction) OpenForums:   (id) sender;
 
+// Preset Methods Here
+
+- (IBAction) ShowAddPresetPanel: (id) sender;
+- (IBAction) CloseAddPresetPanel: (id) sender;
+- (NSDictionary *)CreatePreset;  
+
+- (void) savePreset;
+- (IBAction)addPreset:(id)sender;
+- (IBAction)deletePreset:(id)sender;
+- (IBAction)tableViewSelected:(id)sender;
+// NSTableDataSource methods
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView;
+- (id)tableView:(NSTableView *)aTableView
+      objectValueForTableColumn:(NSTableColumn *)aTableColumn
+      row:(int)rowIndex;
+- (void)tableView:(NSTableView *)aTableView
+        setObjectValue:(id)anObject
+        forTableColumn:(NSTableColumn *)aTableColumn
+        row:(int)rowIndex;
+
 @end
 
index c848eac6f9608745da8af8c24075ca60388bb0ee..333307acbf86d413dfeec79c663c5888684cd4a4 100644 (file)
@@ -94,7 +94,60 @@ static int FormatSettings[3][4] =
 
     [self TranslateStrings];
 
-    /* Destination box */
+       /* Init User Presets .plist */
+       /* We declare the default NSFileManager into fileManager */
+       NSFileManager * fileManager = [NSFileManager defaultManager];
+       //presetPrefs = [[NSUserDefaults standardUserDefaults] retain];
+       /* we set the files and support paths here */
+       AppSupportDirectory = @"~/Library/Application Support/MediaFork";
+    AppSupportDirectory = [AppSupportDirectory stringByExpandingTildeInPath];
+    
+       UserPresetsFile = @"~/Library/Application Support/MediaFork/presets.plist";
+    UserPresetsFile = [UserPresetsFile stringByExpandingTildeInPath];
+       
+       x264ProfilesFile = @"~/Library/Application Support/MediaFork/x264profiles.plist";
+    x264ProfilesFile = [x264ProfilesFile stringByExpandingTildeInPath];
+       /* We check for the app support directory for media fork */
+       if ([fileManager fileExistsAtPath:AppSupportDirectory] == 0) 
+       {
+               // If it doesnt exist yet, we create it here 
+               [fileManager createDirectoryAtPath:AppSupportDirectory attributes:nil];
+       }
+       // We check for the presets.plist here
+       
+       if ([fileManager fileExistsAtPath:UserPresetsFile] == 0) 
+       {
+
+               [fileManager createFileAtPath:UserPresetsFile contents:nil attributes:nil];
+               
+       }
+       // We check for the x264profiles.plist here
+        
+       if ([fileManager fileExistsAtPath:x264ProfilesFile] == 0) 
+       {
+        
+               [fileManager createFileAtPath:x264ProfilesFile contents:nil attributes:nil];
+       }
+    
+       
+  UserPresetsFile = @"~/Library/Application Support/MediaFork/presets.plist";
+  UserPresetsFile = [[UserPresetsFile stringByExpandingTildeInPath]retain];
+
+  UserPresets = [[NSMutableArray alloc] initWithContentsOfFile:UserPresetsFile];
+  if (nil == UserPresets) 
+  {
+    UserPresets = [[NSMutableArray alloc] init];
+  }
+  /* Show/Dont Show Presets drawer upon launch based
+  on user preference DefaultPresetsDrawerShow*/
+if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DefaultPresetsDrawerShow"] > 0)
+               {
+                       [fPresetDrawer open];
+               }
+
+
+
+    /* Destination box*/
     [fDstFormatPopUp removeAllItems];
     [fDstFormatPopUp addItemWithTitle: _( @"MP4 file" )];
     [fDstFormatPopUp addItemWithTitle: _( @"AVI file" )];
@@ -168,8 +221,12 @@ static int FormatSettings[3][4] =
     [self EnableUI: NO];
     [fPauseButton setEnabled: NO];
     [fRipButton setEnabled: NO];
+
+
+
 }
 
+
 - (void) TranslateStrings
 {
     [fSrcDVD1Field      setStringValue: _( @"DVD:" )];
@@ -315,11 +372,13 @@ static int FormatSettings[3][4] =
                                
                                /* Use the dvd name in the default output field here 
                                May want to add code to remove blank spaces for some dvd names*/
-                               
                                [fDstFile2Field setStringValue: [NSString stringWithFormat:
                 @"%@/Desktop/%@.mp4", NSHomeDirectory(),[NSString
                   stringWithUTF8String: title->name]]];
-                /* Temporarily comment out to fix title selection*/   
+                               [fDstFile2Field setStringValue: [NSString stringWithFormat:
+                @"%@/Desktop/%@.mp4", NSHomeDirectory(),[NSString
+                  stringWithUTF8String: title->name]]];
+                  
                 if (longuestpri < title->hours*60*60 + title->minutes *60 + title->seconds)
                 {
                        longuestpri=title->hours*60*60 + title->minutes *60 + title->seconds;
@@ -794,7 +853,7 @@ static int FormatSettings[3][4] =
         job->pass = 1;
         hb_add( fHandle, job );
         job->pass = 2;
-               job->x264opts = strdup([[[NSUserDefaults standardUserDefaults] stringForKey:@"DefAdvancedx264Flags"] cString]);
+                 job->x264opts = strdup([[[NSUserDefaults standardUserDefaults] stringForKey:@"DefAdvancedx264Flags"] cString]);
         hb_add( fHandle, job );
     }
     else
@@ -1357,6 +1416,207 @@ static int FormatSettings[3][4] =
             [fVidTargetSizeField intValue] )];
 }
 
+- (IBAction) ShowAddPresetPanel: (id) sender
+{
+    /* Update the OutlineView */
+    //[fQueueController Update: sender];
+
+    /* Show the panel */
+    [NSApp beginSheet: fAddPresetPanel modalForWindow: fWindow
+        modalDelegate: NULL didEndSelector: NULL contextInfo: NULL];
+    [NSApp runModalForWindow: fAddPresetPanel];
+    [NSApp endSheet: fAddPresetPanel];
+    [fAddPresetPanel orderOut: self];
+}
+- (IBAction) CloseAddPresetPanel: (id) sender
+{
+    [NSApp stopModal];
+}
+
+- (IBAction)addPreset:(id)sender
+{
+    [UserPresets addObject:[self CreatePreset]];
+       
+       /* We stop the modal window for the new preset */
+       [fPresetNewName    setStringValue: @""];
+       [NSApp stopModal];
+       /* We Reload the New Table data for presets */
+    [tableView reloadData];
+   /* We save all of the preset data here */
+    [self savePreset];
+}
+- (NSDictionary *)CreatePreset
+{
+    NSMutableDictionary *preset = [[NSMutableDictionary alloc] init];
+       /* Get the New Preset Name from the field in the AddPresetPanel */
+    [preset setObject:[fPresetNewName stringValue] forKey:@"PresetName"];
+       /* File Format */
+    [preset setObject:[fDstFormatPopUp titleOfSelectedItem] forKey:@"FileFormat"];
+       /* Codecs */
+       [preset setObject:[fDstCodecsPopUp titleOfSelectedItem] forKey:@"FileCodecs"];
+       /* Video encoder */
+       [preset setObject:[fVidEncoderPopUp titleOfSelectedItem] forKey:@"VideoEncoder"];
+       /* Video quality */
+       [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 */
+       [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"];
+       
+       /*Audio*/
+       /* Audio Language One*/
+       [preset setObject:[fAudLang1PopUp titleOfSelectedItem] forKey:@"AudioLang1"];
+       /* Audio Language One Surround Sound Checkbox*/
+       [preset setObject:[NSNumber numberWithInt:[fAudLang1SurroundCheck state]] forKey:@"AudioLang1Surround"];
+       /* Audio Sample Rate*/
+       [preset setObject:[fAudRatePopUp titleOfSelectedItem] forKey:@"AudioSampleRate"];
+       /* Audio Bitrate Rate*/
+       [preset setObject:[fAudBitratePopUp titleOfSelectedItem] forKey:@"AudioBitRate"];
+       /* Subtitles*/
+       [preset setObject:[fSubPopUp titleOfSelectedItem] forKey:@"Subtitles"];
+       
+
+    [preset autorelease];
+    return preset;
+
+}
+
+- (IBAction)deletePreset:(id)sender
+{
+    int status;
+    NSEnumerator *enumerator;
+    NSNumber *index;
+    NSMutableArray *tempArray;
+    id tempObject;
+    
+    if ( [tableView numberOfSelectedRows] == 0 )
+        return;
+    /* Alert user before deleting preset */
+       /* Comment out for now, tie to user pref eventually */
+    NSBeep();
+    status = NSRunAlertPanel(@"Warning!", @"Are you sure that you want to delete the selected preset?", @"OK", @"Cancel", nil);
+    
+    if ( status == NSAlertDefaultReturn ) {
+        enumerator = [tableView selectedRowEnumerator];
+        tempArray = [NSMutableArray array];
+        
+        while ( (index = [enumerator nextObject]) ) {
+            tempObject = [UserPresets objectAtIndex:[index intValue]];
+            [tempArray addObject:tempObject];
+        }
+        
+        [UserPresets removeObjectsInArray:tempArray];
+        [tableView reloadData];
+        [self savePreset];   
+    }
+}
+- (IBAction)tableViewSelected:(id)sender
+{
+
+    /* we get the chosen preset from the UserPresets array */
+       chosenPreset = [UserPresets objectAtIndex:[sender selectedRow]];
+       /* we set the preset display field in main window here */
+       [fPresetSelectedDisplay setStringValue: [NSString stringWithFormat: @"%@", [chosenPreset valueForKey:@"PresetName"]]];
+       /* File Format */
+       [fDstFormatPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileFormat"]]];
+       [self FormatPopUpChanged: NULL];
+    /* Codecs */
+       [fDstCodecsPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"FileCodecs"]]];
+       [self CodecsPopUpChanged: NULL];
+       /* Video encoder */
+       [fVidEncoderPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoEncoder"]]];
+       /* Lets run through the following functions to get variables set there */
+       [self EncoderPopUpChanged: sender];
+       [self Check6ChannelAACExtraction: sender];
+       [self CalculateBitrate: sender];
+       
+       /* Video quality */
+       [fVidQualityMatrix selectCellAtRow:[[chosenPreset objectForKey:@"VideoQualityType"] intValue] column:0];
+       
+       [fVidTargetSizeField setStringValue: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoTargetSize"]]];
+       //[preset setObject:[fVidTargetSizeField stringValue] forKey:@"VideoTargetSize"];
+       [fVidBitrateField setStringValue: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoAvgBitrate"]]];
+              //[preset setObject:[fVidBitrateField stringValue] forKey:@"VideoAvgBitrate"];
+       // TO DO: NEED TO SET THE QUALITY SLIDER WITH FLOAT VALUE, I THINK
+       [fVidQualitySlider setFloatValue: [[chosenPreset valueForKey:@"VideoQualitySlider"] floatValue]];
+                         //[preset setObject:[NSNumber numberWithInt:[fVidQualitySlider floatValue]] forKey:@"VideoQualitySlider"];
+       [self VideoMatrixChanged: sender];
+       
+       /* Video framerate */
+       [fVidRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"VideoFramerate"]]];
+       
+       /* GrayScale */
+       [fVidGrayscaleCheck setState:[[chosenPreset objectForKey:@"VideoGrayScale"] intValue]];
+       //[preset setObject:[NSNumber numberWithInt:[fVidGrayscaleCheck state]] forKey:@"VideoGrayScale"];
+       /* 2 Pass Encoding */
+       [fVidTwoPassCheck setState:[[chosenPreset objectForKey:@"VideoTwoPass"] intValue]];
+       //[preset setObject:[NSNumber numberWithInt:[fVidTwoPassCheck state]] forKey:@"VideoTwoPass"];
+       
+       /*Audio*/
+       /* Audio Language One*/
+       [fAudLang1PopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioLang1"]]];
+       /* Audio Language One Surround Sound Checkbox*/
+       [fAudLang1SurroundCheck setState:[[chosenPreset objectForKey:@"AudioLang1Surround"] intValue]];
+       [self Check6ChannelAACExtraction: sender];
+       /* Audio Sample Rate*/
+       [fAudRatePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioSampleRate"]]];
+       /* Audio Bitrate Rate*/
+       [fAudBitratePopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"AudioBitRate"]]];
+       /*Subtitles*/
+       [fSubPopUp selectItemWithTitle: [NSString stringWithFormat:[chosenPreset valueForKey:@"Subtitles"]]];
+       
+}
+
+- (int)numberOfRowsInTableView:(NSTableView *)aTableView
+{
+    return [UserPresets count];
+}
+
+- (id)tableView:(NSTableView *)aTableView
+      objectValueForTableColumn:(NSTableColumn *)aTableColumn
+      row:(int)rowIndex
+{
+    
+       //Lets sort UserPresets here if we can
+       
+       
+       id theRecord, theValue;
+    
+    theRecord = [UserPresets objectAtIndex:rowIndex];
+    theValue = [theRecord objectForKey:[aTableColumn identifier]];
+    
+    return theValue;
+}
+
+// NSTableDataSource method that we implement to edit values directly in the table...
+- (void)tableView:(NSTableView *)aTableView
+        setObjectValue:(id)anObject
+        forTableColumn:(NSTableColumn *)aTableColumn
+        row:(int)rowIndex
+{
+    id theRecord;
+    
+    theRecord = [UserPresets objectAtIndex:rowIndex];
+    [theRecord setObject:anObject forKey:[aTableColumn identifier]];
+    
+    // Don't forget to save the changes
+    //[self savePreset];
+}
+
+
+- (void)savePreset
+{
+    [UserPresets writeToFile:UserPresetsFile atomically:YES];
+
+}
+
+
 - (void) controlTextDidBeginEditing: (NSNotification *) notification
 {
     [self CalculateBitrate: NULL];
@@ -1384,4 +1644,6 @@ static int FormatSettings[3][4] =
         URLWithString:@"http://mediafork.dynalias.com/forum/"]];
 }
 
+
+
 @end
index e93e433ac421b62ba93025c39c3926633e156dde..616b6604142f0fdbc0351b4f69f327d7c8c7fba9 100644 (file)
@@ -7,26 +7,33 @@
                 CalculateBitrate = id; 
                 Cancel = id; 
                 ChapterPopUpChanged = id; 
+                CloseAddPresetPanel = id; 
                 CodecsPopUpChanged = id; 
                 EnableQueue = id; 
                 EncoderPopUpChanged = id; 
                 FormatPopUpChanged = id; 
+                InsertPreset = id; 
                 LanguagePopUpChanged = id; 
                 OpenForums = id; 
                 OpenHomepage = id; 
                 Pause = id; 
                 QualitySliderChanged = id; 
                 Rip = id; 
+                ShowAddPresetPanel = id; 
                 ShowPicturePanel = id; 
                 ShowQueuePanel = id; 
                 ShowScanPanel = id; 
                 TitlePopUpChanged = id; 
                 VideoMatrixChanged = id; 
+                addPreset = id; 
+                deletePreset = id; 
+                tableViewSelected = id; 
             }; 
             CLASS = HBController; 
             LANGUAGE = ObjC; 
             OUTLETS = {
-                fAddToQuButton = NSButton; 
+                fAddPresetPanel = NSPanel; 
+                fAddToQuButton = NSTableView; 
                 fAudBitrateField = NSTextField; 
                 fAudBitratePopUp = NSPopUpButton; 
                 fAudLang1Field = NSTextField; 
                 fPictureButton = NSButton; 
                 fPictureController = PictureController; 
                 fPicturePanel = NSPanel; 
+                fPresetDrawer = NSDrawer; 
+                fPresetNewName = NSTextField; 
+                fPresetSelectedDisplay = NSTextField; 
+                fPresetsAdd = NSButton; 
+                fPresetsDelete = NSButton; 
                 fQueueAddButton = NSButton; 
                 fQueueCheck = NSButton; 
                 fQueueController = QueueController; 
                 fVidTargetSizeField = NSTextField; 
                 fVidTwoPassCheck = NSButton; 
                 fWindow = NSWindow; 
+                tableView = NSTableView; 
             }; 
             SUPERCLASS = NSObject; 
         }, 
             CLASS = PrefsController; 
             LANGUAGE = ObjC; 
             OUTLETS = {
-                fDefAdvancedx264FlagsView = NSTextView
+                fDefAdvancedx264FlagsView = NSButton
                 fDefAudioSurround = NSButton; 
                 fDefCrf = NSButton; 
                 fDefDeinterlace = NSButton; 
                 fDefPicSizeAutoSetipod = NSButton; 
                 fDefPixelRatio = NSButton; 
+                fDefPresetDrawerShow = id; 
                 fFileExtItunes = NSButton; 
                 fPanel = NSPanel; 
                 fUpdateCheck = NSButton; 
index 5f53222db40f50ed141514ea360bd5dee0741ac8..24fe33cbe1cffe2d1188eb5b8f46d1599ef80a85 100644 (file)
@@ -3,11 +3,13 @@
 <plist version="1.0">
 <dict>
        <key>IBDocumentLocation</key>
-       <string>-12 -50 555 411 0 0 1440 878 </string>
+       <string>25 277 630 601 0 0 1440 878 </string>
        <key>IBEditorPositions</key>
        <dict>
+               <key>1843</key>
+               <string>610 276 220 592 0 0 1440 878 </string>
                <key>29</key>
-               <string>102 834 258 44 0 0 1440 878 </string>
+               <string>102 834 300 44 0 0 1440 878 </string>
        </dict>
        <key>IBFramework Version</key>
        <string>446.1</string>
@@ -17,7 +19,8 @@
        </array>
        <key>IBOpenObjects</key>
        <array>
-               <integer>1438</integer>
+               <integer>29</integer>
+               <integer>21</integer>
        </array>
        <key>IBSystem Version</key>
        <string>8L127</string>
index 1ca85822d9093f9c45621be960bf08992ab12cb2..e9bb44b725272e5da3467c9ae9108e19cdc13607 100644 (file)
Binary files a/macosx/English.lproj/MainMenu.nib/keyedobjects.nib and b/macosx/English.lproj/MainMenu.nib/keyedobjects.nib differ
index 2aa72b940a63aec04afbb8269a12d7f56759071e..a9ccb54a43d8038359d50aa505ab91f721d192d0 100644 (file)
@@ -13,6 +13,7 @@
        IBOutlet NSButton * fDefPicSizeAutoSetipod;
        IBOutlet NSButton * fDefPixelRatio;
        IBOutlet NSButton * fDefAudioSurround;
+       IBOutlet NSButton * fDefPresetDrawerShow;
 
        IBOutlet NSTextView * fDefAdvancedx264FlagsView;
 }
index 78586d95ce1440e3fdf0ed720a4f0eb8f74c6def..ad1e6f6d326f8be4e8efdbd3dc52a6a382b24c40 100644 (file)
                    forKey:@"DefaultSurroundSound"];
        appDefaults = [NSDictionary dictionaryWithObject:@""
                    forKey:@"DefAdvancedx264Flags"];
+       appDefaults = [NSDictionary dictionaryWithObject:@"YES"
+                   forKey:@"DefaultPresetsDrawerShow"];
        
     [defaults registerDefaults: appDefaults];
 
        /* fUpdateCheck Check or uncheck according to the preferences */
     [fUpdateCheck setState: [defaults boolForKey:@"CheckForUpdates"] ?
         NSOnState : NSOffState];
-       
 
        // Fill the languages combobox
     [fdefaultlanguage removeAllItems];
                
        /* Insert default DefAdvanced x264 Flag here */
        [fDefAdvancedx264FlagsView setString:[defaults stringForKey:@"DefAdvancedx264Flags"]];
+       
+       
+       
 }
 
 
                
        /*Advanced x264 Flag string into */
       [defaults setObject:[fDefAdvancedx264FlagsView string]  forKey:@"DefAdvancedx264Flags"]; 
+         
+           /* Show Presets Drawer upon launch*/
+       
+       if( [fDefPresetDrawerShow state] == NSOnState )
+    {
+        [defaults setObject:@"YES" forKey:@"DefaultPresetsDrawerShow"];
+    }
+    else
+    {
+        [defaults setObject:@"NO" forKey:@"DefaultPresetsDrawerShow"];
+    }
+
 }
 
 @end