OSDN Git Service

各種報告書の表を列単位で検索可能にする
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / View / BattleResultPanel.cs
index ee00b91..9b15679 100644 (file)
@@ -23,20 +23,19 @@ using static System.Math;
 \r
 namespace KancolleSniffer.View\r
 {\r
-    public class BattleResultPanel : Panel\r
+    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<ShipLabel> _hpLabels = new List<ShipLabel>();\r
-        private readonly ResizableToolTip _toolTip = new ResizableToolTip {ShowAlways = true};\r
         private readonly BattleInfo.BattleResult[] _result = new BattleInfo.BattleResult[2];\r
-        private Label _phaseLabel, _rankLabel, _cellLabel;\r
-        private BattleState _prevBattleState;\r
+        private Label _phaseLabel, _rankLabel, _supportLabel, _cellLabel;\r
         private readonly BattleResultRank[] _rank = new BattleResultRank[2];\r
         private readonly InformationPanel _informationPanel;\r
         private CellInfo _cellInfo;\r
+        private string _supportType;\r
 \r
         public Spoiler Spoilers { get; set; }\r
 \r
@@ -65,36 +64,42 @@ namespace KancolleSniffer.View
         public void Update(Sniffer sniffer)\r
         {\r
             var state = sniffer.Battle.BattleState;\r
-            var prev = _prevBattleState;\r
-            _prevBattleState = state;\r
             _cellInfo = sniffer.CellInfo;\r
-            if (prev == BattleState.None && state != BattleState.None)\r
-                _result[0] = _result[1] = null;\r
-            if (prev != BattleState.None && state == BattleState.None &&\r
-                !(_result[0] == null && _result[1] == null))\r
+            switch (sniffer.Battle.BattleState)\r
             {\r
-                ClearResult();\r
-                SetPhase("結果");\r
-                UpdateCellInfo(_cellInfo);\r
-                return;\r
+                case BattleState.None:\r
+                    if (_result[0] == null && _result[1] == null)\r
+                        return;\r
+                        ClearResult();\r
+                        SetPhase("結果");\r
+                        UpdateCellInfo(_cellInfo);\r
+                        return;\r
+                case BattleState.Day:\r
+                case BattleState.SpNight:\r
+                    _result[0] = _result[1] = null;\r
+                    break;\r
+                case BattleState.Result:\r
+                case BattleState.Unknown:\r
+                    return;\r
             }\r
-            if (state != BattleState.Day && state != BattleState.Night)\r
-                return;\r
+            _supportType = sniffer.Battle.SupportType;\r
             if ((Spoilers & Spoiler.BattleResult) != 0)\r
             {\r
                 ShowResult(sniffer.Battle.Result);\r
                 ShowResultRank(sniffer.Battle.ResultRank);\r
-                if (state == BattleState.Day)\r
-                {\r
-                    _result[0] = sniffer.Battle.Result;\r
-                    _rank[0] = sniffer.Battle.ResultRank;\r
-                    SetPhase("昼戦");\r
-                }\r
-                else if (state == BattleState.Night)\r
+                switch (state)\r
                 {\r
-                    _result[1] = sniffer.Battle.Result;\r
-                    _rank[1] = sniffer.Battle.ResultRank;\r
-                    SetPhase("夜戦");\r
+                    case BattleState.Day:\r
+                        _result[0] = sniffer.Battle.Result;\r
+                        _rank[0] = sniffer.Battle.ResultRank;\r
+                        SetPhase("昼戦");\r
+                        break;\r
+                    case BattleState.Night:\r
+                    case BattleState.SpNight:\r
+                        _result[1] = sniffer.Battle.Result;\r
+                        _rank[1] = sniffer.Battle.ResultRank;\r
+                        SetPhase("夜戦");\r
+                        break;\r
                 }\r
                 _informationPanel.Visible = true;\r
             }\r
@@ -102,15 +107,17 @@ namespace KancolleSniffer.View
             {\r
                 ClearResult();\r
                 SetPhase("結果");\r
-                if (state == BattleState.Day)\r
+                switch (state)\r
                 {\r
-                    _result[0] = sniffer.Battle.Result;\r
-                    _rank[0] = sniffer.Battle.ResultRank;\r
-                }\r
-                else if (state == BattleState.Night)\r
-                {\r
-                    _result[1] = sniffer.Battle.Result;\r
-                    _rank[1] = sniffer.Battle.ResultRank;\r
+                    case BattleState.Day:\r
+                        _result[0] = sniffer.Battle.Result;\r
+                        _rank[0] = sniffer.Battle.ResultRank;\r
+                        break;\r
+                    case BattleState.Night:\r
+                    case BattleState.SpNight:\r
+                        _result[1] = sniffer.Battle.Result;\r
+                        _rank[1] = sniffer.Battle.ResultRank;\r
+                        break;\r
                 }\r
             }\r
             _informationPanel.SetInformation(sniffer.Battle);\r
@@ -177,6 +184,7 @@ namespace KancolleSniffer.View
                 panel.Visible = false;\r
             _informationPanel.Visible = false;\r
             _rankLabel.Text = "";\r
+            _supportLabel.Text = "";\r
         }\r
 \r
         private void ShowResult(BattleInfo.BattleResult result)\r
@@ -191,7 +199,7 @@ namespace KancolleSniffer.View
                 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
+                ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
             }\r
             if (friend.Guard.Length > 0)\r
             {\r
@@ -203,7 +211,7 @@ namespace KancolleSniffer.View
                     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
+                    ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
                 }\r
             }\r
             var friendLines = friend.Main.Length + (friend.Guard.Length > 0 ? friend.Guard.Length + 1 : 0);\r
