OSDN Git Service

staticプロパティをインスタンスプロパティに変更
[kcd/KCD.git] / KCD / BroserWindowController.swift
index b7db603..14bd65a 100644 (file)
@@ -13,8 +13,11 @@ final class BroserWindowController: NSWindowController {
     enum FleetViewPosition: Int {
         
         case above = 0
+        
         case below = 1
+        
         case divided = 2
+        
         case oldStyle = 0xffffffff
     }
     
@@ -25,6 +28,7 @@ final class BroserWindowController: NSWindowController {
         case #keyPath(flagShipName): return [#keyPath(flagShipID)]
             
         default: return []
+            
         }
     }
     
@@ -41,7 +45,7 @@ final class BroserWindowController: NSWindowController {
     @IBOutlet private weak var stokerContainer: NSView!
     @IBOutlet private weak var resourcePlaceholder: NSView!
     @IBOutlet private weak var ancherageRepariTimerPlaceholder: NSView!
-    @IBOutlet private weak var informations: NSTabView!
+    @IBOutlet private weak var informationsPlaceholder: NSView!
     @IBOutlet private var deckContoller: NSArrayController!
     
     override var windowNibName: NSNib.Name {
@@ -51,26 +55,15 @@ final class BroserWindowController: NSWindowController {
     
     @objc var flagShipID: Int = 0
     @objc var flagShipName: String? {
-        return ServerDataStore.default.ship(by: flagShipID)?.name
-    }
-    var changeMainTabHandler: ((Int) -> Void)?
-    @objc dynamic var selectedMainTabIndex: Int = 0 {
         
-        didSet {
-            changeMainTabHandler?(selectedMainTabIndex)
-        }
+        return ServerDataStore.default.ship(by: flagShipID)?.name
     }
     
     private var gameViewController: GameViewController!
     private var fleetViewController: FleetViewController!
-    private var tabViewItemViewControllers: [MainTabVIewItemViewController] = []
+    @objc private var informantionViewController = InformationTabViewController()
     private var ancherageRepariTimerViewController: AncherageRepairTimerViewController!
     private var resourceViewController: ResourceViewController!
-    private var docksViewController: DocksViewController!
-    private var shipViewController: ShipViewController!
-    private var powerUpViewController: PowerUpSupportViewController!
-    private var strengthedListViewController: StrengthenListViewController!
-    private var repairListViewController: RepairListViewController!
     private var combinedViewController: CombileViewController!
     
     private var fleetViewPosition: FleetViewPosition = .above
@@ -85,6 +78,8 @@ final class BroserWindowController: NSWindowController {
         gameViewController = GameViewController()
         replace(view: placeholder, with: gameViewController)
         
+        replace(view: informationsPlaceholder, with: informantionViewController)
+        
         resourceViewController = ResourceViewController()
         replace(view: resourcePlaceholder, with: resourceViewController)
         
@@ -92,20 +87,6 @@ final class BroserWindowController: NSWindowController {
         replace(view: ancherageRepariTimerPlaceholder, with: ancherageRepariTimerViewController)
         if UserDefaults.standard[.screenshotButtonSize] == .small { toggleAnchorageSize(nil) }
         
-        tabViewItemViewControllers = [
-            DocksViewController(),
-            ShipViewController(),
-            PowerUpSupportViewController(),
-            StrengthenListViewController(),
-            RepairListViewController()
-        ]
-        tabViewItemViewControllers.enumerated().forEach {
-            
-            _ = $0.element.view
-            let item = informations.tabViewItem(at: $0.offset)
-            item.viewController = $0.element
-        }
-        
         fleetViewController = FleetViewController(viewType: .detailViewType)
         replace(view: deckPlaceholder, with: fleetViewController)
         setFleetView(position: UserDefaults.standard[.fleetViewPosition], animate: false)
@@ -119,29 +100,43 @@ final class BroserWindowController: NSWindowController {
         NotificationCenter.default
             .addObserver(forName: .CombinedDidCange, object: nil, queue: nil) {
                 
-                guard UserDefaults.standard[.autoCombinedView] else { return }
-                guard let type = $0.userInfo?[CombinedCommand.userInfoKey] as? CombineType else { return }
+                guard UserDefaults.standard[.autoCombinedView] else {
+                    
+                    return
+                }
+                guard let type = $0.userInfo?[CombinedCommand.userInfoKey] as? CombineType else {
+                    
+                    return
+                }
                 
                 if !Thread.isMainThread { Thread.sleep(forTimeInterval: 0.1) }
                 
                 DispatchQueue.main.async {
                     
                     switch type {
+                        
                     case .cancel:
                         self.hideCombinedView()
                         
                     case .maneuver, .water, .transportation:
                         self.showCombinedView()
+                        
                     }
                 }
         }
         
-        if UserDefaults.standard[.lastHasCombinedView] { showCombinedView() }
+        if UserDefaults.standard[.lastHasCombinedView] {
+            
+            showCombinedView()
+        }
     }
     
     override func swipe(with event: NSEvent) {
         
-        guard UserDefaults.standard[.useSwipeChangeCombinedView] else { return }
+        guard UserDefaults.standard[.useSwipeChangeCombinedView] else {
+            
+            return
+        }
         
         if event.deltaX > 0 {
             
@@ -161,9 +156,15 @@ final class BroserWindowController: NSWindowController {
         
     private func showCombinedView() {
         
-        if isCombinedMode { return }
+        if isCombinedMode {
+            
+            return
+        }
         
-        if fleetViewPosition == .oldStyle { return }
+        if fleetViewPosition == .oldStyle {
+            
+            return
+        }
         
         isCombinedMode = true
         
@@ -184,7 +185,10 @@ final class BroserWindowController: NSWindowController {
     
     private func hideCombinedView() {
         
-        if !isCombinedMode { return }
+        if !isCombinedMode {
+            
+            return
+        }
         
         isCombinedMode = false
         
@@ -202,7 +206,7 @@ extension BroserWindowController {
     
     private func showView(number: Int) {
         
-        informations.selectTabViewItem(at: number)
+        informantionViewController.selectionIndex = number
     }
     
     @IBAction func reloadContent(_ sender: AnyObject?) {
@@ -218,19 +222,27 @@ extension BroserWindowController {
     @IBAction func clearQuestList(_ sender: AnyObject?) {
         
         let store = ServerDataStore.oneTimeEditor()
-        store.quests().forEach(store.delete)
+        store.sync { store.quests().forEach(store.delete) }
     }
     
+    // call from menu item
     @IBAction func selectView(_ sender: AnyObject?) {
         
-        guard let tag = sender?.tag else { return }
+        guard let tag = sender?.tag else {
+            
+            return
+        }
         
         showView(number: tag)
     }
     
+    // call from touch bar
     @IBAction func changeMainTab(_ sender: AnyObject?) {
         
-        guard let segment = sender?.selectedSegment else { return }
+        guard let segment = sender?.selectedSegment else {
+            
+            return
+        }
         
         showView(number: segment)
     }
@@ -257,10 +269,10 @@ extension BroserWindowController {
         }()
         ancherageRepariTimerViewController.controlSize = newSize
         
-        var frame = informations.frame
+        var frame = informantionViewController.view.frame
         frame.size.height -= diff
         frame.origin.y += diff
-        informations.frame = frame
+        informantionViewController.view.frame = frame
         
         UserDefaults.standard[.screenshotButtonSize] = newSize
     }
@@ -319,7 +331,10 @@ extension BroserWindowController {
     
     override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
         
-        guard let action: Selector = menuItem.action else { return false }
+        guard let action: Selector = menuItem.action else {
+            
+            return false
+        }
         
         switch action {
             
@@ -336,33 +351,47 @@ extension BroserWindowController {
             return true
             
         case #selector(BroserWindowController.fleetListAbove(_:)):
+            
             menuItem.state = (fleetViewPosition == .above ? .on : .off)
+            
             return true
             
         case #selector(BroserWindowController.fleetListBelow(_:)):
+            
             menuItem.state = (fleetViewPosition == .below ? .on : .off)
+            
             return true
             
         case #selector(BroserWindowController.fleetListDivide(_:)):
+            
             menuItem.state = (fleetViewPosition == .divided ? .on : .off)
+            
             return true
             
         case #selector(BroserWindowController.fleetListSimple(_:)):
+            
             menuItem.state = (fleetViewPosition == .oldStyle ? .on : .off)
+            
             return true
             
         case #selector(BroserWindowController.reorderToDoubleLine(_:)):
+            
             menuItem.state = (fleetViewController.shipOrder == .doubleLine ? .on : .off)
+            
             return true
             
         case #selector(BroserWindowController.reorderToLeftToRight(_:)):
+            
             menuItem.state = (fleetViewController.shipOrder == .leftToRight ? .on: .off)
+            
             return true
             
         case #selector(BroserWindowController.clearQuestList(_:)):
+            
             return true
             
         case #selector(BroserWindowController.showHideCombinedView(_:)):
+            
             if isCombinedMode {
                 
                 menuItem.title = LocalizedStrings.hideCombinedView.string
@@ -377,13 +406,17 @@ extension BroserWindowController {
             return true
             
         case #selector(BroserWindowController.toggleAnchorageSize(_:)):
+            
             return true
             
         case #selector(BroserWindowController.changeSakutekiCalculator(_:)):
+            
             return fleetViewController.validateMenuItem(menuItem)
             
         default:
+            
             return false
+            
         }
     }
 }
@@ -395,13 +428,25 @@ extension BroserWindowController {
     
     private func changeFleetViewForFleetViewPositionIfNeeded(position newPosition: FleetViewPosition) {
         
-        if fleetViewPosition == newPosition { return }
-        if fleetViewPosition != .oldStyle && newPosition != .oldStyle { return }
-        if newPosition == .oldStyle && isCombinedMode { hideCombinedView() }
+        if fleetViewPosition == newPosition {
+            
+            return
+        }
+        if fleetViewPosition != .oldStyle && newPosition != .oldStyle {
+            
+            return
+        }
+        if newPosition == .oldStyle && isCombinedMode {
+            
+            hideCombinedView()
+        }
         
         let type: FleetViewType = (newPosition == .oldStyle) ? .minimumViewType : .detailViewType
         
-        guard let newController = FleetViewController(viewType: type) else { return }
+        guard let newController = FleetViewController(viewType: type) else {
+            
+            return
+        }
         
         newController.enableAnimation = true
         newController.shipOrder = fleetViewController.shipOrder
@@ -412,9 +457,15 @@ extension BroserWindowController {
     
     private func windowHeightForFleetViewPosition(position newPosition: FleetViewPosition) -> CGFloat {
         
-        guard var contentHeight = window!.contentView?.frame.size.height else { return 0.0 }
+        guard var contentHeight = window!.contentView?.frame.size.height else {
+            
+            return 0.0
+        }
         
-        if fleetViewPosition == newPosition { return contentHeight }
+        if fleetViewPosition == newPosition {
+            
+            return contentHeight
+        }
         if fleetViewPosition == .oldStyle {
             
             contentHeight += FleetViewController.heightDifference
@@ -431,7 +482,10 @@ extension BroserWindowController {
         
         var contentRect = window!.frame
         
-        if fleetViewPosition == newPosition { return contentRect }
+        if fleetViewPosition == newPosition {
+            
+            return contentRect
+        }
         if fleetViewPosition == .oldStyle {
             
             contentRect.size.height += FleetViewController.heightDifference
@@ -453,6 +507,7 @@ extension BroserWindowController {
         var flashRect = gameViewController.view.frame
         var flashY: CGFloat
         switch newPosition {
+            
         case .above:
             flashY = contentHeight - flashRect.height - fleetViewController.normalHeight
             
@@ -464,6 +519,7 @@ extension BroserWindowController {
             
         case .oldStyle:
             flashY = contentHeight - flashRect.height - BroserWindowController.flashTopMargin
+            
         }
         
         flashRect.origin.y = flashY
@@ -481,6 +537,7 @@ extension BroserWindowController {
         var fleetViewY: CGFloat
         
         switch newPosition {
+            
         case .above:
             fleetViewHeight = fleetViewController.normalHeight
             fleetViewY = contentHeight - fleetViewHeight
@@ -496,6 +553,7 @@ extension BroserWindowController {
         case .oldStyle:
             fleetViewHeight = FleetViewController.oldStyleFleetViewHeight
             fleetViewY = contentHeight - fleetViewHeight - flashRect.height - BroserWindowController.margin - BroserWindowController.flashTopMargin
+            
         }
         
         fleetListRect.size.height = fleetViewHeight
@@ -506,7 +564,10 @@ extension BroserWindowController {
     
     private func setFleetView(position newPosition: FleetViewPosition, animate: Bool) {
         
-        guard let window = window else { return }
+        guard let window = window else {
+            
+            return
+        }
         
         changeFleetViewForFleetViewPositionIfNeeded(position: newPosition)
         let winFrame = windowFrameForFleetViewPosition(position: newPosition)
@@ -540,17 +601,20 @@ extension BroserWindowController: FleetViewControllerDelegate {
     
     func changeShowsExtShip(_ fleetViewController: FleetViewController, showsExtShip: Bool) {
         
-        guard self.fleetViewController == fleetViewController else { return }
+        guard self.fleetViewController == fleetViewController else {
+            
+            return
+        }
         
         if isExtShpMode && !showsExtShip {
             
             // hide
             let diffHeight = fleetViewController.shipViewSize.height
             
-            var iFrame = informations.frame
+            var iFrame = informantionViewController.view.frame
             iFrame.origin.y -= diffHeight
             iFrame.size.height += diffHeight
-            informations.animator().frame = iFrame
+            informantionViewController.view.animator().frame = iFrame
             
             var sFrame = stokerContainer.frame
             sFrame.origin.y -= diffHeight
@@ -563,10 +627,10 @@ extension BroserWindowController: FleetViewControllerDelegate {
             //show
             let diffHeight = fleetViewController.shipViewSize.height
             
-            var iFrame = informations.frame
+            var iFrame = informantionViewController.view.frame
             iFrame.origin.y += diffHeight
             iFrame.size.height -= diffHeight
-            informations.animator().frame = iFrame
+            informantionViewController.view.animator().frame = iFrame
             
             var sFrame = stokerContainer.frame
             sFrame.origin.y += diffHeight
@@ -612,26 +676,28 @@ extension BroserWindowController {
         Bundle.main.loadNibNamed(NSNib.Name("BroswerTouchBar"), owner: self, topLevelObjects: nil)
         
         shipTypeSegment.bind(.selectedIndex,
-                             to: tabViewItemViewControllers[0],
-                             withKeyPath: #keyPath(MainTabVIewItemViewController.selectedShipType),
+                             to: informantionViewController,
+                             withKeyPath: #keyPath(InformationTabViewController.selectedShipType),
                              options: nil)
-        let o = selectedMainTabIndex
-        selectedMainTabIndex = o
         
-        changeMainTabHandler = { [weak self] in
+        informantionViewController.selectionDidChangeHandler = { [weak self] in
             
-            guard let `self` = self else { return }
+            guard let `self` = self else {
+                
+                return
+            }
             
             self.shipTypeButton.dismissPopover(nil)
-            self.shipTypeSegment.unbind(.selectedIndex)
             
-            guard let button = self.shipTypeButton.view as? NSButton else { return }
+            guard let button = self.shipTypeButton.view as? NSButton else {
+                
+                return
+            }
+            button.isHidden = !self.informantionViewController.hasShipTypeSelector
             
-            let vc = self.tabViewItemViewControllers[$0]
-            button.isHidden = !vc.hasShipTypeSelector
             self.shipTypeSegment.bind(.selectedIndex,
-                                      to: vc,
-                                      withKeyPath: #keyPath(MainTabVIewItemViewController.selectedShipType),
+                                      to: self.informantionViewController,
+                                      withKeyPath: #keyPath(InformationTabViewController.selectedShipType),
                                       options: nil)
         }