Example #1
0
        private void MenuButton_Click(object sender, EventArgs e)
        {
            //Prepare
            IMenuButton <MapFile, IndexEntry, Xbox>      menuItem        = null;
            IContextMenuItem <MapFile, IndexEntry, Xbox> contextMenuItem = null;

            //Get Sender
            if (sender is ToolStripItem)
            {
                //Get
                ToolStripItem Sender = (ToolStripItem)sender;
                if (Sender.Tag is IMenuButton <MapFile, IndexEntry, Xbox> )
                {
                    menuItem = (IMenuButton <MapFile, IndexEntry, Xbox>)Sender.Tag;
                }
                if (Sender.Tag is IContextMenuItem <MapFile, IndexEntry, Xbox> )
                {
                    contextMenuItem = (IContextMenuItem <MapFile, IndexEntry, Xbox>)Sender.Tag;
                }
            }

            //Click
            menuItem?.OnClick();
            contextMenuItem?.OnClick();
        }
Example #2
0
        //!
        //! click on camera look through
        //! @param      button      button sent the request
        //!
        private void lookThroughCamera(IMenuButton button)
        {
            centerMenu.animateActive(((Button)button).gameObject);
            if (button.Toggled)
            {
                Transform currentSelectedTransform = mainController.getCurrentSelection();
                Camera.main.transform.position = currentSelectedTransform.position;
                //Camera.main.transform.parent.position = currentSelectedTransform.position;
                mainController.cameraAdapter.setTargetRotation(currentSelectedTransform.rotation);// * Quaternion.Inverse(Camera.main.transform.rotation);
                //Camera.main.transform.parent.rotation = Quaternion.Euler(Camera.main.transform.parent.rotation.eulerAngles.x,Camera.main.transform.parent.rotation.eulerAngles.y,0);
                mainController.cameraAdapter.Fov = currentSelectedTransform.GetComponent <SceneObjectCamera>().fov;

                if (!mainController.getCurrentSelection().GetComponent <SceneObject>().locked)
                {
                    mainController.ConnectRangeSlider(mainController.setCamParamFocalLength, Extensions.vFovToLens(currentSelectedTransform.GetComponent <SceneObjectCamera>().fov));
                }
            }
            else
            {
                //trackingController.resetTargetRotation();
                hideRangeSlider();
            }

            mainController.buttonLookThroughCamClicked(button.Toggled);
        }
Example #3
0
 private void editPointToMove(IMenuButton button)
 {
     parameterMenu.reset();
     button.Toggled = true;
     mainController.togglePointToMove(button.Toggled);
     UI.OnUIChanged.Invoke();
 }
Example #4
0
 private void editLinkToCamera(IMenuButton button)
 {
     parameterMenu.reset();
     button.Toggled = true;
     mainController.toggleObjectLinkCamera(button.Toggled);
     UI.OnUIChanged.Invoke();
 }
Example #5
0
 private void editPointToMove(IMenuButton button)
 {
     parameterMenu.reset();
     pointToMoveActive = !pointToMoveActive;
     button.Toggled    = pointToMoveActive;
     mainController.togglePointToMove(pointToMoveActive);
     UI.OnUIChanged.Invoke();
 }
Example #6
0
 private void editLinkToCamera(IMenuButton button)
 {
     parameterMenu.reset();
     linkToCameraActive = !linkToCameraActive;
     button.Toggled     = linkToCameraActive;
     mainController.toggleObjectLinkCamera(linkToCameraActive);
     UI.OnUIChanged.Invoke();
 }
Example #7
0
        private void editLightIntensity(IMenuButton button)
        {
            centerMenu.animateActive(((Button)button).gameObject);
            mainController.buttonLightIntensityClicked(button.Toggled);

            //lightSettingsWidget.setSliderType(LightSettingsWidget.SliderType.INTENSITY);
            //mainController.toogleLightEditing();
        }
