protected virtual void Show(ViewingState viewingState)
        {
            switch (viewingState)
            {
            case ViewingState.Status:
                RemoveCreatedChooseButtons();
                UpdateCurrentText();
                selectionPanel.gameObject.SetActive(false);
                statusPanel.gameObject.SetActive(true);

                break;

            case ViewingState.Selection:
                AddSelectionButtons();
                selectionPanel.gameObject.SetActive(true);
                statusPanel.gameObject.SetActive(false);

                break;

            default:
                VRTK_Logger.Fatal(new ArgumentOutOfRangeException("viewingState", viewingState, null));
                return;
            }

            bool isAnyOtherCameraUsed = VRTK_SDKManager.GetAllSDKSetups().Any(setup => setup != null && setup.gameObject.activeSelf) ||
                                        VRTK_DeviceFinder.HeadsetCamera() != null;

            fallbackCamera.gameObject.SetActive(!isAnyOtherCameraUsed);
            eventSystem.gameObject.SetActive(EventSystem.current == null || EventSystem.current == eventSystem);
        }
        protected virtual void AddSelectionButtons()
        {
            if (VRTK_SDKManager.GetLoadedSDKSetup() != null)
            {
                GameObject chooseNoneButton = Instantiate(chooseButton.gameObject, chooseButton.transform.parent);
                chooseNoneButton.GetComponentInChildren <Text>().text = "None";
                chooseNoneButton.name = "ChooseNoneButton";
                chooseNoneButton.SetActive(true);

                chooseNoneButton.GetComponent <Button>().onClick.AddListener(
                    () => VRTK_SDKManager.AttemptUnloadSDKSetup(true)
                    );

                chooseButtonGameObjects.Add(chooseNoneButton);
            }

            VRTK_SDKSetup[] setups = VRTK_SDKManager.GetAllSDKSetups();
            for (int index = 0; index < setups.Length; index++)
            {
                VRTK_SDKSetup setup = setups[index];
                if (setup == null || setup == VRTK_SDKManager.GetLoadedSDKSetup())
                {
                    continue;
                }

                GameObject chooseButtonCopy = Instantiate(chooseButton.gameObject, chooseButton.transform.parent);
                chooseButtonCopy.GetComponentInChildren <Text>().text = setup.name;
                chooseButtonCopy.name = string.Format("Choose{0}Button", setup.name);
                chooseButtonCopy.SetActive(true);

                int    indexCopy = index;
                Button button    = chooseButtonCopy.GetComponent <Button>();
                button.onClick.AddListener(
                    () => VRTK_SDKManager.AttemptTryLoadSDKSetup(indexCopy, true, setups)
                    );

                ColorBlock buttonColors = button.colors;
                buttonColors.colorMultiplier = setup.isValid ? 1.0f : 0.8f;
                button.colors = buttonColors;

                chooseButtonGameObjects.Add(chooseButtonCopy);
            }
        }