OSDN Git Service

艦娘数や装備数のパネルをHqPanelに分離する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 4 Apr 2020 07:15:14 +0000 (16:15 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 30 Aug 2020 05:58:20 +0000 (14:58 +0900)
KancolleSniffer/KancolleSniffer.csproj
KancolleSniffer/MainForm.Designer.cs
KancolleSniffer/MainForm.cs
KancolleSniffer/View/HqPanel.cs [new file with mode: 0644]
KancolleSniffer/View/NumberAndHistory.cs

index b47448d..5a1c004 100644 (file)
     <Compile Include="Util\HttpUtility.cs" />\r
     <Compile Include="View\FleetSpec.cs" />\r
     <Compile Include="View\GrowLeftLabel.cs" />\r
+    <Compile Include="View\HqPanel.cs">\r
+      <SubType>Component</SubType>\r
+    </Compile>\r
     <Compile Include="View\KDockPanel.cs">\r
       <SubType>Component</SubType>\r
     </Compile>\r
index 2e26588..d71faaa 100644 (file)
@@ -46,18 +46,6 @@ namespace KancolleSniffer
         {\r
             this.components = new System.ComponentModel.Container();\r
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));\r
-            this.panelHeadquarters = new System.Windows.Forms.Panel();\r
-            this.labelPlayLog = new System.Windows.Forms.Label();\r
-            this.labelLogin = new System.Windows.Forms.Label();\r
-            this.labelBucketHistoryButton = new System.Windows.Forms.Label();\r
-            this.labelAchievement = new System.Windows.Forms.Label();\r
-            this.label28 = new System.Windows.Forms.Label();\r
-            this.labelNumOfBuckets = new System.Windows.Forms.Label();\r
-            this.label3 = new System.Windows.Forms.Label();\r
-            this.labelNumOfEquips = new System.Windows.Forms.Label();\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.panelShipInfo = new System.Windows.Forms.Panel();\r
             this.labelPresetAkashiTimer = new System.Windows.Forms.Label();\r
             this.linkLabelGuide = new System.Windows.Forms.LinkLabel();\r
@@ -100,7 +88,6 @@ namespace KancolleSniffer
             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.labelBucketHistory = new System.Windows.Forms.Label();\r
             this.label36 = new System.Windows.Forms.Label();\r
             this.label31 = new System.Windows.Forms.Label();\r
             this.imageListFuelSq = new System.Windows.Forms.ImageList(this.components);\r
@@ -122,12 +109,12 @@ namespace KancolleSniffer
             this.labelCheckFleet4 = new System.Windows.Forms.Label();\r
             this.labelCheckFleet1 = new System.Windows.Forms.Label();\r
             this.labelQuestCount = new System.Windows.Forms.Label();\r
+            this.kdockPanel = new KancolleSniffer.View.KDockPanel();\r
             this.panelRepairList = new KancolleSniffer.View.RepairListForMain();\r
             this.ndockPanel = new KancolleSniffer.View.NDockPanel();\r
             this.missionPanel = new KancolleSniffer.View.MissionPanel();\r
             this.questPanel = new KancolleSniffer.View.QuestPanel();\r
-            this.kdockPanel = new KancolleSniffer.View.KDockPanel();\r
-            this.panelHeadquarters.SuspendLayout();\r
+            this.hqPanel = new KancolleSniffer.View.HqPanel();\r
             this.panelShipInfo.SuspendLayout();\r
             this.panelBattleInfo.SuspendLayout();\r
             this.panelMaterialHistory.SuspendLayout();\r
@@ -135,127 +122,6 @@ namespace KancolleSniffer
             this.contextMenuStripMain.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