Example #8
0
        // Center
        //
        //
        private void editTranslation(IMenuButton button)
        {
            // make toggle buttons using secondary menu switch of
            OnSecondaryMenuVisibility.Invoke(false);

            centerMenu.animateActive(((Button)button).gameObject);
            mainController.buttonTranslationClicked(button.Toggled);
        }
        public IMenu AddButton(string text, Action <IMenuButton> onClick, out IMenuButton control)
        {
            var item = new MenuButton(text);

            item.OnChange = (v) => onClick(item);
            _items.Add(item);
            control = item;
            return(this);
        }
Example #10
0
        public void addButtonToLayout(IMenuButton newButton, layouts layout)
        {
            if (!layoutDict.ContainsKey(layout))
            {
                layoutDict.Add(layout, new List <GameObject>());
            }

            layoutDict[layout].Add(((Button)newButton).gameObject);
        }
Example #11
0
        //!
        //! adds a button to the menu
        //! @param    active    image displayed when button is active
        //! @param    toggle    indicate if this is a toggle button
        //!
        public void addButton(IMenuButton newButton, layouts layout = layouts.DEFAULT)
        {
            GameObject newButtonObj = ((Button)newButton).gameObject;

            buttons.Add(newButtonObj);
            newButtonObj.transform.SetParent(this.transform, false);
            newButtonObj.SetActive(false);
            addObjectToLayout(newButtonObj, layout);
            newButton.Menu = this;
        }
Example #12
0
        public bool Equals(IMenuButton other)
        {
            var item = other as iFactr.UI.MenuButton;

            if (item != null)
            {
                return(item.Equals(this));
            }

            return(base.Equals(other));
        }
Example #13
0
 private void cameraFov(IMenuButton button)
 {
     if (button.Toggled)
     {
         mainController.ConnectRangeSlider(mainController.setCamParamFov, Camera.main.fieldOfView.vFovToLens());
     }
     else
     {
         hideRangeSlider();
     }
 }
Example #14
0
 private void triggerMocap(IMenuButton button)
 {
     if (button.Toggled)
     {
         mainController.buttonAnimatorCmdClicked(1); //play
     }
     else
     {
         mainController.buttonAnimatorCmdClicked(2); // stop
     }
 }
Example #15
0
        /// <summary>
        /// Determines whether the specified <see cref="iFactr.UI.IMenuButton"/> is equal to this instance.
        /// </summary>
        /// <param name="other">The <see cref="iFactr.UI.IMenuButton"/> to compare with this instance.</param>
        /// <returns><c>true</c> if the specified <see cref="iFactr.UI.IMenuButton"/> is equal to this instance;
        /// otherwise, <c>false</c>.</returns>
        public bool Equals(IMenuButton other)
        {
            MenuButton item = other as MenuButton;

            if (item != null)
            {
                return(Pair == item.Pair);
            }

            return(Pair == other);
        }
Example #16
0
        private void Factory_InitializeMenuButton(AddOnFactory factory, string assemblyName, string typeFullName, IHost host)
        {
            //Create
            IMenuButton <TMap, TEntry, TXbox> menuButton = factory.CreateInstance <IMenuButton <TMap, TEntry, TXbox> >(assemblyName, typeFullName);

            menuButton.Initialize(host);

            //Add
            addOns.Add(menuButton);
            haloAddOns.Add(menuButton);
            xboxAddOns.Add(menuButton);
            menuButtons.Add(menuButton);
        }
