OSDN Git Service

ヘッダのCondとExpのマウスカーソルを変える
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ConfigDialog.cs
index 9d01785..f3af537 100644 (file)
@@ -1,23 +1,21 @@
-// Copyright (C) 2014, 2015 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>\r
+// Copyright (C) 2014, 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
 // \r
-// This program is part of KancolleSniffer.\r
+// Licensed under the Apache License, Version 2.0 (the "License");\r
+// you may not use this file except in compliance with the License.\r
+// You may obtain a copy of the License at\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
+//    http://www.apache.org/licenses/LICENSE-2.0\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
+// Unless required by applicable law or agreed to in writing, software\r
+// distributed under the License is distributed on an "AS IS" BASIS,\r
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+// See the License for the specific language governing permissions and\r
+// limitations under the License.\r
 \r
 using System;\r
 using System.Collections.Generic;\r
 using System.Diagnostics;\r
+using System.Drawing;\r
 using System.IO;\r
 using System.Linq;\r
 using System.Net;\r
@@ -29,58 +27,78 @@ namespace KancolleSniffer
     {\r
         private readonly Config _config;\r
         private readonly MainForm _main;\r
-        private readonly Dictionary<string, string> _soundSetting = new Dictionary<string, string>();\r
-        private const string Home = "http://kancollesniffer.sourceforge.jp/";\r
+        private readonly NotificationConfigDialog _notificationConfigDialog;\r
+\r
+        private readonly Dictionary<string, NotificationType> _notificationSettings =\r
+            new Dictionary<string, NotificationType>();\r
+\r
+        private readonly Dictionary<string, string> _soundSettings = new Dictionary<string, string>();\r
+        private const string Home = "http://kancollesniffer.osdn.jp/";\r
+        private Point _prevPosition = new Point(int.MinValue, int.MinValue);\r
 \r
         public ConfigDialog(Config config, MainForm main)\r
         {\r
             InitializeComponent();\r
             _config = config;\r
             _main = main;\r
-            listBoxSoundFile.Items.AddRange(new object[]\r
-            {\r
-                "遠征終了", "入渠終了", "建造完了", "艦娘数超過", "装備数超過",\r
-                "大破警告", "泊地修理20分経過", "泊地修理進行", "疲労回復"\r
-            });\r
+            // ReSharper disable once CoVariantArrayConversion\r
+            listBoxSoundFile.Items.AddRange(Config.NotificationNames);\r
             numericUpDownMaterialLogInterval.Maximum = 1440;\r
+\r
+            _notificationConfigDialog = new NotificationConfigDialog(_notificationSettings,\r
+                new Dictionary<NotificationType, CheckBox>\r
+                {\r
+                    {NotificationType.FlashWindow, checkBoxFlash},\r
+                    {NotificationType.ShowBaloonTip, checkBoxBalloon},\r
+                    {NotificationType.PlaySound, checkBoxSound}\r
+                });\r
         }\r
 \r
         private void ConfigDialog_Load(object sender, EventArgs e)\r
         {\r
+            if (_prevPosition.X != int.MinValue)\r
+                Location = _prevPosition;\r
             var version = string.Join(".", Application.ProductVersion.Split('.').Take(2));\r
             labelVersion.Text = "バージョン" + version;\r
             SetLatestVersion(version);\r
+            labelCopyright.Text = FileVersionInfo.GetVersionInfo(Application.ExecutablePath).LegalCopyright;\r
 \r
             checkBoxTopMost.Checked = _config.TopMost;\r
             checkBoxHideOnMinimized.Checked = _config.HideOnMinimized;\r
+            checkBoxExitSilently.Checked = _config.ExitSilently;\r
+            checkBoxLocationPerMachine.Checked = _config.SaveLocationPerMachine;\r
+            comboBoxZoom.SelectedItem = _config.Zoom + "%";\r
+\r
             checkBoxFlash.Checked = _config.FlashWindow;\r
             checkBoxBalloon.Checked = _config.ShowBaloonTip;\r
             checkBoxSound.Checked = _config.PlaySound;\r
+            foreach (var name in Config.NotificationNames)\r
+                _notificationSettings[name] = _config.Notifications[name];\r
             numericUpDownMarginShips.Value = _config.MarginShips;\r
             numericUpDownMarginEquips.Value = _config.MarginEquips;\r
             checkBoxCond40.Checked = _config.NotifyConditions.Contains(40);\r
             checkBoxCond49.Checked = _config.NotifyConditions.Contains(49);\r
+\r
             checkBoxReset02.Checked = _config.ResetHours.Contains(2);\r
             checkBoxReset14.Checked = _config.ResetHours.Contains(14);\r
+            radioButtonResultRankAlways.Checked = _config.AlwaysShowResultRank;\r
+            radioButtonResultRankWhenClick.Checked = !_config.AlwaysShowResultRank;\r
+            checkBoxPresetAkashi.Checked = _config.UsePresetAkashi;\r
 \r
-            numericUpDownSoundVolume.Value = _config.SoundVolume;\r
-\r
-            _soundSetting["遠征終了"] = _config.MissionSoundFile;\r
-            _soundSetting["入渠終了"] = _config.NDockSoundFile;\r
-            _soundSetting["建造完了"] = _config.KDockSoundFile;\r
-            _soundSetting["艦娘数超過"] = _config.MaxShipsSoundFile;\r
-            _soundSetting["装備数超過"] = _config.MaxEquipsSoundFile;\r
-            _soundSetting["大破警告"] = _config.DamagedShipSoundFile;\r
-            _soundSetting["泊地修理20分経過"] = _config.Akashi20MinSoundFile;\r
-            _soundSetting["泊地修理進行"] = _config.AkashiProgressSoundFile;\r
-            _soundSetting["疲労回復"] = _config.ConditionSoundFile;\r
-\r
+            numericUpDownSoundVolume.Value = _config.Sounds.Volume;\r
+            foreach (var name in Config.NotificationNames)\r
+                _soundSettings[name] = _config.Sounds[name];\r
             listBoxSoundFile.SelectedIndex = -1;\r
             listBoxSoundFile.SelectedIndex = 0;\r
 \r
             LoadProxySettings();\r
             LoadLogSettings();\r
             LoadDebugSettings();\r
+\r
+            checkBoxKancolleDbOn.Checked = _config.KancolleDb.On;\r
+            textBoxKancolleDbToken.Text = _config.KancolleDb.Token;\r
+            checkBoxPushbulletOn.Checked = _config.Pushbullet.On;\r
+            textBoxPushbulletToken.Text = _config.Pushbullet.Token;\r
         }\r
 \r
         private void LoadProxySettings()\r
@@ -101,9 +119,6 @@ namespace KancolleSniffer
             textBoxOutput.Select(textBoxOutput.Text.Length, 0);\r
             folderBrowserDialogOutputDir.SelectedPath = _config.Log.OutputDir;\r
             numericUpDownMaterialLogInterval.Value = _config.Log.MaterialLogInterval;\r
-            radioButtonServerOn.Checked = _config.Log.ServerOn;\r
-            radioButtonServerOff.Checked = !_config.Log.ServerOn;\r
-            textBoxServer.Text = _config.Log.Listen.ToString("D");\r
         }\r
 \r
         private void LoadDebugSettings()\r
