OSDN Git Service

「連合」のダブルクリックで連合艦隊の編成をコピーする
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 13 Sep 2018 11:25:12 +0000 (20:25 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 13 Sep 2018 11:25:12 +0000 (20:25 +0900)
KancolleSniffer/MainForm.cs

index b50e133..06d00da 100644 (file)
@@ -24,6 +24,7 @@ using System.Net;
 using System.Runtime.InteropServices;\r
 using System.Text;\r
 using System.Text.RegularExpressions;\r
+using System.Threading;\r
 using System.Threading.Tasks;\r
 using System.Windows.Forms;\r
 using KancolleSniffer.Log;\r
@@ -32,6 +33,7 @@ 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
 \r
 namespace KancolleSniffer\r
@@ -450,7 +452,7 @@ namespace KancolleSniffer
         public void ApplyLogSetting()\r
         {\r
             LogServer.OutputDir = _config.Log.OutputDir;\r
-            LogServer.LogProcessor = new LogProcessor(_sniffer.Material.MaterialHistory);\r
+            LogServer.LogProcessor = new LogProcessor(_sniffer.Material.MaterialHistory, _sniffer.MapDictionary);\r
             _sniffer.EnableLog(_config.Log.On ? LogType.All : LogType.None);\r
             _sniffer.MaterialLogInterval = _config.Log.MaterialLogInterval;\r
             _sniffer.LogOutputDir = _config.Log.OutputDir;\r
@@ -1144,7 +1146,10 @@ namespace KancolleSniffer
             };\r
             foreach (var a in labels)\r
             {\r
-                for (var fleet = 0; fleet < labels[0].Length; fleet++)\r
+                a[0].Tag = 0;\r
+                a[0].Click += labelFleet1_Click;\r
+                a[0].DoubleClick += labelFleet1_DoubleClick;\r
+                for (var fleet = 1; fleet < labels[0].Length; fleet++)\r
                 {\r
                     a[fleet].Tag = fleet;\r
                     a[fleet].Click += labelFleet_Click;\r
@@ -1159,18 +1164,39 @@ namespace KancolleSniffer
                 return;\r
             var fleet = (int)((Label)sender).Tag;\r
             if (_currentFleet == fleet)\r
-            {\r
-                if (fleet > 0)\r
-                    return;\r
-                _combinedFleet = _sniffer.IsCombinedFleet && !_combinedFleet;\r
-                UpdatePanelShipInfo();\r
                 return;\r
-            }\r
             _combinedFleet = false;\r
             _currentFleet = fleet;\r
             UpdatePanelShipInfo();\r
         }\r
 \r
+        private readonly SemaphoreSlim _clickSemaphore = new SemaphoreSlim(1);\r
+        private readonly SemaphoreSlim _doubleClickSemaphore = new SemaphoreSlim(0);\r
+\r
+        private async void labelFleet1_Click(object sender, EventArgs e)\r
+        {\r
+            if (!_started)\r
+                return;\r
+            if (_currentFleet != 0)\r
+            {\r
+                labelFleet_Click(sender, e);\r
+                return;\r
+            }\r
+            if (!_clickSemaphore.Wait(0))\r
+                return;\r
+            try\r
+            {\r
+                if (await _doubleClickSemaphore.WaitAsync(SystemInformation.DoubleClickTime))\r
+                    return;\r
+            }\r
+            finally\r
+            {\r
+                _clickSemaphore.Release();\r
+            }\r
+            _combinedFleet = _sniffer.IsCombinedFleet && !_combinedFleet;\r
+            UpdatePanelShipInfo();\r
+        }\r
+\r
         private void labelFleet1_MouseHover(object sender, EventArgs e)\r
         {\r
             labelFleet1.Text = _currentFleet == 0 && _sniffer.IsCombinedFleet && !_combinedFleet ? "連合" : "第一";\r
@@ -1187,11 +1213,27 @@ namespace KancolleSniffer
                 return;\r
             var fleet = (int)((Label)sender).Tag;\r
             var text = TextGenerator.GenerateFleetData(_sniffer, fleet);\r
+            CopyFleetText(text, (Label)sender);\r
+        }\r
+\r
+        private void labelFleet1_DoubleClick(object sender, EventArgs e)\r
+        {\r
+            if (!_started)\r
+                return;\r
+            _doubleClickSemaphore.Release();\r
+            var text = TextGenerator.GenerateFleetData(_sniffer, 0);\r
+            if (_combinedFleet)\r
+                text += TextGenerator.GenerateFleetData(_sniffer, 1);\r
+            CopyFleetText(text, (Label)sender);\r
+        }\r
+\r
+        private void CopyFleetText(string text, Label fleetButton)\r
+        {\r
             if (string.IsNullOrEmpty(text))\r
                 return;\r
             Clipboard.SetText(text);\r
             _tooltipCopy.Active = true;\r
-            _tooltipCopy.Show("コピーしました。", (Label)sender);\r
+            _tooltipCopy.Show("コピーしました。", fleetButton);\r
             Task.Run(async () =>\r
             {\r
                 await Task.Delay(1000);\r