Example #17
0
 private void animationLayerToggleCurrentObject(IMenuButton button, SubMenu subMenu, int layerIdx)
 {
     if (button.Toggled)
     {
         print("Add " + mainController.getCurrentSelection().gameObject + " to animation layer " + layerIdx);
         animationController.addSelectedObjectToLayer(layerIdx);
     }
     else
     {
         print("Remove " + mainController.getCurrentSelection().gameObject + " from animation layer " + layerIdx);
         animationController.removeSelectedObjectFromLayer(layerIdx);
     }
 }
        private void setupParameterMenu()
        {
            // transform
            IMenuButton buttonTransX = Elements.MenuButtonToggle();

            buttonTransX.AddAction(EditMode_AxisX_sel, EditMode_AxisX_nrm, () => parameterButtonHandle(buttonTransX, 0));
            IMenuButton buttonTransY = Elements.MenuButtonToggle();

            buttonTransY.AddAction(EditMode_AxisY_sel, EditMode_AxisY_nrm, () => parameterButtonHandle(buttonTransY, 1));
            IMenuButton buttonTransZ = Elements.MenuButtonToggle();

            buttonTransZ.AddAction(EditMode_AxisZ_sel, EditMode_AxisZ_nrm, () => parameterButtonHandle(buttonTransZ, 2));
            // light settings
            IMenuButton buttonLightIntensity = Elements.MenuButtonToggle();

            buttonLightIntensity.AddAction(EditMode_LightIntensity_sel, EditMode_LightIntensity_nrm, () => parameterButtonHandle(buttonLightIntensity, 0));
            IMenuButton buttonLightRange = Elements.MenuButtonToggle();

            buttonLightRange.AddAction(ScoutMode_FocalLength_sel, ScoutMode_FocalLength_nrm, () => parameterButtonHandle(buttonLightRange, 1));
            IMenuButton buttonLightAngle = Elements.MenuButtonToggle();

            buttonLightAngle.AddAction(EditMode_LightConeAngle_sel, EditMode_LightConeAngle_nrm, () => parameterButtonHandle(buttonLightAngle, 2));
            // attach to cam
            IMenuButton buttonAttachCam = Elements.MenuButtonToggle();

            buttonAttachCam.AddAction(EditMode_TranslateAttachToCam_sel, EditMode_TranslateAttachToCam_nrm, () => editLinkToCamera(buttonAttachCam)); //
            UI.OnUIChanged.AddListener(() => { buttonAttachCam.Toggled = (mainController.ActiveMode == MainController.Mode.objectLinkCamera); });     // register ui changes
            // click to move
            IMenuButton buttonClickMove = Elements.MenuButtonToggle();

            buttonClickMove.AddAction(EditMode_TranslateClickToMove_sel, EditMode_TranslateClickToMove_nrm, () => editPointToMove(buttonClickMove)); //
            UI.OnUIChanged.AddListener(() => { buttonClickMove.Toggled = (mainController.ActiveMode == MainController.Mode.pointToMoveMode); });     // register ui changes

            // TODO: add range
            // add buttons
            parameterMenu.DirToExpand = SubMenu.direction.BOTTOM;
            parameterMenu.addButton(buttonTransX, layouts.TRANSFORM);
            parameterMenu.addButton(buttonTransY, layouts.TRANSFORM);
            parameterMenu.addButton(buttonTransZ, layouts.TRANSFORM);
            parameterMenu.addButton(buttonTransX, layouts.TRANSLATION);
            parameterMenu.addButton(buttonTransY, layouts.TRANSLATION);
            parameterMenu.addButton(buttonTransZ, layouts.TRANSLATION);
            parameterMenu.addButton(buttonAttachCam, layouts.TRANSLATION);
            parameterMenu.addButton(buttonClickMove, layouts.TRANSLATION);
            parameterMenu.addButton(buttonLightIntensity, layouts.LIGHTDIR);
            parameterMenu.addButtonToLayout(buttonLightIntensity, layouts.LIGHTPOINT);
            parameterMenu.addButton(buttonLightRange, layouts.LIGHTPOINT);
            parameterMenu.addButtonToLayout(buttonLightIntensity, layouts.LIGHTSPOT);
            parameterMenu.addButtonToLayout(buttonLightRange, layouts.LIGHTSPOT);
            parameterMenu.addButton(buttonLightAngle, layouts.LIGHTSPOT);
        }
