/
ToolbarItemStyleViewController.swift
57 lines (46 loc) · 1.61 KB
/
ToolbarItemStyleViewController.swift
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
import Cocoa
final class ToolbarItemStyleViewController: NSObject, SettingsStyleController {
let toolbar: NSToolbar
let centerToolbarItems: Bool
let panes: [SettingsPane]
var isKeepingWindowCentered: Bool { centerToolbarItems }
weak var delegate: SettingsStyleControllerDelegate?
init(panes: [SettingsPane], toolbar: NSToolbar, centerToolbarItems: Bool) {
self.panes = panes
self.toolbar = toolbar
self.centerToolbarItems = centerToolbarItems
}
func toolbarItemIdentifiers() -> [NSToolbarItem.Identifier] {
var toolbarItemIdentifiers = [NSToolbarItem.Identifier]()
if centerToolbarItems {
toolbarItemIdentifiers.append(.flexibleSpace)
}
for pane in panes {
toolbarItemIdentifiers.append(pane.toolbarItemIdentifier)
}
if centerToolbarItems {
toolbarItemIdentifiers.append(.flexibleSpace)
}
return toolbarItemIdentifiers
}
func toolbarItem(paneIdentifier: Settings.PaneIdentifier) -> NSToolbarItem? {
guard let pane = (panes.first { $0.paneIdentifier == paneIdentifier }) else {
preconditionFailure()
}
let toolbarItem = NSToolbarItem(itemIdentifier: paneIdentifier.toolbarItemIdentifier)
toolbarItem.label = pane.paneTitle
toolbarItem.image = pane.toolbarItemIcon
toolbarItem.target = self
toolbarItem.action = #selector(toolbarItemSelected)
return toolbarItem
}
@IBAction private func toolbarItemSelected(_ toolbarItem: NSToolbarItem) {
delegate?.activateTab(
paneIdentifier: .init(fromToolbarItemIdentifier: toolbarItem.itemIdentifier),
animated: true
)
}
func selectTab(index: Int) {
toolbar.selectedItemIdentifier = panes[index].toolbarItemIdentifier
}
}