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.
|
// 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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user