X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=macosx%2FHBQueueController.mm;h=9f7ce38a054dd4038d431911c322e57f39bba2d4;hb=4f0019f03c2e85e8634150ff0c9a31bee6d35ce5;hp=58726de88d2e35029a916c9b5cdd1f493e87d2eb;hpb=e564714df3a04cc2c599dd25fea58d2731574dd2;p=handbrake-jp%2Fhandbrake-jp-git.git diff --git a/macosx/HBQueueController.mm b/macosx/HBQueueController.mm index 58726de8..9f7ce38a 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 @@ -749,6 +791,12 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; { if ([outlineView isItemExpanded: item]) { + /* Below is the original code to accommodate a live resize, + * however as stated in travistex's comments it's very buggy. + * For now I will leave it here ... commented out and use + * the code below to determine the row height based on each + * encodes optional parameters and how they are displayed. */ + // Short-circuit here if in a live resize primarily to fix a bug but also to // increase resposivness during a resize. There's a bug in NSTableView that // causes row heights to get messed up if you try to change them during a live @@ -756,8 +804,8 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; // height. The row heights will get fixed up after the resize because we have // implemented viewDidEndLiveResize to force all of them to be recalculated. // if ([outlineView inLiveResize] && [item lastDescriptionHeight] > 0) - // return [item lastDescriptionHeight]; - + // return [item lastDescriptionHeight]; + // CGFloat width = [[outlineView tableColumnWithIdentifier: @"desc"] width]; // Column width is NOT what is ultimately used. I can't quite figure out what // width to use for calculating text metrics. No matter how I tweak this value, @@ -765,14 +813,114 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; // of the row cell. In previous versions, which ran under Tiger, I was // reducing width by 47 pixles. // width -= 2; // (?) for intercell spacing - + // CGFloat height = [item heightOfDescriptionForWidth: width]; // return height; - return HB_ROW_HEIGHT_FULL_DESCRIPTION; + /* So, we know several rows of text that are in all queue items for display. + * These are the title line, Preset, Format, Destination, Picture, and Video Lines + */ + CGFloat rowHeightNonTitle = 15.0; + /* Add the title line height, then the non title line height for Preset, Format, Destination + * Picture and Video + */ + CGFloat itemHeightForDisplay = HB_ROW_HEIGHT_TITLE_ONLY + (rowHeightNonTitle * 5); + + /* get our item row number so we an use it to calc how many lines we have to display based + * on MP4 Options, Filter Options, X264 Options, Audio Tracks and Subtitles from our queue array */ + int itemRowNum = [outlineView rowForItem: item]; + NSMutableDictionary *queueItemToCheck = [outlineView itemAtRow: itemRowNum]; + + /* Check to see if we need to allow for mp4 opts */ + BOOL mp4OptsPresent = NO; + if ([[queueItemToCheck objectForKey:@"FileFormat"] isEqualToString: @"MP4 file"]) + { + + if( [[queueItemToCheck objectForKey:@"Mp4LargeFile"] intValue] == 1) + { + mp4OptsPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"Mp4HttpOptimize"] intValue] == 1) + { + mp4OptsPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"Mp4iPodCompatible"] intValue] == 1) + { + mp4OptsPresent = YES; + } + } + + if (mp4OptsPresent == YES) + { + itemHeightForDisplay += rowHeightNonTitle; + } + + /* check to see if we need to allow for the Picture Filters row */ + BOOL pictureFiltersPresent = NO; + if( [[queueItemToCheck objectForKey:@"PictureDetelecine"] intValue] > 0) + { + pictureFiltersPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"PictureDecomb"] intValue] > 0) + { + pictureFiltersPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"PictureDeinterlace"] intValue] > 0) + { + pictureFiltersPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"PictureDenoise"] intValue] > 0) + { + pictureFiltersPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"PictureDeblock"] intValue] > 0) + { + pictureFiltersPresent = YES; + } + if( [[queueItemToCheck objectForKey:@"VideoGrayScale"] intValue] > 0) + { + pictureFiltersPresent = YES; + } + + if (pictureFiltersPresent == YES) + { + itemHeightForDisplay += rowHeightNonTitle; + } + + /* check to see if we need a line to display x264 options */ + if ([[queueItemToCheck objectForKey:@"VideoEncoder"] isEqualToString: @"H.264 (x264)"]) + { + itemHeightForDisplay += rowHeightNonTitle; + } + + /* check to see how many audio track lines to allow for */ + if ([[queueItemToCheck objectForKey:@"Audio1Track"] intValue] > 0) + { + itemHeightForDisplay += rowHeightNonTitle; + } + if ([[queueItemToCheck objectForKey:@"Audio2Track"] intValue] > 0) + { + itemHeightForDisplay += rowHeightNonTitle; + } + if ([[queueItemToCheck objectForKey:@"Audio3Track"] intValue] > 0) + { + itemHeightForDisplay += rowHeightNonTitle; + } + if ([[queueItemToCheck objectForKey:@"Audio4Track"] intValue] > 0) + { + itemHeightForDisplay += rowHeightNonTitle; + } + + /* add in subtitle lines for each subtitle in the SubtitleList array */ + itemHeightForDisplay += rowHeightNonTitle * [[queueItemToCheck objectForKey:@"SubtitleList"] count]; + + return itemHeightForDisplay; + } else + { return HB_ROW_HEIGHT_TITLE_ONLY; + } } - (CGFloat) heightOfDescriptionForWidth:(CGFloat)width @@ -816,11 +964,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; if ([[tableColumn identifier] isEqualToString:@"desc"]) { - /* This should have caused the description we wanted to show*/ - //return [item objectForKey:@"SourceName"]; - /* code to build the description as per old queue */ - //return [self formatEncodeItemDescription:item]; /* Below should be put into a separate method but I am way too f'ing lazy right now */ NSMutableAttributedString * finalString = [[[NSMutableAttributedString alloc] initWithString: @""] autorelease]; @@ -857,24 +1001,44 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; NSString * titleString = [NSString stringWithFormat:@"Title %d", [[item objectForKey:@"TitleNumber"] intValue]]; - NSString * chapterString = ([[item objectForKey:@"ChapterStart"] intValue] == [[item objectForKey:@"ChapterEnd"] intValue]) ? - [NSString stringWithFormat:@"Chapter %d", [[item objectForKey:@"ChapterStart"] intValue]] : - [NSString stringWithFormat:@"Chapters %d through %d", [[item objectForKey:@"ChapterStart"] intValue], [[item objectForKey:@"ChapterEnd"] intValue]]; + NSString * startStopString = @""; + if ([[item objectForKey:@"fEncodeStartStop"] intValue] == 0) + { + /* Start Stop is chapters */ + startStopString = ([[item objectForKey:@"ChapterStart"] intValue] == [[item objectForKey:@"ChapterEnd"] intValue]) ? + [NSString stringWithFormat:@"Chapter %d", [[item objectForKey:@"ChapterStart"] intValue]] : + [NSString stringWithFormat:@"Chapters %d through %d", [[item objectForKey:@"ChapterStart"] intValue], [[item objectForKey:@"ChapterEnd"] intValue]]; + } + else if ([[item objectForKey:@"fEncodeStartStop"] intValue] == 1) + { + /* Start Stop is seconds */ + startStopString = [NSString stringWithFormat:@"Seconds %d through %d", [[item objectForKey:@"StartSeconds"] intValue], [[item objectForKey:@"StartSeconds"] intValue] + [[item objectForKey:@"StopSeconds"] intValue]]; + } + else if ([[item objectForKey:@"fEncodeStartStop"] intValue] == 2) + { + /* Start Stop is Frames */ + startStopString = [NSString stringWithFormat:@"Frames %d through %d", [[item objectForKey:@"StartFrame"] intValue], [[item objectForKey:@"StartFrame"] intValue] + [[item objectForKey:@"StopFrame"] intValue]]; + } - NSString * passesString; + NSString * passesString = @""; + /* check to see if our first subtitle track is Foreign Language Search, in which case there is an in depth scan */ + if ([item objectForKey:@"SubtitleList"] && [[[[item objectForKey:@"SubtitleList"] objectAtIndex:0] objectForKey:@"subtitleSourceTrackNum"] intValue] == 1) + { + passesString = [passesString stringByAppendingString:@"1 Foreign Language Search Pass - "]; + } if ([[item objectForKey:@"VideoTwoPass"] intValue] == 0) { - passesString = [NSString stringWithFormat:@"1 Video Pass"]; + passesString = [passesString stringByAppendingString:@"1 Video Pass"]; } else { if ([[item objectForKey:@"VideoTurboTwoPass"] intValue] == 1) { - passesString = [NSString stringWithFormat:@"2 Video Passes Turbo"]; + passesString = [passesString stringByAppendingString:@"2 Video Passes First Turbo"]; } else { - passesString = [NSString stringWithFormat:@"2 Video Passes"]; + passesString = [passesString stringByAppendingString:@"2 Video Passes"]; } } @@ -883,7 +1047,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; /* lets add the output file name to the title string here */ NSString * outputFilenameString = [[item objectForKey:@"DestinationPath"] lastPathComponent]; - summaryInfo = [NSString stringWithFormat: @" (%@, %@, %@) -> %@", titleString, chapterString, passesString, outputFilenameString]; + summaryInfo = [NSString stringWithFormat: @" (%@, %@, %@) -> %@", titleString, startStopString, passesString, outputFilenameString]; [finalString appendString:[NSString stringWithFormat:@"%@\n", summaryInfo] withAttributes:detailAttr]; @@ -912,7 +1076,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; [item objectForKey:@"Audio1Samplerate"], [item objectForKey:@"Audio1Bitrate"]]; - if ([[item objectForKey:@"Audio1TrackDRCSlider"] floatValue] > 1.00) + if ([[item objectForKey:@"Audio1TrackDRCSlider"] floatValue] > 0.00) { audioDetail1 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail1,[item objectForKey:@"Audio1TrackDRCSlider"]]; } @@ -932,7 +1096,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; [item objectForKey:@"Audio2Samplerate"], [item objectForKey:@"Audio2Bitrate"]]; - if ([[item objectForKey:@"Audio2TrackDRCSlider"] floatValue] > 1.00) + if ([[item objectForKey:@"Audio2TrackDRCSlider"] floatValue] > 0.00) { audioDetail2 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail2,[item objectForKey:@"Audio2TrackDRCSlider"]]; } @@ -952,7 +1116,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; [item objectForKey:@"Audio3Samplerate"], [item objectForKey:@"Audio3Bitrate"]]; - if ([[item objectForKey:@"Audio3TrackDRCSlider"] floatValue] > 1.00) + if ([[item objectForKey:@"Audio3TrackDRCSlider"] floatValue] > 0.00) { audioDetail3 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail3,[item objectForKey:@"Audio3TrackDRCSlider"]]; } @@ -972,7 +1136,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; [item objectForKey:@"Audio4Samplerate"], [item objectForKey:@"Audio4Bitrate"]]; - if ([[item objectForKey:@"Audio4TrackDRCSlider"] floatValue] > 1.00) + if ([[item objectForKey:@"Audio4TrackDRCSlider"] floatValue] > 0.00) { audioDetail4 = [NSString stringWithFormat:@"%@, DRC: %@",audioDetail4,[item objectForKey:@"Audio4TrackDRCSlider"]]; } @@ -1025,6 +1189,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; [finalString appendString: @"Destination: " withAttributes:detailBoldAttr]; [finalString appendString: [item objectForKey:@"DestinationPath"] withAttributes:detailAttr]; [finalString appendString:@"\n" withAttributes:detailAttr]; + /* Fifth Line Picture Details*/ NSString * pictureInfo; pictureInfo = [NSString stringWithFormat:@"%@", [item objectForKey:@"PictureSizingSummary"]]; @@ -1032,6 +1197,7 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; { pictureInfo = [pictureInfo stringByAppendingString:@" Keep Aspect Ratio"]; } + if ([[item objectForKey:@"VideoGrayScale"] intValue] == 1) { pictureInfo = [pictureInfo stringByAppendingString:@", Grayscale"]; @@ -1049,12 +1215,12 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; if( [[item objectForKey:@"PictureDetelecine"] intValue] == 1) { pictureFiltersPresent = YES; - pictureFilters = [pictureFilters stringByAppendingString:@" - Detelecine (Default)"]; + pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Detelecine (%@)",[item objectForKey:@"PictureDetelecineCustom"]]]; } else if( [[item objectForKey:@"PictureDetelecine"] intValue] == 2) { pictureFiltersPresent = YES; - pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Detelecine (%@)",[item objectForKey:@"PictureDetelecineCustom"]]]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Detelecine (Default)"]; } if( [[item objectForKey:@"PictureDecombDeinterlace"] intValue] == 1) @@ -1065,12 +1231,12 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; if( [[item objectForKey:@"PictureDecomb"] intValue] == 1) { pictureFiltersPresent = YES; - pictureFilters = [pictureFilters stringByAppendingString:@" - Decomb (Default)"]; + pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Decomb (%@)",[item objectForKey:@"PictureDecombCustom"]]]; } - if( [[item objectForKey:@"PictureDecomb"] intValue] == 2) + else if( [[item objectForKey:@"PictureDecomb"] intValue] == 2) { pictureFiltersPresent = YES; - pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Decomb (%@)",[item objectForKey:@"PictureDecombCustom"]]]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Decomb (Default)"]; } } } @@ -1081,19 +1247,19 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; pictureFiltersPresent = YES; if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 1) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace (Fast)"]; + pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Deinterlace (%@)",[item objectForKey:@"PictureDeinterlaceCustom"]]]; } else if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 2) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace (Slow)"]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace (Fast)"]; } else if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 3) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace (Slower)"]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace (Slow)"]; } else if ([[item objectForKey:@"PictureDeinterlace"] intValue] == 4) { - pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Deinterlace (%@)",[item objectForKey:@"PictureDeinterlaceCustom"]]]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Deinterlace (Slower)"]; } } @@ -1103,19 +1269,19 @@ return ![(HBQueueOutlineView*)outlineView isDragging]; pictureFiltersPresent = YES; if ([[item objectForKey:@"PictureDenoise"] intValue] == 1) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Denoise (Weak)"]; + pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Denoise (%@)",[item objectForKey:@"PictureDenoiseCustom"]]]; } else if ([[item objectForKey:@"PictureDenoise"] intValue] == 2) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Denoise (Medium)"]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Denoise (Weak)"]; } else if ([[item objectForKey:@"PictureDenoise"] intValue] == 3) { - pictureFilters = [pictureFilters stringByAppendingString:@" - Denoise (Strong)"]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Denoise (Medium)"]; } else if ([[item objectForKey:@"PictureDenoise"] intValue] == 4) { - pictureFilters = [pictureFilters stringByAppendingString:[NSString stringWithFormat:@" - Denoise (%@)",[item objectForKey:@"PictureDenoiseCustom"]]]; + pictureFilters = [pictureFilters stringByAppendingString:@" - Denoise (Strong)"]; } }