OSDN Git Service

数字や履歴の表示をNumberAndHistoryクラスに分離する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 21 Apr 2019 09:01:35 +0000 (18:01 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 21 Apr 2019 09:01:35 +0000 (18:01 +0900)
KancolleSniffer/KancolleSniffer.csproj
KancolleSniffer/MainForm.cs
KancolleSniffer/View/NumberAndHistory.cs [new file with mode: 0644]

index f61e584..96dd75f 100644 (file)
     </Compile>\r
     <Compile Include="Net\HttpProxy.cs" />\r
     <Compile Include="Util\HttpUtility.cs" />\r
+    <Compile Include="View\NumberAndHistory.cs" />\r
     <Compile Include="View\ItemTreeView.cs">\r
       <SubType>Component</SubType>\r
     </Compile>\r
index c3848bd..6b31260 100644 (file)
@@ -33,8 +33,8 @@ using KancolleSniffer.Net;
 using KancolleSniffer.Util;\r
 using KancolleSniffer.View;\r
 using Microsoft.CSharp.RuntimeBinder;\r
-using Timer = System.Windows.Forms.Timer;\r
 using static System.Math;\r
+using Timer = System.Windows.Forms.Timer;\r
 \r
 namespace KancolleSniffer\r
 {\r
@@ -51,6 +51,7 @@ namespace KancolleSniffer
         private bool _combinedFleet;\r
         private readonly Label[] _labelCheckFleets;\r
         private MainFormLabels _mainLabels;\r
+        private NumberAndHistory _numberAndHistory;\r
         private readonly ListForm _listForm;\r
         private readonly NotificationManager _notificationManager;\r
         private bool _started;\r
@@ -79,6 +80,7 @@ namespace KancolleSniffer
             labelPresetAkashiTimer.BackColor = ShipLabel.ColumnColors[1];\r
             _listForm = new ListForm(_sniffer, _config, this);\r
             _notificationManager = new NotificationManager(Alarm);\r
+            CreateNumberAndHistory();\r
             _config.Load();\r
             _proxyManager = new ProxyManager(_config, this);\r
             _errorLog = new ErrorLog(_sniffer);\r
@@ -102,6 +104,43 @@ namespace KancolleSniffer
             _mainLabels.CreateNDockLabels(labelNDock_Click);\r
         }\r
 \r
+        private void CreateNumberAndHistory()\r
+        {\r
+            _numberAndHistory = new NumberAndHistory(new NumberAndHistoryLabels\r
+            {\r
+                NumOfShips = labelNumOfShips,\r
+                NumOfEquips = labelNumOfEquips,\r
+                NumOfBuckets = labelNumOfBuckets,\r
+                BucketHistory = labelBucketHistory,\r
+                Achievement = labelAchievement,\r
+                FuelHistory = labelFuelHistory,\r
+                BulletHistory = labelBulletHistory,\r
+                SteelHistory = labelSteelHistory,\r
+                BauxiteHistory = labelBouxiteHistory,\r
+                ToolTip = _toolTip\r
+            }, _sniffer, new NotifySubmitter(_notificationManager));\r
+        }\r
+\r
+        private class NotifySubmitter : INotifySubmitter\r
+        {\r
+            private readonly NotificationManager _manager;\r
+\r
+            public NotifySubmitter(NotificationManager manager)\r
+            {\r
+                _manager = manager;\r
+            }\r
+\r
+            public void Flash()\r
+            {\r
+                _manager.Flash();\r
+            }\r
+\r
+            public void Enqueue(string key, string subject)\r
+            {\r
+                _manager.Enqueue(key, subject);\r
+            }\r
+        }\r
+\r
         /// <summary>\r
         /// パネルのz-orderがくるうのを避ける\r
         /// https://stackoverflow.com/a/5777090/1429506\r
@@ -439,7 +478,7 @@ namespace KancolleSniffer
             {\r
                 control.Font = new Font(control.Font.FontFamily, control.Font.Size * _config.Zoom / 100);\r
             }\r
-            foreach (var toolTip in new[]{_toolTip, _toolTipQuest, _tooltipCopy})\r
+            foreach (var toolTip in new[] {_toolTip, _toolTipQuest, _tooltipCopy})\r
             {\r
                 toolTip.Font = new Font(toolTip.Font.FontFamily, toolTip.Font.Size * _config.Zoom / 100);\r
             }\r
@@ -462,9 +501,9 @@ namespace KancolleSniffer
             if (TopMost != _config.TopMost)\r
                 TopMost = _listForm.TopMost = _config.TopMost;\r
             _sniffer.ShipCounter.Margin = _config.MarginShips;\r
-            UpdateNumOfShips();\r
+            _numberAndHistory.UpdateNumOfShips();\r
             _sniffer.ItemCounter.Margin = _config.MarginEquips;\r
-            UpdateNumOfEquips();\r
+            _numberAndHistory.UpdateNumOfEquips();\r
             _sniffer.Achievement.ResetHours = _config.ResetHours;\r
             labelAkashiRepair.Visible = labelAkashiRepairTimer.Visible =\r
                 labelPresetAkashiTimer.Visible = _config.UsePresetAkashi;\r
@@ -558,82 +597,14 @@ namespace KancolleSniffer
                 _listForm.ShowShip(ship.Id);\r
         }\r
 \r
