import AppKit extension StatusItemController { func addUsageHistoryClusterIfNeeded(to menu: NSMenu, context: MenuCardContext) { if self.addUsageHistoryMenuItemIfNeeded( to: menu, provider: context.currentProvider, width: context.menuWidth) { self.moveCostAndStorageRowsUnderUsageHistory(in: menu) menu.addItem(.separator()) } } func moveCostAndStorageRowsUnderUsageHistory(in menu: NSMenu) { guard let usageHistoryItem = menu.items.first(where: { ($0.representedObject as? String) == "usageHistorySubmenu" }) else { return } let rowIDs = ["menuCardCost", "menuCardStorage"] let rowsToMove = rowIDs.compactMap { rowID in menu.items.first { ($0.representedObject as? String) == rowID } } guard !rowsToMove.isEmpty else { return } for item in rowsToMove { menu.removeItem(item) } guard let usageHistoryIndex = menu.items.firstIndex(where: { $0 === usageHistoryItem }) else { return } for (offset, item) in rowsToMove.enumerated() { menu.insertItem(item, at: min(usageHistoryIndex + 1 + offset, menu.items.count)) } self.collapseAdjacentSeparators(in: menu) } private func collapseAdjacentSeparators(in menu: NSMenu) { var index = 1 while index < menu.items.count { if menu.items[index - 1].isSeparatorItem, menu.items[index].isSeparatorItem { menu.removeItem(at: index) } else { index += 1 } } }}
import AppKit
extension StatusItemController {
func addUsageHistoryClusterIfNeeded(to menu: NSMenu, context: MenuCardContext) {
if self.addUsageHistoryMenuItemIfNeeded(
to: menu,
provider: context.currentProvider,
width: context.menuWidth)
{
self.moveCostAndStorageRowsUnderUsageHistory(in: menu)
menu.addItem(.separator())
}
}
func moveCostAndStorageRowsUnderUsageHistory(in menu: NSMenu) {
guard let usageHistoryItem = menu.items.first(where: {
($0.representedObject as? String) == "usageHistorySubmenu"
}) else { return }
let rowIDs = ["menuCardCost", "menuCardStorage"]
let rowsToMove = rowIDs.compactMap { rowID in
menu.items.first { ($0.representedObject as? String) == rowID }
}
guard !rowsToMove.isEmpty else { return }
for item in rowsToMove {
menu.removeItem(item)
}
guard let usageHistoryIndex = menu.items.firstIndex(where: { $0 === usageHistoryItem }) else { return }
for (offset, item) in rowsToMove.enumerated() {
menu.insertItem(item, at: min(usageHistoryIndex + 1 + offset, menu.items.count))
}
self.collapseAdjacentSeparators(in: menu)
}
private func collapseAdjacentSeparators(in menu: NSMenu) {
var index = 1
while index < menu.items.count {
if menu.items[index - 1].isSeparatorItem, menu.items[index].isSeparatorItem {
menu.removeItem(at: index)
} else {
index += 1
}
}
}
}