OSDN Git Service

複数の一覧ウィンドウでウィンドウごとに設定を保存する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 14 Mar 2020 05:57:15 +0000 (14:57 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 30 Aug 2020 05:58:20 +0000 (14:58 +0900)
KancolleSniffer/ListForm.cs
KancolleSniffer/MainForm.ListFormGroup.cs
KancolleSniffer/View/ShipListPanel/ShipListPanel.cs

index eee3439..9e03890 100644 (file)
@@ -31,8 +31,39 @@ namespace KancolleSniffer
         private readonly MainForm.TimeOutChecker _suppressActivate;\r
         private readonly CheckBox[] _shipTypeCheckBoxes;\r
         private bool _isMaster;\r
+        private Settings _settings;\r
         public const int PanelWidth = 217;\r
 \r
+        public class Settings\r
+        {\r
+            public string Mode { get; set; }\r
+            public ShipCategory ShipCategories { get; set; }\r
+            public bool ShipType { get; set; }\r
+            public bool ShowHpInPercent { get; set; }\r
+            public SortOrder SortOrder { get; set; }\r
+\r
+            public static Settings FromShipListConfig(ShipListConfig config)\r
+            {\r
+                return new Settings\r
+                {\r
+                    Mode = config.Mode ?? "全艦",\r
+                    ShipCategories = config.ShipCategories,\r
+                    ShipType = config.ShipType,\r
+                    ShowHpInPercent = config.ShowHpInPercent,\r
+                    SortOrder = config.SortOrder\r
+                };\r
+            }\r
+\r
+            public void SetToShipListConfig(ShipListConfig config)\r
+            {\r
+                config.Mode = Mode;\r
+                config.ShipCategories = ShipCategories;\r
+                config.ShipType = ShipType;\r
+                config.ShowHpInPercent = ShowHpInPercent;\r
+                config.SortOrder = SortOrder;\r
+            }\r
+        }\r
+\r
         private object[] PanelNames => new object[] {"全艦", "A", "B", "C", "D", "分類", "修復", "装備", "艦隊", "対空", "戦況", "情報"}\r
             .Where(n => IsMaster || (string)n != "分類").ToArray();\r
 \r
@@ -113,7 +144,7 @@ namespace KancolleSniffer
             else if (InShipStatus || InGroupConfig || InRepairList)\r
             {\r
                 SetHeaderSortOrder();\r
-                shipListPanel.Update(_sniffer, comboBoxGroup.Text, _config.ShipList);\r
+                shipListPanel.Update(_sniffer, comboBoxGroup.Text, _settings);\r
             }\r
             if (shipListPanel.GroupUpdated)\r
             {\r
@@ -174,7 +205,7 @@ namespace KancolleSniffer
 \r
         private void MoveToBattleResult()\r
         {\r
-            if (!_config.ShipList.AutoBattleResult || comboBoxGroup.SelectedIndex == BattleResultIndex ||\r
+            if (!_isMaster || !_config.ShipList.AutoBattleResult || comboBoxGroup.SelectedIndex == BattleResultIndex ||\r
                 _sniffer.InSortie == -1)\r
                 return;\r
             _prevSelectedIndex = comboBoxGroup.SelectedIndex;\r
@@ -197,7 +228,7 @@ namespace KancolleSniffer
 \r
         private void SetHeaderSortOrder()\r
         {\r
-            switch (_config.ShipList.SortOrder)\r
+            switch (_settings.SortOrder)\r
             {\r
                 case SortOrder.None:\r
                     labelHeaderCond.Text = "cond";\r
@@ -222,21 +253,21 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private bool InShipStatus => Array.Exists(new[] {"全艦", "A", "B", "C", "D"}, x => comboBoxGroup.Text == x);\r
+        private bool InShipStatus => Array.Exists(new[] {"全艦", "A", "B", "C", "D"}, x => _settings.Mode == x);\r
 \r
-        private bool InGroupConfig => comboBoxGroup.Text == "分類";\r
+        private bool InGroupConfig => _settings.Mode == "分類";\r
 \r
-        private bool InRepairList => comboBoxGroup.Text == "修復";\r
+        private bool InRepairList => _settings.Mode == "修復";\r
 \r
-        private bool InItemList => comboBoxGroup.Text == "装備";\r
+        private bool InItemList => _settings.Mode == "装備";\r
 \r
-        private bool InFleetInfo => comboBoxGroup.Text == "艦隊";\r
+        private bool InFleetInfo => _settings.Mode == "艦隊";\r
 \r
-        private bool InAntiAir => comboBoxGroup.Text == "対空";\r
+        private bool InAntiAir => _settings.Mode == "対空";\r
 \r
-        private bool InBattleResult => comboBoxGroup.Text == "戦況";\r
+        private bool InBattleResult => _settings.Mode == "戦況";\r
 \r
-        private bool InMiscText => comboBoxGroup.Text == "情報";\r
+        private bool InMiscText => _settings.Mode == "情報";\r
 \r
         private void ListForm_Load(object sender, EventArgs e)\r
         {\r
@@ -247,14 +278,15 @@ namespace KancolleSniffer
             MinimumSize = new Size(Width, 0);\r
             MaximumSize = new Size(Width, int.MaxValue);\r
             var config = GetConfig();\r
-            if (config.ShowHpInPercent)\r
+            _settings = Settings.FromShipListConfig(config);\r
+            if (_settings.ShowHpInPercent)\r
             {\r
                 shipListPanel.ToggleHpPercent();\r
                 battleResultPanel.ToggleHpPercent();\r
             }\r
             LoadShipGroupFromConfig();\r
-            comboBoxGroup.SelectedItem = config.Mode ?? "全艦";\r
-            SetCheckBoxSTypeState(config);\r
+            comboBoxGroup.SelectedItem = _settings.Mode;\r
+            SetCheckBoxSTypeState();\r
             if (config.Location.X == int.MinValue)\r
                 return;\r
             var bounds = new Rectangle(config.Location, config.Size);\r
@@ -281,12 +313,12 @@ namespace KancolleSniffer
                 shipListPanel.GroupSettings[i] = i < group.Count ? new HashSet<int>(group[i]) : new HashSet<int>();\r
         }\r
 \r
-        private void SetCheckBoxSTypeState(ShipListConfig config)\r
+        private void SetCheckBoxSTypeState()\r
         {\r
             for (var type = 0; type < _shipTypeCheckBoxes.Length; type++)\r
-                _shipTypeCheckBoxes[type].Checked = ((int)config.ShipCategories & (1 << type)) != 0;\r
-            checkBoxSTypeAll.Checked = config.ShipCategories == ShipCategory.All;\r
-            checkBoxSTypeDetails.Checked = config.ShipType;\r
+                _shipTypeCheckBoxes[type].Checked = ((int)_settings.ShipCategories & (1 << type)) != 0;\r
+            checkBoxSTypeAll.Checked = _settings.ShipCategories == ShipCategory.All;\r
+            checkBoxSTypeDetails.Checked = _settings.ShipType;\r
         }\r
 \r
         private void ListForm_FormClosing(object sender, FormClosingEventArgs e)\r
@@ -308,7 +340,7 @@ namespace KancolleSniffer
             StoreShipGroupToConfig();\r
             var config = _config.ShipList;\r
             config.Visible = Visible && WindowState == FormWindowState.Normal;\r
-            config.Mode = (string)comboBoxGroup.SelectedItem;\r
+            _settings.SetToShipListConfig(config);\r
             if (!Visible)\r
                 return;\r
             SaveBounds(config); // 最小化時は以前のサイズを記録する\r
@@ -321,8 +353,8 @@ namespace KancolleSniffer
             if (WindowState != FormWindowState.Normal) // 最小化時は次回復旧しない\r
                 return;\r
             var config = new ShipListConfig {Visible = true};\r
+            _settings.SetToShipListConfig(config);\r
             _config.ListFormGroup.Add(config);\r
-            config.Mode = (string)comboBoxGroup.SelectedItem;\r
             SaveBounds(config);\r
         }\r
 \r
@@ -411,6 +443,7 @@ namespace KancolleSniffer
 \r
         private void comboBoxGroup_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
+            _settings.Mode = comboBoxGroup.Text;\r
             UpdateList();\r
             SetActiveControl();\r
             if (!(InShipStatus || InGroupConfig || InRepairList))\r
@@ -469,17 +502,16 @@ namespace KancolleSniffer
 \r
         private void labelHeaderCond_Click(object sender, EventArgs e)\r
         {\r
-            var sl = _config.ShipList;\r
-            switch (sl.SortOrder)\r
+            switch (_settings.SortOrder)\r
             {\r
                 case SortOrder.CondAscend:\r
-                    sl.SortOrder = SortOrder.CondDescend;\r
+                    _settings.SortOrder = SortOrder.CondDescend;\r
                     break;\r
                 case SortOrder.CondDescend:\r
-                    sl.SortOrder = SortOrder.None;\r
+                    _settings.SortOrder = SortOrder.None;\r
                     break;\r
                 default:\r
-                    sl.SortOrder = SortOrder.CondAscend;\r
+                    _settings.SortOrder = SortOrder.CondAscend;\r
                     break;\r
             }\r
             UpdateList();\r
@@ -487,17 +519,16 @@ namespace KancolleSniffer
 \r
         private void labelHeaderExp_Click(object sender, EventArgs e)\r
         {\r
-            var sl = _config.ShipList;\r
-            switch (sl.SortOrder)\r
+            switch (_settings.SortOrder)\r
             {\r
                 case SortOrder.ExpToNextAscend:\r
-                    sl.SortOrder = SortOrder.ExpToNextDescend;\r
+                    _settings.SortOrder = SortOrder.ExpToNextDescend;\r
                     break;\r
                 case SortOrder.ExpToNextDescend:\r
-                    sl.SortOrder = SortOrder.None;\r
+                    _settings.SortOrder = SortOrder.None;\r
                     break;\r
                 default:\r
-                    sl.SortOrder = SortOrder.ExpToNextAscend;\r
+                    _settings.SortOrder = SortOrder.ExpToNextAscend;\r
                     break;\r
             }\r
             UpdateList();\r
@@ -525,7 +556,7 @@ namespace KancolleSniffer
 \r
         private void ToggleHpPercent()\r
         {\r
-            _config.ShipList.ShowHpInPercent = !_config.ShipList.ShowHpInPercent;\r
+            _settings.ShowHpInPercent = !_settings.ShowHpInPercent;\r
             shipListPanel.ToggleHpPercent();\r
             battleResultPanel.ToggleHpPercent();\r
         }\r
@@ -537,7 +568,7 @@ namespace KancolleSniffer
 \r
         private void checkBoxSType_Click(object sender, EventArgs e)\r
         {\r
-            _config.ShipList.ShipCategories = SelectedShipTypes;\r
+            _settings.ShipCategories = SelectedShipTypes;\r
             UpdateList();\r
             SetActiveControl();\r
         }\r
@@ -567,7 +598,7 @@ namespace KancolleSniffer
 \r
         private void checkBoxSTypeDetails_Click(object sender, EventArgs e)\r
         {\r
-            _config.ShipList.ShipType = checkBoxSTypeDetails.Checked;\r
+            _settings.ShipType = checkBoxSTypeDetails.Checked;\r
             UpdateList();\r
             SetActiveControl();\r
         }\r
index 581af95..4a570ba 100644 (file)
@@ -53,8 +53,8 @@ namespace KancolleSniffer
                     }\r
                 }\r
                 var newForm = new ListForm(_mainForm) {Owner = Main, TopMost = Main.TopMost, Font = Main.Font};\r
-                newForm.UpdateList();\r
                 newForm.Show();\r
+                newForm.UpdateList();\r
                 _listForms.Add(newForm);\r
             }\r
 \r
index 638952b..cc14042 100644 (file)
@@ -86,10 +86,10 @@ namespace KancolleSniffer.View.ShipListPanel
                 ScrollBar.Value - e.Delta * SystemInformation.MouseWheelScrollLines / 120));\r
         }\r
 \r
-        public void Update(Sniffer sniffer, string mode, ShipListConfig config)\r
+        public void Update(Sniffer sniffer, string mode, ListForm.Settings settings)\r
         {\r
             _mode = mode;\r
-            CreateShipList(sniffer, config);\r
+            CreateShipList(sniffer, settings);\r
             SuspendDrawing();\r
             SetupLabels();\r
             SetShipLabels();\r
@@ -112,13 +112,13 @@ namespace KancolleSniffer.View.ShipListPanel
             Refresh();\r
         }\r
 \r
-        private void CreateShipList(Sniffer sniffer, ShipListConfig config)\r
+        private void CreateShipList(Sniffer sniffer, ListForm.Settings settings)\r
         {\r
             var ships = FilterByShipTypes(\r
                 _mode == "修復" ? sniffer.RepairList : _groupConfigLabels.FilterByGroup(sniffer.ShipList, _mode),\r
-                config.ShipCategories).ToArray();\r
-            var order = _mode == "修復" ? ListForm.SortOrder.Repair : config.SortOrder;\r
-            if (!config.ShipType)\r
+                settings.ShipCategories).ToArray();\r
+            var order = _mode == "修復" ? ListForm.SortOrder.Repair : settings.SortOrder;\r
+            if (!settings.ShipType)\r
             {\r
                 _shipList = ships.OrderBy(s => s, new CompareShip(false, order)).ToArray();\r
                 return;\r