OSDN Git Service

ShipLabelで可変長右端固定のレイアウトを可能にする
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Fri, 12 Dec 2014 13:47:16 +0000 (22:47 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Wed, 17 Dec 2014 14:44:05 +0000 (23:44 +0900)
KancolleSniffer/ShipInfoLabels.cs
KancolleSniffer/ShipListForm.cs

index dc9e390..0b15f6c 100644 (file)
@@ -25,7 +25,6 @@ namespace KancolleSniffer
     public class ShipInfoLabels\r
     {\r
         private readonly ShipLabel[][] _labels = new ShipLabel[ShipInfo.MemberCount][];\r
-        private const int LabelHpRight = 130;\r
         private readonly Label[] _akashiTimers = new Label[ShipInfo.MemberCount];\r
         public static Color[] ColumnColors = {SystemColors.Control, Color.FromArgb(255, 250, 250, 250)};\r
 \r
@@ -58,7 +57,7 @@ namespace KancolleSniffer
                 var y = top + lh * (i + 1);\r
                 parent.Controls.AddRange(_labels[i] = new[]\r
                 {\r
-                    new ShipLabel {Location = new Point(LabelHpRight, y), AutoSize = true},\r
+                    new ShipLabel {Location = new Point(130, y), AutoSize = true, AnchorRight = true},\r
                     new ShipLabel\r
                     {\r
                         Location = new Point(136, y),\r
@@ -80,7 +79,6 @@ namespace KancolleSniffer
                     new ShipLabel {Location = new Point(2, y), AutoSize = true}, // 名前のZ-orderを下に\r
                     new ShipLabel {Location = new Point(0, y - 2), Size = new Size(parent.Width, lh - 1)}\r
                 });\r
-                _labels[i][0].SizeChanged += labelHP_SizeChanged;\r
                 foreach (var label in _labels[i])\r
                 {\r
                     label.Scale(ShipLabel.ScaleFactor);\r
@@ -92,13 +90,6 @@ namespace KancolleSniffer
             parent.ResumeLayout();\r
         }\r
 \r
-        private void labelHP_SizeChanged(object sender, EventArgs e)\r
-        {\r
-            var label = (Label)sender;\r
-            label.Location =\r
-                new Point((int)Math.Round(LabelHpRight * ShipLabel.ScaleFactor.Width) - label.Width, label.Top);\r
-        }\r
-\r
         public void SetShipInfo(ShipStatus[] statuses)\r
         {\r
             var empty = new ShipStatus();\r
@@ -164,6 +155,9 @@ namespace KancolleSniffer
     {\r
         public static SizeF ScaleFactor { get; set; }\r
         public Color PresetColor { get; set; }\r
+        public bool AnchorRight { get; set; }\r
+        private int _right = int.MinValue;\r
+        private int _left;\r
 \r
         public void SetName(ShipStatus status)\r
         {\r
@@ -231,5 +225,22 @@ namespace KancolleSniffer
             var t = status.RepairTime;\r
             Text = string.Format(@"{0:d2}:{1:mm\:ss}", (int)t.TotalHours, t);\r
         }\r
+\r
+        protected override void OnLayout(LayoutEventArgs levent)\r
+        {\r
+            base.OnLayout(levent);\r
+            if (!AnchorRight)\r
+                return;\r
+            if (_right == int.MinValue || _left != Left)\r
+            {\r
+                _right = Right;\r
+                _left = Left;\r
+                return;\r
+            }\r
+            if (_right == Right)\r
+                return;\r
+            _left -= Right - _right;\r
+            Location = new Point(_left, Top);\r
+        }\r
     }\r
 }
\ No newline at end of file
index bb3e3b6..e689341 100644 (file)
@@ -29,7 +29,6 @@ namespace KancolleSniffer
         private readonly Config _config;\r
         private const int LabelHeight = 12;\r
         private const int LineHeight = 16;\r
-        private const int HpLabelRight = 126;\r
         private const int PanelWidth = 232;\r
         private ShipStatus[] _currentList;\r
         private readonly List<ShipLabel[]> _labelList = new List<ShipLabel[]>();\r
@@ -186,17 +185,17 @@ namespace KancolleSniffer
                 },\r
                 new ShipLabel {Location = new Point(73, 1), AutoSize = true}\r
             };\r
+            _repairLabelList.Add(rpl);\r
+            _repairPanelList.Add(rpp);\r
+// ReSharper disable once CoVariantArrayConversion\r
+            rpp.Controls.AddRange(rpl);\r
+            panelShipList.Controls.Add(rpp);\r
             foreach (var label in rpl)\r
             {\r
                 label.Scale(ShipLabel.ScaleFactor);\r
                 label.PresetColor =\r
                     label.BackColor = ShipInfoLabels.ColumnColors[(i + 1) % 2];\r
             }\r
-            _repairLabelList.Add(rpl);\r
-            _repairPanelList.Add(rpp);\r
-// ReSharper disable once CoVariantArrayConversion\r
-            rpp.Controls.AddRange(rpl);\r
-            panelShipList.Controls.Add(rpp);\r
         }\r
 \r
         private void CreateShipLabels(int i)\r
@@ -215,7 +214,7 @@ namespace KancolleSniffer
             lbp.Tag = lbp.Location.Y;\r
             var labels = new[]\r
             {\r
-                new ShipLabel {Location = new Point(HpLabelRight, 1), AutoSize = true},\r
+                new ShipLabel {Location = new Point(126, 1), AutoSize = true, AnchorRight = true},\r
                 new ShipLabel\r
                 {\r
                     Location = new Point(132, 1),\r
@@ -238,18 +237,17 @@ namespace KancolleSniffer
                 new ShipLabel {Location = new Point(1, 1), AutoSize = true},\r
                 new ShipLabel {Location = new Point(0, 0), Size = new Size(PanelWidth, lh - 1)}\r
             };\r
+            _labelList.Add(labels);\r
+            _labelPanelList.Add(lbp);\r
+// ReSharper disable once CoVariantArrayConversion\r
+            lbp.Controls.AddRange(labels);\r
+            panelShipList.Controls.Add(lbp);\r
             foreach (var label in labels)\r
             {\r
                 label.Scale(ShipLabel.ScaleFactor);\r
                 label.PresetColor =\r
                     label.BackColor = ShipInfoLabels.ColumnColors[(i + 1) % 2];\r
             }\r
-            _labelList.Add(labels);\r
-            _labelPanelList.Add(lbp);\r
-// ReSharper disable once CoVariantArrayConversion\r
-            lbp.Controls.AddRange(labels);\r
-            panelShipList.Controls.Add(lbp);\r
-            labels[0].SizeChanged += labelHP_SizeChanged;\r
         }\r
 \r
         private void SetShipLabels()\r
@@ -337,13 +335,6 @@ namespace KancolleSniffer
             return comboBoxGroup.Text == "修復";\r
         }\r
 \r
-        private void labelHP_SizeChanged(object sender, EventArgs e)\r
-        {\r
-            var label = (Label)sender;\r
-            label.Location = new Point(\r
-                (int)Math.Round(HpLabelRight * ShipLabel.ScaleFactor.Width - label.Width), label.Top);\r
-        }\r
-\r
         private void ShipListForm_Load(object sender, EventArgs e)\r
         {\r
             panelShipList.Width = (int)Math.Round(PanelWidth * ShipLabel.ScaleFactor.Width) + 3 +\r