Example #19
0
        private void animationAddCueMenu(IMenuButton button)
        {
            GameObject obj = ((Button)button).gameObject;

            SubMenu subMenu = ((Button)button).gameObject.GetComponent <SubMenu>();

            SceneObject sceneObject = mainController.getCurrentSelection().GetComponent <SceneObject>();

            if (subMenu == null)
            {
                subMenu             = ((Button)button).gameObject.AddComponent <SubMenu>();
                subMenu.DirToExpand = SubMenu.direction.RIGHT;

                GameObject buttonTextPrefab = Resources.Load <GameObject>("VPET/Prefabs/ButtonText");
                // add animation layer buttons
                for (int i = 1; i < 4; ++i)
                {
                    // add animation layer button
                    int layerIndex = i - 1;
                    vpet.IMenuButton animLayerButton = vpet.Elements.MenuButtonToggle();
                    // get toggle state
                    animLayerButton.Toggled = sceneObject.animationLayer == layerIndex;
                    animLayerButton.AddAction(AnimationMode_CueFire_sel, AnimationMode_CueFire_nrm, () => animationLayerToggleCurrentObject(animLayerButton, subMenu, layerIndex));
                    // subMenu.OnMenuOpen.AddListener( () => { print("Check for layer " + layerIndex); animLayerButton.Toggled = animationController.IsCurrentSelectionOnLayer(layerIndex); } );
                    UI.OnUIChanged.AddListener(() => { print("Check for layer " + layerIndex); animLayerButton.Toggled = animationController.IsCurrentSelectionOnLayer(layerIndex); });
                    subMenu.addButton(animLayerButton);

                    // add animation layer id on top (text object)
                    GameObject buttonTextObj = GameObject.Instantiate(buttonTextPrefab);
                    GameObject buttonObj     = ((Button)animLayerButton).gameObject;
                    buttonObj.name = "CueAddButton_" + i.ToString();
                    buttonTextObj.transform.parent        = buttonObj.transform;
                    buttonTextObj.transform.localScale    = new Vector3(1, 1, 1);
                    buttonTextObj.transform.localPosition = new Vector3(0, 0, 0);
                    Text text = buttonTextObj.GetComponent <Text>();
                    if (text != null)
                    {
                        text.text = i.ToString();
                    }
                }
            }

            if (!subMenu.isOpen)
            {
                subMenu.show();
            }
            else
            {
                subMenu.hide();
            }
        }
Example #20
0
 private void editAnimation(IMenuButton button)
 {
     centerMenu.animateActive(((Button)button).gameObject);
     mainController.buttonAnimationEditClicked(button.Toggled);
     if (button.Toggled)
     {
         animationController.activate();
     }
     else
     {
         animationController.deactivate();
     }
     animationController.editingPosition = true;
 }
Example #21
0
        //!
        //! click on camera FOV
        //! @param      button      button sent the request
        //!
        private void cameraFOV(IMenuButton button)
        {
            centerMenu.animateActive(((Button)button).gameObject);
            if (button.Toggled)
            {
                mainController.ConnectRangeSlider(mainController.setCamParamFocalLength, Extensions.vFovToLens(mainController.getCurrentSelection().GetComponent <SceneObjectCamera>().fov));
            }
            else
            {
                hideRangeSlider();
            }

            mainController.buttonCamFOVClicked(button.Toggled);
        }
Example #22
0
        public void Add(IMenuButton menuButton)
        {
            if (menuButton != null)
            {
                menuButtons.Add(menuButton);
                AddButton(menuButton.Title);

                var handler = PropertyChanged;
                if (handler != null)
                {
                    handler(this, new PropertyChangedEventArgs("ButtonCount"));
                }
            }
        }
