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
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
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
_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
{\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
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
_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
--- /dev/null
+// 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