Restart application when save

Brian [2016-08-22 09:20:41]
Restart application when save
Filename
PokemonGo.RocketBot.Window/Forms/MainForm.cs
PokemonGo.RocketBot.Window/Forms/MainForm.designer.cs
PokemonGo.RocketBot.Window/Forms/SettingForm.Designer.cs
PokemonGo.RocketBot.Window/Forms/SettingForm.cs
diff --git a/PokemonGo.RocketBot.Window/Forms/MainForm.cs b/PokemonGo.RocketBot.Window/Forms/MainForm.cs
index 47e6eea..20efd8c 100644
--- a/PokemonGo.RocketBot.Window/Forms/MainForm.cs
+++ b/PokemonGo.RocketBot.Window/Forms/MainForm.cs
@@ -94,7 +94,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             CheckVersion();
             if (BoolNeedsSetup)
             {
-                startStopBotToolStripMenuItem.Enabled = false;
+                //startStopBotToolStripMenuItem.Enabled = false;
                 Logger.Write("First time here? Go to settings to set your basic info.");
                 GlobalSettings.Load("");
             }
@@ -170,12 +170,6 @@ namespace PokemonGo.RocketBot.Window.Forms

             _session = new Session(new ClientSettings(_settings), new LogicSettings(_settings));

-            if (BoolNeedsSetup)
-            {
-                menuStrip1.ShowItemToolTips = true;
-                startStopBotToolStripMenuItem.ToolTipText = @"Please goto settings and enter your basic info";
-                return;
-            }
             _session.Client.ApiFailure = new ApiFailureStrategy(_session);

             _machine = new StateMachine();
@@ -214,31 +208,31 @@ namespace PokemonGo.RocketBot.Window.Forms
             Logger.SetLoggerContext(_session);

             _session.Navigation.UpdatePositionEvent +=
-                (lat, lng) => _session.EventDispatcher.Send(new UpdatePositionEvent {Latitude = lat, Longitude = lng});
+                (lat, lng) => _session.EventDispatcher.Send(new UpdatePositionEvent { Latitude = lat, Longitude = lng });
             _session.Navigation.UpdatePositionEvent += Navigation_UpdatePositionEvent;

             RouteOptimizeUtil.RouteOptimizeEvent +=
                 optimizedroute =>
-                    _session.EventDispatcher.Send(new OptimizeRouteEvent {OptimizedRoute = optimizedroute});
+                    _session.EventDispatcher.Send(new OptimizeRouteEvent { OptimizedRoute = optimizedroute });
             RouteOptimizeUtil.RouteOptimizeEvent += InitializePokestopsAndRoute;

             Navigation.GetHumanizeRouteEvent +=
                 (route, destination) =>
-                    _session.EventDispatcher.Send(new GetHumanizeRouteEvent {Route = route, Destination = destination});
+                    _session.EventDispatcher.Send(new GetHumanizeRouteEvent { Route = route, Destination = destination });
             Navigation.GetHumanizeRouteEvent += UpdateMap;

             FarmPokestopsTask.LootPokestopEvent +=
-                pokestop => _session.EventDispatcher.Send(new LootPokestopEvent {Pokestop = pokestop});
+                pokestop => _session.EventDispatcher.Send(new LootPokestopEvent { Pokestop = pokestop });
             FarmPokestopsTask.LootPokestopEvent += UpdateMap;

             CatchNearbyPokemonsTask.PokemonEncounterEvent +=
                 mappokemons =>
-                    _session.EventDispatcher.Send(new PokemonsEncounterEvent {EncounterPokemons = mappokemons});
+                    _session.EventDispatcher.Send(new PokemonsEncounterEvent { EncounterPokemons = mappokemons });
             CatchNearbyPokemonsTask.PokemonEncounterEvent += UpdateMap;

             CatchIncensePokemonsTask.PokemonEncounterEvent +=
                 mappokemons =>
-                    _session.EventDispatcher.Send(new PokemonsEncounterEvent {EncounterPokemons = mappokemons});
+                    _session.EventDispatcher.Send(new PokemonsEncounterEvent { EncounterPokemons = mappokemons });
             CatchIncensePokemonsTask.PokemonEncounterEvent += UpdateMap;
         }