Example #23
0
        //!
        //! Sets up all buttons for the main menu.
        //!
        private void setupMainMenu()
        {
            // views
            IMenuButton buttonPers = Elements.MenuButtonToggle();

            buttonPers.AddAction(GeneralMenu_Perspective_sel, GeneralMenu_Perspective_nrm, () => togglePerspectives());
            UI.OnUIChanged.AddListener(() => { buttonPers.Toggled = (secondaryMenu.currentLayout == layouts.PERSPECTIVES); });  // register for ui changes
            mainMenu.addButton(buttonPers);
            // info button
            //
            // modes
            IMenuButton buttonModes = Elements.MenuButtonList();

            buttonModes.AddAction(ModeMenu_EditMode_sel, ModeMenu_EditMode_nrm, () => changeMode(layouts.EDIT));
            buttonModes.AddAction(ModeMenu_AnimationMode_sel, ModeMenu_AnimationMode_nrm, () => changeMode(layouts.ANIMATION)); // anim
            buttonModes.AddAction(ModeMenu_ScoutMode_sel, ModeMenu_ScoutMode_nrm, () => changeMode(layouts.SCOUT));             //scout
            mainMenu.addButton(buttonModes);

            // gyro toggle
            IMenuButton buttonGyro = Elements.MenuButtonToggle();

            buttonGyro.AddAction(GeneralMenu_Gyro_sel, GeneralMenu_Gyro_nrm, () => mainController.toggleCameraRotation()); // for toggle
            buttonGyro.AddHoldAction(() => mainController.resetCameraOffset());
            mainMenu.addButton(buttonGyro);

            // config
            IMenuButton buttonConfig = Elements.MenuButtonToggle();

            buttonConfig.AddAction(GeneralMenu_Settings_sel, GeneralMenu_Settings_nrm, () => drawConfigWidget());
            buttonConfig.AddAction(GeneralMenu_Settings_sel, GeneralMenu_Settings_nrm, () => hideConfigWidget());       // untoggle action
            UI.OnUIChanged.AddListener(() => { buttonConfig.Toggled = (configWidget.gameObject.activeSelf == true); }); // register for ui changes
            mainMenu.addButton(buttonConfig);
            mainMenu.addButtonToLayout(buttonConfig, layouts.SPLASH);

            //help
            IMenuButton buttonHelp = Elements.MenuButton();

            buttonHelp.AddAction(GeneralMenu_Help_sel, GeneralMenu_Help_nrm, call: () => openHelp()); // switch off
            mainMenu.addButton(buttonHelp);
            mainMenu.addButtonToLayout(buttonHelp, layouts.SPLASH);
            // quit
            IMenuButton buttonQuit = Elements.MenuButton();

            buttonQuit.AddAction(GeneralMenu_OnOff_sel, GeneralMenu_OnOff_nrm, call: () => quitApplication());              // switch off
            mainMenu.addButton(buttonQuit);
            mainMenu.addButtonToLayout(buttonQuit, layouts.SPLASH);

            // set splash layout
            mainMenu.switchLayout(layouts.SPLASH);
        }
Example #24
0
        public void Add(IMenuButton menuItem)
        {
            if (menuItem != null)
            {
                _buttons.Add(menuItem);
            }

            var button = menuItem?.Pair as MenuButton ?? menuItem as MenuButton;

            if (button == null)
            {
                return;
            }
            button.ForegroundColor = ForegroundColor;
        }
Example #25
0
        public void Add(IMenuButton menuButton)
        {
            if (menuButton == null)
            {
                return;
            }

            menuButtons.Add(menuButton);

            var handler = PropertyChanged;

            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs("ButtonCount"));
            }
        }
