diff options
author | dynaflash <[email protected]> | 2008-09-16 20:57:13 +0000 |
---|---|---|
committer | dynaflash <[email protected]> | 2008-09-16 20:57:13 +0000 |
commit | ab154ca5555a0b04a5ee4f00bf65b27a57f64471 (patch) | |
tree | 45d7fe81a0382edc928161028fe469142ef47474 /macosx/HBQueueController.h | |
parent | f1809fae2b817c697ae663167f0ab31c2e0aa676 (diff) |
MacGui: Resilient Queue: Initial Implementation
- Completely overhauls how encodes are setup by the MacGui
- All encodes are now stored in an NSMutableArray (QueueFileArray) and saved in a plist (~/Library/Application Support/HandBrake/Queue.plist)
- A separate instance of libhb (fQueueEncodeLibhb) is used for queue processing (includes single encodes)
- fHandle still takes care of all user intiated scans and encode parameters
- libhb now only stores multiple passes for a single encode instead of storing the entire queue
- If HB crashes, or if you stop encoding while there are still pending encodes in your queue, upon next launch you will be prompted to reload the previous queue from the Queue.plist
- Removed the current encoding information at the top of the queue window to make room for a larger list as I thought it to be redundant
- The queue list is now re-arrangeable via drag-n-drop (pending encodes only)
- Known issues and bugs:
-- If you delete a previously cancelled encode then try to restart with a new encode, nothing happens. Throw off the sync of the currently encoding job.
-- Probably alot more since its a total overhaul of how the MacGui has handled encoding since titer originally wrote it :)
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1703 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'macosx/HBQueueController.h')
-rw-r--r-- | macosx/HBQueueController.h | 223 |
1 files changed, 40 insertions, 183 deletions
diff --git a/macosx/HBQueueController.h b/macosx/HBQueueController.h index 262557881..92379793f 100644 --- a/macosx/HBQueueController.h +++ b/macosx/HBQueueController.h @@ -9,32 +9,12 @@ #include "hb.h" @class HBController; -@class HBJob; -@class HBJobGroup; + #define HB_QUEUE_DRAGGING 0 // <--- NOT COMPLETELY FUNCTIONAL YET #define HB_OUTLINE_METRIC_CONTROLS 0 // for tweaking the outline cell spacings -// hb_job_t contains a sequence_id field. The high word is a unique job group id. -// The low word contains the "sequence id" which is a value starting at 0 and -// incremented for each pass in the job group. Use the function below to create and -// interpret a sequence_id field. -int MakeJobID(int jobGroupID, int sequenceNum); -bool IsFirstPass(int jobID); -typedef enum _HBQueueJobGroupStatus -{ - HBStatusNone = 0, - HBStatusPending = 1, - HBStatusWorking = 2, - HBStatusCompleted = 3, - HBStatusCanceled = 4 -} HBQueueJobGroupStatus; - -// Notification sent whenever the status of a HBJobGroup changes (via setStatus). The -// user info contains one object, @"HBOldJobGroupStatus", which is an NSNumber -// containing the previous status of the job group. -extern NSString * HBJobGroupStatusNotification; //------------------------------------------------------------------------------------ // As usual, we need to subclass NSOutlineView to handle a few special cases: @@ -56,161 +36,29 @@ extern NSString * HBJobGroupStatusNotification; @interface HBQueueOutlineView : NSOutlineView { -#if HB_QUEUE_DRAGGING -BOOL fIsDragging; -#endif -} -#if HB_QUEUE_DRAGGING -- (BOOL) isDragging; -#endif -@end -//------------------------------------------------------------------------------------ -// HBJob is the UI's equivalent to libhb's hb_job_t struct. It is used mainly for -// drawing the job's description. HBJob are referred to in the UI as 'passes'. -//------------------------------------------------------------------------------------ +BOOL fIsDragging; -@interface HBJob : NSObject -{ - HBJobGroup *jobGroup; // The group this job belongs to - - // The following fields match up with similar fields found in hb_job_t and it's - // various substructures. -@public - // from hb_job_s - int sequence_id; // This is how we xref to the jobs inside libhb - - int chapter_start; - int chapter_end; - int chapter_markers; - int crop[4]; - int deinterlace; - int width; // source dimensions - int height; - int output_width; // output dimensions - int output_height; - int anamorphic_width; // anamorphic dimensions - int anamorphic_height; - int keep_ratio; - int grayscale; - int pixel_ratio; - int pixel_aspect_width; - int pixel_aspect_height; - int vcodec; - float vquality; - int vbitrate; - int vrate; - int vrate_base; - int pass; - int h264_level; - int crf; - NSString *x264opts; - /* Used to concatenate audio list values into a string for display */ - NSString *audioinfo_codecs; - NSString *audioinfo_summary; - - int audio_mixdowns[8]; - int acodec; - int abitrate; - int arate; - int subtitle; - - int mux; - NSString *file; - - // from hb_title_s - NSString *titleName; - int titleIndex; - int titleWidth; - int titleHeight; - - // from hb_subtitle_s - NSString *subtitleLang; } -+ (HBJob*) jobWithLibhbJob: (hb_job_t *) job; -- (id) initWithLibhbJob: (hb_job_t *) job; -- (HBJobGroup *) jobGroup; -- (void) setJobGroup: (HBJobGroup *)aJobGroup; -- (NSMutableAttributedString *) attributedDescriptionWithIcon: (BOOL)withIcon - withTitle: (BOOL)withTitle - withPassName: (BOOL)withPassName - withFormatInfo: (BOOL)withFormatInfo - withDestination: (BOOL)withDestination - withPictureInfo: (BOOL)withPictureInfo - withVideoInfo: (BOOL)withVideoInfo - withx264Info: (BOOL)withx264Info - withAudioInfo: (BOOL)withAudioInfo - withSubtitleInfo: (BOOL)withSubtitleInfo; - -// Attributes used by attributedDescriptionWithIcon::::::::: -+ (NSMutableParagraphStyle *) descriptionParagraphStyle; -+ (NSDictionary *) descriptionDetailAttribute; -+ (NSDictionary *) descriptionDetailBoldAttribute; -+ (NSDictionary *) descriptionTitleAttribute; -+ (NSDictionary *) descriptionShortHeightAttribute; +- (BOOL) isDragging; @end -//------------------------------------------------------------------------------------ -// HBJobGroup is what's referred to in the UI as an 'encode'. A job group contains -// multiple HBJobs, one for each 'pass' of the encode. Whereas libhb keeps a simple -// list of jobs in it's queue, the queue controller presents them to the user as a -// series of encodes and passes (HBJObGroups and HBJobs). -//------------------------------------------------------------------------------------ - -@interface HBJobGroup : NSObject -{ - NSMutableArray *fJobs; // array of HBJob - NSMutableAttributedString *fDescription; - BOOL fNeedsDescription; - CGFloat fLastDescriptionHeight; - CGFloat fLastDescriptionWidth; - HBQueueJobGroupStatus fStatus; - NSString *fPresetName; -} - -// Creating a job group -+ (HBJobGroup *) jobGroup; - -// Adding jobs -- (void) addJob: (HBJob *)aJob; - -// Querying a job group -- (unsigned int) count; -- (HBJob *) jobAtIndex: (unsigned)index; -- (unsigned int) indexOfJob: (HBJob *)aJob; -- (NSMutableArray *) fJobs; -- (void) setStatus: (HBQueueJobGroupStatus)status; -- (HBQueueJobGroupStatus) status; -- (void) setPresetName: (NSString *)name; -- (NSString *) presetName; -- (NSString *) destinationPath; -- (NSString *) name; - -// Creating a description -- (void) setNeedsDescription: (BOOL)flag; -- (NSMutableAttributedString *) attributedDescription; -- (CGFloat) heightOfDescriptionForWidth:(CGFloat)width; -- (CGFloat) lastDescriptionHeight; -@end -//------------------------------------------------------------------------------------ @interface HBQueueController : NSWindowController { - hb_handle_t *fHandle; // reference to libhb + hb_handle_t *fQueueEncodeLibhb; // reference to libhb HBController *fHBController; // reference to HBController - NSMutableArray *fJobGroups; // libhb's job list organized in a hierarchy of HBJobGroup and HBJob - HBJobGroup *fCurrentJobGroup; // the HJobGroup currently being processed by libhb - HBJob *fCurrentJob; // the HJob (pass) currently being processed by libhb - int fCurrentJobID; // this is how we track when hbib has started processing a different job. This is the job's sequence_id. - - unsigned int fPendingCount; // Number of various kinds of job groups in fJobGroups. - unsigned int fCompletedCount; // Don't access these directly as they may not always be up-to-date. - unsigned int fCanceledCount; // Use the accessor functions instead. - unsigned int fWorkingCount; + NSMutableArray *fJobGroups; // mirror image of the queue array from controller.mm + + int fEncodingQueueItem; // corresponds to the index of fJobGroups encoding item + int fPendingCount; // Number of various kinds of job groups in fJobGroups. + int fCompletedCount; + int fCanceledCount; + int fWorkingCount; BOOL fJobGroupCountsNeedUpdating; BOOL fCurrentJobPaneShown; // NO when fCurrentJobPane has been shifted out of view (see showCurrentJobPane) @@ -250,6 +98,7 @@ BOOL fIsDragging; IBOutlet NSView *fQueuePane; IBOutlet HBQueueOutlineView *fOutlineView; IBOutlet NSTextField *fQueueCountField; + NSArray *fDraggedNodes; #if HB_OUTLINE_METRIC_CONTROLS IBOutlet NSSlider *fIndentation; // debug IBOutlet NSSlider *fSpacing; // debug @@ -259,36 +108,44 @@ BOOL fIsDragging; - (void)setHandle: (hb_handle_t *)handle; - (void)setHBController: (HBController *)controller; -- (void)libhbStateChanged: (hb_state_t)state; -- (void)libhbWillStop; -// Adding items to the queue -- (void) addJobGroup: (HBJobGroup *) aJobGroup; +- (void)setupToolbar; + +- (void)setQueueArray: (NSMutableArray *)QueueFileArray; +- (id)outlineView:(NSOutlineView *)fOutlineView child:(NSInteger)index ofItem:(id)item; + +- (BOOL)outlineView:(NSOutlineView *)fOutlineView isItemExpandable:(id)item; + +- (BOOL)outlineView:(NSOutlineView *)fOutlineView shouldExpandItem:(id)item; + +- (NSInteger)outlineView:(NSOutlineView *)fOutlineView numberOfChildrenOfItem:(id)item; -// Getting the currently processing job group -- (HBJobGroup *) currentJobGroup; -- (HBJob *) currentJob; +- (id)outlineView:(NSOutlineView *)fOutlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item; -// Getting job groups -- (HBJobGroup *) pendingJobGroupWithDestinationPath: (NSString *)path; +- (void)outlineView:(NSOutlineView *)fOutlineView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item; + +- (void)moveObjectsInQueueArray:(NSMutableArray *)array fromIndexes:(NSIndexSet *)indexSet toIndex:(unsigned)insertIndex; + +/* Animate the icon for the current encode */ +- (void) animateWorkingEncodeIconInQueue; +- (void) startAnimatingCurrentWorkingEncodeInQueue; +- (void) stopAnimatingCurrentJobGroupInQueue; -// Getting queue statistics -- (unsigned int) pendingCount; -- (unsigned int) completedCount; -- (unsigned int) canceledCount; -- (unsigned int) workingCount; - (IBAction)showQueueWindow: (id)sender; -- (IBAction)removeSelectedJobGroups: (id)sender; -- (IBAction)revealSelectedJobGroups: (id)sender; -- (IBAction)cancelCurrentJob: (id)sender; -- (IBAction)toggleStartCancel: (id)sender; -- (IBAction)togglePauseResume: (id)sender; + + +/* control encodes in the window */ +- (IBAction)removeSelectedQueueItem: (id)sender; +- (IBAction)revealSelectedQueueItem: (id)sender; #if HB_OUTLINE_METRIC_CONTROLS - (IBAction)imageSpacingChanged: (id)sender; - (IBAction)indentChanged: (id)sender; #endif -@end + + + +@end |