2020-11-14 16:10:20 +00:00
//
// M e n u C o n t r o l l e r . s w i f t
// T u s k e r
//
// C r e a t e d b y S h a d o w f a c t s o n 1 1 / 1 4 / 2 0 .
// C o p y r i g h t © 2 0 2 0 S h a d o w f a c t s . A l l r i g h t s r e s e r v e d .
//
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
2022-07-01 02:26:28 +00:00
} 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 " ) ,
2022-07-01 02:26:28 +00:00
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 ) {
2022-05-15 14:34:24 +00:00
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 (
2022-05-15 14:34:24 +00:00
title : " File " ,
2020-11-14 16:10:20 +00:00
image : nil ,
identifier : nil ,
2022-05-15 14:34:24 +00:00
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 ) ,
2022-05-15 14:34:24 +00:00
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
)
}
}