OSDN Git Service

改修工廠メニューをカテゴリで表示できるようにした
authormasakih <masakih@users.sourceforge.jp>
Sun, 26 Mar 2017 12:27:43 +0000 (21:27 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sun, 26 Mar 2017 12:27:43 +0000 (21:27 +0900)
KCD/Base.lproj/StrengthenListViewController.xib
KCD/StrengthenListViewController.swift

index 07ec917..4c637a6 100644 (file)
             <rect key="frame" x="0.0" y="0.0" width="323" height="394"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <matrix verticalHuggingPriority="750" allowsEmptySelection="NO" autorecalculatesCellSize="YES" id="yJV-Se-HVC">
-                    <rect key="frame" x="6" y="367" width="148" height="18"/>
+                <matrix verticalHuggingPriority="750" misplaced="YES" allowsEmptySelection="NO" autorecalculatesCellSize="YES" id="yJV-Se-HVC">
+                    <rect key="frame" x="6" y="370" width="133" height="18"/>
                     <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
                     <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
-                    <size key="cellSize" width="47" height="18"/>
+                    <size key="cellSize" width="43" height="18"/>
                     <size key="intercellSpacing" width="2" height="2"/>
-                    <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="9su-cb-kXx">
+                    <buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" controlSize="small" inset="2" id="9su-cb-kXx">
                         <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                        <font key="font" metaFont="system"/>
+                        <font key="font" metaFont="smallSystem"/>
                     </buttonCell>
                     <cells>
                         <column>
-                            <buttonCell type="radio" title="今日" imagePosition="left" alignment="left" state="on" inset="2" id="VyU-4m-N4y">
+                            <buttonCell type="radio" title="今日" imagePosition="left" alignment="left" controlSize="small" state="on" inset="2" id="VyU-4m-N4y">
                                 <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
+                                <font key="font" metaFont="smallSystem"/>
                             </buttonCell>
                         </column>
                         <column>
-                            <buttonCell type="radio" title="明日" imagePosition="left" alignment="left" tag="1" inset="2" id="4ig-3d-Zd6">
+                            <buttonCell type="radio" title="明日" imagePosition="left" alignment="left" controlSize="small" tag="1" inset="2" id="4ig-3d-Zd6">
                                 <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
+                                <font key="font" metaFont="smallSystem"/>
                             </buttonCell>
                         </column>
                         <column>
-                            <buttonCell type="radio" title="全て" imagePosition="left" alignment="left" tag="-1" inset="2" id="2gA-iz-YbS">
+                            <buttonCell type="radio" title="全て" imagePosition="left" alignment="left" controlSize="small" tag="-1" inset="2" id="2gA-iz-YbS">
                                 <behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
-                                <font key="font" metaFont="system"/>
+                                <font key="font" metaFont="smallSystem"/>
                             </buttonCell>
                         </column>
                     </cells>
                         <binding destination="-2" name="selectedTag" keyPath="offsetDay" id="44u-FC-Nab"/>
                     </connections>
                 </matrix>
-                <scrollView autohidesScrollers="YES" horizontalLineScroll="104" horizontalPageScroll="10" verticalLineScroll="104" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="0L6-8Q-wSg">
-                    <rect key="frame" x="6" y="8" width="311" height="355"/>
+                <scrollView misplaced="YES" autohidesScrollers="YES" horizontalLineScroll="104" horizontalPageScroll="10" verticalLineScroll="104" verticalPageScroll="10" usesPredominantAxisScrolling="NO" id="0L6-8Q-wSg">
+                    <rect key="frame" x="6" y="8" width="311" height="332"/>
                     <autoresizingMask key="autoresizingMask" heightSizable="YES"/>
                     <clipView key="contentView" id="wXf-Rt-Pl7">
-                        <rect key="frame" x="1" y="1" width="309" height="353"/>
+                        <rect key="frame" x="1" y="1" width="309" height="330"/>
                         <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                         <subviews>
                             <tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" selectionHighlightStyle="none" alternatingRowBackgroundColors="YES" columnSelection="YES" multipleSelection="NO" autosaveColumns="NO" rowHeight="103" rowSizeStyle="automatic" viewBased="YES" id="vl3-HU-3qA">
-                                <rect key="frame" x="0.0" y="0.0" width="309" height="353"/>
+                                <rect key="frame" x="0.0" y="0.0" width="309" height="330"/>
                                 <autoresizingMask key="autoresizingMask"/>
                                 <size key="intercellSpacing" width="3" height="1"/>
                                 <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
                         <autoresizingMask key="autoresizingMask"/>
                     </scroller>
                 </scrollView>
+                <segmentedControl verticalHuggingPriority="750" misplaced="YES" id="K6N-di-SOa">
+                    <rect key="frame" x="4" y="346" width="315" height="20"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <segmentedCell key="cell" controlSize="small" borderStyle="border" alignment="left" style="rounded" trackingMode="selectOne" id="Ury-Lz-cPA">
+                        <font key="font" metaFont="smallSystem"/>
+                        <segments>
+                            <segment label="All" width="46" selected="YES"/>
+                            <segment label="主砲" width="41" tag="1"/>
+                            <segment label="副砲/魚雷/機銃" width="76"/>
+                            <segment label="航空機"/>
+                            <segment label="電探" width="47"/>
+                            <segment label="そのた"/>
+                        </segments>
+                    </segmentedCell>
+                    <connections>
+                        <binding destination="-2" name="selectedIndex" keyPath="filterType" id="ExG-wb-sLZ"/>
+                    </connections>
+                </segmentedControl>
             </subviews>
             <point key="canvasLocation" x="211.5" y="313"/>
         </customView>
index 7cdfbbe..2523120 100644 (file)
@@ -11,29 +11,85 @@ import Cocoa
 fileprivate let resourceName = "EnhancementListItem2"
 fileprivate let resourceExtension = "plist"
 
+
+fileprivate struct FilterCategories {
+    static let allType: [EquipmentType] = (1...100).flatMap { EquipmentType(rawValue: $0) }
+    static let canonType: [EquipmentType] = [.smallCaliberMainGun, .mediumCaliberMainGun,
+                                             .largeCaliberMainGun, .largeCaliberMainGunII]
+    static let torpedoType: [EquipmentType] = [.secondaryGun, .torpedo, .depthCharge,
+                                               .antiAircraftGun, .antiSunmrinerSercher, .submarinTorpedo,
+                                               .largeSonar]
+    static let airplaneType: [EquipmentType] = [.fighter, .bomber, .attacker, .searcher,
+                                                .airplaneSearcher, .airplaneBomber,
+                                                .largeAirplane, .airplaneFighter,
+                                                .landAttecker, .localFighter,
+                                                .jetFighter, .jetBomber,
+                                                .jetAttacker, .jetSearcher,
+                                                .searcherII]
+    static let radarType: [EquipmentType] = [.smallRadar, .largeRadar, .sonar]
+    static let otherType: [EquipmentType] = {
+        return allType
+            .filter { !canonType.contains($0) }
+            .filter { !torpedoType.contains($0) }
+            .filter { !airplaneType.contains($0) }
+            .filter { !radarType.contains($0) }
+    }()
+    
+    enum FilterType: Int {
+        case all = 0
+        case canon
+        case torpedo
+        case airplane
+        case radar
+        case other
+    }
+    
+    let categories: [EquipmentType]
+    
+    init(type: FilterType) {
+        switch type {
+        case .all: categories = FilterCategories.allType
+        case .canon: categories = FilterCategories.canonType
+        case .torpedo: categories = FilterCategories.torpedoType
+        case .airplane: categories = FilterCategories.airplaneType
+        case .radar: categories = FilterCategories.radarType
+        case .other: categories = FilterCategories.otherType
+        }
+    }
+}
+
 class StrengthenListViewController: MainTabVIewItemViewController {
-    private let notifier = PeriodicNotifier(hour: 0, minutes: 0)
-    private let plistDownloadNotifier = PeriodicNotifier(hour: 23, minutes: 55)
-        
+    
     @IBOutlet weak var tableView: NSTableView!
     
     dynamic var itemList: Any { return filteredItems as Any }
-    fileprivate var filteredItems: [StrengthenListItem] = [] {
-        willSet {
-            willChangeValue(forKey: #keyPath(itemList))
-        }
-        didSet {
-            didChangeValue(forKey: #keyPath(itemList))
-        }
-    }
     dynamic var offsetDay: Int = 0 {
         didSet { buildList() }
     }
+    dynamic var filterType: Int = 0 {
+        didSet {
+            if let t = FilterCategories.FilterType(rawValue: filterType) {
+                showsTypes = FilterCategories(type: t).categories
+            } else {
+                showsTypes = FilterCategories.allType
+            }
+            buildList()
+        }
+    }
     override var nibName: String! {
         return "StrengthenListViewController"
     }
+    
+    fileprivate var filteredItems: [StrengthenListItem] = [] {
+        willSet { willChangeValue(forKey: #keyPath(itemList)) }
+        didSet { didChangeValue(forKey: #keyPath(itemList)) }
+    }
+    
+    private let notifier = PeriodicNotifier(hour: 0, minutes: 0)
+    private let plistDownloadNotifier = PeriodicNotifier(hour: 23, minutes: 55)
     private let downloader = EnhancementListItemDownloader()
     private var equipmentStrengthenList: [EnhancementListItem] = []
+    private var showsTypes: [EquipmentType] = FilterCategories.allType
     
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -47,12 +103,6 @@ class StrengthenListViewController: MainTabVIewItemViewController {
             }
             equipmentStrengthenList = array
             buildList()
-            
-            #if DEBUG
-//                downloadPList()
-            #else
-                downloadPList()
-            #endif
         }
         
         let nc = NotificationCenter.default
@@ -64,6 +114,12 @@ class StrengthenListViewController: MainTabVIewItemViewController {
             guard let `self` = self else { return }
             self.downloadPList()
         }
+        
+        #if DEBUG
+//          downloadPList()
+        #else
+            downloadPList()
+        #endif
     }
     private func weekdayFiltered() -> [EnhancementListItem] {
         if offsetDay == -1 { return allItemList() }
@@ -84,6 +140,7 @@ class StrengthenListViewController: MainTabVIewItemViewController {
         filteredItems = filtered
             .map { $0.equipmentType }
             .unique()
+            .filter { showsTypes.contains($0) }
             .map { type in filtered.filter { $0.equipmentType == type } }
             .flatMap(convert)
     }