@@ -267,8 +261,8 @@ namespace PokemonGo.RocketBot.Window.Forms
                 _playerLocations.Clear();
                 var routePoint =
                     (from pokeStop in pokeStops
-                        where pokeStop != null
-                        select new PointLatLng(pokeStop.Latitude, pokeStop.Longitude)).ToList();
+                     where pokeStop != null
+                     select new PointLatLng(pokeStop.Latitude, pokeStop.Longitude)).ToList();

                 _routePoints = routePoint;
                 togglePrecalRoute.Enabled = true;
@@ -295,7 +289,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             {
                 var route = new GMapRoute(_playerLocations, "step")
                 {
-                    Stroke = new Pen(Color.FromArgb(175, 175, 175), 2) {DashStyle = DashStyle.Dot}
+                    Stroke = new Pen(Color.FromArgb(175, 175, 175), 2) { DashStyle = DashStyle.Dot }
                 };
                 _playerOverlay.Routes.Clear();
                 _playerOverlay.Routes.Add(route);
@@ -311,7 +305,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             }
             var routes = new GMapRoute(routePointLatLngs, routePointLatLngs.ToString())
             {
-                Stroke = new Pen(Color.FromArgb(128, 0, 179, 253), 4) {DashStyle = DashStyle.Dash}
+                Stroke = new Pen(Color.FromArgb(128, 0, 179, 253), 4) { DashStyle = DashStyle.Dash }
             };
             _playerRouteOverlay.Routes.Add(routes);
             /* Logger.Write("new call");
@@ -565,6 +559,7 @@ namespace PokemonGo.RocketBot.Window.Forms
         private void startStopBotToolStripMenuItem_Click(object sender, EventArgs e)
         {
             startStopBotToolStripMenuItem.Enabled = false;
+            settingToolStripMenuItem.Enabled = false;
             Task.Run(StartBot);
         }

@@ -583,7 +578,8 @@ namespace PokemonGo.RocketBot.Window.Forms
         private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
         {
             Analytics.Client.Track(MachineIdHelper.GetMachineId(), "App stopped");
-            Environment.Exit(0);
+            Analytics.Dispose();
+            //Environment.Exit(0);
         }

         #endregion EVENTS
@@ -596,7 +592,7 @@ namespace PokemonGo.RocketBot.Window.Forms
         {
             //olvPokemonList.ButtonClick += PokemonListButton_Click;

-            pkmnName.ImageGetter = delegate(object rowObject)
+            pkmnName.ImageGetter = delegate (object rowObject)
             {
                 var pokemon = rowObject as PokemonObject;

@@ -604,13 +600,13 @@ namespace PokemonGo.RocketBot.Window.Forms
                 var key = pokemon.PokemonId.ToString();
                 if (!olvPokemonList.SmallImageList.Images.ContainsKey(key))
                 {
-                    var img = GetPokemonImage((int) pokemon.PokemonId);
+                    var img = GetPokemonImage((int)pokemon.PokemonId);
                     olvPokemonList.SmallImageList.Images.Add(key, img);
                 }
                 return key;
             };

-            olvPokemonList.FormatRow += delegate(object sender, FormatRowEventArgs e)
+            olvPokemonList.FormatRow += delegate (object sender, FormatRowEventArgs e)
             {
                 var pok = e.Model as PokemonObject;
                 if (olvPokemonList.Objects
@@ -630,7 +626,7 @@ namespace PokemonGo.RocketBot.Window.Forms
                 }
             };

-            cmsPokemonList.Opening += delegate(object sender, CancelEventArgs e)
+            cmsPokemonList.Opening += delegate (object sender, CancelEventArgs e)
             {
                 e.Cancel = false;
                 cmsPokemonList.Items.Clear();
@@ -653,7 +649,7 @@ namespace PokemonGo.RocketBot.Window.Forms
                 item.Click += delegate { TransferPokemon(pokemons); };
                 cmsPokemonList.Items.Add(item);

-                item = new ToolStripMenuItem {Text = @"Rename"};
+                item = new ToolStripMenuItem { Text = @"Rename" };
                 item.Click += delegate
                 {
                     using (var form = count == 1 ? new NicknamePokemonForm(pokemonObject) : new NicknamePokemonForm())
@@ -668,30 +664,30 @@ namespace PokemonGo.RocketBot.Window.Forms

                 if (canAllEvolve)
                 {
-                    item = new ToolStripMenuItem {Text = $"Evolve {count} pokemon"};
+                    item = new ToolStripMenuItem { Text = $"Evolve {count} pokemon" };
                     item.Click += delegate { EvolvePokemon(pokemons); };
                     cmsPokemonList.Items.Add(item);
                 }

                 if (count != 1) return;
-                item = new ToolStripMenuItem {Text = @"PowerUp"};
+                item = new ToolStripMenuItem { Text = @"PowerUp" };
                 item.Click += delegate { PowerUpPokemon(pokemons); };
                 cmsPokemonList.Items.Add(item);
                 cmsPokemonList.Items.Add(separator);

-                item = new ToolStripMenuItem {Text = @"Transfer Clean Up (Keep highest IV)"};
+                item = new ToolStripMenuItem { Text = @"Transfer Clean Up (Keep highest IV)" };
                 item.Click += delegate { CleanUpTransferPokemon(pokemonObject, "IV"); };
                 cmsPokemonList.Items.Add(item);

-                item = new ToolStripMenuItem {Text = @"Transfer Clean Up (Keep highest CP)"};
+                item = new ToolStripMenuItem { Text = @"Transfer Clean Up (Keep highest CP)" };
                 item.Click += delegate { CleanUpTransferPokemon(pokemonObject, "CP"); };
                 cmsPokemonList.Items.Add(item);

-                item = new ToolStripMenuItem {Text = @"Evolve Clean Up (Highest IV)"};
+                item = new ToolStripMenuItem { Text = @"Evolve Clean Up (Highest IV)" };
                 item.Click += delegate { CleanUpEvolvePokemon(pokemonObject, "IV"); };
                 cmsPokemonList.Items.Add(item);

-                item = new ToolStripMenuItem {Text = @"Evolve Clean Up (Highest CP)"};
+                item = new ToolStripMenuItem { Text = @"Evolve Clean Up (Highest CP)" };
                 item.Click += delegate { CleanUpEvolvePokemon(pokemonObject, "CP"); };
                 cmsPokemonList.Items.Add(item);

@@ -708,17 +704,17 @@ namespace PokemonGo.RocketBot.Window.Forms
                 if (cName.Equals("Transfer"))
                 {
                     // ReSharper disable once PossibleNullReferenceException
-                    TransferPokemon(new List<PokemonData> {pokemon.PokemonData});
+                    TransferPokemon(new List<PokemonData> { pokemon.PokemonData });
                 }
                 else if (cName.Equals("Power Up"))
                 {
                     // ReSharper disable once PossibleNullReferenceException
-                    PowerUpPokemon(new List<PokemonData> {pokemon.PokemonData});
+                    PowerUpPokemon(new List<PokemonData> { pokemon.PokemonData });
                 }
                 else if (cName.Equals("Evolve"))
                 {
                     // ReSharper disable once PossibleNullReferenceException
-                    EvolvePokemon(new List<PokemonData> {pokemon.PokemonData});
+                    EvolvePokemon(new List<PokemonData> { pokemon.PokemonData });
                 }
             }
             catch (Exception ex)
@@ -941,7 +937,7 @@ namespace PokemonGo.RocketBot.Window.Forms
                 foreach (var pokemon in pokemons)
                 {
                     var pokemonObject = new PokemonObject(pokemon);
-                    var family = _families.First(i => (int) i.FamilyId <= (int) pokemon.PokemonId);
+                    var family = _families.First(i => (int)i.FamilyId <= (int)pokemon.PokemonId);
                     pokemonObject.Candy = family.Candy_;
                     pokemonObjects.Add(pokemonObject);
                 }
@@ -1001,7 +997,7 @@ namespace PokemonGo.RocketBot.Window.Forms

         private async void ItemBox_ItemClick(object sender, EventArgs e)
         {
-            var item = (ItemData) sender;
+            var item = (ItemData)sender;

             using (var form = new ItemForm(item))
             {
@@ -1011,67 +1007,67 @@ namespace PokemonGo.RocketBot.Window.Forms
                 switch (item.ItemId)
                 {
                     case ItemId.ItemLuckyEgg:
-                    {
-                        if (_session.Client == null)
                         {
-                            Logger.Write($"Bot must be running first!", LogLevel.Warning);
-                            SetState(true);
-                            return;
+                            if (_session.Client == null)
+                            {
+                                Logger.Write($"Bot must be running first!", LogLevel.Warning);
+                                SetState(true);
+                                return;
+                            }
+                            var response = await _session.Client.Inventory.UseItemXpBoost();
+                            switch (response.Result)
+                            {
+                                case UseItemXpBoostResponse.Types.Result.Success:
+                                    Logger.Write($"Using a Lucky Egg");
+                                    Logger.Write($"Lucky Egg valid until: {DateTime.Now.AddMinutes(30)}");
+                                    break;
+                                case UseItemXpBoostResponse.Types.Result.ErrorXpBoostAlreadyActive:
+                                    Logger.Write($"A Lucky Egg is already active!", LogLevel.Warning);
+                                    break;
+                                case UseItemXpBoostResponse.Types.Result.ErrorLocationUnset:
+                                    Logger.Write($"Bot must be running first!", LogLevel.Error);
+                                    break;
+                                case UseItemXpBoostResponse.Types.Result.Unset:
+                                    break;
+                                case UseItemXpBoostResponse.Types.Result.ErrorInvalidItemType:
+                                    break;
+                                case UseItemXpBoostResponse.Types.Result.ErrorNoItemsRemaining:
+                                    break;
+                                default:
+                                    Logger.Write($"Failed using a Lucky Egg!", LogLevel.Error);
+                                    break;
+                            }
                         }
-                        var response = await _session.Client.Inventory.UseItemXpBoost();
-                        switch (response.Result)
-                        {
-                            case UseItemXpBoostResponse.Types.Result.Success:
-                                Logger.Write($"Using a Lucky Egg");
-                                Logger.Write($"Lucky Egg valid until: {DateTime.Now.AddMinutes(30)}");
-                                break;
-                            case UseItemXpBoostResponse.Types.Result.ErrorXpBoostAlreadyActive:
-                                Logger.Write($"A Lucky Egg is already active!", LogLevel.Warning);
-                                break;
-                            case UseItemXpBoostResponse.Types.Result.ErrorLocationUnset:
-                                Logger.Write($"Bot must be running first!", LogLevel.Error);
-                                break;
-                            case UseItemXpBoostResponse.Types.Result.Unset:
-                                break;
-                            case UseItemXpBoostResponse.Types.Result.ErrorInvalidItemType:
-                                break;
-                            case UseItemXpBoostResponse.Types.Result.ErrorNoItemsRemaining:
-                                break;
-                            default:
-                                Logger.Write($"Failed using a Lucky Egg!", LogLevel.Error);
-                                break;
-                        }
-                    }
                         break;
                     case ItemId.ItemIncenseOrdinary:
-                    {
-                        if (_session.Client == null)
-                        {
-                            Logger.Write($"Bot must be running first!", LogLevel.Error);
-                            SetState(true);
-                            return;
-                        }
-                        var response = await _session.Client.Inventory.UseIncense(ItemId.ItemIncenseOrdinary);
-                        switch (response.Result)
                         {
-                            case UseIncenseResponse.Types.Result.Success:
-                                Logger.Write($"Incense valid until: {DateTime.Now.AddMinutes(30)}");
-                                break;
-                            case UseIncenseResponse.Types.Result.IncenseAlreadyActive:
-                                Logger.Write($"An incense is already active!", LogLevel.Warning);
-                                break;
-                            case UseIncenseResponse.Types.Result.LocationUnset:
+                            if (_session.Client == null)
+                            {
                                 Logger.Write($"Bot must be running first!", LogLevel.Error);
-                                break;
-                            case UseIncenseResponse.Types.Result.Unknown:
-                                break;
-                            case UseIncenseResponse.Types.Result.NoneInInventory:
-                                break;
-                            default:
-                                Logger.Write($"Failed using an incense!", LogLevel.Error);
-                                break;
+                                SetState(true);
+                                return;
+                            }
+                            var response = await _session.Client.Inventory.UseIncense(ItemId.ItemIncenseOrdinary);
+                            switch (response.Result)
+                            {
+                                case UseIncenseResponse.Types.Result.Success:
+                                    Logger.Write($"Incense valid until: {DateTime.Now.AddMinutes(30)}");
+                                    break;
+                                case UseIncenseResponse.Types.Result.IncenseAlreadyActive:
+                                    Logger.Write($"An incense is already active!", LogLevel.Warning);
+                                    break;
+                                case UseIncenseResponse.Types.Result.LocationUnset:
+                                    Logger.Write($"Bot must be running first!", LogLevel.Error);
+                                    break;
+                                case UseIncenseResponse.Types.Result.Unknown:
+                                    break;
+                                case UseIncenseResponse.Types.Result.NoneInInventory:
+                                    break;
+                                default:
+                                    Logger.Write($"Failed using an incense!", LogLevel.Error);
+                                    break;
+                            }
                         }
-                    }
                         break;
                     case ItemId.ItemUnknown:
                         break;
@@ -1130,23 +1126,23 @@ namespace PokemonGo.RocketBot.Window.Forms
                     case ItemId.ItemItemStorageUpgrade:
                         break;
                     default:
-                    {
-                        var response =
-                            await
-                                _session.Client.Inventory.RecycleItem(item.ItemId, decimal.ToInt32(form.numCount.Value));
-                        if (response.Result == RecycleInventoryItemResponse.Types.Result.Success)
-                        {
-                            Logger.Write(
-                                $"Recycled {decimal.ToInt32(form.numCount.Value)}x {item.ItemId.ToString().Substring(4)}",
-                                LogLevel.Recycling);
-                        }
-                        else
                         {
-                            Logger.Write(
-                                $"Unable to recycle {decimal.ToInt32(form.numCount.Value)}x {item.ItemId.ToString().Substring(4)}",
-                                LogLevel.Error);
+                            var response =
+                                await
+                                    _session.Client.Inventory.RecycleItem(item.ItemId, decimal.ToInt32(form.numCount.Value));
+                            if (response.Result == RecycleInventoryItemResponse.Types.Result.Success)
+                            {
+                                Logger.Write(
+                                    $"Recycled {decimal.ToInt32(form.numCount.Value)}x {item.ItemId.ToString().Substring(4)}",
+                                    LogLevel.Recycling);
+                            }
+                            else
+                            {
+                                Logger.Write(
+                                    $"Unable to recycle {decimal.ToInt32(form.numCount.Value)}x {item.ItemId.ToString().Substring(4)}",
+                                    LogLevel.Error);
+                            }
                         }
-                    }
                         break;
                 }
                 await ReloadPokemonList();
diff --git a/PokemonGo.RocketBot.Window/Forms/MainForm.designer.cs b/PokemonGo.RocketBot.Window/Forms/MainForm.designer.cs
index 55dcf24..d01589c 100644
--- a/PokemonGo.RocketBot.Window/Forms/MainForm.designer.cs
+++ b/PokemonGo.RocketBot.Window/Forms/MainForm.designer.cs
@@ -37,7 +37,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel();
             this.menuStrip1 = new System.Windows.Forms.MenuStrip();
             this.startStopBotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
-            this.todoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.settingToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.showAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.showAllToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
             this.gMapControl1 = new GMap.NET.WindowsForms.GMapControl();
@@ -122,7 +122,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
             this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.startStopBotToolStripMenuItem,
-            this.todoToolStripMenuItem});
+            this.settingToolStripMenuItem});
             this.menuStrip1.Location = new System.Drawing.Point(0, 0);
             this.menuStrip1.Name = "menuStrip1";
             this.menuStrip1.Size = new System.Drawing.Size(1254, 25);
@@ -136,12 +136,12 @@ namespace PokemonGo.RocketBot.Window.Forms
             this.startStopBotToolStripMenuItem.Text = "▶ Start Bot";
             this.startStopBotToolStripMenuItem.Click += new System.EventHandler(this.startStopBotToolStripMenuItem_Click);
             //
-            // todoToolStripMenuItem
+            // settingToolStripMenuItem
             //
-            this.todoToolStripMenuItem.Name = "todoToolStripMenuItem";
-            this.todoToolStripMenuItem.Size = new System.Drawing.Size(66, 21);
-            this.todoToolStripMenuItem.Text = "Settings";
-            this.todoToolStripMenuItem.Click += new System.EventHandler(this.todoToolStripMenuItem_Click);
+            this.settingToolStripMenuItem.Name = "settingToolStripMenuItem";
+            this.settingToolStripMenuItem.Size = new System.Drawing.Size(66, 21);
+            this.settingToolStripMenuItem.Text = "Settings";
+            this.settingToolStripMenuItem.Click += new System.EventHandler(this.todoToolStripMenuItem_Click);
             //
             // showAllToolStripMenuItem
             //
@@ -553,7 +553,7 @@ namespace PokemonGo.RocketBot.Window.Forms
         private System.Windows.Forms.RichTextBox logTextBox;
         private System.Windows.Forms.StatusStrip statusStrip1;
         private System.Windows.Forms.MenuStrip menuStrip1;
-        private System.Windows.Forms.ToolStripMenuItem todoToolStripMenuItem;
+        private System.Windows.Forms.ToolStripMenuItem settingToolStripMenuItem;
         private System.Windows.Forms.ToolStripStatusLabel statusLabel;
         private System.Windows.Forms.ToolStripMenuItem startStopBotToolStripMenuItem;
         private System.Windows.Forms.ToolStripMenuItem showAllToolStripMenuItem;
diff --git a/PokemonGo.RocketBot.Window/Forms/SettingForm.Designer.cs b/PokemonGo.RocketBot.Window/Forms/SettingForm.Designer.cs
index 0715b62..1b873ad 100644
--- a/PokemonGo.RocketBot.Window/Forms/SettingForm.Designer.cs
+++ b/PokemonGo.RocketBot.Window/Forms/SettingForm.Designer.cs
@@ -1438,7 +1438,7 @@
             this.clbIgnore.Location = new System.Drawing.Point(6, 44);
             this.clbIgnore.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
             this.clbIgnore.Name = "clbIgnore";
-            this.clbIgnore.Size = new System.Drawing.Size(259, 166);
+            this.clbIgnore.Size = new System.Drawing.Size(259, 148);
             this.clbIgnore.TabIndex = 0;
             //
             // tBMaxBerriesToUsePerPokemon
@@ -1500,7 +1500,7 @@
             this.groupBox1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
             this.groupBox1.Name = "groupBox1";
             this.groupBox1.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4);
-            this.groupBox1.Size = new System.Drawing.Size(220, 446);
+            this.groupBox1.Size = new System.Drawing.Size(220, 448);
             this.groupBox1.TabIndex = 20;
             this.groupBox1.TabStop = false;
             this.groupBox1.Text = "Exclude Transfer";
@@ -1845,7 +1845,7 @@
             this.groupBox4.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
             this.groupBox4.Name = "groupBox4";
             this.groupBox4.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4);
-            this.groupBox4.Size = new System.Drawing.Size(220, 449);
+            this.groupBox4.Size = new System.Drawing.Size(220, 451);
             this.groupBox4.TabIndex = 5;
             this.groupBox4.TabStop = false;
             this.groupBox4.Text = "Power Up";
@@ -2025,7 +2025,7 @@
             this.groupBox3.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
             this.groupBox3.Name = "groupBox3";
             this.groupBox3.Padding = new System.Windows.Forms.Padding(3, 4, 3, 4);
-            this.groupBox3.Size = new System.Drawing.Size(220, 449);
+            this.groupBox3.Size = new System.Drawing.Size(220, 451);
             this.groupBox3.TabIndex = 16;
             this.groupBox3.TabStop = false;
             this.groupBox3.Text = "Evolve";
@@ -2611,12 +2611,12 @@
             // saveBtn
             //
             this.saveBtn.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.saveBtn.Location = new System.Drawing.Point(700, 540);
+            this.saveBtn.Location = new System.Drawing.Point(541, 540);
             this.saveBtn.Margin = new System.Windows.Forms.Padding(3, 5, 3, 5);
             this.saveBtn.Name = "saveBtn";
-            this.saveBtn.Size = new System.Drawing.Size(104, 32);
+            this.saveBtn.Size = new System.Drawing.Size(263, 32);
             this.saveBtn.TabIndex = 29;
-            this.saveBtn.Text = "Save";
+            this.saveBtn.Text = "Save (This will automatically restart RocketBot)";
             this.saveBtn.UseVisualStyleBackColor = true;
             this.saveBtn.Click += new System.EventHandler(this.saveBtn_Click);
             //
diff --git a/PokemonGo.RocketBot.Window/Forms/SettingForm.cs b/PokemonGo.RocketBot.Window/Forms/SettingForm.cs
index b079e38..993aa50 100644
--- a/PokemonGo.RocketBot.Window/Forms/SettingForm.cs
+++ b/PokemonGo.RocketBot.Window/Forms/SettingForm.cs
@@ -598,6 +598,7 @@ namespace PokemonGo.RocketBot.Window.Forms
             #endregion

             _setting.Save(ConfigFilePath);
+            Application.Restart();

             #endregion
You may download the files in Public Git.