From 3a572695103906768487e574acd451b3595c7988 Mon Sep 17 00:00:00 2001 From: ad Date: Thu, 19 Apr 2018 18:01:16 +0300 Subject: [PATCH] + open preset from dialog (not replacing default file) --- MTMR/AppDelegate.swift | 25 +++++++++++++++++++++++++ MTMR/TouchBarController.swift | 20 ++++++++++++++------ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/MTMR/AppDelegate.swift b/MTMR/AppDelegate.swift index c2ded9b..3c4e037 100644 --- a/MTMR/AppDelegate.swift +++ b/MTMR/AppDelegate.swift @@ -39,10 +39,35 @@ class AppDelegate: NSObject, NSApplicationDelegate { TouchBarController.shared.createAndUpdatePreset() } + @objc func openPreset(_ sender: Any?) { + let dialog = NSOpenPanel(); + + dialog.title = "Choose a items.json file"; + dialog.showsResizeIndicator = true; + dialog.showsHiddenFiles = true; + dialog.canChooseDirectories = false; + dialog.canCreateDirectories = false; + dialog.allowsMultipleSelection = false; + dialog.allowedFileTypes = ["json"]; + + if (dialog.runModal() == NSApplication.ModalResponse.OK) { + let result = dialog.url + + if (result != nil) { + let path = result!.path + let jsonData = path.fileData + let jsonItems = jsonData?.barItemDefinitions() ?? [BarItemDefinition(type: .staticButton(title: "bad preset"), action: .none, additionalParameters: [:])] + + TouchBarController.shared.createAndUpdatePreset(jsonItems: jsonItems) + } + } + } + func createMenu() { let menu = NSMenu() menu.addItem(withTitle: "Preferences", action: #selector(openPrefereces(_:)), keyEquivalent: ",") menu.addItem(withTitle: "Reload Preset", action: #selector(updatePreset(_:)), keyEquivalent: "r") + menu.addItem(withTitle: "Open Preset", action: #selector(openPreset(_:)), keyEquivalent: "O") menu.addItem(NSMenuItem.separator()) menu.addItem(withTitle: "Quit", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q") statusItem.menu = menu diff --git a/MTMR/TouchBarController.swift b/MTMR/TouchBarController.swift index ada3da1..c652951 100644 --- a/MTMR/TouchBarController.swift +++ b/MTMR/TouchBarController.swift @@ -60,14 +60,18 @@ class TouchBarController: NSObject, NSTouchBarDelegate { createAndUpdatePreset() } - func createAndUpdatePreset() { + func createAndUpdatePreset(jsonItems: [BarItemDefinition]? = nil) { + var jsonItems = jsonItems self.itemDefinitions = [:] self.items = [:] self.leftIdentifiers = [] self.centerItems = [] self.rightIdentifiers = [] - loadItemDefinitions() + if (jsonItems == nil) { + jsonItems = readConfig() + } + loadItemDefinitions(jsonItems: jsonItems!) createItems() centerItems = self.itemDefinitions.compactMap { (identifier, definition) -> NSTouchBarItem? in return definition.align == .center ? items[identifier] : nil @@ -77,8 +81,8 @@ class TouchBarController: NSObject, NSTouchBarDelegate { touchBar.defaultItemIdentifiers = self.leftIdentifiers + [.centerScrollArea] + self.rightIdentifiers self.presentTouchBar() } - - func loadItemDefinitions() { + + func readConfig() -> [BarItemDefinition]? { let appSupportDirectory = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).first!.appending("/MTMR") let presetPath = appSupportDirectory.appending("/items.json") if !FileManager.default.fileExists(atPath: presetPath), @@ -86,9 +90,13 @@ class TouchBarController: NSObject, NSTouchBarDelegate { try? FileManager.default.createDirectory(atPath: appSupportDirectory, withIntermediateDirectories: true, attributes: nil) try? FileManager.default.copyItem(atPath: defaultPreset, toPath: presetPath) } + let jsonData = presetPath.fileData - let jsonItems = jsonData?.barItemDefinitions() ?? [BarItemDefinition(type: .staticButton(title: "bad preset"), action: .none, additionalParameters: [:])] - + + return jsonData?.barItemDefinitions() ?? [BarItemDefinition(type: .staticButton(title: "bad preset"), action: .none, additionalParameters: [:])] + } + + func loadItemDefinitions(jsonItems: [BarItemDefinition]) { for item in jsonItems { let identifierString = item.type.identifierBase.appending(UUID().uuidString) let identifier = NSTouchBarItem.Identifier(identifierString)