@@ -124,7 +139,13 @@ namespace KancolleSniffer
                 using (var reader = new StreamReader(stream))\r
                 {\r
                     var str = await reader.ReadLineAsync();\r
-                    Invoke(new Action(() => { labelLatest.Text = version == str ? "最新です" : "最新は" + str + "です"; }));\r
+                    try\r
+                    {\r
+                        Invoke(new Action(() => { labelLatest.Text = version == str ? "最新です" : "最新は" + str + "です"; }));\r
+                    }\r
+                    catch (InvalidOperationException)\r
+                    {\r
+                    }\r
                 }\r
             }\r
             catch (WebException)\r
@@ -134,20 +155,29 @@ namespace KancolleSniffer
 \r
         private void buttonOk_Click(object sender, EventArgs e)\r
         {\r
-            int listen, outbound, server;\r
-            if (!ValidateProxyPorts(out listen, out outbound) || !ValidateServerPort(out server))\r
+            if (!ValidatePorts(out var listen, out var outbound, out _))\r
                 return;\r
             DialogResult = DialogResult.OK;\r
-\r
-            ApplyProxySettings(listen, outbound);\r
-            ApplyLogSettings(server);\r
+            if (!ApplyProxySettings(listen, outbound))\r
+                DialogResult = DialogResult.None;\r
+            ApplyLogSettings();\r
             ApplyDebugSettings();\r
 \r
+            _config.KancolleDb.On = checkBoxKancolleDbOn.Checked;\r
+            _config.KancolleDb.Token = textBoxKancolleDbToken.Text;\r
+            _config.Pushbullet.On = checkBoxPushbulletOn.Checked;\r
+            _config.Pushbullet.Token = textBoxPushbulletToken.Text;\r
+\r
             _config.TopMost = checkBoxTopMost.Checked;\r
             _config.HideOnMinimized = checkBoxHideOnMinimized.Checked;\r
+            _config.ExitSilently = checkBoxExitSilently.Checked;\r
+            _config.SaveLocationPerMachine = checkBoxLocationPerMachine.Checked;\r
+            _config.Zoom = int.Parse(comboBoxZoom.SelectedItem.ToString().Substring(0, 3));\r
             _config.FlashWindow = checkBoxFlash.Checked;\r
             _config.ShowBaloonTip = checkBoxBalloon.Checked;\r
             _config.PlaySound = checkBoxSound.Checked;\r
+            foreach (var name in Config.NotificationNames)\r
+                _config.Notifications[name] = _notificationSettings[name];\r
             _config.MarginShips = (int)numericUpDownMarginShips.Value;\r
             _config.MarginEquips = (int)numericUpDownMarginEquips.Value;\r
 \r
@@ -163,28 +193,23 @@ namespace KancolleSniffer
             if (checkBoxReset14.Checked)\r
                 _config.ResetHours.Add(14);\r
 \r
-            _config.SoundVolume = (int)numericUpDownSoundVolume.Value;\r
-\r
-            _config.MissionSoundFile = _soundSetting["遠征終了"];\r
-            _config.NDockSoundFile = _soundSetting["入渠終了"];\r
-            _config.KDockSoundFile = _soundSetting["建造完了"];\r
-            _config.MaxShipsSoundFile = _soundSetting["艦娘数超過"];\r
-            _config.MaxEquipsSoundFile = _soundSetting["装備数超過"];\r
-            _config.DamagedShipSoundFile = _soundSetting["大破警告"];\r
-            _config.Akashi20MinSoundFile = _soundSetting["泊地修理20分経過"];\r
-            _config.AkashiProgressSoundFile = _soundSetting["泊地修理進行"];\r
-            _config.ConditionSoundFile = _soundSetting["疲労回復"];\r
+            _config.AlwaysShowResultRank = radioButtonResultRankAlways.Checked;\r
+            _config.UsePresetAkashi = checkBoxPresetAkashi.Checked;\r
+\r
+            _config.Sounds.Volume = (int)numericUpDownSoundVolume.Value;\r
+            foreach (var name in Config.NotificationNames)\r
+                _config.Sounds[name] = _soundSettings[name];\r
         }\r
 \r
