Adaptations for macOS version (adding new number flow)
This commit is contained in:
parent
4496149fb7
commit
98e0ed9495
@ -192,5 +192,26 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
||||
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
||||
}
|
||||
|
||||
// MARK: - Global menu
|
||||
|
||||
override func buildMenu(with builder: UIMenuBuilder) {
|
||||
super.buildMenu(with: builder)
|
||||
|
||||
let command = UIKeyCommand(title: NSLocalizedString("Add new number", comment: ""),
|
||||
action: #selector(openAddNumberPanel),
|
||||
input: "n",
|
||||
modifierFlags: .command)
|
||||
let menu = UIMenu(options: .displayInline, children: [command])
|
||||
builder.insertChild(menu, atEndOfMenu: .file)
|
||||
}
|
||||
|
||||
@objc func openAddNumberPanel() {
|
||||
guard let sceneDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate else {
|
||||
return
|
||||
}
|
||||
|
||||
sceneDelegate.showAddNumberPanel()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -59,6 +59,8 @@ class NewNumberController: UIViewController {
|
||||
|
||||
view.addSubview(mainStackView)
|
||||
mainStackView.pin(to: view, insets: .all(16))
|
||||
|
||||
addKeyCommand(UIKeyCommand(input: "v", modifierFlags: .command, action: #selector(pasteText)))
|
||||
}
|
||||
|
||||
func check() {
|
||||
@ -81,3 +83,57 @@ extension NewNumberController: PNKeyboardDelegate {
|
||||
check()
|
||||
}
|
||||
}
|
||||
|
||||
#if targetEnvironment(macCatalyst)
|
||||
|
||||
extension NewNumberController {
|
||||
|
||||
override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
|
||||
|
||||
let ruLetters = Constants.pnLettersMap.keys.map(String.init)
|
||||
let enLetters = Constants.pnLettersMap.values.map(String.init)
|
||||
let numbers = Array((0..<10).map(String.init))
|
||||
|
||||
var didHandleEvent = true
|
||||
|
||||
for press in presses {
|
||||
guard let key = press.key else {
|
||||
continue
|
||||
}
|
||||
|
||||
switch key.keyCode {
|
||||
case .keyboardReturnOrEnter:
|
||||
check()
|
||||
case .keyboardEscape:
|
||||
dismiss(animated: true)
|
||||
case .keyboardDeleteOrBackspace:
|
||||
plateView.deleteBackward()
|
||||
default:
|
||||
let c = key.charactersIgnoringModifiers.uppercased()
|
||||
if ruLetters.contains(c) || numbers.contains(c) {
|
||||
plateView.insertText(c)
|
||||
} else if enLetters.contains(c) {
|
||||
if let ruChar = Constants.pnLettersMap.first(where: { $0.value == c.first })?.key {
|
||||
plateView.insertText(String(ruChar))
|
||||
}
|
||||
} else {
|
||||
didHandleEvent = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if didHandleEvent == false {
|
||||
super.pressesBegan(presses, with: event)
|
||||
}
|
||||
}
|
||||
|
||||
@objc func pasteText() {
|
||||
guard let text = UIPasteboard.general.string else {
|
||||
return
|
||||
}
|
||||
|
||||
plateView.setNumber(text)
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -48,7 +48,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
if let titlebar = windowScene.titlebar {
|
||||
titlebar.toolbar = toolbar
|
||||
if #available(macCatalyst 14.0, *) {
|
||||
titlebar.toolbarStyle = .automatic
|
||||
titlebar.toolbarStyle = .unifiedCompact
|
||||
}
|
||||
}
|
||||
|
||||
@ -180,11 +180,16 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
|
||||
#if targetEnvironment(macCatalyst)
|
||||
|
||||
extension NSToolbarItem.Identifier {
|
||||
|
||||
static let addNumber = NSToolbarItem.Identifier("pro.aliencat.add.number")
|
||||
}
|
||||
|
||||
extension SceneDelegate: NSToolbarDelegate {
|
||||
|
||||
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
|
||||
let identifiers: [NSToolbarItem.Identifier] = [
|
||||
.toggleSidebar
|
||||
.addNumber
|
||||
]
|
||||
return identifiers
|
||||
}
|
||||
@ -192,6 +197,56 @@ extension SceneDelegate: NSToolbarDelegate {
|
||||
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
|
||||
return toolbarDefaultItemIdentifiers(toolbar)
|
||||
}
|
||||
|
||||
func toolbar(_ toolbar: NSToolbar,
|
||||
itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier,
|
||||
willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
|
||||
|
||||
var toolbarItem: NSToolbarItem?
|
||||
|
||||
switch itemIdentifier {
|
||||
case .addNumber:
|
||||
let item = NSToolbarItem(itemIdentifier: itemIdentifier)
|
||||
item.image = UIImage(systemName: "plus")
|
||||
item.label = "Add"
|
||||
item.target = self
|
||||
item.action = #selector(showAddNumberPanel)
|
||||
toolbarItem = item
|
||||
|
||||
default:
|
||||
toolbarItem = nil
|
||||
}
|
||||
|
||||
return toolbarItem
|
||||
}
|
||||
|
||||
@objc func showAddNumberPanel() {
|
||||
let controller = NewNumberController()
|
||||
controller.preferredContentSize = CGSize(width: 400, height: 350)
|
||||
controller.onCheck = { number in
|
||||
controller.dismiss(animated: true) { [weak self] in
|
||||
self?.checkNewNumber(number)
|
||||
}
|
||||
}
|
||||
|
||||
self.window?.rootViewController?.present(controller, animated: true)
|
||||
}
|
||||
|
||||
func checkNewNumber(_ number: String) {
|
||||
guard let split = self.window?.rootViewController as? MainSplitController,
|
||||
let tabvc = split.viewControllers.first as? UITabBarController
|
||||
else {
|
||||
return
|
||||
}
|
||||
|
||||
tabvc.selectedIndex = 0
|
||||
|
||||
if let nav = tabvc.selectedViewController as? UINavigationController,
|
||||
let checkController = nav.viewControllers.first as? CheckController {
|
||||
|
||||
checkController.checkTapped(number: number)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -161,6 +161,12 @@ class PlateView: UIView {
|
||||
print("")
|
||||
return CGSize(width: width, height: height)
|
||||
}
|
||||
|
||||
func setNumber(_ number: String) {
|
||||
self.number?.setNumber(number)
|
||||
layoutSubviews()
|
||||
onChange?()
|
||||
}
|
||||
}
|
||||
|
||||
extension PlateView: UIKeyInput {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user