return fIsDragging;
}
-
-
@end
#pragma mark Toolbar Identifiers
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] ];
}
}
-#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
{
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
// 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,
// 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
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];
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"];
}
}
/* 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];
[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"]];
}
[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"]];
}
[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"]];
}
[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"]];
}
[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"]];
{
pictureInfo = [pictureInfo stringByAppendingString:@" Keep Aspect Ratio"];
}
+
if ([[item objectForKey:@"VideoGrayScale"] intValue] == 1)
{
pictureInfo = [pictureInfo stringByAppendingString:@", Grayscale"];
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)
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)"];
}
}
}
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)"];
}
}
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)"];
}
}