-        private bool ValidateProxyPorts(out int listen, out int outbound)\r
+        private bool ValidatePorts(out int listen, out int outbound, out int server)\r
         {\r
-            listen = -1;\r
             outbound = -1;\r
-            if (radioButtonAutoConfigOff.Checked && !ValidatePortNumber(textBoxListen, out listen))\r
+            server = -1;\r
+            if (!ValidatePortNumber(textBoxListen, out listen))\r
                 return false;\r
             if (radioButtonUpstreamOn.Checked && !ValidatePortNumber(textBoxPort, out outbound))\r
                 return false;\r
-            if (radioButtonAutoConfigOff.Checked && radioButtonUpstreamOn.Checked && listen == outbound)\r
+            if (radioButtonUpstreamOn.Checked && listen == outbound)\r
             {\r
                 ShowToolTip("受信と送信に同じポートは使えません。", textBoxPort);\r
                 return false;\r
@@ -192,31 +217,24 @@ namespace KancolleSniffer
             return true;\r
         }\r
 \r
-        private void ApplyProxySettings(int listen, int port)\r
+        private bool ApplyProxySettings(int listen, int port)\r
         {\r
             _config.Proxy.Auto = radioButtonAutoConfigOn.Checked;\r
-            if (!_config.Proxy.Auto)\r
-                _config.Proxy.Listen = listen;\r
+            _config.Proxy.Listen = listen;\r
             _config.Proxy.UseUpstream = radioButtonUpstreamOn.Checked;\r
             if (_config.Proxy.UseUpstream)\r
                 _config.Proxy.UpstreamPort = port;\r
-            _main.ApplyProxySetting();\r
-        }\r
-\r
-        private bool ValidateServerPort(out int server)\r
-        {\r
-            server = -1;\r
-            return !radioButtonServerOn.Checked || ValidatePortNumber(textBoxServer, out server);\r
+            if (!_main.ApplyProxySetting())\r
+                return false;\r
+            textBoxListen.Text = _config.Proxy.Listen.ToString();\r
+            return true;\r
         }\r
 \r
-        private void ApplyLogSettings(int server)\r
+        private void ApplyLogSettings()\r
         {\r
             _config.Log.On = checkBoxOutput.Checked;\r
             _config.Log.MaterialLogInterval = (int)numericUpDownMaterialLogInterval.Value;\r
             _config.Log.OutputDir = textBoxOutput.Text;\r
-            _config.Log.ServerOn = radioButtonServerOn.Checked;\r
-            if (_config.Log.ServerOn)\r
-                _config.Log.Listen = server;\r
             _main.ApplyLogSetting();\r
         }\r
 \r
@@ -229,14 +247,14 @@ namespace KancolleSniffer
 \r
         private void textBoxSoundFile_TextChanged(object sender, EventArgs e)\r
         {\r
-            _soundSetting[(string)listBoxSoundFile.SelectedItem] = textBoxSoundFile.Text;\r
+            _soundSettings[(string)listBoxSoundFile.SelectedItem] = textBoxSoundFile.Text;\r
         }\r
 \r
         private void listBoxSoundFile_SelectedIndexChanged(object sender, EventArgs e)\r
         {\r
             if (listBoxSoundFile.SelectedItem == null)\r
                 return;\r
-            textBoxSoundFile.Text = _soundSetting[(string)listBoxSoundFile.SelectedItem];\r
+            textBoxSoundFile.Text = _soundSettings[(string)listBoxSoundFile.SelectedItem];\r
             textBoxSoundFile.Select(textBoxSoundFile.Text.Length, 0);\r
         }\r
 \r
@@ -252,7 +270,7 @@ namespace KancolleSniffer
 \r
         private void buttonPlay_Click(object sender, EventArgs e)\r
         {\r
-            _main.PlaySound(_soundSetting[(string)listBoxSoundFile.SelectedItem], (int)numericUpDownSoundVolume.Value);\r
+            _main.PlaySound(_soundSettings[(string)listBoxSoundFile.SelectedItem], (int)numericUpDownSoundVolume.Value);\r
         }\r
 \r
         private void buttonResetAchievement_Click(object sender, EventArgs e)\r
@@ -266,26 +284,12 @@ namespace KancolleSniffer
             Process.Start(Home);\r
         }\r
 \r
