\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
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
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
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
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
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
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
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
}\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
}\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
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
\r
private void UpdateShipInfo()\r
{\r
- shipInfoPanel.SetCurrentFleet();\r
- shipInfoPanel.Update();\r
+ mainFleetPanel.Update();\r
Notifier.NotifyDamagedShip();\r
UpdateChargeInfo();\r
UpdateRepairList();\r
_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
\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
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
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