OSDN Git Service

スクロールバーのない艦娘一覧がスクロールすることがあるのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ListForm.cs
index bf0c52e..42ec533 100644 (file)
@@ -26,6 +26,7 @@ namespace KancolleSniffer
     {\r
         private readonly Sniffer _sniffer;\r
         private readonly Config _config;\r
+        private readonly CheckBox[] _shipTypeCheckBoxes;\r
         public const int PanelWidth = 217;\r
 \r
         public enum SortOrder\r
@@ -45,6 +46,17 @@ namespace KancolleSniffer
             InitializeComponent();\r
             _sniffer = sniffer;\r
             _config = config;\r
+            _shipTypeCheckBoxes = new[]\r
+            {\r
+                checkBoxSTypeBattleShip,\r
+                checkBoxSTypeAircraftCarrier,\r
+                checkBoxSTypeHeavyCruiser,\r
+                checkBoxSTypeLightCruiser,\r
+                checkBoxSTypeDestroyer,\r
+                checkBoxSTypeEscort,\r
+                checkBoxSTypeSubmarine,\r
+                checkBoxSTypeAuxiliary\r
+            };\r
             battleResultPanel.HpLabelClick += ToggleHpPercent;\r
             shipListPanel.HpLabelClick += ToggleHpPercent;\r
             var swipe = new SwipeScrollify();\r
@@ -96,11 +108,10 @@ namespace KancolleSniffer
             {\r
                 richTextBoxMiscText.Text = _sniffer.MiscText;\r
             }\r
-            else\r
+            else if (InShipStatus || InGroupConfig || InRepairList)\r
             {\r
                 SetHeaderSortOrder();\r
-                shipListPanel.Update(_sniffer, comboBoxGroup.Text, _config.ShipList.SortOrder,\r
-                    _config.ShipList.ShipType);\r
+                shipListPanel.Update(_sniffer, comboBoxGroup.Text, _config.ShipList);\r
             }\r
             if (shipListPanel.GroupUpdated)\r
             {\r
@@ -113,7 +124,7 @@ namespace KancolleSniffer
         public void UpdateAirBattleResult()\r
         {\r
             airBattleResultPanel.ShowResultAutomatic = (_config.Spoilers & Spoiler.AirBattleResult) != 0;\r
-            airBattleResultPanel.SetResult(_sniffer.Battle.AirBattleResults);\r
+            airBattleResultPanel.SetResult(_sniffer);\r
         }\r
 \r
         public void UpdateBattleResult()\r
@@ -180,7 +191,6 @@ namespace KancolleSniffer
             MinimumSize = new Size(Width, 0);\r
             MaximumSize = new Size(Width, int.MaxValue);\r
             var config = _config.ShipList;\r
-            checkBoxShipType.Checked = config.ShipType;\r
             if (config.ShowHpInPercent)\r
             {\r
                 shipListPanel.ToggleHpPercent();\r
@@ -188,6 +198,7 @@ namespace KancolleSniffer
             }\r
             LoadShipGroupFromConfig();\r
             comboBoxGroup.SelectedItem = config.Mode ?? "全艦";\r
+            SetCheckBoxSTypeSate();\r
             if (config.Location.X == int.MinValue)\r
                 return;\r
             var bounds = new Rectangle(config.Location, config.Size);\r
@@ -203,6 +214,14 @@ namespace KancolleSniffer
                 shipListPanel.GroupSettings[i] = i < group.Count ? new HashSet<int>(group[i]) : new HashSet<int>();\r
         }\r
 \r
+        private void SetCheckBoxSTypeSate()\r
+        {\r
+            for (var type = 0; type < _shipTypeCheckBoxes.Length; type++)\r
+                _shipTypeCheckBoxes[type].Checked = ((int)_config.ShipList.ShipCategories & (1 << type)) != 0;\r
+            checkBoxSTypeAll.Checked = _config.ShipList.ShipCategories == ShipCategory.All;\r
+            checkBoxSTypeDetails.Checked = _config.ShipList.ShipType;\r
+        }\r
+\r
         private void ShipListForm_FormClosing(object sender, FormClosingEventArgs e)\r
         {\r
             e.Cancel = true;\r
@@ -250,13 +269,6 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private void checkBoxShipType_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            _config.ShipList.ShipType = checkBoxShipType.Checked;\r
-            UpdateList();\r
-            SetActiveControl();\r
-        }\r
-\r
         private void comboBoxGroup_DropDownClosed(object sender, EventArgs e)\r
         {\r
             SetActiveControl();\r
@@ -267,6 +279,8 @@ namespace KancolleSniffer
             UpdateList();\r
             SetActiveControl();\r
             copyToolStripMenuItem.Enabled = InShipStatus | InItemList;\r
+            if (!(InShipStatus || InGroupConfig || InRepairList))\r
+                SetPanelSTypeState(false);\r
         }\r
 \r
         private void ShipListForm_KeyPress(object sender, KeyPressEventArgs e)\r
@@ -379,5 +393,45 @@ namespace KancolleSniffer
             shipListPanel.ToggleHpPercent();\r
             battleResultPanel.ToggleHpPercent();\r
         }\r
+\r
+        private void labelSTypeButton_Click(object sender, EventArgs e)\r
+        {\r
+            SetPanelSTypeState(!panelSType.Visible);\r
+        }\r
+\r
+        private void checkBoxSType_Click(object sender, EventArgs e)\r
+        {\r
+            _config.ShipList.ShipCategories = SelectedShipTypes;\r
+            UpdateList();\r
+            SetActiveControl();\r
+        }\r
+\r
+        private ShipCategory SelectedShipTypes =>\r
+            (ShipCategory)_shipTypeCheckBoxes.Select((cb, type) => cb.Checked ? 1 << type : 0).Sum();\r
+\r
+        private void checkBoxSTypeAll_Click(object sender, EventArgs e)\r
+        {\r
+            foreach (var checkBox in _shipTypeCheckBoxes)\r
+                checkBox.Checked = checkBoxSTypeAll.Checked;\r
+            checkBoxSType_Click(sender, e);\r
+        }\r
+\r
+        private void panelSType_Click(object sender, EventArgs e)\r
+        {\r
+            SetPanelSTypeState(false);\r
+        }\r
+\r
+        private void SetPanelSTypeState(bool visible)\r
+        {\r
+            panelSType.Visible = visible;\r
+            labelSTypeButton.BackColor = visible ? CustomColors.ActiveButtonColor : DefaultBackColor;\r
+        }\r
+\r
+        private void checkBoxSTypeDetails_Click(object sender, EventArgs e)\r
+        {\r
+            _config.ShipList.ShipType = checkBoxSTypeDetails.Checked;\r
+            UpdateList();\r
+            SetActiveControl();\r
+        }\r
     }\r
 }
\ No newline at end of file