1/* HBQueueDetailsViewController.m $ 2 3 This file is part of the HandBrake source code. 4 Homepage: <http://handbrake.fr/>. 5 It may be used under the terms of the GNU General Public License. */ 6 7#import "HBQueueInfoViewController.h" 8#import "HBQueueJobItem.h" 9 10static void *HBQueueInfoViewControllerContext = &HBQueueInfoViewControllerContext; 11 12@interface HBQueueInfoViewController () 13 14@property (nonatomic, weak) IBOutlet NSView *statisticsHeader; 15@property (nonatomic, weak) IBOutlet NSTextField *statisticsLabel; 16@property (nonatomic, weak) IBOutlet NSTextField *summaryLabel; 17@property (nonatomic, weak) IBOutlet NSScrollView *scrollView; 18@property (nonatomic, weak) IBOutlet NSBox *divider; 19 20@property (nonatomic, weak) id<HBQueueDetailsViewControllerDelegate> delegate; 21 22@property (nonatomic) BOOL canReset; 23@property (nonatomic) BOOL canEdit; 24 25@end 26 27@implementation HBQueueInfoViewController 28 29- (instancetype)initWithDelegate:(id<HBQueueDetailsViewControllerDelegate>)delegate 30{ 31 self = [super init]; 32 if (self) 33 { 34 _delegate = delegate; 35 } 36 return self; 37} 38 39- (void)viewDidLoad 40{ 41 [super viewDidLoad]; 42 [self updateUI]; 43 [self addObserver:self forKeyPath:@"item.state" options:0 context:HBQueueInfoViewControllerContext]; 44} 45 46- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 47{ 48 if (context == HBQueueInfoViewControllerContext) 49 { 50 [self updateUI]; 51 } 52 else 53 { 54 [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 55 } 56} 57 58 59- (void)updateUI 60{ 61 [self updateLabels]; 62 [self updateReset]; 63 dispatch_async(dispatch_get_main_queue(), ^{ 64 [self updateDivider]; 65 }); 66} 67 68- (void)updateReset 69{ 70 self.canReset = self.item && (self.item.state != HBQueueItemStateWorking && 71 self.item.state != HBQueueItemStateRescanning && self.item.state != HBQueueItemStateReady); 72 self.canEdit = self.item && self.item.hasFileRepresentation; 73} 74 75- (void)updateLabels 76{ 77 if (self.item) 78 { 79 if ([self.item isKindOfClass:[HBQueueJobItem class]]) 80 { 81 HBQueueJobItem *jobItem = (HBQueueJobItem *)self.item; 82 self.statisticsLabel.hidden = jobItem.startedDate == nil; 83 self.statisticsHeader.hidden = jobItem.startedDate == nil; 84 85 self.statisticsLabel.attributedStringValue = jobItem.attributedStatistics; 86 } 87 else 88 { 89 self.statisticsLabel.hidden = YES; 90 self.statisticsHeader.hidden = YES; 91 } 92 93 self.summaryLabel.hidden = NO; 94 self.summaryLabel.attributedStringValue = self.item.attributedDescription; 95 96 dispatch_async(dispatch_get_main_queue(), ^{ 97 [self.scrollView flashScrollers]; 98 }); 99 } 100 else 101 { 102 self.statisticsHeader.hidden = YES; 103 self.statisticsLabel.hidden = YES; 104 self.summaryLabel.hidden = YES; 105 } 106} 107 108- (void)updateDivider 109{ 110 self.divider.hidden = self.scrollView.frame.size.height > self.scrollView.contentView.documentView.frame.size.height; 111} 112 113- (void)viewDidLayout 114{ 115 [super viewDidLayout]; 116 [self updateDivider]; 117} 118 119- (void)setItem:(id<HBQueueItem>)item 120{ 121 _item = item; 122} 123 124- (IBAction)editItem:(id)sender 125{ 126 [self.delegate detailsViewEditItem:self.item]; 127} 128 129- (IBAction)resetItem:(id)sender 130{ 131 [self.delegate detailsViewResetItem:self.item]; 132} 133 134@end 135