@@ -218,7 +226,7 @@ namespace KancolleSniffer.View
                 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
+                ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
             }\r
             if (enemy.Guard.Length > 0)\r
             {\r
@@ -230,7 +238,7 @@ namespace KancolleSniffer.View
                     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
+                    ToolTip.SetToolTip(labels[1], GetEquipString(ship));\r
                 }\r
             }\r
             var enemyLines = enemy.Main.Length + (enemy.Guard.Length > 0 ? enemy.Guard.Length + 1 : 0);\r
@@ -287,6 +295,7 @@ namespace KancolleSniffer.View
         {\r
             var result = new[] {"完全S", "勝利S", "勝利A", "勝利B", "敗北C", "敗北D", "敗北E"};\r
             _rankLabel.Text = result[(int)rank];\r
+            _supportLabel.Text = _supportType;\r
         }\r
 \r
         public void UpdateCellInfo(CellInfo cellInfo)\r
@@ -310,6 +319,12 @@ namespace KancolleSniffer.View
                 Size = new Size(42, 12)\r
             };\r
             Controls.Add(_rankLabel);\r
+            _supportLabel = new Label\r
+            {\r
+                Location = new Point(77, 4),\r
+                AutoSize = true\r
+            };\r
+            Controls.Add(_supportLabel);\r
             _cellLabel = new Label\r
             {\r
                 Location = new Point(0, 4),\r
@@ -378,18 +393,10 @@ namespace KancolleSniffer.View
             base.OnMouseWheel(e);\r
         }\r
 \r
-        protected override void ScaleControl(SizeF factor, BoundsSpecified specified)\r
-        {\r
-            base.ScaleControl(factor, specified);\r
-            if (factor.Height > 1)\r
-                _toolTip.Font = new Font(_toolTip.Font.FontFamily, _toolTip.Font.Size * factor.Height);\r
-        }\r
-\r
-        private class InformationPanel : Panel\r
+        private class InformationPanel : PanelWithToolTip\r
         {\r
             private readonly Label[] _formation;\r
             private readonly Label[] _fighterPower;\r
-            private readonly ResizableToolTip _toolTip = new ResizableToolTip {ShowAlways = true};\r
 \r
             public InformationPanel()\r
             {\r
@@ -454,10 +461,10 @@ namespace KancolleSniffer.View
                 }\r
                 var fp = battleInfo.FighterPower;\r
                 _fighterPower[0].Text = fp[0].ToString("D");\r
-                _toolTip.SetToolTip(_fighterPower[0], fp[0] == fp[1] ? "" : $"{fp[0]}~{fp[1]}");\r
+                ToolTip.SetToolTip(_fighterPower[0], fp[0] == fp[1] ? "" : $"{fp[0]}~{fp[1]}");\r
                 var efp = battleInfo.EnemyFighterPower;\r
                 _fighterPower[1].Text = efp.AirCombat + efp.UnknownMark;\r
-                _toolTip.SetToolTip(_fighterPower[1],\r
+                ToolTip.SetToolTip(_fighterPower[1],\r
                     efp.AirCombat == efp.Interception ? "" : "防空:" + efp.Interception + efp.UnknownMark);\r
                 _fighterPower[2].Text =\r
                     new[] {"", "制空均衡", "制空確保", "航空優勢", "航空劣勢", "制空喪失"}[battleInfo.AirControlLevel + 1];\r
@@ -493,13 +500,6 @@ namespace KancolleSniffer.View
                         return "";\r
                 }\r
             }\r
-\r
-            protected override void ScaleControl(SizeF factor, BoundsSpecified specified)\r
-            {\r
-                base.ScaleControl(factor, specified);\r
-                if (factor.Height > 1)\r
-                    _toolTip.Font = new Font(_toolTip.Font.FontFamily, _toolTip.Font.Size * factor.Height);\r
-            }\r
         }\r
     }\r
 }
\ No newline at end of file