OSDN Git Service

一覧の艦娘の分類をセカンダリに反映させるのに再起動が必要なのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Forms / ListForm.cs
index b10062a..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
@@ -154,7 +208,7 @@ namespace KancolleSniffer.Forms
             Set(panelGroupHeader, InGroupConfig);\r
             Set(panelRepairHeader, InRepairList);\r
             Set(panelFleetHeader, InFleetInfo);\r
-            SetSTypeDropDownVisible(InShipStatus || InRepairList);\r
+            SetSTypeDropDownVisible(InShipStatus || InGroupConfig || InRepairList);\r
         }\r
 \r
         private void SetPanelVisibility()\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