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
}\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
\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
\r
private void SaveMasterState()\r
{\r
- StoreShipGroupToConfig();\r
+ PurifyShipGroup();\r
_listConfig.Visible = Visible && WindowState == FormWindowState.Normal;\r
SaveBounds(_listConfig); // 最小化時は以前のサイズを記録する\r
}\r
if (WindowState != FormWindowState.Normal) // 最小化時は次回復旧しない\r
return;\r
_listConfig.Visible = true;\r
+ _listConfig.ShipGroup = null;\r
_config.ListFormGroup.Add(_listConfig);\r
SaveBounds(_listConfig);\r
}\r
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
\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
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
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
}).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