Tusker/Tusker/MenuController.swift

91 lines
3.4 KiB
Swift
Raw Permalink 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
@MainActor
2020-11-14 16:10:20 +00:00
struct MenuController {
2020-11-15 03:28:52 +00:00
static let composeCommand: UIKeyCommand = {
return UIKeyCommand(title: "Compose", action: #selector(MainSplitViewController.handleComposeKeyCommand), 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)
}
static func sidebarCommand(item: MainSidebarViewController.Item, command: String, action: Selector) -> UIKeyCommand {
2020-11-14 17:15:49 +00:00
return UIKeyCommand(
title: item.title,
image: UIImage(systemName: item.imageName!),
action: action,
2020-11-14 17:15:49 +00:00
input: command,
modifierFlags: .command
2020-11-14 17:15:49 +00:00
)
}
2020-11-15 03:28:52 +00:00
static let sidebarItemKeyCommands: [UIKeyCommand] = [
sidebarCommand(item: .tab(.timelines), command: "1", action: #selector(MainSplitViewController.handleSidebarCommandTimelines)),
sidebarCommand(item: .tab(.notifications), command: "2", action: #selector(MainSplitViewController.handleSidebarCommandNotifications)),
sidebarCommand(item: .explore, command: "3", action: #selector(MainSplitViewController.handleSidebarCommandExplore)),
sidebarCommand(item: .bookmarks, command: "4", action: #selector(MainSplitViewController.handleSidebarCommandBookmarks)),
sidebarCommand(item: .tab(.myProfile), command: "5", action: #selector(MainSplitViewController.handleSidebarCommandMyProfile)),
2020-11-15 03:28:52 +00:00
]
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(builder: builder))
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
}
private static func buildFileMenu(builder: UIMenuBuilder) -> UIMenu {
var children: [UIMenuElement] = [
composeCommand,
refreshCommand(discoverabilityTitle: nil),
]
if let close = builder.menu(for: .close) {
children.append(close)
}
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: [],
children: children
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
)
}
}