OSDN Git Service

questlistがすべての任務を返す仕様変更に対応する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / MainForm.cs
index 9efd82a..b150101 100644 (file)
 \r
 using System;\r
 using System.Collections.Generic;\r
-using System.Diagnostics;\r
 using System.Drawing;\r
 using System.Linq;\r
-using System.Threading;\r
-using System.Threading.Tasks;\r
 using System.Windows.Forms;\r
-using KancolleSniffer.Model;\r
 using KancolleSniffer.Notification;\r
 using KancolleSniffer.Util;\r
 using KancolleSniffer.View;\r
-using Clipboard = KancolleSniffer.Util.Clipboard;\r
 \r
 namespace KancolleSniffer\r
 {\r
@@ -33,7 +28,8 @@ namespace KancolleSniffer
         private readonly ResizableToolTip _toolTip = new ResizableToolTip();\r
         private readonly ResizableToolTip _tooltipCopy = new ResizableToolTip {ShowAlways = false, AutomaticDelay = 0};\r
         private readonly ListFormGroup _listFormGroup;\r
-        private bool _started;\r
+        private readonly ContextMenuMain _contextMenuMain = new ContextMenuMain();\r
+        private readonly ContextMenuNotifyIcon _contextMenuNotifyIcon = new ContextMenuNotifyIcon();\r
 \r
         private IEnumerable<IUpdateContext> _updateable;\r
         private IEnumerable<IUpdateTimers> _timers;\r
@@ -47,6 +43,9 @@ namespace KancolleSniffer
         public MainForm(Main main)\r
         {\r
             InitializeComponent();\r
+            notifyIconMain.ContextMenuStrip = _contextMenuNotifyIcon;\r
+            // ReSharper disable once VirtualMemberCallInConstructor\r
+            ContextMenuStrip = _contextMenuMain;\r
             SetupMain(main);\r
             _listFormGroup = new ListFormGroup(this);\r
             Notifier = new Notifier(FlashWindow, ShowTaster, PlaySound);\r
@@ -63,11 +62,11 @@ namespace KancolleSniffer
         private void SetupView()\r
         {\r
             SetScaleFactorOfDpiScaling();\r
-            SetupFleetClick();\r
             SetupQuestPanel();\r
             SetMainFormEventHandler();\r
-            shipInfoPanel.AkashiRepairTimer = labelAkashiRepairTimer;\r
-            shipInfoPanel.ShowShipOnList = ShowShipOnShipList;\r
+            SetContextMenuEventHandler();\r
+            mainFleetPanel.AkashiRepairTimer = labelAkashiRepairTimer;\r
+            mainFleetPanel.ShowShipOnList = ShowShipOnShipList;\r
             panelRepairList.CreateLabels(panelRepairList_Click);\r
             ndockPanel.SetClickHandler(labelNDockCaption);\r
             missionPanel.SetClickHandler(labelMissionCaption);\r
@@ -84,17 +83,37 @@ namespace KancolleSniffer
             Activated += MainForm_Activated;\r
         }\r
 \r
+        private void SetContextMenuEventHandler()\r
+        {\r
+            SetContextMenuMainEventHandler();\r
+            SetContextMenuNotifyIconEventHandler();\r
+        }\r
+\r
+        private void SetContextMenuMainEventHandler()\r
+        {\r
+            _contextMenuMain.SetClickHandlers(\r
+                _listFormGroup.ShowOrCreate,\r
+                _main.ShowReport,\r
+                _main.StartCapture,\r
+                _main.ShowConfigDialog,\r
+                Close);\r
+        }\r
+\r
+        private void SetContextMenuNotifyIconEventHandler()\r
+        {\r
+            _contextMenuNotifyIcon.SetEventHandlers(RevertFromIcon, Close);\r
+        }\r
+\r
         private void SetupUpdateable()\r
         {\r
             _updateable = new IUpdateContext[]\r
             {\r
-                hqPanel, missionPanel, kdockPanel, ndockPanel, materialHistoryPanel, shipInfoPanel, chargeStatus1,\r
-                chargeStatus2, chargeStatus3, chargeStatus4, Notifier\r
+                hqPanel, missionPanel, kdockPanel, ndockPanel, materialHistoryPanel, mainFleetPanel, Notifier\r
             };\r
             var context = new UpdateContext(Sniffer, Config, () => _main.Step);\r
             foreach (var updateable in _updateable)\r
                 updateable.Context = context;\r
-            _timers = new IUpdateTimers[] {missionPanel, kdockPanel, ndockPanel, shipInfoPanel};\r
+            _timers = new IUpdateTimers[] {missionPanel, kdockPanel, ndockPanel, mainFleetPanel};\r
         }\r
 \r
         private void SetScaleFactorOfDpiScaling()\r
@@ -107,7 +126,7 @@ namespace KancolleSniffer
         private void SetupQuestPanel()\r
         {\r
             int prevHeight = questPanel.Height;\r
-            questPanel.CreateLabels(Config.QuestLines, labelQuest_DoubleClick);\r
+            questPanel.CreateLabels(Config.QuestLines);\r
             Height += questPanel.Height - prevHeight;\r
         }\r
 \r
@@ -116,15 +135,12 @@ namespace KancolleSniffer
             if (update == Sniffer.Update.Start)\r
             {\r
                 hqPanel.Login.Visible = false;\r
-                shipInfoPanel.Guide.Visible = false;\r
-                _started = true;\r
+                mainFleetPanel.Start();\r
                 Notifier.StopAllRepeat();\r
                 return;\r
             }\r
-            if (!_started)\r
+            if (!Sniffer.Started)\r
                 return;\r
-            if (_main.Step.Now == DateTime.MinValue)\r
-                _main.Step.SetNow();\r
             if ((update & Sniffer.Update.Item) != 0)\r
                 UpdateItemInfo();\r
             if ((update & Sniffer.Update.Timer) != 0)\r
@@ -150,10 +166,10 @@ namespace KancolleSniffer
             if (Config.HideOnMinimized && WindowState == FormWindowState.Minimized)\r
                 ShowInTaskbar = false;\r
             if (Config.ShowHpInPercent)\r
-                shipInfoPanel.ToggleHpPercent();\r
+                mainFleetPanel.ToggleHpPercent();\r
             if (Config.ShipList.Visible)\r
                 _listFormGroup.Show();\r
-            _main.CheckVersionUpMain(shipInfoPanel.Guide);\r
+            _main.CheckVersionUpMain(mainFleetPanel.Guide);\r
         }\r
 \r
         private void MainForm_FormClosing(object sender, FormClosingEventArgs e)\r
@@ -169,7 +185,7 @@ namespace KancolleSniffer
             }\r
             _listFormGroup.Close();\r
             Config.Location = (WindowState == FormWindowState.Normal ? Bounds : RestoreBounds).Location;\r
