Fixed the Application Launcher button in the VAB/SPH by making use of the new AppLauncherButton wrapper class.
Fixed the Application Launcher button in the VAB/SPH by making use of the new AppLauncherButton wrapper class.

--- /dev/null
+++ b/KerbalEngineer/Editor/BuildAppLauncher.cs
@@ -1,1 +1,67 @@
+// 
+//     Kerbal Engineer Redux
+// 
+//     Copyright (C) 2016 CYBUTEK
+// 
+//     This program is free software: you can redistribute it and/or modify
+//     it under the terms of the GNU General Public License as published by
+//     the Free Software Foundation, either version 3 of the License, or
+//     (at your option) any later version.
+// 
+//     This program is distributed in the hope that it will be useful,
+//     but WITHOUT ANY WARRANTY; without even the implied warranty of
+//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//     GNU General Public License for more details.
+//     You should have received a copy of the GNU General Public License
+//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//  
 
+namespace KerbalEngineer.Editor
+{
+    [KSPAddon(KSPAddon.Startup.EditorAny, false)]
+    public class BuildAppLauncher : AppLauncherButton
+    {
+        protected override void OnFalse()
+        {
+            if (BuildAdvanced.Instance != null)
+            {
+                BuildAdvanced.Instance.Visible = false;
+            }
+        }
+
+        protected override void OnTrue()
+        {
+            if (BuildAdvanced.Instance != null)
+            {
+                BuildAdvanced.Instance.Visible = true;
+            }
+        }
+
+        protected virtual void Update()
+        {
+            if (BuildAdvanced.Instance == null)
+            {
+                return;
+            }
+
+            // check if vessel is currently under construction with the presence of a root part
+            if (EditorLogic.RootPart != null)
+            {
+                // set button state based on existing visibility
+                if (BuildAdvanced.Instance.Visible)
+                {
+                    SetState(ButtonState.On);
+                }
+                else
+                {
+                    SetState(ButtonState.Off);
+                }
+            }
+            else
+            {
+                // disable button
+                SetState(ButtonState.Disabled);
+            }
+        }
+    }
+}

--- a/KerbalEngineer/Editor/BuildToolbar.cs
+++ /dev/null
@@ -1,123 +1,1 @@
-// 
-//     Kerbal Engineer Redux
-// 
-//     Copyright (C) 2014 CYBUTEK
-// 
-//     This program is free software: you can redistribute it and/or modify
-//     it under the terms of the GNU General Public License as published by
-//     the Free Software Foundation, either version 3 of the License, or
-//     (at your option) any later version.
-// 
-//     This program is distributed in the hope that it will be useful,
-//     but WITHOUT ANY WARRANTY; without even the implied warranty of
-//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-//     GNU General Public License for more details.
-// 
-//     You should have received a copy of the GNU General Public License
-//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
-// 
 
-#region Using Directives
-
-using System;
-
-using UnityEngine;
-
-#endregion
-
-namespace KerbalEngineer.Editor
-{
-    using KSP.UI;
-    using KSP.UI.Screens;
-
-    [KSPAddon(KSPAddon.Startup.EditorAny, false)]
-    public class BuildToolbar : MonoBehaviour
-    {
-        #region Fields
-
-        private ApplicationLauncherButton button;
-
-        #endregion
-
-        #region Methods: private
-
-        private void Awake()
-        {
-            GameEvents.onGUIApplicationLauncherReady.Add(this.OnGuiAppLauncherReady);
-            Logger.Log("BuildToolbar->Awake");
-        }
-
-        private void Start()
-        {
-            if (button == null)
-            {
-                OnGuiAppLauncherReady();
-            }
-        }
-
-        private void OnDestroy()
-        {
-            GameEvents.onGUIApplicationLauncherReady.Remove(this.OnGuiAppLauncherReady);
-            if (this.button != null)
-            {
-                ApplicationLauncher.Instance.RemoveModApplication(this.button);
-            }
-            Logger.Log("BuildToolbar->OnDestroy");
-        }
-
-        private void OnGuiAppLauncherReady()
-        {
-            try
-            {
-                this.button = ApplicationLauncher.Instance.AddModApplication(
-                    () => BuildAdvanced.Instance.Visible = true,
-                    () => BuildAdvanced.Instance.Visible = false,
-                    null,
-                    null,
-                    null,
-                    null,
-                    ApplicationLauncher.AppScenes.ALWAYS,
-                    GameDatabase.Instance.GetTexture("KerbalEngineer/Textures/ToolbarIcon", false)
-                    );
-                Logger.Log("BuildToolbar->OnGuiAppLauncherReady");
-            }
-            catch (Exception ex)
-            {
-                Logger.Exception(ex, "BuildToolbar->OnGuiAppLauncherReady");
-            }
-        }
-
-        private void Update()
-        {
-            try
-            {
-                if (this.button == null)
-                {
-                    return;
-                }
-
-                if (EditorLogic.fetch != null && EditorLogic.fetch.ship.parts.Count > 0)
-                {
-                    if (BuildAdvanced.Instance.Visible && this.button.toggleButton.CurrentState != UIRadioButton.State.True)
-                    {
-                        this.button.SetTrue();
-                    }
-                    else if (!BuildAdvanced.Instance.Visible && this.button.toggleButton.CurrentState != UIRadioButton.State.False)
-                    {
-                        this.button.SetFalse();
-                    }
-                }
-                else if (this.button.toggleButton.Interactable)
-                {
-                    this.button.Disable();
-                }
-            }
-            catch (Exception ex)
-            {
-                Logger.Exception(ex, "BuildToolbar->Update");
-            }
-        }
-
-        #endregion
-    }
-}