Skip to content

Commit

Permalink
🎨 replace NSMenu helper function with extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
leonardodino committed Mar 31, 2022
1 parent 21b383a commit 71ec73f
Showing 1 changed file with 19 additions and 21 deletions.
40 changes: 19 additions & 21 deletions BeezyLight/StatusItem.swift
Original file line number Diff line number Diff line change
@@ -1,15 +1,5 @@
import Cocoa

fileprivate func createMenu(_ itemCreators: [(_ menuItem: NSMenuItem) -> Void]) -> NSMenu {
let menu = NSMenu()
itemCreators.forEach { createItem in
let item = NSMenuItem()
createItem(item)
menu.addItem(item)
}
return menu
}

class StatusItem {
enum StateIcon {
case idle
Expand All @@ -28,20 +18,28 @@ class StatusItem {
private let instance = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength)

init() {
instance.menu = createMenu([{
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") ?? ""
$0.title = "About \(appName)"
$0.action = #selector(AboutWindow.show)
$0.target = AboutWindow.shared
}, {
$0.title = "Quit"
$0.keyEquivalent = "q"
$0.action = #selector(NSApp.terminate)
$0.target = NSApp
}])
let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") ?? ""
instance.menu = NSMenu([
NSMenuItem("About \(appName)", action: #selector(AboutWindow.show), target: AboutWindow.shared),
NSMenuItem("Quit", action: #selector(NSApp.terminate), keyEquivalent: "q"),
])
}

func setIcon(_ icon: StateIcon) {
instance.button?.image = icon.image
}
}

fileprivate extension NSMenuItem {
convenience init(_ title: String, action: Selector, target: AnyObject? = nil, keyEquivalent: String = "") {
self.init(title: title, action: action, keyEquivalent: keyEquivalent)
self.target = target
}
}

fileprivate extension NSMenu {
convenience init(_ items: [NSMenuItem]) {
self.init()
items.forEach { self.addItem($0) }
}
}

0 comments on commit 71ec73f

Please sign in to comment.