diff options
-rw-r--r-- | macosx/HBQueueController.h | 16 | ||||
-rw-r--r-- | macosx/HBQueueController.mm | 357 |
2 files changed, 167 insertions, 206 deletions
diff --git a/macosx/HBQueueController.h b/macosx/HBQueueController.h index 9fa4d67ec..262557881 100644 --- a/macosx/HBQueueController.h +++ b/macosx/HBQueueController.h @@ -5,7 +5,7 @@ It may be used under the terms of the GNU General Public License. */ -#include <Cocoa/Cocoa.h> +#import <Cocoa/Cocoa.h> #include "hb.h" @class HBController; @@ -73,7 +73,7 @@ BOOL fIsDragging; @interface HBJob : NSObject { HBJobGroup *jobGroup; // The group this job belongs to - + // The following fields match up with similar fields found in hb_job_t and it's // various substructures. @public @@ -108,7 +108,7 @@ BOOL fIsDragging; /* Used to concatenate audio list values into a string for display */ NSString *audioinfo_codecs; NSString *audioinfo_summary; - + int audio_mixdowns[8]; int acodec; int abitrate; @@ -180,7 +180,7 @@ BOOL fIsDragging; - (unsigned int) count; - (HBJob *) jobAtIndex: (unsigned)index; - (unsigned int) indexOfJob: (HBJob *)aJob; -- (NSEnumerator *) jobEnumerator; +- (NSMutableArray *) fJobs; - (void) setStatus: (HBQueueJobGroupStatus)status; - (HBQueueJobGroupStatus) status; - (void) setPresetName: (NSString *)name; @@ -212,7 +212,7 @@ BOOL fIsDragging; unsigned int fCanceledCount; // Use the accessor functions instead. unsigned int fWorkingCount; BOOL fJobGroupCountsNeedUpdating; - + BOOL fCurrentJobPaneShown; // NO when fCurrentJobPane has been shifted out of view (see showCurrentJobPane) NSMutableIndexSet *fSavedExpandedItems; // used by save/restoreOutlineViewState to preserve which items are expanded NSMutableIndexSet *fSavedSelectedItems; // used by save/restoreOutlineViewState to preserve which items are selected @@ -245,7 +245,7 @@ BOOL fIsDragging; IBOutlet NSTextField *fJobDescTextField; IBOutlet NSProgressIndicator *fProgressBar; IBOutlet NSTextField *fProgressTextField; - + // fQueuePane - always visible; fills entire window when fCurrentJobPane is hidden IBOutlet NSView *fQueuePane; IBOutlet HBQueueOutlineView *fOutlineView; @@ -254,12 +254,12 @@ BOOL fIsDragging; IBOutlet NSSlider *fIndentation; // debug IBOutlet NSSlider *fSpacing; // debug #endif - + } - (void)setHandle: (hb_handle_t *)handle; - (void)setHBController: (HBController *)controller; -- (void)libhbStateChanged: (hb_state_t &)state; +- (void)libhbStateChanged: (hb_state_t)state; - (void)libhbWillStop; // Adding items to the queue diff --git a/macosx/HBQueueController.mm b/macosx/HBQueueController.mm index 6bcfe0d78..f410e4edf 100644 --- a/macosx/HBQueueController.mm +++ b/macosx/HBQueueController.mm @@ -4,8 +4,8 @@ Homepage: <http://handbrake.fr/>. It may be used under the terms of the GNU General Public License. */ -#include "HBQueueController.h" -#include "Controller.h" +#import "HBQueueController.h" +#import "Controller.h" #import "HBImageAndTextCell.h" #define HB_ROW_HEIGHT_TITLE_ONLY 17.0 @@ -65,7 +65,7 @@ bool IsFirstPass(int jobID) { // Set the fIsDragging flag so that other's know that a drag operation is being // performed. - fIsDragging = YES; + fIsDragging = YES; // By default, NSTableView only drags an image of the first column. Change this to // drag an image of the queue's icon and desc columns. @@ -81,7 +81,7 @@ bool IsFirstPass(int jobID) // for us to detect when a drag has finished. You can't do it in acceptDrop because // that won't be called if the dragged item is released outside the view. [super mouseDown:theEvent]; - fIsDragging = NO; + fIsDragging = NO; } #endif @@ -150,7 +150,8 @@ static NSDictionary* _shortHeightAttribute = nil; hb_audio_config_t * audio; NSString * thisJobAudioCodecs = [NSString stringWithFormat:@""]; NSString * thisJobAudioInfo = [NSString stringWithFormat:@""]; - for( int i = 0; i < hb_list_count(job->list_audio); i++ ) + int i; + for( i = 0; i < hb_list_count(job->list_audio); i++ ) { audio = (hb_audio_config_t *) hb_list_audio_config_item( job->list_audio, i ); /* Output Codec */ @@ -164,7 +165,7 @@ static NSDictionary* _shortHeightAttribute = nil; else if (audio->out.codec == HB_ACODEC_VORBIS) outputCodec = @"Vorbis"; else - outputCodec = @"Unknown Codec"; + outputCodec = @"Unknown Codec"; /* Add the codec to the audio codecs list ( We should check against dupes)*/ thisJobAudioCodecs = [thisJobAudioCodecs stringByAppendingString:[NSString stringWithFormat:@" %@,",outputCodec]]; if (i > 0) @@ -190,13 +191,13 @@ static NSDictionary* _shortHeightAttribute = nil; thisJobAudioInfo = [thisJobAudioInfo stringByAppendingString:[NSString stringWithFormat:@"Track %d: Source: %@ Output: %@, 6 Channel Discreet", i + 1, [NSString stringWithUTF8String:audio->lang.description], outputCodec]]; else thisJobAudioInfo = [thisJobAudioInfo stringByAppendingString:[NSString stringWithFormat:@"Track %d: Source: %@ Output: Unknown Codec Info", i + 1, [NSString stringWithUTF8String:audio->lang.description]]]; - + thisJobAudioInfo = [thisJobAudioInfo stringByAppendingString:[NSString stringWithFormat:@", %d kbps, %d Hz", audio->out.bitrate, audio->out.samplerate]]; - + } audioinfo_summary = [[NSString stringWithFormat:@"%@",thisJobAudioInfo]retain]; audioinfo_codecs = [[NSString stringWithFormat:@"%@",thisJobAudioCodecs]retain]; - + subtitle = job->subtitle; mux = job->mux; if (job->file) @@ -237,7 +238,7 @@ static NSDictionary* _shortHeightAttribute = nil; anamorphic_width = 0; // not needed for this case anamorphic_height = 0; // not needed for this case } - + } return self; } @@ -282,7 +283,7 @@ static NSDictionary* _shortHeightAttribute = nil; { NSMutableAttributedString * finalString = [[[NSMutableAttributedString alloc] initWithString: @""] autorelease]; - + // Attributes NSMutableParagraphStyle * ps = [HBJob descriptionParagraphStyle]; NSDictionary* detailAttr = [HBJob descriptionDetailAttribute]; @@ -310,13 +311,13 @@ static NSDictionary* _shortHeightAttribute = nil; [finalString appendAttributedString:imageAsString]; } - + // Note: use title->name instead of title->dvd since name is just the chosen // folder, instead of dvd which is the full path [finalString appendString:titleName withAttributes:titleAttr]; - + NSString * summaryInfo; - + NSString * chapterString = (chapter_start == chapter_end) ? [NSString stringWithFormat:@"Chapter %d", chapter_start] : [NSString stringWithFormat:@"Chapters %d through %d", chapter_start, chapter_end]; @@ -349,13 +350,13 @@ static NSDictionary* _shortHeightAttribute = nil; summaryInfo = [NSString stringWithFormat: @" (Title %d, %@, %d Video Passes)", titleIndex, chapterString, numVideoPasses]; [finalString appendString:[NSString stringWithFormat:@"%@\n", summaryInfo] withAttributes:detailAttr]; - + // Insert a short-in-height line to put some white space after the title [finalString appendString:@"\n" withAttributes:shortHeightAttr]; } - + // End of title stuff - + // Pass Name if (withPassName) @@ -387,7 +388,7 @@ static NSDictionary* _shortHeightAttribute = nil; [finalString appendAttributedString:imageAsString]; } - + NSString * jobPassName; if (pass == -1) jobPassName = NSLocalizedString (@"Deep Scan", nil); @@ -420,30 +421,13 @@ static NSDictionary* _shortHeightAttribute = nil; { // Deterimine for sure how we are now setting iPod uuid atom if (h264_level) // We are encoding for iPod - jobVideoCodec = @"x264 (H.264 iPod)"; // HB_VCODEC_X264 + jobVideoCodec = @"x264 (H.264 iPod)"; // HB_VCODEC_X264 else jobVideoCodec = @"x264 (H.264 Main)"; // HB_VCODEC_X264 } } if (jobVideoCodec == nil) jobVideoCodec = @"unknown"; - - // Audio Codec needed by FormatInfo and AudioInfo - NSString * jobAudioCodec = nil; - if (withFormatInfo || withAudioInfo) - { - if (acodec == 256) - jobAudioCodec = @"AAC"; // HB_ACODEC_FAAC - else if (acodec == 512) - jobAudioCodec = @"MP3"; // HB_ACODEC_LAME - else if (acodec == 1024) - jobAudioCodec = @"Vorbis"; // HB_ACODEC_VORBIS - else if (acodec == 2048) - jobAudioCodec = @"AC3"; // HB_ACODEC_AC3 - } - if (jobAudioCodec == nil) - jobAudioCodec = @"unknown"; - if (withFormatInfo) { @@ -459,12 +443,12 @@ static NSDictionary* _shortHeightAttribute = nil; jobFormatInfo = @"MKV"; // HB_MUX_MKV else jobFormatInfo = @"unknown"; - + if (chapter_markers == 1) jobFormatInfo = [NSString stringWithFormat:@"%@ Container, %@ Video + %@ Audio, Chapter Markers\n", jobFormatInfo, jobVideoCodec, audioinfo_codecs]; else jobFormatInfo = [NSString stringWithFormat:@"%@ Container, %@ Video + %@ Audio\n", jobFormatInfo, jobVideoCodec, audioinfo_codecs]; - + [finalString appendString: @"Format: " withAttributes:detailBoldAttr]; [finalString appendString: jobFormatInfo withAttributes:detailAttr]; } @@ -487,10 +471,10 @@ static NSDictionary* _shortHeightAttribute = nil; jobPictureInfo = [NSString stringWithFormat:@"%d x %d", output_width, output_height]; if (keep_ratio == 1) jobPictureInfo = [jobPictureInfo stringByAppendingString:@" Keep Aspect Ratio"]; - + if (grayscale == 1) jobPictureInfo = [jobPictureInfo stringByAppendingString:@", Grayscale"]; - + if (deinterlace == 1) jobPictureInfo = [jobPictureInfo stringByAppendingString:@", Deinterlace"]; if (withIcon) // implies indent the info @@ -498,12 +482,12 @@ static NSDictionary* _shortHeightAttribute = nil; [finalString appendString: @"Picture: " withAttributes:detailBoldAttr]; [finalString appendString:[NSString stringWithFormat:@"%@\n", jobPictureInfo] withAttributes:detailAttr]; } - + if (withVideoInfo) { NSString * jobVideoQuality; NSString * jobVideoDetail; - + if (vquality <= 0 || vquality >= 1) jobVideoQuality = [NSString stringWithFormat:@"%d kbps", vbitrate]; else @@ -512,11 +496,11 @@ static NSDictionary* _shortHeightAttribute = nil; vidQuality = [NSNumber numberWithInt:vquality * 100]; // this is screwed up kind of. Needs to be formatted properly. if (crf == 1) - jobVideoQuality = [NSString stringWithFormat:@"%@%% CRF", vidQuality]; + jobVideoQuality = [NSString stringWithFormat:@"%@%% CRF", vidQuality]; else jobVideoQuality = [NSString stringWithFormat:@"%@%% CQP", vidQuality]; } - + if (vrate_base == 1126125) { // NTSC FILM 23.976 @@ -537,7 +521,7 @@ static NSDictionary* _shortHeightAttribute = nil; [finalString appendString: @"Video: " withAttributes:detailBoldAttr]; [finalString appendString:[NSString stringWithFormat:@"%@\n", jobVideoDetail] withAttributes:detailAttr]; } - + if (withx264Info) { if (vcodec == HB_VCODEC_X264 && x264opts) @@ -556,7 +540,7 @@ static NSDictionary* _shortHeightAttribute = nil; [finalString appendString: @"Audio: " withAttributes:detailBoldAttr]; [finalString appendString:[NSString stringWithFormat:@"%@\n", audioinfo_summary] withAttributes:detailAttr]; } - + if (withSubtitleInfo) { // subtitle scan == -1 in two cases: @@ -580,11 +564,11 @@ static NSDictionary* _shortHeightAttribute = nil; } } } - - + + if ([[finalString string] hasSuffix: @"\n"]) [finalString deleteCharactersInRange: NSMakeRange([[finalString string] length]-1, 1)]; - + return finalString; } @@ -668,7 +652,7 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; [self setNeedsDescription: NO]; fStatus = HBStatusNone; } - return self; + return self; } - (void) dealloc @@ -702,9 +686,9 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; return [fJobs indexOfObject: aJob]; } -- (NSEnumerator *) jobEnumerator +- (NSMutableArray *) fJobs { - return [fJobs objectEnumerator]; + return fJobs; } - (void) setNeedsDescription: (BOOL)flag @@ -716,16 +700,16 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; { fNeedsDescription = NO; - [fDescription deleteCharactersInRange: NSMakeRange(0, [fDescription length])]; + [fDescription deleteCharactersInRange: NSMakeRange(0, [fDescription length])]; if ([self count] == 0) { NSAssert(NO, @" jobgroup with no jobs"); return; } - + HBJob * job = [self jobAtIndex:0]; - + // append the title [fDescription appendAttributedString: [job attributedDescriptionWithIcon: NO withTitle: YES @@ -745,7 +729,7 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; [fDescription appendString:fPresetName withAttributes:[HBJob descriptionDetailAttribute]]; [fDescription appendString:@"\n" withAttributes:[HBJob descriptionDetailAttribute]]; } - + // append the format and destinaton [fDescription appendAttributedString: [job attributedDescriptionWithIcon: NO withTitle: NO @@ -759,10 +743,9 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; withSubtitleInfo: NO]]; - static NSAttributedString * carriageReturn = [[NSAttributedString alloc] initWithString:@"\n"]; - - NSEnumerator * e = [self jobEnumerator]; - while ( (job = [e nextObject]) ) + NSAttributedString * carriageReturn = [[NSAttributedString alloc] initWithString:@"\n"]; + + for( job in fJobs ) { int pass = job->pass; [fDescription appendAttributedString:carriageReturn]; @@ -778,7 +761,7 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; withAudioInfo: pass == 0 || pass == 2 withSubtitleInfo: YES]]; } - + } - (NSMutableAttributedString *) attributedDescription @@ -793,11 +776,11 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; // Try to return the cached value if no changes have happened since the last time if ((width == fLastDescriptionWidth) && (fLastDescriptionHeight != 0) && !fNeedsDescription) return fLastDescriptionHeight; - + if (fNeedsDescription) [self updateDescription]; - // Calculate the height + // Calculate the height NSRect bounds = [fDescription boundingRectWithSize:NSMakeSize(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin]; fLastDescriptionHeight = bounds.size.height + 6.0; // add some border to bottom fLastDescriptionWidth = width; @@ -828,7 +811,7 @@ NSString *HBJobGroupStatusNotification = @"HBJobGroupStatusNotification"; NSDictionary * userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:self->fStatus] forKey:@"HBOldJobGroupStatus"]; self->fStatus = status; - + // Send notification with old status [[NSNotificationCenter defaultCenter] postNotificationName:HBJobGroupStatusNotification object:self userInfo:userInfo]; } @@ -979,14 +962,14 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe { if (showPane == fCurrentJobPaneShown) return; - + // Things to keep in mind: // - When the current job pane is shown, it occupies the upper portion of the // window with the queue occupying the bottom portion of the window. // - When the current job pane is hidden, it slides up and out of view. // NSView setHidden is NOT used. The queue pane is resized to occupy the full // window. - + NSRect windowFrame = [[fCurrentJobPane superview] frame]; NSRect queueFrame, jobFrame; if (showPane) @@ -997,7 +980,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe jobFrame = [fCurrentJobPane frame]; jobFrame.origin.y = NSHeight(windowFrame); } - + // Move fCurrentJobPane NSDictionary * dict1 = [NSDictionary dictionaryWithObjectsAndKeys: fCurrentJobPane, NSViewAnimationTargetKey, @@ -1015,7 +998,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe [anAnimation setDuration:0.25]; [anAnimation setAnimationBlockingMode:NSAnimationBlocking]; // prevent user from resizing the window during an animation [anAnimation startAnimation]; - + fCurrentJobPaneShown = showPane; } @@ -1040,9 +1023,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe //------------------------------------------------------------------------------------ - (HBJobGroup *) pendingJobGroupWithDestinationPath: (NSString *)path { - HBJobGroup * aJobGroup; - NSEnumerator * groupEnum = [fJobGroups objectEnumerator]; - while ( (aJobGroup = [groupEnum nextObject]) ) + for( HBJobGroup * aJobGroup in fJobGroups ) { if ([[aJobGroup destinationPath] isEqualToString: path]) return aJobGroup; @@ -1055,13 +1036,9 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe //------------------------------------------------------------------------------------ - (HBJob *) findJobWithID: (int)aJobID { - HBJobGroup * aJobGroup; - NSEnumerator * groupEnum = [fJobGroups objectEnumerator]; - while ( (aJobGroup = [groupEnum nextObject]) ) + for( HBJobGroup * aJobGroup in fJobGroups ) { - HBJob * job; - NSEnumerator * jobEnum = [aJobGroup jobEnumerator]; - while ( (job = [jobEnum nextObject]) ) + for( HBJob * job in [aJobGroup fJobs] ) { if (job->sequence_id == aJobID) return job; @@ -1108,9 +1085,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe fCanceledCount = 0; fWorkingCount = 0; - NSEnumerator * groupEnum = [fJobGroups objectEnumerator]; - HBJobGroup * aJobGroup; - while ( (aJobGroup = [groupEnum nextObject]) ) + for( HBJobGroup * aJobGroup in fJobGroups ) { switch ([aJobGroup status]) { @@ -1188,18 +1163,17 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe fSavedExpandedItems = [[NSMutableIndexSet alloc] init]; else [fSavedExpandedItems removeAllIndexes]; - + // This code stores the sequence_id of the first job of each job group into an // index set. This is sufficient to identify each group uniquely. - + HBJobGroup * aJobGroup; - NSEnumerator * e = [fJobGroups objectEnumerator]; - while ( (aJobGroup = [e nextObject]) ) + for( aJobGroup in fJobGroups ) { if ([fOutlineView isItemExpanded: aJobGroup]) [fSavedExpandedItems addIndex: [aJobGroup jobAtIndex:0]->sequence_id]; } - + // Save the selection also. if (!fSavedSelectedItems) @@ -1226,23 +1200,19 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe { if (fSavedExpandedItems) { - HBJobGroup * aJobGroup; - NSEnumerator * e = [fJobGroups objectEnumerator]; - while ( (aJobGroup = [e nextObject]) ) + for( HBJobGroup * aJobGroup in fJobGroups ) { HBJob * job = [aJobGroup jobAtIndex:0]; if (job && [fSavedExpandedItems containsIndex: job->sequence_id]) [fOutlineView expandItem: aJobGroup]; } } - + if (fSavedSelectedItems) { NSMutableIndexSet * rowsToSelect = [[[NSMutableIndexSet alloc] init] autorelease]; - HBJobGroup * aJobGroup; - NSEnumerator * e = [fJobGroups objectEnumerator]; NSInteger i = 0; - while ( (aJobGroup = [e nextObject]) ) + for( HBJobGroup * aJobGroup in fJobGroups ) { HBJob * job = [aJobGroup jobAtIndex:0]; if (job && [fSavedSelectedItems containsIndex: job->sequence_id]) @@ -1341,7 +1311,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe msg = NSLocalizedString( @"Encoding movie", nil ); else return @""; // unknown condition! - + if( s->param.working.seconds > -1 ) { return [NSString stringWithFormat: @@ -1361,7 +1331,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe else if (s->state == HB_STATE_WORKDONE) return NSLocalizedString( @"Done", nil ); - + return @""; } @@ -1375,7 +1345,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe #define p s->param.working if (p.seconds < 0) return @""; - + // Minutes always needed NSString * minutes; if (p.minutes > 1) @@ -1384,7 +1354,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe minutes = NSLocalizedString( @"1 minute ", nil ); else minutes = @""; - + if (p.hours >= 1) { NSString * hours; @@ -1395,7 +1365,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe return [NSString stringWithFormat:NSLocalizedString( @"%@%@remaining", nil ), hours, minutes]; } - + else { NSString * seconds; @@ -1433,7 +1403,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe */ #undef p } - + return @""; } @@ -1462,7 +1432,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe [fProgressBar setDoubleValue:progress_total]; #undef p } - + else if (s->state == HB_STATE_MUXING) { #define p s->param.muxing @@ -1476,10 +1446,8 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe [fProgressBar setIndeterminate:NO]; [fProgressBar stopAnimation:nil]; [fProgressBar setDoubleValue:0.0]; - - } - + else [fProgressBar stopAnimation:nil]; // just in case in was animating } @@ -1532,7 +1500,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe withAudioInfo: NO withSubtitleInfo: YES]]; break; - + case 1: // video 1st pass [fJobDescTextField setAttributedStringValue: [fCurrentJob attributedDescriptionWithIcon: NO @@ -1546,7 +1514,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe withAudioInfo: NO withSubtitleInfo: NO]]; break; - + case 0: // single pass case 2: // video 2nd pass + audio [fJobDescTextField setAttributedStringValue: @@ -1561,7 +1529,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe withAudioInfo: YES withSubtitleInfo: YES]]; break; - + default: // unknown [fJobDescTextField setAttributedStringValue: [fCurrentJob attributedDescriptionWithIcon: NO @@ -1579,9 +1547,9 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe else { [fJobDescTextField setStringValue: @"No encodes pending"]; - + } - + } //------------------------------------------------------------------------------------ @@ -1615,7 +1583,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe [self setJobGroupCountsNeedUpdating:YES]; [fOutlineView noteNumberOfRowsChanged]; [fOutlineView reloadData]; - [self restoreOutlineViewState]; + [self restoreOutlineViewState]; [self updateQueueCountField]; } @@ -1628,7 +1596,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe - (IBAction)removeSelectedJobGroups: (id)sender { if (!fHandle) return; - + NSIndexSet * selectedRows = [fOutlineView selectedRowIndexes]; NSInteger row = [selectedRows firstIndex]; if (row != NSNotFound) @@ -1648,9 +1616,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe break; case HBStatusPending: // Remove from libhb - HBJob * job; - NSEnumerator * e = [jobGroup jobEnumerator]; - while (job = [e nextObject]) + for( HBJob * job in [jobGroup fJobs] ) { hb_job_t * libhbJob = [self findLibhbJobWithID:job->sequence_id]; if (libhbJob) @@ -1662,11 +1628,11 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe case HBStatusNone: break; } - + row = [selectedRows indexGreaterThanIndex: row]; } [self endEditingJobGroupsArray]; - } + } } //------------------------------------------------------------------------------------ @@ -1675,7 +1641,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe - (IBAction)revealSelectedJobGroups: (id)sender { if (!fHandle) return; - + NSIndexSet * selectedRows = [fOutlineView selectedRowIndexes]; NSInteger row = [selectedRows firstIndex]; if (row != NSNotFound) @@ -1685,10 +1651,10 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe HBJobGroup * jobGroup = [fOutlineView itemAtRow: row]; if ([[jobGroup destinationPath] length]) [[NSWorkspace sharedWorkspace] selectFile:[jobGroup destinationPath] inFileViewerRootedAtPath:nil]; - + row = [selectedRows indexGreaterThanIndex: row]; } - } + } } //------------------------------------------------------------------------------------ @@ -1708,7 +1674,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe - (IBAction)toggleStartCancel: (id)sender { if (!fHandle) return; - + hb_state_t s; hb_get_state2 (fHandle, &s); @@ -1725,7 +1691,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe - (IBAction)togglePauseResume: (id)sender { if (!fHandle) return; - + hb_state_t s; hb_get_state2 (fHandle, &s); @@ -1736,7 +1702,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe } #pragma mark - -#pragma mark Synchronizing with libhb +#pragma mark Synchronizing with libhb //------------------------------------------------------------------------------------ // Queues a job group. The job group's status is set to HBStatusPending. @@ -1745,7 +1711,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe { NSAssert(![fJobGroups containsObject:aJobGroup], @"Duplicate job group"); [aJobGroup setStatus:HBStatusPending]; - + [self beginEditingJobGroupsArray]; [fJobGroups addObject:aJobGroup]; [self endEditingJobGroupsArray]; @@ -1756,7 +1722,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe //------------------------------------------------------------------------------------ - (void)currentJobChanged: (HBJob *) currentJob { - /* if the job has a destination path, lets perform finished job notifications in fHBController + /* if the job has a destination path, lets perform finished job notifications in fHBController * We call this here so that we pickup the last job in the queue and single encodes before fCurrentJob * is released. So for the first job and the beginning of single encodes we check for the existence * of a valid fCurrentJob jobGroup @@ -1788,7 +1754,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe [fHBController writeToActivityLog: "Using preset: %s", [[[fCurrentJob jobGroup] presetName] UTF8String]]; // Check to see if this is also a change in Job Group - + HBJobGroup * theJobGroup = [currentJob jobGroup]; if ((theJobGroup == nil) || (theJobGroup != fCurrentJobGroup)) // no more job groups or start of a new group { @@ -1803,13 +1769,12 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe { [fCurrentJobGroup setStatus:HBStatusCompleted]; } - - + } - + // Set the new group [self setCurrentJobGroup: theJobGroup]; - + // Update the UI [self updateCurrentJobDescription]; [self updateCurrentJobProgress]; @@ -1819,7 +1784,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe else [self stopAnimatingCurrentJobGroupInQueue]; } - + else // start a new job/pass in the same group { // Update the UI @@ -1844,7 +1809,7 @@ static NSString* HBQueuePauseResumeToolbarIdentifier = @"HBQueuePauseRe //------------------------------------------------------------------------------------ // Notifies HBQueueController that libhb's state has changed //------------------------------------------------------------------------------------ -- (void)libhbStateChanged: (hb_state_t &)state +- (void)libhbStateChanged: (hb_state_t)state { switch( state.state ) { @@ -1919,7 +1884,7 @@ static CGFloat spacingWidth = 3.0; - (void) jobGroupStatusNotification:(NSNotification *)notification { [self setJobGroupCountsNeedUpdating: YES]; -// HBQueueJobGroupStatus oldStatus = (HBQueueJobGroupStatus) [[[notification userInfo] objectForKey:@"HBOldJobGroupStatus"] intValue]; +// HBQueueJobGroupStatus oldStatus = (HBQueueJobGroupStatus) [[[notification userInfo] objectForKey:@"HBOldJobGroupStatus"] integerValue]; HBJobGroup * jobGroup = [notification object]; if (jobGroup) [self updateJobGroupInQueue:jobGroup]; @@ -1960,43 +1925,43 @@ static CGFloat spacingWidth = 3.0; // Required delegate method: Given an item identifier, this method returns an item. // The toolbar will use this method to obtain toolbar items that can be displayed // in the customization sheet, or in the toolbar itself. - + NSToolbarItem *toolbarItem = nil; - + if ([itemIdentifier isEqual: HBQueueStartCancelToolbarIdentifier]) { toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease]; - - // Set the text label to be displayed in the toolbar and customization palette + + // Set the text label to be displayed in the toolbar and customization palette [toolbarItem setLabel: @"Start"]; [toolbarItem setPaletteLabel: @"Start/Cancel"]; - + // Set up a reasonable tooltip, and image [toolbarItem setToolTip: @"Start Encoding"]; [toolbarItem setImage: [NSImage imageNamed: @"Play"]]; - - // Tell the item what message to send when it is clicked + + // Tell the item what message to send when it is clicked [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(toggleStartCancel:)]; } - + if ([itemIdentifier isEqual: HBQueuePauseResumeToolbarIdentifier]) { toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease]; - - // Set the text label to be displayed in the toolbar and customization palette + + // Set the text label to be displayed in the toolbar and customization palette [toolbarItem setLabel: @"Pause"]; [toolbarItem setPaletteLabel: @"Pause/Resume"]; - + // Set up a reasonable tooltip, and image [toolbarItem setToolTip: @"Pause Encoding"]; [toolbarItem setImage: [NSImage imageNamed: @"Pause"]]; - - // Tell the item what message to send when it is clicked + + // Tell the item what message to send when it is clicked [toolbarItem setTarget: self]; [toolbarItem setAction: @selector(togglePauseResume:)]; } - + return toolbarItem; } @@ -2007,7 +1972,7 @@ static CGFloat spacingWidth = 3.0; { // Required delegate method: Returns the ordered list of items to be shown in the // toolbar by default. - + return [NSArray arrayWithObjects: HBQueueStartCancelToolbarIdentifier, HBQueuePauseResumeToolbarIdentifier, @@ -2074,7 +2039,7 @@ static CGFloat spacingWidth = 3.0; [toolbarItem setToolTip: @"Start Encoding"]; } } - + if ([[toolbarItem itemIdentifier] isEqual: HBQueuePauseResumeToolbarIdentifier]) { if (s.state == HB_STATE_PAUSED) @@ -2084,7 +2049,7 @@ static CGFloat spacingWidth = 3.0; [toolbarItem setLabel: @"Resume"]; [toolbarItem setToolTip: @"Resume Encoding"]; } - + else if ((s.state == HB_STATE_WORKING) || (s.state == HB_STATE_MUXING)) { enable = YES; @@ -2100,7 +2065,7 @@ static CGFloat spacingWidth = 3.0; [toolbarItem setToolTip: @"Pause Encoding"]; } } - + return enable; } @@ -2131,8 +2096,8 @@ static CGFloat spacingWidth = 3.0; #if HB_OUTLINE_METRIC_CONTROLS [fIndentation setHidden: NO]; [fSpacing setHidden: NO]; - [fIndentation setIntValue:[fOutlineView indentationPerLevel]]; // debug - [fSpacing setIntValue:3]; // debug + [fIndentation setIntegerValue:[fOutlineView indentationPerLevel]]; // debug + [fSpacing setIntegerValue:3]; // debug #endif // Show/hide UI elements @@ -2157,11 +2122,11 @@ static CGFloat spacingWidth = 3.0; { NSUInteger index = [indexSet lastIndex]; NSUInteger aboveInsertIndexCount = 0; - + while (index != NSNotFound) { NSUInteger removeIndex; - + if (index >= insertIndex) { removeIndex = index + aboveInsertIndexCount; @@ -2172,12 +2137,12 @@ static CGFloat spacingWidth = 3.0; removeIndex = index; insertIndex--; } - + id object = [[array objectAtIndex:removeIndex] retain]; [array removeObjectAtIndex:removeIndex]; [array insertObject:object atIndex:insertIndex]; [object release]; - + index = [indexSet indexLessThanIndex:index]; } } @@ -2189,7 +2154,7 @@ static CGFloat spacingWidth = 3.0; { if (item == nil) return [fJobGroups objectAtIndex:index]; - + // We are only one level deep, so we can't be asked about children NSAssert (NO, @"HBQueueController outlineView:child:ofItem: can't handle nested items."); return nil; @@ -2207,10 +2172,10 @@ static CGFloat spacingWidth = 3.0; // Our outline view has no levels, but we can still expand every item. Doing so // just makes the row taller. See heightOfRowByItem below. #if HB_QUEUE_DRAGGING - // Don't autoexpand while dragging, since we can't drop into the items - return ![(HBQueueOutlineView*)outlineView isDragging]; + // Don't autoexpand while dragging, since we can't drop into the items + return ![(HBQueueOutlineView*)outlineView isDragging]; #else - return YES; + return YES; #endif } @@ -2250,7 +2215,7 @@ static CGFloat spacingWidth = 3.0; // implemented viewDidEndLiveResize to force all of them to be recalculated. if ([outlineView inLiveResize] && [item lastDescriptionHeight] > 0) 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, @@ -2258,7 +2223,7 @@ static CGFloat spacingWidth = 3.0; // 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; } @@ -2268,9 +2233,9 @@ static CGFloat spacingWidth = 3.0; - (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item { - // nb: The "desc" column is currently an HBImageAndTextCell. However, we are longer - // using the image portion of the cell so we could switch back to a regular NSTextFieldCell. - + // nb: The "desc" column is currently an HBImageAndTextCell. However, we are longer + // using the image portion of the cell so we could switch back to a regular NSTextFieldCell. + if ([[tableColumn identifier] isEqualToString:@"desc"]) return [item attributedDescription]; else if ([[tableColumn identifier] isEqualToString:@"icon"]) @@ -2304,14 +2269,14 @@ static CGFloat spacingWidth = 3.0; theSize.width = spacingWidth; [cell setImageSpacing: theSize]; #endif - - // nb: The "desc" column is currently an HBImageAndTextCell. However, we are longer - // using the image portion of the cell so we could switch back to a regular NSTextFieldCell. + + // nb: The "desc" column is currently an HBImageAndTextCell. However, we are longer + // using the image portion of the cell so we could switch back to a regular NSTextFieldCell. // Set the image here since the value returned from outlineView:objectValueForTableColumn: didn't specify the image part [cell setImage:nil]; } - + else if ([[tableColumn identifier] isEqualToString:@"action"]) { [cell setEnabled: YES]; @@ -2361,24 +2326,22 @@ static CGFloat spacingWidth = 3.0; #if HB_QUEUE_DRAGGING - (BOOL)outlineView:(NSOutlineView *)outlineView writeItems:(NSArray *)items toPasteboard:(NSPasteboard *)pboard { - // Dragging is only allowed of the pending items. - NSEnumerator * e = [items objectEnumerator]; - HBJobGroup * group; - while ( (group = [e nextObject]) ) - { - if ([group status] != HBStatusPending) - return NO; - } - + // Dragging is only allowed of the pending items. + for( HBJobGroup * group in items ) + { + if ([group status] != HBStatusPending) + return NO; + } + // Don't retain since this is just holding temporaral drag information, and it is //only used during a drag! We could put this in the pboard actually. fDraggedNodes = items; - + // Provide data for our custom type, and simple NSStrings. [pboard declareTypes:[NSArray arrayWithObjects: HBQueuePboardType, nil] owner:self]; // the actual data doesn't matter since DragDropSimplePboardType drags aren't recognized by anyone but us!. - [pboard setData:[NSData data] forType:HBQueuePboardType]; + [pboard setData:[NSData data] forType:HBQueuePboardType]; return YES; } @@ -2387,25 +2350,25 @@ static CGFloat spacingWidth = 3.0; #if HB_QUEUE_DRAGGING - (NSDragOperation)outlineView:(NSOutlineView *)outlineView validateDrop:(id <NSDraggingInfo>)info proposedItem:(id)item proposedChildIndex:(NSInteger)index { - // Don't allow dropping ONTO an item since they can't really contain any children. + // Don't allow dropping ONTO an item since they can't really contain any children. BOOL isOnDropTypeProposal = index == NSOutlineViewDropOnItemIndex; if (isOnDropTypeProposal) return NSDragOperationNone; - // Don't allow dropping INTO an item since they can't really contain any children. - if (item != nil) - { - index = [fOutlineView rowForItem: item] + 1; - item = nil; - } - - // Prevent dragging into the completed or current job. - int firstPendingIndex = [fCompleted count]; - if (fCurrentJobGroup) - firstPendingIndex++; - index = MAX (index, firstPendingIndex); - - [outlineView setDropItem:item dropChildIndex:index]; + // Don't allow dropping INTO an item since they can't really contain any children. + if (item != nil) + { + index = [fOutlineView rowForItem: item] + 1; + item = nil; + } + + // Prevent dragging into the completed or current job. + int firstPendingIndex = [self completedCount]; + if (fCurrentJobGroup) + firstPendingIndex++; + index = MAX (index, firstPendingIndex); + + [outlineView setDropItem:item dropChildIndex:index]; return NSDragOperationGeneric; } #endif @@ -2414,10 +2377,8 @@ static CGFloat spacingWidth = 3.0; - (BOOL)outlineView:(NSOutlineView *)outlineView acceptDrop:(id <NSDraggingInfo>)info item:(id)item childIndex:(NSInteger)index { NSMutableIndexSet *moveItems = [NSMutableIndexSet indexSet]; - - id obj; - NSEnumerator *enumerator = [fDraggedNodes objectEnumerator]; - while (obj = [enumerator nextObject]) + + for( id obj in fDraggedNodes) { [moveItems addIndex:[fJobGroups indexOfObject:obj]]; } @@ -2427,7 +2388,7 @@ static CGFloat spacingWidth = 3.0; [self moveObjectsInArray:fJobGroups fromIndexes:moveItems toIndex: index]; [fOutlineView reloadData]; [self restoreOutlineViewState]; - + return YES; } #endif |