OSDN Git Service

一覧の艦娘の分類をセカンダリに反映させるのに再起動が必要なのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 16 Sep 2020 10:30:12 +0000 (19:30 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 16 Sep 2020 10:30:12 +0000 (19:30 +0900)
KancolleSniffer/Forms/ListForm.cs
KancolleSniffer/View/ShipListPanel/GroupConfigLabels.cs
KancolleSniffer/View/ShipListPanel/ShipListPanel.cs

index c837c30..69c14c8 100644 (file)
@@ -103,7 +103,48 @@ namespace KancolleSniffer.Forms
                 shipListPanel.ToggleHpPercent();\r
                 battleResultPanel.ToggleHpPercent();\r
             }\r
-            LoadShipGroupFromConfig();\r
+        }\r
+\r
+        private ShipListConfig GetConfig()\r
+        {\r
+            if (_isMaster)\r
+            {\r
+                SetGroup();\r
+                return _config.ShipList;\r
+            }\r
+            if (_config.ListFormGroup.Count == 0)\r
+                return CreateSecondaryConfig();\r
+            var config = _config.ListFormGroup[0];\r
+            _config.ListFormGroup.RemoveAt(0);\r
+            config.ShipGroup = _config.ShipList.ShipGroup;\r
+            return config;\r
+        }\r
+\r
+        private ShipListConfig CreateSecondaryConfig()\r
+        {\r
+            var src = _config.ShipList;\r
+            var config = new ShipListConfig\r
+            {\r
+                Mode = src.Mode,\r
+                ShipCategories = src.ShipCategories,\r
+                ShipType = src.ShipType,\r
+                ShowHpInPercent = src.ShowHpInPercent,\r
+                SortOrder = src.SortOrder,\r
+                Location = src.Location,\r
+                Size = src.Size,\r
+                ShipGroup = src.ShipGroup\r
+            };\r
+            if (config.Mode == "分類" || string.IsNullOrEmpty(config.Mode))\r
+                config.Mode = "全艦";\r
+            return config;\r
+        }\r
+\r
+        private void SetGroup()\r
+        {\r
+            var groups = _config.ShipList.ShipGroup;\r
+            for (var i = groups.Count; i < GroupConfigLabels.GroupCount; i++)\r
+                groups.Add(new List<int>());\r
+            shipListPanel.GroupSettings = groups;\r
         }\r
 \r
         public void UpdateList()\r
@@ -135,12 +176,25 @@ namespace KancolleSniffer.Forms
             }\r
             if (shipListPanel.GroupUpdated)\r
             {\r
-                StoreShipGroupToConfig();\r
+                PurifyShipGroup();\r
                 _config.Save();\r
                 shipListPanel.GroupUpdated = false;\r
             }\r
         }\r
 \r
+        private void PurifyShipGroup()\r
+        {\r
+            var all = _sniffer.ShipList.Select(s => s.Id).ToArray();\r
+            if (all.Length == 0)\r
+                return;\r
+            foreach (var g in _config.ShipList.ShipGroup)\r
+            {\r
+                var filtered = g.Intersect(all).ToArray();\r
+                g.Clear();\r
+                g.AddRange(filtered);\r
+            }\r
+        }\r
+\r
         private void SetHeaderVisibility()\r
         {\r
             static void Set(Control header, bool visible)\r
@@ -287,43 +341,8 @@ namespace KancolleSniffer.Forms
 \r
         private void SetMinimumSize()\r
         {\r
-            MinimumSize = new Size(Width - Scaler.ScaleWidth(24) - SystemInformation.VerticalScrollBarWidth * (_config.Zoom - 100) / 100, 0);\r
-        }\r
-\r
-        private ShipListConfig GetConfig()\r
-        {\r
-            if (_isMaster)\r
-                return _config.ShipList;\r
-            if (_config.ListFormGroup.Count == 0)\r
-                return CreateSecondaryConfig();\r
-            var config = _config.ListFormGroup[0];\r
-            _config.ListFormGroup.RemoveAt(0);\r
-            return config;\r
-        }\r
-\r
-        private ShipListConfig CreateSecondaryConfig()\r
-        {\r
-            var src = _config.ShipList;\r
-            var config = new ShipListConfig\r
-            {\r
-                Mode = src.Mode,\r
-                ShipCategories = src.ShipCategories,\r
-                ShipType = src.ShipType,\r
-                ShowHpInPercent = src.ShowHpInPercent,\r
-                SortOrder = src.SortOrder,\r
-                Location = src.Location,\r
-                Size = src.Size\r
-            };\r
-            if (config.Mode == "分類" || string.IsNullOrEmpty(config.Mode))\r
-                config.Mode = "全艦";\r
-            return config;\r
-        }\r
-\r
-        private void LoadShipGroupFromConfig()\r
-        {\r
-            var group = _config.ShipList.ShipGroup;\r
-            for (var i = 0; i < GroupConfigLabels.GroupCount; i++)\r
-                shipListPanel.GroupSettings[i] = i < group.Count ? new HashSet<int>(group[i]) : new HashSet<int>();\r
+            MinimumSize = new Size(Width - Scaler.ScaleWidth(24) -\r
+                                   SystemInformation.VerticalScrollBarWidth * (_config.Zoom - 100) / 100, 0);\r
         }\r
 \r
         private void SetCheckBoxSTypeState()\r
@@ -354,7 +373,7 @@ namespace KancolleSniffer.Forms
 \r
         private void SaveMasterState()\r
         {\r
-            StoreShipGroupToConfig();\r
+            PurifyShipGroup();\r
             _listConfig.Visible = Visible && WindowState == FormWindowState.Normal;\r
             SaveBounds(_listConfig); // 最小化時は以前のサイズを記録する\r
         }\r
@@ -366,6 +385,7 @@ namespace KancolleSniffer.Forms
             if (WindowState != FormWindowState.Normal) // 最小化時は次回復旧しない\r
                 return;\r
             _listConfig.Visible = true;\r
+            _listConfig.ShipGroup = null;\r
             _config.ListFormGroup.Add(_listConfig);\r
             SaveBounds(_listConfig);\r
         }\r
