<DependentUpon>DebugDialog.cs</DependentUpon>\r
</Compile>\r
<Compile Include="DockInfo.cs" />\r
+ <Compile Include="ShipInfoLabels.cs" />\r
<Compile Include="MainForm.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
this.label2 = new System.Windows.Forms.Label();\r
this.labelNumOfShips = new System.Windows.Forms.Label();\r
this.label1 = new System.Windows.Forms.Label();\r
- this.panelFleet1 = new System.Windows.Forms.Panel();\r
+ this.panelShipInfo = new System.Windows.Forms.Panel();\r
this.panelBattleInfo = new System.Windows.Forms.Panel();\r
this.labelEnemyAirSuperiority = new System.Windows.Forms.Label();\r
this.label30 = new System.Windows.Forms.Label();\r
this.labelDamgedShipListButton = new System.Windows.Forms.Label();\r
this.label31 = new System.Windows.Forms.Label();\r
this.panelHeadquarters.SuspendLayout();\r
- this.panelFleet1.SuspendLayout();\r
+ this.panelShipInfo.SuspendLayout();\r
this.panelBattleInfo.SuspendLayout();\r
this.panelMaterialHistory.SuspendLayout();\r
this.panelDock.SuspendLayout();\r
this.label1.TabIndex = 0;\r
this.label1.Text = "艦娘数";\r
// \r
- // panelFleet1\r
- // \r
- this.panelFleet1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
- this.panelFleet1.Controls.Add(this.panelBattleInfo);\r
- this.panelFleet1.Controls.Add(this.label19);\r
- this.panelFleet1.Controls.Add(this.labelAirSuperiority);\r
- this.panelFleet1.Controls.Add(this.label27);\r
- this.panelFleet1.Controls.Add(this.label21);\r
- this.panelFleet1.Controls.Add(this.labelCondTimer3);\r
- this.panelFleet1.Controls.Add(this.label20);\r
- this.panelFleet1.Controls.Add(this.labelCondTimer2);\r
- this.panelFleet1.Controls.Add(this.labelCondTimer1);\r
- this.panelFleet1.Controls.Add(this.label17);\r
- this.panelFleet1.Controls.Add(this.label16);\r
- this.panelFleet1.Controls.Add(this.label18);\r
- this.panelFleet1.Controls.Add(this.label4);\r
- this.panelFleet1.Location = new System.Drawing.Point(6, 57);\r
- this.panelFleet1.Name = "panelFleet1";\r
- this.panelFleet1.Size = new System.Drawing.Size(238, 134);\r
- this.panelFleet1.TabIndex = 2;\r
+ // panelShipInfo\r
+ // \r
+ this.panelShipInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+ this.panelShipInfo.Controls.Add(this.panelBattleInfo);\r
+ this.panelShipInfo.Controls.Add(this.label19);\r
+ this.panelShipInfo.Controls.Add(this.labelAirSuperiority);\r
+ this.panelShipInfo.Controls.Add(this.label27);\r
+ this.panelShipInfo.Controls.Add(this.label21);\r
+ this.panelShipInfo.Controls.Add(this.labelCondTimer3);\r
+ this.panelShipInfo.Controls.Add(this.label20);\r
+ this.panelShipInfo.Controls.Add(this.labelCondTimer2);\r
+ this.panelShipInfo.Controls.Add(this.labelCondTimer1);\r
+ this.panelShipInfo.Controls.Add(this.label17);\r
+ this.panelShipInfo.Controls.Add(this.label16);\r
+ this.panelShipInfo.Controls.Add(this.label18);\r
+ this.panelShipInfo.Controls.Add(this.label4);\r
+ this.panelShipInfo.Location = new System.Drawing.Point(6, 57);\r
+ this.panelShipInfo.Name = "panelShipInfo";\r
+ this.panelShipInfo.Size = new System.Drawing.Size(238, 134);\r
+ this.panelShipInfo.TabIndex = 2;\r
// \r
// panelBattleInfo\r
// \r
this.Controls.Add(this.labelConstruct);\r
this.Controls.Add(this.panelDock);\r
this.Controls.Add(this.labelRepair);\r
- this.Controls.Add(this.panelFleet1);\r
+ this.Controls.Add(this.panelShipInfo);\r
this.Controls.Add(this.labelFleet1);\r
this.Controls.Add(this.panelHeadquarters);\r
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;\r
this.Resize += new System.EventHandler(this.MainForm_Resize);\r
this.panelHeadquarters.ResumeLayout(false);\r
this.panelHeadquarters.PerformLayout();\r
- this.panelFleet1.ResumeLayout(false);\r
- this.panelFleet1.PerformLayout();\r
+ this.panelShipInfo.ResumeLayout(false);\r
+ this.panelShipInfo.PerformLayout();\r
this.panelBattleInfo.ResumeLayout(false);\r
this.panelBattleInfo.PerformLayout();\r
this.panelMaterialHistory.ResumeLayout(false);\r
private System.Windows.Forms.Label label2;\r
private System.Windows.Forms.Label labelNumOfShips;\r
private System.Windows.Forms.Label label1;\r
- private System.Windows.Forms.Panel panelFleet1;\r
+ private System.Windows.Forms.Panel panelShipInfo;\r
private System.Windows.Forms.Label labelRepair;\r
private System.Windows.Forms.Panel panelDock;\r
private System.Windows.Forms.Label label8;\r
using System.Drawing;\r
using System.IO;\r
using System.Linq;\r
-using System.Text.RegularExpressions;\r
using System.Windows.Forms;\r
using Codeplex.Data;\r
using Fiddler;\r
private readonly dynamic _wmp = Activator.CreateInstance(Type.GetTypeFromProgID("WMPlayer.OCX.7"));\r
private readonly Config _config = new Config();\r
private readonly ConfigDialog _configDialog;\r
- private int _labelRightDistance;\r
private int _currentFleet;\r
private readonly Label[] _labelCheckFleets;\r
- private readonly Label[][] _shipInfoLabels = new Label[ShipInfo.MemberCount][];\r
- private readonly Label[][] _damagedShipList = new Label[14][];\r
+ private readonly ShipLabel[][] _damagedShipList = new ShipLabel[14][];\r
private readonly Label[] _akashiTimers = new Label[ShipInfo.MemberCount];\r
- private readonly Label[][] _ndockLabels = new Label[DockInfo.DockCount][];\r
+ private readonly ShipLabel[][] _ndockLabels = new ShipLabel[DockInfo.DockCount][];\r
+ private readonly ShipInfoLabels _shipInfoLabels;\r
private readonly Queue<string[]> _akashiTimerNoticeQueue = new Queue<string[]>();\r
private bool _started;\r
\r
var i = 0;\r
foreach (var label in new[] {labelFleet1, labelFleet2, labelFleet3, labelFleet4})\r
label.Tag = i++;\r
- CreateShipInfoLabels();\r
+ _shipInfoLabels = new ShipInfoLabels(panelShipInfo);\r
CreateDamagedShipList();\r
CreateAkashiTimers();\r
CreateNDockLabels();\r
ShowInTaskbar = false;\r
}\r
\r
- private void labelHP_SizeChanged(object sender, EventArgs e)\r
- {\r
- var label = (Label)sender;\r
- label.Location = new Point(label.Parent.Width - _labelRightDistance - label.Width, label.Top);\r
- }\r
-\r
private void notifyIconMain_MouseDoubleClick(object sender, MouseEventArgs e)\r
{\r
NotifyIconOpenToolStripMenuItem_Click(sender, e);\r
}\r
}\r
\r
- private void CreateShipInfoLabels()\r
- {\r
- var parent = panelFleet1;\r
- parent.SuspendLayout();\r
- for (var i = 0; i < _shipInfoLabels.Length; i++)\r
- {\r
- var y = 20 + 16 * i;\r
- const int height = 12;\r
- parent.Controls.AddRange(_shipInfoLabels[i] = new[]\r
- {\r
- new Label {Location = new Point(130, y), AutoSize = true},\r
- new Label\r
- {\r
- Location = new Point(136, y),\r
- Size = new Size(23, height),\r
- TextAlign = ContentAlignment.MiddleRight\r
- },\r
- new Label\r
- {\r
- Location = new Point(170, y),\r
- Size = new Size(23, height),\r
- TextAlign = ContentAlignment.MiddleRight\r
- },\r
- new Label\r
- {\r
- Location = new Point(195, y),\r
- Size = new Size(41, height),\r
- TextAlign = ContentAlignment.MiddleRight\r
- },\r
- new Label {Location = new Point(2, y), AutoSize = true} // 名前のZ-orderを下に\r
- });\r
- _shipInfoLabels[i][0].SizeChanged += labelHP_SizeChanged;\r
- }\r
- _labelRightDistance = parent.Width - _shipInfoLabels[0][0].Right;\r
- parent.ResumeLayout();\r
- }\r
-\r
private void UpdateShipInfo()\r
{\r
var statuses = _sniffer.GetShipStatuses(_currentFleet);\r
- var empty = new ShipStatus();\r
- for (var i = 0; i < _shipInfoLabels.Length; i++)\r
- {\r
- var labels = _shipInfoLabels[i];\r
- var stat = i < statuses.Length ? statuses[i] : empty;\r
- SetShipName(labels[4], stat.Name);\r
- SetHpLabel(labels[0], stat);\r
- if (stat == empty)\r
- {\r
- // SetCondLabelでは背景色が赤になってしまう\r
- labels[1].Text = "0";\r
- labels[1].BackColor = DefaultBackColor;\r
- }\r
- else\r
- SetCondLabel(labels[1], stat.Cond);\r
- labels[2].Text = stat.Level.ToString("D");\r
- labels[3].Text = stat.ExpToNext.ToString("D");\r
- }\r
+ _shipInfoLabels.SetShipInfo(statuses);\r
if (_sniffer.Battle.HasDamagedShip)\r
Ring("大破した艦娘がいます", string.Join(" ", _sniffer.Battle.DamagedShipNames), _config.DamagedShipSoundFile);\r
labelAirSuperiority.Text = _sniffer.GetAirSuperiority(_currentFleet).ToString("D");\r
}\r
}\r
\r
- private void SetShipName(Label label, string name)\r
- {\r
- var lu = name != null && new Regex(@"^\p{Lu}").IsMatch(name);\r
- if (lu && label.Font.Equals(DefaultFont))\r
- {\r
- label.Location += new Size(0, -1);\r
- label.Font = new Font("Tahoma", 8);\r
- }\r
- else if (!lu && !label.Font.Equals(DefaultFont))\r
- {\r
- label.Location += new Size(0, 1);\r
- label.Font = DefaultFont;\r
- }\r
- label.Text = name;\r
- }\r
-\r
- private void SetHpLabel(Label label, ShipStatus status)\r
- {\r
- SetHpLabel(label, status.NowHp, status.MaxHp);\r
- }\r
-\r
- private void SetHpLabel(Label label, int now, int max)\r
- {\r
- var colors = new[] {DefaultBackColor, Color.FromArgb(255, 240, 240, 100), Color.Orange, Color.Red};\r
- label.Text = string.Format("{0:D}/{1:D}", now, max);\r
- label.BackColor = colors[(int)ShipStatus.CalcDamage(now, max)];\r
- }\r
-\r
- private void SetCondLabel(Label label, int cond)\r
- {\r
- label.Text = cond.ToString("D");\r
- label.BackColor = cond >= 50\r
- ? Color.Yellow\r
- : cond >= 30\r
- ? DefaultBackColor\r
- : cond >= 20 ? Color.Orange : Color.Red;\r
- }\r
-\r
private void CreateNDockLabels()\r
{\r
var parent = panelDock;\r
parent.Controls.AddRange(\r
_ndockLabels[i] = new[]\r
{\r
- new Label {Location = new Point(106, y), AutoSize = true, Text = "00:00:00"},\r
- new Label {Location = new Point(30, y), AutoSize = true} // 名前のZ-orderを下に\r
+ new ShipLabel {Location = new Point(106, y), AutoSize = true, Text = "00:00:00"},\r
+ new ShipLabel {Location = new Point(30, y), AutoSize = true} // 名前のZ-orderを下に\r
});\r
}\r
}\r
private void UpdateNDocLabels()\r
{\r
for (var i = 0; i < _ndockLabels.Length; i++)\r
- SetShipName(_ndockLabels[i][1], _sniffer.NDock[i].Name);\r
+ _ndockLabels[i][1].SetName(_sniffer.NDock[i].Name);\r
}\r
\r
private void UpdateMissionLabels()\r
\r
private void CreateAkashiTimers()\r
{\r
- var parent = panelFleet1;\r
+ var parent = panelShipInfo;\r
parent.SuspendLayout();\r
for (var i = 0; i < _akashiTimers.Length; i++)\r
{\r
for (var i = 0; i < _akashiTimers.Length; i++)\r
{\r
var label = _akashiTimers[i];\r
- var labelHp = _shipInfoLabels[i][0];\r
+ var labelHp = _shipInfoLabels.GetHpLabel(i);\r
if (timers == null || i >= timers.Length || timers[i].Span == TimeSpan.MinValue)\r
{\r
label.Visible = false;\r
continue;\r
}\r
labelHp.ForeColor = Color.DimGray;\r
- SetHpLabel(labelHp, stat.NowHp + timer.Diff, stat.MaxHp);\r
+ labelHp.SetHp(stat.NowHp + timer.Diff, stat.MaxHp);\r
}\r
var msgs = _sniffer.GetAkashiTimerNotice();\r
var fn = new[] {"第一艦隊", "第二艦隊", "第三艦隊", "第四艦隊"};\r
const int height = 12;\r
parent.Controls.AddRange(_damagedShipList[i] = new[]\r
{\r
- new Label {Location = new Point(1, y), Size = new Size(11, height)},\r
- new Label {Location = new Point(79, y), Size = new Size(45, height)},\r
- new Label {Location = new Point(123, y), Size = new Size(5, height - 1)},\r
- new Label {Location = new Point(10, y), AutoSize = true}\r
+ new ShipLabel {Location = new Point(1, y), Size = new Size(11, height)},\r
+ new ShipLabel {Location = new Point(79, y), Size = new Size(45, height)},\r
+ new ShipLabel {Location = new Point(123, y), Size = new Size(5, height - 1)},\r
+ new ShipLabel {Location = new Point(10, y), AutoSize = true}\r
});\r
}\r
parent.ResumeLayout();\r
parent.Size = new Size(width, 19);\r
var labels = _damagedShipList[0];\r
labels[fleet].Text = "";\r
- SetShipName(labels[name], "なし");\r
+ labels[name].SetName("なし");\r
labels[time].Text = "";\r
labels[damage].BackColor = DefaultBackColor;\r
return;\r
var e = list[i];\r
var labels = _damagedShipList[i];\r
labels[fleet].Text = fn[e.Fleet + 1];\r
- SetShipName(labels[name], e.Name);\r
+ labels[name].SetName(e.Name);\r
var t = e.RepairTime;\r
labels[time].Text = string.Format(@"{0:d2}:{1:mm\:ss}", (int)t.TotalHours, t);\r
labels[damage].BackColor = colors[(int)e.DamageLevel];\r
--- /dev/null
+// Copyright (C) 2014 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>\r
+// \r
+// This program is part of KancolleSniffer.\r
+//\r
+// KancolleSniffer is free software: you can redistribute it and/or modify\r
+// it under the terms of the GNU General Public License as published by\r
+// the Free Software Foundation, either version 3 of the License, or\r
+// (at your option) any later version.\r
+//\r
+// This program is distributed in the hope that it will be useful,\r
+// but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+// GNU General Public License for more details.\r
+//\r
+// You should have received a copy of the GNU General Public License\r
+// along with this program; if not, see <http://www.gnu.org/licenses/>.\r
+\r
+using System;\r
+using System.Drawing;\r
+using System.Text.RegularExpressions;\r
+using System.Windows.Forms;\r
+\r
+namespace KancolleSniffer\r
+{\r
+ public class ShipInfoLabels\r
+ {\r
+ private readonly ShipLabel[][] _labels = new ShipLabel[ShipInfo.MemberCount][];\r
+ private const int LabelHpRight = 130;\r
+\r
+ public ShipInfoLabels(Control parent)\r
+ {\r
+ CreateLabels(parent);\r
+ }\r
+\r
+ private void CreateLabels(Control parent)\r
+ {\r
+ parent.SuspendLayout();\r
+ for (var i = 0; i < _labels.Length; i++)\r
+ {\r
+ var y = 20 + 16 * i;\r
+ const int height = 12;\r
+ parent.Controls.AddRange(_labels[i] = new[]\r
+ {\r
+ new ShipLabel {Location = new Point(LabelHpRight, y), AutoSize = true},\r
+ new ShipLabel\r
+ {\r
+ Location = new Point(136, y),\r
+ Size = new Size(23, height),\r
+ TextAlign = ContentAlignment.MiddleRight\r
+ },\r
+ new ShipLabel\r
+ {\r
+ Location = new Point(170, y),\r
+ Size = new Size(23, height),\r
+ TextAlign = ContentAlignment.MiddleRight\r
+ },\r
+ new ShipLabel\r
+ {\r
+ Location = new Point(195, y),\r
+ Size = new Size(41, height),\r
+ TextAlign = ContentAlignment.MiddleRight\r
+ },\r
+ new ShipLabel {Location = new Point(2, y), AutoSize = true} // 名前のZ-orderを下に\r
+ });\r
+ _labels[i][0].SizeChanged += labelHP_SizeChanged;\r
+ }\r
+ parent.ResumeLayout();\r
+ }\r
+\r
+ public ShipLabel GetHpLabel(int idx)\r
+ {\r
+ return _labels[idx][0];\r
+ }\r
+\r
+ private void labelHP_SizeChanged(object sender, EventArgs e)\r
+ {\r
+ var label = (Label)sender;\r
+ label.Location = new Point(LabelHpRight - label.Width, label.Top);\r
+ }\r
+\r
+ public void SetShipInfo(ShipStatus[] statuses)\r
+ {\r
+ var empty = new ShipStatus();\r
+ for (var i = 0; i < _labels.Length; i++)\r
+ {\r
+ var labels = _labels[i];\r
+ var s = i < statuses.Length ? statuses[i] : empty;\r
+ labels[4].SetName(s);\r
+ labels[0].SetHp(s);\r
+ labels[1].SetCond(s);\r
+ labels[2].SetLevel(s);\r
+ labels[3].SetExpToNext(s);\r
+ }\r
+ }\r
+ }\r
+\r
+ [System.ComponentModel.DesignerCategory("Code")]\r
+ public class ShipLabel : Label\r
+ {\r
+ public void SetName(ShipStatus status)\r
+ {\r
+ SetName(status.Name);\r
+ }\r
+\r
+ public void SetName(string name)\r
+ {\r
+ var lu = name != null && new Regex(@"^\p{Lu}").IsMatch(name);\r
+ if (lu && Font.Equals(DefaultFont))\r
+ {\r
+ Location += new Size(0, -1);\r
+ Font = new Font("Tahoma", 8);\r
+ }\r
+ else if (!lu && !Font.Equals(DefaultFont))\r
+ {\r
+ Location += new Size(0, 1);\r
+ Font = DefaultFont;\r
+ }\r
+ Text = name;\r
+ }\r
+\r
+ public void SetHp(ShipStatus status)\r
+ {\r
+ SetHp(status.NowHp, status.MaxHp);\r
+ }\r
+\r
+ public void SetHp(int now, int max)\r
+ {\r
+ var colors = new[] {DefaultBackColor, Color.FromArgb(255, 240, 240, 100), Color.Orange, Color.Red};\r
+ Text = string.Format("{0:D}/{1:D}", now, max);\r
+ BackColor = colors[(int)ShipStatus.CalcDamage(now, max)];\r
+ }\r
+\r
+ public void SetCond(ShipStatus status)\r
+ {\r
+ if (status.Level == 0)\r
+ {\r
+ Text = "0";\r
+ BackColor = DefaultBackColor;\r
+ return;\r
+ }\r
+ var cond = status.Cond;\r
+ Text = cond.ToString("D");\r
+ BackColor = cond >= 50\r
+ ? Color.Yellow\r
+ : cond >= 30\r
+ ? DefaultBackColor\r
+ : cond >= 20 ? Color.Orange : Color.Red;\r
+ }\r
+\r
+ public void SetLevel(ShipStatus status)\r
+ {\r
+ Text = status.Level.ToString("D");\r
+ }\r
+\r
+ public void SetExpToNext(ShipStatus status)\r
+ {\r
+ Text = status.ExpToNext.ToString("D");\r
+ }\r
+ }\r
+}
\ No newline at end of file