-            // panelHeadquarters\r
-            // \r
-            this.panelHeadquarters.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
-            this.panelHeadquarters.Controls.Add(this.labelPlayLog);\r
-            this.panelHeadquarters.Controls.Add(this.labelLogin);\r
-            this.panelHeadquarters.Controls.Add(this.labelBucketHistoryButton);\r
-            this.panelHeadquarters.Controls.Add(this.labelAchievement);\r
-            this.panelHeadquarters.Controls.Add(this.label28);\r
-            this.panelHeadquarters.Controls.Add(this.labelNumOfBuckets);\r
-            this.panelHeadquarters.Controls.Add(this.label3);\r
-            this.panelHeadquarters.Controls.Add(this.labelNumOfEquips);\r
-            this.panelHeadquarters.Controls.Add(this.label2);\r
-            this.panelHeadquarters.Controls.Add(this.labelNumOfShips);\r
-            this.panelHeadquarters.Controls.Add(this.label1);\r
-            this.panelHeadquarters.Location = new System.Drawing.Point(6, 6);\r
-            this.panelHeadquarters.Name = "panelHeadquarters";\r
-            this.panelHeadquarters.Size = new System.Drawing.Size(220, 33);\r
-            this.panelHeadquarters.TabIndex = 0;\r
-            // \r
-            // labelPlayLog\r
-            // \r
-            this.labelPlayLog.AutoSize = true;\r
-            this.labelPlayLog.Location = new System.Drawing.Point(207, 3);\r
-            this.labelPlayLog.Name = "labelPlayLog";\r
-            this.labelPlayLog.Size = new System.Drawing.Size(11, 12);\r
-            this.labelPlayLog.TabIndex = 24;\r
-            this.labelPlayLog.Text = "*";\r
-            this.labelPlayLog.Visible = false;\r
-            // \r
-            // labelLogin\r
-            // \r
-            this.labelLogin.Font = new System.Drawing.Font("MS UI Gothic", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(128)));\r
-            this.labelLogin.Location = new System.Drawing.Point(6, 2);\r
-            this.labelLogin.Name = "labelLogin";\r
-            this.labelLogin.Size = new System.Drawing.Size(210, 28);\r
-            this.labelLogin.TabIndex = 23;\r
-            this.labelLogin.Text = "艦これにログインしてください。\r\nログイン中ならログインし直してください。";\r
-            this.labelLogin.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
-            // \r
-            // labelBucketHistoryButton\r
-            // \r
-            this.labelBucketHistoryButton.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
-            this.labelBucketHistoryButton.Image = ((System.Drawing.Image)(resources.GetObject("labelBucketHistoryButton.Image")));\r
-            this.labelBucketHistoryButton.Location = new System.Drawing.Point(146, 15);\r
-            this.labelBucketHistoryButton.Name = "labelBucketHistoryButton";\r
-            this.labelBucketHistoryButton.Size = new System.Drawing.Size(14, 14);\r
-            this.labelBucketHistoryButton.TabIndex = 9;\r
-            this.labelBucketHistoryButton.Click += new System.EventHandler(this.labelBucketHistoryButton_Click);\r
-            // \r
-            // labelAchievement\r
-            // \r
-            this.labelAchievement.Location = new System.Drawing.Point(166, 18);\r
-            this.labelAchievement.Name = "labelAchievement";\r
-            this.labelAchievement.Size = new System.Drawing.Size(33, 12);\r
-            this.labelAchievement.TabIndex = 7;\r
-            this.labelAchievement.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
-            // \r
-            // label28\r
-            // \r
-            this.label28.AutoSize = true;\r
-            this.label28.Location = new System.Drawing.Point(170, 3);\r
-            this.label28.Name = "label28";\r
-            this.label28.Size = new System.Drawing.Size(29, 12);\r
-            this.label28.TabIndex = 6;\r
-            this.label28.Text = "戦果";\r
-            // \r
-            // labelNumOfBuckets\r
-            // \r
-            this.labelNumOfBuckets.Location = new System.Drawing.Point(116, 18);\r
-            this.labelNumOfBuckets.Name = "labelNumOfBuckets";\r
-            this.labelNumOfBuckets.Size = new System.Drawing.Size(30, 12);\r
-            this.labelNumOfBuckets.TabIndex = 5;\r
-            this.labelNumOfBuckets.Text = "0";\r
-            this.labelNumOfBuckets.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
-            this.labelNumOfBuckets.Click += new System.EventHandler(this.labelBucketHistoryButton_Click);\r
-            // \r
-            // label3\r
-            // \r
-            this.label3.AutoSize = true;\r
-            this.label3.Location = new System.Drawing.Point(113, 3);\r
-            this.label3.Name = "label3";\r
-            this.label3.Size = new System.Drawing.Size(33, 12);\r
-            this.label3.TabIndex = 4;\r
-            this.label3.Text = "バケツ";\r
-            // \r
-            // labelNumOfEquips\r
-            // \r
-            this.labelNumOfEquips.Location = new System.Drawing.Point(46, 18);\r
-            this.labelNumOfEquips.Name = "labelNumOfEquips";\r
-            this.labelNumOfEquips.Size = new System.Drawing.Size(60, 12);\r
-            this.labelNumOfEquips.TabIndex = 3;\r
-            this.labelNumOfEquips.Text = "0/0";\r
-            this.labelNumOfEquips.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
-            // \r
-            // label2\r
-            // \r
-            this.label2.AutoSize = true;\r
-            this.label2.Location = new System.Drawing.Point(65, 3);\r
-            this.label2.Name = "label2";\r
-            this.label2.Size = new System.Drawing.Size(41, 12);\r
-            this.label2.TabIndex = 2;\r
-            this.label2.Text = "装備数";\r
-            // \r
-            // labelNumOfShips\r
-            // \r
-            this.labelNumOfShips.Location = new System.Drawing.Point(0, 18);\r
-            this.labelNumOfShips.Name = "labelNumOfShips";\r
-            this.labelNumOfShips.Size = new System.Drawing.Size(48, 12);\r
-            this.labelNumOfShips.TabIndex = 1;\r
-            this.labelNumOfShips.Text = "0/0";\r
-            this.labelNumOfShips.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
-            // \r
-            // label1\r
-            // \r
-            this.label1.AutoSize = true;\r
-            this.label1.Location = new System.Drawing.Point(7, 3);\r
-            this.label1.Name = "label1";\r
-            this.label1.Size = new System.Drawing.Size(41, 12);\r
-            this.label1.TabIndex = 0;\r
-            this.label1.Text = "艦娘数";\r
-            // \r
             // panelShipInfo\r
             // \r
             this.panelShipInfo.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
