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