-            Config.ShowHpInPercent = shipInfoPanel.ShowHpInPercent;\r
+            Config.ShowHpInPercent = mainFleetPanel.ShowHpInPercent;\r
         }\r
 \r
         private void MainForm_Resize(object sender, EventArgs e)\r
@@ -224,26 +240,16 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        private void notifyIconMain_MouseDoubleClick(object sender, MouseEventArgs e)\r
-        {\r
-            NotifyIconOpenToolStripMenuItem_Click(sender, e);\r
-        }\r
-\r
-        private void NotifyIconOpenToolStripMenuItem_Click(object sender, EventArgs e)\r
+        private void RevertFromIcon()\r
         {\r
             ShowInTaskbar = true;\r
             WindowState = FormWindowState.Normal;\r
             TopMost = _listFormGroup.TopMost = Config.TopMost; // 最前面に表示されなくなることがあるのを回避する\r
         }\r
 \r
-        private void ExitToolStripMenuItem_Click(object sender, EventArgs e)\r
-        {\r
-            Close();\r
-        }\r
-\r
-        private void ConfigToolStripMenuItem_Click(object sender, EventArgs e)\r
+        private void notifyIconMain_MouseDoubleClick(object sender, MouseEventArgs e)\r
         {\r
-            _main.ShowConfigDialog();\r
+            RevertFromIcon();\r
         }\r
 \r
         private void PerformZoom()\r
