aboutsummaryrefslogtreecommitdiffstats
path: root/WireGuard/WireGuard/UI/macOS/View/ButtonRow.swift
blob: 4d15f5eea7eaab3ff136cc7d641e57a2d7ec9932 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// SPDX-License-Identifier: MIT
// Copyright © 2018-2019 WireGuard LLC. All Rights Reserved.

import Cocoa

class ButtonRow: NSView {
    let button: NSButton = {
        let button = NSButton()
        button.title = ""
        button.setButtonType(.momentaryPushIn)
        button.bezelStyle = .rounded
        return button
    }()

    var buttonTitle: String {
        get { return button.title }
        set(value) { button.title = value }
    }

    var isButtonEnabled: Bool {
        get { return button.isEnabled }
        set(value) { button.isEnabled = value }
    }

    var buttonToolTip: String {
        get { return button.toolTip ?? "" }
        set(value) { button.toolTip = value }
    }

    var onButtonClicked: (() -> Void)?
    var observationToken: AnyObject?

    override var intrinsicContentSize: NSSize {
        return NSSize(width: NSView.noIntrinsicMetric, height: button.intrinsicContentSize.height)
    }

    init() {
        super.init(frame: CGRect.zero)

        button.target = self
        button.action = #selector(buttonClicked)

        addSubview(button)
        button.translatesAutoresizingMaskIntoConstraints = false

        NSLayoutConstraint.activate([
            button.centerYAnchor.constraint(equalTo: self.centerYAnchor),
            button.leadingAnchor.constraint(equalTo: self.leadingAnchor, constant: 155),
            button.widthAnchor.constraint(greaterThanOrEqualToConstant: 100)
        ])
    }

    required init?(coder decoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    @objc func buttonClicked() {
        onButtonClicked?()
    }

    override func prepareForReuse() {
        buttonTitle = ""
        buttonToolTip = ""
        onButtonClicked = nil
        observationToken = nil
    }
}