OSDN Git Service

戦況パネルの一列のラベルと配列で持つのをやめる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 18 May 2019 13:28:35 +0000 (22:28 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 21 May 2019 10:52:10 +0000 (19:52 +0900)
KancolleSniffer/View/BattleResultPanel.cs

index 3ad38fb..65a750a 100644 (file)
@@ -26,9 +26,8 @@ namespace KancolleSniffer.View
     public class BattleResultPanel : PanelWithToolTip\r
     {\r
         private const int LineHeight = 16;\r
-        private readonly List<ShipLabel[]> _friendLabels = new List<ShipLabel[]>();\r
-        private readonly List<ShipLabel[]> _enemyLabels = new List<ShipLabel[]>();\r
-        private readonly List<Panel> _panelList = new List<Panel>();\r
+        private readonly List<ShipLabels> _friendLabels = new List<ShipLabels>();\r
+        private readonly List<ShipLabels> _enemyLabels = new List<ShipLabels>();\r
         private readonly List<ShipLabel> _hpLabels = new List<ShipLabel>();\r
         private readonly BattleInfo.BattleResult[] _result = new BattleInfo.BattleResult[2];\r
         private Label _phaseLabel, _rankLabel, _supportLabel, _cellLabel;\r
@@ -180,8 +179,8 @@ namespace KancolleSniffer.View
         private void ClearResult()\r
         {\r
             _scrollPosition = AutoScrollPosition;\r
-            foreach (var panel in _panelList)\r
-                panel.Visible = false;\r
+            foreach (var labels in _friendLabels)\r
+                labels.BackPanel.Visible = false;\r
             _informationPanel.Visible = false;\r
             _rankLabel.Text = "";\r
             _supportLabel.Text = "";\r
@@ -197,72 +196,69 @@ namespace KancolleSniffer.View
             {\r
                 var labels = _friendLabels[i];\r
                 var ship = friend.Main[i];\r
-                labels[0].SetHp(ship);\r
-                labels[1].SetName(ship, ShipNameWidth.BattleResult);\r
-                ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
+                labels.Name.SetName(ship, ShipNameWidth.BattleResult);\r
+                labels.Hp.SetHp(ship);\r
+                ToolTip.SetToolTip(labels.Name, GetEquipString(ship));\r
             }\r
             if (friend.Guard.Length > 0)\r
             {\r
-                _friendLabels[friend.Main.Length][1].Text = "護衛";\r
-                _friendLabels[friend.Main.Length][0].SetHp(null);\r
+                _friendLabels[friend.Main.Length].Name.Text = "護衛";\r
+                _friendLabels[friend.Main.Length].Hp.SetHp(null);\r
                 for (var i = 0; i < friend.Guard.Length; i++)\r
                 {\r
                     var labels = _friendLabels[friend.Main.Length + 1 + i];\r
                     var ship = friend.Guard[i];\r
-                    labels[0].SetHp(ship);\r
-                    labels[1].SetName(ship, ShipNameWidth.BattleResult);\r
-                    ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
+                    labels.Name.SetName(ship, ShipNameWidth.BattleResult);\r
+                    labels.Hp.SetHp(ship);\r
+                    ToolTip.SetToolTip(labels.Name, GetEquipString(ship));\r
                 }\r
             }\r
             var friendLines = friend.Main.Length + (friend.Guard.Length > 0 ? friend.Guard.Length + 1 : 0);\r
             for (var i = friendLines; i < _friendLabels.Count; i++)\r
             {\r
-                _friendLabels[i][0].SetHp(null);\r
-                _friendLabels[i][1].SetName("");\r
+                _friendLabels[i].Name.SetName("");\r
+                _friendLabels[i].Hp.SetHp(null);\r
             }\r
             for (var i = 0; i < enemy.Main.Length; i++)\r
             {\r
                 var labels = _enemyLabels[i];\r
                 var ship = enemy.Main[i];\r
-                labels[0].SetHp(ship);\r
-                labels[1].SetName(ShortenName(ship.Name));\r
-                ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
+                labels.Name.SetName(ShortenName(ship.Name));\r
+                labels.Hp.SetHp(ship);\r
+                ToolTip.SetToolTip(labels.Name, GetEquipString(ship));\r
             }\r
             if (enemy.Guard.Length > 0)\r
             {\r
-                _enemyLabels[enemy.Main.Length][1].Text = "護衛";\r
-                _enemyLabels[enemy.Main.Length][0].SetHp(null);\r
+                _enemyLabels[enemy.Main.Length].Name.Text = "護衛";\r
+                _enemyLabels[enemy.Main.Length].Hp.SetHp(null);\r
                 for (var i = 0; i < enemy.Guard.Length; i++)\r
                 {\r
                     var labels = _enemyLabels[enemy.Main.Length + 1 + i];\r
                     var ship = enemy.Guard[i];\r
-                    labels[0].SetHp(ship);\r
-                    labels[1].SetName(ShortenName(ship.Name));\r
-                    ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
+                    labels.Name.SetName(ShortenName(ship.Name));\r
+                    labels.Hp.SetHp(ship);\r
+                    ToolTip.SetToolTip(labels.Name, GetEquipString(ship));\r
                 }\r
             }\r
             var enemyLines = enemy.Main.Length + (enemy.Guard.Length > 0 ? enemy.Guard.Length + 1 : 0);\r
             for (var i = enemyLines; i < _enemyLabels.Count; i++)\r
             {\r
-                _enemyLabels[i][0].SetHp(null);\r
-                _enemyLabels[i][1].SetName("");\r
+                _enemyLabels[i].Name.SetName("");\r
+                _enemyLabels[i].Hp.SetHp(null);\r
             }\r
             var lines = Max(friendLines, enemyLines);\r
             for (var i = 0; i < lines; i++)\r
             {\r
-                var panel = _panelList[i];\r
-                if (panel.Visible)\r
-                    continue;\r
-                panel.Location = Scaler.Move(AutoScrollPosition.X, AutoScrollPosition.Y, 0, (int)panel.Tag);\r
+                var panel = _friendLabels[i].BackPanel;\r
                 panel.Visible = true;\r
             }\r
-            for (var i = lines; i < _panelList.Count; i++)\r
-                _panelList[i].Visible = false;\r
+            for (var i = lines; i < _friendLabels.Count; i++)\r
+                _friendLabels[i].BackPanel.Visible = false;\r
             ResumeLayout(); // スクロールバーの有無を決定する\r
             var panelWidth = Max(ClientSize.Width, // スクロールバーの有無を反映した横幅\r
-                _enemyLabels[0][1].Location.X + _enemyLabels.Max(labels => labels[1].Size.Width) - 1); // 敵の名前の右端\r
+                _enemyLabels[0].Name.Location.X + _enemyLabels.Max(labels => labels.Name.Size.Width) - 1); // 敵の名前の右端\r
             for (var i = 0; i < lines; i++)\r
-                _panelList[i].Width = panelWidth;\r
+                _friendLabels[i].BackPanel.Width = panelWidth;\r
             _informationPanel.Location = Scaler.Move(AutoScrollPosition.X, AutoScrollPosition.Y, 0, 20);\r
             _informationPanel.Visible = true;\r
             UpdateCellInfo(_cellInfo);\r
@@ -332,19 +328,10 @@ namespace KancolleSniffer.View
             for (var i = 0; i < 13; i++)\r
             {\r
                 var y = LineHeight * i + 38;\r
-                var panel = new Panel\r
+                var friend = new ShipLabels\r
                 {\r
-                    Location = new Point(0, y),\r
-                    Size = new Size(0, LineHeight),\r
-                    BackColor = CustomColors.ColumnColors.DarkFirst(i),\r
-                    Visible = false,\r
-                    Tag = y\r
-                };\r
-                _panelList.Add(panel);\r
-\r
-                var friend = new[]\r
-                {\r
-                    new ShipLabel\r
+                    Name = new ShipLabel {Location = new Point(1, 2), AutoSize = true},\r
+                    Hp = new ShipLabel\r
                     {\r
                         Location = new Point(101, 0),\r
                         AutoSize = true,\r
@@ -353,29 +340,30 @@ namespace KancolleSniffer.View
                         TextAlign = ContentAlignment.MiddleLeft,\r
                         Cursor = Cursors.Hand\r
                     },\r
-                    new ShipLabel {Location = new Point(1, 2), AutoSize = true}\r
+                    BackPanel = new Panel\r
+                    {\r
+                        Location = new Point(0, y),\r
+                        Size = new Size(0, LineHeight),\r
+                        BackColor = CustomColors.ColumnColors.DarkFirst(i),\r
+                    }\r
                 };\r
                 _friendLabels.Add(friend);\r
-                _hpLabels.Add(friend[0]);\r
-                friend[0].Click += HpLabelClickHandler;\r
-                var enemy = new[]\r
+                friend.Arrange(this, CustomColors.ColumnColors.DarkFirst(i));\r
+                _hpLabels.Add(friend.Hp);\r
+                friend.Hp.Click += HpLabelClickHandler;\r
+                var enemy = new ShipLabels\r
                 {\r
-                    new ShipLabel\r
+                    Name = new ShipLabel {Location = new Point(164, 2), AutoSize = true},\r
+                    Hp = new ShipLabel\r
                     {\r
                         Location = new Point(119, 0),\r
                         AutoSize = true,\r
                         MinimumSize = new Size(0, LineHeight),\r
                         TextAlign = ContentAlignment.MiddleLeft\r
-                    },\r
-                    new ShipLabel {Location = new Point(164, 2), AutoSize = true}\r
+                    }\r
                 };\r
                 _enemyLabels.Add(enemy);\r
-                foreach (var label in friend.Concat(enemy))\r
-                {\r
-                    panel.Controls.Add(label);\r
-                    label.BackColor = CustomColors.ColumnColors.DarkFirst(i);\r
-                }\r
-                Controls.Add(panel);\r
+                enemy.Arrange(friend.BackPanel, CustomColors.ColumnColors.DarkFirst(i));\r
             }\r
         }\r
 \r