@@ -257,8 +263,8 @@ namespace KancolleSniffer
             var prev = CurrentAutoScaleDimensions;\r
             foreach (var control in new Control[]\r
             {\r
-                this, shipInfoPanel.Guide, hqPanel.Login,\r
-                contextMenuStripMain\r
+                this, mainFleetPanel.Guide, hqPanel.Login,\r
+                _contextMenuMain\r
             }.Concat(_main.Controls))\r
             {\r
                 control.Font = ZoomFont(control.Font);\r
@@ -326,8 +332,7 @@ namespace KancolleSniffer
 \r
         private void UpdateShipInfo()\r
         {\r
-            shipInfoPanel.SetCurrentFleet();\r
-            shipInfoPanel.Update();\r
+            mainFleetPanel.Update();\r
             Notifier.NotifyDamagedShip();\r
             UpdateChargeInfo();\r
             UpdateRepairList();\r
@@ -336,43 +341,11 @@ namespace KancolleSniffer
                 _listFormGroup.UpdateList();\r
         }\r
 \r
-        private void UpdatePanelShipInfo()\r
-        {\r
-            shipInfoPanel.Update();\r
-            ShowCurrentFleetNumber();\r
-            labelFleet1.Text = shipInfoPanel.CombinedFleet ? CombinedName : "第一";\r
-        }\r
-\r
-        private void ShowCurrentFleetNumber()\r
-        {\r
-            var labels = new[] {triangleMark1, triangleMark2, triangleMark3, triangleMark4};\r
-            for (var i = 0; i < labels.Length; i++)\r
-                labels[i].Visible = shipInfoPanel.CurrentFleet == i;\r
-        }\r
-\r
-        private string CombinedName\r
-        {\r
-            get\r
-            {\r
-                switch (Sniffer.Fleets[0].CombinedType)\r
-                {\r
-                    case CombinedType.Carrier:\r
-                        return "機動";\r
-                    case CombinedType.Surface:\r
-                        return "水上";\r
-                    case CombinedType.Transport:\r
-                        return "輸送";\r
-                    default:\r
-                        return "連合";\r
-                }\r
-            }\r
-        }\r
-\r
         private void UpdateBattleInfo()\r
         {\r
             _listFormGroup.UpdateBattleResult();\r
             _listFormGroup.UpdateAirBattleResult();\r
-            shipInfoPanel.UpdateBattleInfo();\r
+            mainFleetPanel.UpdateBattleInfo();\r
         }\r
 \r
         private void UpdateCellInfo()\r
@@ -382,11 +355,7 @@ namespace KancolleSniffer
 \r
         private void UpdateChargeInfo()\r
         {\r
-            foreach (var status in new[] {chargeStatus1, chargeStatus2, chargeStatus3, chargeStatus4})\r
-            {\r
-                status.Update();\r
-                _toolTip.SetToolTip(status, status.Text);\r
-            }\r
+            mainFleetPanel.UpdateChargeInfo();\r
         }\r
 \r
         private void UpdateNDocLabels()\r
@@ -439,113 +408,6 @@ namespace KancolleSniffer
             base.WndProc(ref m);\r
         }\r
 \r
