OSDN Git Service

7隻の艦隊表示を作成
authormasakih <masakih@users.sourceforge.jp>
Thu, 23 Nov 2017 13:23:17 +0000 (22:23 +0900)
committermasakih <masakih@users.sourceforge.jp>
Thu, 23 Nov 2017 13:23:17 +0000 (22:23 +0900)
KCD.xcodeproj/project.pbxproj
KCD/Base.lproj/BroserWindowController.xib
KCD/BroserWindowController.swift
KCD/FleetViewController.swift

index ef1c9df..37140a7 100644 (file)
                                F490978C1E1BA64E0085A45D /* GuardEscapedView.swift */,
                                F45FBB911E129BAE000E72B9 /* FleetViewController.swift */,
                                F4BEF0071B11A5D3004702B8 /* FleetViewController.xib */,
+                               F4BEF0041B11A5CC004702B8 /* FleetMinimumViewController.xib */,
                                F4C3D1BD1F13A32D0084D0CA /* CalculateConditionPanelController.swift */,
                                F4C3D1BE1F13A32D0084D0CA /* CalculateConditionPanelController.xib */,
-                               F4BEF0041B11A5CC004702B8 /* FleetMinimumViewController.xib */,
                                F4C668711C54524900601AFB /* VerticalFleetViewController.xib */,
                                F4D05BD11E0F3C4E00688D66 /* CombileViewController.swift */,
                                F4C668741C54525300601AFB /* CombileViewController.xib */,
index c3deecd..2d3f8f6 100644 (file)
@@ -1,20 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13529" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11762"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13529"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="BroserWindowController">
             <connections>
-                <outlet property="ancherageRepariTimerPlaceholder" destination="JfO-nc-ymj" id="HV1-5u-fML"/>
+                <outlet property="ancherageRepariTimerPlaceholder" destination="xRV-cq-rmr" id="cch-th-fsv"/>
                 <outlet property="combinedViewPlaceholder" destination="ErU-NG-s3I" id="6hE-wI-Ikk"/>
                 <outlet property="deckContoller" destination="eqP-ex-UzI" id="8n5-Er-BIF"/>
                 <outlet property="deckPlaceholder" destination="tIf-gd-MhY" id="aXM-5K-Uwd"/>
                 <outlet property="informations" destination="fK1-fC-Xdm" id="why-oJ-aEb"/>
                 <outlet property="placeholder" destination="raX-C4-fMW" id="T7y-R7-3qy"/>
-                <outlet property="resourcePlaceholder" destination="0dQ-uF-j2x" id="XA4-rf-KUI"/>
+                <outlet property="resourcePlaceholder" destination="Ztc-Gd-Ipf" id="mUG-AG-FqW"/>
+                <outlet property="stokerContainer" destination="vbb-UC-aXs" id="eae-Ze-5ug"/>
                 <outlet property="window" destination="1" id="3"/>
             </connections>
         </customObject>
                         <rect key="frame" x="8" y="9" width="800" height="288"/>
                         <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
                     </customView>
-                    <box verticalHuggingPriority="750" boxType="separator" id="hNz-5S-KHR">
-                        <rect key="frame" x="820" y="109" width="329" height="5"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
-                    </box>
                     <tabView initialItem="ETl-Gs-mBL" id="fK1-fC-Xdm">
                         <rect key="frame" x="813" y="176" width="343" height="600"/>
                         <autoresizingMask key="autoresizingMask" flexibleMinX="YES" heightSizable="YES"/>
                             <binding destination="-2" name="selectedIndex" keyPath="selectedMainTabIndex" id="bvs-iv-JKe"/>
                         </connections>
                     </tabView>
-                    <customView id="0dQ-uF-j2x">
-                        <rect key="frame" x="809" y="9" width="352" height="103"/>
-                        <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
-                    </customView>
-                    <customView id="JfO-nc-ymj">
-                        <rect key="frame" x="809" y="111" width="352" height="76"/>
+                    <customView misplaced="YES" id="vbb-UC-aXs">
+                        <rect key="frame" x="808" y="9" width="352" height="178"/>
                         <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                        <subviews>
