OSDN Git Service

Equatableを自動実装させるようにした
[kcd/KCD.git] / KCD / AncherageRepairTimerViewController.swift
1 //
2 //  AncherageRepairTimerViewController.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2016/12/29.
6 //  Copyright © 2016年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class AncherageRepairTimerViewController: NSViewController {
12     
13     static let regularHeight: CGFloat = 76
14     static let smallHeight: CGFloat = regularHeight - 32
15     
16     private let anchorageRepairManager = AnchorageRepairManager.default
17     
18     @IBOutlet private var screenshotButton: NSButton!
19     
20     @objc dynamic var repairTime: NSNumber?
21     
22     override var nibName: NSNib.Name {
23         
24         return .nibName(instanceOf: self)
25     }
26     
27     var controlSize: NSControl.ControlSize = .regular {
28         
29         willSet {
30             
31             if controlSize == newValue {
32                 
33                 return
34             }
35             
36             var frame = view.frame
37             frame.size.height = (newValue == .regular ? type(of: self).regularHeight : type(of: self).smallHeight)
38             view.frame = frame
39             
40             var buttonFrame = screenshotButton.frame
41             buttonFrame.size.width += newValue == .regular ? 32.0 : -32.0
42             screenshotButton.frame = buttonFrame
43             
44             refleshTrackingArea()
45         }
46     }
47     private var trackingArea: NSTrackingArea?
48     
49     override func viewDidLoad() {
50         
51         super.viewDidLoad()
52         
53         AppDelegate.shared.addCounterUpdate { [weak self] in
54             
55             guard let `self` = self else {
56                 
57                 return
58             }
59             
60             self.repairTime = self.calcRepairTime()
61         }
62     }
63     
64     override func mouseEntered(with event: NSEvent) {
65         
66         screenshotButton.image = NSImage(named: NSImage.Name("Camera"))
67     }
68     
69     override func mouseExited(with event: NSEvent) {
70         
71         screenshotButton.image = NSImage(named: NSImage.Name("CameraDisabled"))
72     }
73     
74     private func refleshTrackingArea() {
75         
76         view.trackingAreas.forEach(view.removeTrackingArea)
77         trackingArea = NSTrackingArea(rect: screenshotButton.frame,
78                                       options: [.mouseEnteredAndExited, .activeInActiveApp],
79                                       owner: self,
80                                       userInfo: nil)
81         if let trackingArea = trackingArea {
82             
83             view.addTrackingArea(trackingArea)
84         }
85     }
86     
87     private func calcRepairTime() -> NSNumber? {
88         
89         let complete = anchorageRepairManager.repairTime.timeIntervalSince1970
90         let now = Date(timeIntervalSinceNow: 0.0).timeIntervalSince1970
91         let diff = complete - now
92         
93         return NSNumber(value: diff + 20.0 * 60)
94     }
95 }