import Cocoa
-fileprivate extension Selector {
- static let showHideHistory = #selector(WindowManager.showHideHistory(_:))
- static let showHideSlotItemWindow = #selector(WindowManager.showHideSlotItemWindow(_:))
- static let showHideUpgradableShipWindow = #selector(WindowManager.showHideUpgradableShipWindow(_:))
- static let showHideScreenshotListWindow = #selector(WindowManager.showHideScreenshotListWindow(_:))
- static let showHideAirBaseInfoWindow = #selector(WindowManager.showHideAirBaseInfoWindow(_:))
- static let showHidePreferencePanle = #selector(WindowManager.showHidePreferencePanle(_:))
- static let openNewBrowser = #selector(WindowManager.openNewBrowser(_:))
- static let selectBookmark = #selector(WindowManager.selectBookmark(_:))
- static let showWindowAduster = #selector(WindowManager.showWindowAduster(_:))
-
- static let showShipWindow = #selector(WindowManager.showShipWindow(_:))
- static let showEquipmentWindow = #selector(WindowManager.showEquipmentWindow(_:))
- static let showMapWindow = #selector(WindowManager.showMapWindow(_:))
- static let showOwnershipShipWindow = #selector(WindowManager.showOwnershipShipWindow(_:))
-
- static let saveDocument = #selector(WindowManager.saveDocument(_:))
- static let openDocument = #selector(WindowManager.openDocument(_:))
-}
-
-class WindowManager {
- fileprivate let browserWindowController = BroserWindowController()
+final class WindowManager {
+
+ private let browserWindowController = BroserWindowController()
#if ENABLE_JSON_LOG
let jsonViewWindowController: JSONViewWindowController? = {
+
let vc = JSONViewWindowController()
vc.showWindow(nil)
+
return vc
}()
#else
#if UI_TEST
private let uiTestWindowController: UITestWindowController? = {
+
let vc = UITestWindowController()
vc.showWindow(nil)
+
return vc
}()
#else
#endif
// MARK: - Variable
- fileprivate lazy var historyWindowController: HistoryWindowController = {
+ private lazy var historyWindowController: HistoryWindowController = {
+
HistoryWindowController()
}()
- fileprivate lazy var slotItemWindowController: SlotItemWindowController = {
+
+ private lazy var slotItemWindowController: SlotItemWindowController = {
+
SlotItemWindowController()
}()
- fileprivate lazy var preferencePanelController: PreferencePanelController = {
+
+ private lazy var preferencePanelController: PreferencePanelController = {
+
PreferencePanelController()
}()
- fileprivate lazy var upgradableShipWindowController: UpgradableShipsWindowController = {
+
+ private lazy var upgradableShipWindowController: UpgradableShipsWindowController = {
+
UpgradableShipsWindowController()
}()
- fileprivate lazy var airBaseWindowController: AirBaseWindowController = {
+
+ private lazy var airBaseWindowController: AirBaseWindowController = {
+
AirBaseWindowController()
}()
- fileprivate lazy var browserContentAdjuster: BrowserContentAdjuster = {
+
+ private lazy var browserContentAdjuster: BrowserContentAdjuster = {
+
BrowserContentAdjuster()
}()
- fileprivate(set) lazy var screenshotListWindowController: ScreenshotListWindowController = {
+
+ private(set) lazy var screenshotListWindowController: ScreenshotListWindowController = {
+
let wc = ScreenshotListWindowController()
- let _ = wc.window
+ _ = wc.window
+
return wc
}()
- fileprivate lazy var shipWindowController: ShipWindowController = {
+ private lazy var shipWindowController: ShipWindowController = {
+
ShipWindowController()
}()
- fileprivate lazy var shipMDWindowController: ShipMasterDetailWindowController = {
+
+ private lazy var shipMDWindowController: ShipMasterDetailWindowController = {
+
ShipMasterDetailWindowController()
- } ()
- fileprivate lazy var equipmentWindowController: EquipmentWindowController = {
+ }()
+
+ private lazy var equipmentWindowController: EquipmentWindowController = {
+
EquipmentWindowController()
}()
- fileprivate lazy var mapWindowController: MapWindowController = {
+
+ private lazy var mapWindowController: MapWindowController = {
+
MapWindowController()
}()
private var browserWindowControllers: [ExternalBrowserWindowController] = []
- private var updaters: [() -> Void] = []
- fileprivate var logedJSONViewWindowController: JSONViewWindowController?
+ private var logedJSONViewWindowController: JSONViewWindowController?
var canSaveLog: Bool {
+
return jsonViewWindowController != nil
}
+
var isMainWindowMostFront: Bool {
- guard let window = browserWindowController.window else { return false }
+
+ guard let window = browserWindowController.window else {
+
+ return false
+ }
+
return isFrontMostWindow(window)
}
func prepair() {
- let _ = BookmarkManager.shared()
- let _ = screenshotListWindowController
+
+ _ = BookmarkManager.shared
+ _ = screenshotListWindowController
+
browserWindowController.showWindow(nil)
}
func createNewBrowser() -> ExternalBrowserWindowController {
+
let browser = ExternalBrowserWindowController()
browserWindowControllers.append(browser)
browser.window?.makeKeyAndOrderFront(nil)
- var token: NSObjectProtocol! = nil
- token = NotificationCenter.default
- .addObserver(forName: .NSWindowWillClose,
- object: browser.window,
- queue: nil) { [unowned self] notification in
- NotificationCenter.default.removeObserver(token)
- if let obj = notification.object as? NSWindow,
- let index = self.browserWindowControllers.index(where: { $0.window == obj }) {
- self.browserWindowControllers.remove(at: index)
- }
+
+ NotificationCenter.default
+ .addObserverOnce(forName: NSWindow.willCloseNotification, object: browser.window, queue: nil) { [unowned self] notification in
+
+ if let obj = notification.object as? NSWindow,
+ let index = self.browserWindowControllers.index(where: { $0.window == obj }) {
+
+ self.browserWindowControllers.remove(at: index)
+ }
}
+
return browser
}
-
- func registerScreenshot(_ image: NSBitmapImageRep, fromOnScreen: NSRect) {
- screenshotListWindowController.registerScreenshot(image, fromOnScreen: fromOnScreen)
- }
}
// MARK: - IBActions
extension WindowManager {
- fileprivate func isFrontMostWindow(_ window: NSWindow) -> Bool {
+
+ private func isFrontMostWindow(_ window: NSWindow) -> Bool {
+
return window.isVisible && window.isMainWindow
}
+
private func makeFrontOrOrderOut(_ window: NSWindow?) {
- guard let window = window else { return }
+
+ guard let window = window else {
+
+ return
+ }
+
isFrontMostWindow(window) ? window.orderOut(nil) : window.makeKeyAndOrderFront(nil)
}
+
@IBAction func showHideHistory(_ sender: AnyObject?) {
+
makeFrontOrOrderOut(historyWindowController.window)
}
+
@IBAction func showHideSlotItemWindow(_ sender: AnyObject?) {
+
makeFrontOrOrderOut(slotItemWindowController.window)
}
+
@IBAction func showHideUpgradableShipWindow(_ sender: AnyObject?) {
+
makeFrontOrOrderOut(upgradableShipWindowController.window)
}
+
@IBAction func showHideScreenshotListWindow(_ sender: AnyObject?) {
+
makeFrontOrOrderOut(screenshotListWindowController.window)
}
+
@IBAction func showHideAirBaseInfoWindow(_ sender: AnyObject?) {
+
makeFrontOrOrderOut(airBaseWindowController.window)
}
+
@IBAction func showHidePreferencePanle(_ sender: AnyObject?) {
+
makeFrontOrOrderOut(preferencePanelController.window)
}
+
@IBAction func showWindowAduster(_ sender: AnyObject?) {
+
browserContentAdjuster.showWindow(nil)
}
+
@IBAction func openNewBrowser(_ sender: AnyObject?) {
- let _ = createNewBrowser()
+
+ _ = createNewBrowser()
}
+
@IBAction func selectBookmark(_ sender: AnyObject?) {
+
let b = createNewBrowser()
b.selectBookmark(sender)
}
+
@IBAction func showMainBrowser(_ sender: AnyObject?) {
+
browserWindowController.showWindow(nil)
}
@IBAction func showShipWindow(_ sender: AnyObject?) {
+
shipWindowController.showWindow(nil)
}
+
@IBAction func showEquipmentWindow(_ sender: AnyObject?) {
+
equipmentWindowController.showWindow(nil)
}
+
@IBAction func showMapWindow(_ sender: AnyObject?) {
+
mapWindowController.showWindow(nil)
}
+
@IBAction func showOwnershipShipWindow(_ sender: AnyObject?) {
+
shipMDWindowController.showWindow(nil)
}
@IBAction func saveDocument(_ sender: AnyObject?) {
+
let panel = NSSavePanel()
panel.allowedFileTypes = ["plist"]
panel.prompt = "Save Panel"
panel.title = "Save Panel"
+
panel.begin {
- guard $0 == NSModalResponseOK,
- let url = panel.url,
- let array = self.jsonViewWindowController?.commands
- else { return }
+
+ guard $0 == .OK else {
+
+ return
+ }
+ guard let url = panel.url else {
+
+ return
+ }
+ guard let array = self.jsonViewWindowController?.commands else {
+
+ return
+ }
+
let data = NSKeyedArchiver.archivedData(withRootObject: array)
+
do {
+
try data.write(to: url)
- } catch { print("Can not write to \(url)") }
+
+ } catch {
+
+ Logger.shared.log("Can not write to \(url)")
+ }
}
}
+
@IBAction func openDocument(_ sender: AnyObject?) {
+
let panel = NSOpenPanel()
panel.allowedFileTypes = ["plist"]
panel.allowsMultipleSelection = false
panel.prompt = "Open log"
panel.title = "Open log"
+
panel.begin {
- guard $0 == NSModalResponseOK,
- let url = panel.url
- else { return }
+
+ guard $0 == .OK else {
+
+ return
+ }
+ guard let url = panel.url else {
+
+ return
+ }
+
do {
+
let data = try Data(contentsOf: url)
- let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data as NSData)
- guard let commands = array as? [[String: Any]]
- else { return }
+ let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)
+ guard let commands = array as? [[String: Any]] else {
+
+ return
+ }
self.logedJSONViewWindowController = JSONViewWindowController()
self.logedJSONViewWindowController?.commands = commands
self.logedJSONViewWindowController?.window?.title = "SAVED LOG FILE VIEWER"
self.logedJSONViewWindowController?.showWindow(nil)
- } catch { print("Can not load \(url)") }
+
+ } catch {
+
+ Logger.shared.log("Can not load \(url)")
+ }
}
}
- private func setTitle(_ menuItem: NSMenuItem,
- _ window: NSWindow?,
- _ showLabel: String,
- _ hideLabel: String) {
- guard let window = window else { return }
+ private func setTitle(to menuItem: NSMenuItem, frontWindow window: NSWindow?, show showLabel: String, hide hideLabel: String) {
+
+ guard let window = window else {
+
+ return
+ }
+
if isFrontMostWindow(window) {
+
menuItem.title = hideLabel
+
} else {
+
menuItem.title = showLabel
}
}
- // swiftlint:disable function_body_length
+
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
- guard let action = menuItem.action else { return false }
+
+ guard let action = menuItem.action else {
+
+ return false
+ }
+
switch action {
- case Selector.showHideHistory:
- setTitle(menuItem,
- historyWindowController.window,
- NSLocalizedString("Show History", comment: "Show History"),
- NSLocalizedString("Hide History", comment: "Hide History"))
+
+ case #selector(WindowManager.showHideHistory(_:)):
+
+ setTitle(to: menuItem,
+ frontWindow: historyWindowController.window,
+ show: LocalizedStrings.showHistory.string,
+ hide: LocalizedStrings.hideHistory.string)
+
return true
- case Selector.showHideSlotItemWindow:
- setTitle(menuItem,
- slotItemWindowController.window,
- NSLocalizedString("Show Slot Item", comment: "Show Slot Item"),
- NSLocalizedString("Hide Slot Item", comment: "Hide Slot Item"))
+
+ case #selector(WindowManager.showHideSlotItemWindow(_:)):
+
+ setTitle(to: menuItem,
+ frontWindow: slotItemWindowController.window,
+ show: LocalizedStrings.showSlotItem.string,
+ hide: LocalizedStrings.hideSlotItem.string)
+
return true
- case Selector.showHideUpgradableShipWindow:
- setTitle(menuItem,
- upgradableShipWindowController.window,
- NSLocalizedString("Show Upgradable Ships", comment: "Show Upgradable Ships"),
- NSLocalizedString("Hide Upgradable Ships", comment: "Hide Upgradable Ships"))
+
+ case #selector(WindowManager.showHideUpgradableShipWindow(_:)):
+
+ setTitle(to: menuItem,
+ frontWindow: upgradableShipWindowController.window,
+ show: LocalizedStrings.showUpgradableShips.string,
+ hide: LocalizedStrings.hideUpgradableShips.string)
+
return true
- case Selector.showHideScreenshotListWindow:
- setTitle(menuItem,
- screenshotListWindowController.window,
- NSLocalizedString("Show Screenshot List", comment: "Show Screenshot List"),
- NSLocalizedString("Hide Screenshot List", comment: "Hide Screenshot List"))
+
+ case #selector(WindowManager.showHideScreenshotListWindow(_:)):
+
+ setTitle(to: menuItem,
+ frontWindow: screenshotListWindowController.window,
+ show: LocalizedStrings.showScreenshotList.string,
+ hide: LocalizedStrings.hideScreenshotList.string)
+
return true
- case Selector.showHideAirBaseInfoWindow:
- setTitle(menuItem,
- airBaseWindowController.window,
- NSLocalizedString("Show Air Base Info", comment: "Show Air Base Info"),
- NSLocalizedString("Hide Air Base Info", comment: "Hide Air Base Info"))
+
+ case #selector(WindowManager.showHideAirBaseInfoWindow(_:)):
+
+ setTitle(to: menuItem,
+ frontWindow: airBaseWindowController.window,
+ show: LocalizedStrings.showAirbaseInfo.string,
+ hide: LocalizedStrings.hideAirbaseInfo.string)
+
return true
- case Selector.showHidePreferencePanle:
+
+ case #selector(WindowManager.showHidePreferencePanle(_:)):
+
return true
- case Selector.openNewBrowser:
+
+ case #selector(WindowManager.openNewBrowser(_:)):
+
return true
- case Selector.selectBookmark:
+
+ case #selector(WindowManager.selectBookmark(_:)):
+
return true
- case Selector.showWindowAduster:
+
+ case #selector(WindowManager.showWindowAduster(_:)):
+
return true
- case Selector.showShipWindow, Selector.showEquipmentWindow,
- Selector.showMapWindow, Selector.showOwnershipShipWindow:
+
+ case #selector(WindowManager.showShipWindow(_:)),
+ #selector(WindowManager.showEquipmentWindow(_:)),
+ #selector(WindowManager.showMapWindow(_:)),
+ #selector(WindowManager.showOwnershipShipWindow(_:)):
+
return true
- case Selector.saveDocument, Selector.openDocument:
+ case #selector(WindowManager.saveDocument(_:)),
+ #selector(WindowManager.openDocument(_:)):
+
return canSaveLog
default:
+
return false
}
}