-        private void radioButtonAutoConfigOn_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            var on = ((RadioButton)sender).Checked;\r
-            textBoxListen.Enabled = !on;\r
-            labelListen.Enabled = !on;\r
-        }\r
-\r
         private void radioButtonUpstreamOff_CheckedChanged(object sender, EventArgs e)\r
         {\r
             var off = ((RadioButton)sender).Checked;\r
             textBoxPort.Enabled = !off;\r
         }\r
 \r
-        private void radioButtonServerOn_CheckedChanged(object sender, EventArgs e)\r
-        {\r
-            var on = ((RadioButton)sender).Checked;\r
-            textBoxListen.Enabled = on;\r
-            labelListen.Enabled = on;\r
-        }\r
-\r
         private void buttonOutputDir_Click(object sender, EventArgs e)\r
         {\r
             if (folderBrowserDialogOutputDir.ShowDialog(this) == DialogResult.OK)\r
@@ -334,5 +338,27 @@ namespace KancolleSniffer
             _main.SetPlayLog(textBoxDebugLog.Text);\r
             DialogResult = DialogResult.Cancel;\r
         }\r
+\r
+        private void buttonDetailedSettings_Click(object sender, EventArgs e)\r
+        {\r
+            _notificationConfigDialog.ShowDialog(this);\r
+        }\r
+\r
+        private void ConfigDialog_FormClosing(object sender, FormClosingEventArgs e)\r
+        {\r
+            _prevPosition = Location;\r
+        }\r
+\r
+        private void buttonPushbulletTest_Click(object sender, EventArgs e)\r
+        {\r
+            try\r
+            {\r
+                PushBullet.PushNote(textBoxPushbulletToken.Text, "KancolleSniffer", "うまくいったかな?");\r
+            }\r
+            catch (Exception ex)\r
+            {\r
+                MessageBox.Show(this, ex.Message, "Pushbulletエラー", MessageBoxButtons.OK, MessageBoxIcon.Error);\r
+            }\r
+        }\r
     }\r
 }
\ No newline at end of file