Tusker/Tusker/MenuController.swift

98 lines
3.3 KiB
Swift
Raw Normal View History

2020-11-14 16:10:20 +00:00
//
// MenuController.swift
// Tusker
//
// Created by Shadowfacts on 11/14/20.
// Copyright © 2020 Shadowfacts. All rights reserved.
//
import UIKit
struct MenuController {
2020-11-15 03:28:52 +00:00
static let composeCommand: UIKeyCommand = {
2021-02-06 18:47:45 +00:00
return UIKeyCommand(title: "Compose", action: #selector(MainSplitViewController.presentCompose), input: "n", modifierFlags: .command)
2020-11-15 03:28:52 +00:00
}()
2020-11-14 16:55:19 +00:00
2020-11-14 16:10:20 +00:00
static func refreshCommand(discoverabilityTitle: String?) -> UIKeyCommand {
return UIKeyCommand(title: "Refresh", action: #selector(RefreshableViewController.refresh), input: "r", modifierFlags: .command, discoverabilityTitle: discoverabilityTitle)
}
2020-11-14 17:15:49 +00:00
static func sidebarCommand(item: MainSidebarViewController.Item, command: String) -> UIKeyCommand {
let data: Any
if case let .tab(tab) = item {
data = tab.rawValue
} else if case .explore = item {
2020-11-14 17:15:49 +00:00
data = "search"
} else if case .bookmarks = item {
data = "bookmarks"
} else {
fatalError()
}
return UIKeyCommand(
title: item.title,
image: UIImage(systemName: item.imageName!),
action: #selector(MainSplitViewController.handleSidebarItemCommand(_:)),
input: command,
modifierFlags: .command,
propertyList: data
)
}
2020-11-15 03:28:52 +00:00
static let sidebarItemKeyCommands: [UIKeyCommand] = [
sidebarCommand(item: .tab(.timelines), command: "1"),
sidebarCommand(item: .tab(.notifications), command: "2"),
sidebarCommand(item: .explore, command: "3"),
2020-11-15 03:28:52 +00:00
sidebarCommand(item: .bookmarks, command: "4"),
sidebarCommand(item: .tab(.myProfile), command: "5"),
]
2020-11-14 17:15:49 +00:00
2020-11-15 03:28:52 +00:00
static let nextSubTabCommand = UIKeyCommand(title: "Next Sub Tab", action: #selector(TabbedPageViewController.selectNextPage), input: "]", modifierFlags: [.command, .shift])
2020-11-15 03:26:02 +00:00
2020-11-15 03:28:52 +00:00
static let prevSubTabCommand = UIKeyCommand(title: "Previous Sub Tab", action: #selector(TabbedPageViewController.selectPrevPage), input: "[", modifierFlags: [.command, .shift])
2020-11-15 03:26:02 +00:00
2020-11-14 16:10:20 +00:00
static func buildMainMenu(builder: UIMenuBuilder) {
builder.replace(menu: .file, with: buildFileMenu())
2020-11-15 03:26:02 +00:00
builder.insertChild(buildSubTabMenu(), atStartOfMenu: .view)
builder.insertChild(buildSidebarShortcuts(), atStartOfMenu: .view)
2020-11-14 16:10:20 +00:00
}
2020-11-14 16:55:19 +00:00
private static func buildFileMenu() -> UIMenu {
2020-11-14 16:10:20 +00:00
return UIMenu(
title: "File",
2020-11-14 16:10:20 +00:00
image: nil,
identifier: nil,
options: [],
2020-11-14 16:10:20 +00:00
children: [
2020-11-15 03:28:52 +00:00
composeCommand,
2020-11-14 16:10:20 +00:00
refreshCommand(discoverabilityTitle: nil),
UIKeyCommand(title: "Close", action: #selector(AppDelegate.closeWindow), input: "w", modifierFlags: .command),
2020-11-14 16:10:20 +00:00
]
)
}
2020-11-15 03:26:02 +00:00
private static func buildSubTabMenu() -> UIMenu {
return UIMenu(
title: "",
image: nil,
identifier: nil,
options: .displayInline,
children: [
2020-11-15 03:28:52 +00:00
prevSubTabCommand,
nextSubTabCommand,
2020-11-15 03:26:02 +00:00
]
)
}
private static func buildSidebarShortcuts() -> UIMenu {
2020-11-14 17:15:49 +00:00
return UIMenu(
title: "",
image: nil,
identifier: nil,
options: .displayInline,
2021-02-06 18:47:45 +00:00
children: sidebarItemKeyCommands
2020-11-14 17:15:49 +00:00
)
}
}