Example #26
0
        public void Add(IMenuButton menuButton)
        {
            var button = WpfFactory.GetNativeObject <System.Windows.Controls.Button>(menuButton, "menuButton", false);

            if (button != null)
            {
                button.Click -= ClosePopup;
                button.Click += ClosePopup;

                button.Background = itemsControl.Background;
                button.Foreground = itemsControl.Foreground;

                var buttonBase = button as ButtonBase;
                if (buttonBase != null)
                {
                    buttonBase.HighlightColor = HighlightColor;
                }

                itemsControl.Items.Add(button);
            }

            if (itemsControl.Items.Count != 1)
            {
                SetImage(imagePath);
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(menuButton.ImagePath))
                {
                    SetImage(menuButton.ImagePath);
                }

                if (!HasImage)
                {
                    Content    = menuButton.Title;
                    FontFamily = new System.Windows.Media.FontFamily("Segoe UI");
                    FontSize   = 12;
                }
            }

            var handler = PropertyChanged;

            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs("ButtonCount"));
            }
        }
Example #27
0
        private void animationAddCueMenu(IMenuButton button)
        {
            GameObject obj = ((Button)button).gameObject;

            SubMenu subMenu = ((Button)button).gameObject.GetComponent <SubMenu>();

            if (subMenu == null)
            {
                subMenu             = ((Button)button).gameObject.AddComponent <SubMenu>();
                subMenu.DirToExpand = SubMenu.direction.RIGHT;

                GameObject buttonTextPrefab = Resources.Load <GameObject>("VPET/Prefabs/ButtonText");
                // add animation layer buttons
                for (int i = -1; i < 2; ++i)
                {
                    // add animation layer button
                    int layerIndex = i;
                    vpet.IMenuButton animLayerButton = vpet.Elements.MenuButton();
                    animLayerButton.AddAction(AnimationMode_CueFire_sel, AnimationMode_CueFire_nrm, () => animationLayerAddCurrentObject(subMenu, layerIndex));
                    subMenu.addButton(animLayerButton);

                    // add animation layer id on top (text object)
                    GameObject buttonTextObj = GameObject.Instantiate(buttonTextPrefab);
                    GameObject buttonObj     = ((Button)animLayerButton).gameObject;
                    buttonTextObj.transform.parent        = buttonObj.transform;
                    buttonTextObj.transform.localScale    = new Vector3(1, 1, 1);
                    buttonTextObj.transform.localPosition = new Vector3(0, 0, 0);
                    Text text = buttonTextObj.GetComponent <Text>();
                    if (text != null && i >= 0)
                    {
                        text.text = i.ToString();
                    }
                }
            }

            if (!subMenu.isOpen)
            {
                subMenu.show();
            }
            else
            {
                subMenu.hide();
            }
        }
Example #28
0
        public void drawParameterMenu(layouts layout)
        {
            // reset parmater menu and set first button toggled
            parameterMenu.ActiveButton = null;
            parameterMenu.reset();
            IMenuButton button = parameterMenu.GetButton(0);

            if (button != null)
            {
                button.Toggled = true;
            }


            parameterMenu.switchLayout(layout);
            float _adjustOddCount = (parameterMenu.ActiveButtonCount % 2) * UI.ButtonOffset / 2f;

            parameterMenu.offset = new Vector2(-VPETSettings.Instance.canvasHalfWidth + UI.ButtonOffset, parameterMenu.ActiveButtonCount * UI.ButtonOffset / 2f + _adjustOddCount);
            parameterMenu.show();
        }