-        private void SetupFleetClick()\r
-        {\r
-            var labels = new[]\r
-            {\r
-                new Control[] {labelFleet1, labelFleet2, labelFleet3, labelFleet4},\r
-                new Control[] {chargeStatus1, chargeStatus2, chargeStatus3, chargeStatus4}\r
-            };\r
-            foreach (var a in labels)\r
-            {\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
-                    a[fleet].DoubleClick += labelFleet_DoubleClick;\r
-                }\r
-            }\r
-        }\r
-\r
-        private void labelFleet_Click(object sender, EventArgs e)\r
-        {\r
-            if (!_started)\r
-                return;\r
-            var fleet = (int)((Control)sender).Tag;\r
-            if (shipInfoPanel.CurrentFleet == fleet)\r
-                return;\r
-            shipInfoPanel.CombinedFleet = false;\r
-            shipInfoPanel.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 (shipInfoPanel.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
-            shipInfoPanel.CombinedFleet = Sniffer.IsCombinedFleet && !shipInfoPanel.CombinedFleet;\r
-            UpdatePanelShipInfo();\r
-        }\r
-\r
-        private void labelFleet1_MouseHover(object sender, EventArgs e)\r
-        {\r
-            labelFleet1.Text =\r
-                shipInfoPanel.CurrentFleet == 0 && Sniffer.IsCombinedFleet && !shipInfoPanel.CombinedFleet\r
-                    ? "連合"\r
-                    : "第一";\r
-        }\r
-\r
-        private void labelFleet1_MouseLeave(object sender, EventArgs e)\r
-        {\r
-            labelFleet1.Text = shipInfoPanel.CombinedFleet ? CombinedName : "第一";\r
-        }\r
-\r
-        private void labelFleet_DoubleClick(object sender, EventArgs e)\r
-        {\r
-            if (!_started)\r
-                return;\r
-            var fleet = (int)((Control)sender).Tag;\r
-            var text = TextGenerator.GenerateFleetData(Sniffer, fleet);\r
-            CopyFleetText(text, (Control)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 (shipInfoPanel.CombinedFleet)\r
-                text += TextGenerator.GenerateFleetData(Sniffer, 1);\r
-            CopyFleetText(text, (Control)sender);\r
-        }\r
-\r
-        private void CopyFleetText(string text, Control fleetButton)\r
-        {\r
-            if (string.IsNullOrEmpty(text))\r
-                return;\r
-            Clipboard.SetText(text);\r
-            _tooltipCopy.Active = true;\r
-            _tooltipCopy.Show("コピーしました。", fleetButton);\r
-            Task.Run(async () =>\r
-            {\r
-                await Task.Delay(1000);\r
-                _tooltipCopy.Active = false;\r
-            });\r
-        }\r
-\r
         private void labelRepairListButton_Click(object sender, EventArgs e)\r
         {\r
             if (panelRepairList.Visible)\r
@@ -566,51 +428,5 @@ namespace KancolleSniffer
             panelRepairList.Visible = false;\r
             dropDownButtonRepairList.BackColor = DefaultBackColor;\r
         }\r
-\r
-        private void ShipListToolStripMenuItem_Click(object sender, EventArgs e)\r
-        {\r
-            _listFormGroup.ShowOrCreate();\r
-        }\r
-\r
-        private void LogToolStripMenuItem_Click(object sender, EventArgs e)\r
-        {\r
-            Process.Start("http://localhost:" + Config.Proxy.Listen + "/");\r
-        }\r
-\r
-        private void labelClearQuest_Click(object sender, EventArgs e)\r
-        {\r
-            Sniffer.ClearQuests();\r
-            UpdateQuestList();\r
-        }\r
-\r
-        private void labelClearQuest_MouseDown(object sender, MouseEventArgs e)\r
-        {\r
-            labelClearQuest.BackColor = CustomColors.ActiveButtonColor;\r
-        }\r
-\r
-        private void labelClearQuest_MouseUp(object sender, MouseEventArgs e)\r
-        {\r
-            labelClearQuest.BackColor = DefaultBackColor;\r
-        }\r
-\r
-        private void labelQuest_DoubleClick(object sender, EventArgs e)\r
-        {\r
-            var label = (Label)sender;\r
-            if (string.IsNullOrEmpty(label.Text))\r
-                return;\r
-            Clipboard.SetText(label.Text);\r
-            _tooltipCopy.Active = true;\r
-            _tooltipCopy.Show("コピーしました。", label);\r
-            Task.Run(async () =>\r
-            {\r
-                await Task.Delay(1000);\r
-                _tooltipCopy.Active = false;\r
-            });\r
-        }\r
-\r
-        private void CaptureToolStripMenuItem_Click(object sender, EventArgs e)\r
-        {\r
-            _main.StartCapture();\r
-        }\r
     }\r
 }
\ No newline at end of file