Adaptations for macOS version (adding new number flow)

This commit is contained in:
Selim Mustafaev 2023-02-19 23:10:28 +03:00
parent 4496149fb7
commit 98e0ed9495
4 changed files with 140 additions and 2 deletions

View File

@ -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. // 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. // 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()
}
} }

View File

@ -59,6 +59,8 @@ class NewNumberController: UIViewController {
view.addSubview(mainStackView) view.addSubview(mainStackView)
mainStackView.pin(to: view, insets: .all(16)) mainStackView.pin(to: view, insets: .all(16))
addKeyCommand(UIKeyCommand(input: "v", modifierFlags: .command, action: #selector(pasteText)))
} }
func check() { func check() {
@ -81,3 +83,57 @@ extension NewNumberController: PNKeyboardDelegate {
check() 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

View File

@ -48,7 +48,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
if let titlebar = windowScene.titlebar { if let titlebar = windowScene.titlebar {
titlebar.toolbar = toolbar titlebar.toolbar = toolbar
if #available(macCatalyst 14.0, *) { if #available(macCatalyst 14.0, *) {
titlebar.toolbarStyle = .automatic titlebar.toolbarStyle = .unifiedCompact
} }
} }
@ -180,11 +180,16 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate {
#if targetEnvironment(macCatalyst) #if targetEnvironment(macCatalyst)
extension NSToolbarItem.Identifier {
static let addNumber = NSToolbarItem.Identifier("pro.aliencat.add.number")
}
extension SceneDelegate: NSToolbarDelegate { extension SceneDelegate: NSToolbarDelegate {
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] { func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
let identifiers: [NSToolbarItem.Identifier] = [ let identifiers: [NSToolbarItem.Identifier] = [
.toggleSidebar .addNumber
] ]
return identifiers return identifiers
} }
@ -192,6 +197,56 @@ extension SceneDelegate: NSToolbarDelegate {
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] { func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return toolbarDefaultItemIdentifiers(toolbar) 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 #endif

View File

@ -161,6 +161,12 @@ class PlateView: UIView {
print("") print("")
return CGSize(width: width, height: height) return CGSize(width: width, height: height)
} }
func setNumber(_ number: String) {
self.number?.setNumber(number)
layoutSubviews()
onChange?()
}
} }
extension PlateView: UIKeyInput { extension PlateView: UIKeyInput {