OSDN Git Service

装備のないスロットがあるのをわかるようにする
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / View / ShipListPanel.cs
index e8a23d9..42ec807 100644 (file)
@@ -242,8 +242,6 @@ namespace KancolleSniffer.View
                         return b.Level - a.Level;\r
                     if (_order == ListForm.SortOrder.ExpToNextDescend)\r
                         return a.Level - b.Level;\r
-                    if (!_shipType) // Condが同じかSortOrder.Noneで艦種なし\r
-                        return b.Level - a.Level;\r
                 }\r
                 if (a.ExpToNext != b.ExpToNext)\r
                 {\r
@@ -252,8 +250,20 @@ namespace KancolleSniffer.View
                     if (_order == ListForm.SortOrder.ExpToNextDescend)\r
                         return b.ExpToNext - a.ExpToNext;\r
                 }\r
-                if (a.Spec.SortId != b.Spec.SortId)\r
-                    return a.Spec.SortId - b.Spec.SortId;\r
+                if (_shipType)\r
+                {\r
+                    if (a.Spec.SortId != b.Spec.SortId)\r
+                        return a.Spec.SortId - b.Spec.SortId;\r
+                    if (a.Level != b.Level)\r
+                        return b.Level - a.Level;\r
+                }\r
+                else\r
+                {\r
+                    if (a.Level != b.Level)\r
+                        return b.Level - a.Level;\r
+                    if (a.Spec.SortId != b.Spec.SortId)\r
+                        return a.Spec.SortId - b.Spec.SortId;\r
+                }\r
                 return a.Id - b.Id;\r
             }\r
         }\r
@@ -266,12 +276,6 @@ namespace KancolleSniffer.View
                 CreateRepairLabels(i);\r
                 CreateShipLabels(i);\r
             }\r
-            for (var i = 0; i * LineHeight < Height; i++)\r
-            {\r
-                _labelPanelList[i].Visible = InShipStatus(_mode);\r
-                _groupingPanelList[i].Visible = _mode == "分類";\r
-                _repairPanelList[i].Visible = _mode == "修復";\r
-            }\r
             SetupScrollBar();\r
         }\r
 \r
@@ -338,6 +342,7 @@ namespace KancolleSniffer.View
             panel.Controls.AddRange(cb);\r
             // ReSharper restore CoVariantArrayConversion\r
             Controls.Add(panel);\r
+            var unused = panel.Handle; // create handle\r
             foreach (var label in labels)\r
             {\r
                 label.Scale();\r
@@ -401,6 +406,7 @@ namespace KancolleSniffer.View
             // ReSharper disable once CoVariantArrayConversion\r
             panel.Controls.AddRange(labels);\r
             Controls.Add(panel);\r
+            var unused = panel.Handle; // create handle\r
             foreach (var label in labels)\r
             {\r
                 label.Scale();\r
@@ -461,6 +467,7 @@ namespace KancolleSniffer.View
             // ReSharper disable once CoVariantArrayConversion\r
             panel.Controls.AddRange(labels);\r
             Controls.Add(panel);\r
+            var unused = panel.Handle; // create handle\r
             foreach (var label in labels)\r
             {\r
                 label.Scale();\r
@@ -477,6 +484,9 @@ namespace KancolleSniffer.View
         {\r
             for (var i = 0; i < (Height + LineHeight - 1) / LineHeight; i++)\r
             {\r
+                HidePanels(i);\r
+                if (i + ScrollBar.Value >= _shipList.Length)\r
+                    continue;\r
                 if (InShipStatus(_mode))\r
                     SetShipStatus(i);\r
                 if (_mode == "分類")\r
@@ -486,22 +496,20 @@ namespace KancolleSniffer.View
             }\r
         }\r
 \r
+        private void HidePanels(int i)\r
+        {\r
+            _labelPanelList[i].Visible = _groupingPanelList[i].Visible = _repairPanelList[i].Visible = false;\r
+        }\r
+\r
         private bool InShipStatus(string mode) => Array.Exists(new[] {"全艦", "A", "B", "C", "D"}, x => mode == x);\r
 \r
         private void SetShipStatus(int i)\r
         {\r
-            var panel = _labelPanelList[i];\r
-            if (i + ScrollBar.Value >= _shipList.Length)\r
-            {\r
-                panel.Visible = false;\r
-                return;\r
-            }\r
             var s = _shipList[i + ScrollBar.Value];\r
             var labels = _labelList[i];\r
             if (s.Level == 1000) // 艦種の表示\r
             {\r
                 SetShipType(i);\r
-                panel.Visible = true;\r
                 return;\r
             }\r
             labels[0].SetHp(s);\r
@@ -510,7 +518,7 @@ namespace KancolleSniffer.View
             labels[3].SetExpToNext(s);\r
             labels[4].SetName(s, ShipNameWidth.ShipList);\r
             labels[5].SetFleet(s);\r
-            panel.Visible = true;\r
+            _labelPanelList[i].Visible = true;\r
         }\r
 \r
         private void SetShipType(int i)\r
@@ -524,22 +532,15 @@ namespace KancolleSniffer.View
             labels[4].SetName(null);\r
             labels[5].SetFleet(null);\r
             labels[5].Text = s.Name;\r
+            _labelPanelList[i].Visible = true;\r
         }\r
 \r
         private void SetGrouping(int i)\r
         {\r
-            var panel = _groupingPanelList[i];\r
-            if (i + ScrollBar.Value >= _shipList.Length)\r
-            {\r
-                panel.Visible = false;\r
-                _labelPanelList[i].Visible = false;\r
-                return;\r
-            }\r
             var s = _shipList[i + ScrollBar.Value];\r
             var labels = _groupingLabelList[i];\r
             if (s.Level == 1000)\r
             {\r
-                panel.Visible = false;\r
                 SetShipType(i);\r
                 return;\r
             }\r
@@ -549,22 +550,14 @@ namespace KancolleSniffer.View
             var cb = _checkBoxesList[i];\r
             for (var j = 0; j < cb.Length; j++)\r
                 cb[j].Checked = GroupSettings[j].Contains(s.Id);\r
-            panel.Visible = true;\r
+            _groupingPanelList[i].Visible = true;\r
         }\r
 \r
         private void SetRepairList(int i)\r
         {\r
-            var panel = _repairPanelList[i];\r
-            if (i + ScrollBar.Value >= _shipList.Length)\r
-            {\r
-                panel.Visible = false;\r
-                _labelPanelList[i].Visible = false;\r
-                return;\r
-            }\r
             var s = _shipList[i + ScrollBar.Value];\r
             if (s.Level == 1000)\r
             {\r
-                panel.Visible = false;\r
                 SetShipType(i);\r
                 return;\r
             }\r
@@ -575,7 +568,7 @@ namespace KancolleSniffer.View
             labels[3].Text = s.RepairTimePerHp.ToString(@"mm\:ss");\r
             labels[4].SetName(s, ShipNameWidth.RepairListFull);\r
             labels[5].SetFleet(s);\r
-            panel.Visible = true;\r
+            _repairPanelList[i].Visible = true;\r
         }\r
 \r
         public event Action HpLabelClick;\r
@@ -594,6 +587,8 @@ namespace KancolleSniffer.View
 \r
         public void ShowShip(int id)\r
         {\r
+            if (!ScrollBar.Visible)\r
+                return;\r
             var i = Array.FindIndex(_shipList, s => s.Id == id);\r
             if (i == -1)\r
                 return;\r