91 lines
3.4 KiB
Swift
91 lines
3.4 KiB
Swift
//
|
|
// MenuController.swift
|
|
// Tusker
|
|
//
|
|
// Created by Shadowfacts on 11/14/20.
|
|
// Copyright © 2020 Shadowfacts. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
@MainActor
|
|
struct MenuController {
|
|
|
|
static let composeCommand: UIKeyCommand = {
|
|
return UIKeyCommand(title: "Compose", action: #selector(MainSplitViewController.handleComposeKeyCommand), input: "n", modifierFlags: .command)
|
|
}()
|
|
|
|
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 {
|
|
return UIKeyCommand(
|
|
title: item.title,
|
|
image: UIImage(systemName: item.imageName!),
|
|
action: action,
|
|
input: command,
|
|
modifierFlags: .command
|
|
)
|
|
}
|
|
|
|
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: .tab(.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)),
|
|
]
|
|
|
|
static let nextSubTabCommand = UIKeyCommand(title: "Next Sub Tab", action: #selector(TabbedPageViewController.selectNextPage), input: "]", modifierFlags: [.command, .shift])
|
|
|
|
static let prevSubTabCommand = UIKeyCommand(title: "Previous Sub Tab", action: #selector(TabbedPageViewController.selectPrevPage), input: "[", modifierFlags: [.command, .shift])
|
|
|
|
static func buildMainMenu(builder: UIMenuBuilder) {
|
|
builder.replace(menu: .file, with: buildFileMenu(builder: builder))
|
|
builder.insertChild(buildSubTabMenu(), atStartOfMenu: .view)
|
|
builder.insertChild(buildSidebarShortcuts(), atStartOfMenu: .view)
|
|
}
|
|
|
|
private static func buildFileMenu(builder: UIMenuBuilder) -> UIMenu {
|
|
var children: [UIMenuElement] = [
|
|
composeCommand,
|
|
refreshCommand(discoverabilityTitle: nil),
|
|
]
|
|
if let close = builder.menu(for: .close) {
|
|
children.append(close)
|
|
}
|
|
return UIMenu(
|
|
title: "File",
|
|
image: nil,
|
|
identifier: nil,
|
|
options: [],
|
|
children: children
|
|
)
|
|
}
|
|
|
|
private static func buildSubTabMenu() -> UIMenu {
|
|
return UIMenu(
|
|
title: "",
|
|
image: nil,
|
|
identifier: nil,
|
|
options: .displayInline,
|
|
children: [
|
|
prevSubTabCommand,
|
|
nextSubTabCommand,
|
|
]
|
|
)
|
|
}
|
|
|
|
private static func buildSidebarShortcuts() -> UIMenu {
|
|
return UIMenu(
|
|
title: "",
|
|
image: nil,
|
|
identifier: nil,
|
|
options: .displayInline,
|
|
children: sidebarItemKeyCommands
|
|
)
|
|
}
|
|
|
|
}
|