public void OnPointerEnter(PointerEventData eventData)
        {
            if (!UIAssetsLoader.allPrefabsReady)
            {
                return;
            }

            if (!tooltipPanel)
            {
                tooltipPanel = GameObject.Instantiate(UIAssetsLoader.basicTooltipPrefab);
                tooltipPanel.transform.SetParent(UIMasterController.Instance.appCanvas.transform, false);
                tooltipPanel.GetComponent <CanvasGroup>().alpha          = 0f;
                tooltipPanel.GetComponent <CanvasGroup>().blocksRaycasts = false;

                tooltipPanelFader = tooltipPanel.AddComponent <CanvasGroupFader>();
            }

            var panelRectTransform = tooltipPanel.transform as RectTransform;

            tooltipPanel.GetChild("Text").GetComponent <Text>().text = tooltipText;
            tooltipTime = 0f;

            Vector2 localPointerPosition;

            if (RectTransformUtility.ScreenPointToLocalPointInRectangle(tooltipPanel.transform.parent as RectTransform, eventData.position, eventData.pressEventCamera, out localPointerPosition))
            {
                panelRectTransform.localPosition = localPointerPosition - tooltipOffset;
            }
        }
 public void DestroyToolTip()
 {
     if (tooltipPanel)
     {
         tooltipPanel.DestroyGameObjectImmediate();
         tooltipPanel      = null;
         tooltipPanelFader = null;
     }
 }
 public void HideKJRWindow()
 {
     if (_settingsWindowFader)
     {
         _settingsWindowFader.FadeTo(0f, 0.1f, () =>
         {
             GUIEnabled = false;
             _settingsWindowPosition = _settingsWindow.transform.position;
             _settingsWindow.DestroyGameObjectImmediate();
             _settingsWindow      = null;
             _settingsWindowFader = null;
         });
     }
 }
        private void OnDestroy()
        {
            Logger.Log("[GUI] destroy");

            KeyboardLock(false);
            SaveConfigXml();

            if (_settingsWindow)
            {
                _settingsWindow.DestroyGameObject();
                _settingsWindow      = null;
                _settingsWindowFader = null;
            }

            GameEvents.onGUIApplicationLauncherReady.Remove(AddAppLauncherButton);
            GameEvents.onGameSceneLoadRequested.Remove(OnGameSceneLoadRequestedForAppLauncher);
            DestroyAppLauncherButton();

            GameEvents.onShowUI.Remove(OnShowUI);
            GameEvents.onHideUI.Remove(OnHideUI);

            Logger.Log("[GUI] OnDestroy finished successfully", Logger.Level.Debug);
        }
        private void InitSettingsWindow(bool startSolid = true)
        {
            _settingsWindow = GameObject.Instantiate(UIAssetsLoader.settingsWindowPrefab);
            _settingsWindow.transform.SetParent(UIMasterController.Instance.appCanvas.transform, false);
            _settingsWindow.GetChild("WindowTitle").AddComponent <PanelDragger>();
            _settingsWindowFader = _settingsWindow.AddComponent <CanvasGroupFader>();

            // start invisible to be toggled later
            //		if(!startSolid)
            //			_settingsWindow.GetComponent<CanvasGroup>().alpha = 0f;

            _settingsWindow.GetComponent <CanvasGroup>().alpha = 0f;

            if (_settingsWindowPosition == Vector3.zero)
            {
                _settingsWindowPosition = _settingsWindow.transform.position;                 // get the default position from the prefab
            }
            else
            {
                _settingsWindow.transform.position = ClampWindowPosition(_settingsWindowPosition);
            }

            /*
             *      var settingsButton = _settingsWindow.GetChild("WindowTitle").GetChild("LeftWindowButton");
             *      if(settingsButton != null)
             *      {
             *              settingsButton.GetComponent<Button>().onClick.AddListener(ToggleSettingsWindow);
             *              var t = settingsButton.AddComponent<BasicTooltip>();
             *              t.tooltipText = "Show/hide UI settings";
             *      }
             */
            var closeButton = _settingsWindow.GetChild("WindowTitle").GetChild("RightWindowButton");

            if (closeButton != null)
            {
                closeButton.GetComponent <Button>().onClick.AddListener(OnHideCallback);
                var t = closeButton.AddComponent <BasicTooltip>();
                t.tooltipText = "Close window";
            }

            var content = _settingsWindow.GetChild("WindowContent");

            var OptShowKSPJoints = AddNewOption(content, "ShowKSPJoints");

            OptShowKSPJoints.isOn = ShowKSPJoints;

            //		var Opt1ToggleTooltip = Opt1Toggle.gameObject.AddComponent<BasicTooltip>();
            //		Opt1ToggleTooltip.tooltipText = "Option1";

            var OptReinforceExistingJoints = AddNewOption(content, "Reinforce Existing Joints");

            OptReinforceExistingJoints.isOn = ReinforceExistingJoints;

            var OptBuildAdditionalJointToParent = AddNewOption(content, "Build Additional Joints To Parent");

            OptBuildAdditionalJointToParent.isOn = BuildAdditionalJointToParent;

            var OptShowAdditionalJointToParent = AddNewOption(content, "Show Additional Joints To Parent");

            OptShowAdditionalJointToParent.isOn = ShowAdditionalJointToParent;

            var OptBuildMultiPartJointTreeChildren = AddNewOption(content, "Build MultiPartJointTreeChildren");

            OptBuildMultiPartJointTreeChildren.isOn = BuildMultiPartJointTreeChildren;

            var OptShowMultiPartJointTreeChildren = AddNewOption(content, "Show MultiPartJointTreeChildren");

            OptShowMultiPartJointTreeChildren.isOn = ShowMultiPartJointTreeChildren;

            var OptBuildMultiPartJointTreeChildrenRoot = AddNewOption(content, "Build MultiPartJointTreeChildrenRoot");

            OptBuildMultiPartJointTreeChildrenRoot.isOn = BuildMultiPartJointTreeChildrenRoot;

            var OptShowMultiPartJointTreeChildrenRoot = AddNewOption(content, "Show MultiPartJointTreeChildrenRoot");

            OptShowMultiPartJointTreeChildrenRoot.isOn = ShowMultiPartJointTreeChildrenRoot;

            var OptAutoStrutDisplay = AddNewOption(content, "Show AutoStruts");

            OptAutoStrutDisplay.isOn = PhysicsGlobals.AutoStrutDisplay;

            var OptShowInstability = AddNewOption(content, "Show Instability");

            OptShowInstability.isOn = ShowInstability;

            var footerButtons = _settingsWindow.GetChild("WindowFooter").GetChild("WindowFooterButtonsHLG");

            var cancelButton = footerButtons.GetChild("CancelButton").GetComponent <Button>();

            cancelButton.onClick.AddListener(() =>
            {
                OptShowKSPJoints.isOn                       = ShowKSPJoints;
                OptReinforceExistingJoints.isOn             = ReinforceExistingJoints;
                OptBuildAdditionalJointToParent.isOn        = BuildAdditionalJointToParent;
                OptShowAdditionalJointToParent.isOn         = ShowAdditionalJointToParent;
                OptBuildMultiPartJointTreeChildren.isOn     = BuildMultiPartJointTreeChildren;
                OptShowMultiPartJointTreeChildren.isOn      = ShowMultiPartJointTreeChildren;
                OptBuildMultiPartJointTreeChildrenRoot.isOn = BuildMultiPartJointTreeChildrenRoot;
                OptShowMultiPartJointTreeChildrenRoot.isOn  = ShowMultiPartJointTreeChildrenRoot;
                OptAutoStrutDisplay.isOn                    = PhysicsGlobals.AutoStrutDisplay;
                OptShowInstability.isOn                     = ShowInstability;
            });

            var defaultButton = footerButtons.GetChild("DefaultButton").GetComponent <Button>();

            defaultButton.onClick.AddListener(() =>
            {
                bool bCycle = false, bCycle2 = false;

                OptShowKSPJoints.isOn = ShowKSPJoints = false;

                if (!ReinforceExistingJoints)
                {
                    bCycle = true;
                }
                OptReinforceExistingJoints.isOn = ReinforceExistingJoints = true;

                if (!BuildAdditionalJointToParent)
                {
                    bCycle = true;
                }
                OptBuildAdditionalJointToParent.isOn = BuildAdditionalJointToParent = true;

                OptShowAdditionalJointToParent.isOn = ShowAdditionalJointToParent = false;

                if (!BuildMultiPartJointTreeChildren)
                {
                    bCycle = true;
                }
                OptBuildMultiPartJointTreeChildren.isOn = BuildMultiPartJointTreeChildren = true;

                OptShowMultiPartJointTreeChildren.isOn = ShowMultiPartJointTreeChildren = false;

                if (!BuildMultiPartJointTreeChildrenRoot)
                {
                    bCycle = true;
                }
                OptBuildMultiPartJointTreeChildrenRoot.isOn = BuildMultiPartJointTreeChildrenRoot = true;

                OptShowMultiPartJointTreeChildrenRoot.isOn = ShowMultiPartJointTreeChildrenRoot = false;

                OptAutoStrutDisplay.isOn = PhysicsGlobals.AutoStrutDisplay = false;

                if (ShowInstability)
                {
                    bCycle2 = true;
                }
                OptShowInstability.isOn = ShowInstability = false;

                KJRAnalyzer.Show = ShowKSPJoints | ShowAdditionalJointToParent | ShowMultiPartJointTreeChildren | ShowMultiPartJointTreeChildrenRoot;

                if (HighLogic.LoadedSceneIsFlight)
                {
                    if (bCycle)
                    {
                        KJRManager.Instance.OnVesselWasModified(FlightGlobals.ActiveVessel);
                    }
                    else if (bCycle2)
                    {
                        KJRAnalyzerJoint.RunVesselJointUpdateFunction(FlightGlobals.ActiveVessel);
                    }
                }
            });

            var applyButton = footerButtons.GetChild("ApplyButton").GetComponent <Button>();

            applyButton.onClick.AddListener(() =>
            {
                bool bCycle = false, bCycle2 = false;

                ShowKSPJoints = OptShowKSPJoints.isOn;

                if (ReinforceExistingJoints != OptReinforceExistingJoints.isOn)
                {
                    bCycle = true;
                    ReinforceExistingJoints = OptReinforceExistingJoints.isOn;
                }

                if (BuildAdditionalJointToParent != OptBuildAdditionalJointToParent.isOn)
                {
                    bCycle = true;
                    BuildAdditionalJointToParent = OptBuildAdditionalJointToParent.isOn;
                }

                ShowAdditionalJointToParent = OptShowAdditionalJointToParent.isOn;

                if (BuildMultiPartJointTreeChildren != OptBuildMultiPartJointTreeChildren.isOn)
                {
                    bCycle = true;
                    BuildMultiPartJointTreeChildren = OptBuildMultiPartJointTreeChildren.isOn;
                }

                ShowMultiPartJointTreeChildren = OptShowMultiPartJointTreeChildren.isOn;

                if (BuildMultiPartJointTreeChildrenRoot != OptBuildMultiPartJointTreeChildrenRoot.isOn)
                {
                    bCycle = true;
                    BuildMultiPartJointTreeChildrenRoot = OptBuildMultiPartJointTreeChildrenRoot.isOn;
                }

                ShowMultiPartJointTreeChildrenRoot = OptShowMultiPartJointTreeChildrenRoot.isOn;

                PhysicsGlobals.AutoStrutDisplay = OptAutoStrutDisplay.isOn;

                if (ShowInstability != OptShowInstability.isOn)
                {
                    bCycle2         = true;
                    ShowInstability = OptShowInstability.isOn;
                }

                KJRAnalyzer.Show = ShowKSPJoints | ShowAdditionalJointToParent | ShowMultiPartJointTreeChildren | ShowMultiPartJointTreeChildrenRoot;

                if (HighLogic.LoadedSceneIsFlight)
                {
                    if (bCycle)
                    {
                        KJRManager.Instance.OnVesselWasModified(FlightGlobals.ActiveVessel);
                    }
                    else if (bCycle2)
                    {
                        KJRAnalyzerJoint.RunVesselJointUpdateFunction(FlightGlobals.ActiveVessel);
                    }
                }
            });
        }