OSDN Git Service

ShipListForm→ListFormなどの名前の変更を行う
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / MainForm.cs
index 3f6a0a7..214d64e 100644 (file)
@@ -19,7 +19,6 @@ using System.Drawing;
 using System.Globalization;\r
 using System.IO;\r
 using System.Linq;\r
-using System.Net;\r
 using System.Net.Sockets;\r
 using System.Runtime.InteropServices;\r
 using System.Text;\r
@@ -43,7 +42,7 @@ namespace KancolleSniffer
         private bool _combinedFleet;\r
         private readonly Label[] _labelCheckFleets;\r
         private readonly ShipLabels _shipLabels;\r
-        private readonly ShipListForm _shipListForm;\r
+        private readonly ListForm _listForm;\r
         private readonly NoticeQueue _noticeQueue;\r
         private bool _started;\r
         private string _debugLogFile;\r
@@ -71,18 +70,15 @@ namespace KancolleSniffer
             SetupFleetClick();\r
             _shipLabels = new ShipLabels();\r
             _shipLabels.CreateAkashiTimers(panelShipInfo);\r
-            _shipLabels.CreateLabels(panelShipInfo, ShowShipOnShipList);\r
+            _shipLabels.CreateShipLabels(panelShipInfo, ShowShipOnShipList);\r
             _shipLabels.CreateCombinedShipLabels(panelCombinedFleet, ShowShipOnShipList);\r
-            _shipLabels.CreateDamagedShipList(panelDamagedShipList, panelDamagedShipList_Click);\r
-            _shipLabels.CreateNDockLabels(panelDock, (obj, args) =>\r
-            {\r
-                _ndockFinishTimeMode = !_ndockFinishTimeMode;\r
-                UpdateTimers();\r
-            });\r
+            _shipLabels.CreateRepairList(panelRepairList, panelRepairList_Click);\r
+            _shipLabels.CreateNDockLabels(panelDock, labelNDock_Click);\r
             labelPresetAkashiTimer.BackColor = ShipLabels.ColumnColors[1];\r
-            _shipListForm = new ShipListForm(_sniffer, _config) {Owner = this};\r
+            _listForm = new ListForm(_sniffer, _config) {Owner = this};\r
             _noticeQueue = new NoticeQueue(Ring);\r
             _config.Load();\r
+            PerformZoom();\r
             _sniffer.LoadState();\r
         }\r
 \r
