OSDN Git Service

すべてのウィンドウで艦娘名のツールチップに装備を表示する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / View / ShipListPanel / ShipListLabels.cs
index ce7a4e0..dbbad36 100644 (file)
 using System.Collections.Generic;\r
 using System.Drawing;\r
 using System.Windows.Forms;\r
+using KancolleSniffer.Forms;\r
 \r
 namespace KancolleSniffer.View.ShipListPanel\r
 {\r
     public class ShipListLabels\r
     {\r
         private readonly ShipListPanel _shipListPanel;\r
-        private readonly List<ShipLabel[]> _labelList = new List<ShipLabel[]>();\r
-        private readonly List<Panel> _panelList = new List<Panel>();\r
+        private readonly List<ShipLabels> _labelList = new List<ShipLabels>();\r
 \r
         public ShipListLabels(ShipListPanel shipListPanel)\r
         {\r
@@ -33,57 +33,40 @@ namespace KancolleSniffer.View.ShipListPanel
         {\r
             var y = ShipListPanel.LineHeight * i + 1;\r
             const int height = ShipListPanel.LabelHeight;\r
-            var panel = new Panel\r
+            var labels = new ShipLabels\r
             {\r
-                Location = new Point(0, y),\r
-                Size = new Size(ListForm.PanelWidth, ShipListPanel.LineHeight),\r
-                BackColor = CustomColors.ColumnColors.BrightFirst(i)\r
-            };\r
-            Scaler.Scale(panel);\r
-            var labels = new[]\r
-            {\r
-                new ShipLabel\r
-                {\r
-                    Location = new Point(126, 0),\r
-                    AutoSize = true,\r
-                    AnchorRight = true,\r
-                    MinimumSize = new Size(0, ShipListPanel.LineHeight),\r
-                    TextAlign = ContentAlignment.MiddleLeft,\r
-                    Cursor = Cursors.Hand\r
-                },\r
-                new ShipLabel\r
-                {\r
-                    Location = new Point(128, 0),\r
-                    Size = new Size(24, ShipListPanel.LineHeight),\r
-                    TextAlign = ContentAlignment.MiddleRight\r
-                },\r
-                new ShipLabel\r
+                Fleet = new ShipLabel.Fleet(new Point(1, 2)),\r
+                Name = new ShipLabel.Name(new Point(10, 2), ShipNameWidth.ShipList),\r
+                Hp = new ShipLabel.Hp(new Point(126, 0), ShipListPanel.LineHeight),\r
+                Cond = new ShipLabel.Cond(new Point(127, 0), ShipListPanel.LineHeight),\r
+                Level = new ShipLabel.Level(new Point(152, 2), height),\r
+                Exp = new ShipLabel.Exp(new Point(174, 2), height),\r
+                BackPanel =  new Panel\r
                 {\r
-                    Location = new Point(154, 2),\r
-                    Size = new Size(24, height),\r
-                    TextAlign = ContentAlignment.MiddleRight\r
-                },\r
-                new ShipLabel\r
-                {\r
-                    Location = new Point(175, 2),\r
-                    Size = new Size(42, height),\r
-                    TextAlign = ContentAlignment.MiddleRight\r
-                },\r
-                new ShipLabel {Location = new Point(10, 2), AutoSize = true},\r
-                new ShipLabel {Location = new Point(1, 2), AutoSize = true}\r
+                    Location = new Point(0, y),\r
+                    Size = new Size(ListForm.PanelWidth, ShipListPanel.LineHeight),\r
+                    Anchor = AnchorStyles.Right | AnchorStyles.Left | AnchorStyles.Top\r
+                }\r
             };\r
+            SetAnchorRight(labels.Hp, labels.Cond, labels.Level, labels.Exp);\r
             _labelList.Add(labels);\r
-            _panelList.Add(panel);\r
-            // ReSharper disable once CoVariantArrayConversion\r
-            panel.Controls.AddRange(labels);\r
-            _shipListPanel.Controls.Add(panel);\r
-            var unused = panel.Handle; // create handle\r
-            foreach (var label in labels)\r
-            {\r
-                Scaler.Scale(label);\r
-                label.BackColor = CustomColors.ColumnColors.BrightFirst(i);\r
-            }\r
-            _shipListPanel.SetHpPercent(labels[0]);\r
+            labels.Arrange(_shipListPanel, CustomColors.ColumnColors.BrightFirst(i));\r
+            labels.Scale();\r
+            _shipListPanel.SetHpPercent(labels.Hp);\r
+        }\r
+\r
+        private void SetAnchorRight(params Control[] controls)\r
+        {\r
+            foreach (var control in controls)\r
+                control.Anchor = AnchorStyles.Top | AnchorStyles.Right;\r
+        }\r
+\r
+        public void Resize(int i, int width)\r
+        {\r
+            var labels = _labelList[i];\r
+            labels.BackPanel.Width = width;\r
+            labels.Hp.AdjustLocation();\r
+            labels.Name.AdjustWidth(Scaler.DownWidth(width) - ListForm.PanelWidth);\r
         }\r
 \r
         public void SetShipStatus(int i)\r
@@ -95,32 +78,22 @@ namespace KancolleSniffer.View.ShipListPanel
                 SetShipType(i);\r
                 return;\r
             }\r
-            labels[0].SetHp(s);\r
-            labels[1].SetCond(s);\r
-            labels[2].SetLevel(s);\r
-            labels[3].SetExpToNext(s);\r
-            labels[4].SetName(s, ShipNameWidth.ShipList);\r
-            labels[5].SetFleet(s);\r
-            _panelList[i].Visible = true;\r
+            labels.Set(s, _shipListPanel.ToolTip);\r
+            labels.BackPanel.Visible = true;\r
         }\r
 \r
         public void SetShipType(int i)\r
         {\r
             var s = _shipListPanel.GetShip(i);\r
             var labels = _labelList[i];\r
-            labels[0].SetHp(null);\r
-            labels[1].SetCond(null);\r
-            labels[2].SetLevel(null);\r
-            labels[3].SetExpToNext(null);\r
-            labels[4].SetName(null);\r
-            labels[5].SetFleet(null);\r
-            labels[5].Text = s.Name;\r
-            _panelList[i].Visible = true;\r
+            labels.Reset();\r
+            labels.Fleet.Text = s.Name;\r
+            labels.BackPanel.Visible = true;\r
         }\r
 \r
         public void HidePanel(int i)\r
         {\r
-            _panelList[i].Visible = false;\r
+            _labelList[i].BackPanel.Visible = false;\r
         }\r
     }\r
 }
\ No newline at end of file