Example #29
0
        //!
        //! Sets up all buttons for the main menu.
        //!
        private void setupMainMenu()
        {
            // views
            IMenuButton buttonPers = Elements.MenuButtonToggle();

            buttonPers.AddAction(GeneralMenu_Perspective_sel, GeneralMenu_Perspective_nrm, () => secondaryMenuSwitchLayout(layouts.PERSPECTIVES));
            OnSecondaryMenuVisibility.AddListener(((MenuButtonToggle)buttonPers).setToggleState);               // register changes
            mainMenu.addButton(buttonPers);
            // info button
            //
            // modes
            IMenuButton buttonModes = Elements.MenuButtonList();

            buttonModes.AddAction(ModeMenu_EditMode_sel, ModeMenu_EditMode_nrm, () => changeMode(layouts.EDIT));
            buttonModes.AddAction(ModeMenu_AnimationMode_sel, ModeMenu_AnimationMode_nrm, () => changeMode(layouts.ANIMATION)); // anim
            buttonModes.AddAction(ModeMenu_ScoutMode_sel, ModeMenu_ScoutMode_nrm, () => changeMode(layouts.SCOUT));             //scout
            mainMenu.addButton(buttonModes);
            // gyro toggle
            IMenuButton buttonGyro = Elements.MenuButtonToggle();

            buttonGyro.AddAction(GeneralMenu_Gyro_sel, GeneralMenu_Gyro_nrm, () => mainController.toggleCameraRotation());              // for toggle
            buttonGyro.AddAction(GeneralMenu_Gyro_sel, GeneralMenu_Gyro_nrm, () => mainController.toggleCameraRotation());              // for untogle
            buttonGyro.AddHoldAction(() => mainController.resetCameraOffset());
            mainMenu.addButton(buttonGyro);
            // config
            IMenuButton buttonConfig = Elements.MenuButtonToggle();

            buttonConfig.AddAction(GeneralMenu_Settings_sel, GeneralMenu_Settings_nrm, () => drawConfigWidget());
            buttonConfig.AddAction(GeneralMenu_Settings_sel, GeneralMenu_Settings_nrm, () => hideConfigWidget());        // untoggle action
            configWidget.OnVisibilityChanged.AddListener(((MenuButtonToggle)buttonConfig).setToggleState);               // register changes (connect to config widget visibility)
            mainMenu.addButton(buttonConfig);
            mainMenu.addButtonToLayout(buttonConfig, layouts.SPLASH);
            // quit
            IMenuButton buttonQuit = Elements.MenuButton();

            buttonQuit.AddAction(GeneralMenu_OnOff_sel, GeneralMenu_OnOff_nrm, call: () => quitApplication());              // switch off
            mainMenu.addButton(buttonQuit);
            mainMenu.addButtonToLayout(buttonQuit, layouts.SPLASH);

            // set splash layout
            mainMenu.switchLayout(layouts.SPLASH);
        }
Example #30
0
        private void animationFireCueMenu(IMenuButton button)
        {
            GameObject obj = ((Button)button).gameObject;

            SubMenu subMenu = ((Button)button).gameObject.GetComponent <SubMenu>();

            if (subMenu == null)
            {
                subMenu             = ((Button)button).gameObject.AddComponent <SubMenu>();
                subMenu.DirToExpand = SubMenu.direction.LEFT;
                subMenu.offset      = new Vector2(UI.ButtonOffset, UI.ButtonOffset);

                GameObject buttonTextPrefab = Resources.Load <GameObject>("VPET/Prefabs/ButtonText");
                // add animation layer buttons
                for (int i = 1; i < 4; ++i)
                {
                    int layerIndex = i - 1;
                    vpet.IMenuButton animLayerButton = vpet.Elements.MenuButton();
                    animLayerButton.AddAction(AnimationMode_CueFire_sel, AnimationMode_CueFire_nrm, () => mainController.AnimationController.playAnimationLayer(layerIndex));
                    subMenu.addButton(animLayerButton);
                    GameObject buttonTextObj = GameObject.Instantiate(buttonTextPrefab);
                    GameObject buttonObj     = ((Button)animLayerButton).gameObject;
                    buttonTextObj.transform.parent        = buttonObj.transform;
                    buttonTextObj.transform.localScale    = new Vector3(1, 1, 1);
                    buttonTextObj.transform.localPosition = new Vector3(0, 0, 0);
                    Text text = buttonTextObj.GetComponent <Text>();
                    if (text != null)
                    {
                        text.text = i.ToString();
                    }
                }
            }

            if (!subMenu.isOpen)
            {
                subMenu.show();
            }
            else
            {
                subMenu.hide();
            }
        }