diff options
-rw-r--r-- | macosx/Controller.h | 10 | ||||
-rw-r--r-- | macosx/Controller.m | 603 | ||||
-rw-r--r-- | macosx/English.lproj/Queue.xib | 973 | ||||
-rw-r--r-- | macosx/HBQueueController.h | 1 | ||||
-rw-r--r-- | macosx/HBQueueController.mm | 50 | ||||
-rw-r--r-- | macosx/HBSubtitles.h | 2 | ||||
-rw-r--r-- | macosx/HBSubtitles.m | 48 |
7 files changed, 1347 insertions, 340 deletions
diff --git a/macosx/Controller.h b/macosx/Controller.h index 22b3d39a8..d4524169f 100644 --- a/macosx/Controller.h +++ b/macosx/Controller.h @@ -243,7 +243,7 @@ BOOL fIsDragging; NSMutableDictionary *presetUserDefault;// this is 2 in "Default" preset key NSMutableDictionary *presetUserDefaultParent; NSMutableDictionary *presetUserDefaultParentParent; - int presetCurrentBuiltInCount; // keeps track of the current number of built in presets + int presetCurrentBuiltInCount; // keeps track of the current number of built in presets IBOutlet NSPanel * fAddPresetPanel; /* NSOutline View for the presets */ @@ -265,6 +265,8 @@ BOOL fIsDragging; int fCanceledCount; int fWorkingCount; + int fqueueEditRescanItemNum; // queue array item to be reloaded into the main window + /* integer to set to determine the previous state of encode 0==idle, 1==encoding, 2==cancelled*/ @@ -346,7 +348,11 @@ BOOL fIsDragging; - (void) performNewQueueScan:(NSString *) scanPath scanTitleNum: (int) scanTitleNum; - (void) processNewQueueEncode; - (void) clearQueueEncodedItems; -- (IBAction)applyQueueSettings:(id)sender; +/* Queue Editing */ +- (IBAction)applyQueueSettingsToMainWindow:(id)sender; +- (IBAction)rescanQueueItemToMainWindow:(NSString *) scanPath scanTitleNum: (int) scanTitleNum selectedQueueItem: (int) selectedQueueItem; + + - (void) removeQueueFileItem:(int) queueItemToRemove; - (void) clearQueueAllItems; - (void)moveObjectsInQueueArray:(NSMutableArray *)array fromIndexes:(NSIndexSet *)indexSet toIndex:(NSUInteger)insertIndex; diff --git a/macosx/Controller.m b/macosx/Controller.m index 7a093c25c..0b2ca9364 100644 --- a/macosx/Controller.m +++ b/macosx/Controller.m @@ -202,8 +202,6 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It NSLocalizedString(@" Do you want to reload them ?", nil)); } - // call didDimissReloadQueue: (NSWindow *)sheet returnCode: (int)returnCode contextInfo: (void *)contextInfo - // right below to either clear the old queue or keep it loaded up. } else { @@ -228,8 +226,6 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It int hbInstances = 0; for (aDictionary in runningAppDictionaries) { - // NSLog(@"Open App: %@", [aDictionary valueForKey:@"NSApplicationName"]); - if ([[aDictionary valueForKey:@"NSApplicationName"] isEqualToString:@"HandBrake"]) { hbInstances++; @@ -1551,6 +1547,7 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It /* make sure we remove any path extension as this can also be an '.mpg' file */ browsedSourceDisplayName = [[path lastPathComponent] retain]; } + applyQueueToScan = NO; [self performScan:path scanTitleNum:0]; } @@ -1583,7 +1580,7 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It { [NSApp endSheet: fScanSrcTitlePanel]; [fScanSrcTitlePanel orderOut: self]; - + if(sender == fScanSrcTitleOpenButton) { /* We setup the scan status in the main window to indicate a source title scan */ @@ -1593,8 +1590,9 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It [fScanIndicator startAnimation: nil]; /* We use the performScan method to actually perform the specified scan passing the path and the title - * to be scanned - */ + * to be scanned + */ + applyQueueToScan = NO; [self performScan:[fScanSrcTitlePathField stringValue] scanTitleNum:[fScanSrcTitleNumField intValue]]; } } @@ -1602,8 +1600,7 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It /* Here we actually tell hb_scan to perform the source scan, using the path to source and title number*/ - (void) performScan:(NSString *) scanPath scanTitleNum: (int) scanTitleNum { - /* set the bool applyQueueToScan so that we dont apply a queue setting to the final scan */ - applyQueueToScan = NO; + /* use a bool to determine whether or not we can decrypt using vlc */ BOOL cancelScanDecrypt = 0; BOOL vlcFound = 0; @@ -1796,7 +1793,7 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It /* We use our advance pref to determine how many previews to scan */ int hb_num_previews = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PreviewsNumber"] intValue]; /* set title to NULL */ - //fTitle = NULL; + fTitle = NULL; hb_scan( fHandle, [path UTF8String], scanTitleNum, hb_num_previews, 1 ); [fSrcDVD2Field setStringValue:@"Scanning new source ..."]; } @@ -1833,11 +1830,25 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It } else { - /* We increment the successful scancount here by one, + if (applyQueueToScan == YES) + { + /* we are a rescan of an existing queue item and need to apply the queued settings to the scan */ + [self writeToActivityLog: "showNewScan: This is a queued item rescan"]; + + } + else if (applyQueueToScan == NO) + { + [self writeToActivityLog: "showNewScan: This is a new source item scan"]; + } + else + { + [self writeToActivityLog: "showNewScan: cannot grok scan status"]; + } + + /* We increment the successful scancount here by one, which we use at the end of this function to tell the gui if this is the first successful scan since launch and whether or not we should set all settings to the defaults */ - currentSuccessfulScanCount++; [[fWindow toolbar] validateVisibleItems]; @@ -1849,12 +1860,20 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It currentSource = [NSString stringWithUTF8String: title->name]; /*Set DVD Name at top of window with the browsedSourceDisplayName grokked right before -performScan */ + if (!browsedSourceDisplayName) + { + browsedSourceDisplayName = @"NoNameDetected"; + } [fSrcDVD2Field setStringValue:browsedSourceDisplayName]; - /* Use the dvd name in the default output field here - May want to add code to remove blank spaces for some dvd names*/ + /* If its a queue rescan for edit, get the queue item output path */ + /* if not, its a new source scan. */ /* Check to see if the last destination has been set,use if so, if not, use Desktop */ - if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"]) + if (applyQueueToScan == YES) + { + [fDstFile2Field setStringValue: [NSString stringWithFormat:@"%@", [[QueueFileArray objectAtIndex:fqueueEditRescanItemNum] objectForKey:@"DestinationPath"]]]; + } + else if ([[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"]) { [fDstFile2Field setStringValue: [NSString stringWithFormat: @"%@/%@.mp4", [[NSUserDefaults standardUserDefaults] stringForKey:@"LastDestinationDirectory"],[browsedSourceDisplayName stringByDeletingPathExtension]]]; @@ -1909,6 +1928,13 @@ static NSString * ChooseSourceIdentifier = @"Choose Source It [self showPicturePanel:nil]; } + if (applyQueueToScan == YES) + { + /* we are a rescan of an existing queue item and need to apply the queued settings to the scan */ + [self writeToActivityLog: "showNewScan: calling applyQueueSettingsToMainWindow"]; + [self applyQueueSettingsToMainWindow:nil]; + + } } @@ -2537,15 +2563,10 @@ fWorkingCount = 0; /* set the bool so that showNewScan knows to apply the appropriate queue * settings as this is a queue rescan */ - applyQueueToScan = YES; + //applyQueueToScan = YES; NSString *path = scanPath; HBDVDDetector *detector = [HBDVDDetector detectorForPath:path]; - - /*On Screen Notification*/ - //int status; - //status = NSRunAlertPanel(@"HandBrake is now loading up a new queue item...",@"Would You Like to wait until you add another encode?", @"Cancel", @"Okay", nil); - //[NSApp requestUserAttention:NSCriticalRequest]; - + if( [detector isVideoDVD] ) { // The chosen path was actually on a DVD, so use the raw block @@ -2612,22 +2633,134 @@ fWorkingCount = 0; } } -/* This method was originally used to load up a new queue item in the gui and - * then start processing it. However we now have modified -prepareJob and use a second - * instance of libhb to do our actual encoding, therefor right now it is not required. - * Nonetheless I want to leave this in here - * because basically its everything we need to be able to actually modify a pending queue - * item in the gui and resave it. At least for now - dynaflash - */ - -- (IBAction)applyQueueSettings:(id)sender +/* This assumes that we have re-scanned and loaded up a new queue item to send to libhb as fQueueEncodeLibhb */ +- (void) processNewQueueEncode { + hb_list_t * list = hb_get_titles( fQueueEncodeLibhb ); + hb_title_t * title = (hb_title_t *) hb_list_item( list,0 ); // is always zero since now its a single title scan + hb_job_t * job = title->job; + + if( !hb_list_count( list ) ) + { + [self writeToActivityLog: "processNewQueueEncode WARNING nothing found in the title list"]; + } + NSMutableDictionary * queueToApply = [QueueFileArray objectAtIndex:currentQueueEncodeIndex]; - hb_job_t * job = fTitle->job; + [self writeToActivityLog: "Preset: %s", [[queueToApply objectForKey:@"PresetName"] UTF8String]]; + [self writeToActivityLog: "processNewQueueEncode number of passes expected is: %d", ([[queueToApply objectForKey:@"VideoTwoPass"] intValue] + 1)]; + job->file = [[queueToApply objectForKey:@"DestinationPath"] UTF8String]; + //[self writeToActivityLog: "processNewQueueEncode sending to prepareJob"]; + [self prepareJob]; + /* + * If scanning we need to do some extra setup of the job. + */ + if( job->indepth_scan == 1 ) + { + char *x264opts_tmp; + + /* + * When subtitle scan is enabled do a fast pre-scan job + * which will determine which subtitles to enable, if any. + */ + job->pass = -1; + x264opts_tmp = job->x264opts; + + job->x264opts = NULL; + + job->indepth_scan = 1; + + + /* + * Add the pre-scan job + */ + hb_add( fQueueEncodeLibhb, job ); + job->x264opts = x264opts_tmp; + } + + + if( [[queueToApply objectForKey:@"VideoTwoPass"] intValue] == 1 ) + { + job->indepth_scan = 0; + + + + job->pass = 1; + + hb_add( fQueueEncodeLibhb, job ); + + job->pass = 2; + + job->x264opts = (char *)calloc(1024, 1); /* Fixme, this just leaks */ + strcpy(job->x264opts, [[queueToApply objectForKey:@"x264Option"] UTF8String]); + + hb_add( fQueueEncodeLibhb, job ); + + } + else + { + job->indepth_scan = 0; + job->pass = 0; + + hb_add( fQueueEncodeLibhb, job ); + } + + NSString *destinationDirectory = [[queueToApply objectForKey:@"DestinationPath"] stringByDeletingLastPathComponent]; + [[NSUserDefaults standardUserDefaults] setObject:destinationDirectory forKey:@"LastDestinationDirectory"]; + /* Lets mark our new encode as 1 or "Encoding" */ + [queueToApply setObject:[NSNumber numberWithInt:1] forKey:@"Status"]; + [self saveQueueFileItem]; + + /* we need to clean up the subtitle tracks after the job(s) have been set */ + int num_subtitle_tracks = hb_list_count(job->list_subtitle); + int ii; + for(ii = 0; ii < num_subtitle_tracks; ii++) + { + hb_subtitle_t * subtitle; + subtitle = (hb_subtitle_t *)hb_list_item(job->list_subtitle, 0); + + + hb_list_rem(job->list_subtitle, subtitle); + free(subtitle); + } + + + /* We should be all setup so let 'er rip */ + [self doRip]; +} + + + +#pragma mark - +#pragma mark Queue Item Editing + +/* Rescans the chosen queue item back into the main window */ +- (void)rescanQueueItemToMainWindow:(NSString *) scanPath scanTitleNum: (int) scanTitleNum selectedQueueItem: (int) selectedQueueItem +{ + fqueueEditRescanItemNum = selectedQueueItem; + [self writeToActivityLog: "rescanQueueItemToMainWindow: Re-scanning queue item at index:%d",fqueueEditRescanItemNum]; + applyQueueToScan = YES; + /* Set the browsedSourceDisplayName for showNewScan */ + browsedSourceDisplayName = [[QueueFileArray objectAtIndex:fqueueEditRescanItemNum] objectForKey:@"SourceName"]; + [self performScan:scanPath scanTitleNum:scanTitleNum]; +} + + +/* We use this method after a queue item rescan for edit. + * it largely mirrors -selectPreset in terms of structure. + * Assumes that a queue item has been reloaded into the main window. + */ +- (IBAction)applyQueueSettingsToMainWindow:(id)sender +{ + NSMutableDictionary * queueToApply = [QueueFileArray objectAtIndex:fqueueEditRescanItemNum]; + hb_job_t * job = fTitle->job; + if (queueToApply) + { + [self writeToActivityLog: "applyQueueSettingsToMainWindow: queue item found"]; + } /* Set title number and chapters */ /* since the queue only scans a single title, we really don't need to pick a title */ - //[fSrcTitlePopUp selectItemAtIndex: [[queueToApply objectForKey:@"TitleNumber"] intValue] - 1]; + [fSrcTitlePopUp selectItemAtIndex: [[queueToApply objectForKey:@"TitleNumber"] intValue] - 1]; [fSrcChapterStartPopUp selectItemAtIndex: [[queueToApply objectForKey:@"ChapterStart"] intValue] - 1]; [fSrcChapterEndPopUp selectItemAtIndex: [[queueToApply objectForKey:@"ChapterEnd"] intValue] - 1]; @@ -2659,10 +2792,34 @@ fWorkingCount = 0; [fVidTargetSizeField setStringValue:[queueToApply objectForKey:@"VideoTargetSize"]]; [fVidBitrateField setStringValue:[queueToApply objectForKey:@"VideoAvgBitrate"]]; - [fVidQualitySlider setFloatValue:[[queueToApply objectForKey:@"VideoQualitySlider"] floatValue]]; + /* Since we are now using RF Values for the slider, we detect if the preset uses an old quality float. + * So, check to see if the quality value is less than 1.0 which should indicate the old ".062" type + * quality preset. Caveat: in the case of x264, where the RF scale starts at 0, it would misinterpret + * a preset that uses 0.0 - 0.99 for RF as an old style preset. Not sure how to get around that one yet, + * though it should be a corner case since it would pretty much be a preset for lossless encoding. */ + if ([[queueToApply objectForKey:@"VideoQualitySlider"] floatValue] < 1.0) + { + /* For the quality slider we need to convert the old percent's to the new rf scales */ + float rf = (([fVidQualitySlider maxValue] - [fVidQualitySlider minValue]) * [[queueToApply objectForKey:@"VideoQualitySlider"] floatValue]); + [fVidQualitySlider setFloatValue:rf]; + + } + else + { + /* Since theora's qp value goes up from left to right, we can just set the slider float value */ + if ([[fVidEncoderPopUp selectedItem] tag] == HB_VCODEC_THEORA) + { + [fVidQualitySlider setFloatValue:[[queueToApply objectForKey:@"VideoQualitySlider"] floatValue]]; + } + else + { + /* since ffmpeg and x264 use an "inverted" slider (lower qp/rf values indicate a higher quality) we invert the value on the slider */ + [fVidQualitySlider setFloatValue:([fVidQualitySlider maxValue] + [fVidQualitySlider minValue]) - [[queueToApply objectForKey:@"VideoQualitySlider"] floatValue]]; + } + } [self videoMatrixChanged:nil]; - + [self writeToActivityLog: "applyQueueSettingsToMainWindow: video matrix changed"]; /* Video framerate */ /* For video preset video framerate, we want to make sure that Same as source does not conflict with the detected framerate in the fVidRatePopUp so we use index 0*/ @@ -2682,120 +2839,129 @@ fWorkingCount = 0; [fVidTurboPassCheck setState:[[queueToApply objectForKey:@"VideoTurboTwoPass"] intValue]]; /*Audio*/ - if ([queueToApply objectForKey:@"Audio1Track"] > 0) + + + /* Now lets add our new tracks to the audio list here */ + if ([[queueToApply objectForKey:@"Audio1Track"] intValue] > 0) { - if ([fAudLang1PopUp indexOfSelectedItem] == 0) - { - [fAudLang1PopUp selectItemAtIndex: 1]; - } + [fAudLang1PopUp selectItemAtIndex: [[queueToApply objectForKey:@"Audio1Track"] intValue]]; [self audioTrackPopUpChanged: fAudLang1PopUp]; [fAudTrack1CodecPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio1Encoder"]]; [self audioTrackPopUpChanged: fAudTrack1CodecPopUp]; + [fAudTrack1MixPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio1Mixdown"]]; - /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default - * mixdown*/ - if ([fAudTrack1MixPopUp selectedItem] == nil) - { - [self audioTrackPopUpChanged: fAudTrack1CodecPopUp]; - } - [fAudTrack1RatePopUp selectItemWithTitle:[chosenPreset objectForKey:@"Audio1Samplerate"]]; - /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */ - if (![[queueToApply objectForKey:@"Audio1Encoder"] isEqualToString:@"AC3 Passthru"]) - { - [fAudTrack1BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio1Bitrate"]]; - } + + [fAudTrack1RatePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio1Samplerate"]]; + [fAudTrack1BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio1Bitrate"]]; + [fAudTrack1DrcSlider setFloatValue:[[queueToApply objectForKey:@"Audio1TrackDRCSlider"] floatValue]]; [self audioDRCSliderChanged: fAudTrack1DrcSlider]; } - if ([queueToApply objectForKey:@"Audio2Track"] > 0) + else { - if ([fAudLang2PopUp indexOfSelectedItem] == 0) - { - [fAudLang2PopUp selectItemAtIndex: 1]; - } + [fAudLang1PopUp selectItemAtIndex: 0]; + [self audioTrackPopUpChanged: fAudLang1PopUp]; + } + if ([[queueToApply objectForKey:@"Audio2Track"] intValue] > 0) + { + [fAudLang2PopUp selectItemAtIndex: [[queueToApply objectForKey:@"Audio2Track"] intValue]]; [self audioTrackPopUpChanged: fAudLang2PopUp]; [fAudTrack2CodecPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio2Encoder"]]; [self audioTrackPopUpChanged: fAudTrack2CodecPopUp]; + [fAudTrack2MixPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio2Mixdown"]]; - /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default - * mixdown*/ - if ([fAudTrack2MixPopUp selectedItem] == nil) - { - [self audioTrackPopUpChanged: fAudTrack2CodecPopUp]; - } + [fAudTrack2RatePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio2Samplerate"]]; - /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */ - if (![[queueToApply objectForKey:@"Audio2Encoder"] isEqualToString:@"AC3 Passthru"]) - { - [fAudTrack2BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio2Bitrate"]]; - } + [fAudTrack2BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio2Bitrate"]]; + [fAudTrack2DrcSlider setFloatValue:[[queueToApply objectForKey:@"Audio2TrackDRCSlider"] floatValue]]; [self audioDRCSliderChanged: fAudTrack2DrcSlider]; } - if ([queueToApply objectForKey:@"Audio3Track"] > 0) + else { - if ([fAudLang3PopUp indexOfSelectedItem] == 0) - { - [fAudLang3PopUp selectItemAtIndex: 1]; - } + [fAudLang2PopUp selectItemAtIndex: 0]; + [self audioTrackPopUpChanged: fAudLang2PopUp]; + } + if ([[queueToApply objectForKey:@"Audio3Track"] intValue] > 0) + { + [fAudLang3PopUp selectItemAtIndex: [[queueToApply objectForKey:@"Audio3Track"] intValue]]; [self audioTrackPopUpChanged: fAudLang3PopUp]; [fAudTrack3CodecPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio3Encoder"]]; [self audioTrackPopUpChanged: fAudTrack3CodecPopUp]; + [fAudTrack3MixPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio3Mixdown"]]; - /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default - * mixdown*/ - if ([fAudTrack3MixPopUp selectedItem] == nil) - { - [self audioTrackPopUpChanged: fAudTrack3CodecPopUp]; - } + [fAudTrack3RatePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio3Samplerate"]]; - /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */ - if (![[queueToApply objectForKey:@"Audio3Encoder"] isEqualToString: @"AC3 Passthru"]) - { - [fAudTrack3BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio3Bitrate"]]; - } + [fAudTrack3BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio3Bitrate"]]; + [fAudTrack3DrcSlider setFloatValue:[[queueToApply objectForKey:@"Audio3TrackDRCSlider"] floatValue]]; [self audioDRCSliderChanged: fAudTrack3DrcSlider]; } - if ([queueToApply objectForKey:@"Audio4Track"] > 0) + else { - if ([fAudLang4PopUp indexOfSelectedItem] == 0) - { - [fAudLang4PopUp selectItemAtIndex: 1]; - } + [fAudLang3PopUp selectItemAtIndex: 0]; + [self audioTrackPopUpChanged: fAudLang3PopUp]; + } + if ([[queueToApply objectForKey:@"Audio4Track"] intValue] > 0) + { + [fAudLang4PopUp selectItemAtIndex: [[queueToApply objectForKey:@"Audio4Track"] intValue]]; [self audioTrackPopUpChanged: fAudLang4PopUp]; [fAudTrack4CodecPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio4Encoder"]]; [self audioTrackPopUpChanged: fAudTrack4CodecPopUp]; + [fAudTrack4MixPopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio4Mixdown"]]; - /* check to see if the selections was available, if not, rerun audioTrackPopUpChanged using the codec to just set the default - * mixdown*/ - if ([fAudTrack4MixPopUp selectedItem] == nil) - { - [self audioTrackPopUpChanged: fAudTrack4CodecPopUp]; - } + [fAudTrack4RatePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio4Samplerate"]]; - /* We set the presets bitrate if it is *not* an AC3 track since that uses the input bitrate */ - if (![[chosenPreset objectForKey:@"Audio4Encoder"] isEqualToString:@"AC3 Passthru"]) - { - [fAudTrack4BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio4Bitrate"]]; - } + [fAudTrack4BitratePopUp selectItemWithTitle:[queueToApply objectForKey:@"Audio4Bitrate"]]; + [fAudTrack4DrcSlider setFloatValue:[[queueToApply objectForKey:@"Audio4TrackDRCSlider"] floatValue]]; [self audioDRCSliderChanged: fAudTrack4DrcSlider]; } + else + { + [fAudLang4PopUp selectItemAtIndex: 0]; + [self audioTrackPopUpChanged: fAudLang4PopUp]; + } - + [self writeToActivityLog: "applyQueueSettingsToMainWindow: audio set up"]; /*Subtitles*/ - [fSubPopUp selectItemWithTitle:[queueToApply objectForKey:@"Subtitles"]]; - /* Forced Subtitles */ - [fSubForcedCheck setState:[[queueToApply objectForKey:@"SubtitlesForced"] intValue]]; - + /* Crashy crashy right now, working on it */ + [fSubtitlesDelegate setNewSubtitles:[queueToApply objectForKey:@"SubtitleList"]]; + [fSubtitlesTable reloadData]; /* Picture Settings */ + + /* If Cropping is set to custom, then recall all four crop values from + when the preset was created and apply them */ + if ([[queueToApply objectForKey:@"PictureAutoCrop"] intValue] == 0) + { + [fPictureController setAutoCrop:NO]; + + /* Here we use the custom crop values saved at the time the preset was saved */ + job->crop[0] = [[queueToApply objectForKey:@"PictureTopCrop"] intValue]; + job->crop[1] = [[queueToApply objectForKey:@"PictureBottomCrop"] intValue]; + job->crop[2] = [[queueToApply objectForKey:@"PictureLeftCrop"] intValue]; + job->crop[3] = [[queueToApply objectForKey:@"PictureRightCrop"] intValue]; + + } + else /* if auto crop has been saved in preset, set to auto and use post scan auto crop */ + { + [fPictureController setAutoCrop:YES]; + /* Here we use the auto crop values determined right after scan */ + job->crop[0] = AutoCropTop; + job->crop[1] = AutoCropBottom; + job->crop[2] = AutoCropLeft; + job->crop[3] = AutoCropRight; + + } + + /* we check to make sure the presets width/height does not exceed the sources width/height */ if (fTitle->width < [[queueToApply objectForKey:@"PictureWidth"] intValue] || fTitle->height < [[queueToApply objectForKey:@"PictureHeight"] intValue]) { /* if so, then we use the sources height and width to avoid scaling up */ - job->width = fTitle->width; - job->height = fTitle->height; + //job->width = fTitle->width; + //job->height = fTitle->height; + [self revertPictureSizeToMax:nil]; } else // source width/height is >= the preset height/width { @@ -2816,48 +2982,108 @@ fWorkingCount = 0; job->anamorphic.mode = [[queueToApply objectForKey:@"PicturePAR"] intValue]; - /* If Cropping is set to custom, then recall all four crop values from - when the preset was created and apply them */ - if ([[queueToApply objectForKey:@"PictureAutoCrop"] intValue] == 0) + [self writeToActivityLog: "applyQueueSettingsToMainWindow: picture sizing set up"]; + + + /* Filters */ + + /* We only allow *either* Decomb or Deinterlace. So check for the PictureDecombDeinterlace key. + * also, older presets may not have this key, in which case we also check to see if that preset had PictureDecomb + * specified, in which case we use decomb and ignore any possible Deinterlace settings as using both was less than + * sane. + */ + [fPictureController setUseDecomb:1]; + [fPictureController setDecomb:0]; + [fPictureController setDeinterlace:0]; + if ([[queueToApply objectForKey:@"PictureDecombDeinterlace"] intValue] == 1 || [[queueToApply objectForKey:@"PictureDecomb"] intValue] > 0) { - [fPictureController setAutoCrop:NO]; - - /* Here we use the custom crop values saved at the time the preset was saved */ - job->crop[0] = [[queueToApply objectForKey:@"PictureTopCrop"] intValue]; - job->crop[1] = [[queueToApply objectForKey:@"PictureBottomCrop"] intValue]; - job->crop[2] = [[queueToApply objectForKey:@"PictureLeftCrop"] intValue]; - job->crop[3] = [[queueToApply objectForKey:@"PictureRightCrop"] intValue]; - + /* we are using decomb */ + /* Decomb */ + if ([[queueToApply objectForKey:@"PictureDecomb"] intValue] > 0) + { + [fPictureController setDecomb:[[queueToApply objectForKey:@"PictureDecomb"] intValue]]; + + /* if we are using "Custom" in the decomb setting, also set the custom string*/ + if ([[queueToApply objectForKey:@"PictureDecomb"] intValue] == 1) + { + [fPictureController setDecombCustomString:[queueToApply objectForKey:@"PictureDecombCustom"]]; + } + } } - else /* if auto crop has been saved in preset, set to auto and use post scan auto crop */ + else { - [fPictureController setAutoCrop:YES]; - /* Here we use the auto crop values determined right after scan */ - job->crop[0] = AutoCropTop; - job->crop[1] = AutoCropBottom; - job->crop[2] = AutoCropLeft; - job->crop[3] = AutoCropRight; - + /* We are using Deinterlace */ + /* Deinterlace */ + if ([[queueToApply objectForKey:@"PictureDeinterlace"] intValue] > 0) + { + [fPictureController setUseDecomb:0]; + [fPictureController setDeinterlace:[[queueToApply objectForKey:@"PictureDeinterlace"] intValue]]; + /* if we are using "Custom" in the deinterlace setting, also set the custom string*/ + if ([[queueToApply objectForKey:@"PictureDeinterlace"] intValue] == 1) + { + [fPictureController setDeinterlaceCustomString:[queueToApply objectForKey:@"PictureDeinterlaceCustom"]]; + } + } } - /* Filters */ - /* Deinterlace */ - [fPictureController setDeinterlace:[[queueToApply objectForKey:@"PictureDeinterlace"] intValue]]; /* Detelecine */ - [fPictureController setDetelecine:[[queueToApply objectForKey:@"PictureDetelecine"] intValue]]; + if ([[queueToApply objectForKey:@"PictureDetelecine"] intValue] > 0) + { + [fPictureController setDetelecine:[[queueToApply objectForKey:@"PictureDetelecine"] intValue]]; + /* if we are using "Custom" in the detelecine setting, also set the custom string*/ + if ([[queueToApply objectForKey:@"PictureDetelecine"] intValue] == 1) + { + [fPictureController setDetelecineCustomString:[queueToApply objectForKey:@"PictureDetelecineCustom"]]; + } + } + else + { + [fPictureController setDetelecine:0]; + } + /* Denoise */ - [fPictureController setDenoise:[[queueToApply objectForKey:@"PictureDenoise"] intValue]]; + if ([[queueToApply objectForKey:@"PictureDenoise"] intValue] > 0) + { + [fPictureController setDenoise:[[queueToApply objectForKey:@"PictureDenoise"] intValue]]; + /* if we are using "Custom" in the denoise setting, also set the custom string*/ + if ([[queueToApply objectForKey:@"PictureDenoise"] intValue] == 1) + { + [fPictureController setDenoiseCustomString:[queueToApply objectForKey:@"PictureDenoiseCustom"]]; + } + } + else + { + [fPictureController setDenoise:0]; + } + /* Deblock */ - [fPictureController setDeblock:[[queueToApply objectForKey:@"PictureDeblock"] intValue]]; - /* Decomb */ - [fPictureController setDecomb:[[queueToApply objectForKey:@"PictureDecomb"] intValue]]; - /* Grayscale */ - [fPictureController setGrayscale:[[queueToApply objectForKey:@"VideoGrayScale"] intValue]]; + if ([[queueToApply objectForKey:@"PictureDeblock"] intValue] == 1) + { + /* if its a one, then its the old on/off deblock, set on to 5*/ + [fPictureController setDeblock:5]; + } + else + { + /* use the settings intValue */ + [fPictureController setDeblock:[[queueToApply objectForKey:@"PictureDeblock"] intValue]]; + } - [self calculatePictureSizing:nil]; + if ([[queueToApply objectForKey:@"VideoGrayScale"] intValue] == 1) + { + [fPictureController setGrayscale:1]; + } + else + { + [fPictureController setGrayscale:0]; + } + /* we call SetTitle: in fPictureController so we get an instant update in the Picture Settings window */ + [fPictureController SetTitle:fTitle]; + [fPictureController SetTitle:fTitle]; + [self calculatePictureSizing:nil]; + [self writeToActivityLog: "applyQueueSettingsToMainWindow: picture filters set up"]; /* somehow we need to figure out a way to tie the queue item to a preset if it used one */ //[queueFileJob setObject:[fPresetSelectedDisplay stringValue] forKey:@"PresetName"]; // [queueFileJob setObject:[NSNumber numberWithInt:[fPresetsOutlineView selectedRow]] forKey:@"PresetIndexNum"]; @@ -2886,108 +3112,13 @@ fWorkingCount = 0; /* We need to set this bool back to NO, in case the user wants to do a scan */ //applyQueueToScan = NO; - /* so now we go ahead and process the new settings */ - [self processNewQueueEncode]; + /* Not that source is loaded and settings applied, delete the queue item from the queue */ + //[self writeToActivityLog: "applyQueueSettingsToMainWindow: deleting queue item:%d",fqueueEditRescanItemNum]; + //[self removeQueueFileItem:fqueueEditRescanItemNum]; } -/* This assumes that we have re-scanned and loaded up a new queue item to send to libhb as fQueueEncodeLibhb */ -- (void) processNewQueueEncode -{ - hb_list_t * list = hb_get_titles( fQueueEncodeLibhb ); - hb_title_t * title = (hb_title_t *) hb_list_item( list,0 ); // is always zero since now its a single title scan - hb_job_t * job = title->job; - - if( !hb_list_count( list ) ) - { - [self writeToActivityLog: "processNewQueueEncode WARNING nothing found in the title list"]; - } - - NSMutableDictionary * queueToApply = [QueueFileArray objectAtIndex:currentQueueEncodeIndex]; - [self writeToActivityLog: "Preset: %s", [[queueToApply objectForKey:@"PresetName"] UTF8String]]; - [self writeToActivityLog: "processNewQueueEncode number of passes expected is: %d", ([[queueToApply objectForKey:@"VideoTwoPass"] intValue] + 1)]; - job->file = [[queueToApply objectForKey:@"DestinationPath"] UTF8String]; - //[self writeToActivityLog: "processNewQueueEncode sending to prepareJob"]; - [self prepareJob]; - - /* - * If scanning we need to do some extra setup of the job. - */ - if( job->indepth_scan == 1 ) - { - char *x264opts_tmp; - - /* - * When subtitle scan is enabled do a fast pre-scan job - * which will determine which subtitles to enable, if any. - */ - job->pass = -1; - x264opts_tmp = job->x264opts; - - job->x264opts = NULL; - - job->indepth_scan = 1; - - - /* - * Add the pre-scan job - */ - hb_add( fQueueEncodeLibhb, job ); - job->x264opts = x264opts_tmp; - } - - - if( [[queueToApply objectForKey:@"VideoTwoPass"] intValue] == 1 ) - { - job->indepth_scan = 0; - - - - job->pass = 1; - - hb_add( fQueueEncodeLibhb, job ); - - job->pass = 2; - - job->x264opts = (char *)calloc(1024, 1); /* Fixme, this just leaks */ - strcpy(job->x264opts, [[queueToApply objectForKey:@"x264Option"] UTF8String]); - - hb_add( fQueueEncodeLibhb, job ); - - } - else - { - job->indepth_scan = 0; - job->pass = 0; - - hb_add( fQueueEncodeLibhb, job ); - } - - NSString *destinationDirectory = [[queueToApply objectForKey:@"DestinationPath"] stringByDeletingLastPathComponent]; - [[NSUserDefaults standardUserDefaults] setObject:destinationDirectory forKey:@"LastDestinationDirectory"]; - /* Lets mark our new encode as 1 or "Encoding" */ - [queueToApply setObject:[NSNumber numberWithInt:1] forKey:@"Status"]; - [self saveQueueFileItem]; - - /* we need to clean up the subtitle tracks after the job(s) have been set */ - int num_subtitle_tracks = hb_list_count(job->list_subtitle); - int ii; - for(ii = 0; ii < num_subtitle_tracks; ii++) - { - hb_subtitle_t * subtitle; - subtitle = (hb_subtitle_t *)hb_list_item(job->list_subtitle, 0); - - - hb_list_rem(job->list_subtitle, subtitle); - free(subtitle); - } - - - /* We should be all setup so let 'er rip */ - [self doRip]; -} - #pragma mark - #pragma mark Live Preview /* Note,this is much like prepareJob, but directly sets the job vars so Picture Preview @@ -3758,9 +3889,7 @@ bool one_burned = FALSE; sub_config.offset = [[tempObject objectForKey:@"subtitleTrackSrtOffset"] intValue]; /* we need to srncpy file name and codeset */ - //sub_config.src_filename = [[tempObject objectForKey:@"subtitleSourceSrtFilePath"] UTF8String]; strncpy(sub_config.src_filename, [[tempObject objectForKey:@"subtitleSourceSrtFilePath"] UTF8String], 128); - //sub_config.src_codeset = [[tempObject objectForKey:@"subtitleTrackSrtCharCode"] UTF8String]; strncpy(sub_config.src_codeset, [[tempObject objectForKey:@"subtitleTrackSrtCharCode"] UTF8String], 40); sub_config.force = 0; diff --git a/macosx/English.lproj/Queue.xib b/macosx/English.lproj/Queue.xib index 667d263a3..4baa53825 100644 --- a/macosx/English.lproj/Queue.xib +++ b/macosx/English.lproj/Queue.xib @@ -1,19 +1,32 @@ <?xml version="1.0" encoding="UTF-8"?> -<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.02"> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10"> <data> <int key="IBDocument.SystemTarget">1050</int> - <string key="IBDocument.SystemVersion">9F33</string> - <string key="IBDocument.InterfaceBuilderVersion">670</string> - <string key="IBDocument.AppKitVersion">949.34</string> - <string key="IBDocument.HIToolboxVersion">352.00</string> + <string key="IBDocument.SystemVersion">10C540</string> + <string key="IBDocument.InterfaceBuilderVersion">732</string> + <string key="IBDocument.AppKitVersion">1038.25</string> + <string key="IBDocument.HIToolboxVersion">458.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">732</string> + </object> <object class="NSMutableArray" key="IBDocument.EditedObjectIDs"> <bool key="EncodedWithXMLCoder">YES</bool> - <integer value="2596"/> + <integer value="2649"/> </object> <object class="NSArray" key="IBDocument.PluginDependencies"> <bool key="EncodedWithXMLCoder">YES</bool> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> </object> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSArray" key="dict.sortedKeys" id="0"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + <object class="NSMutableArray" key="dict.values"> + <bool key="EncodedWithXMLCoder">YES</bool> + </object> + </object> <object class="NSMutableArray" key="IBDocument.RootObjects" id="543585533"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSCustomObject" id="678333032"> @@ -35,10 +48,10 @@ <object class="NSMutableString" key="NSViewClass"> <characters key="NS.bytes">View</characters> </object> - <string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string> + <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string> <string key="NSWindowContentMinSize">{525, 340}</string> <object class="NSView" key="NSWindowView" id="431299686"> - <reference key="NSNextResponder"/> + <nil key="NSNextResponder"/> <int key="NSvFlags">256</int> <object class="NSMutableArray" key="NSSubviews"> <bool key="EncodedWithXMLCoder">YES</bool> @@ -72,16 +85,16 @@ <bool key="EncodedWithXMLCoder">YES</bool> <object class="NSTableColumn" id="821940358"> <string key="NSIdentifier">icon</string> - <double key="NSWidth">3.800000e+01</double> - <double key="NSMinWidth">3.800000e+01</double> - <double key="NSMaxWidth">3.800000e+01</double> + <double key="NSWidth">38</double> + <double key="NSMinWidth">38</double> + <double key="NSMaxWidth">38</double> <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">0</int> + <int key="NSCellFlags">75628096</int> + <int key="NSCellFlags2">2048</int> <string key="NSContents"/> <object class="NSFont" key="NSSupport" id="26"> <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.100000e+01</double> + <double key="NSSize">11</double> <int key="NSfFlags">3100</int> </object> <object class="NSColor" key="NSBackgroundColor" id="122009290"> @@ -118,12 +131,12 @@ </object> <object class="NSTableColumn" id="664777621"> <string key="NSIdentifier">desc</string> - <double key="NSWidth">4.500000e+02</double> - <double key="NSMinWidth">4.000000e+01</double> - <double key="NSMaxWidth">5.000000e+03</double> + <double key="NSWidth">450</double> + <double key="NSMinWidth">40</double> + <double key="NSMaxWidth">5000</double> <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">75628032</int> - <int key="NSCellFlags2">0</int> + <int key="NSCellFlags">75628096</int> + <int key="NSCellFlags2">2048</int> <string key="NSContents"/> <reference key="NSSupport" ref="26"/> <object class="NSColor" key="NSBackgroundColor"> @@ -137,7 +150,7 @@ <int key="NSCellFlags2">0</int> <object class="NSFont" key="NSSupport" id="844481358"> <string key="NSName">LucidaGrande</string> - <double key="NSSize">1.200000e+01</double> + <double key="NSSize">12</double> <int key="NSfFlags">16</int> </object> <reference key="NSControlView" ref="790027174"/> @@ -160,12 +173,12 @@ </object> <object class="NSTableColumn" id="498008730"> <string key="NSIdentifier">action</string> - <double key="NSWidth">2.000000e+01</double> - <double key="NSMinWidth">8.000000e+00</double> - <double key="NSMaxWidth">2.000000e+01</double> + <double key="NSWidth">20</double> + <double key="NSMinWidth">8</double> + <double key="NSMaxWidth">20</double> <object class="NSTableHeaderCell" key="NSHeaderCell"> - <int key="NSCellFlags">67239424</int> - <int key="NSCellFlags2">134217728</int> + <int key="NSCellFlags">75628096</int> + <int key="NSCellFlags2">134219776</int> <string key="NSContents"/> <reference key="NSSupport" ref="26"/> <reference key="NSBackgroundColor" ref="122009290"/> @@ -191,8 +204,8 @@ <reference key="NSTableView" ref="790027174"/> </object> </object> - <double key="NSIntercellSpacingWidth">3.000000e+00</double> - <double key="NSIntercellSpacingHeight">2.000000e+00</double> + <double key="NSIntercellSpacingWidth">3</double> + <double key="NSIntercellSpacingHeight">2</double> <reference key="NSBackgroundColor" ref="983556133"/> <object class="NSColor" key="NSGridColor"> <int key="NSColorSpace">6</int> @@ -203,17 +216,19 @@ <bytes key="NSWhite">MC41AA</bytes> </object> </object> - <double key="NSRowHeight">1.700000e+01</double> + <double key="NSRowHeight">17</double> <int key="NSTvFlags">314605568</int> + <reference key="NSDelegate"/> + <reference key="NSDataSource"/> <int key="NSColumnAutoresizingStyle">1</int> <int key="NSDraggingSourceMaskForLocal">15</int> <int key="NSDraggingSourceMaskForNonLocal">0</int> <bool key="NSAllowsTypeSelect">YES</bool> + <int key="NSTableViewDraggingDestinationStyle">0</int> </object> </object> <string key="NSFrame">{{1, 1}, {517, 342}}</string> <reference key="NSSuperview" ref="9160137"/> - <reference key="NSNextKeyView" ref="790027174"/> <reference key="NSDocView" ref="790027174"/> <object class="NSColor" key="NSBGColor"> <int key="NSColorSpace">6</int> @@ -221,7 +236,7 @@ <string key="NSColorName">controlBackgroundColor</string> <object class="NSColor" key="NSColor" id="724853981"> <int key="NSColorSpace">3</int> - <bytes key="NSWhite">MC42NjY2NjY2OQA</bytes> + <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> </object> </object> <int key="NScvFlags">4</int> @@ -233,22 +248,21 @@ <reference key="NSSuperview" ref="9160137"/> <reference key="NSTarget" ref="9160137"/> <string key="NSAction">_doScroller:</string> - <double key="NSPercent">7.142857e-01</double> + <double key="NSPercent">0.71428570000000002</double> </object> <object class="NSScroller" id="636348341"> <reference key="NSNextResponder" ref="9160137"/> - <int key="NSvFlags">256</int> + <int key="NSvFlags">-2147483392</int> <string key="NSFrame">{{-100, -100}, {282, 15}}</string> <reference key="NSSuperview" ref="9160137"/> <int key="NSsFlags">1</int> <reference key="NSTarget" ref="9160137"/> <string key="NSAction">_doScroller:</string> - <double key="NSPercent">9.656652e-01</double> + <double key="NSPercent">0.9656652</double> </object> </object> <string key="NSFrame">{{20, 20}, {534, 344}}</string> <reference key="NSSuperview" ref="60629844"/> - <reference key="NSNextKeyView" ref="13598910"/> <int key="NSsFlags">18</int> <reference key="NSVScroller" ref="459639248"/> <reference key="NSHScroller" ref="636348341"/> @@ -269,14 +283,14 @@ </object> <object class="NSFont" key="NSSupport" id="459826394"> <string key="NSName">Helvetica</string> - <double key="NSSize">1.200000e+01</double> + <double key="NSSize">12</double> <int key="NSfFlags">16</int> </object> <reference key="NSControlView" ref="948250828"/> - <double key="NSMaxValue">3.000000e+01</double> - <double key="NSMinValue">0.000000e+00</double> - <double key="NSValue">2.000000e+00</double> - <double key="NSAltIncValue">0.000000e+00</double> + <double key="NSMaxValue">30</double> + <double key="NSMinValue">0.0</double> + <double key="NSValue">2</double> + <double key="NSAltIncValue">0.0</double> <int key="NSNumberOfTickMarks">31</int> <int key="NSTickMarkPosition">1</int> <bool key="NSAllowsTickMarkValuesOnly">YES</bool> @@ -297,10 +311,10 @@ </object> <reference key="NSSupport" ref="459826394"/> <reference key="NSControlView" ref="252090132"/> - <double key="NSMaxValue">1.000000e+01</double> - <double key="NSMinValue">0.000000e+00</double> - <double key="NSValue">3.000000e+00</double> - <double key="NSAltIncValue">0.000000e+00</double> + <double key="NSMaxValue">10</double> + <double key="NSMinValue">0.0</double> + <double key="NSValue">3</double> + <double key="NSAltIncValue">0.0</double> <int key="NSNumberOfTickMarks">11</int> <int key="NSTickMarkPosition">1</int> <bool key="NSAllowsTickMarkValuesOnly">YES</bool> @@ -356,7 +370,7 @@ <string key="NSContents">quick way to intercept delete key</string> <object class="NSFont" key="NSSupport"> <string key="NSName">LucidaGrande</string> - <double key="NSSize">9.000000e+00</double> + <double key="NSSize">9</double> <int key="NSfFlags">3614</int> </object> <reference key="NSControlView" ref="1065139278"/> @@ -364,11 +378,11 @@ <int key="NSButtonFlags2">34</int> <object class="NSFont" key="NSAlternateImage"> <string key="NSName">LucidaGrande</string> - <double key="NSSize">9.000000e+00</double> + <double key="NSSize">9</double> <int key="NSfFlags">16</int> </object> <string key="NSAlternateContents"/> - <string type="base64-UTF8" key="NSKeyEquivalent">fw</string> + <string key="NSKeyEquivalent"></string> <int key="NSPeriodicDelay">200</int> <int key="NSPeriodicInterval">25</int> </object> @@ -413,13 +427,48 @@ </object> </object> <string key="NSFrameSize">{574, 423}</string> - <reference key="NSSuperview"/> </object> <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> <string key="NSMinSize">{525, 362}</string> - <string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string> + <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string> <string key="NSFrameAutosaveName">QueueWindow</string> </object> + <object class="NSMenu" id="771940260"> + <string key="NSTitle"/> + <object class="NSMutableArray" key="NSMenuItems"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="NSMenuItem" id="16179858"> + <reference key="NSMenu" ref="771940260"/> + <string key="NSTitle">Edit</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <object class="NSCustomResource" key="NSOnImage" id="7190541"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="681624584"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + </object> + <object class="NSMenuItem" id="60102320"> + <reference key="NSMenu" ref="771940260"/> + <string key="NSTitle">Delete</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="7190541"/> + <reference key="NSMixedImage" ref="681624584"/> + </object> + <object class="NSMenuItem" id="172286461"> + <reference key="NSMenu" ref="771940260"/> + <string key="NSTitle">Show</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="7190541"/> + <reference key="NSMixedImage" ref="681624584"/> + </object> + </object> + </object> </object> <object class="IBObjectContainer" key="IBDocument.Objects"> <object class="NSMutableArray" key="connectionRecords"> @@ -496,28 +545,58 @@ </object> <int key="connectionID">2648</int> </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">menu</string> + <reference key="source" ref="574589932"/> + <reference key="destination" ref="771940260"/> + </object> + <int key="connectionID">2653</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">editSelectedQueueItem:</string> + <reference key="source" ref="678333032"/> + <reference key="destination" ref="16179858"/> + </object> + <int key="connectionID">2654</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">removeSelectedQueueItem:</string> + <reference key="source" ref="678333032"/> + <reference key="destination" ref="60102320"/> + </object> + <int key="connectionID">2656</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">revealSelectedQueueItem:</string> + <reference key="source" ref="678333032"/> + <reference key="destination" ref="172286461"/> + </object> + <int key="connectionID">2657</int> + </object> </object> <object class="IBMutableOrderedSet" key="objectRecords"> <object class="NSArray" key="orderedObjects"> <bool key="EncodedWithXMLCoder">YES</bool> <object class="IBObjectRecord"> <int key="objectID">0</int> - <object class="NSArray" key="object" id="1017359617"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> + <reference key="object" ref="0"/> <reference key="children" ref="543585533"/> <nil key="parent"/> </object> <object class="IBObjectRecord"> <int key="objectID">-2</int> <reference key="object" ref="678333032"/> - <reference key="parent" ref="1017359617"/> - <string type="base64-UTF8" key="objectName">RmlsZSdzIE93bmVyA</string> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> </object> <object class="IBObjectRecord"> <int key="objectID">-1</int> <reference key="object" ref="258430128"/> - <reference key="parent" ref="1017359617"/> + <reference key="parent" ref="0"/> <string key="objectName">First Responder</string> </object> <object class="IBObjectRecord"> @@ -527,7 +606,7 @@ <bool key="EncodedWithXMLCoder">YES</bool> <reference ref="431299686"/> </object> - <reference key="parent" ref="1017359617"/> + <reference key="parent" ref="0"/> <string key="objectName">Window</string> </object> <object class="IBObjectRecord"> @@ -702,7 +781,7 @@ <object class="IBObjectRecord"> <int key="objectID">-3</int> <reference key="object" ref="529995888"/> - <reference key="parent" ref="1017359617"/> + <reference key="parent" ref="0"/> <string key="objectName">Application</string> </object> <object class="IBObjectRecord"> @@ -733,14 +812,40 @@ <reference key="object" ref="108133680"/> <reference key="parent" ref="138063786"/> </object> + <object class="IBObjectRecord"> + <int key="objectID">2649</int> + <reference key="object" ref="771940260"/> + <object class="NSMutableArray" key="children"> + <bool key="EncodedWithXMLCoder">YES</bool> + <reference ref="16179858"/> + <reference ref="60102320"/> + <reference ref="172286461"/> + </object> + <reference key="parent" ref="0"/> + <string key="objectName">ContextMenu</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2650</int> + <reference key="object" ref="16179858"/> + <reference key="parent" ref="771940260"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2652</int> + <reference key="object" ref="60102320"/> + <reference key="parent" ref="771940260"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">2655</int> + <reference key="object" ref="172286461"/> + <reference key="parent" ref="771940260"/> + </object> </object> </object> <object class="NSMutableDictionary" key="flattenedProperties"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> - <string>-1.IBPluginDependency</string> - <string>-2.IBPluginDependency</string> + <string>-3.IBPluginDependency</string> <string>2511.IBPluginDependency</string> <string>2511.ImportedFromIB2</string> <string>2547.IBPluginDependency</string> @@ -783,68 +888,93 @@ <string>2624.ImportedFromIB2</string> <string>2625.IBPluginDependency</string> <string>2625.ImportedFromIB2</string> + <string>2637.IBPluginDependency</string> + <string>2638.IBPluginDependency</string> + <string>2639.IBPluginDependency</string> + <string>2640.IBPluginDependency</string> + <string>2641.IBPluginDependency</string> + <string>2642.IBPluginDependency</string> + <string>2643.IBPluginDependency</string> <string>2643.IBShouldRemoveOnLegacySave</string> + <string>2644.IBPluginDependency</string> <string>2644.IBShouldRemoveOnLegacySave</string> <string>2646.IBPluginDependency</string> <string>2646.ImportedFromIB2</string> + <string>2647.IBPluginDependency</string> + <string>2649.IBEditorWindowLastContentRect</string> + <string>2649.IBPluginDependency</string> + <string>2650.IBPluginDependency</string> + <string>2652.IBPluginDependency</string> + <string>2655.IBPluginDependency</string> </object> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <integer value="1" id="9"/> + <integer value="1"/> + <string>{{-1207, 366}, {574, 423}}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <string>{{170, 67}, {574, 423}}</string> - <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <string>{{170, 67}, {574, 423}}</string> - <reference ref="9"/> - <reference ref="9"/> - <reference ref="9"/> + <string>{{-1207, 366}, {574, 423}}</string> + <integer value="1"/> + <boolean value="NO"/> + <integer value="1"/> <string>{3.40282e+38, 3.40282e+38}</string> <string>{525, 340}</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>HBQueueOutlineView</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>HBImageAndTextCell</string> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <integer value="1"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> - <reference ref="9"/> - <reference ref="9"/> <string>com.apple.InterfaceBuilder.CocoaPlugin</string> - <reference ref="9"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <integer value="1"/> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>{{555, 544}, {96, 63}}</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> </object> </object> <object class="NSMutableDictionary" key="unlocalizedProperties"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> + <reference key="dict.sortedKeys" ref="0"/> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> </object> @@ -852,15 +982,13 @@ <nil key="activeLocalization"/> <object class="NSMutableDictionary" key="localizations"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSArray" key="dict.sortedKeys"> - <bool key="EncodedWithXMLCoder">YES</bool> - </object> + <reference key="dict.sortedKeys" ref="0"/> <object class="NSMutableArray" key="dict.values"> <bool key="EncodedWithXMLCoder">YES</bool> </object> </object> <nil key="sourceID"/> - <int key="maxID">2648</int> + <int key="maxID">2657</int> </object> <object class="IBClassDescriber" key="IBDocument.Classes"> <object class="NSMutableArray" key="referencedPartialClassDescriptions"> @@ -886,8 +1014,9 @@ <string key="superclassName">NSWindowController</string> <object class="NSMutableDictionary" key="actions"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> + <string>editSelectedQueueItem:</string> <string>imageSpacingChanged:</string> <string>indentChanged:</string> <string>removeSelectedQueueItem:</string> @@ -901,11 +1030,12 @@ <string>id</string> <string>id</string> <string>id</string> + <string>id</string> </object> </object> <object class="NSMutableDictionary" key="outlets"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>fCurrentJobPane</string> <string>fIndentation</string> @@ -942,7 +1072,7 @@ <string key="superclassName">NSWindowController</string> <object class="NSMutableDictionary" key="actions"> <bool key="EncodedWithXMLCoder">YES</bool> - <object class="NSMutableArray" key="dict.sortedKeys"> + <object class="NSArray" key="dict.sortedKeys"> <bool key="EncodedWithXMLCoder">YES</bool> <string>cancelCurrentJob:</string> <string>revealSelectedJobGroups:</string> @@ -975,16 +1105,667 @@ <string key="minorKey"/> </object> </object> + </object> + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+"> + <bool key="EncodedWithXMLCoder">YES</bool> + <object class="IBPartialClassDescription"> + <string key="className">NSActionCell</string> + <string key="superclassName">NSCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSActionCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1009815657"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="942825343"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="874636585"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSApplication</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButton</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButton.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSButtonCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSButtonCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSCell</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSControl</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="596505546"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSControl.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSFormatter</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSImageCell</string> + <string key="superclassName">NSCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSImageCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSImageView</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSImageView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenu</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="721965304"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSMenuItem</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="529283491"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string> + </object> + </object> <object class="IBPartialClassDescription"> <string key="className">NSObject</string> <object class="IBClassDescriptionSource" key="sourceIdentifier"> - <string key="majorKey">IBProjectSource</string> - <string key="minorKey">PictureController.h</string> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="1009815657"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="942825343"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="874636585"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="596505546"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <reference key="sourceIdentifier" ref="721965304"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="440847546"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="415747133"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTableView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="165950663"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSError.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObject.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSThread.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURL.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Growl.framework/Headers/GrowlApplicationBridge.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">ImageKit.framework/Headers/IKImageBrowserView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">ImageKit.framework/Headers/IKSaveOptions.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">ImageKit.framework/Headers/ImageKitDeprecated.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">PDFKit.framework/Headers/PDFDocument.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">PDFKit.framework/Headers/PDFView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTCaptureDecompressedAudioOutput.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTCaptureDecompressedVideoOutput.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTCaptureFileOutput.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTCaptureVideoPreviewOutput.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTCaptureView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTMovie.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QTKit.framework/Headers/QTMovieView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QuartzComposer.framework/Headers/QCCompositionParameterView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QuartzComposer.framework/Headers/QCCompositionPickerView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QuartzFilters.framework/Headers/QuartzFilterManager.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">QuickLookUI.framework/Headers/QLPreviewPanel.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Sparkle.framework/Headers/SUAppcast.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">Sparkle.framework/Headers/SUUpdater.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSOutlineView</string> + <string key="superclassName">NSTableView</string> + <reference key="sourceIdentifier" ref="440847546"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSProgressIndicator</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSProgressIndicator.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSResponder</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSResponder.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSScrollView</string> + <string key="superclassName">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSScrollView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSScroller</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSScroller.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSSlider</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSlider.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSSliderCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSSliderCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTableColumn</string> + <string key="superclassName">NSObject</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTableColumn.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTableView</string> + <string key="superclassName">NSControl</string> + <reference key="sourceIdentifier" ref="415747133"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextField</string> + <string key="superclassName">NSControl</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextField.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSTextFieldCell</string> + <string key="superclassName">NSActionCell</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSTextFieldCell.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSClipView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <reference key="sourceIdentifier" ref="529283491"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSView</string> + <string key="superclassName">NSResponder</string> + <reference key="sourceIdentifier" ref="165950663"/> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <string key="superclassName">NSResponder</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindow.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindow</string> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string> + </object> + </object> + <object class="IBPartialClassDescription"> + <string key="className">NSWindowController</string> + <string key="superclassName">NSResponder</string> + <object class="NSMutableDictionary" key="actions"> + <string key="NS.key.0">showWindow:</string> + <string key="NS.object.0">id</string> + </object> + <object class="IBClassDescriptionSource" key="sourceIdentifier"> + <string key="majorKey">IBFrameworkSource</string> + <string key="minorKey">AppKit.framework/Headers/NSWindowController.h</string> </object> </object> </object> </object> <int key="IBDocument.localizationMode">0</int> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string> + <integer value="1050" key="NS.object.0"/> + </object> + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string> + <integer value="3000" key="NS.object.0"/> + </object> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> <string key="IBDocument.LastKnownRelativeProjectPath">../HandBrake.xcodeproj</string> <int key="IBDocument.defaultPropertyAccessControl">3</int> </data> diff --git a/macosx/HBQueueController.h b/macosx/HBQueueController.h index 51e01f66d..ddae3e66a 100644 --- a/macosx/HBQueueController.h +++ b/macosx/HBQueueController.h @@ -137,6 +137,7 @@ BOOL fIsDragging; /* control encodes in the window */ - (IBAction)removeSelectedQueueItem: (id)sender; - (IBAction)revealSelectedQueueItem: (id)sender; +- (IBAction)editSelectedQueueItem: (id)sender; #if HB_OUTLINE_METRIC_CONTROLS - (IBAction)imageSpacingChanged: (id)sender; diff --git a/macosx/HBQueueController.mm b/macosx/HBQueueController.mm index 512dff479..9321b1dd8 100644 --- a/macosx/HBQueueController.mm +++ b/macosx/HBQueueController.mm @@ -75,8 +75,6 @@ return fIsDragging; } - - @end #pragma mark Toolbar Identifiers @@ -254,7 +252,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe if( ![[self window] setFrameUsingName:@"Queue"] ) [[self window] center]; [self setWindowFrameAutosaveName:@"Queue"]; - [[self window] setExcludedFromWindowsMenu:YES]; + //[[self window] setExcludedFromWindowsMenu:YES]; /* lets setup our queue list outline view for drag and drop here */ [fOutlineView registerForDraggedTypes: [NSArray arrayWithObject:DragDropSimplePboardType] ]; @@ -598,9 +596,53 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe } } -#pragma mark - +//------------------------------------------------------------------------------------ +// Send the selected queue item back to the main window for rescan and possible edit. +//------------------------------------------------------------------------------------ +- (IBAction)editSelectedQueueItem: (id)sender +{ + NSIndexSet * selectedRows = [fOutlineView selectedRowIndexes]; + NSUInteger row = [selectedRows firstIndex]; + if( row == NSNotFound ) + return; + /* if this is a currently encoding job, we need to be sure to alert the user, + * to let them decide to cancel it first, then if they do, we can come back and + * remove it */ + + if ([[[fJobGroups objectAtIndex:row] objectForKey:@"Status"] integerValue] == 1) + { + /* We pause the encode here so that it doesn't finish right after and then + * screw up the sync while the window is open + */ + [fHBController Pause:NULL]; + NSString * alertTitle = [NSString stringWithFormat:NSLocalizedString(@"Stop This Encode and Remove It ?", nil)]; + // Which window to attach the sheet to? + NSWindow * docWindow = nil; + if ([sender respondsToSelector: @selector(window)]) + docWindow = [sender window]; + + + NSBeginCriticalAlertSheet( + alertTitle, + NSLocalizedString(@"Keep Encoding", nil), + nil, + NSLocalizedString(@"Stop Encoding and Delete", nil), + docWindow, self, + nil, @selector(didDimissCancelCurrentJob:returnCode:contextInfo:), nil, + NSLocalizedString(@"Your movie will be lost if you don't continue encoding.", nil)); + + } + else + { + /* since we are not a currently encoding item, we can just be cancelled */ + [fHBController rescanQueueItemToMainWindow:[[fJobGroups objectAtIndex:row] objectForKey:@"SourcePath"] scanTitleNum:[[[fJobGroups objectAtIndex:row] objectForKey:@"TitleNumber"] integerValue] selectedQueueItem:row]; + + } +} + +#pragma mark - #pragma mark Animate Endcoding Item diff --git a/macosx/HBSubtitles.h b/macosx/HBSubtitles.h index c8232d432..83c9a1d6f 100644 --- a/macosx/HBSubtitles.h +++ b/macosx/HBSubtitles.h @@ -35,6 +35,8 @@ int container; - (void)containerChanged:(int) newContainer; +- (void)setNewSubtitles:(NSMutableArray*) newSubtitleArray; + // Table View Delegates - (int)numberOfRowsInTableView:(NSTableView *)aTableView; diff --git a/macosx/HBSubtitles.m b/macosx/HBSubtitles.m index d0e959c27..aca46b556 100644 --- a/macosx/HBSubtitles.m +++ b/macosx/HBSubtitles.m @@ -426,6 +426,7 @@ } +/* used to return the current subtitleArray to controller.m */ - (NSMutableArray*) getSubtitleArray { return subtitleArray; @@ -433,7 +434,52 @@ - (void)containerChanged:(int) newContainer { -container = newContainer; + container = newContainer; +} + +- (void)setNewSubtitles:(NSMutableArray*) newSubtitleArray +{ + /* Note: we need to look for external subtitles so it can be added to the source array track. + * Remember the source container subs are already loaded with resetTitle which is already called + * so any external sub sources need to be added to our source subs here + */ + + int i = 0; + NSEnumerator *enumerator = [newSubtitleArray objectEnumerator]; + id tempObject; + while ( tempObject = [enumerator nextObject] ) + { + /* We have an srt track */ + if ([[tempObject objectForKey:@"subtitleSourceTrackType"] isEqualToString:@"SRT"]) + { + NSString *filePath = [tempObject objectForKey:@"subtitleSourceSrtFilePath"]; + /* Start replicate the add new srt code above */ + /* Create a new entry for the subtitle source array so it shows up in our subtitle source list */ + NSString *displayname = [filePath lastPathComponent];// grok an appropriate display name from the srt subtitle */ + /* create a dictionary of source subtitle information to store in our array */ + NSMutableDictionary *newSubtitleSourceTrack = [[NSMutableDictionary alloc] init]; + /* Subtitle Source track popup index */ + [newSubtitleSourceTrack setObject:[NSNumber numberWithInt:[subtitleSourceArray count]+1] forKey:@"sourceTrackNum"]; + /* Subtitle Source track type */ + [newSubtitleSourceTrack setObject:displayname forKey:@"sourceTrackName"]; + /* Subtitle Source track type (Source, Srt, etc.) */ + [newSubtitleSourceTrack setObject:@"SRT" forKey:@"sourceTrackType"]; + [newSubtitleSourceTrack setObject:@"SRT" forKey:@"subtitleSourceTrackType"]; + /* Subtitle Source track type */ + [newSubtitleSourceTrack setObject:filePath forKey:@"sourceSrtFilePath"]; + /* Subtitle Source track popup isPictureSub */ + [newSubtitleSourceTrack setObject:[NSNumber numberWithInt:0] forKey:@"sourceTrackisPictureSub"]; + + [subtitleSourceArray addObject:newSubtitleSourceTrack]; + [newSubtitleSourceTrack autorelease]; + /* END replicate the add new srt code above */ + } + i++; + } + + + /*Set the subtitleArray to the newSubtitleArray */ + [subtitleArray setArray:newSubtitleArray]; } #pragma mark - |