+\r
         private void UpdateItemInfo()\r
         {\r
-            UpdateNumOfShips();\r
-            UpdateNumOfEquips();\r
-            _notificationManager.Flash();\r
-            labelNumOfBuckets.Text = _sniffer.Material.MaterialHistory[(int)Material.Bucket].Now.ToString("D");\r
-            UpdateBucketHistory();\r
-            var ac = _sniffer.Achievement.Value;\r
-            if (ac >= 10000)\r
-                ac = 9999;\r
-            labelAchievement.Text = ac >= 1000 ? ((int)ac).ToString("D") : ac.ToString("F1");\r
-            _toolTip.SetToolTip(labelAchievement,\r
-                "今月 " + _sniffer.Achievement.ValueOfMonth.ToString("F1") + "\n" +\r
-                "EO " + _sniffer.ExMap.Achievement);\r
-            UpdateMaterialHistory();\r
+            _numberAndHistory.Update();\r
             if (_listForm.Visible)\r
                 _listForm.UpdateList();\r
         }\r
 \r
-        private void UpdateNumOfShips()\r
-        {\r
-            var ship = _sniffer.ShipCounter;\r
-            labelNumOfShips.Text = $"{ship.Now:D}/{ship.Max:D}";\r
-            labelNumOfShips.ForeColor = ship.TooMany ? CUDColors.Red : Color.Black;\r
-            if (ship.Alarm)\r
-            {\r
-                var message = $"残り{ship.Rest:D}隻";\r
-                _notificationManager.Enqueue("艦娘数超過", message);\r
-                ship.Alarm = false;\r
-            }\r
-        }\r
-\r
-        private void UpdateNumOfEquips()\r
-        {\r
-            var item = _sniffer.ItemCounter;\r
-            labelNumOfEquips.Text = $"{item.Now:D}/{item.Max:D}";\r
-            labelNumOfEquips.ForeColor = item.TooMany ? CUDColors.Red : Color.Black;\r
-            if (item.Alarm)\r
-            {\r
-                var message = $"残り{item.Rest:D}個";\r
-                _notificationManager.Enqueue("装備数超過", message);\r
-                item.Alarm = false;\r
-            }\r
-        }\r
-\r
-        private void UpdateBucketHistory()\r
-        {\r
-            var count = _sniffer.Material.MaterialHistory[(int)Material.Bucket];\r
-            var day = CutOverflow(count.Now - count.BegOfDay, 999);\r
-            var week = CutOverflow(count.Now - count.BegOfWeek, 999);\r
-            labelBucketHistory.Text = $"{day:+#;-#;±0} 今日\n{week:+#;-#;±0} 今週";\r
-        }\r
-\r
-        private void UpdateMaterialHistory()\r
-        {\r
-            var labels = new[] {labelFuelHistory, labelBulletHistory, labelSteelHistory, labelBouxiteHistory};\r
-            var text = new[] {"燃料", "弾薬", "鋼材", "ボーキ"};\r
-            for (var i = 0; i < labels.Length; i++)\r
-            {\r
-                var count = _sniffer.Material.MaterialHistory[i];\r
-                var port = CutOverflow(count.Now - _sniffer.Material.PrevPort[i], 99999);\r
-                var day = CutOverflow(count.Now - count.BegOfDay, 99999);\r
-                var week = CutOverflow(count.Now - count.BegOfWeek, 99999);\r
-                labels[i].Text = $"{text[i]}\n{port:+#;-#;±0}\n{day:+#;-#;±0}\n{week:+#;-#;±0}";\r
-            }\r
-        }\r
-\r
-        private int CutOverflow(int value, int limit)\r
-        {\r
-            if (value > limit)\r
-                return limit;\r
-            if (value < -limit)\r
-                return -limit;\r
-            return value;\r
-        }\r
-\r
         private void UpdateShipInfo()\r
         {\r
             SetCurrentFleet();\r
diff --git a/KancolleSniffer/View/NumberAndHistory.cs b/KancolleSniffer/View/NumberAndHistory.cs
new file mode 100644 (file)
index 0000000..5460ba6
--- /dev/null
@@ -0,0 +1,140 @@
+// Copyright (C) 2019 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
+//\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\r
+//\r
+//    http://www.apache.org/licenses/LICENSE-2.0\r
+//\r
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
+\r
+using System.Drawing;\r
+using System.Windows.Forms;\r
+using KancolleSniffer.Model;\r
+\r
+namespace KancolleSniffer.View\r
+{\r
+    public class NumberAndHistoryLabels\r
+    {\r
+        public Label NumOfShips { get; set; }\r
+        public Label NumOfEquips { get; set; }\r
+        public Label NumOfBuckets { get; set; }\r
+        public Label BucketHistory { get; set; }\r
+        public Label Achievement { get; set; }\r
+        public Label FuelHistory { get; set; }\r
+        public Label BulletHistory { get; set; }\r
+        public Label SteelHistory { get; set; }\r
+        public Label BauxiteHistory { get; set; }\r
+        public ToolTip ToolTip { get; set; }\r
+    }\r
+\r
+    public interface INotifySubmitter\r
+    {\r
+        void Flash();\r
+        void Enqueue(string key, string subject);\r
+    }\r
+\r
+    public class NumberAndHistory\r
+    {\r
+        private readonly NumberAndHistoryLabels _labels;\r
+        private readonly Sniffer _sniffer;\r
+        private readonly ToolTip _toolTip;\r
+        private readonly INotifySubmitter _submitter;\r
+\r
+        public NumberAndHistory(NumberAndHistoryLabels labels, Sniffer sniffer, INotifySubmitter submitter)\r
+        {\r
+            _labels = labels;\r
+            _sniffer = sniffer;\r
+            _toolTip = labels.ToolTip;\r
+            _submitter = submitter;\r
+        }\r
+\r
+        public void Update()\r
+        {\r
+            UpdateNumOfShips();\r
+            UpdateNumOfEquips();\r
+            _submitter.Flash();\r
+            UpdateNumOfBuckets();\r
+            UpdateBucketHistory();\r
+            UpdateAchievement();\r
+            UpdateMaterialHistory();\r
+        }\r
+\r
+        private void UpdateNumOfBuckets()\r
+        {\r
+            _labels.NumOfBuckets.Text = _sniffer.Material.MaterialHistory[(int)Material.Bucket].Now.ToString("D");\r
+        }\r
+\r
+        private void UpdateAchievement()\r
+        {\r
+            var ac = _sniffer.Achievement.Value;\r
+            if (ac >= 10000)\r
+                ac = 9999;\r
+            _labels.Achievement.Text = ac >= 1000 ? ((int)ac).ToString("D") : ac.ToString("F1");\r
+            _toolTip.SetToolTip(_labels.Achievement,\r
+                "今月 " + _sniffer.Achievement.ValueOfMonth.ToString("F1") + "\n" +\r
+                "EO " + _sniffer.ExMap.Achievement);\r
+        }\r
+\r
+        public void UpdateNumOfShips()\r
+        {\r
+            var ship = _sniffer.ShipCounter;\r
+            _labels.NumOfShips.Text = $"{ship.Now:D}/{ship.Max:D}";\r
+            _labels.NumOfShips.ForeColor = ship.TooMany ? CUDColors.Red : Color.Black;\r
+            if (ship.Alarm)\r
+            {\r
+                var message = $"残り{ship.Rest:D}隻";\r
+                _submitter.Enqueue("艦娘数超過", message);\r
+                ship.Alarm = false;\r
+            }\r
+        }\r
+\r
+        public void UpdateNumOfEquips()\r
+        {\r
+            var item = _sniffer.ItemCounter;\r
+            _labels.NumOfEquips.Text = $"{item.Now:D}/{item.Max:D}";\r
+            _labels.NumOfEquips.ForeColor = item.TooMany ? CUDColors.Red : Color.Black;\r
+            if (item.Alarm)\r
+            {\r
+                var message = $"残り{item.Rest:D}個";\r
+                _submitter.Enqueue("装備数超過", message);\r
+                item.Alarm = false;\r
+            }\r
+        }\r
+\r
+        private void UpdateBucketHistory()\r
+        {\r
+            var count = _sniffer.Material.MaterialHistory[(int)Material.Bucket];\r
+            var day = CutOverflow(count.Now - count.BegOfDay, 999);\r
+            var week = CutOverflow(count.Now - count.BegOfWeek, 999);\r
+            _labels.BucketHistory.Text = $"{day:+#;-#;±0} 今日\n{week:+#;-#;±0} 今週";\r
+        }\r
+\r
+        private void UpdateMaterialHistory()\r
+        {\r
+            var labels = new[] {_labels.FuelHistory, _labels.BulletHistory, _labels.SteelHistory, _labels.BauxiteHistory };\r
+            var text = new[] { "燃料", "弾薬", "鋼材", "ボーキ" };\r
+            for (var i = 0; i < labels.Length; i++)\r
+            {\r
+                var count = _sniffer.Material.MaterialHistory[i];\r
+                var port = CutOverflow(count.Now - _sniffer.Material.PrevPort[i], 99999);\r
+                var day = CutOverflow(count.Now - count.BegOfDay, 99999);\r
+                var week = CutOverflow(count.Now - count.BegOfWeek, 99999);\r
+                labels[i].Text = $"{text[i]}\n{port:+#;-#;±0}\n{day:+#;-#;±0}\n{week:+#;-#;±0}";\r
+            }\r
+        }\r
+\r
+        private int CutOverflow(int value, int limit)\r
+        {\r
+            if (value > limit)\r
+                return limit;\r
+            if (value < -limit)\r
+                return -limit;\r
+            return value;\r
+        }\r
+    }\r
+}
\ No newline at end of file