import AppKit extension StatusItemController { func makePersistentRefreshItem(title: String, menu: NSMenu, width: CGFloat) -> NSMenuItem { let shortcutText = self.shortcut(for: .refresh).map(Self.shortcutDisplayLabel) let metrics = PersistentRefreshRowMetrics.defaults let view = PersistentRefreshMenuView( title: title, systemImageName: MenuDescriptor.MenuAction.refresh.systemImageName, shortcutText: shortcutText, onClick: { [weak self, weak menu] in guard let self, let menu else { return } self.performPersistentRefreshAction(in: ObjectIdentifier(menu)) }) let enabled = !self.isRefreshActionInFlight(for: menu) view.setEnabled(enabled) view.applySize(width: width, height: metrics.rowHeight) let item = NSMenuItem() item.title = title item.representedObject = Self.persistentRefreshMenuItemID item.view = view item.isEnabled = enabled item.keyEquivalentModifierMask = [] item.toolTip = title return item } private static func shortcutDisplayLabel( for shortcut: (key: String, modifiers: NSEvent.ModifierFlags)) -> String { var label = "" if shortcut.modifiers.contains(.control) { label += "^" } if shortcut.modifiers.contains(.option) { label += "⌥" } if shortcut.modifiers.contains(.shift) { label += "⇧" } if shortcut.modifiers.contains(.command) { label += "⌘" } if !label.isEmpty { label += " " } return label + shortcut.key.uppercased() }}
import AppKit
extension StatusItemController {
func makePersistentRefreshItem(title: String, menu: NSMenu, width: CGFloat) -> NSMenuItem {
let shortcutText = self.shortcut(for: .refresh).map(Self.shortcutDisplayLabel)
let metrics = PersistentRefreshRowMetrics.defaults
let view = PersistentRefreshMenuView(
title: title,
systemImageName: MenuDescriptor.MenuAction.refresh.systemImageName,
shortcutText: shortcutText,
onClick: { [weak self, weak menu] in
guard let self, let menu else { return }
self.performPersistentRefreshAction(in: ObjectIdentifier(menu))
})
let enabled = !self.isRefreshActionInFlight(for: menu)
view.setEnabled(enabled)
view.applySize(width: width, height: metrics.rowHeight)
let item = NSMenuItem()
item.title = title
item.representedObject = Self.persistentRefreshMenuItemID
item.view = view
item.isEnabled = enabled
item.keyEquivalentModifierMask = []
item.toolTip = title
return item
}
private static func shortcutDisplayLabel(
for shortcut: (key: String, modifiers: NSEvent.ModifierFlags)) -> String
{
var label = ""
if shortcut.modifiers.contains(.control) { label += "^" }
if shortcut.modifiers.contains(.option) { label += "⌥" }
if shortcut.modifiers.contains(.shift) { label += "⇧" }
if shortcut.modifiers.contains(.command) { label += "⌘" }
if !label.isEmpty { label += " " }
return label + shortcut.key.uppercased()
}
}