@@ -419,19 +439,6 @@ namespace KancolleSniffer.Forms
             Owner = null;\r
         }\r
 \r
-        private void StoreShipGroupToConfig()\r
-        {\r
-            var all = _sniffer.ShipList.Select(s => s.Id).ToArray();\r
-            var group = _config.ShipList.ShipGroup;\r
-            group.Clear();\r
-            for (var i = 0; i < GroupConfigLabels.GroupCount; i++)\r
-            {\r
-                if (all.Length > 0)\r
-                    shipListPanel.GroupSettings[i].IntersectWith(all);\r
-                group.Add(shipListPanel.GroupSettings[i].ToList());\r
-            }\r
-        }\r
-\r
         public void ShowShip(int id)\r
         {\r
             if (!Visible)\r
@@ -627,7 +634,8 @@ namespace KancolleSniffer.Forms
 \r
         private void ListForm_ResizeEnd(object sender, EventArgs e)\r
         {\r
-            foreach (var panel in new IPanelResize[] {shipListPanel, antiAirPanel, airBattleResultPanel, battleResultPanel, fleetPanel})\r
+            foreach (var panel in new IPanelResize[]\r
+                {shipListPanel, antiAirPanel, airBattleResultPanel, battleResultPanel, fleetPanel})\r
             {\r
                 if (panel.Visible)\r
                     panel.ApplyResize();\r
index d135517..b98815d 100644 (file)
@@ -18,7 +18,6 @@ using System.Drawing;
 using System.Linq;\r
 using System.Windows.Forms;\r
 using KancolleSniffer.Forms;\r
-using KancolleSniffer.Model;\r
 \r
 // ReSharper disable CoVariantArrayConversion\r
 \r
@@ -31,7 +30,7 @@ namespace KancolleSniffer.View.ShipListPanel
         private readonly List<ShipLabels> _labelList = new List<ShipLabels>();\r
 \r
         public const int GroupCount = 4;\r
-        public HashSet<int>[] GroupSettings { get; } = new HashSet<int>[GroupCount];\r
+        public List<List<int>> GroupSettings { get; set; }\r
         public bool GroupUpdated { get; set; }\r
 \r
         public GroupConfigLabels(ShipListPanel shipListPanel)\r
@@ -123,13 +122,5 @@ namespace KancolleSniffer.View.ShipListPanel
         {\r
             _labelList[i].BackPanel.Visible = false;\r
         }\r
-\r
-        public IEnumerable<ShipStatus> FilterByGroup(IEnumerable<ShipStatus> ships, string group)\r
-        {\r
-            var g = Array.FindIndex(new[] {"A", "B", "C", "D"}, x => x == group);\r
-            if (g == -1)\r
-                return ships;\r
-            return from s in ships where GroupSettings[g].Contains(s.Id) select s;\r
-        }\r
     }\r
 }
\ No newline at end of file
index bf590c4..4cfb47d 100644 (file)
@@ -37,7 +37,12 @@ namespace KancolleSniffer.View.ShipListPanel
         private string _mode;\r
         private bool _hpPercent;\r
 \r
-        public HashSet<int>[] GroupSettings => _groupConfigLabels.GroupSettings;\r
+        public List<List<int>> GroupSettings\r
+        {\r
+            get => _groupConfigLabels.GroupSettings;\r
+            set => _groupConfigLabels.GroupSettings = value;\r
+        }\r
+\r
 \r
         public bool GroupUpdated\r
         {\r
@@ -118,7 +123,7 @@ namespace KancolleSniffer.View.ShipListPanel
         private void CreateShipList(Sniffer sniffer, ShipListConfig settings)\r
         {\r
             var ships = FilterByShipTypes(\r
-                _mode == "修復" ? sniffer.RepairList : _groupConfigLabels.FilterByGroup(sniffer.ShipList, _mode),\r
+                _mode == "修復" ? sniffer.RepairList : FilterByGroup(sniffer.ShipList, settings.ShipGroup, _mode),\r
                 settings.ShipCategories).ToArray();\r
             var order = _mode == "修復" ? ListForm.SortOrder.Repair : settings.SortOrder;\r
             if (!settings.ShipType)\r
@@ -134,6 +139,17 @@ namespace KancolleSniffer.View.ShipListPanel
                 }).Concat(ships).OrderBy(ship => ship, new CompareShip(true, order)).ToArray();\r
         }\r
 \r
+        private static IEnumerable<ShipStatus> FilterByGroup(IEnumerable<ShipStatus> ships,\r
+            IReadOnlyList<List<int>> groups, string groupName)\r
+        {\r
+            var g = Array.FindIndex(new[] {"A", "B", "C", "D"}, x => x == groupName);\r
+            if (g == -1)\r
+                return ships;\r
+            if (groups.Count == 0)\r
+                return new ShipStatus[0];\r
+            return from s in ships where groups[g].Contains(s.Id) select s;\r
+        }\r
+\r
         private static readonly int[][] ShipTypeIds =\r
         {\r
             new[] // 戦艦\r