/* HBQueueDetailsViewController.m $
This file is part of the HandBrake source code.
Homepage: .
It may be used under the terms of the GNU General Public License. */
#import "HBQueueInfoViewController.h"
#import "HBQueueJobItem.h"
static void *HBQueueInfoViewControllerContext = &HBQueueInfoViewControllerContext;
@interface HBQueueInfoViewController ()
@property (nonatomic, weak) IBOutlet NSView *statisticsHeader;
@property (nonatomic, weak) IBOutlet NSTextField *statisticsLabel;
@property (nonatomic, weak) IBOutlet NSTextField *summaryLabel;
@property (nonatomic, weak) IBOutlet NSScrollView *scrollView;
@property (nonatomic, weak) IBOutlet NSBox *divider;
@property (nonatomic, weak) id delegate;
@property (nonatomic) BOOL canReset;
@property (nonatomic) BOOL canEdit;
@end
@implementation HBQueueInfoViewController
- (instancetype)initWithDelegate:(id)delegate
{
self = [super init];
if (self)
{
_delegate = delegate;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self updateUI];
[self addObserver:self forKeyPath:@"item.state" options:0 context:HBQueueInfoViewControllerContext];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if (context == HBQueueInfoViewControllerContext)
{
[self updateUI];
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
- (void)updateUI
{
[self updateLabels];
[self updateReset];
dispatch_async(dispatch_get_main_queue(), ^{
[self updateDivider];
});
}
- (void)updateReset
{
self.canReset = self.item && (self.item.state != HBQueueItemStateWorking &&
self.item.state != HBQueueItemStateRescanning && self.item.state != HBQueueItemStateReady);
self.canEdit = self.item && self.item.hasFileRepresentation;
}
- (void)updateLabels
{
if (self.item)
{
if ([self.item isKindOfClass:[HBQueueJobItem class]])
{
HBQueueJobItem *jobItem = (HBQueueJobItem *)self.item;
self.statisticsLabel.hidden = jobItem.startedDate == nil;
self.statisticsHeader.hidden = jobItem.startedDate == nil;
self.statisticsLabel.attributedStringValue = jobItem.attributedStatistics;
}
else
{
self.statisticsLabel.hidden = YES;
self.statisticsHeader.hidden = YES;
}
self.summaryLabel.hidden = NO;
self.summaryLabel.attributedStringValue = self.item.attributedDescription;
dispatch_async(dispatch_get_main_queue(), ^{
[self.scrollView flashScrollers];
});
}
else
{
self.statisticsHeader.hidden = YES;
self.statisticsLabel.hidden = YES;
self.summaryLabel.hidden = YES;
}
}
- (void)updateDivider
{
self.divider.hidden = self.scrollView.frame.size.height > self.scrollView.contentView.documentView.frame.size.height;
}
- (void)viewDidLayout
{
[super viewDidLayout];
[self updateDivider];
}
- (void)setItem:(id)item
{
_item = item;
}
- (IBAction)editItem:(id)sender
{
[self.delegate detailsViewEditItem:self.item];
}
- (IBAction)resetItem:(id)sender
{
[self.delegate detailsViewResetItem:self.item];
}
@end