OSDN Git Service

不要となっていたプロパティを削除
[kcd/KCD.git] / KCD / WindowManager.swift
1 //
2 //  WindowManager.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/04/08.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class WindowManager {
12     
13     private let browserWindowController = BroserWindowController()
14     
15     #if ENABLE_JSON_LOG
16     let jsonViewWindowController: JSONViewWindowController? = {
17     
18         let vc = JSONViewWindowController()
19         vc.showWindow(nil)
20         
21         return vc
22     }()
23     #else
24     let jsonViewWindowController: JSONViewWindowController? = nil
25     #endif
26     
27     #if UI_TEST
28     private let uiTestWindowController: UITestWindowController? = {
29     
30         let vc = UITestWindowController()
31         vc.showWindow(nil)
32         
33         return vc
34     }()
35     #else
36     private let uiTestWindowController: UITestWindowController? = nil
37     #endif
38     
39     // MARK: - Variable
40     private lazy var historyWindowController: HistoryWindowController = {
41         
42         HistoryWindowController()
43     }()
44     
45     private lazy var slotItemWindowController: SlotItemWindowController = {
46         
47         SlotItemWindowController()
48     }()
49     
50     private lazy var preferencePanelController: PreferencePanelController = {
51         
52         PreferencePanelController()
53     }()
54     
55     private lazy var upgradableShipWindowController: UpgradableShipsWindowController = {
56         
57         UpgradableShipsWindowController()
58     }()
59     
60     private lazy var airBaseWindowController: AirBaseWindowController = {
61         
62         AirBaseWindowController()
63     }()
64     
65     private lazy var browserContentAdjuster: BrowserContentAdjuster = {
66         
67         BrowserContentAdjuster()
68     }()
69     
70     private(set) lazy var screenshotListWindowController: ScreenshotListWindowController = {
71         
72         let wc = ScreenshotListWindowController()
73         _ = wc.window
74         
75         return wc
76     }()
77     
78     private lazy var shipWindowController: ShipWindowController = {
79         
80         ShipWindowController()
81     }()
82     
83     private lazy var shipMDWindowController: ShipMasterDetailWindowController = {
84         
85         ShipMasterDetailWindowController()
86     }()
87     
88     private lazy var equipmentWindowController: EquipmentWindowController = {
89         
90         EquipmentWindowController()
91     }()
92     
93     private lazy var mapWindowController: MapWindowController = {
94         
95         MapWindowController()
96     }()
97     
98     private var browserWindowControllers: [ExternalBrowserWindowController] = []
99     private var logedJSONViewWindowController: JSONViewWindowController?
100     
101     var canSaveLog: Bool {
102         
103         return jsonViewWindowController != nil
104     }
105     
106     var isMainWindowMostFront: Bool {
107         
108         guard let window = browserWindowController.window else {
109             
110             return false
111         }
112         
113         return isFrontMostWindow(window)
114     }
115     
116     func prepair() {
117         
118         _ = BookmarkManager.shared
119         _ = screenshotListWindowController
120         
121         browserWindowController.showWindow(nil)
122     }
123     
124     func createNewBrowser() -> ExternalBrowserWindowController {
125         
126         let browser = ExternalBrowserWindowController()
127         browserWindowControllers.append(browser)
128         browser.window?.makeKeyAndOrderFront(nil)
129         
130         NotificationCenter.default
131             .addObserverOnce(forName: NSWindow.willCloseNotification, object: browser.window, queue: nil) { [unowned self] notification in
132                 
133                 if let obj = notification.object as? NSWindow,
134                     let index = self.browserWindowControllers.index(where: { $0.window == obj }) {
135                     
136                     self.browserWindowControllers.remove(at: index)
137                 }
138         }
139         
140         return browser
141     }
142 }
143
144 // MARK: - IBActions
145 extension WindowManager {
146     
147     private func isFrontMostWindow(_ window: NSWindow) -> Bool {
148         
149         return window.isVisible && window.isMainWindow
150     }
151     
152     private func makeFrontOrOrderOut(_ window: NSWindow?) {
153         
154         guard let window = window else {
155             
156             return
157         }
158         
159         isFrontMostWindow(window) ? window.orderOut(nil) : window.makeKeyAndOrderFront(nil)
160     }
161     
162     @IBAction func showHideHistory(_ sender: AnyObject?) {
163         
164         makeFrontOrOrderOut(historyWindowController.window)
165     }
166     
167     @IBAction func showHideSlotItemWindow(_ sender: AnyObject?) {
168         
169         makeFrontOrOrderOut(slotItemWindowController.window)
170     }
171     
172     @IBAction func showHideUpgradableShipWindow(_ sender: AnyObject?) {
173         
174         makeFrontOrOrderOut(upgradableShipWindowController.window)
175     }
176     
177     @IBAction func showHideScreenshotListWindow(_ sender: AnyObject?) {
178         
179         makeFrontOrOrderOut(screenshotListWindowController.window)
180     }
181     
182     @IBAction func showHideAirBaseInfoWindow(_ sender: AnyObject?) {
183         
184         makeFrontOrOrderOut(airBaseWindowController.window)
185     }
186     
187     @IBAction func showHidePreferencePanle(_ sender: AnyObject?) {
188         
189         makeFrontOrOrderOut(preferencePanelController.window)
190     }
191     
192     @IBAction func showWindowAduster(_ sender: AnyObject?) {
193         
194         browserContentAdjuster.showWindow(nil)
195     }
196     
197     @IBAction func openNewBrowser(_ sender: AnyObject?) {
198         
199         _ = createNewBrowser()
200     }
201     
202     @IBAction func selectBookmark(_ sender: AnyObject?) {
203         
204         let b = createNewBrowser()
205         b.selectBookmark(sender)
206     }
207     
208     @IBAction func showMainBrowser(_ sender: AnyObject?) {
209         
210         browserWindowController.showWindow(nil)
211     }
212     
213     @IBAction func showShipWindow(_ sender: AnyObject?) {
214         
215         shipWindowController.showWindow(nil)
216     }
217     
218     @IBAction func showEquipmentWindow(_ sender: AnyObject?) {
219         
220         equipmentWindowController.showWindow(nil)
221     }
222     
223     @IBAction func showMapWindow(_ sender: AnyObject?) {
224         
225         mapWindowController.showWindow(nil)
226     }
227     
228     @IBAction func showOwnershipShipWindow(_ sender: AnyObject?) {
229         
230         shipMDWindowController.showWindow(nil)
231     }
232     
233     @IBAction func saveDocument(_ sender: AnyObject?) {
234         
235         let panel = NSSavePanel()
236         panel.allowedFileTypes = ["plist"]
237         panel.prompt = "Save Panel"
238         panel.title = "Save Panel"
239         
240         panel.begin {
241             
242             guard $0 == .OK else {
243                 
244                 return
245             }
246             guard let url = panel.url else {
247                 
248                 return
249             }
250             guard let array = self.jsonViewWindowController?.commands else {
251                 
252                 return
253             }
254             
255             let data = NSKeyedArchiver.archivedData(withRootObject: array)
256             
257             do {
258                 
259                 try data.write(to: url)
260                 
261             } catch {
262                 
263                 Logger.shared.log("Can not write to \(url)")
264             }
265         }
266     }
267     
268     @IBAction func openDocument(_ sender: AnyObject?) {
269         
270         let panel = NSOpenPanel()
271         panel.allowedFileTypes = ["plist"]
272         panel.allowsMultipleSelection = false
273         panel.prompt = "Open log"
274         panel.title = "Open log"
275         
276         panel.begin {
277             
278             guard $0 == .OK else {
279                 
280                 return
281             }
282             guard let url = panel.url else {
283                 
284                 return
285             }
286             
287             do {
288                 
289                 let data = try Data(contentsOf: url)
290                 let array = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)
291                 guard let commands = array as? [[String: Any]] else {
292                     
293                     return
294                 }
295                 
296                 self.logedJSONViewWindowController = JSONViewWindowController()
297                 self.logedJSONViewWindowController?.commands = commands
298                 self.logedJSONViewWindowController?.window?.title = "SAVED LOG FILE VIEWER"
299                 self.logedJSONViewWindowController?.showWindow(nil)
300                 
301             } catch {
302                 
303                 Logger.shared.log("Can not load \(url)")
304             }
305         }
306     }
307     
308     private func setTitle(to menuItem: NSMenuItem, frontWindow window: NSWindow?, show showLabel: String, hide hideLabel: String) {
309         
310         guard let window = window else {
311             
312             return
313         }
314         
315         if isFrontMostWindow(window) {
316             
317             menuItem.title = hideLabel
318             
319         } else {
320             
321             menuItem.title = showLabel
322         }
323     }
324     
325     func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
326         
327         guard let action = menuItem.action else {
328             
329             return false
330         }
331         
332         switch action {
333             
334         case #selector(WindowManager.showHideHistory(_:)):
335             
336             setTitle(to: menuItem,
337                      frontWindow: historyWindowController.window,
338                      show: LocalizedStrings.showHistory.string,
339                      hide: LocalizedStrings.hideHistory.string)
340             
341             return true
342             
343         case #selector(WindowManager.showHideSlotItemWindow(_:)):
344             
345             setTitle(to: menuItem,
346                      frontWindow: slotItemWindowController.window,
347                      show: LocalizedStrings.showSlotItem.string,
348                      hide: LocalizedStrings.hideSlotItem.string)
349             
350             return true
351             
352         case #selector(WindowManager.showHideUpgradableShipWindow(_:)):
353             
354             setTitle(to: menuItem,
355                      frontWindow: upgradableShipWindowController.window,
356                      show: LocalizedStrings.showUpgradableShips.string,
357                      hide: LocalizedStrings.hideUpgradableShips.string)
358             
359             return true
360             
361         case #selector(WindowManager.showHideScreenshotListWindow(_:)):
362             
363             setTitle(to: menuItem,
364                      frontWindow: screenshotListWindowController.window,
365                      show: LocalizedStrings.showScreenshotList.string,
366                      hide: LocalizedStrings.hideScreenshotList.string)
367             
368             return true
369             
370         case #selector(WindowManager.showHideAirBaseInfoWindow(_:)):
371             
372             setTitle(to: menuItem,
373                      frontWindow: airBaseWindowController.window,
374                      show: LocalizedStrings.showAirbaseInfo.string,
375                      hide: LocalizedStrings.hideAirbaseInfo.string)
376             
377             return true
378             
379         case #selector(WindowManager.showHidePreferencePanle(_:)):
380             
381             return true
382             
383         case #selector(WindowManager.openNewBrowser(_:)):
384             
385             return true
386             
387         case #selector(WindowManager.selectBookmark(_:)):
388             
389             return true
390             
391         case #selector(WindowManager.showWindowAduster(_:)):
392             
393             return true
394             
395         case #selector(WindowManager.showShipWindow(_:)),
396              #selector(WindowManager.showEquipmentWindow(_:)),
397              #selector(WindowManager.showMapWindow(_:)),
398              #selector(WindowManager.showOwnershipShipWindow(_:)):
399             
400             return true
401             
402         case #selector(WindowManager.saveDocument(_:)),
403              #selector(WindowManager.openDocument(_:)):
404             
405             return canSaveLog
406             
407         default:
408             
409             return false
410         }
411     }
412 }