@@ -634,18 +500,6 @@ namespace KancolleSniffer
             this.labelFleet2.TabIndex = 21;\r
             this.labelFleet2.Text = "第二";\r
             // \r
-            // labelBucketHistory\r
-            // \r
-            this.labelBucketHistory.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
-            this.labelBucketHistory.Location = new System.Drawing.Point(106, 36);\r
-            this.labelBucketHistory.Name = "labelBucketHistory";\r
-            this.labelBucketHistory.Size = new System.Drawing.Size(61, 28);\r
-            this.labelBucketHistory.TabIndex = 42;\r
-            this.labelBucketHistory.Text = "今日\r\n今週";\r
-            this.labelBucketHistory.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
-            this.labelBucketHistory.Visible = false;\r
-            this.labelBucketHistory.Click += new System.EventHandler(this.labelBucketHistory_Click);\r
-            // \r
             // label36\r
             // \r
             this.label36.AutoSize = true;\r
@@ -854,6 +708,14 @@ namespace KancolleSniffer
             this.labelQuestCount.TabIndex = 57;\r
             this.labelQuestCount.Text = "0";\r
             // \r
+            // kdockPanel\r
+            // \r
+            this.kdockPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+            this.kdockPanel.Location = new System.Drawing.Point(149, 209);\r
+            this.kdockPanel.Name = "kdockPanel";\r
+            this.kdockPanel.Size = new System.Drawing.Size(77, 64);\r
+            this.kdockPanel.TabIndex = 60;\r
+            // \r
             // panelRepairList\r
             // \r
             this.panelRepairList.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
@@ -867,6 +729,7 @@ namespace KancolleSniffer
             // ndockPanel\r
             // \r
             this.ndockPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+            this.ndockPanel.Cursor = System.Windows.Forms.Cursors.Hand;\r
             this.ndockPanel.Location = new System.Drawing.Point(6, 209);\r
             this.ndockPanel.Name = "ndockPanel";\r
             this.ndockPanel.Size = new System.Drawing.Size(140, 64);\r
@@ -875,6 +738,7 @@ namespace KancolleSniffer
             // missionPanel\r
             // \r
             this.missionPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+            this.missionPanel.Cursor = System.Windows.Forms.Cursors.Hand;\r
             this.missionPanel.Location = new System.Drawing.Point(6, 290);\r
             this.missionPanel.Name = "missionPanel";\r
             this.missionPanel.Size = new System.Drawing.Size(220, 49);\r
@@ -888,13 +752,13 @@ namespace KancolleSniffer
             this.questPanel.Size = new System.Drawing.Size(220, 94);\r
             this.questPanel.TabIndex = 56;\r
             // \r
-            // kdockPanel\r
+            // hqPanel\r
             // \r
-            this.kdockPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
-            this.kdockPanel.Location = new System.Drawing.Point(149, 209);\r
-            this.kdockPanel.Name = "kdockPanel";\r
-            this.kdockPanel.Size = new System.Drawing.Size(77, 64);\r
-            this.kdockPanel.TabIndex = 60;\r
+            this.hqPanel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\r
+            this.hqPanel.Location = new System.Drawing.Point(6, 6);\r
+            this.hqPanel.Name = "hqPanel";\r
+            this.hqPanel.Size = new System.Drawing.Size(220, 33);\r
+            this.hqPanel.TabIndex = 61;\r
             // \r
             // MainForm\r
             // \r
@@ -902,6 +766,7 @@ namespace KancolleSniffer
             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.hqPanel);\r
             this.Controls.Add(this.kdockPanel);\r
             this.Controls.Add(this.panelRepairList);\r
             this.Controls.Add(this.ndockPanel);\r
