summaryrefslogtreecommitdiffstats
path: root/macosx
diff options
context:
space:
mode:
Diffstat (limited to 'macosx')
-rw-r--r--macosx/Controller.h9
-rw-r--r--macosx/Controller.mm426
-rw-r--r--macosx/English.lproj/Queue.nib/classes.nib13
-rw-r--r--macosx/English.lproj/Queue.nib/info.nib2
-rw-r--r--macosx/English.lproj/Queue.nib/keyedobjects.nib1406
-rw-r--r--macosx/HBQueueController.h22
-rw-r--r--macosx/HBQueueController.mm953
-rw-r--r--macosx/HandBrake.xcodeproj/project.pbxproj58
-rw-r--r--macosx/icons/Detail.pngbin0 -> 1808 bytes
-rw-r--r--macosx/icons/DetailPressed.pngbin0 -> 4164 bytes
-rw-r--r--macosx/icons/JobPassFirstLarge.pngbin0 -> 620 bytes
-rw-r--r--macosx/icons/JobPassFirstSmall.pngbin0 -> 280 bytes
-rw-r--r--macosx/icons/JobPassSecondLarge.pngbin0 -> 923 bytes
-rw-r--r--macosx/icons/JobPassSecondSmall.pngbin0 -> 322 bytes
-rw-r--r--macosx/icons/JobPassSubtitleLarge.pngbin0 -> 1051 bytes
-rw-r--r--macosx/icons/JobPassSubtitleSmall.pngbin0 -> 333 bytes
-rw-r--r--macosx/icons/JobPassUnknownLarge.pngbin0 -> 454 bytes
-rw-r--r--macosx/icons/JobPassUnknownSmall.pngbin0 -> 234 bytes
18 files changed, 1329 insertions, 1560 deletions
diff --git a/macosx/Controller.h b/macosx/Controller.h
index dd985a7b1..807e08ff7 100644
--- a/macosx/Controller.h
+++ b/macosx/Controller.h
@@ -221,6 +221,10 @@
- (IBAction) openMainWindow: (id) sender;
- (IBAction) addToQueue: (id) sender;
+- (void) overwriteAddToQueueAlertDone: (NSWindow *) sheet
+ returnCode: (int) returnCode contextInfo: (void *) contextInfo;
+- (void) doAddToQueue;
+
- (IBAction) showQueueWindow:(id)sender;
- (IBAction)showPreferencesWindow:(id)sender;
@@ -230,10 +234,9 @@
returnCode: (int) returnCode contextInfo: (void *) contextInfo;
- (void) updateAlertDone: (NSWindow *) sheet
returnCode: (int) returnCode contextInfo: (void *) contextInfo;
-- (void) _Rip;
+- (void) doRip;
+
- (IBAction) Cancel: (id) sender;
-- (void) _Cancel: (NSWindow *) sheet returnCode: (int) returnCode
- contextInfo: (void *) contextInfo;
- (IBAction) Pause: (id) sender;
- (IBAction) calculateBitrate: (id) sender;
diff --git a/macosx/Controller.mm b/macosx/Controller.mm
index 297eaf7e2..86d18ff13 100644
--- a/macosx/Controller.mm
+++ b/macosx/Controller.mm
@@ -51,23 +51,6 @@ static NSString * AddToQueueIdentifier = @"Add to Queue Ite
static NSString * ShowActivityIdentifier = @"Debug Output Item Identifier";
static NSString * ChooseSourceIdentifier = @"Choose Source Item Identifier";
-/**
- * Returns the number of jobs groups in the queue.
- * @param h Handle to hb_handle_t.
- * @return Number of job groups.
- */
-static int hb_group_count(hb_handle_t * h)
-{
- hb_job_t * job;
- int count = 0;
- int index = 0;
- while( ( job = hb_job( h, index++ ) ) )
- {
- if (job->sequence_id == 0)
- count++;
- }
- return count;
-}
/*******************************
* HBController implementation *
@@ -101,6 +84,7 @@ static int hb_group_count(hb_handle_t * h)
/* Init others controllers */
[fPictureController SetHandle: fHandle];
[fQueueController setHandle: fHandle];
+ [fQueueController setHBController: self];
fChapterTitlesDelegate = [[ChapterTitles alloc] init];
[fChapterTable setDataSource:fChapterTitlesDelegate];
@@ -433,7 +417,7 @@ static int hb_group_count(hb_handle_t * h)
{
return [NSArray arrayWithObjects: StartEncodingIdentifier, PauseEncodingIdentifier, AddToQueueIdentifier,
ChooseSourceIdentifier, ShowQueueIdentifier, ShowActivityIdentifier, ToggleDrawerIdentifier,
- NSToolbarCustomizeToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, NSToolbarSpaceItemIdentifier,
+ NSToolbarCustomizeToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier,
NSToolbarSpaceItemIdentifier, NSToolbarSeparatorItemIdentifier, nil];
}
@@ -451,9 +435,9 @@ static int hb_group_count(hb_handle_t * h)
if ([ident isEqualToString: StartEncodingIdentifier])
{
[toolbarItem setImage: [NSImage imageNamed: @"Stop"]];
- [toolbarItem setLabel: @"Cancel"];
- [toolbarItem setPaletteLabel: @"Cancel"];
- [toolbarItem setToolTip: @"Cancel Encoding"];
+ [toolbarItem setLabel: @"Stop"];
+ [toolbarItem setPaletteLabel: @"Stop"];
+ [toolbarItem setToolTip: @"Stop Encoding"];
return YES;
}
if ([ident isEqualToString: PauseEncodingIdentifier])
@@ -490,7 +474,10 @@ static int hb_group_count(hb_handle_t * h)
if ([ident isEqualToString: StartEncodingIdentifier])
{
[toolbarItem setImage: [NSImage imageNamed: @"Play"]];
- [toolbarItem setLabel: @"Start"];
+ if (hb_count(fHandle) > 0)
+ [toolbarItem setLabel: @"Start Queue"];
+ else
+ [toolbarItem setLabel: @"Start"];
[toolbarItem setPaletteLabel: @"Start Encoding"];
[toolbarItem setToolTip: @"Start Encoding"];
return YES;
@@ -707,8 +694,6 @@ static int hb_group_count(hb_handle_t * h)
[self showNewScan: NULL];
}
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
-
hb_state_t s;
hb_get_state( fHandle, &s );
@@ -768,7 +753,7 @@ static int hb_group_count(hb_handle_t * h)
[fRipIndicator setDoubleValue: 100.0 * progress_total];
// If progress bar hasn't been revealed at the bottom of the window, do
- // that now. This code used to be in _Rip. I moved it to here to handle
+ // that now. This code used to be in doRip. I moved it to here to handle
// the case where hb_start is called by HBQueueController and not from
// HBController.
if (!fRipIndicatorShown)
@@ -832,6 +817,27 @@ static int hb_group_count(hb_handle_t * h)
case HB_STATE_WORKDONE:
{
+ // HB_STATE_WORKDONE happpens as a result of hblib finishing all its jobs
+ // or someone calling hb_stop. In the latter case, hb_stop does not clear
+ // out the remaining passes/jobs in the queue. We'll do that here.
+
+ // Delete all remaining scans of this job, ie, delete whole encodes.
+ hb_job_t * job;
+ while( ( job = hb_job( fHandle, 0 ) ) && (job->sequence_id != 0) )
+ hb_rem( fHandle, job );
+
+ // Start processing back up if jobs still left in queue
+ if (hb_count(fHandle) > 0)
+ {
+ hb_start(fHandle);
+ fEncodeState = 1;
+ // Validate the toolbar (hack). The toolbar will usually get autovalidated
+ // before we had the chance to restart the queue, hence it will now be in
+ // the wrong state.
+ [toolbar validateVisibleItems];
+ break;
+ }
+
[fStatusField setStringValue: _( @"Done." )];
[fRipIndicator setIndeterminate: NO];
[fRipIndicator setDoubleValue: 0.0];
@@ -840,21 +846,6 @@ static int hb_group_count(hb_handle_t * h)
/* Restore dock icon */
[self UpdateDockIcon: -1.0];
- if (jobGroups)
- {
- // Delete all remaining scans of this job
- hb_job_t * job;
- while( ( job = hb_job( fHandle, 0 ) ) && (job->sequence_id != 0) )
- hb_rem( fHandle, job );
- }
-
- // Start processing back up if jobs still left in queue
- if (hb_count(fHandle) > 0)
- {
- hb_start(fHandle);
- break;
- }
-
if (fRipIndicatorShown)
{
NSRect frame = [fWindow frame];
@@ -888,7 +879,7 @@ static int hb_group_count(hb_handle_t * h)
/*On Screen Notification*/
int status;
NSBeep();
- status = NSRunAlertPanel(@"Put down that cocktail...",@"your HandBrake encode is done!", @"OK", nil, nil);
+ status = NSRunAlertPanel(@"Put down that cocktail...",@"Your HandBrake encode is done!", @"OK", nil, nil);
[NSApp requestUserAttention:NSCriticalRequest];
if ( status == NSAlertDefaultReturn )
{
@@ -943,12 +934,12 @@ static int hb_group_count(hb_handle_t * h)
}
/* Lets show the queue status here in the main window */
- int queue_count = jobGroups ? hb_group_count( fHandle ) : hb_count( fHandle );
+ int queue_count = hb_count( fHandle );
if( queue_count )
{
[fQueueStatus setStringValue: [NSString stringWithFormat:
- @"%d task%s in the queue",
- queue_count, ( queue_count > 1 ) ? "s" : ""]];
+ @"%d pass%s in the queue",
+ queue_count, ( queue_count > 1 ) ? "es" : ""]];
}
else
{
@@ -1540,114 +1531,142 @@ static int hb_group_count(hb_handle_t * h)
+/* addToQueue: puts up an alert before ultimately calling doAddToQueue
+*/
- (IBAction) addToQueue: (id) sender
{
-/* We get the destination directory from the destingation field here */
+ /* We get the destination directory from the destination field here */
NSString *destinationDirectory = [[fDstFile2Field stringValue] stringByDeletingLastPathComponent];
/* We check for a valid destination here */
if ([[NSFileManager defaultManager] fileExistsAtPath:destinationDirectory] == 0)
{
NSRunAlertPanel(@"Warning!", @"This is not a valid destination directory!", @"OK", nil, nil);
+ return;
}
- else
- {
-
- hb_list_t * list = hb_get_titles( fHandle );
- hb_title_t * title = (hb_title_t *) hb_list_item( list,
- [fSrcTitlePopUp indexOfSelectedItem] );
- hb_job_t * job = title->job;
-
- // Assign a sequence number, starting at zero, to each job added so they can
- // be lumped together in the UI.
- job->sequence_id = -1;
-
- [self PrepareJob];
-
- /* Destination file */
- job->file = [[fDstFile2Field stringValue] UTF8String];
- if( [fSubForcedCheck state] == NSOnState )
- {
- job->subtitle_force = 1;
- } else {
- job->subtitle_force = 0;
- }
+ /* We check for duplicate name here */
+ if( [[NSFileManager defaultManager] fileExistsAtPath:
+ [fDstFile2Field stringValue]] )
+ {
+ NSBeginCriticalAlertSheet( _( @"File already exists" ),
+ _( @"Cancel" ), _( @"Overwrite" ), NULL, fWindow, self,
+ @selector( overwriteAddToQueueAlertDone:returnCode:contextInfo: ),
+ NULL, NULL, [NSString stringWithFormat:
+ _( @"Do you want to overwrite %@?" ),
+ [fDstFile2Field stringValue]] );
+ // overwriteAddToQueueAlertDone: will be called when the alert is dismissed.
+ }
+ else
+ {
+ [self doAddToQueue];
+ }
+}
- /*
- * subtitle of -1 is a scan
- */
- if( job->subtitle == -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->subtitle = -1;
-
- job->x264opts = NULL;
-
- job->indepth_scan = 1;
-
- job->select_subtitle = (hb_subtitle_t**)malloc(sizeof(hb_subtitle_t*));
- *(job->select_subtitle) = NULL;
-
- /*
- * Add the pre-scan job
- */
- job->sequence_id++; // for job grouping
- hb_add( fHandle, job );
-
- job->x264opts = x264opts_tmp;
- } else {
- job->select_subtitle = NULL;
- }
+/* overwriteAddToQueueAlertDone: called from the alert posted by addToQueue that asks
+ the user if they want to overwrite an exiting movie file.
+*/
+- (void) overwriteAddToQueueAlertDone: (NSWindow *) sheet
+ returnCode: (int) returnCode contextInfo: (void *) contextInfo
+{
+ if( returnCode == NSAlertAlternateReturn )
+ [self doAddToQueue];
+}
- /* No subtitle were selected, so reset the subtitle to -1 (which before
- * this point meant we were scanning
- */
- if( job->subtitle == -2 )
- {
- job->subtitle = -1;
- }
+- (void) doAddToQueue
+{
+ hb_list_t * list = hb_get_titles( fHandle );
+ hb_title_t * title = (hb_title_t *) hb_list_item( list, [fSrcTitlePopUp indexOfSelectedItem] );
+ hb_job_t * job = title->job;
- if( [fVidTwoPassCheck state] == NSOnState )
- {
- hb_subtitle_t **subtitle_tmp = job->select_subtitle;
- job->indepth_scan = 0;
+ // Assign a sequence number, starting at zero, to each job added so they can
+ // be lumped together in the UI.
+ job->sequence_id = -1;
- job->pass = 1;
- job->sequence_id++; // for job grouping
- hb_add( fHandle, job );
-
- job->pass = 2;
- job->sequence_id++; // for job grouping
-
- job->x264opts = (char *)calloc(1024, 1); /* Fixme, this just leaks */
- strcpy(job->x264opts, [[fAdvancedOptions optionsString] UTF8String]);
+ [self PrepareJob];
- job->select_subtitle = subtitle_tmp;
+ /* Destination file */
+ job->file = [[fDstFile2Field stringValue] UTF8String];
- hb_add( fHandle, job );
- }
- else
- {
- job->indepth_scan = 0;
- job->pass = 0;
- job->sequence_id++; // for job grouping
- hb_add( fHandle, job );
- }
+ if( [fSubForcedCheck state] == NSOnState )
+ job->subtitle_force = 1;
+ else
+ job->subtitle_force = 0;
+
+ /*
+ * subtitle of -1 is a scan
+ */
+ if( job->subtitle == -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->subtitle = -1;
+
+ job->x264opts = NULL;
+
+ job->indepth_scan = 1;
+
+ job->select_subtitle = (hb_subtitle_t**)malloc(sizeof(hb_subtitle_t*));
+ *(job->select_subtitle) = NULL;
+
+ /*
+ * Add the pre-scan job
+ */
+ job->sequence_id++; // for job grouping
+ hb_add( fHandle, job );
+
+ job->x264opts = x264opts_tmp;
+ }
+ else
+ job->select_subtitle = NULL;
+
+ /* No subtitle were selected, so reset the subtitle to -1 (which before
+ * this point meant we were scanning
+ */
+ if( job->subtitle == -2 )
+ job->subtitle = -1;
+
+ if( [fVidTwoPassCheck state] == NSOnState )
+ {
+ hb_subtitle_t **subtitle_tmp = job->select_subtitle;
+ job->indepth_scan = 0;
+
+ job->pass = 1;
+ job->sequence_id++; // for job grouping
+ hb_add( fHandle, job );
+
+ job->pass = 2;
+ job->sequence_id++; // for job grouping
+
+ job->x264opts = (char *)calloc(1024, 1); /* Fixme, this just leaks */
+ strcpy(job->x264opts, [[fAdvancedOptions optionsString] UTF8String]);
+
+ job->select_subtitle = subtitle_tmp;
+
+ hb_add( fHandle, job );
+ }
+ else
+ {
+ job->indepth_scan = 0;
+ job->pass = 0;
+ job->sequence_id++; // for job grouping
+ hb_add( fHandle, job );
+ }
+ NSString *destinationDirectory = [[fDstFile2Field stringValue] stringByDeletingLastPathComponent];
[[NSUserDefaults standardUserDefaults] setObject:destinationDirectory forKey:@"LastDestinationDirectory"];
/* Lets try to update stuff, taken from remove in the queue controller */
[fQueueController performSelectorOnMainThread: @selector( updateQueueUI )
withObject: NULL waitUntilDone: NO];
- }
}
+/* Rip: puts up an alert before ultimately calling doRip
+*/
- (IBAction) Rip: (id) sender
{
/* Rip or Cancel ? */
@@ -1659,17 +1678,26 @@ static int hb_group_count(hb_handle_t * h)
[self Cancel: sender];
return;
}
- /* if there is no job in the queue, then add it to the queue and rip
- otherwise, there are already jobs in queue, so just rip the queue */
- int count = hb_count( fHandle );
- if( count < 1 )
- {
- [self addToQueue: sender];
- }
- /* We check for duplicate name here */
- if( [[NSFileManager defaultManager] fileExistsAtPath:
- [fDstFile2Field stringValue]] )
+ // If there are jobs in the queue, then this is a rip the queue
+
+ if (hb_count( fHandle ) > 0)
+ {
+ [self doRip];
+ return;
+ }
+
+ // Before adding jobs to the queue, check for a valid destination.
+
+ NSString *destinationDirectory = [[fDstFile2Field stringValue] stringByDeletingLastPathComponent];
+ if ([[NSFileManager defaultManager] fileExistsAtPath:destinationDirectory] == 0)
+ {
+ NSRunAlertPanel(@"Warning!", @"This is not a valid destination directory!", @"OK", nil, nil);
+ return;
+ }
+
+ /* We check for duplicate name here */
+ if( [[NSFileManager defaultManager] fileExistsAtPath:[fDstFile2Field stringValue]] )
{
NSBeginCriticalAlertSheet( _( @"File already exists" ),
_( @"Cancel" ), _( @"Overwrite" ), NULL, fWindow, self,
@@ -1677,31 +1705,34 @@ static int hb_group_count(hb_handle_t * h)
NULL, NULL, [NSString stringWithFormat:
_( @"Do you want to overwrite %@?" ),
[fDstFile2Field stringValue]] );
- return;
+
+ // overWriteAlertDone: will be called when the alert is dismissed. It will call doRip.
+ }
+ else
+ {
+ [self doRip];
}
- /* We get the destination directory from the destination field here */
- NSString *destinationDirectory = [[fDstFile2Field stringValue] stringByDeletingLastPathComponent];
- /* We check for a valid destination here */
- if ([[NSFileManager defaultManager] fileExistsAtPath:destinationDirectory] == 0)
- {
- NSRunAlertPanel(@"Warning!", @"This is not a valid destination directory!", @"OK", nil, nil);
- }
- else
- {
- [[NSUserDefaults standardUserDefaults] setObject:destinationDirectory forKey:@"LastDestinationDirectory"];
- [self _Rip];
- }
-
-
-
}
+/* overWriteAlertDone: called from the alert posted by Rip: that asks the user if they
+ want to overwrite an exiting movie file.
+*/
- (void) overWriteAlertDone: (NSWindow *) sheet
returnCode: (int) returnCode contextInfo: (void *) contextInfo
{
if( returnCode == NSAlertAlternateReturn )
{
- [self _Rip];
+ /* if there is no job in the queue, then add it to the queue and rip
+ otherwise, there are already jobs in queue, so just rip the queue */
+ int count = hb_count( fHandle );
+ if( count == 0 )
+ {
+ [self doAddToQueue];
+ }
+
+ NSString *destinationDirectory = [[fDstFile2Field stringValue] stringByDeletingLastPathComponent];
+ [[NSUserDefaults standardUserDefaults] setObject:destinationDirectory forKey:@"LastDestinationDirectory"];
+ [self doRip];
}
}
@@ -1721,7 +1752,7 @@ static int hb_group_count(hb_handle_t * h)
[NSApp terminate: self];
}
-- (void) _Rip
+- (void) doRip
{
/* Let libhb do the job */
hb_start( fHandle );
@@ -1729,25 +1760,82 @@ static int hb_group_count(hb_handle_t * h)
fEncodeState = 1;
}
-- (IBAction) Cancel: (id) sender
+
+
+
+
+//------------------------------------------------------------------------------------
+// Cancels the current job and proceeds with the next one in the queue.
+//------------------------------------------------------------------------------------
+- (void) doCancelCurrentJob
{
- NSBeginCriticalAlertSheet( _( @"Cancel - Are you sure?" ),
- _( @"Keep working" ), _( @"Cancel encoding" ), NULL, fWindow, self,
- @selector( _Cancel:returnCode:contextInfo: ), NULL, NULL,
- _( @"Encoding won't be recoverable." ) );
+ // Stop the current job. hb_stop will only cancel the current pass and then set
+ // its state to HB_STATE_WORKDONE. It also does this asynchronously. So when we
+ // see the state has changed to HB_STATE_WORKDONE (in updateUI), we'll delete the
+ // remaining passes of the job and then start the queue back up if there are any
+ // remaining jobs.
+
+ hb_stop( fHandle );
+ fEncodeState = 2; // don't alert at end of processing since this was a cancel
+
}
-- (void) _Cancel: (NSWindow *) sheet
- returnCode: (int) returnCode contextInfo: (void *) contextInfo
+//------------------------------------------------------------------------------------
+// Displays an alert asking user if the want to cancel encoding of current job.
+// Cancel: returns immediately after posting the alert. Later, when the user
+// acknowledges the alert, doCancelCurrentJob is called.
+//------------------------------------------------------------------------------------
+- (IBAction)Cancel: (id)sender
{
- if( returnCode == NSAlertAlternateReturn )
+ if (!fHandle) return;
+
+ hb_job_t * job = hb_current_job(fHandle);
+ if (!job) return;
+
+ // If command key is down, don't prompt
+ BOOL hasCmdKeyMask = ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask) != 0;
+ if (hasCmdKeyMask)
+ [self doCancelCurrentJob];
+ else
{
- hb_stop( fHandle );
- /*set the fEncodeState State */
- fEncodeState = 2;
+ NSString * alertTitle = [NSString stringWithFormat:NSLocalizedString(@"Do you want to stop encoding of %@?", nil),
+ [NSString stringWithUTF8String:job->title->name]];
+
+ // Which window to attach the sheet to?
+ NSWindow * docWindow;
+ if ([sender respondsToSelector: @selector(window)])
+ docWindow = [sender window];
+ else
+ docWindow = fWindow;
+
+ NSBeginCriticalAlertSheet(
+ alertTitle,
+ NSLocalizedString(@"Keep Encoding", nil), NSLocalizedString(@"Stop Encoding", nil), nil, docWindow, self,
+ nil, @selector(didDimissCancelCurrentJob:returnCode:contextInfo:), nil,
+ NSLocalizedString(@"Your movie will be lost if you don't continue encoding.", nil),
+ [NSString stringWithUTF8String:job->title->name]);
+
+ // didDimissCancelCurrentJob:returnCode:contextInfo: will be called when the dialog is dismissed
+
+ // N.B.: didDimissCancelCurrentJob:returnCode:contextInfo: is designated as the dismiss
+ // selector to prevent a crash. As a dismiss selector, the alert window will
+ // have already be dismissed. If we don't do it this way, the dismissing of
+ // the alert window will cause the table view to be redrawn at a point where
+ // current job has been deleted by hblib but we don't know about it yet. This
+ // is a prime example of wy we need to NOT be relying on hb_current_job!!!!
}
}
+- (void) didDimissCancelCurrentJob: (NSWindow *)sheet returnCode: (int)returnCode contextInfo: (void *)contextInfo
+{
+ if (returnCode == NSAlertAlternateReturn)
+ [self doCancelCurrentJob];
+}
+
+
+
+
+
- (IBAction) Pause: (id) sender
{
hb_state_t s;
diff --git a/macosx/English.lproj/Queue.nib/classes.nib b/macosx/English.lproj/Queue.nib/classes.nib
index 4e9bbaa78..3e0a52912 100644
--- a/macosx/English.lproj/Queue.nib/classes.nib
+++ b/macosx/English.lproj/Queue.nib/classes.nib
@@ -212,32 +212,31 @@
};
SUPERCLASS = NSObject;
},
+ {CLASS = HBImageAndTextCell; LANGUAGE = ObjC; SUPERCLASS = NSTextFieldCell; },
{CLASS = HBPictureGLView; LANGUAGE = ObjC; SUPERCLASS = NSOpenGLView; },
{
ACTIONS = {
cancelCurrentJob = id;
- detailChanged = id;
- jobGroupsChanged = id;
+ hideDetail = id;
removeSelectedJob = id;
+ showDetail = id;
+ showJobsAsGroups = id;
+ showJobsAsPasses = id;
showQueueWindow = id;
- toggleShowsDetail = id;
- toggleShowsJobsAsGroups = id;
toggleStartPause = id;
};
CLASS = HBQueueController;
LANGUAGE = ObjC;
OUTLETS = {
fCurrentJobPane = NSView;
- fDetailCheckbox = NSButton;
fJobDescTextField = NSTextField;
- fJobGroupsCheckbox = NSButton;
fJobIconView = NSImageView;
+ fOutlineView = NSOutlineView;
fProgressBar = NSProgressIndicator;
fProgressTextField = NSTextField;
fQueueCountField = NSTextField;
fQueuePane = NSView;
fQueueWindow = NSWindow;
- fStartPauseButton = NSButton;
fTaskView = NSTableView;
};
SUPERCLASS = NSObject;
diff --git a/macosx/English.lproj/Queue.nib/info.nib b/macosx/English.lproj/Queue.nib/info.nib
index f2104c54a..0d9cf8ed4 100644
--- a/macosx/English.lproj/Queue.nib/info.nib
+++ b/macosx/English.lproj/Queue.nib/info.nib
@@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
- <string>63 594 453 434 0 0 1680 1028 </string>
+ <string>361 594 453 434 0 0 1680 1028 </string>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBLockedObjects</key>
diff --git a/macosx/English.lproj/Queue.nib/keyedobjects.nib b/macosx/English.lproj/Queue.nib/keyedobjects.nib
index 2b8608f38..b43b41bee 100644
--- a/macosx/English.lproj/Queue.nib/keyedobjects.nib
+++ b/macosx/English.lproj/Queue.nib/keyedobjects.nib
@@ -11,32 +11,32 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>264</integer>
+ <integer>222</integer>
</dict>
<key>NSAccessibilityConnectors</key>
<dict>
<key>CF$UID</key>
- <integer>261</integer>
+ <integer>219</integer>
</dict>
<key>NSAccessibilityOidsKeys</key>
<dict>
<key>CF$UID</key>
- <integer>262</integer>
+ <integer>220</integer>
</dict>
<key>NSAccessibilityOidsValues</key>
<dict>
<key>CF$UID</key>
- <integer>263</integer>
+ <integer>221</integer>
</dict>
<key>NSClassesKeys</key>
<dict>
<key>CF$UID</key>
- <integer>216</integer>
+ <integer>183</integer>
</dict>
<key>NSClassesValues</key>
<dict>
<key>CF$UID</key>
- <integer>217</integer>
+ <integer>184</integer>
</dict>
<key>NSConnections</key>
<dict>
@@ -56,34 +56,34 @@
<key>NSNamesKeys</key>
<dict>
<key>CF$UID</key>
- <integer>202</integer>
+ <integer>171</integer>
</dict>
<key>NSNamesValues</key>
<dict>
<key>CF$UID</key>
- <integer>203</integer>
+ <integer>172</integer>
</dict>
<key>NSNextOid</key>
- <integer>2596</integer>
+ <integer>2610</integer>
<key>NSObjectsKeys</key>
<dict>
<key>CF$UID</key>
- <integer>199</integer>
+ <integer>168</integer>
</dict>
<key>NSObjectsValues</key>
<dict>
<key>CF$UID</key>
- <integer>201</integer>
+ <integer>170</integer>
</dict>
<key>NSOidsKeys</key>
<dict>
<key>CF$UID</key>
- <integer>218</integer>
+ <integer>185</integer>
</dict>
<key>NSOidsValues</key>
<dict>
<key>CF$UID</key>
- <integer>219</integer>
+ <integer>186</integer>
</dict>
<key>NSRoot</key>
<dict>
@@ -160,7 +160,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
@@ -170,79 +170,55 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>74</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>150</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>152</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>154</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>156</integer>
+ <integer>72</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>158</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>160</integer>
+ <integer>131</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>162</integer>
+ <integer>133</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>165</integer>
+ <integer>135</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>167</integer>
+ <integer>137</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>169</integer>
+ <integer>139</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>171</integer>
+ <integer>141</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>186</integer>
+ <integer>144</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>187</integer>
+ <integer>146</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>189</integer>
+ <integer>148</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>191</integer>
+ <integer>163</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>193</integer>
+ <integer>164</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>195</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>197</integer>
+ <integer>166</integer>
</dict>
</array>
</dict>
@@ -250,7 +226,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -260,7 +236,7 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>72</integer>
+ <integer>70</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -272,22 +248,22 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>71</integer>
+ <integer>69</integer>
</dict>
<key>NSClassName</key>
<dict>
<key>CF$UID</key>
- <integer>69</integer>
+ <integer>67</integer>
</dict>
<key>NSExtension</key>
<dict>
<key>CF$UID</key>
- <integer>70</integer>
+ <integer>68</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>68</integer>
+ <integer>66</integer>
</dict>
<key>NSNextResponder</key>
<dict>
@@ -311,12 +287,12 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>179</integer>
+ <integer>156</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>178</integer>
+ <integer>155</integer>
</dict>
<key>NSNextResponder</key>
<dict>
@@ -326,14 +302,14 @@
<key>NSSubviews</key>
<dict>
<key>CF$UID</key>
- <integer>177</integer>
+ <integer>154</integer>
</dict>
</dict>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
@@ -351,11 +327,11 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>52</integer>
+ <integer>48</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>57</integer>
+ <integer>53</integer>
</dict>
</array>
</dict>
@@ -629,7 +605,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>51</integer>
+ <integer>47</integer>
</dict>
<key>NSCell</key>
<dict>
@@ -708,7 +684,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>50</integer>
+ <integer>46</integer>
</dict>
<key>NSAlign</key>
<integer>0</integer>
@@ -718,46 +694,12 @@
<integer>130560</integer>
<key>NSCellFlags2</key>
<integer>33554432</integer>
- <key>NSContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>46</integer>
- </dict>
<key>NSScale</key>
<integer>0</integer>
<key>NSStyle</key>
<integer>0</integer>
</dict>
<dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>49</integer>
- </dict>
- <key>NSClassName</key>
- <dict>
- <key>CF$UID</key>
- <integer>47</integer>
- </dict>
- <key>NSResourceName</key>
- <dict>
- <key>CF$UID</key>
- <integer>48</integer>
- </dict>
- </dict>
- <string>NSImage</string>
- <string>JobLarge</string>
- <dict>
- <key>$classes</key>
- <array>
- <string>NSCustomResource</string>
- <string>%NSCustomResource</string>
- <string>NSObject</string>
- </array>
- <key>$classname</key>
- <string>NSCustomResource</string>
- </dict>
- <dict>
<key>$classes</key>
<array>
<string>NSImageCell</string>
@@ -789,14 +731,14 @@
<key>NSCell</key>
<dict>
<key>CF$UID</key>
- <integer>54</integer>
+ <integer>50</integer>
</dict>
<key>NSEnabled</key>
<true/>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>53</integer>
+ <integer>49</integer>
</dict>
<key>NSNextResponder</key>
<dict>
@@ -830,17 +772,17 @@
<key>NSContents</key>
<dict>
<key>CF$UID</key>
- <integer>55</integer>
+ <integer>51</integer>
</dict>
<key>NSControlView</key>
<dict>
<key>CF$UID</key>
- <integer>52</integer>
+ <integer>48</integer>
</dict>
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>56</integer>
+ <integer>52</integer>
</dict>
<key>NSTextColor</key>
<dict>
@@ -869,19 +811,19 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>66</integer>
+ <integer>64</integer>
</dict>
<key>NSCell</key>
<dict>
<key>CF$UID</key>
- <integer>59</integer>
+ <integer>55</integer>
</dict>
<key>NSEnabled</key>
<true/>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>58</integer>
+ <integer>54</integer>
</dict>
<key>NSNextResponder</key>
<dict>
@@ -901,7 +843,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>65</integer>
+ <integer>63</integer>
</dict>
<key>NSAlternateContents</key>
<dict>
@@ -911,7 +853,7 @@
<key>NSAlternateImage</key>
<dict>
<key>CF$UID</key>
- <integer>62</integer>
+ <integer>60</integer>
</dict>
<key>NSButtonFlags</key>
<integer>138690815</integer>
@@ -929,17 +871,17 @@
<key>NSControlView</key>
<dict>
<key>CF$UID</key>
- <integer>57</integer>
+ <integer>53</integer>
</dict>
<key>NSKeyEquivalent</key>
<dict>
<key>CF$UID</key>
- <integer>64</integer>
+ <integer>62</integer>
</dict>
<key>NSNormalImage</key>
<dict>
<key>CF$UID</key>
- <integer>60</integer>
+ <integer>56</integer>
</dict>
<key>NSPeriodicDelay</key>
<integer>200</integer>
@@ -948,42 +890,53 @@
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>56</integer>
+ <integer>52</integer>
</dict>
</dict>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>49</integer>
+ <integer>59</integer>
</dict>
<key>NSClassName</key>
<dict>
<key>CF$UID</key>
- <integer>47</integer>
+ <integer>57</integer>
</dict>
<key>NSResourceName</key>
<dict>
<key>CF$UID</key>
- <integer>61</integer>
+ <integer>58</integer>
</dict>
</dict>
+ <string>NSImage</string>
<string>Delete</string>
<dict>
+ <key>$classes</key>
+ <array>
+ <string>NSCustomResource</string>
+ <string>%NSCustomResource</string>
+ <string>NSObject</string>
+ </array>
+ <key>$classname</key>
+ <string>NSCustomResource</string>
+ </dict>
+ <dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>49</integer>
+ <integer>59</integer>
</dict>
<key>NSClassName</key>
<dict>
<key>CF$UID</key>
- <integer>47</integer>
+ <integer>57</integer>
</dict>
<key>NSResourceName</key>
<dict>
<key>CF$UID</key>
- <integer>63</integer>
+ <integer>61</integer>
</dict>
</dict>
<string>DeletePressed</string>
@@ -1059,17 +1012,17 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>149</integer>
+ <integer>130</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -1081,22 +1034,22 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>71</integer>
+ <integer>69</integer>
</dict>
<key>NSClassName</key>
<dict>
<key>CF$UID</key>
- <integer>69</integer>
+ <integer>67</integer>
</dict>
<key>NSExtension</key>
<dict>
<key>CF$UID</key>
- <integer>70</integer>
+ <integer>68</integer>
</dict>
<key>NSFrameSize</key>
<dict>
<key>CF$UID</key>
- <integer>148</integer>
+ <integer>129</integer>
</dict>
<key>NSNextResponder</key>
<dict>
@@ -1106,7 +1059,7 @@
<key>NSSubviews</key>
<dict>
<key>CF$UID</key>
- <integer>76</integer>
+ <integer>74</integer>
</dict>
<key>NSSuperview</key>
<dict>
@@ -1120,29 +1073,17 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>77</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>82</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>131</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>138</integer>
+ <integer>75</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>144</integer>
+ <integer>80</integer>
</dict>
</array>
</dict>
@@ -1155,29 +1096,29 @@
<key>NSCell</key>
<dict>
<key>CF$UID</key>
- <integer>79</integer>
+ <integer>77</integer>
</dict>
<key>NSEnabled</key>
<true/>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>78</integer>
+ <integer>76</integer>
</dict>
<key>NSNextResponder</key>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
<key>NSSuperview</key>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
<key>NSvFlags</key>
<integer>264</integer>
</dict>
- <string>{{17, 227}, {231, 14}}</string>
+ <string>{{17, 227}, {540, 14}}</string>
<dict>
<key>$class</key>
<dict>
@@ -1196,17 +1137,17 @@
<key>NSContents</key>
<dict>
<key>CF$UID</key>
- <integer>80</integer>
+ <integer>78</integer>
</dict>
<key>NSControlView</key>
<dict>
<key>CF$UID</key>
- <integer>77</integer>
+ <integer>75</integer>
</dict>
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>81</integer>
+ <integer>79</integer>
</dict>
<key>NSTextColor</key>
<dict>
@@ -1235,32 +1176,32 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>130</integer>
+ <integer>128</integer>
</dict>
<key>NSContentView</key>
<dict>
<key>CF$UID</key>
- <integer>84</integer>
+ <integer>82</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>129</integer>
+ <integer>127</integer>
</dict>
<key>NSHScroller</key>
<dict>
<key>CF$UID</key>
- <integer>126</integer>
+ <integer>124</integer>
</dict>
<key>NSNextKeyView</key>
<dict>
<key>CF$UID</key>
- <integer>84</integer>
+ <integer>82</integer>
</dict>
<key>NSNextResponder</key>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
<key>NSScrollAmts</key>
<data>
@@ -1269,17 +1210,17 @@
<key>NSSubviews</key>
<dict>
<key>CF$UID</key>
- <integer>83</integer>
+ <integer>81</integer>
</dict>
<key>NSSuperview</key>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
<key>NSVScroller</key>
<dict>
<key>CF$UID</key>
- <integer>122</integer>
+ <integer>120</integer>
</dict>
<key>NSsFlags</key>
<integer>18</integer>
@@ -1290,21 +1231,21 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>84</integer>
+ <integer>82</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>122</integer>
+ <integer>120</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>126</integer>
+ <integer>124</integer>
</dict>
</array>
</dict>
@@ -1312,42 +1253,42 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>121</integer>
+ <integer>119</integer>
</dict>
<key>NSBGColor</key>
<dict>
<key>CF$UID</key>
- <integer>109</integer>
+ <integer>107</integer>
</dict>
<key>NSDocView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>120</integer>
+ <integer>118</integer>
</dict>
<key>NSNextKeyView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSNextResponder</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSSubviews</key>
<dict>
<key>CF$UID</key>
- <integer>85</integer>
+ <integer>83</integer>
</dict>
<key>NSSuperview</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NScvFlags</key>
<integer>4</integer>
@@ -1358,13 +1299,13 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
</array>
</dict>
@@ -1372,19 +1313,19 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>119</integer>
+ <integer>117</integer>
</dict>
<key>NSBackgroundColor</key>
<dict>
<key>CF$UID</key>
- <integer>97</integer>
+ <integer>95</integer>
</dict>
<key>NSColumnAutoresizingStyle</key>
<integer>1</integer>
<key>NSCornerView</key>
<dict>
<key>CF$UID</key>
- <integer>88</integer>
+ <integer>86</integer>
</dict>
<key>NSDraggingSourceMaskForLocal</key>
<integer>15</integer>
@@ -1395,12 +1336,12 @@
<key>NSFrameSize</key>
<dict>
<key>CF$UID</key>
- <integer>87</integer>
+ <integer>85</integer>
</dict>
<key>NSGridColor</key>
<dict>
<key>CF$UID</key>
- <integer>116</integer>
+ <integer>114</integer>
</dict>
<key>NSIntercellSpacingHeight</key>
<real>2</real>
@@ -1409,36 +1350,36 @@
<key>NSNextResponder</key>
<dict>
<key>CF$UID</key>
- <integer>84</integer>
+ <integer>82</integer>
</dict>
<key>NSRowHeight</key>
<real>17</real>
<key>NSSuperview</key>
<dict>
<key>CF$UID</key>
- <integer>84</integer>
+ <integer>82</integer>
</dict>
<key>NSTableColumns</key>
<dict>
<key>CF$UID</key>
- <integer>91</integer>
+ <integer>89</integer>
</dict>
<key>NSTvFlags</key>
<integer>314605568</integer>
<key>NSvFlags</key>
<integer>4352</integer>
</dict>
- <string>{517, 190}</string>
+ <string>{518, 190}</string>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>90</integer>
+ <integer>88</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>89</integer>
+ <integer>87</integer>
</dict>
<key>NSNextResponder</key>
<dict>
@@ -1464,21 +1405,21 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>92</integer>
+ <integer>90</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>103</integer>
+ <integer>101</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>111</integer>
+ <integer>109</integer>
</dict>
</array>
</dict>
@@ -1486,22 +1427,22 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>102</integer>
+ <integer>100</integer>
</dict>
<key>NSDataCell</key>
<dict>
<key>CF$UID</key>
- <integer>101</integer>
+ <integer>99</integer>
</dict>
<key>NSHeaderCell</key>
<dict>
<key>CF$UID</key>
- <integer>94</integer>
+ <integer>92</integer>
</dict>
<key>NSIdentifier</key>
<dict>
<key>CF$UID</key>
- <integer>93</integer>
+ <integer>91</integer>
</dict>
<key>NSIsEditable</key>
<true/>
@@ -1512,7 +1453,7 @@
<key>NSTableView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSWidth</key>
<real>20</real>
@@ -1522,12 +1463,12 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>100</integer>
+ <integer>98</integer>
</dict>
<key>NSBackgroundColor</key>
<dict>
<key>CF$UID</key>
- <integer>95</integer>
+ <integer>93</integer>
</dict>
<key>NSCellFlags</key>
<integer>67239424</integer>
@@ -1541,12 +1482,12 @@
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>81</integer>
+ <integer>79</integer>
</dict>
<key>NSTextColor</key>
<dict>
<key>CF$UID</key>
- <integer>98</integer>
+ <integer>96</integer>
</dict>
</dict>
<dict>
@@ -1563,12 +1504,12 @@
<key>NSColor</key>
<dict>
<key>CF$UID</key>
- <integer>97</integer>
+ <integer>95</integer>
</dict>
<key>NSColorName</key>
<dict>
<key>CF$UID</key>
- <integer>96</integer>
+ <integer>94</integer>
</dict>
<key>NSColorSpace</key>
<integer>6</integer>
@@ -1606,7 +1547,7 @@
<key>NSColorName</key>
<dict>
<key>CF$UID</key>
- <integer>99</integer>
+ <integer>97</integer>
</dict>
<key>NSColorSpace</key>
<integer>6</integer>
@@ -1628,7 +1569,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>50</integer>
+ <integer>46</integer>
</dict>
<key>NSAlign</key>
<integer>1</integer>
@@ -1656,22 +1597,22 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>102</integer>
+ <integer>100</integer>
</dict>
<key>NSDataCell</key>
<dict>
<key>CF$UID</key>
- <integer>108</integer>
+ <integer>106</integer>
</dict>
<key>NSHeaderCell</key>
<dict>
<key>CF$UID</key>
- <integer>105</integer>
+ <integer>103</integer>
</dict>
<key>NSIdentifier</key>
<dict>
<key>CF$UID</key>
- <integer>104</integer>
+ <integer>102</integer>
</dict>
<key>NSIsResizeable</key>
<true/>
@@ -1684,22 +1625,22 @@
<key>NSTableView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSWidth</key>
- <real>468</real>
+ <real>469</real>
</dict>
<string>desc</string>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>100</integer>
+ <integer>98</integer>
</dict>
<key>NSBackgroundColor</key>
<dict>
<key>CF$UID</key>
- <integer>107</integer>
+ <integer>105</integer>
</dict>
<key>NSCellFlags</key>
<integer>75628032</integer>
@@ -1708,17 +1649,17 @@
<key>NSContents</key>
<dict>
<key>CF$UID</key>
- <integer>106</integer>
+ <integer>104</integer>
</dict>
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>81</integer>
+ <integer>79</integer>
</dict>
<key>NSTextColor</key>
<dict>
<key>CF$UID</key>
- <integer>98</integer>
+ <integer>96</integer>
</dict>
</dict>
<string>Job</string>
@@ -1744,7 +1685,7 @@
<key>NSBackgroundColor</key>
<dict>
<key>CF$UID</key>
- <integer>109</integer>
+ <integer>107</integer>
</dict>
<key>NSCellFlags</key>
<integer>337772096</integer>
@@ -1753,12 +1694,12 @@
<key>NSControlView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>81</integer>
+ <integer>52</integer>
</dict>
<key>NSTextColor</key>
<dict>
@@ -1785,7 +1726,7 @@
<key>NSColorName</key>
<dict>
<key>CF$UID</key>
- <integer>110</integer>
+ <integer>108</integer>
</dict>
<key>NSColorSpace</key>
<integer>6</integer>
@@ -1795,31 +1736,31 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>102</integer>
+ <integer>100</integer>
</dict>
<key>NSDataCell</key>
<dict>
<key>CF$UID</key>
- <integer>114</integer>
+ <integer>112</integer>
</dict>
<key>NSHeaderCell</key>
<dict>
<key>CF$UID</key>
- <integer>113</integer>
+ <integer>111</integer>
</dict>
<key>NSIdentifier</key>
<dict>
<key>CF$UID</key>
- <integer>112</integer>
+ <integer>110</integer>
</dict>
<key>NSMaxWidth</key>
- <real>1000</real>
+ <real>20</real>
<key>NSMinWidth</key>
- <real>4</real>
+ <real>8</real>
<key>NSTableView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSWidth</key>
<real>20</real>
@@ -1829,12 +1770,12 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>100</integer>
+ <integer>98</integer>
</dict>
<key>NSBackgroundColor</key>
<dict>
<key>CF$UID</key>
- <integer>95</integer>
+ <integer>93</integer>
</dict>
<key>NSCellFlags</key>
<integer>67239424</integer>
@@ -1848,19 +1789,19 @@
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>81</integer>
+ <integer>79</integer>
</dict>
<key>NSTextColor</key>
<dict>
<key>CF$UID</key>
- <integer>98</integer>
+ <integer>96</integer>
</dict>
</dict>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>65</integer>
+ <integer>63</integer>
</dict>
<key>NSAlternateContents</key>
<dict>
@@ -1883,7 +1824,7 @@
<key>NSControlView</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSKeyEquivalent</key>
<dict>
@@ -1893,7 +1834,7 @@
<key>NSNormalImage</key>
<dict>
<key>CF$UID</key>
- <integer>60</integer>
+ <integer>56</integer>
</dict>
<key>NSPeriodicDelay</key>
<integer>400</integer>
@@ -1902,7 +1843,7 @@
<key>NSSupport</key>
<dict>
<key>CF$UID</key>
- <integer>115</integer>
+ <integer>113</integer>
</dict>
</dict>
<dict>
@@ -1935,12 +1876,12 @@
<key>NSColor</key>
<dict>
<key>CF$UID</key>
- <integer>118</integer>
+ <integer>116</integer>
</dict>
<key>NSColorName</key>
<dict>
<key>CF$UID</key>
- <integer>117</integer>
+ <integer>115</integer>
</dict>
<key>NSColorSpace</key>
<integer>6</integer>
@@ -1972,7 +1913,7 @@
<key>$classname</key>
<string>NSTableView</string>
</dict>
- <string>{{1, 1}, {517, 190}}</string>
+ <string>{{1, 1}, {518, 190}}</string>
<dict>
<key>$classes</key>
<array>
@@ -1988,39 +1929,39 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>125</integer>
+ <integer>123</integer>
</dict>
<key>NSAction</key>
<dict>
<key>CF$UID</key>
- <integer>124</integer>
+ <integer>122</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>123</integer>
+ <integer>121</integer>
</dict>
<key>NSNextResponder</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSPercent</key>
- <real>0.93596059083938599</real>
+ <real>0.95263159275054932</real>
<key>NSSuperview</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSTarget</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSvFlags</key>
<integer>256</integer>
</dict>
- <string>{{518, 1}, {15, 190}}</string>
+ <string>{{519, 1}, {15, 190}}</string>
<string>_doScroller:</string>
<dict>
<key>$classes</key>
@@ -2038,34 +1979,34 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>125</integer>
+ <integer>123</integer>
</dict>
<key>NSAction</key>
<dict>
<key>CF$UID</key>
- <integer>128</integer>
+ <integer>126</integer>
</dict>
<key>NSFrame</key>
<dict>
<key>CF$UID</key>
- <integer>127</integer>
+ <integer>125</integer>
</dict>
<key>NSNextResponder</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSPercent</key>
<real>0.88602942228317261</real>
<key>NSSuperview</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSTarget</key>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>80</integer>
</dict>
<key>NSsFlags</key>
<integer>1</integer>
@@ -2074,7 +2015,7 @@
</dict>
<string>{{-100, -100}, {482, 11}}</string>
<string>_doScroller:</string>
- <string>{{20, 20}, {534, 192}}</string>
+ <string>{{20, 20}, {535, 192}}</string>
<dict>
<key>$classes</key>
<array>
@@ -2086,307 +2027,13 @@
<key>$classname</key>
<string>NSScrollView</string>
</dict>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>66</integer>
- </dict>
- <key>NSCell</key>
- <dict>
- <key>CF$UID</key>
- <integer>133</integer>
- </dict>
- <key>NSEnabled</key>
- <true/>
- <key>NSFrame</key>
- <dict>
- <key>CF$UID</key>
- <integer>132</integer>
- </dict>
- <key>NSNextResponder</key>
- <dict>
- <key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <key>NSSuperview</key>
- <dict>
- <key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <key>NSvFlags</key>
- <integer>-2147483383</integer>
- </dict>
- <string>{{471, 226}, {85, 16}}</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>65</integer>
- </dict>
- <key>NSAlternateContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>22</integer>
- </dict>
- <key>NSAlternateImage</key>
- <dict>
- <key>CF$UID</key>
- <integer>135</integer>
- </dict>
- <key>NSButtonFlags</key>
- <integer>1211912703</integer>
- <key>NSButtonFlags2</key>
- <integer>2</integer>
- <key>NSCellFlags</key>
- <integer>67239424</integer>
- <key>NSCellFlags2</key>
- <integer>131072</integer>
- <key>NSContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>134</integer>
- </dict>
- <key>NSControlView</key>
- <dict>
- <key>CF$UID</key>
- <integer>131</integer>
- </dict>
- <key>NSKeyEquivalent</key>
- <dict>
- <key>CF$UID</key>
- <integer>22</integer>
- </dict>
- <key>NSPeriodicDelay</key>
- <integer>200</integer>
- <key>NSPeriodicInterval</key>
- <integer>25</integer>
- <key>NSSupport</key>
- <dict>
- <key>CF$UID</key>
- <integer>81</integer>
- </dict>
- </dict>
- <string>Show Detail</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>137</integer>
- </dict>
- <key>NSImageName</key>
- <dict>
- <key>CF$UID</key>
- <integer>136</integer>
- </dict>
- </dict>
- <string>NSSwitch</string>
- <dict>
- <key>$classes</key>
- <array>
- <string>NSButtonImageSource</string>
- <string>NSObject</string>
- </array>
- <key>$classname</key>
- <string>NSButtonImageSource</string>
- </dict>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>66</integer>
- </dict>
- <key>NSCell</key>
- <dict>
- <key>CF$UID</key>
- <integer>140</integer>
- </dict>
- <key>NSEnabled</key>
- <true/>
- <key>NSFrame</key>
- <dict>
- <key>CF$UID</key>
- <integer>139</integer>
- </dict>
- <key>NSNextResponder</key>
- <dict>
- <key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <key>NSSuperview</key>
- <dict>
- <key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <key>NSvFlags</key>
- <integer>-2147483380</integer>
- </dict>
- <string>{{20, 220}, {34, 32}}</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>65</integer>
- </dict>
- <key>NSAlternateContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>22</integer>
- </dict>
- <key>NSButtonFlags</key>
- <integer>138690815</integer>
- <key>NSButtonFlags2</key>
- <integer>34</integer>
- <key>NSCellFlags</key>
- <integer>67239424</integer>
- <key>NSCellFlags2</key>
- <integer>134217728</integer>
- <key>NSContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>22</integer>
- </dict>
- <key>NSControlView</key>
- <dict>
- <key>CF$UID</key>
- <integer>138</integer>
- </dict>
- <key>NSKeyEquivalent</key>
- <dict>
- <key>CF$UID</key>
- <integer>143</integer>
- </dict>
- <key>NSNormalImage</key>
- <dict>
- <key>CF$UID</key>
- <integer>141</integer>
- </dict>
- <key>NSPeriodicDelay</key>
- <integer>200</integer>
- <key>NSPeriodicInterval</key>
- <integer>25</integer>
- <key>NSSupport</key>
- <dict>
- <key>CF$UID</key>
- <integer>56</integer>
- </dict>
- </dict>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>49</integer>
- </dict>
- <key>NSClassName</key>
- <dict>
- <key>CF$UID</key>
- <integer>47</integer>
- </dict>
- <key>NSResourceName</key>
- <dict>
- <key>CF$UID</key>
- <integer>142</integer>
- </dict>
- </dict>
- <string>Play</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>6</integer>
- </dict>
- <key>NS.string</key>
- <string></string>
- </dict>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>66</integer>
- </dict>
- <key>NSCell</key>
- <dict>
- <key>CF$UID</key>
- <integer>146</integer>
- </dict>
- <key>NSEnabled</key>
- <true/>
- <key>NSFrame</key>
- <dict>
- <key>CF$UID</key>
- <integer>145</integer>
- </dict>
- <key>NSNextResponder</key>
- <dict>
- <key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <key>NSSuperview</key>
- <dict>
- <key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <key>NSvFlags</key>
- <integer>-2147483383</integer>
- </dict>
- <string>{{370, 226}, {98, 16}}</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>65</integer>
- </dict>
- <key>NSAlternateContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>22</integer>
- </dict>
- <key>NSAlternateImage</key>
- <dict>
- <key>CF$UID</key>
- <integer>135</integer>
- </dict>
- <key>NSButtonFlags</key>
- <integer>1211912703</integer>
- <key>NSButtonFlags2</key>
- <integer>2</integer>
- <key>NSCellFlags</key>
- <integer>-2080244224</integer>
- <key>NSCellFlags2</key>
- <integer>131072</integer>
- <key>NSContents</key>
- <dict>
- <key>CF$UID</key>
- <integer>147</integer>
- </dict>
- <key>NSControlView</key>
- <dict>
- <key>CF$UID</key>
- <integer>144</integer>
- </dict>
- <key>NSKeyEquivalent</key>
- <dict>
- <key>CF$UID</key>
- <integer>22</integer>
- </dict>
- <key>NSPeriodicDelay</key>
- <integer>200</integer>
- <key>NSPeriodicInterval</key>
- <integer>25</integer>
- <key>NSSupport</key>
- <dict>
- <key>CF$UID</key>
- <integer>81</integer>
- </dict>
- </dict>
- <string>Show Encodes</string>
<string>{574, 257}</string>
<string>fQueuePane</string>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2396,7 +2043,7 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>151</integer>
+ <integer>132</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2409,40 +2056,17 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
- </dict>
- <key>NSDestination</key>
- <dict>
- <key>CF$UID</key>
- <integer>131</integer>
- </dict>
- <key>NSLabel</key>
- <dict>
- <key>CF$UID</key>
- <integer>153</integer>
- </dict>
- <key>NSSource</key>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
- </dict>
- </dict>
- <string>fDetailCheckbox</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
<key>CF$UID</key>
- <integer>77</integer>
+ <integer>75</integer>
</dict>
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>155</integer>
+ <integer>134</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2455,17 +2079,17 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>157</integer>
+ <integer>136</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2478,7 +2102,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2488,7 +2112,7 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>159</integer>
+ <integer>138</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2501,17 +2125,17 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
<key>CF$UID</key>
- <integer>52</integer>
+ <integer>48</integer>
</dict>
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>161</integer>
+ <integer>140</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2524,7 +2148,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>164</integer>
+ <integer>143</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2534,12 +2158,12 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>163</integer>
+ <integer>142</integer>
</dict>
<key>NSSource</key>
<dict>
<key>CF$UID</key>
- <integer>114</integer>
+ <integer>112</integer>
</dict>
</dict>
<string>removeSelectedJob:</string>
@@ -2557,7 +2181,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2567,12 +2191,12 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>166</integer>
+ <integer>145</integer>
</dict>
<key>NSSource</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
</dict>
<string>dataSource</string>
@@ -2580,7 +2204,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2590,12 +2214,12 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>168</integer>
+ <integer>147</integer>
</dict>
<key>NSSource</key>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
</dict>
<string>delegate</string>
@@ -2603,40 +2227,17 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>164</integer>
- </dict>
- <key>NSDestination</key>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
- </dict>
- <key>NSLabel</key>
- <dict>
- <key>CF$UID</key>
- <integer>170</integer>
- </dict>
- <key>NSSource</key>
- <dict>
- <key>CF$UID</key>
- <integer>131</integer>
- </dict>
- </dict>
- <string>detailChanged:</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
<key>CF$UID</key>
- <integer>172</integer>
+ <integer>149</integer>
</dict>
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>185</integer>
+ <integer>162</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2648,32 +2249,32 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>184</integer>
+ <integer>161</integer>
</dict>
<key>NSFrameAutosaveName</key>
<dict>
<key>CF$UID</key>
- <integer>183</integer>
+ <integer>160</integer>
</dict>
<key>NSMaxSize</key>
<dict>
<key>CF$UID</key>
- <integer>182</integer>
+ <integer>159</integer>
</dict>
<key>NSMinSize</key>
<dict>
<key>CF$UID</key>
- <integer>181</integer>
+ <integer>158</integer>
</dict>
<key>NSScreenRect</key>
<dict>
<key>CF$UID</key>
- <integer>180</integer>
+ <integer>157</integer>
</dict>
<key>NSViewClass</key>
<dict>
<key>CF$UID</key>
- <integer>176</integer>
+ <integer>153</integer>
</dict>
<key>NSWTFlags</key>
<integer>1886912512</integer>
@@ -2682,19 +2283,19 @@
<key>NSWindowClass</key>
<dict>
<key>CF$UID</key>
- <integer>175</integer>
+ <integer>152</integer>
</dict>
<key>NSWindowRect</key>
<dict>
<key>CF$UID</key>
- <integer>173</integer>
+ <integer>150</integer>
</dict>
<key>NSWindowStyleMask</key>
<integer>4110</integer>
<key>NSWindowTitle</key>
<dict>
<key>CF$UID</key>
- <integer>174</integer>
+ <integer>151</integer>
</dict>
<key>NSWindowView</key>
<dict>
@@ -2702,17 +2303,9 @@
<integer>12</integer>
</dict>
</dict>
- <string>{{420, 319}, {574, 433}}</string>
+ <string>{{176, 464}, {574, 433}}</string>
<string>Queue - HandBrake</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>6</integer>
- </dict>
- <key>NS.string</key>
- <string>NSWindow</string>
- </dict>
+ <string>NSWindow</string>
<dict>
<key>$class</key>
<dict>
@@ -2726,7 +2319,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array>
@@ -2736,7 +2329,7 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
</array>
</dict>
@@ -2769,52 +2362,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>73</integer>
- </dict>
- <key>NSDestination</key>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
- </dict>
- <key>NSLabel</key>
- <dict>
- <key>CF$UID</key>
- <integer>168</integer>
- </dict>
- <key>NSSource</key>
- <dict>
- <key>CF$UID</key>
- <integer>172</integer>
- </dict>
- </dict>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>73</integer>
- </dict>
- <key>NSDestination</key>
- <dict>
- <key>CF$UID</key>
- <integer>138</integer>
- </dict>
- <key>NSLabel</key>
- <dict>
- <key>CF$UID</key>
- <integer>188</integer>
- </dict>
- <key>NSSource</key>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
- </dict>
- </dict>
- <string>fStartPauseButton</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>164</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2824,20 +2372,19 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>190</integer>
+ <integer>147</integer>
</dict>
<key>NSSource</key>
<dict>
<key>CF$UID</key>
- <integer>138</integer>
+ <integer>149</integer>
</dict>
</dict>
- <string>toggleStartPause:</string>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>164</integer>
+ <integer>143</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2847,12 +2394,12 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>192</integer>
+ <integer>165</integer>
</dict>
<key>NSSource</key>
<dict>
<key>CF$UID</key>
- <integer>57</integer>
+ <integer>53</integer>
</dict>
</dict>
<string>cancelCurrentJob:</string>
@@ -2860,53 +2407,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>164</integer>
- </dict>
- <key>NSDestination</key>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
- </dict>
- <key>NSLabel</key>
- <dict>
- <key>CF$UID</key>
- <integer>194</integer>
- </dict>
- <key>NSSource</key>
- <dict>
- <key>CF$UID</key>
- <integer>144</integer>
- </dict>
- </dict>
- <string>jobGroupsChanged:</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>73</integer>
- </dict>
- <key>NSDestination</key>
- <dict>
- <key>CF$UID</key>
- <integer>144</integer>
- </dict>
- <key>NSLabel</key>
- <dict>
- <key>CF$UID</key>
- <integer>196</integer>
- </dict>
- <key>NSSource</key>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
- </dict>
- </dict>
- <string>fJobGroupsCheckbox</string>
- <dict>
- <key>$class</key>
- <dict>
- <key>CF$UID</key>
- <integer>73</integer>
+ <integer>71</integer>
</dict>
<key>NSDestination</key>
<dict>
@@ -2916,7 +2417,7 @@
<key>NSLabel</key>
<dict>
<key>CF$UID</key>
- <integer>198</integer>
+ <integer>167</integer>
</dict>
<key>NSSource</key>
<dict>
@@ -2929,41 +2430,41 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>112</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>53</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>172</integer>
+ <integer>90</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>77</integer>
+ <integer>84</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>131</integer>
+ <integer>149</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>92</integer>
+ <integer>19</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>57</integer>
+ <integer>12</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>103</integer>
+ <integer>75</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -2971,19 +2472,19 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>138</integer>
+ <integer>73</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>111</integer>
+ <integer>14</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>12</integer>
+ <integer>80</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>144</integer>
+ <integer>48</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -2991,19 +2492,7 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>114</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>52</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>14</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>86</integer>
+ <integer>99</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3011,7 +2500,7 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>19</integer>
+ <integer>109</integer>
</dict>
</array>
</dict>
@@ -3028,33 +2517,29 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>12</integer>
+ <integer>109</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>2</integer>
+ <integer>11</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>84</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>80</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>2</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3062,35 +2547,27 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>11</integer>
+ <integer>149</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>73</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>172</integer>
+ <integer>11</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
+ <integer>12</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>92</integer>
+ <integer>11</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>111</integer>
+ <integer>73</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3098,11 +2575,11 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>11</integer>
+ <integer>84</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>90</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3110,7 +2587,7 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>11</integer>
+ <integer>84</integer>
</dict>
</array>
</dict>
@@ -3118,33 +2595,21 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>131</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>86</integer>
+ <integer>149</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>48</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>138</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>52</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>103</integer>
+ <integer>2</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3152,7 +2617,7 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>144</integer>
+ <integer>84</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3160,19 +2625,19 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>57</integer>
+ <integer>80</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>172</integer>
+ <integer>101</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>2</integer>
+ <integer>75</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>77</integer>
+ <integer>53</integer>
</dict>
</array>
</dict>
@@ -3180,74 +2645,54 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>204</integer>
+ <integer>173</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>205</integer>
+ <integer>174</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>206</integer>
+ <integer>175</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>207</integer>
+ <integer>176</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>208</integer>
+ <integer>177</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>209</integer>
+ <integer>178</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>210</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>211</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>212</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>207</integer>
+ <integer>179</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>213</integer>
+ <integer>180</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>214</integer>
+ <integer>181</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>215</integer>
+ <integer>182</integer>
</dict>
</array>
</dict>
- <string>NSButton4</string>
- <string>NSTableView</string>
- <string>NSScrollView1</string>
- <string>NSButton</string>
- <string>NSTextField221</string>
- <string>NSTableColumn</string>
- <string>1</string>
- <string>NSButton41</string>
- <string>NSTextField1</string>
<string>Window</string>
+ <string>NSTextField221</string>
<dict>
<key>$class</key>
<dict>
@@ -3257,12 +2702,18 @@
<key>NS.string</key>
<string>File's Owner</string>
</dict>
+ <string>1</string>
+ <string>NSTableView</string>
+ <string>NSTextField1</string>
+ <string>NSScrollView1</string>
+ <string>NSTableColumn</string>
<string>NSTextField2</string>
+ <string>NSButton</string>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array/>
@@ -3271,7 +2722,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array/>
@@ -3280,73 +2731,41 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>12</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>197</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>19</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>160</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>172</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>57</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>77</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>186</integer>
+ <integer>14</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>52</integer>
+ <integer>99</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>75</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>193</integer>
+ <integer>36</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>74</integer>
+ <integer>80</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>101</integer>
+ <integer>11</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>138</integer>
+ <integer>137</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>92</integer>
+ <integer>131</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>167</integer>
+ <integer>19</integer>
</dict>
<dict>
<key>CF$UID</key>
@@ -3354,99 +2773,95 @@
</dict>
<dict>
<key>CF$UID</key>
- <integer>154</integer>
+ <integer>144</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>189</integer>
+ <integer>90</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>162</integer>
+ <integer>133</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>169</integer>
+ <integer>101</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>152</integer>
+ <integer>112</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>165</integer>
+ <integer>166</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>187</integer>
+ <integer>141</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>114</integer>
+ <integer>48</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>11</integer>
+ <integer>146</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>111</integer>
+ <integer>75</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>171</integer>
+ <integer>164</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>14</integer>
+ <integer>73</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>82</integer>
+ <integer>12</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>191</integer>
+ <integer>148</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>156</integer>
+ <integer>10</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>144</integer>
+ <integer>135</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>195</integer>
+ <integer>163</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>10</integer>
+ <integer>139</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>103</integer>
+ <integer>149</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>86</integer>
+ <integer>84</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>158</integer>
+ <integer>53</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>36</integer>
+ <integer>109</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>150</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>131</integer>
+ <integer>72</integer>
</dict>
</array>
</dict>
@@ -3454,222 +2869,177 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array>
<dict>
<key>CF$UID</key>
- <integer>220</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>221</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>222</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>223</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>224</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>225</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>226</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>227</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>228</integer>
- </dict>
- <dict>
- <key>CF$UID</key>
- <integer>229</integer>
+ <integer>187</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>230</integer>
+ <integer>188</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>231</integer>
+ <integer>189</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>232</integer>
+ <integer>190</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>233</integer>
+ <integer>191</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>234</integer>
+ <integer>192</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>235</integer>
+ <integer>193</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>236</integer>
+ <integer>194</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>237</integer>
+ <integer>195</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>238</integer>
+ <integer>196</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>239</integer>
+ <integer>197</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>240</integer>
+ <integer>198</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>241</integer>
+ <integer>199</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>242</integer>
+ <integer>200</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>243</integer>
+ <integer>201</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>244</integer>
+ <integer>202</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>245</integer>
+ <integer>203</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>246</integer>
+ <integer>204</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>247</integer>
+ <integer>205</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>248</integer>
+ <integer>206</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>249</integer>
+ <integer>207</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>250</integer>
+ <integer>208</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>251</integer>
+ <integer>209</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>252</integer>
+ <integer>210</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>253</integer>
+ <integer>211</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>254</integer>
+ <integer>212</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>255</integer>
+ <integer>213</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>256</integer>
+ <integer>214</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>257</integer>
+ <integer>215</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>258</integer>
+ <integer>216</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>259</integer>
+ <integer>217</integer>
</dict>
<dict>
<key>CF$UID</key>
- <integer>260</integer>
+ <integer>218</integer>
</dict>
</array>
</dict>
- <integer>2577</integer>
- <integer>2595</integer>
- <integer>2541</integer>
- <integer>2568</integer>
- <integer>2576</integer>
- <integer>2584</integer>
- <integer>2511</integer>
- <integer>2579</integer>
- <integer>2515</integer>
- <integer>2547</integer>
- <integer>2588</integer>
- <integer>2561</integer>
+ <integer>2539</integer>
<integer>2559</integer>
- <integer>2580</integer>
- <integer>2553</integer>
- <integer>2571</integer>
+ <integer>2538</integer>
+ <integer>2517</integer>
+ <integer>2543</integer>
+ <integer>2567</integer>
+ <integer>2562</integer>
+ <integer>2541</integer>
<integer>1</integer>
- <integer>2564</integer>
- <integer>2583</integer>
- <integer>2569</integer>
- <integer>2572</integer>
- <integer>2563</integer>
<integer>2570</integer>
- <integer>2581</integer>
+ <integer>2553</integer>
+ <integer>2564</integer>
+ <integer>2519</integer>
<integer>2523</integer>
- <integer>2543</integer>
- <integer>2522</integer>
- <integer>2578</integer>
- <integer>2539</integer>
- <integer>2517</integer>
+ <integer>2595</integer>
+ <integer>2569</integer>
+ <integer>2515</integer>
+ <integer>2571</integer>
+ <integer>2511</integer>
<integer>2586</integer>
- <integer>2565</integer>
- <integer>2587</integer>
- <integer>2589</integer>
+ <integer>2547</integer>
+ <integer>2577</integer>
+ <integer>2578</integer>
<integer>2560</integer>
- <integer>2519</integer>
+ <integer>2565</integer>
+ <integer>2579</integer>
+ <integer>2568</integer>
+ <integer>2576</integer>
<integer>2518</integer>
- <integer>2567</integer>
- <integer>2538</integer>
- <integer>2562</integer>
- <integer>2535</integer>
+ <integer>2584</integer>
+ <integer>2522</integer>
+ <integer>2561</integer>
<dict>
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>67</integer>
+ <integer>65</integer>
</dict>
<key>NS.objects</key>
<array/>
@@ -3678,7 +3048,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array/>
@@ -3687,7 +3057,7 @@
<key>$class</key>
<dict>
<key>CF$UID</key>
- <integer>200</integer>
+ <integer>169</integer>
</dict>
<key>NS.objects</key>
<array/>
diff --git a/macosx/HBQueueController.h b/macosx/HBQueueController.h
index 7ee030eec..474392507 100644
--- a/macosx/HBQueueController.h
+++ b/macosx/HBQueueController.h
@@ -8,14 +8,24 @@
#include <Cocoa/Cocoa.h>
#include "hb.h"
+@class HBController;
+
+// HB_OUTLINE_QUEUE turns on an outline view for the queue.
+#define HB_OUTLINE_QUEUE 0
+
@interface HBQueueController : NSObject
{
hb_handle_t *fHandle;
+ HBController *fHBController;
NSViewAnimation *fAnimation;
BOOL fCurrentJobHidden; // YES when fCurrentJobPane has been shifted out of view (see showCurrentJobPane)
BOOL fShowsJobsAsGroups;
BOOL fShowsDetail;
+#if HB_OUTLINE_QUEUE
+ NSMutableArray *fEncodes;
+ IBOutlet NSOutlineView *fOutlineView;
+#endif
// +---------------fQueueWindow----------------+
// |+-------------fCurrentJobPane-------------+|
@@ -46,24 +56,22 @@
// fQueuePane - always visible; fills entire window when fCurrentJobPane is hidden
IBOutlet NSView *fQueuePane;
IBOutlet NSTableView *fTaskView;
- IBOutlet NSButton *fDetailCheckbox;
- IBOutlet NSButton *fJobGroupsCheckbox; // just for testing
IBOutlet NSTextField *fQueueCountField;
- IBOutlet NSButton *fStartPauseButton;
}
- (void)setHandle: (hb_handle_t *)handle;
+- (void)setHBController: (HBController *)controller;
- (void)updateQueueUI;
- (void)updateCurrentJobUI;
- (IBAction)showQueueWindow: (id)sender;
- (IBAction)removeSelectedJob: (id)sender;
- (IBAction)cancelCurrentJob: (id)sender;
-- (IBAction)detailChanged: (id)sender;
-- (IBAction)jobGroupsChanged: (id)sender;
-- (IBAction)toggleShowsDetail: (id)sender;
-- (IBAction)toggleShowsJobsAsGroups: (id)sender;
+- (IBAction)showDetail: (id)sender;
+- (IBAction)hideDetail: (id)sender;
+- (IBAction)showJobsAsGroups: (id)sender;
+- (IBAction)showJobsAsPasses: (id)sender;
- (IBAction)toggleStartPause: (id)sender;
@end
diff --git a/macosx/HBQueueController.mm b/macosx/HBQueueController.mm
index 657178c74..755692a02 100644
--- a/macosx/HBQueueController.mm
+++ b/macosx/HBQueueController.mm
@@ -5,6 +5,25 @@
It may be used under the terms of the GNU General Public License. */
#include "HBQueueController.h"
+#include "Controller.h"
+
+#define HB_QUEUE_DRAGGING 0
+#define HBQueueDataType @"HBQueueDataType"
+
+// UNI_QUEUE turns on the feature where the first item in the queue NSTableView is the
+// current job followed by the jobs in hblib's queue. In this scheme, fCurrentJobPane
+// disappers.
+#define HB_UNI_QUEUE 0
+
+#define HB_ROW_HEIGHT_DETAIL 98.0
+#define HB_ROW_HEIGHT_NO_DETAIL 17.0
+#define HB_ROW_HEIGHT_ACTIVE_JOB 60.0
+
+//------------------------------------------------------------------------------------
+#pragma mark Job group functions
+//------------------------------------------------------------------------------------
+// These could be part of hblib if we think hblib should have knowledge of groups.
+// For now, I see groups as a metaphor that HBQueueController provides.
/**
* Returns the number of jobs groups in the queue.
@@ -85,12 +104,53 @@ static hb_job_t * hb_next_job( hb_handle_t * h, hb_job_t * job )
while( ( j = hb_job( h, index++ ) ) )
{
if (j == job)
- return hb_job( h, index+1 );
+ return hb_job( h, index );
}
return NULL;
}
#pragma mark -
+//------------------------------------------------------------------------------------
+// HBJob
+//------------------------------------------------------------------------------------
+
+#if HB_OUTLINE_QUEUE
+
+@interface HBJob : NSObject
+{
+ hb_job_t *fJob;
+}
++ (HBJob*) jobWithJob: (hb_job_t *) job;
+- (id) initWithJob: (hb_job_t *) job;
+- (hb_job_t *) job;
+@end
+
+@implementation HBJob
++ (HBJob*) jobWithJob: (hb_job_t *) job
+{
+ return [[[HBJob alloc] initWithJob:job] autorelease];
+}
+
+- (id) initWithJob: (hb_job_t *) job
+{
+ if (self = [super init])
+ {
+ // job is not owned by HBJob. It does not get dealloacted when HBJob is released.
+ fJob = job;
+ }
+ return self;
+}
+
+- (hb_job_t*) job
+{
+ return fJob;
+}
+
+@end
+
+#endif // HB_OUTLINE_QUEUE
+
+#pragma mark -
// Toolbar identifiers
static NSString* HBQueueToolbar = @"HBQueueToolbar";
@@ -116,8 +176,15 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
nil]];
fShowsDetail = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsDetail"];
+#if HB_OUTLINE_QUEUE
+ fShowsJobsAsGroups = YES;
+#else
fShowsJobsAsGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
+#endif
+#if HB_OUTLINE_QUEUE
+ fEncodes = [[NSMutableArray arrayWithCapacity:0] retain];
+#endif
}
return self;
}
@@ -133,6 +200,10 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
if ([fQueueWindow delegate] == self)
[fQueueWindow setDelegate:nil];
+#if HB_OUTLINE_QUEUE
+ [fEncodes release];
+#endif
+
[super dealloc];
}
@@ -145,6 +216,14 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
}
//------------------------------------------------------------------------------------
+// Receive HBController
+//------------------------------------------------------------------------------------
+- (void)setHBController: (HBController *)controller
+{
+ fHBController = controller;
+}
+
+//------------------------------------------------------------------------------------
// Displays and brings the queue window to the front
//------------------------------------------------------------------------------------
- (IBAction) showQueueWindow: (id)sender
@@ -220,10 +299,19 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
[[NSUserDefaults standardUserDefaults] setBool:showsDetail forKey:@"QueueShowsDetail"];
[[NSUserDefaults standardUserDefaults] synchronize];
- // clumsy - have to update UI
- [fDetailCheckbox setState:showsDetail ? NSOnState : NSOffState];
-
- [fTaskView setRowHeight:showsDetail ? 98.0 : 17.0];
+ [fTaskView setRowHeight:showsDetail ? HB_ROW_HEIGHT_DETAIL : HB_ROW_HEIGHT_NO_DETAIL];
+#if HB_UNI_QUEUE
+ if (hb_count(fHandle))
+ [fTaskView noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndex:0]];
+#endif
+#if HB_OUTLINE_QUEUE
+
+ [fOutlineView noteHeightOfRowsWithIndexesChanged:
+ [NSIndexSet indexSetWithIndexesInRange:
+ NSMakeRange(0,[fOutlineView numberOfRows])
+ ]];
+#endif
+
if ([fTaskView selectedRow] != -1)
[fTaskView scrollRowToVisible:[fTaskView selectedRow]];
}
@@ -233,27 +321,85 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
//------------------------------------------------------------------------------------
- (void)setShowsJobsAsGroups: (BOOL)showsGroups
{
+#if HB_OUTLINE_QUEUE
+ return; // Can't modify this value. It's always YES.
+#endif
fShowsJobsAsGroups = showsGroups;
[[NSUserDefaults standardUserDefaults] setBool:showsGroups forKey:@"QueueShowsJobsAsGroups"];
[[NSUserDefaults standardUserDefaults] synchronize];
- // clumsy - have to update UI
- [fJobGroupsCheckbox setState:showsGroups ? NSOnState : NSOffState];
-
[self updateQueueUI];
if ([fTaskView selectedRow] != -1)
[fTaskView scrollRowToVisible:[fTaskView selectedRow]];
}
//------------------------------------------------------------------------------------
+// Returns a 16x16 image that represents a job pass.
+//------------------------------------------------------------------------------------
+- (NSImage *)smallImageForPass: (int)pass
+{
+ switch (pass)
+ {
+ case -1: return [NSImage imageNamed: @"JobPassSubtitleSmall"];
+ case 1: return [NSImage imageNamed: @"JobPassFirstSmall"];
+ case 2: return [NSImage imageNamed: @"JobPassSecondSmall"];
+ default: return [NSImage imageNamed: @"JobPassUnknownSmall"];
+ }
+}
+
+//------------------------------------------------------------------------------------
+// Returns a 64x64 image that represents a job pass.
+//------------------------------------------------------------------------------------
+- (NSImage *)largeImageForPass: (int)pass
+{
+ switch (pass)
+ {
+ case -1: return [NSImage imageNamed: @"JobPassSubtitleLarge"];
+ case 1: return [NSImage imageNamed: @"JobPassFirstLarge"];
+ case 2: return [NSImage imageNamed: @"JobPassSecondLarge"];
+ default: return [NSImage imageNamed: @"JobPassUnknownLarge"];
+ }
+}
+
+#if HB_OUTLINE_QUEUE
+//------------------------------------------------------------------------------------
+// Rebuilds the contents of fEncodes which is a array of encodes and HBJobs.
+//------------------------------------------------------------------------------------
+- (void)rebuildEncodes
+{
+ [fEncodes removeAllObjects];
+
+ NSMutableArray * aJobGroup = [NSMutableArray arrayWithCapacity:0];
+ hb_job_t * nextJob = hb_group( fHandle, 0 );
+ while( nextJob )
+ {
+ if (nextJob->sequence_id == 0)
+ {
+ // Encountered a new group. Add the current one to fEncodes and then start a new one.
+ if ([aJobGroup count] > 0)
+ {
+ [fEncodes addObject:aJobGroup];
+ aJobGroup = [NSMutableArray arrayWithCapacity:0];
+ }
+ }
+ [aJobGroup addObject: [HBJob jobWithJob:nextJob]];
+ nextJob = hb_next_job (fHandle, nextJob);
+ }
+ if ([aJobGroup count] > 0)
+ [fEncodes addObject:aJobGroup];
+}
+#endif
+
+//------------------------------------------------------------------------------------
// Generates a multi-line text string that includes the job name on the first line
// followed by details of the job on subsequent lines. If the text is to be drawn as
// part of a highlighted cell, set isHighlighted to true. The returned string may
// contain multiple fonts and paragraph formating.
//------------------------------------------------------------------------------------
- (NSAttributedString *)attributedDescriptionForJob: (hb_job_t *)job
- withDetail: (BOOL)detail
+ withTitle: (BOOL)withTitle
+ withDetail: (BOOL)withDetail
withHighlighting: (BOOL)highlighted
{
NSMutableAttributedString * finalString; // the return value
@@ -284,17 +430,19 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
// Title, in bold
// Show the name of the source Note: use title->name instead of title->dvd since
// name is just the chosen folder, instead of dvd which is the full path
- anAttributedString = [[[NSAttributedString alloc] initWithString:[NSString stringWithUTF8String:title->name] attributes:titleAttribute] autorelease];
- [finalString appendAttributedString:anAttributedString];
-
+ if (withTitle)
+ {
+ anAttributedString = [[[NSAttributedString alloc] initWithString:[NSString stringWithUTF8String:title->name] attributes:titleAttribute] autorelease];
+ [finalString appendAttributedString:anAttributedString];
+ }
+
// Other info in plain
- aMutableString = [NSMutableString stringWithCapacity:200];
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
+ aMutableString = [NSMutableString stringWithCapacity:200];
// The subtitle scan doesn't contain all the stuff we need (like x264opts).
// So grab the next job in the group for display purposes.
- if (jobGroups && job->pass == -1)
+ if (fShowsJobsAsGroups && job->pass == -1)
{
// When job is the one currently being processed, then the next in its group
// is the the first job in the queue.
@@ -307,177 +455,182 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
job = nextjob;
}
- NSString * chapterString = (job->chapter_start == job->chapter_end) ?
- [NSString stringWithFormat:@"Chapter %d", job->chapter_start] :
- [NSString stringWithFormat:@"Chapters %d through %d", job->chapter_start, job->chapter_end];
-
- // Scan pass
- if (job->pass == -1)
+ if (withTitle)
{
- [aMutableString appendString:[NSString stringWithFormat:
- @" (Title %d, %@, Subtitle Scan)", title->index, chapterString]];
+ NSString * chapterString = (job->chapter_start == job->chapter_end) ?
+ [NSString stringWithFormat:@"Chapter %d", job->chapter_start] :
+ [NSString stringWithFormat:@"Chapters %d through %d", job->chapter_start, job->chapter_end];
+
+ // Scan pass
+ if (job->pass == -1)
+ {
+ [aMutableString appendString:[NSString stringWithFormat:
+ @" (Title %d, %@, Subtitle Scan)", title->index, chapterString]];
+ }
+ else
+ {
+ if (fShowsJobsAsGroups)
+ [aMutableString appendString:[NSString stringWithFormat:
+ @" (Title %d, %@, %d-Pass)",
+ title->index, chapterString, MIN( 2, job->pass + 1 )]];
+ else
+ [aMutableString appendString:[NSString stringWithFormat:
+ @" (Title %d, %@, Pass %d of %d)",
+ title->index, chapterString, MAX( 1, job->pass ), MIN( 2, job->pass + 1 )]];
+ }
}
-
- // Normal pass
- else
+
+ // End of title stuff
+
+
+ // Normal pass - show detail
+ if (withDetail && job->pass != -1)
{
- if (jobGroups)
- [aMutableString appendString:[NSString stringWithFormat:
- @" (Title %d, %@, %d-Pass)",
- title->index, chapterString, MIN( 2, job->pass + 1 )]];
+ NSString * jobFormat;
+ NSString * jobPictureDetail;
+ NSString * jobVideoDetail;
+ NSString * jobVideoCodec;
+ NSString * jobVideoQuality;
+ NSString * jobAudioDetail;
+ NSString * jobAudioCodec;
+
+ /* Muxer settings (File Format in the gui) */
+ if (job->mux == 65536 || job->mux == 131072 || job->mux == 1048576)
+ jobFormat = @"MP4"; // HB_MUX_MP4,HB_MUX_PSP,HB_MUX_IPOD
+ else if (job->mux == 262144)
+ jobFormat = @"AVI"; // HB_MUX_AVI
+ else if (job->mux == 524288)
+ jobFormat = @"OGM"; // HB_MUX_OGM
+ else if (job->mux == 2097152)
+ jobFormat = @"MKV"; // HB_MUX_MKV
else
- [aMutableString appendString:[NSString stringWithFormat:
- @" (Title %d, %@, Pass %d of %d)",
- title->index, chapterString, MAX( 1, job->pass ), MIN( 2, job->pass + 1 )]];
+ jobFormat = @"unknown";
- if (detail)
+ // 2097152
+ /* Video Codec settings (Encoder in the gui) */
+ if (job->vcodec == 1)
+ jobVideoCodec = @"FFmpeg"; // HB_VCODEC_FFMPEG
+ else if (job->vcodec == 2)
+ jobVideoCodec = @"XviD"; // HB_VCODEC_XVID
+ else if (job->vcodec == 4)
{
- NSString * jobFormat;
- NSString * jobPictureDetail;
- NSString * jobVideoDetail;
- NSString * jobVideoCodec;
- NSString * jobVideoQuality;
- NSString * jobAudioDetail;
- NSString * jobAudioCodec;
-
- /* Muxer settings (File Format in the gui) */
- if (job->mux == 65536 || job->mux == 131072 || job->mux == 1048576)
- jobFormat = @"MP4"; // HB_MUX_MP4,HB_MUX_PSP,HB_MUX_IPOD
- else if (job->mux == 262144)
- jobFormat = @"AVI"; // HB_MUX_AVI
- else if (job->mux == 524288)
- jobFormat = @"OGM"; // HB_MUX_OGM
- else if (job->mux == 2097152)
- jobFormat = @"MKV"; // HB_MUX_MKV
- else
- jobFormat = @"unknown";
-
- // 2097152
- /* Video Codec settings (Encoder in the gui) */
- if (job->vcodec == 1)
- jobVideoCodec = @"FFmpeg"; // HB_VCODEC_FFMPEG
- else if (job->vcodec == 2)
- jobVideoCodec = @"XviD"; // HB_VCODEC_XVID
- else if (job->vcodec == 4)
- {
- /* Deterimine for sure how we are now setting iPod uuid atom */
- if (job->h264_level) // We are encoding for iPod
- jobVideoCodec = @"x264 (H.264 iPod)"; // HB_VCODEC_X264
- else
- jobVideoCodec = @"x264 (H.264 Main)"; // HB_VCODEC_X264
- }
- else
- jobVideoCodec = @"unknown";
-
- /* Audio Codecs (Second half of Codecs in the gui) */
- if (job->acodec == 256)
- jobAudioCodec = @"AAC"; // HB_ACODEC_FAAC
- else if (job->acodec == 512)
- jobAudioCodec = @"MP3"; // HB_ACODEC_LAME
- else if (job->acodec == 1024)
- jobAudioCodec = @"Vorbis"; // HB_ACODEC_VORBIS
- else if (job->acodec == 2048)
- jobAudioCodec = @"AC3"; // HB_ACODEC_AC3
+ /* Deterimine for sure how we are now setting iPod uuid atom */
+ if (job->h264_level) // We are encoding for iPod
+ jobVideoCodec = @"x264 (H.264 iPod)"; // HB_VCODEC_X264
else
- jobAudioCodec = @"unknown";
- /* Show Basic File info */
- if (job->chapter_markers == 1)
- [aMutableString appendString:[NSString stringWithFormat:@"\nFormat: %@ Container, %@ Video + %@ Audio, Chapter Markers", jobFormat, jobVideoCodec, jobAudioCodec]];
- else
- [aMutableString appendString:[NSString stringWithFormat:@"\nFormat: %@ Container, %@ Video + %@ Audio", jobFormat, jobVideoCodec, jobAudioCodec]];
-
- /*Picture info*/
- /*integers for picture values deinterlace, crop[4], keep_ratio, grayscale, pixel_ratio, pixel_aspect_width, pixel_aspect_height,
- maxWidth, maxHeight */
- if (job->pixel_ratio == 1)
- {
- int titlewidth = title->width - job->crop[2] - job->crop[3];
- int displayparwidth = titlewidth * job->pixel_aspect_width / job->pixel_aspect_height;
- int displayparheight = title->height - job->crop[0] - job->crop[1];
- jobPictureDetail = [NSString stringWithFormat:@"Picture: %dx%d (%dx%d Anamorphic)", displayparwidth, displayparheight, job->width, displayparheight];
- }
- else
- jobPictureDetail = [NSString stringWithFormat:@"Picture: %dx%d", job->width, job->height];
- if (job->keep_ratio == 1)
- jobPictureDetail = [jobPictureDetail stringByAppendingString:@" Keep Aspect Ratio"];
-
- if (job->grayscale == 1)
- jobPictureDetail = [jobPictureDetail stringByAppendingString:@", Grayscale"];
-
- if (job->deinterlace == 1)
- jobPictureDetail = [jobPictureDetail stringByAppendingString:@", Deinterlace"];
- /* Show Picture info */
- [aMutableString appendString:[NSString stringWithFormat:@"\n%@", jobPictureDetail]];
-
- /* Detailed Video info */
- if (job->vquality <= 0 || job->vquality >= 1)
- jobVideoQuality =[NSString stringWithFormat:@"%d kbps", job->vbitrate];
- else
- {
- NSNumber * vidQuality;
- vidQuality = [NSNumber numberWithInt:job->vquality * 100];
- /* this is screwed up kind of. Needs to be formatted properly */
- if (job->crf == 1)
- jobVideoQuality =[NSString stringWithFormat:@"%@%% CRF", vidQuality];
- else
- jobVideoQuality =[NSString stringWithFormat:@"%@%% CQP", vidQuality];
- }
-
- if (job->vrate_base == 1126125)
- {
- /* NTSC FILM 23.976 */
- jobVideoDetail = [NSString stringWithFormat:@"Video: %@, %@, 23.976 fps", jobVideoCodec, jobVideoQuality];
- }
- else if (job->vrate_base == 900900)
- {
- /* NTSC 29.97 */
- jobVideoDetail = [NSString stringWithFormat:@"Video: %@, %@, 29.97 fps", jobVideoCodec, jobVideoQuality];
- }
- else
- {
- /* Everything else */
- jobVideoDetail = [NSString stringWithFormat:@"Video: %@, %@, %d fps", jobVideoCodec, jobVideoQuality, job->vrate / job->vrate_base];
- }
-
- /* Add the video detail string to the job filed in the window */
- [aMutableString appendString:[NSString stringWithFormat:@"\n%@", jobVideoDetail]];
-
- /* if there is an x264 option string, lets add it here*/
- /*NOTE: Due to size, lets get this in a tool tip*/
-
- if (job->x264opts)
- [aMutableString appendString:[NSString stringWithFormat:@"\nx264 Options: %@", [NSString stringWithUTF8String:job->x264opts]]];
+ jobVideoCodec = @"x264 (H.264 Main)"; // HB_VCODEC_X264
+ }
+ else
+ jobVideoCodec = @"unknown";
+
+ /* Audio Codecs (Second half of Codecs in the gui) */
+ if (job->acodec == 256)
+ jobAudioCodec = @"AAC"; // HB_ACODEC_FAAC
+ else if (job->acodec == 512)
+ jobAudioCodec = @"MP3"; // HB_ACODEC_LAME
+ else if (job->acodec == 1024)
+ jobAudioCodec = @"Vorbis"; // HB_ACODEC_VORBIS
+ else if (job->acodec == 2048)
+ jobAudioCodec = @"AC3"; // HB_ACODEC_AC3
+ else
+ jobAudioCodec = @"unknown";
+ /* Show Basic File info */
+ if (job->chapter_markers == 1)
+ [aMutableString appendString:[NSString stringWithFormat:@"\nFormat: %@ Container, %@ Video + %@ Audio, Chapter Markers", jobFormat, jobVideoCodec, jobAudioCodec]];
+ else
+ [aMutableString appendString:[NSString stringWithFormat:@"\nFormat: %@ Container, %@ Video + %@ Audio", jobFormat, jobVideoCodec, jobAudioCodec]];
- /* Audio Detail */
- if ([jobAudioCodec isEqualToString: @"AC3"])
- jobAudioDetail = [NSString stringWithFormat:@"Audio: %@, Pass-Through", jobAudioCodec];
+ /*Picture info*/
+ /*integers for picture values deinterlace, crop[4], keep_ratio, grayscale, pixel_ratio, pixel_aspect_width, pixel_aspect_height,
+ maxWidth, maxHeight */
+ if (job->pixel_ratio == 1)
+ {
+ int titlewidth = title->width - job->crop[2] - job->crop[3];
+ int displayparwidth = titlewidth * job->pixel_aspect_width / job->pixel_aspect_height;
+ int displayparheight = title->height - job->crop[0] - job->crop[1];
+ jobPictureDetail = [NSString stringWithFormat:@"Picture: %dx%d (%dx%d Anamorphic)", displayparwidth, displayparheight, job->width, displayparheight];
+ }
+ else
+ jobPictureDetail = [NSString stringWithFormat:@"Picture: %dx%d", job->width, job->height];
+ if (job->keep_ratio == 1)
+ jobPictureDetail = [jobPictureDetail stringByAppendingString:@" Keep Aspect Ratio"];
+
+ if (job->grayscale == 1)
+ jobPictureDetail = [jobPictureDetail stringByAppendingString:@", Grayscale"];
+
+ if (job->deinterlace == 1)
+ jobPictureDetail = [jobPictureDetail stringByAppendingString:@", Deinterlace"];
+ /* Show Picture info */
+ [aMutableString appendString:[NSString stringWithFormat:@"\n%@", jobPictureDetail]];
+
+ /* Detailed Video info */
+ if (job->vquality <= 0 || job->vquality >= 1)
+ jobVideoQuality =[NSString stringWithFormat:@"%d kbps", job->vbitrate];
+ else
+ {
+ NSNumber * vidQuality;
+ vidQuality = [NSNumber numberWithInt:job->vquality * 100];
+ /* this is screwed up kind of. Needs to be formatted properly */
+ if (job->crf == 1)
+ jobVideoQuality =[NSString stringWithFormat:@"%@%% CRF", vidQuality];
else
- jobAudioDetail = [NSString stringWithFormat:@"Audio: %@, %d kbps, %d Hz", jobAudioCodec, job->abitrate, job->arate];
-
- /* we now get the audio mixdown info for each of the two gui audio tracks */
- /* lets do it the long way here to get a handle on things.
- Hardcoded for two tracks for gui: audio_mixdowns[i] audio_mixdowns[i] */
- int ai; // counter for each audios [] , macgui only allows for two audio tracks currently
- for( ai = 0; ai < 2; ai++ )
- {
- if (job->audio_mixdowns[ai] == HB_AMIXDOWN_MONO)
- jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Mono",ai + 1]];
- if (job->audio_mixdowns[ai] == HB_AMIXDOWN_STEREO)
- jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Stereo",ai + 1]];
- if (job->audio_mixdowns[ai] == HB_AMIXDOWN_DOLBY)
- jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Dolby Surround",ai + 1]];
- if (job->audio_mixdowns[ai] == HB_AMIXDOWN_DOLBYPLII)
- jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Dolby Pro Logic II",ai + 1]];
- if (job->audio_mixdowns[ai] == HB_AMIXDOWN_6CH)
- jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: 6-channel discreet",ai + 1]];
- }
-
- /* Add the Audio detail string to the job filed in the window */
- [aMutableString appendString:[NSString stringWithFormat: @"\n%@", jobAudioDetail]];
-
- /*Destination Field */
- [aMutableString appendString:[NSString stringWithFormat:@"\nDestination: %@", [NSString stringWithUTF8String:job->file]]];
+ jobVideoQuality =[NSString stringWithFormat:@"%@%% CQP", vidQuality];
+ }
+
+ if (job->vrate_base == 1126125)
+ {
+ /* NTSC FILM 23.976 */
+ jobVideoDetail = [NSString stringWithFormat:@"Video: %@, %@, 23.976 fps", jobVideoCodec, jobVideoQuality];
+ }
+ else if (job->vrate_base == 900900)
+ {
+ /* NTSC 29.97 */
+ jobVideoDetail = [NSString stringWithFormat:@"Video: %@, %@, 29.97 fps", jobVideoCodec, jobVideoQuality];
}
+ else
+ {
+ /* Everything else */
+ jobVideoDetail = [NSString stringWithFormat:@"Video: %@, %@, %d fps", jobVideoCodec, jobVideoQuality, job->vrate / job->vrate_base];
+ }
+
+ /* Add the video detail string to the job filed in the window */
+ [aMutableString appendString:[NSString stringWithFormat:@"\n%@", jobVideoDetail]];
+
+ /* if there is an x264 option string, lets add it here*/
+ /*NOTE: Due to size, lets get this in a tool tip*/
+
+ if (job->x264opts)
+ [aMutableString appendString:[NSString stringWithFormat:@"\nx264 Options: %@", [NSString stringWithUTF8String:job->x264opts]]];
+
+ /* Audio Detail */
+ if ([jobAudioCodec isEqualToString: @"AC3"])
+ jobAudioDetail = [NSString stringWithFormat:@"Audio: %@, Pass-Through", jobAudioCodec];
+ else
+ jobAudioDetail = [NSString stringWithFormat:@"Audio: %@, %d kbps, %d Hz", jobAudioCodec, job->abitrate, job->arate];
+
+ /* we now get the audio mixdown info for each of the two gui audio tracks */
+ /* lets do it the long way here to get a handle on things.
+ Hardcoded for two tracks for gui: audio_mixdowns[i] audio_mixdowns[i] */
+ int ai; // counter for each audios [] , macgui only allows for two audio tracks currently
+ for( ai = 0; ai < 2; ai++ )
+ {
+ if (job->audio_mixdowns[ai] == HB_AMIXDOWN_MONO)
+ jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Mono",ai + 1]];
+ if (job->audio_mixdowns[ai] == HB_AMIXDOWN_STEREO)
+ jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Stereo",ai + 1]];
+ if (job->audio_mixdowns[ai] == HB_AMIXDOWN_DOLBY)
+ jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Dolby Surround",ai + 1]];
+ if (job->audio_mixdowns[ai] == HB_AMIXDOWN_DOLBYPLII)
+ jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: Dolby Pro Logic II",ai + 1]];
+ if (job->audio_mixdowns[ai] == HB_AMIXDOWN_6CH)
+ jobAudioDetail = [jobAudioDetail stringByAppendingString:[NSString stringWithFormat:@", Track %d: 6-channel discreet",ai + 1]];
+ }
+
+ /* Add the Audio detail string to the job filed in the window */
+ [aMutableString appendString:[NSString stringWithFormat: @"\n%@", jobAudioDetail]];
+
+ /*Destination Field */
+ [aMutableString appendString:[NSString stringWithFormat:@"\nDestination: %@", [NSString stringWithUTF8String:job->file]]];
}
anAttributedString = [[[NSAttributedString alloc] initWithString:aMutableString attributes:highlighted ? detailHighlightedAttribute : detailAttribute] autorelease];
@@ -609,8 +762,7 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
#define p s->param.working
[fProgressBar setIndeterminate:NO];
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
- float progress_total = jobGroups ?
+ float progress_total = fShowsJobsAsGroups ?
100.0 * ( p.progress + p.job_cur - 1 ) / p.job_count :
100.0 * p.progress;
@@ -634,56 +786,14 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
}
//------------------------------------------------------------------------------------
-// Refresh start/pause button (fStartPauseButton) from current state.
-//------------------------------------------------------------------------------------
-- (void) updateStartPauseButton
-{
-
-// ************* THIS METHOD CAN DISAPPEAR. THE BUTTON IS NOW HIDDEN AND CAN BE DELETED
- if (!fHandle) return;
-
- hb_state_t s;
- hb_get_state2 (fHandle, &s);
-
- if (s.state == HB_STATE_PAUSED)
- {
- [fStartPauseButton setEnabled:YES];
-// [fStartPauseButton setTitle:NSLocalizedString(@"Resume", nil)];
- [fStartPauseButton setImage:[NSImage imageNamed: @"Play"]];
- }
-
- else if ((s.state == HB_STATE_WORKING) || (s.state == HB_STATE_MUXING))
- {
- [fStartPauseButton setEnabled:YES];
-// [fStartPauseButton setTitle:NSLocalizedString(@"Pause", nil)];
- [fStartPauseButton setImage:[NSImage imageNamed: @"Pause"]];
- }
-
- else if (hb_count(fHandle) > 0)
- {
- [fStartPauseButton setEnabled:YES];
-// [fStartPauseButton setTitle:NSLocalizedString(@"Start", nil)];
- [fStartPauseButton setImage:[NSImage imageNamed: @"Play"]];
- }
-
- else
- {
- [fStartPauseButton setEnabled:NO];
-// [fStartPauseButton setTitle:NSLocalizedString(@"Start", nil)];
- [fStartPauseButton setImage:[NSImage imageNamed: @"Play"]];
- }
-}
-
-//------------------------------------------------------------------------------------
// Refresh queue count text field (fQueueCountField).
//------------------------------------------------------------------------------------
- (void)updateQueueCountField
{
NSString * msg;
int jobCount;
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
- if (jobGroups)
+ if (fShowsJobsAsGroups)
{
jobCount = fHandle ? hb_group_count(fHandle) : 0;
if (jobCount == 1)
@@ -715,16 +825,16 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
if (fHandle)
{
- hb_get_state( fHandle, &s );
+ hb_get_state2( fHandle, &s );
job = hb_current_job(fHandle);
}
if (job)
{
- [fJobDescTextField setAttributedStringValue:[self attributedDescriptionForJob:job withDetail:YES withHighlighting:NO]];
+ [fJobDescTextField setAttributedStringValue:[self attributedDescriptionForJob:job withTitle:YES withDetail:YES withHighlighting:NO]];
[self showCurrentJobPane:YES];
- [fJobIconView setImage: fShowsJobsAsGroups ? [NSImage imageNamed:@"JobLarge"] : [NSImage imageNamed:@"JobPassLarge"] ];
+ [fJobIconView setImage: fShowsJobsAsGroups ? [NSImage imageNamed:@"JobLarge"] : [self largeImageForPass: job->pass] ];
NSString * statusMsg = [self progressStatusStringForJob:job state:&s];
NSString * timeMsg = [self progressTimeRemainingStringForJob:job state:&s];
@@ -740,10 +850,6 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
[self showCurrentJobPane:NO];
[fProgressBar stopAnimation:nil]; // just in case in was animating
}
-
- // Gross hack. Also update start/pause button. Have to do it here since we don't
- // have any other periodic chance to update the button.
- [self updateStartPauseButton];
}
//------------------------------------------------------------------------------------
@@ -752,11 +858,15 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
//------------------------------------------------------------------------------------
- (void)updateQueueUI
{
+#if HB_OUTLINE_QUEUE
+ [self rebuildEncodes];
+ [fOutlineView noteNumberOfRowsChanged];
+ [fOutlineView reloadData];
+#endif
[fTaskView noteNumberOfRowsChanged];
[fTaskView reloadData];
[self updateQueueCountField];
- [self updateStartPauseButton];
}
//------------------------------------------------------------------------------------
@@ -769,109 +879,76 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
int row = [sender selectedRow];
if (row != -1)
{
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
- if (jobGroups)
+#if HB_UNI_QUEUE
+ if (row == 0)
+ {
+ [self cancelCurrentJob:sender];
+ }
+ else
+ {
+ row--;
+ if (fShowsJobsAsGroups)
+ hb_rem_group( fHandle, hb_group( fHandle, row ) );
+ else
+ hb_rem( fHandle, hb_job( fHandle, row ) );
+ }
+#else
+ if (fShowsJobsAsGroups)
hb_rem_group( fHandle, hb_group( fHandle, row ) );
else
hb_rem( fHandle, hb_job( fHandle, row ) );
+#endif
[self updateQueueUI];
}
}
//------------------------------------------------------------------------------------
-// Prompts user if the want to cancel encoding of current job. If so, hb_stop gets
-// called.
+// Prompts user if the want to cancel encoding of current job. If so, doCancelCurrentJob
+// gets called.
//------------------------------------------------------------------------------------
- (IBAction)cancelCurrentJob: (id)sender
{
- if (!fHandle) return;
-
- hb_job_t * job = hb_current_job(fHandle);
- if (!job) return;
-
- // If command key is down, don't prompt
- BOOL hasCmdKeyMask = ([[NSApp currentEvent] modifierFlags] & NSCommandKeyMask) != 0;
- if (hasCmdKeyMask)
- hb_stop(fHandle);
- else
- {
- NSString * alertTitle = [NSString stringWithFormat:NSLocalizedString(@"Do you want to stop processing of %@?", nil),
- [NSString stringWithUTF8String:job->title->name]];
-
- NSBeginCriticalAlertSheet(
- alertTitle,
- NSLocalizedString(@"Stop Processing", nil), NSLocalizedString(@"Keep Processing", nil), nil, fQueueWindow, self,
- @selector(cancelCurrentJob:returnCode:contextInfo:), nil, nil,
- NSLocalizedString(@"Your movie will be lost if you don't continue processing.", nil),
- [NSString stringWithUTF8String:job->title->name]);
-
- // cancelCurrentJob:returnCode:contextInfo: will be called when the dialog is dismissed
- }
-}
-
-- (void) cancelCurrentJob: (NSWindow *)sheet returnCode: (int)returnCode contextInfo: (void *)contextInfo
-{
- if (returnCode == NSAlertDefaultReturn)
- hb_stop(fHandle);
+ [fHBController Cancel:sender];
}
//------------------------------------------------------------------------------------
-// Enables or disables the display of detail information for each job based on the
-// state of the sender.
+// Turns on the display of detail information for each job. Does nothing if detail is
+// already turned on.
//------------------------------------------------------------------------------------
-- (IBAction)detailChanged: (id)sender
+- (IBAction)showDetail: (id)sender
{
- if ([sender isMemberOfClass:[NSButton class]])
- {
- BOOL detail = [sender state] == NSOnState;
- [[NSUserDefaults standardUserDefaults] setBool:detail forKey:@"QueueShowsDetail"];
-
- [self setShowsDetail:detail];
- }
+ if (!fShowsDetail)
+ [self setShowsDetail:YES];
}
//------------------------------------------------------------------------------------
-// Enables or disables the display of job groups based on the state of the sender.
+// Turns off the display of detail information for each job. Does nothing if detail is
+// already turned off.
//------------------------------------------------------------------------------------
-- (IBAction)jobGroupsChanged: (id)sender
+- (IBAction)hideDetail: (id)sender
{
- if ([sender isMemberOfClass:[NSButton class]])
- {
- BOOL groups = [sender state] == NSOnState;
- [[NSUserDefaults standardUserDefaults] setBool:groups forKey:@"QueueShowsJobsAsGroups"];
-
- [self setShowsJobsAsGroups:groups];
- }
- else if ([sender isMemberOfClass:[NSSegmentedControl class]])
- {
- BOOL groups = [sender selectedSegment] == 0;
- [[NSUserDefaults standardUserDefaults] setBool:groups forKey:@"QueueShowsJobsAsGroups"];
-
- [self setShowsJobsAsGroups:groups];
- }
- else if ([sender isMemberOfClass:[NSMatrix class]])
- {
- BOOL groups = [sender selectedColumn] == 0;
- [[NSUserDefaults standardUserDefaults] setBool:groups forKey:@"QueueShowsJobsAsGroups"];
-
- [self setShowsJobsAsGroups:groups];
- }
+ if (fShowsDetail)
+ [self setShowsDetail:NO];
}
//------------------------------------------------------------------------------------
-// Toggles the Shows Detail setting.
+// Turns on displaying of jobs as groups by calling setShowsJobsAsGroups:YES. Does
+// nothing if groups are already turned on.
//------------------------------------------------------------------------------------
-- (IBAction)toggleShowsDetail: (id)sender
+- (IBAction)showJobsAsGroups: (id)sender
{
- [self setShowsDetail:!fShowsDetail];
+ if (!fShowsJobsAsGroups)
+ [self setShowsJobsAsGroups:YES];
}
//------------------------------------------------------------------------------------
-// Toggles the Shows Jobs As Groups setting.
+// Turns on displaying of jobs as individual items by calling setShowsJobsAsGroups:NO.
+// Does nothing if groups are already turned off.
//------------------------------------------------------------------------------------
-- (IBAction)toggleShowsJobsAsGroups: (id)sender
+- (IBAction)showJobsAsPasses: (id)sender
{
- [self setShowsJobsAsGroups:!fShowsJobsAsGroups];
+ if (fShowsJobsAsGroups)
+ [self setShowsJobsAsGroups:NO];
}
//------------------------------------------------------------------------------------
@@ -890,14 +967,13 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
hb_pause (fHandle);
else
{
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
- if (jobGroups)
+ if (fShowsJobsAsGroups)
{
if (hb_group_count(fHandle) > 0)
- hb_start (fHandle);
+ [fHBController doRip];
}
else if (hb_count(fHandle) > 0)
- hb_start (fHandle);
+ [fHBController doRip];
}
}
@@ -959,33 +1035,45 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease];
// Set the text label to be displayed in the toolbar and customization palette
- [toolbarItem setLabel: @"Show Detail"];
- [toolbarItem setPaletteLabel: @"Show Detail"];
+ [toolbarItem setLabel: @"Detail"];
+ [toolbarItem setPaletteLabel: @"Detail"];
// Set up a reasonable tooltip, and image
- [toolbarItem setToolTip: @"Show Detail"];
- [toolbarItem setImage: [NSImage imageNamed: @"Info"]];
+ [toolbarItem setToolTip: @"Displays detailed information in the queue"];
+ [toolbarItem setImage: [NSImage imageNamed: @"Detail"]];
// Tell the item what message to send when it is clicked
[toolbarItem setTarget: self];
- [toolbarItem setAction: @selector(toggleShowsDetail:)];
+ [toolbarItem setAction: fShowsDetail ? @selector(hideDetail:) : @selector(showDetail:)];
}
else if ([itemIdentifier isEqual: HBShowGroupsToolbarIdentifier])
{
toolbarItem = [[[NSToolbarItem alloc] initWithItemIdentifier: itemIdentifier] autorelease];
+/*
// Set the text label to be displayed in the toolbar and customization palette
- [toolbarItem setLabel: @"View"];
- [toolbarItem setPaletteLabel: @"View"];
+ [toolbarItem setLabel: @"Passes"];
+ [toolbarItem setPaletteLabel: @"Passes"];
// Set up a reasonable tooltip, and image
- [toolbarItem setToolTip: @"View"];
-// [toolbarItem setImage: [NSImage imageNamed: @"Disc"]];
-
+ [toolbarItem setToolTip: @"Displays individual passes in the queue"];
+ [toolbarItem setImage: [NSImage imageNamed: @"Passes"]];
+ // Tell the item what message to send when it is clicked
+ [toolbarItem setTarget: self];
+ [toolbarItem setAction: fShowsJobsAsGroups ? @selector(showJobsAsPasses:) : @selector(showJobsAsGroups:)];
+*/
+
+// Various attempts at other button types in the toolbar. A matrix worked fine to display
+// a button for encodes & passes, but ultimately I decided to go with a single button
+// called "Passes" that toggles on or off. All these suffer from the fact taht you need
+// to override NSToolbarItem for them in order to validate their state.
+ [toolbarItem setLabel: @"View"];
+ [toolbarItem setPaletteLabel: @"View"];
+
NSButtonCell * buttonCell = [[[NSButtonCell alloc] initImageCell:nil] autorelease];
- [buttonCell setBezelStyle:NSShadowlessSquareBezelStyle];//NSShadowlessSquareBezelStyle
+ [buttonCell setBezelStyle:NSShadowlessSquareBezelStyle];
[buttonCell setButtonType:NSToggleButton];
[buttonCell setBordered:NO];
[buttonCell setImagePosition:NSImageOnly];
@@ -1003,10 +1091,16 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
[buttonCell setTitle:@""];
[buttonCell setImage:[NSImage imageNamed: @"Encodes"]];
[buttonCell setAlternateImage:[NSImage imageNamed: @"EncodesPressed"]];
+ [buttonCell setAction: @selector(showJobsAsGroups:)];
+ [matrix setToolTip: @"Displays encodes in the queue" forCell:buttonCell];
+
buttonCell = [matrix cellAtRow:0 column:1];
[buttonCell setTitle:@""];
[buttonCell setImage:[NSImage imageNamed: @"Passes"]];
[buttonCell setAlternateImage:[NSImage imageNamed: @"PassesPressed"]];
+ [buttonCell setAction: @selector(showJobsAsPasses:)];
+ [matrix setToolTip: @"Displays individual passes in the queue" forCell:buttonCell];
+
[toolbarItem setMinSize: [matrix frame].size];
[toolbarItem setMaxSize: [matrix frame].size];
[toolbarItem setView: matrix];
@@ -1027,18 +1121,18 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
*/
/*
- NSButton * button = [[[NSButton alloc] initWithFrame:NSMakeRect(0,0,20,20)] autorelease];
+ NSButton * button = [[[NSButton alloc] initWithFrame:NSMakeRect(0,0,32,32)] autorelease];
[button setButtonType:NSSwitchButton];
[button setTitle:@""];
[button setState: fShowsJobsAsGroups ? NSOnState : NSOffState];
[toolbarItem setMinSize: NSMakeSize(20,20)];
[toolbarItem setMaxSize: NSMakeSize(20,20)];
[toolbarItem setView: button];
-*/
// Tell the item what message to send when it is clicked
[toolbarItem setTarget: self];
[toolbarItem setAction: @selector(jobGroupsChanged:)];
+*/
}
return toolbarItem;
@@ -1134,38 +1228,34 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
}
}
-/* not used because HBShowGroupsToolbarIdentifier is now a custom view
else if ([[toolbarItem itemIdentifier] isEqual: HBShowGroupsToolbarIdentifier])
{
enable = hb_count(fHandle) > 0;
+ [toolbarItem setAction: fShowsJobsAsGroups ? @selector(showJobsAsPasses:) : @selector(showJobsAsGroups:)];
if (fShowsJobsAsGroups)
{
- [toolbarItem setLabel: @"View Passes"];
- [toolbarItem setPaletteLabel: @"View Passes"];
- [toolbarItem setToolTip: @"Displays items in the queue as individual passes"];
+ [toolbarItem setImage: [NSImage imageNamed: @"Passes"]];
+ [toolbarItem setToolTip: @"Displays individual passes in the queue"];
}
else
{
- [toolbarItem setLabel: @"View Encodes"];
- [toolbarItem setPaletteLabel: @"View Encodes"];
- [toolbarItem setToolTip: @"Displays items in the queue as encodes"];
+ [toolbarItem setImage: [NSImage imageNamed: @"PassesPressed"]];
+ [toolbarItem setToolTip: @"Displays encodes in the queue"];
}
}
-*/
else if ([[toolbarItem itemIdentifier] isEqual: HBShowDetailToolbarIdentifier])
{
enable = hb_count(fHandle) > 0;
+ [toolbarItem setAction: fShowsDetail ? @selector(hideDetail:) : @selector(showDetail:)];
if (fShowsDetail)
{
- [toolbarItem setLabel: @"Hide Detail"];
- [toolbarItem setPaletteLabel: @"Hide Detail"];
- [toolbarItem setToolTip: @"Displays detailed information in the queue"];
+ [toolbarItem setImage: [NSImage imageNamed: @"DetailPressed"]];
+ [toolbarItem setToolTip: @"Hides detailed information in the queue"];
}
else
{
- [toolbarItem setLabel: @"Show Detail"];
- [toolbarItem setPaletteLabel: @"Show Detail"];
+ [toolbarItem setImage: [NSImage imageNamed: @"Detail"]];
[toolbarItem setToolTip: @"Displays detailed information in the queue"];
}
}
@@ -1191,6 +1281,16 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
[self setShowsDetail:fShowsDetail];
[self setShowsJobsAsGroups:fShowsJobsAsGroups];
[self showCurrentJobPane:NO];
+
+#if HB_QUEUE_DRAGGING
+ [fTaskView registerForDraggedTypes: [NSArray arrayWithObject:HBQueueDataType] ];
+#endif
+
+#if HB_OUTLINE_QUEUE
+ // Don't allow autoresizing of main column, else the "delete" column will get
+ // pushed out of view.
+ [fOutlineView setAutoresizesOutlineColumn: NO];
+#endif
}
@@ -1210,11 +1310,18 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
//------------------------------------------------------------------------------------
- (int)numberOfRowsInTableView: (NSTableView *)aTableView
{
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
- if (jobGroups)
+#if HB_UNI_QUEUE
+ int numItems = hb_current_job(fHandle) ? 1 : 0;
+ if (fShowsJobsAsGroups)
+ return numItems + hb_group_count(fHandle);
+ else
+ return numItems + hb_count(fHandle);
+#else
+ if (fShowsJobsAsGroups)
return hb_group_count(fHandle);
else
return hb_count(fHandle);
+#endif
}
//------------------------------------------------------------------------------------
@@ -1227,28 +1334,47 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
if (!fHandle)
return @""; // fatal error!
- hb_job_t * job;
+ hb_job_t * job = nil;
- BOOL jobGroups = [[NSUserDefaults standardUserDefaults] boolForKey:@"QueueShowsJobsAsGroups"];
- if (jobGroups)
+#if HB_UNI_QUEUE
+ // Looking for the current job?
+ int jobIndex = rowIndex;
+ if (hb_current_job(fHandle))
+ {
+ if (rowIndex == 0)
+ job = hb_current_job(fHandle);
+ else
+ jobIndex = rowIndex - 1;
+ }
+
+ if (!job)
+ {
+ if (fShowsJobsAsGroups)
+ job = hb_group(fHandle, jobIndex);
+ else
+ job = hb_job(fHandle, jobIndex);
+ }
+#else
+ if (fShowsJobsAsGroups)
job = hb_group(fHandle, rowIndex);
else
job = hb_job(fHandle, rowIndex);
-
+#endif
+
if (!job)
return @""; // fatal error!
if ([[aTableColumn identifier] isEqualToString:@"desc"])
{
BOOL highlighted = [aTableView isRowSelected:rowIndex] && [[aTableView window] isKeyWindow] && ([[aTableView window] firstResponder] == aTableView);
- return [self attributedDescriptionForJob:job withDetail:fShowsDetail withHighlighting:highlighted];
+ return [self attributedDescriptionForJob:job withTitle:YES withDetail:fShowsDetail withHighlighting:highlighted];
}
else if ([[aTableColumn identifier] isEqualToString:@"delete"])
return @"";
else if ([[aTableColumn identifier] isEqualToString:@"icon"])
- return fShowsJobsAsGroups ? [NSImage imageNamed:@"JobSmall"] : [NSImage imageNamed:@"JobPassSmall"];
+ return fShowsJobsAsGroups ? [NSImage imageNamed:@"JobSmall"] : [self smallImageForPass: job->pass];
return @"";
}
@@ -1276,4 +1402,153 @@ static NSString* HBShowGroupsToolbarIdentifier = @"HBShowGroupsTo
}
}
+//------------------------------------------------------------------------------------
+// NSTableView delegate
+//------------------------------------------------------------------------------------
+#if HB_UNI_QUEUE
+- (float)tableView:(NSTableView *)tableView heightOfRow:(int)row
+{
+ if ((row == 0) && hb_current_job(fHandle))
+ return HB_ROW_HEIGHT_ACTIVE_JOB;
+ else
+ return fShowsDetail ? HB_ROW_HEIGHT_DETAIL : HB_ROW_HEIGHT_NO_DETAIL;
+}
+#endif
+
+#if HB_QUEUE_DRAGGING
+- (BOOL)tableView:(NSTableView *)tv writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard*)pboard
+{
+ // Copy the row numbers to the pasteboard.
+ NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];
+ [pboard declareTypes:[NSArray arrayWithObject:HBQueueDataType] owner:self];
+ [pboard setData:data forType:HBQueueDataType];
+ return YES;
+}
+#endif
+
+#if HB_QUEUE_DRAGGING
+- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(int)row proposedDropOperation:(NSTableViewDropOperation)op
+{
+ // Add code here to validate the drop
+ NSLog(@"validate Drop");
+ return NSDragOperationEvery;
+}
+#endif
+
+#if HB_QUEUE_DRAGGING
+- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
+ row:(int)row dropOperation:(NSTableViewDropOperation)operation
+{
+ NSPasteboard* pboard = [info draggingPasteboard];
+ NSData* rowData = [pboard dataForType:HBQueueDataType];
+ NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData];
+ int dragRow = [rowIndexes firstIndex];
+
+ // Move the specified row to its new location...
+
+ return YES;
+}
+#endif
+
+
+#if HB_OUTLINE_QUEUE
+
+- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item
+{
+ if (item == nil)
+ return [fEncodes objectAtIndex:index];
+ else
+ return [item objectAtIndex:index];
+}
+
+- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
+{
+ return ! [item isKindOfClass:[HBJob class]];
+}
+
+- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
+{
+ if (item == nil)
+ return [fEncodes count];
+ else
+ return [item count];
+}
+
+- (float)outlineView:(NSOutlineView *)outlineView heightOfRowByItem:(id)item
+{
+ if (fShowsDetail && [item isKindOfClass:[HBJob class]])
+ return HB_ROW_HEIGHT_DETAIL;
+ else
+ return HB_ROW_HEIGHT_NO_DETAIL;
+}
+
+- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
+{
+ BOOL highlighted = [outlineView isRowSelected:[outlineView rowForItem: item]] && [[outlineView window] isKeyWindow] && ([[outlineView window] firstResponder] == outlineView);
+ if ([item isKindOfClass:[HBJob class]])
+ {
+ if ([[tableColumn identifier] isEqualToString:@"desc"])
+ {
+ hb_job_t * job = [item job];
+// return [self attributedDescriptionForJob:job withTitle:NO withDetail:fShowsDetail withHighlighting:highlighted];
+ if (job->pass == -1)
+ return @"Subtitle Scan";
+ else
+ {
+ int passNum = MAX( 1, job->pass );
+ if (passNum == 1)
+ return @"1st Pass";
+ if (passNum == 2)
+ return @"2nd Pass";
+ else
+ return [NSString stringWithFormat: @"Pass %d", passNum];
+ }
+ }
+ }
+
+ else
+ {
+ hb_job_t * job = [[item objectAtIndex:0] job];
+ if ([[tableColumn identifier] isEqualToString:@"desc"])
+ return [self attributedDescriptionForJob:job withTitle:YES withDetail:NO withHighlighting:highlighted];
+ }
+
+ return @"";
+}
+
+- (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item
+{
+ if ([[tableColumn identifier] isEqualToString:@"desc"])
+ {
+ if ([item isKindOfClass:[HBJob class]])
+ [cell setImage:[self smallImageForPass: [item job]->pass]];
+ else
+ [cell setImage:[NSImage imageNamed:@"JobSmall"]];
+ }
+
+ else if ([[tableColumn identifier] isEqualToString:@"delete"])
+ {
+ // The Delete action can only be applied for group items, not indivdual jobs.
+ if ([item isKindOfClass:[HBJob class]])
+ {
+ [cell setEnabled: NO];
+ [cell setImage: nil];
+ }
+ else
+ {
+ [cell setEnabled: YES];
+ BOOL highlighted = [outlineView isRowSelected:[outlineView rowForItem: item]] && [[outlineView window] isKeyWindow] && ([[outlineView window] firstResponder] == outlineView);
+ if (highlighted)
+ {
+ [cell setImage:[NSImage imageNamed:@"DeleteHighlight"]];
+ [cell setAlternateImage:[NSImage imageNamed:@"DeleteHighlightPressed"]];
+ }
+ else
+ [cell setImage:[NSImage imageNamed:@"Delete"]];
+ }
+ }
+}
+
+#endif
+
@end
diff --git a/macosx/HandBrake.xcodeproj/project.pbxproj b/macosx/HandBrake.xcodeproj/project.pbxproj
index 9f0045429..aec33037a 100644
--- a/macosx/HandBrake.xcodeproj/project.pbxproj
+++ b/macosx/HandBrake.xcodeproj/project.pbxproj
@@ -131,7 +131,6 @@
A9AC41DF0C918DB500DDF9B8 /* HBAdvancedController.m in Sources */ = {isa = PBXBuildFile; fileRef = A9AC41DD0C918DB500DDF9B8 /* HBAdvancedController.m */; };
A9AC41E00C918DB500DDF9B8 /* HBAdvancedController.h in Headers */ = {isa = PBXBuildFile; fileRef = A9AC41DE0C918DB500DDF9B8 /* HBAdvancedController.h */; };
A9AC41E70C918DC000DDF9B8 /* AdvancedView.nib in Resources */ = {isa = PBXBuildFile; fileRef = A9AC41E50C918DC000DDF9B8 /* AdvancedView.nib */; };
- A9B4CEC80C95752B0086548A /* pref-general.png in Resources */ = {isa = PBXBuildFile; fileRef = A9B4CEC70C95752B0086548A /* pref-general.png */; };
A9DE40450C959834008A5440 /* minus-8.png in Resources */ = {isa = PBXBuildFile; fileRef = A9DE40430C959834008A5440 /* minus-8.png */; };
A9DE40460C959834008A5440 /* plus-8.png in Resources */ = {isa = PBXBuildFile; fileRef = A9DE40440C959834008A5440 /* plus-8.png */; };
B48359A80C82960500E04440 /* lang.c in Sources */ = {isa = PBXBuildFile; fileRef = B48359A70C82960500E04440 /* lang.c */; };
@@ -142,9 +141,16 @@
E30EC7740C90BDD0004B9545 /* PassesPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = E30EC7700C90BDD0004B9545 /* PassesPressed.png */; };
E30EC7750C90BDD0004B9545 /* Passes.png in Resources */ = {isa = PBXBuildFile; fileRef = E30EC7710C90BDD0004B9545 /* Passes.png */; };
E30EC7760C90BDD0004B9545 /* EncodesPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = E30EC7720C90BDD0004B9545 /* EncodesPressed.png */; };
- E318F0470C90D6D3003EFB59 /* JobPassLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = E318F0460C90D6D3003EFB59 /* JobPassLarge.png */; };
- E318F0580C90D88C003EFB59 /* JobPassSmall.png in Resources */ = {isa = PBXBuildFile; fileRef = E318F0570C90D88C003EFB59 /* JobPassSmall.png */; };
- E318F0830C90DC4A003EFB59 /* Info.png in Resources */ = {isa = PBXBuildFile; fileRef = E318F0820C90DC4A003EFB59 /* Info.png */; };
+ E37167800C92F5090072B384 /* DetailPressed.png in Resources */ = {isa = PBXBuildFile; fileRef = E371677E0C92F5090072B384 /* DetailPressed.png */; };
+ E37167810C92F5090072B384 /* Detail.png in Resources */ = {isa = PBXBuildFile; fileRef = E371677F0C92F5090072B384 /* Detail.png */; };
+ E37167890C92F6180072B384 /* JobPassSecondSmall.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167830C92F6180072B384 /* JobPassSecondSmall.png */; };
+ E371678A0C92F6180072B384 /* JobPassSubtitleSmall.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167840C92F6180072B384 /* JobPassSubtitleSmall.png */; };
+ E371678B0C92F6180072B384 /* JobPassFirstSmall.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167850C92F6180072B384 /* JobPassFirstSmall.png */; };
+ E371678C0C92F6180072B384 /* JobPassFirstLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167860C92F6180072B384 /* JobPassFirstLarge.png */; };
+ E371678D0C92F6180072B384 /* JobPassSubtitleLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167870C92F6180072B384 /* JobPassSubtitleLarge.png */; };
+ E371678E0C92F6180072B384 /* JobPassSecondLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167880C92F6180072B384 /* JobPassSecondLarge.png */; };
+ E37167A90C92FAA50072B384 /* JobPassUnknownSmall.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167A70C92FAA50072B384 /* JobPassUnknownSmall.png */; };
+ E37167AA0C92FAA50072B384 /* JobPassUnknownLarge.png in Resources */ = {isa = PBXBuildFile; fileRef = E37167A80C92FAA50072B384 /* JobPassUnknownLarge.png */; };
E37C89410C83988F00C1B919 /* DeleteHighlight.png in Resources */ = {isa = PBXBuildFile; fileRef = E37C893D0C83988F00C1B919 /* DeleteHighlight.png */; };
E37C89420C83988F00C1B919 /* Delete.png in Resources */ = {isa = PBXBuildFile; fileRef = E37C893E0C83988F00C1B919 /* Delete.png */; };
E37C89430C83988F00C1B919 /* JobSmall.png in Resources */ = {isa = PBXBuildFile; fileRef = E37C893F0C83988F00C1B919 /* JobSmall.png */; };
@@ -307,9 +313,16 @@
E30EC7700C90BDD0004B9545 /* PassesPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = PassesPressed.png; sourceTree = "<group>"; };
E30EC7710C90BDD0004B9545 /* Passes.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Passes.png; sourceTree = "<group>"; };
E30EC7720C90BDD0004B9545 /* EncodesPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = EncodesPressed.png; sourceTree = "<group>"; };
- E318F0460C90D6D3003EFB59 /* JobPassLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassLarge.png; sourceTree = "<group>"; };
- E318F0570C90D88C003EFB59 /* JobPassSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassSmall.png; sourceTree = "<group>"; };
- E318F0820C90DC4A003EFB59 /* Info.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Info.png; sourceTree = "<group>"; };
+ E371677E0C92F5090072B384 /* DetailPressed.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DetailPressed.png; sourceTree = "<group>"; };
+ E371677F0C92F5090072B384 /* Detail.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Detail.png; sourceTree = "<group>"; };
+ E37167830C92F6180072B384 /* JobPassSecondSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassSecondSmall.png; sourceTree = "<group>"; };
+ E37167840C92F6180072B384 /* JobPassSubtitleSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassSubtitleSmall.png; sourceTree = "<group>"; };
+ E37167850C92F6180072B384 /* JobPassFirstSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassFirstSmall.png; sourceTree = "<group>"; };
+ E37167860C92F6180072B384 /* JobPassFirstLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassFirstLarge.png; sourceTree = "<group>"; };
+ E37167870C92F6180072B384 /* JobPassSubtitleLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassSubtitleLarge.png; sourceTree = "<group>"; };
+ E37167880C92F6180072B384 /* JobPassSecondLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassSecondLarge.png; sourceTree = "<group>"; };
+ E37167A70C92FAA50072B384 /* JobPassUnknownSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassUnknownSmall.png; sourceTree = "<group>"; };
+ E37167A80C92FAA50072B384 /* JobPassUnknownLarge.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobPassUnknownLarge.png; sourceTree = "<group>"; };
E37C893D0C83988F00C1B919 /* DeleteHighlight.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = DeleteHighlight.png; sourceTree = "<group>"; };
E37C893E0C83988F00C1B919 /* Delete.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Delete.png; sourceTree = "<group>"; };
E37C893F0C83988F00C1B919 /* JobSmall.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = JobSmall.png; sourceTree = "<group>"; };
@@ -558,15 +571,22 @@
E3003CB40C8852B70072F2A8 /* DeletePressed.png */,
E37C893D0C83988F00C1B919 /* DeleteHighlight.png */,
E3003C7E0C88505D0072F2A8 /* DeleteHighlightPressed.png */,
- E37C89400C83988F00C1B919 /* JobLarge.png */,
- E37C893F0C83988F00C1B919 /* JobSmall.png */,
E30EC76F0C90BDD0004B9545 /* Encodes.png */,
E30EC7720C90BDD0004B9545 /* EncodesPressed.png */,
E30EC7700C90BDD0004B9545 /* PassesPressed.png */,
E30EC7710C90BDD0004B9545 /* Passes.png */,
- E318F0570C90D88C003EFB59 /* JobPassSmall.png */,
- E318F0460C90D6D3003EFB59 /* JobPassLarge.png */,
- E318F0820C90DC4A003EFB59 /* Info.png */,
+ E37C89400C83988F00C1B919 /* JobLarge.png */,
+ E37C893F0C83988F00C1B919 /* JobSmall.png */,
+ E37167850C92F6180072B384 /* JobPassFirstSmall.png */,
+ E37167860C92F6180072B384 /* JobPassFirstLarge.png */,
+ E37167830C92F6180072B384 /* JobPassSecondSmall.png */,
+ E37167880C92F6180072B384 /* JobPassSecondLarge.png */,
+ E37167840C92F6180072B384 /* JobPassSubtitleSmall.png */,
+ E37167870C92F6180072B384 /* JobPassSubtitleLarge.png */,
+ E37167A70C92FAA50072B384 /* JobPassUnknownSmall.png */,
+ E37167A80C92FAA50072B384 /* JobPassUnknownLarge.png */,
+ E371677E0C92F5090072B384 /* DetailPressed.png */,
+ E371677F0C92F5090072B384 /* Detail.png */,
);
path = icons;
sourceTree = "<group>";
@@ -760,13 +780,19 @@
E30EC7740C90BDD0004B9545 /* PassesPressed.png in Resources */,
E30EC7750C90BDD0004B9545 /* Passes.png in Resources */,
E30EC7760C90BDD0004B9545 /* EncodesPressed.png in Resources */,
- E318F0470C90D6D3003EFB59 /* JobPassLarge.png in Resources */,
- E318F0580C90D88C003EFB59 /* JobPassSmall.png in Resources */,
- E318F0830C90DC4A003EFB59 /* Info.png in Resources */,
A9AC41E70C918DC000DDF9B8 /* AdvancedView.nib in Resources */,
A97A1DB40C91A6800015BC08 /* Express.nib in Resources */,
A9ABA2270C92AECA00D98324 /* PictureSettings.nib in Resources */,
- A9B4CEC80C95752B0086548A /* pref-general.png in Resources */,
+ E37167800C92F5090072B384 /* DetailPressed.png in Resources */,
+ E37167810C92F5090072B384 /* Detail.png in Resources */,
+ E37167890C92F6180072B384 /* JobPassSecondSmall.png in Resources */,
+ E371678A0C92F6180072B384 /* JobPassSubtitleSmall.png in Resources */,
+ E371678B0C92F6180072B384 /* JobPassFirstSmall.png in Resources */,
+ E371678C0C92F6180072B384 /* JobPassFirstLarge.png in Resources */,
+ E371678D0C92F6180072B384 /* JobPassSubtitleLarge.png in Resources */,
+ E371678E0C92F6180072B384 /* JobPassSecondLarge.png in Resources */,
+ E37167A90C92FAA50072B384 /* JobPassUnknownSmall.png in Resources */,
+ E37167AA0C92FAA50072B384 /* JobPassUnknownLarge.png in Resources */,
A9DE40450C959834008A5440 /* minus-8.png in Resources */,
A9DE40460C959834008A5440 /* plus-8.png in Resources */,
A94537560C95E6A300EBB9B1 /* pref-picture.png in Resources */,
diff --git a/macosx/icons/Detail.png b/macosx/icons/Detail.png
new file mode 100644
index 000000000..b98500a08
--- /dev/null
+++ b/macosx/icons/Detail.png
Binary files differ
diff --git a/macosx/icons/DetailPressed.png b/macosx/icons/DetailPressed.png
new file mode 100644
index 000000000..b4ecf3e16
--- /dev/null
+++ b/macosx/icons/DetailPressed.png
Binary files differ
diff --git a/macosx/icons/JobPassFirstLarge.png b/macosx/icons/JobPassFirstLarge.png
new file mode 100644
index 000000000..e772fdbe3
--- /dev/null
+++ b/macosx/icons/JobPassFirstLarge.png
Binary files differ
diff --git a/macosx/icons/JobPassFirstSmall.png b/macosx/icons/JobPassFirstSmall.png
new file mode 100644
index 000000000..415ac3f93
--- /dev/null
+++ b/macosx/icons/JobPassFirstSmall.png
Binary files differ
diff --git a/macosx/icons/JobPassSecondLarge.png b/macosx/icons/JobPassSecondLarge.png
new file mode 100644
index 000000000..f5f6dcd69
--- /dev/null
+++ b/macosx/icons/JobPassSecondLarge.png
Binary files differ
diff --git a/macosx/icons/JobPassSecondSmall.png b/macosx/icons/JobPassSecondSmall.png
new file mode 100644
index 000000000..ec111d2f9
--- /dev/null
+++ b/macosx/icons/JobPassSecondSmall.png
Binary files differ
diff --git a/macosx/icons/JobPassSubtitleLarge.png b/macosx/icons/JobPassSubtitleLarge.png
new file mode 100644
index 000000000..8ea9ddbc9
--- /dev/null
+++ b/macosx/icons/JobPassSubtitleLarge.png
Binary files differ
diff --git a/macosx/icons/JobPassSubtitleSmall.png b/macosx/icons/JobPassSubtitleSmall.png
new file mode 100644
index 000000000..c6e04bee1
--- /dev/null
+++ b/macosx/icons/JobPassSubtitleSmall.png
Binary files differ
diff --git a/macosx/icons/JobPassUnknownLarge.png b/macosx/icons/JobPassUnknownLarge.png
new file mode 100644
index 000000000..c6c50878d
--- /dev/null
+++ b/macosx/icons/JobPassUnknownLarge.png
Binary files differ
diff --git a/macosx/icons/JobPassUnknownSmall.png b/macosx/icons/JobPassUnknownSmall.png
new file mode 100644
index 000000000..d60542e3f
--- /dev/null
+++ b/macosx/icons/JobPassUnknownSmall.png
Binary files differ