+                            <customView id="Ztc-Gd-Ipf">
+                                <rect key="frame" x="0.0" y="0.0" width="352" height="103"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
+                            </customView>
+                            <box verticalHuggingPriority="750" boxType="separator" id="vbh-Ad-xUk">
+                                <rect key="frame" x="11" y="100" width="329" height="5"/>
+                                <autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
+                            </box>
+                            <customView id="xRV-cq-rmr">
+                                <rect key="frame" x="0.0" y="102" width="352" height="76"/>
+                                <autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
+                            </customView>
+                        </subviews>
                     </customView>
                 </subviews>
             </view>
index 38db46b..9ff0911 100644 (file)
@@ -38,6 +38,7 @@ final class BroserWindowController: NSWindowController {
     @IBOutlet weak var placeholder: NSView!
     @IBOutlet weak var combinedViewPlaceholder: NSView!
     @IBOutlet weak var deckPlaceholder: NSView!
+    @IBOutlet weak var stokerContainer: NSView!
     @IBOutlet weak var resourcePlaceholder: NSView!
     @IBOutlet weak var ancherageRepariTimerPlaceholder: NSView!
     @IBOutlet weak var informations: NSTabView!
@@ -74,6 +75,7 @@ final class BroserWindowController: NSWindowController {
     
     private var fleetViewPosition: FleetViewPosition = .above
     private var isCombinedMode = false
+    private var isExtShpMode = false
     
     // MARK: - Function
     override func windowDidLoad() {
@@ -110,6 +112,7 @@ final class BroserWindowController: NSWindowController {
         fleetViewController.enableAnimation = false
         fleetViewController.shipOrder = UserDefaults.standard[.fleetViewShipOrder]
         fleetViewController.enableAnimation = true
+        fleetViewController.delegate = self
         
         bind(NSBindingName(rawValue: #keyPath(flagShipID)), to: deckContoller, withKeyPath: "selection.ship_0", options: nil)
         
@@ -160,7 +163,7 @@ final class BroserWindowController: NSWindowController {
         
         viewController.view.frame = view.frame
         viewController.view.autoresizingMask = view.autoresizingMask
-        self.window?.contentView?.replaceSubview(view, with: viewController.view)
+        view.superview?.replaceSubview(view, with: viewController.view)
     }
     
     private func showCombinedView() {
@@ -542,6 +545,50 @@ extension BroserWindowController {
     
 }
 
+extension BroserWindowController: FleetViewControllerDelegate {
+    
+    func changeShowsExtShip(_ fleetViewController: FleetViewController, showsExtShip: Bool) {
+        
+        guard self.fleetViewController == fleetViewController else { return }
+        
+        if isExtShpMode && !showsExtShip {
+            // hide
+            print("hide ext ship")
+            
+            let diffHeight = fleetViewController.shipViewSize.height
+            
+            var iFrame = informations.frame
+            iFrame.origin.y -= diffHeight
+            iFrame.size.height += diffHeight
+            informations.animator().frame = iFrame
+            
+            var sFrame = stokerContainer.frame
+            sFrame.origin.y -= diffHeight
+            stokerContainer.animator().frame = sFrame
+            
+            isExtShpMode = false
+            
+        } else if !isExtShpMode && showsExtShip {
+            
+            //show
+            print("show ext shp")
+            
+            let diffHeight = fleetViewController.shipViewSize.height
+            
+            var iFrame = informations.frame
+            iFrame.origin.y += diffHeight
+            iFrame.size.height -= diffHeight
+            informations.animator().frame = iFrame
+            
+            var sFrame = stokerContainer.frame
+            sFrame.origin.y += diffHeight
+            stokerContainer.animator().frame = sFrame
+
+            isExtShpMode = true
+        }
+    }
+}
+
 @available(OSX 10.12.2, *)
 private var mainTouchBars: [Int: NSTouchBar] = [:]
 @available(OSX 10.12.2, *)
index 7ceafb4..9094045 100644 (file)
@@ -18,6 +18,11 @@ enum FleetViewType: Int {
 private var shipKeysContext: Int = 0
 private var shipsContext: Int = 0
 
+protocol FleetViewControllerDelegate: class {
+    
+    func changeShowsExtShip(_ fleetViewController: FleetViewController, showsExtShip: Bool)
+}
+
 final class FleetViewController: NSViewController {
     
     enum ShipOrder: Int {
@@ -49,7 +54,8 @@ final class FleetViewController: NSViewController {
     private static let maxFleetNumber: Int = 4
     
     private let details: [ShipDetailViewController]
-    private let shipKeys = [#keyPath(Deck.ship_0), #keyPath(Deck.ship_1), #keyPath(Deck.ship_2), #keyPath(Deck.ship_3), #keyPath(Deck.ship_4), #keyPath(Deck.ship_5)]
+    private let shipKeys = [#keyPath(Deck.ship_0), #keyPath(Deck.ship_1), #keyPath(Deck.ship_2), #keyPath(Deck.ship_3),
+                            #keyPath(Deck.ship_4), #keyPath(Deck.ship_5), #keyPath(Deck.ship_6)]
     private let type: FleetViewType
     private let fleetController = NSObjectController()
     private let shipObserveKeys = [#keyPath(Ship.seiku), #keyPath(Ship.lv), #keyPath(Ship.equippedItem)]
@@ -118,10 +124,14 @@ final class FleetViewController: NSViewController {
         set {
             representedObject = newValue
             title = newValue?.name
+            checkExtShip()
             setupShips()
         }
     }
     
+    var extDetail: ShipDetailViewController?
+    weak var delegate: FleetViewControllerDelegate?
+    
     var enableAnimation: Bool = false
     
     var shipOrder: FleetViewController.ShipOrder = .doubleLine {
@@ -183,7 +193,6 @@ final class FleetViewController: NSViewController {
             .map { ShipTPValueCalculator($0) }
             .map { $0.value }
             .reduce(0, +)
-        
     }
     
     func totalSeiku(of ship: Ship) -> Int {
@@ -285,6 +294,7 @@ final class FleetViewController: NSViewController {
         
         if context == &shipKeysContext {
             
+            checkExtShip()
             setupShips()
             
             return
@@ -370,7 +380,10 @@ final class FleetViewController: NSViewController {
         
         let array: [Ship?] = (0..<6).map { fleet?[$0] }
         zip(details, array).forEach { $0.0.ship = $0.1 }
-        ships = array.flatMap { $0 }
+        
+        let extShip = fleet?[6]
+        extShip.map { extDetail?.ship = $0 }
+        ships = array.flatMap { $0 } + [extShip].flatMap { $0 }
         
         [#keyPath(totalSakuteki), #keyPath(totalSeiku), #keyPath(totalCalclatedSeiku),
          #keyPath(totalLevel), #keyPath(totalDrums), #keyPath(repairable),
@@ -470,4 +483,72 @@ extension FleetViewController {
     }
 }
 
+extension FleetViewController {
+    
+    var shipViewSize: NSSize { return details[0].view.frame.size }
+    
+    private func showExtShip() {
+        
+        print("show ext shp")
+        
+        guard type == .detailViewType else { return }
+        guard extDetail == nil else { return }
+        guard let _ = fleet?[6] else { return }
+        
+        extDetail = ShipDetailViewController(type: .full)
+        guard let extDetail = extDetail else { return }
+        
+        extDetail.title = "7"
+        extDetail.view.autoresizingMask = [.minXMargin]
+        
+        let width = extDetail.view.frame.width - 1
+        var frame = view.frame
+        frame.size.width += width
+        
+        extDetail.view.frame = details[5].view.frame
+        view.addSubview(extDetail.view, positioned: .below, relativeTo: details[5].view)
+        view.animator().frame = frame
+        
+        delegate?.changeShowsExtShip(self, showsExtShip: true)
+    }
+    
+    private func hideExtShip() {
+        
+        print("hide ext ship")
+        guard type == .detailViewType else { return }
+        
+        guard let extDetail = extDetail else { return }
+        
+        var frame = view.frame
+        frame.size.width -= extDetail.view.frame.width - 1
+        view.animator().frame = frame
+        
+        ships.removeLast()
+        
+        DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
+            extDetail.view.removeFromSuperview()
+        }
+        
+        self.extDetail = nil
+        
+        delegate?.changeShowsExtShip(self, showsExtShip: false)
+    }
+    
+    private func checkExtShip() {
+        
+        fleet.map { print($0) }
+        
+        guard type == .detailViewType else { return }
+        
+        if fleet?[6] != nil {
+            
+            showExtShip()
+            
+        } else {
+            
+            hideExtShip()
+        }
+    }
+}
+
 extension FleetViewController: NibLoadable {}