Refactored the AppLauncherButton wrapper class for convenience.
Refactored the AppLauncherButton wrapper class for convenience.

--- a/KerbalEngineer/AppLauncherButton.cs
+++ b/KerbalEngineer/AppLauncherButton.cs
@@ -18,45 +18,88 @@
 
 namespace KerbalEngineer
 {
+    using KSP.UI;
     using KSP.UI.Screens;
     using UnityEngine;
 
     public class AppLauncherButton : MonoBehaviour
     {
-        public enum ButtonState
-        {
-            Disabled,
-            On,
-            Off
-        }
-
         private ApplicationLauncherButton m_Button;
 
         /// <summary>
-        ///     Sets the state of the button.
+        ///     Gets or sets the toggle button state.
         /// </summary>
-        public void SetState(ButtonState state)
+        public bool isOn
         {
-            if (m_Button == null)
+            get
             {
-                return;
+                return m_Button != null &&
+                       m_Button.toggleButton.Button.interactable &&
+                       m_Button.toggleButton.CurrentState == UIRadioButton.State.True;
             }
+            set
+            {
+                if (m_Button == null)
+                {
+                    return;
+                }
 
-            switch (state)
+                if (value)
+                {
+                    SetOn();
+                }
+                else
+                {
+                    SetOff();
+                }
+            }
+        }
+
+        /// <summary>
+        ///     Disables the button if not already disabled.
+        /// </summary>
+        public void Disable()
+        {
+            if (m_Button != null && m_Button.toggleButton.Button.interactable)
             {
-                case ButtonState.Disabled:
-                    Disable();
-                    break;
+                m_Button.Disable();
+            }
+        }
 
-                case ButtonState.On:
-                    Enable();
-                    m_Button.SetTrue();
-                    break;
+        /// <summary>
+        ///     Enables the button if not already enabled.
+        /// </summary>
+        public void Enable()
+        {
+            if (m_Button != null && m_Button.toggleButton.Button.interactable == false)
+            {
+                m_Button.Enable();
+            }
+        }
 
-                case ButtonState.Off:
-                    Enable();
-                    m_Button.SetFalse();
-                    break;
+        /// <summary>
+        ///     Enables and sets the button to off.
+        /// </summary>
+        public void SetOff()
+        {
+            Enable();
+
+            if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.False)
+            {
+                m_Button.SetTrue();
+            }
+        }
+
+        /// <summary>
+        ///     Enables and sets the button to on.
+        /// </summary>
+        public void SetOn()
+        {
+            Enable();
+
+            if (m_Button != null && m_Button.toggleButton.CurrentState != UIRadioButton.State.True)
+            {
+                m_Button.SetTrue();
             }
         }
 
@@ -114,28 +157,6 @@
         /// </summary>
         protected virtual void OnUnreadifying() { }
 
-        /// <summary>
-        ///     Disables the button if not already disabled.
-        /// </summary>
-        private void Disable()
-        {
-            if (m_Button != null && m_Button.toggleButton.Button.interactable)
-            {
-                m_Button.Disable();
-            }
-        }
-
-        /// <summary>
-        ///     Enables the button if not already enabled.
-        /// </summary>
-        private void Enable()
-        {
-            if (m_Button != null && m_Button.toggleButton.Button.interactable == false)
-            {
-                m_Button.Enable();
-            }
-        }
-
         private void OnGUIApplicationLauncherReady()
         {
             // create button

--- a/KerbalEngineer/Editor/BuildAppLauncher.cs
+++ b/KerbalEngineer/Editor/BuildAppLauncher.cs
@@ -48,19 +48,11 @@
             if (EditorLogic.RootPart != null)
             {
                 // set button state based on existing visibility
-                if (BuildAdvanced.Instance.Visible)
-                {
-                    SetState(ButtonState.On);
-                }
-                else
-                {
-                    SetState(ButtonState.Off);
-                }
+                isOn = BuildAdvanced.Instance.Visible;
             }
             else
             {
-                // disable button
-                SetState(ButtonState.Disabled);
+                Disable();
             }
         }
     }