@@ -912,7 +777,6 @@ namespace KancolleSniffer
             this.Controls.Add(this.labelAkashiRepair);\r
             this.Controls.Add(this.labelAkashiRepairTimer);\r
             this.Controls.Add(this.panelMaterialHistory);\r
-            this.Controls.Add(this.labelBucketHistory);\r
             this.Controls.Add(this.labelBullSq4);\r
             this.Controls.Add(this.labelFuelSq4);\r
             this.Controls.Add(this.labelBullSq3);\r
@@ -938,7 +802,6 @@ namespace KancolleSniffer
             this.Controls.Add(this.labelNDock);\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.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
             this.MaximizeBox = false;\r
@@ -949,8 +812,6 @@ namespace KancolleSniffer
             this.Load += new System.EventHandler(this.MainForm_Load);\r
             this.Shown += new System.EventHandler(this.MainForm_Shown);\r
             this.Resize += new System.EventHandler(this.MainForm_Resize);\r
-            this.panelHeadquarters.ResumeLayout(false);\r
-            this.panelHeadquarters.PerformLayout();\r
             this.panelShipInfo.ResumeLayout(false);\r
             this.panelShipInfo.PerformLayout();\r
             this.panelBattleInfo.ResumeLayout(false);\r
@@ -965,14 +826,6 @@ namespace KancolleSniffer
         }\r
 \r
         #endregion\r
-\r
-        private System.Windows.Forms.Panel panelHeadquarters;\r
-        private System.Windows.Forms.Label labelNumOfBuckets;\r
-        private System.Windows.Forms.Label label3;\r
-        private System.Windows.Forms.Label labelNumOfEquips;\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 panelShipInfo;\r
         private System.Windows.Forms.Label labelNDock;\r
         private System.Windows.Forms.Label labelConstruct;\r
@@ -995,11 +848,6 @@ namespace KancolleSniffer
         private System.Windows.Forms.Label labelFleet2;\r
         private System.Windows.Forms.Label labelFighterPower;\r
         private System.Windows.Forms.Label labelFighterPowerCaption;\r
-        private System.Windows.Forms.Label labelLogin;\r
-        private System.Windows.Forms.Label labelAchievement;\r
-        private System.Windows.Forms.Label label28;\r
-        private System.Windows.Forms.Label labelBucketHistoryButton;\r
-        private System.Windows.Forms.Label labelBucketHistory;\r
         private System.Windows.Forms.Panel panelMaterialHistory;\r
         private System.Windows.Forms.Label labelBouxiteHistory;\r
         private System.Windows.Forms.Label labelSteelHistory;\r
@@ -1016,7 +864,6 @@ namespace KancolleSniffer
         private System.Windows.Forms.ToolStripMenuItem listToolStripMenuItem;\r
         private System.Windows.Forms.Label labelLoS;\r
         private System.Windows.Forms.Label labelLoSCaption;\r
-        private System.Windows.Forms.Label labelPlayLog;\r
         private System.Windows.Forms.Panel panelBattleInfo;\r
         private System.Windows.Forms.Label labelEnemyFighterPower;\r
         private System.Windows.Forms.Label labelEnemyFighterPowerCaption;\r
@@ -1047,6 +894,7 @@ namespace KancolleSniffer
         private MissionPanel missionPanel;\r
         private NDockPanel ndockPanel;\r
         private KDockPanel kdockPanel;\r
+        private HqPanel hqPanel;\r
     }\r
 }\r
 \r
index 817bdbf..b09b9e8 100644 (file)
@@ -65,6 +65,28 @@ namespace KancolleSniffer
         public Sniffer Sniffer { get; } = new Sniffer();\r
         public Config Config { get; } = new Config();\r
 \r
+        public interface INotifySubmitter\r
+        {\r
+            void Flash();\r
+            void Enqueue(string key, string subject);\r
+        }\r
+\r
+        public class Context\r
+        {\r
+            public Sniffer Sniffer { get; }\r
+            public Config Config { get; }\r
+            public INotifySubmitter Submitter { get; }\r
+            public Func<DateTime> GetNow { get; }\r
+\r
+            public Context(Sniffer sniffer, Config config, INotifySubmitter submitter, Func<DateTime> getNow)\r
+            {\r
+                Sniffer = sniffer;\r
+                Config = config;\r
+                Submitter = submitter;\r
+                GetNow = getNow;\r
+            }\r
+        }\r
+\r
         public MainForm()\r
         {\r
             InitializeComponent();\r
@@ -92,9 +114,16 @@ namespace KancolleSniffer
             panelRepairList.CreateLabels(panelRepairList_Click);\r
             ndockPanel.SetClickHandler(labelNDock_Click);\r
             missionPanel.SetClickHandler(labelMission_Click);\r
+            SetContextToView();\r
             PerformZoom();\r
         }\r
 \r