@@ -94,14 +90,13 @@ namespace KancolleSniffer
         private void ProcessRequest(HttpProxy.Session session)\r
         {\r
             var url = session.Request.PathAndQuery;\r
-            var request = session.Request.BodyAsString;\r
-            var response = session.Response.BodyAsString;\r
             if (!url.Contains("kcsapi/"))\r
                 return;\r
+            var request = session.Request.BodyAsString;\r
+            var response = session.Response.BodyAsString;\r
             if (response == null || !response.StartsWith("svdata="))\r
             {\r
                 WriteDebugLog(url, request, response);\r
-                ShowServerError(url, request, response);\r
                 return;\r
             }\r
             if (_config.KancolleDb.On)\r
@@ -110,17 +105,7 @@ namespace KancolleSniffer
             WriteDebugLog(url, request, response);\r
             try\r
             {\r
-                var update = _sniffer.Sniff(url, request, JsonParser.Parse(response));\r
-                if (update == Sniffer.Update.Error)\r
-                {\r
-                    ShowServerError(url, request, response);\r
-                    return;\r
-                }\r
-                UpdateInfo(update);\r
-            }\r
-            catch (FormatException e)\r
-            {\r
-                ShowServerError(url, request, response, e);\r
+                UpdateInfo(_sniffer.Sniff(url, request, JsonParser.Parse(response)));\r
             }\r
             catch (RuntimeBinderException e)\r
             {\r
@@ -149,14 +134,6 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private void ShowServerError(string url, string request, string response, Exception e = null)\r
-        {\r
-            if (_errorDialog.ShowDialog(this, "サーバーからの応答が異常です。",\r
-                $"{(e == null ? "" : e + "\r\n")}url: {url}\r\nrequest: {request}\r\nresponse: {response ?? "(null)"}\r\n") ==\r
-                DialogResult.Abort)\r
-                Application.Exit();\r
-        }\r
-\r
         private string UnescapeString(string s)\r
         {\r
             try\r
@@ -200,7 +177,6 @@ namespace KancolleSniffer
 \r
         private void MainForm_Load(object sender, EventArgs e)\r
         {\r
-\r
             RestoreLocation();\r
             if (_config.HideOnMinimized && WindowState == FormWindowState.Minimized)\r
                 ShowInTaskbar = false;\r
@@ -220,32 +196,7 @@ namespace KancolleSniffer
             Task.Run(() =>\r
             {\r
                 for (var i = 0; i < 5; Thread.Sleep(10000), i++)\r
-                {\r
-                    WebResponse res = null;\r
                     SystemProxy.Refresh();\r
-                    var system = WebRequest.GetSystemWebProxy();\r
-                    if (!system.GetProxy(new Uri("http://125.6.184.16/")).IsLoopback)\r
-                    {\r
-                        File.AppendAllText("wakeup.log",\r
-                            $"[{DateTime.Now.ToString("g")}] proxy settings doesn't work.\r\n");\r
-                        continue;\r
-                    }\r
-                    try\r
-                    {\r
-                        var req = WebRequest.Create("http://kancollesniffer.osdn.jp/version");\r
-                        res = req.GetResponse();\r
-                        break;\r
-                    }\r
-                    catch\r
-                    {\r
-                        File.AppendAllText("wakeup.log",\r
-                            $"[{DateTime.Now.ToString("g")}] failed to connect internet.\r\n");\r
-                    }\r
-                    finally\r
-                    {\r
-                        res?.Close();\r
-                    }\r
-                }\r
             });\r
         }\r
 \r
@@ -296,6 +247,19 @@ namespace KancolleSniffer
                 ApplyConfig();\r
         }\r
 \r
+        private void PerformZoom()\r
+        {\r
+            if (_config.Zoom == 100)\r
+                return;\r
+            var prev = CurrentAutoScaleDimensions;\r
+            foreach (var control in new Control[] {this, _listForm, labelLogin, labelGuide})\r
+                control.Font = new Font(control.Font.FontFamily, control.Font.Size * _config.Zoom / 100);\r
+            ShipLabel.LatinFont = new Font("Tahoma", 8f * _config.Zoom / 100);\r
+            var cur = CurrentAutoScaleDimensions;\r
+            ShipLabel.ScaleFactor = new SizeF(ShipLabel.ScaleFactor.Width * cur.Width / prev.Width,\r
+                ShipLabel.ScaleFactor.Height * cur.Height / prev.Height);\r
+        }\r
+\r
         private void RestoreLocation()\r
         {\r
             if (_config.Location.X == int.MinValue)\r
@@ -308,7 +272,7 @@ namespace KancolleSniffer
 \r
         private void ApplyConfig()\r
         {\r
-            _shipListForm.TopMost = TopMost = _config.TopMost;\r
+            _listForm.TopMost = TopMost = _config.TopMost;\r
             _sniffer.Item.MarginShips = _config.MarginShips;\r
             _sniffer.Item.MarginEquips = _config.MarginEquips;\r
             _sniffer.Achievement.ResetHours = _config.ResetHours;\r
@@ -432,7 +396,17 @@ namespace KancolleSniffer
         private void timerMain_Tick(object sender, EventArgs e)\r
         {\r
             if (_started)\r
-                UpdateTimers();\r
+            {\r
+                try\r
+                {\r
+                    UpdateTimers();\r
+                }\r
+                catch (Exception ex)\r
+                {\r
+                    if (_errorDialog.ShowDialog(this, "エラーが発生しました。", ex.ToString()) == DialogResult.Abort)\r
+                        Application.Exit();\r
+                }\r
+            }\r
             if (_playLog == null || _configDialog.Visible)\r
             {\r
                 labelPlayLog.Visible = false;\r
@@ -465,13 +439,13 @@ namespace KancolleSniffer
 \r
         private void ShowShipOnShipList(object sender, EventArgs ev)\r
         {\r
-            if (!_shipListForm.Visible)\r
+            if (!_listForm.Visible)\r
                 return;\r
             var idx = (int)((Control)sender).Tag;\r
             var statuses = _sniffer.GetShipStatuses(_currentFleet);\r
             if (statuses.Length <= idx)\r
                 return;\r
-            _shipListForm.ShowShip(statuses[idx].Id);\r
+            _listForm.ShowShip(statuses[idx].Id);\r
         }\r
 \r
         private void UpdateItemInfo()\r
@@ -488,8 +462,8 @@ namespace KancolleSniffer
                 "今月 " + _sniffer.Achievement.ValueOfMonth.ToString("F1") + "\n" +\r
                 "EO " + _sniffer.ExMap.Achievement);\r
             UpdateMaterialHistry();\r
-            if (_shipListForm.Visible)\r
-                _shipListForm.UpdateList();\r
+            if (_listForm.Visible)\r
+                _listForm.UpdateList();\r
         }\r
 \r
         private void UpdateNumOfShips()\r
@@ -555,21 +529,21 @@ namespace KancolleSniffer
             UpdatePanelShipInfo();\r
             NotifyDamagedShip();\r
             UpdateChargeInfo();\r
-            UpdateDamagedShipList();\r
-            if (_shipListForm.Visible)\r
-                _shipListForm.UpdateList();\r
+            UpdateRepairList();\r
+            if (_listForm.Visible)\r
+                _listForm.UpdateList();\r
         }\r
 \r
         private void UpdatePanelShipInfo()\r
         {\r
             var statuses = _sniffer.GetShipStatuses(_currentFleet);\r
-            _shipLabels.SetShipInfo(statuses);\r
+            _shipLabels.SetShipLabels(statuses);\r
             if (_sniffer.CombinedFleetType == 0)\r
                 _combinedFleet = false;\r
             labelFleet1.Text = _combinedFleet ? "連合" : "第一";\r
             panelCombinedFleet.Visible = _combinedFleet;\r
             if (_combinedFleet)\r
-                _shipLabels.SetCombinedShipInfo(_sniffer.GetShipStatuses(0), _sniffer.GetShipStatuses(1));\r
+                _shipLabels.SetCombinedShipLabels(_sniffer.GetShipStatuses(0), _sniffer.GetShipStatuses(1));\r
             UpdateAkashiTimer();\r
             UpdateFighterPower();\r
             UpdateLoS();\r
@@ -611,12 +585,16 @@ namespace KancolleSniffer
         {\r
             var fp = _sniffer.GetFighterPower(_currentFleet);\r
             labelFighterPower.Text = fp[0].ToString("D");\r
-            toolTipFighterPower.SetToolTip(labelFighterPower, fp[0] == fp[1] ? $"{fp[0]}" : $"{fp[0]}~{fp[1]}");\r
+            var cr = _sniffer.GetContactTriggerRate(_currentFleet) * 100;\r
+            var text = "制空: " + (fp[0] == fp[1] ? $"{fp[0]}" : $"{fp[0]}~{fp[1]}") +\r
+                       $" 触接: {cr:f1}";\r
+            toolTipFighterPower.SetToolTip(labelFighterPower, text);\r
+            toolTipFighterPower.SetToolTip(labelFighterPowerCaption, text);\r
         }\r
 \r
         private void UpdateLoS()\r
         {\r
-            labelLoS.Text = _sniffer.GetFleetLineOfSights(_currentFleet).ToString("F1");\r
+            labelLoS.Text = (Floor(_sniffer.GetFleetLineOfSights(_currentFleet) * 10) / 10.0).ToString("F1");\r
         }\r
 \r
         private void UpdateBattleInfo()\r
@@ -632,10 +610,7 @@ namespace KancolleSniffer
             var battle = _sniffer.Battle;\r
             var color = new[] {DefaultForeColor, DefaultForeColor, Color.Blue, Color.Green, Color.Orange, Color.Red};\r
             labelFormation.Text = battle.Formation;\r
-            var enemyFp = battle.EnemyFighterPower;\r
-            labelEnemyFighterPower.Text = (enemyFp & BattleInfo.IncollectFighterPowerFlag) == 0\r
-                ? enemyFp.ToString()\r
-                : (enemyFp & ~BattleInfo.IncollectFighterPowerFlag) + "+";\r
+            labelEnemyFighterPower.Text = battle.EnemyFighterPower;\r
             labelFighterPower.ForeColor = color[battle.AirControlLevel + 1];\r
             if (_config.AlwaysShowResultRank)\r
                 ShowResultRank();\r
@@ -670,6 +645,13 @@ namespace KancolleSniffer
             _shipLabels.SetNDockLabels(_sniffer.NDock);\r
         }\r
 \r
+\r
+        private void labelNDock_Click(object sender, EventArgs e)\r
+        {\r
+            _ndockFinishTimeMode = !_ndockFinishTimeMode;\r
+            UpdateTimers();\r
+        }\r
+\r
         private void UpdateMissionLabels()\r
         {\r
             foreach (var entry in\r
@@ -692,13 +674,7 @@ namespace KancolleSniffer
             {\r
                 entry.Timer.Update();\r
                 SetTimerColor(entry.label, entry.Timer);\r
-                var rest = entry.Timer.Rest;\r
-                entry.label.Text =\r
-                    entry.Timer.EndTime == DateTime.MinValue\r
-                        ? ""\r
-                        : _missionFinishTimeMode\r
-                            ? entry.Timer.EndTime.ToString(@"dd\ HH\:mm")\r
-                            : rest.ToString(@"hh\:mm\:ss");\r
+                entry.label.Text = entry.Timer.ToString(_missionFinishTimeMode);\r
                 if (!entry.Timer.NeedRing)\r
                     continue;\r
                 _noticeQueue.Enqueue("遠征が終わりました", entry.Name, _config.Sounds["遠征終了"]);\r
@@ -808,9 +784,9 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private void UpdateDamagedShipList()\r
+        private void UpdateRepairList()\r
         {\r
-            _shipLabels.SetDamagedShipList(_sniffer.DamagedShipList);\r
+            _shipLabels.SetRepairList(_sniffer.RepairList);\r
         }\r
 \r
         private void UpdateQuestList()\r
@@ -823,19 +799,12 @@ namespace KancolleSniffer
             var name = new[] {labelQuest1, labelQuest2, labelQuest3, labelQuest4, labelQuest5, labelQuest6};\r
             var progress = new[]\r
             {labelProgress1, labelProgress2, labelProgress3, labelProgress4, labelProgress5, labelProgress6};\r
-            var color = new[]\r
-            {\r
-                Color.FromArgb(60, 141, 76), Color.FromArgb(232, 57, 41), Color.FromArgb(136, 204, 120),\r
-                Color.FromArgb(52, 147, 185), Color.FromArgb(220, 198, 126), Color.FromArgb(168, 111, 76),\r
-                Color.FromArgb(200, 148, 231)\r
-            };\r
-\r
             var quests = _sniffer.Quests;\r
             for (var i = 0; i < name.Length; i++)\r
             {\r
                 if (i < quests.Length)\r
                 {\r
-                    category[i].BackColor = color[quests[i].Category - 1];\r
+                    category[i].BackColor = quests[i].Color;\r
                     name[i].Text = quests[i].Name;\r
                     progress[i].Text = $"{quests[i].Progress:D}%";\r
                 }\r
@@ -1018,34 +987,34 @@ namespace KancolleSniffer
             UpdateItemInfo();\r
         }\r
 \r
-        private void labelDamgedShipListButton_Click(object sender, EventArgs e)\r
+        private void labelRepairListButton_Click(object sender, EventArgs e)\r
         {\r
-            if (panelDamagedShipList.Visible)\r
+            if (panelRepairList.Visible)\r
             {\r
-                panelDamagedShipList.Visible = false;\r
-                labelDamgedShipListButton.BackColor = DefaultBackColor;\r
+                panelRepairList.Visible = false;\r
+                labelRepairListButton.BackColor = DefaultBackColor;\r
             }\r
             else\r
             {\r
-                panelDamagedShipList.Visible = true;\r
-                panelDamagedShipList.BringToFront();\r
-                labelDamgedShipListButton.BackColor = SystemColors.ActiveCaption;\r
+                panelRepairList.Visible = true;\r
+                panelRepairList.BringToFront();\r
+                labelRepairListButton.BackColor = SystemColors.ActiveCaption;\r
             }\r
         }\r
 \r
-        private void panelDamagedShipList_Click(object sender, EventArgs e)\r
+        private void panelRepairList_Click(object sender, EventArgs e)\r
         {\r
-            panelDamagedShipList.Visible = false;\r
-            labelDamgedShipListButton.BackColor = DefaultBackColor;\r
+            panelRepairList.Visible = false;\r
+            labelRepairListButton.BackColor = DefaultBackColor;\r
         }\r
 \r
         private void ShipListToolStripMenuItem_Click(object sender, EventArgs e)\r
         {\r
-            _shipListForm.UpdateList();\r
-            _shipListForm.Show();\r
-            if (_shipListForm.WindowState == FormWindowState.Minimized)\r
-                _shipListForm.WindowState = FormWindowState.Normal;\r
-            _shipListForm.Activate();\r
+            _listForm.UpdateList();\r
+            _listForm.Show();\r
+            if (_listForm.WindowState == FormWindowState.Minimized)\r
+                _listForm.WindowState = FormWindowState.Normal;\r
+            _listForm.Activate();\r
         }\r
 \r
         private void LogToolStripMenuItem_Click(object sender, EventArgs e)\r