5 // Created by Hori,Masaki on 2017/04/08.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class WindowManager {
13 private let browserWindowController = BroserWindowController()
16 let jsonViewWindowController: JSONViewWindowController? = {
18 let vc = JSONViewWindowController()
23 let jsonViewWindowController: JSONViewWindowController? = nil
27 private let uiTestWindowController: UITestWindowController? = {
29 let vc = UITestWindowController()
34 private let uiTestWindowController: UITestWindowController? = nil
38 private lazy var historyWindowController: HistoryWindowController = {
40 HistoryWindowController()
43 private lazy var slotItemWindowController: SlotItemWindowController = {
45 SlotItemWindowController()
48 private lazy var preferencePanelController: PreferencePanelController = {
50 PreferencePanelController()
53 private lazy var upgradableShipWindowController: UpgradableShipsWindowController = {
55 UpgradableShipsWindowController()
58 private lazy var airBaseWindowController: AirBaseWindowController = {
60 AirBaseWindowController()
63 private lazy var browserContentAdjuster: BrowserContentAdjuster = {
65 BrowserContentAdjuster()
68 private(set) lazy var screenshotListWindowController: ScreenshotListWindowController = {
70 let wc = ScreenshotListWindowController()
76 private lazy var shipWindowController: ShipWindowController = {
78 ShipWindowController()
81 private lazy var shipMDWindowController: ShipMasterDetailWindowController = {
83 ShipMasterDetailWindowController()
86 private lazy var equipmentWindowController: EquipmentWindowController = {
88 EquipmentWindowController()
91 private lazy var mapWindowController: MapWindowController = {
96 private var browserWindowControllers: [ExternalBrowserWindowController] = []
97 private var logedJSONViewWindowController: JSONViewWindowController?
99 var canSaveLog: Bool {
101 return jsonViewWindowController != nil
104 var isMainWindowMostFront: Bool {
106 guard let window = browserWindowController.window else { return false }
108 return isFrontMostWindow(window)
113 _ = BookmarkManager.shared
114 _ = screenshotListWindowController
116 browserWindowController.showWindow(nil)
119 func createNewBrowser() -> ExternalBrowserWindowController {
121 let browser = ExternalBrowserWindowController()
122 browserWindowControllers.append(browser)
123 browser.window?.makeKeyAndOrderFront(nil)
125 weak var token: NSObjectProtocol! = nil
127 token = NotificationCenter.default
128 .addObserver(forName: NSWindow.willCloseNotification, object: browser.window, queue: nil) { [unowned self] notification in
130 NotificationCenter.default.removeObserver(token)
131 if let obj = notification.object as? NSWindow,
132 let index = self.browserWindowControllers.index(where: { $0.window == obj }) {
134 self.browserWindowControllers.remove(at: index)
141 func registerScreenshot(_ image: NSBitmapImageRep, fromOnScreen: NSRect) {
143 screenshotListWindowController.registerScreenshot(image, fromOnScreen: fromOnScreen)
148 extension WindowManager {
150 private func isFrontMostWindow(_ window: NSWindow) -> Bool {
152 return window.isVisible && window.isMainWindow
155 private func makeFrontOrOrderOut(_ window: NSWindow?) {
157 guard let window = window else { return }
159 isFrontMostWindow(window) ? window.orderOut(nil) : window.makeKeyAndOrderFront(nil)
162 @IBAction func showHideHistory(_ sender: AnyObject?) {
164 makeFrontOrOrderOut(historyWindowController.window)
167 @IBAction func showHideSlotItemWindow(_ sender: AnyObject?) {
169 makeFrontOrOrderOut(slotItemWindowController.window)
172 @IBAction func showHideUpgradableShipWindow(_ sender: AnyObject?) {
174 makeFrontOrOrderOut(upgradableShipWindowController.window)
177 @IBAction func showHideScreenshotListWindow(_ sender: AnyObject?) {
179 makeFrontOrOrderOut(screenshotListWindowController.window)
182 @IBAction func showHideAirBaseInfoWindow(_ sender: AnyObject?) {
184 makeFrontOrOrderOut(airBaseWindowController.window)
187 @IBAction func showHidePreferencePanle(_ sender: AnyObject?) {
189 makeFrontOrOrderOut(preferencePanelController.window)
192 @IBAction func showWindowAduster(_ sender: AnyObject?) {
194 browserContentAdjuster.showWindow(nil)
197 @IBAction func openNewBrowser(_ sender: AnyObject?) {
199 _ = createNewBrowser()
202 @IBAction func selectBookmark(_ sender: AnyObject?) {
204 let b = createNewBrowser()
205 b.selectBookmark(sender)
208 @IBAction func showMainBrowser(_ sender: AnyObject?) {
210 browserWindowController.showWindow(nil)
213 @IBAction func showShipWindow(_ sender: AnyObject?) {
215 shipWindowController.showWindow(nil)
218 @IBAction func showEquipmentWindow(_ sender: AnyObject?) {
220 equipmentWindowController.showWindow(nil)
223 @IBAction func showMapWindow(_ sender: AnyObject?) {
225 mapWindowController.showWindow(nil)
228 @IBAction func showOwnershipShipWindow(_ sender: AnyObject?) {
230 shipMDWindowController.showWindow(nil)
233 @IBAction func saveDocument(_ sender: AnyObject?) {
235 let panel = NSSavePanel()
236 panel.allowedFileTypes = ["plist"]
237 panel.prompt = "Save Panel"
238 panel.title = "Save Panel"
242 guard $0 == .OK else { return }
243 guard let url = panel.url else { return }
244 guard let array = self.jsonViewWindowController?.commands else { return }
246 let data = NSKeyedArchiver.archivedData(withRootObject: array)
250 try data.write(to: url)
254 print("Can not write to \(url)")
259 @IBAction func openDocument(_ sender: AnyObject?) {
261 let panel = NSOpenPanel()
262 panel.allowedFileTypes = ["plist"]
263 panel.allowsMultipleSelection = false
264 panel.prompt = "Open log"
265 panel.title = "Open log"
269 guard $0 == .OK else { return }
270 guard let url = panel.url else { return }
274 let data = try Data(contentsOf: url)
275 let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)
276 guard let commands = array as? [[String: Any]] else { return }
278 self.logedJSONViewWindowController = JSONViewWindowController()
279 self.logedJSONViewWindowController?.commands = commands
280 self.logedJSONViewWindowController?.window?.title = "SAVED LOG FILE VIEWER"
281 self.logedJSONViewWindowController?.showWindow(nil)
285 print("Can not load \(url)")
290 private func setTitle(_ menuItem: NSMenuItem, _ window: NSWindow?, _ showLabel: String, _ hideLabel: String) {
292 guard let window = window else { return }
294 if isFrontMostWindow(window) {
296 menuItem.title = hideLabel
300 menuItem.title = showLabel
304 func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
306 guard let action = menuItem.action else { return false }
310 case #selector(WindowManager.showHideHistory(_:)):
312 historyWindowController.window,
313 LocalizedStrings.showHistory.string,
314 LocalizedStrings.hideHistory.string)
317 case #selector(WindowManager.showHideSlotItemWindow(_:)):
319 slotItemWindowController.window,
320 LocalizedStrings.showSlotItem.string,
321 LocalizedStrings.hideSlotItem.string)
324 case #selector(WindowManager.showHideUpgradableShipWindow(_:)):
326 upgradableShipWindowController.window,
327 LocalizedStrings.showUpgradableShips.string,
328 LocalizedStrings.hideUpgradableShips.string)
331 case #selector(WindowManager.showHideScreenshotListWindow(_:)):
333 screenshotListWindowController.window,
334 LocalizedStrings.showScreenshotList.string,
335 LocalizedStrings.hideScreenshotList.string)
338 case #selector(WindowManager.showHideAirBaseInfoWindow(_:)):
340 airBaseWindowController.window,
341 LocalizedStrings.showAirbaseInfo.string,
342 LocalizedStrings.hideAirbaseInfo.string)
345 case #selector(WindowManager.showHidePreferencePanle(_:)):
348 case #selector(WindowManager.openNewBrowser(_:)):
351 case #selector(WindowManager.selectBookmark(_:)):
354 case #selector(WindowManager.showWindowAduster(_:)):
357 case #selector(WindowManager.showShipWindow(_:)),
358 #selector(WindowManager.showEquipmentWindow(_:)),
359 #selector(WindowManager.showMapWindow(_:)),
360 #selector(WindowManager.showOwnershipShipWindow(_:)):
364 case #selector(WindowManager.saveDocument(_:)),
365 #selector(WindowManager.openDocument(_:)):