+        private void SetContextToView()\r
+        {\r
+            var context = new Context(Sniffer, Config, new NotifySubmitter(_notificationManager), () => _now);\r
+            hqPanel.Context = context;\r
+        }\r
+\r
         private void SetScaleFactorOfDpiScaling()\r
         {\r
             var autoScaleDimensions = new SizeF(6f, 12f); // AutoScaleDimensionの初期値\r
@@ -123,11 +152,6 @@ namespace KancolleSniffer
         {\r
             _numberAndHistory = new NumberAndHistory(new NumberAndHistoryLabels\r
             {\r
-                NumOfShips = labelNumOfShips,\r
-                NumOfEquips = labelNumOfEquips,\r
-                NumOfBuckets = labelNumOfBuckets,\r
-                BucketHistory = labelBucketHistory,\r
-                Achievement = labelAchievement,\r
                 FuelHistory = labelFuelHistory,\r
                 BulletHistory = labelBulletHistory,\r
                 SteelHistory = labelSteelHistory,\r
@@ -320,7 +344,7 @@ namespace KancolleSniffer
         {\r
             if (update == Sniffer.Update.Start)\r
             {\r
-                labelLogin.Visible = false;\r
+                hqPanel.Login.Visible = false;\r
                 linkLabelGuide.Visible = false;\r
                 _started = true;\r
                 _notificationManager.StopAllRepeat();\r
@@ -511,7 +535,7 @@ namespace KancolleSniffer
             var prev = CurrentAutoScaleDimensions;\r
             foreach (var control in new Control[]\r
             {\r
-                this, labelLogin, linkLabelGuide,\r
+                this, linkLabelGuide, hqPanel.Login,\r
                 _configDialog, _configDialog.NotificationConfigDialog,\r
                 contextMenuStripMain, _errorDialog\r
             })\r
@@ -552,9 +576,8 @@ namespace KancolleSniffer
             if (TopMost != Config.TopMost)\r
                 TopMost = _listFormGroup.TopMost = Config.TopMost;\r
             Sniffer.ShipCounter.Margin = Config.MarginShips;\r
-            _numberAndHistory.UpdateNumOfShips();\r
             Sniffer.ItemCounter.Margin = Config.MarginEquips;\r
-            _numberAndHistory.UpdateNumOfEquips();\r
+            hqPanel.Update();\r
             Sniffer.Achievement.ResetHours = Config.ResetHours;\r
             labelAkashiRepair.Visible = labelAkashiRepairTimer.Visible =\r
                 labelPresetAkashiTimer.Visible = Config.UsePresetAkashi;\r
@@ -607,7 +630,7 @@ namespace KancolleSniffer
             }\r
             if (_playLog == null || _configDialog.Visible)\r
             {\r
-                labelPlayLog.Visible = false;\r
+                hqPanel.PlayLog.Visible = false;\r
                 return;\r
             }\r
             PlayLog();\r
@@ -627,13 +650,13 @@ namespace KancolleSniffer
                 {\r
                     if (!_playLog.MoveNext() || _playLog.Current == null)\r
                     {\r
-                        labelPlayLog.Visible = false;\r
+                        hqPanel.PlayLog.Visible = false;\r
                         return;\r
                     }\r
                 } while (!_playLog.Current.StartsWith(s));\r
                 lines.Add(_playLog.Current.Substring(s.Length));\r
             }\r
-            labelPlayLog.Visible = !labelPlayLog.Visible;\r
+            hqPanel.PlayLog.Visible = !hqPanel.PlayLog.Visible;\r
             ProcessRequestMain(lines[0], lines[1], lines[2]);\r
         }\r
 \r
@@ -652,6 +675,7 @@ namespace KancolleSniffer
 \r
         private void UpdateItemInfo()\r
         {\r
+            hqPanel.Update();\r
             _numberAndHistory.Update();\r
             if (_listFormGroup.Visible)\r
                 _listFormGroup.UpdateList();\r
@@ -986,11 +1010,6 @@ namespace KancolleSniffer
                 SetPreNotification(key, fleet, subject);\r
         }\r
 \r
-        private void SetTimerColor(Label label, AlarmTimer timer, DateTime now)\r
-        {\r
-            label.ForeColor = timer.IsFinished(now) ? CUDColors.Red : Color.Black;\r
-        }\r
-\r
         private void UpdateCondTimers()\r
         {\r
             DateTime timer;\r
@@ -1312,27 +1331,6 @@ namespace KancolleSniffer
             });\r
         }\r
 \r
-        private void labelBucketHistoryButton_Click(object sender, EventArgs e)\r
-        {\r
-            if (labelBucketHistory.Visible)\r
-            {\r
-                labelBucketHistory.Visible = false;\r
-                labelBucketHistoryButton.BackColor = DefaultBackColor;\r
-            }\r
-            else\r
-            {\r
-                labelBucketHistory.Visible = true;\r
-                labelBucketHistory.BringToFront();\r
-                labelBucketHistoryButton.BackColor = CustomColors.ActiveButtonColor;\r
-            }\r
-        }\r
-\r
-        private void labelBucketHistory_Click(object sender, EventArgs e)\r
-        {\r
-            labelBucketHistory.Visible = false;\r
-            labelBucketHistoryButton.BackColor = DefaultBackColor;\r
-        }\r
-\r
         private void labelMaterialHistoryButton_Click(object sender, EventArgs e)\r
         {\r
             if (panelMaterialHistory.Visible)\r
diff --git a/KancolleSniffer/View/HqPanel.cs b/KancolleSniffer/View/HqPanel.cs
new file mode 100644 (file)
index 0000000..e7d89d7
--- /dev/null
@@ -0,0 +1,210 @@
+using System;\r
+using System.Drawing;\r
+using System.Windows.Forms;\r
+using KancolleSniffer.Model;\r
+using KancolleSniffer.Properties;\r
+\r
+namespace KancolleSniffer.View\r
+{\r
+    public class HqPanel : PanelWithToolTip\r
+    {\r
+        public Label Login { get; } = new Label\r
+        {\r
+            Location = new Point(6, 2),\r
+            Size = new Size(210, 28),\r
+            Font = new Font("MS UI Gothic", 9.75f),\r
+            TextAlign = ContentAlignment.MiddleLeft,\r
+            Text = "艦これにログインしてください。\r\nログイン中ならログインし直してください。"\r
+        };\r
+\r
+        public Label PlayLog { get; } = new Label\r
+        {\r
+            Location = new Point(207, 3),\r
+            AutoSize = true,\r
+            Text = "*",\r
+            Visible = false\r
+        };\r
+\r
+        private readonly Label _bucketHistoryButton = new Label\r
+        {\r
+            Location = new Point(146, 15),\r
+            Size = new Size(14, 14),\r
+            BorderStyle = BorderStyle.FixedSingle,\r
+            Image = Resources.arrow_virtical\r
+        };\r
+\r
+        private readonly Label _achievement = new Label\r
+        {\r
+            Location = new Point(166, 18),\r
+            Size = new Size(33, 12),\r
+            TextAlign = ContentAlignment.MiddleRight\r
+        };\r
+\r
+        private readonly Label _numOfBuckets = new Label\r
+        {\r
+            Location = new Point(116, 18),\r
+            Size = new Size(30, 12),\r
+            Text = "0",\r
+            TextAlign = ContentAlignment.MiddleRight\r
+        };\r
+\r
+        private readonly Label _numOfEquips = new Label\r
+        {\r
+            Location = new Point(46, 18),\r
+            Size = new Size(60, 12),\r
+            Text = "0/0",\r
+            TextAlign = ContentAlignment.MiddleRight\r
+        };\r
+\r
+        private readonly Label _numOfShips = new Label\r
+        {\r
+            Location = new Point(0, 18),\r
+            Size = new Size(48, 12),\r
+            Text = "0/0",\r
+            TextAlign = ContentAlignment.MiddleRight\r
+        };\r
+\r
+        private readonly Label _bucketHistory = new Label\r
+        {\r
+            BorderStyle = BorderStyle.FixedSingle,\r
+            Name = "labelBucketHistory",\r
+            Size = new Size(61, 28),\r
+            Text = "今日\r\n今週",\r
+            TextAlign = ContentAlignment.MiddleRight,\r
+            Visible = false\r
+        };\r
+\r
+        private readonly Control[] _captions =\r
+        {\r
+            new Label\r
+            {\r
+                Location = new Point(170, 3),\r
+                AutoSize = true,\r
+                Text = "戦果"\r
+            },\r
+            new Label\r
+            {\r
+                Location = new Point(113, 3),\r
+                AutoSize = true,\r
+                Text = "バケツ"\r
+            },\r
+            new Label\r
+            {\r
+                Location = new Point(65, 3),\r
+                AutoSize = true,\r
+                Text = "装備数"\r
+            },\r
+            new Label\r
+            {\r
+                Location = new Point(7, 3),\r
+                AutoSize = true,\r
+                Text = "艦娘数"\r
+            }\r
+        };\r
+\r
+        public MainForm.Context Context { private get; set; }\r
+\r
+        public HqPanel()\r
+        {\r
+            BorderStyle = BorderStyle.FixedSingle;\r
+            Controls.AddRange(new Control[]\r
+                {Login, PlayLog, _bucketHistoryButton, _achievement, _numOfBuckets, _numOfEquips, _numOfShips});\r
+            Controls.AddRange(_captions);\r
+            _bucketHistoryButton.Click += BucketHistoryButtonClick;\r
+            _numOfBuckets.Click += BucketHistoryButtonClick;\r
+            _bucketHistory.Click += BucketHistoryButtonClick;\r
+        }\r
+\r
+        protected override void OnParentChanged(EventArgs e)\r
+        {\r
+            base.OnParentChanged(e);\r
+            _bucketHistory.Location =\r
+                new Point(Location.X + Parent.Location.X + 100, Location.Y + Parent.Location.Y + 30);\r
+            Parent.Controls.Add(_bucketHistory);\r
+        }\r
+\r
+        public new void Update()\r
+        {\r
+            UpdateNumOfShips();\r
+            UpdateNumOfEquips();\r
+            Context.Submitter.Flash();\r
+            UpdateNumOfBuckets();\r
+            UpdateBucketHistory();\r
+            UpdateAchievement();\r
+        }\r
+\r
+        private void UpdateNumOfBuckets()\r
+        {\r
+            _numOfBuckets.Text = Context.Sniffer.Material.MaterialHistory[(int)Material.Bucket].Now.ToString("D");\r
+        }\r
+\r
+        private void UpdateAchievement()\r
+        {\r
+            var ac = Context.Sniffer.Achievement.Value;\r
+            if (ac >= 10000)\r
+                ac = 9999;\r
+            _achievement.Text = ac >= 1000 ? ((int)ac).ToString("D") : ac.ToString("F1");\r
+            ToolTip.SetToolTip(_achievement,\r
+                "今月 " + Context.Sniffer.Achievement.ValueOfMonth.ToString("F1") + "\n" +\r
+                "EO " + Context.Sniffer.ExMap.Achievement);\r
+        }\r
+\r
+        private void UpdateNumOfShips()\r
+        {\r
+            var ship = Context.Sniffer.ShipCounter;\r
+            _numOfShips.Text = $"{ship.Now:D}/{ship.Max:D}";\r
+            _numOfShips.ForeColor = ship.TooMany ? CUDColors.Red : Color.Black;\r
+            if (ship.Alarm)\r
+            {\r
+                var message = $"残り{ship.Rest:D}隻";\r
+                Context.Submitter.Enqueue("艦娘数超過", message);\r
+                ship.Alarm = false;\r
+            }\r
+        }\r
+\r
+        private void UpdateNumOfEquips()\r
+        {\r
+            var item = Context.Sniffer.ItemCounter;\r
+            _numOfEquips.Text = $"{item.Now:D}/{item.Max:D}";\r
+            _numOfEquips.ForeColor = item.TooMany ? CUDColors.Red : Color.Black;\r
+            if (item.Alarm)\r
+            {\r
+                var message = $"残り{item.Rest:D}個";\r
+                Context.Submitter.Enqueue("装備数超過", message);\r
+                item.Alarm = false;\r
+            }\r
+        }\r
+\r
+        private void UpdateBucketHistory()\r
+        {\r
+            var count = Context.Sniffer.Material.MaterialHistory[(int)Material.Bucket];\r
+            var day = CutOverflow(count.Now - count.BegOfDay, 999);\r
+            var week = CutOverflow(count.Now - count.BegOfWeek, 999);\r
+            _bucketHistory.Text = $"{day:+#;-#;±0} 今日\n{week:+#;-#;±0} 今週";\r
+        }\r
+\r
+        private void BucketHistoryButtonClick(object sender, EventArgs e)\r
+        {\r
+            if (_bucketHistory.Visible)\r
+            {\r
+                _bucketHistory.Visible = false;\r
+                _bucketHistoryButton.BackColor = DefaultBackColor;\r
+            }\r
+            else\r
+            {\r
+                _bucketHistory.Visible = true;\r
+                _bucketHistory.BringToFront();\r
+                _bucketHistoryButton.BackColor = CustomColors.ActiveButtonColor;\r
+            }\r
+        }\r
+\r
+        private static int CutOverflow(int value, int limit)\r
+        {\r
+            if (value > limit)\r
+                return limit;\r
+            if (value < -limit)\r
+                return -limit;\r
+            return value;\r
+        }\r
+    }\r
+}
\ No newline at end of file
index 5460ba6..5592e50 100644 (file)
@@ -20,11 +20,6 @@ namespace KancolleSniffer.View
 {\r
     public class NumberAndHistoryLabels\r
     {\r
-        public Label NumOfShips { get; set; }\r
-        public Label NumOfEquips { get; set; }\r
-        public Label NumOfBuckets { get; set; }\r
-        public Label BucketHistory { get; set; }\r
-        public Label Achievement { get; set; }\r
         public Label FuelHistory { get; set; }\r
         public Label BulletHistory { get; set; }\r
         public Label SteelHistory { get; set; }\r
@@ -32,20 +27,14 @@ namespace KancolleSniffer.View
         public ToolTip ToolTip { get; set; }\r
     }\r
 \r
-    public interface INotifySubmitter\r
-    {\r
-        void Flash();\r
-        void Enqueue(string key, string subject);\r
-    }\r
-\r
     public class NumberAndHistory\r
     {\r
         private readonly NumberAndHistoryLabels _labels;\r
         private readonly Sniffer _sniffer;\r
         private readonly ToolTip _toolTip;\r
-        private readonly INotifySubmitter _submitter;\r
+        private readonly MainForm.INotifySubmitter _submitter;\r
 \r
-        public NumberAndHistory(NumberAndHistoryLabels labels, Sniffer sniffer, INotifySubmitter submitter)\r
+        public NumberAndHistory(NumberAndHistoryLabels labels, Sniffer sniffer, MainForm.INotifySubmitter submitter)\r
         {\r
             _labels = labels;\r
             _sniffer = sniffer;\r
@@ -55,65 +44,9 @@ namespace KancolleSniffer.View
 \r
         public void Update()\r
         {\r
-            UpdateNumOfShips();\r
-            UpdateNumOfEquips();\r
-            _submitter.Flash();\r
-            UpdateNumOfBuckets();\r
-            UpdateBucketHistory();\r
-            UpdateAchievement();\r
             UpdateMaterialHistory();\r
         }\r
 \r
-        private void UpdateNumOfBuckets()\r
-        {\r
-            _labels.NumOfBuckets.Text = _sniffer.Material.MaterialHistory[(int)Material.Bucket].Now.ToString("D");\r
-        }\r
-\r
-        private void UpdateAchievement()\r
-        {\r
-            var ac = _sniffer.Achievement.Value;\r
-            if (ac >= 10000)\r
-                ac = 9999;\r
-            _labels.Achievement.Text = ac >= 1000 ? ((int)ac).ToString("D") : ac.ToString("F1");\r
-            _toolTip.SetToolTip(_labels.Achievement,\r
-                "今月 " + _sniffer.Achievement.ValueOfMonth.ToString("F1") + "\n" +\r
-                "EO " + _sniffer.ExMap.Achievement);\r
-        }\r
-\r
-        public void UpdateNumOfShips()\r
-        {\r
-            var ship = _sniffer.ShipCounter;\r
-            _labels.NumOfShips.Text = $"{ship.Now:D}/{ship.Max:D}";\r
-            _labels.NumOfShips.ForeColor = ship.TooMany ? CUDColors.Red : Color.Black;\r
-            if (ship.Alarm)\r
-            {\r
-                var message = $"残り{ship.Rest:D}隻";\r
-                _submitter.Enqueue("艦娘数超過", message);\r
-                ship.Alarm = false;\r
-            }\r
-        }\r
-\r
-        public void UpdateNumOfEquips()\r
-        {\r
-            var item = _sniffer.ItemCounter;\r
-            _labels.NumOfEquips.Text = $"{item.Now:D}/{item.Max:D}";\r
-            _labels.NumOfEquips.ForeColor = item.TooMany ? CUDColors.Red : Color.Black;\r
-            if (item.Alarm)\r
-            {\r
-                var message = $"残り{item.Rest:D}個";\r
-                _submitter.Enqueue("装備数超過", message);\r
-                item.Alarm = false;\r
-            }\r
-        }\r
-\r
-        private void UpdateBucketHistory()\r
-        {\r
-            var count = _sniffer.Material.MaterialHistory[(int)Material.Bucket];\r
-            var day = CutOverflow(count.Now - count.BegOfDay, 999);\r
-            var week = CutOverflow(count.Now - count.BegOfWeek, 999);\r
-            _labels.BucketHistory.Text = $"{day:+#;-#;±0} 今日\n{week:+#;-#;±0} 今週";\r
-        }\r
-\r
         private void UpdateMaterialHistory()\r
         {\r
             var labels = new[] {_labels.FuelHistory, _labels.BulletHistory, _labels.SteelHistory, _labels.BauxiteHistory };\r