- 菜单栏可每项独立(点击弹出该项窄详情)或合并为一个(点击打开主窗口),详情区块可在设置中勾选 - 网络详情:镜像流量历史、ICMP 连接探测格子、接口与 Wi-Fi、本地与公网 IPv4 / IPv6、SVG 国旗归属地与 ASN、各进程流量 - DNS:刷新缓存,一键切换自动 / Cloudflare / Google / 腾讯 / 阿里云或手动填写;辅助工具协议升至 3,服务名与地址二次校验 - 主窗口:侧边栏切换仪表盘、各指标详情与工具页,宽高可调,卡片按比例伸缩 - 统一外观:白底蓝 / 黑底蓝,窗口、设置与弹窗共用底色,去掉玻璃效果 - 新增网络解析、DNS 校验与国旗代码校验的单元测试;更新 README、架构文档与隐私说明
42 lines
1.9 KiB
Swift
42 lines
1.9 KiB
Swift
import AppKit
|
|
|
|
/// 应用菜单。仅菜单栏运行时不显示,但仍负责 ⌘C / ⌘V / ⌘W 等快捷键
|
|
@MainActor
|
|
enum MainMenu {
|
|
static func make() -> NSMenu {
|
|
let main = NSMenu()
|
|
|
|
let app = NSMenu(title: "OpenStats")
|
|
app.addItem(withTitle: "关于 OpenStats", action: #selector(NSApplication.orderFrontStandardAboutPanel(_:)), keyEquivalent: "")
|
|
app.addItem(.separator())
|
|
app.addItem(withTitle: "隐藏 OpenStats", action: #selector(NSApplication.hide(_:)), keyEquivalent: "h")
|
|
app.addItem(.separator())
|
|
app.addItem(withTitle: "退出 OpenStats", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q")
|
|
add(app, to: main)
|
|
|
|
let edit = NSMenu(title: "编辑")
|
|
edit.addItem(withTitle: "撤销", action: Selector(("undo:")), keyEquivalent: "z")
|
|
edit.addItem(withTitle: "重做", action: Selector(("redo:")), keyEquivalent: "Z")
|
|
edit.addItem(.separator())
|
|
edit.addItem(withTitle: "剪切", action: #selector(NSText.cut(_:)), keyEquivalent: "x")
|
|
edit.addItem(withTitle: "拷贝", action: #selector(NSText.copy(_:)), keyEquivalent: "c")
|
|
edit.addItem(withTitle: "粘贴", action: #selector(NSText.paste(_:)), keyEquivalent: "v")
|
|
edit.addItem(withTitle: "全选", action: #selector(NSText.selectAll(_:)), keyEquivalent: "a")
|
|
add(edit, to: main)
|
|
|
|
let window = NSMenu(title: "窗口")
|
|
window.addItem(withTitle: "最小化", action: #selector(NSWindow.performMiniaturize(_:)), keyEquivalent: "m")
|
|
window.addItem(withTitle: "关闭", action: #selector(NSWindow.performClose(_:)), keyEquivalent: "w")
|
|
add(window, to: main)
|
|
NSApp.windowsMenu = window
|
|
|
|
return main
|
|
}
|
|
|
|
private static func add(_ submenu: NSMenu, to main: NSMenu) {
|
|
let item = NSMenuItem(title: submenu.title, action: nil, keyEquivalent: "")
|
|
item.submenu = submenu
|
|
main.addItem(item)
|
|
}
|
|
}
|