<SubType>Component</SubType>\r
</Compile>\r
<Compile Include="View\IUpdateable.cs" />\r
+ <Compile Include="View\MainFleetPanel.cs">\r
+ <SubType>Component</SubType>\r
+ </Compile>\r
<Compile Include="View\MaterialHistoryPanel.cs">\r
<SubType>Component</SubType>\r
</Compile>\r
this.CaptureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
this.ConfigToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
this.ExitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();\r
- this.labelFleet1 = new System.Windows.Forms.Label();\r
- this.labelFleet4 = new System.Windows.Forms.Label();\r
- this.labelFleet3 = new System.Windows.Forms.Label();\r
- this.labelFleet2 = new System.Windows.Forms.Label();\r
this.labelMaterialCaption = new System.Windows.Forms.Label();\r
this.label31 = new System.Windows.Forms.Label();\r
this.labelAkashiRepair = new System.Windows.Forms.Label();\r
this.questPanel = new KancolleSniffer.View.QuestPanel();\r
this.hqPanel = new KancolleSniffer.View.HqPanel();\r
this.materialHistoryPanel = new KancolleSniffer.View.MaterialHistoryPanel();\r
- this.shipInfoPanel = new KancolleSniffer.View.ShipInfoPanel();\r
- this.chargeStatus1 = new KancolleSniffer.View.ChargeStatus();\r
- this.chargeStatus2 = new KancolleSniffer.View.ChargeStatus();\r
- this.chargeStatus3 = new KancolleSniffer.View.ChargeStatus();\r
- this.chargeStatus4 = new KancolleSniffer.View.ChargeStatus();\r
- this.triangleMark1 = new KancolleSniffer.View.TriangleMark();\r
- this.triangleMark2 = new KancolleSniffer.View.TriangleMark();\r
- this.triangleMark3 = new KancolleSniffer.View.TriangleMark();\r
- this.triangleMark4 = new KancolleSniffer.View.TriangleMark();\r
this.dropDownButtonMaterialHistory = new KancolleSniffer.View.DropDownButton();\r
+ this.mainFleetPanel = new KancolleSniffer.View.MainFleetPanel();\r
this.contextMenuStripNotifyIcon.SuspendLayout();\r
this.contextMenuStripMain.SuspendLayout();\r
this.SuspendLayout();\r
this.ExitToolStripMenuItem.Text = "終了(&X)";\r
this.ExitToolStripMenuItem.Click += new System.EventHandler(this.ExitToolStripMenuItem_Click);\r
// \r
- // labelFleet1\r
- // \r
- this.labelFleet1.Location = new System.Drawing.Point(12, 43);\r
- this.labelFleet1.Name = "labelFleet1";\r
- this.labelFleet1.Size = new System.Drawing.Size(45, 12);\r
- this.labelFleet1.TabIndex = 1;\r
- this.labelFleet1.Text = "第一";\r
- this.labelFleet1.MouseLeave += new System.EventHandler(this.labelFleet1_MouseLeave);\r
- this.labelFleet1.MouseHover += new System.EventHandler(this.labelFleet1_MouseHover);\r
- // \r
- // labelFleet4\r
- // \r
- this.labelFleet4.Location = new System.Drawing.Point(177, 43);\r
- this.labelFleet4.Name = "labelFleet4";\r
- this.labelFleet4.Size = new System.Drawing.Size(45, 12);\r
- this.labelFleet4.TabIndex = 17;\r
- this.labelFleet4.Text = "第四";\r
- // \r
- // labelFleet3\r
- // \r
- this.labelFleet3.Location = new System.Drawing.Point(122, 43);\r
- this.labelFleet3.Name = "labelFleet3";\r
- this.labelFleet3.Size = new System.Drawing.Size(45, 12);\r
- this.labelFleet3.TabIndex = 19;\r
- this.labelFleet3.Text = "第三";\r
- // \r
- // labelFleet2\r
- // \r
- this.labelFleet2.Location = new System.Drawing.Point(67, 43);\r
- this.labelFleet2.Name = "labelFleet2";\r
- this.labelFleet2.Size = new System.Drawing.Size(45, 12);\r
- this.labelFleet2.TabIndex = 21;\r
- this.labelFleet2.Text = "第二";\r
- // \r
// labelMaterialCaption\r
// \r
this.labelMaterialCaption.AutoSize = true;\r
this.materialHistoryPanel.TabIndex = 65;\r
this.materialHistoryPanel.Visible = false;\r
// \r
- // shipInfoPanel\r
- // \r
- this.shipInfoPanel.AkashiRepairTimer = null;\r
- this.shipInfoPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
- this.shipInfoPanel.CombinedFleet = false;\r
- this.shipInfoPanel.Context = null;\r
- this.shipInfoPanel.CurrentFleet = 0;\r
- this.shipInfoPanel.Location = new System.Drawing.Point(6, 57);\r
- this.shipInfoPanel.Name = "shipInfoPanel";\r
- this.shipInfoPanel.ShowShipOnList = null;\r
- this.shipInfoPanel.Size = new System.Drawing.Size(220, 134);\r
- this.shipInfoPanel.TabIndex = 67;\r
- // \r
- // chargeStatus1\r
- // \r
- this.chargeStatus1.Context = null;\r
- this.chargeStatus1.Location = new System.Drawing.Point(40, 42);\r
- this.chargeStatus1.Name = "chargeStatus1";\r
- this.chargeStatus1.Size = new System.Drawing.Size(17, 13);\r
- this.chargeStatus1.TabIndex = 69;\r
- this.chargeStatus1.Text = "chargeStatus1";\r
- // \r
- // chargeStatus2\r
- // \r
- this.chargeStatus2.Context = null;\r
- this.chargeStatus2.Location = new System.Drawing.Point(95, 42);\r
- this.chargeStatus2.Name = "chargeStatus2";\r
- this.chargeStatus2.Size = new System.Drawing.Size(17, 13);\r
- this.chargeStatus2.TabIndex = 71;\r
- this.chargeStatus2.Text = "chargeStatus2";\r
- // \r
- // chargeStatus3\r
- // \r
- this.chargeStatus3.Context = null;\r
- this.chargeStatus3.Location = new System.Drawing.Point(150, 42);\r
- this.chargeStatus3.Name = "chargeStatus3";\r
- this.chargeStatus3.Size = new System.Drawing.Size(17, 13);\r
- this.chargeStatus3.TabIndex = 72;\r
- this.chargeStatus3.Text = "chargeStatus3";\r
- // \r
- // chargeStatus4\r
- // \r
- this.chargeStatus4.Context = null;\r
- this.chargeStatus4.Location = new System.Drawing.Point(205, 42);\r
- this.chargeStatus4.Name = "chargeStatus4";\r
- this.chargeStatus4.Size = new System.Drawing.Size(17, 13);\r
- this.chargeStatus4.TabIndex = 73;\r
- this.chargeStatus4.Text = "chargeStatus4";\r
- // \r
- // triangleMark1\r
- // \r
- this.triangleMark1.Location = new System.Drawing.Point(7, 42);\r
- this.triangleMark1.Name = "triangleMark1";\r
- this.triangleMark1.Size = new System.Drawing.Size(5, 13);\r
- this.triangleMark1.TabIndex = 75;\r
- this.triangleMark1.Text = "triangleMark1";\r
- // \r
- // triangleMark2\r
- // \r
- this.triangleMark2.Location = new System.Drawing.Point(62, 42);\r
- this.triangleMark2.Name = "triangleMark2";\r
- this.triangleMark2.Size = new System.Drawing.Size(5, 13);\r
- this.triangleMark2.TabIndex = 76;\r
- this.triangleMark2.Text = "triangleMark2";\r
- this.triangleMark2.Visible = false;\r
- // \r
- // triangleMark3\r
- // \r
- this.triangleMark3.Location = new System.Drawing.Point(117, 42);\r
- this.triangleMark3.Name = "triangleMark3";\r
- this.triangleMark3.Size = new System.Drawing.Size(5, 13);\r
- this.triangleMark3.TabIndex = 77;\r
- this.triangleMark3.Text = "triangleMark3";\r
- this.triangleMark3.Visible = false;\r
- // \r
- // triangleMark4\r
- // \r
- this.triangleMark4.Location = new System.Drawing.Point(172, 42);\r
- this.triangleMark4.Name = "triangleMark4";\r
- this.triangleMark4.Size = new System.Drawing.Size(5, 13);\r
- this.triangleMark4.TabIndex = 78;\r
- this.triangleMark4.Text = "triangleMark4";\r
- this.triangleMark4.Visible = false;\r
- // \r
// dropDownButtonMaterialHistory\r
// \r
this.dropDownButtonMaterialHistory.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
this.dropDownButtonMaterialHistory.TabIndex = 80;\r
this.dropDownButtonMaterialHistory.Text = "dropDownButton1";\r
// \r
+ // mainFleetPanel\r
+ // \r
+ this.mainFleetPanel.Context = null;\r
+ this.mainFleetPanel.Location = new System.Drawing.Point(6, 42);\r
+ this.mainFleetPanel.Name = "mainFleetPanel";\r
+ this.mainFleetPanel.Size = new System.Drawing.Size(220, 149);\r
+ this.mainFleetPanel.TabIndex = 82;\r
+ // \r
// MainForm\r
// \r
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\r
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
this.ClientSize = new System.Drawing.Size(232, 456);\r
this.ContextMenuStrip = this.contextMenuStripMain;\r
+ this.Controls.Add(this.mainFleetPanel);\r
this.Controls.Add(this.dropDownButtonMaterialHistory);\r
- this.Controls.Add(this.triangleMark4);\r
- this.Controls.Add(this.triangleMark3);\r
- this.Controls.Add(this.triangleMark2);\r
- this.Controls.Add(this.triangleMark1);\r
- this.Controls.Add(this.chargeStatus3);\r
- this.Controls.Add(this.chargeStatus4);\r
- this.Controls.Add(this.chargeStatus2);\r
- this.Controls.Add(this.chargeStatus1);\r
- this.Controls.Add(this.shipInfoPanel);\r
this.Controls.Add(this.materialHistoryPanel);\r
this.Controls.Add(this.hqPanel);\r
this.Controls.Add(this.kdockPanel);\r
this.Controls.Add(this.dropDownButtonRepairList);\r
this.Controls.Add(this.label31);\r
this.Controls.Add(this.labelMaterialCaption);\r
- this.Controls.Add(this.labelFleet2);\r
- this.Controls.Add(this.labelFleet3);\r
- this.Controls.Add(this.labelFleet4);\r
this.Controls.Add(this.labelMissionCaption);\r
this.Controls.Add(this.labelQuest);\r
this.Controls.Add(this.labelConstruct);\r
this.Controls.Add(this.labelNDockCaption);\r
- this.Controls.Add(this.labelFleet1);\r
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;\r
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
this.MaximizeBox = false;\r
private System.Windows.Forms.ContextMenuStrip contextMenuStripMain;\r
private System.Windows.Forms.ToolStripMenuItem ConfigToolStripMenuItem;\r
private System.Windows.Forms.ToolStripMenuItem ExitToolStripMenuItem;\r
- private System.Windows.Forms.Label labelFleet1;\r
- private System.Windows.Forms.Label labelFleet4;\r
- private System.Windows.Forms.Label labelFleet3;\r
- private System.Windows.Forms.Label labelFleet2;\r
private System.Windows.Forms.Label labelMaterialCaption;\r
private DropDownButton dropDownButtonRepairList;\r
private System.Windows.Forms.Label label31;\r
private KDockPanel kdockPanel;\r
private HqPanel hqPanel;\r
private MaterialHistoryPanel materialHistoryPanel;\r
- private ShipInfoPanel shipInfoPanel;\r
- private ChargeStatus chargeStatus1;\r
- private ChargeStatus chargeStatus2;\r
- private ChargeStatus chargeStatus3;\r
- private ChargeStatus chargeStatus4;\r
- private TriangleMark triangleMark1;\r
- private TriangleMark triangleMark2;\r
- private TriangleMark triangleMark3;\r
- private TriangleMark triangleMark4;\r
private DropDownButton dropDownButtonMaterialHistory;\r
+ private MainFleetPanel mainFleetPanel;\r
}\r
}\r
\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
private void SetupView()\r
{\r
SetScaleFactorOfDpiScaling();\r
- SetupFleetClick();\r
SetupQuestPanel();\r
SetMainFormEventHandler();\r
- shipInfoPanel.AkashiRepairTimer = labelAkashiRepairTimer;\r
- shipInfoPanel.ShowShipOnList = ShowShipOnShipList;\r
+ mainFleetPanel.AkashiRepairTimer = labelAkashiRepairTimer;\r
+ mainFleetPanel.ShowShipOnList = ShowShipOnShipList;\r
panelRepairList.CreateLabels(panelRepairList_Click);\r
ndockPanel.SetClickHandler(labelNDockCaption);\r
missionPanel.SetClickHandler(labelMissionCaption);\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
if (update == Sniffer.Update.Start)\r
{\r
hqPanel.Login.Visible = false;\r
- shipInfoPanel.Guide.Visible = false;\r
+ mainFleetPanel.Start();\r
_started = true;\r
Notifier.StopAllRepeat();\r
return;\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
var prev = CurrentAutoScaleDimensions;\r
foreach (var control in new Control[]\r
{\r
- this, shipInfoPanel.Guide, hqPanel.Login,\r
+ this, mainFleetPanel.Guide, hqPanel.Login,\r
contextMenuStripMain\r
}.Concat(_main.Controls))\r
{\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
--- /dev/null
+using System;\r
+using System.Drawing;\r
+using System.Linq;\r
+using System.Threading;\r
+using System.Windows.Forms;\r
+using KancolleSniffer.Model;\r
+using Clipboard = KancolleSniffer.Util.Clipboard;\r
+\r
+namespace KancolleSniffer.View\r
+{\r
+ public class MainFleetPanel : PanelWithToolTip, IUpdateTimers\r
+ {\r
+ private readonly ShipInfoPanel _shipInfoPanel = new ShipInfoPanel\r
+ {\r
+ Location = new Point(0, 15),\r
+ Size = new Size(220, 134)\r
+ };\r
+\r
+ private readonly ChargeStatus[] _chargeStatus =\r
+ {\r
+ new ChargeStatus\r
+ {\r
+ Location = new Point(34, 0),\r
+ Size = new Size(17, 13)\r
+ },\r
+ new ChargeStatus\r
+ {\r
+ Location = new Point(89, 0),\r
+ Size = new Size(17, 13)\r
+ },\r
+ new ChargeStatus\r
+ {\r
+ Location = new Point(144, 0),\r
+ Size = new Size(17, 13)\r
+ },\r
+ new ChargeStatus\r
+ {\r
+ Location = new Point(199, 0),\r
+ Size = new Size(17, 13)\r
+ }\r
+ };\r
+\r
+ private readonly TriangleMark[] _triangleMarks =\r
+ {\r
+ new TriangleMark\r
+ {\r
+ Location = new Point(1, 0),\r
+ Name = "triangleMark1",\r
+ Size = new Size(5, 13)\r
+ },\r
+ new TriangleMark\r
+ {\r
+ Location = new Point(56, 0),\r
+ Name = "triangleMark2",\r
+ Size = new Size(5, 13)\r
+ },\r
+ new TriangleMark\r
+ {\r
+ Location = new Point(111, 0),\r
+ Name = "triangleMark3",\r
+ Size = new Size(5, 13)\r
+ },\r
+ new TriangleMark\r
+ {\r
+ Location = new Point(166, 0),\r
+ Name = "triangleMark4",\r
+ Size = new Size(5, 13)\r
+ }\r
+ };\r
+\r
+ private readonly Control[] _fleets =\r
+ {\r
+ new Label\r
+ {\r
+ Location = new Point(6, 1),\r
+ Size = new Size(45, 12),\r
+ Text = "第一"\r
+ },\r
+ new Label\r
+ {\r
+ Location = new Point(61, 1),\r
+ Size = new Size(45, 12),\r
+ Text = "第二"\r
+ },\r
+ new Label\r
+ {\r
+ Location = new Point(116, 1),\r
+ Size = new Size(45, 12),\r
+ Text = "第三"\r
+ },\r
+ new Label\r
+ {\r
+ Location = new Point(171, 1),\r
+ Size = new Size(45, 12),\r
+ Text = "第四"\r
+ }\r
+ };\r
+\r
+ private UpdateContext _context;\r
+\r
+ public UpdateContext Context\r
+ {\r
+ get => _context;\r
+ set\r
+ {\r
+ _context = value;\r
+ _shipInfoPanel.Context = value;\r
+ foreach (var c in _chargeStatus)\r
+ c.Context = value;\r
+ }\r
+ }\r
+\r
+ public MainFleetPanel()\r
+ {\r
+ SetupFleetClick();\r
+ _fleets[0].MouseHover += labelFleet1_MouseHover;\r
+ _fleets[0].MouseLeave += labelFleet1_MouseLeave;\r
+ for (var i = 1; i < _triangleMarks.Length; i++)\r
+ _triangleMarks[i].Visible = false;\r
+ Controls.AddRange(_chargeStatus.Concat(_fleets).Concat(_triangleMarks).Concat(new[] {_shipInfoPanel})\r
+ .ToArray());\r
+ }\r
+\r
+ private bool _started;\r
+\r
+ public void Start()\r
+ {\r
+ _started = true;\r
+ _shipInfoPanel.Guide.Visible = false;\r
+ }\r
+\r
+ public LinkLabel Guide => _shipInfoPanel.Guide;\r
+\r
+ public Label AkashiRepairTimer\r
+ {\r
+ set => _shipInfoPanel.AkashiRepairTimer = value;\r
+ }\r
+\r
+ public Action<int> ShowShipOnList\r
+ {\r
+ set => _shipInfoPanel.ShowShipOnList = value;\r
+ }\r
+\r
+ public bool ShowHpInPercent => _shipInfoPanel.ShowHpInPercent;\r
+\r
+ public void ToggleHpPercent() => _shipInfoPanel.ToggleHpPercent();\r
+\r
+ public new void Update()\r
+ {\r
+ _shipInfoPanel.SetCurrentFleet();\r
+ _shipInfoPanel.Update();\r
+ }\r
+\r
+ public void UpdateBattleInfo()\r
+ {\r
+ _shipInfoPanel.UpdateBattleInfo();\r
+ }\r
+\r
+ private void UpdatePanelShipInfo()\r
+ {\r
+ _shipInfoPanel.Update();\r
+ ShowCurrentFleetNumber();\r
+ _fleets[0].Text = _shipInfoPanel.CombinedFleet ? CombinedName : "第一";\r
+ }\r
+\r
+ public void UpdateChargeInfo()\r
+ {\r
+ foreach (var status in _chargeStatus)\r
+ {\r
+ status.Update();\r
+ ToolTip.SetToolTip(status, status.Text);\r
+ }\r
+ }\r
+\r
+ private void ShowCurrentFleetNumber()\r
+ {\r
+ for (var i = 0; i < _triangleMarks.Length; i++)\r
+ _triangleMarks[i].Visible = _shipInfoPanel.CurrentFleet == i;\r
+ }\r
+\r
+ private void SetupFleetClick()\r
+ {\r
+ SetupFleetClick(_fleets);\r
+ // ReSharper disable once CoVariantArrayConversion\r
+ SetupFleetClick(_chargeStatus);\r
+ }\r
+\r
+ private void SetupFleetClick(Control[] a)\r
+ {\r
+ a[0].Tag = 0;\r
+ a[0].Click += labelFleet1_Click;\r
+ a[0].DoubleClick += labelFleet1_DoubleClick;\r
+ for (var fleet = 1; fleet < a.Length; fleet++)\r
+ {\r
+ a[fleet].Tag = fleet;\r
+ a[fleet].Click += labelFleet_Click;\r
+ a[fleet].DoubleClick += labelFleet_DoubleClick;\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 = Context.Sniffer.IsCombinedFleet && !_shipInfoPanel.CombinedFleet;\r
+ UpdatePanelShipInfo();\r
+ }\r
+\r
+ private void labelFleet1_MouseHover(object sender, EventArgs e)\r
+ {\r
+ _fleets[0].Text =\r
+ _shipInfoPanel.CurrentFleet == 0 && Context.Sniffer.IsCombinedFleet && !_shipInfoPanel.CombinedFleet\r
+ ? "連合"\r
+ : "第一";\r
+ }\r
+\r
+ private void labelFleet1_MouseLeave(object sender, EventArgs e)\r
+ {\r
+ _fleets[0].Text = _shipInfoPanel.CombinedFleet ? CombinedName : "第一";\r
+ }\r
+\r
+ private string CombinedName\r
+ {\r
+ get\r
+ {\r
+ switch (Context.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 labelFleet_DoubleClick(object sender, EventArgs e)\r
+ {\r
+ if (!_started)\r
+ return;\r
+ var fleet = (int)((Control)sender).Tag;\r
+ var text = TextGenerator.GenerateFleetData(Context.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(Context.Sniffer, 0);\r
+ if (_shipInfoPanel.CombinedFleet)\r
+ text += TextGenerator.GenerateFleetData(Context.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
+ ToolTip.Show("コピーしました。", fleetButton, 1000);\r
+ }\r
+\r
+ public void UpdateTimers()\r
+ {\r
+ _shipInfoPanel.UpdateTimers();\r
+ }\r
+ }\r
+}
\ No newline at end of file