Пример #1
0
 // Start is called before the first frame update
 void Start()
 {
     CM = GameObject.Find("ContextMenu").gameObject.GetComponent <ContextMenuScript>();
 }
        /// <summary>
        /// Insert the specified dock widget.
        /// </summary>
        /// <param name="dockWidget">Dock widget.</param>
        /// <param name="index">Index.</param>
        public void InsertDockWidget(DockWidgetScript dockWidget, int index = 0)
        {
            DebugEx.VerboseFormat("DockingGroupScript.InsertDockWidget(dockWidget = {0}, index = {1})", dockWidget, index);

            if (dockWidget.parent != null)
            {
                if (dockWidget.parent == this)
                {
                    if (index < mChildren.Count && mChildren[index] == dockWidget)
                    {
                        // Do nothing
                        return;
                    }

                    int foundIndex = mChildren.IndexOf(dockWidget);

                    if (foundIndex >= 0)
                    {
                        if (mSelectedIndex == foundIndex)
                        {
                            mSelectedIndex = index;
                        }
                        else
                        if (mSelectedIndex >= 0)
                        {
                            if (foundIndex < mSelectedIndex)
                            {
                                --mSelectedIndex;
                            }

                            if (index <= mSelectedIndex)
                            {
                                ++mSelectedIndex;
                            }
                        }

                        mChildren.RemoveAt(foundIndex);
                        mChildren.Insert(index, dockWidget);

                        mTabsTransform.GetChild(foundIndex).SetSiblingIndex(index);
                        dockWidget.transform.SetSiblingIndex(index);

                        UpdateTabsGeometry();
                    }
                    else
                    {
                        DebugEx.Error("Failed to insert dock widget");
                    }

                    return;
                }
                else
                {
                    dockWidget.parent.RemoveDockWidget(dockWidget);
                }
            }

            dockWidget.parent = this;
            mChildren.Insert(index, dockWidget);

            dockWidget.transform.SetParent(mContentTransform, false);
            dockWidget.transform.SetSiblingIndex(index);

            if (mSelectedIndex == -1)
            {
                mSelectedIndex = index;

                dockWidget.gameObject.SetActive(true);
            }
            else
            {
                if (index <= mSelectedIndex)
                {
                    ++mSelectedIndex;
                }

                dockWidget.gameObject.SetActive(false);
            }

            //===========================================================================
            // Tab GameObject
            //===========================================================================
            #region Tab GameObject
            GameObject tab = new GameObject("Tab");
            Utils.InitUIObject(tab, mTabsTransform);
            tab.transform.SetSiblingIndex(index);

            //===========================================================================
            // RectTransform Component
            //===========================================================================
            #region RectTransform Component
            tab.AddComponent <RectTransform>();
            #endregion

            //===========================================================================
            // CanvasRenderer Component
            //===========================================================================
            #region CanvasRenderer Component
            tab.AddComponent <CanvasRenderer>();
            #endregion

            //===========================================================================
            // Image Component
            //===========================================================================
            #region Image Component
            Image tabImage = tab.AddComponent <Image>();

            tabImage.type = Image.Type.Sliced;
            #endregion

            //===========================================================================
            // DockingTabButton Component
            //===========================================================================
            #region DockingTabButton Component
            DockingTabButton tabButton = tab.AddComponent <DockingTabButton>();

            tabButton.targetGraphic = tabImage;
            tabButton.dockWidget    = dockWidget;
            tabButton.active        = (mSelectedIndex == index) || (dockWidget == DummyDockWidgetScript.instance);
            #endregion

            //===========================================================================
            // ContextMenuScript Component
            //===========================================================================
            #region ContextMenuScript Component
            ContextMenuScript tabContextMenu = tab.AddComponent <ContextMenuScript>();

            tabContextMenu.sourceObject      = dockWidget;
            tabContextMenu.onShowContextMenu = OnShowContextMenu;
            #endregion

            //===========================================================================
            // Image GameObject
            //===========================================================================
            #region Image GameObject
            GameObject imageGameObject = new GameObject("Image");
            Utils.InitUIObject(imageGameObject, tab.transform);

            //===========================================================================
            // RectTransform Component
            //===========================================================================
            #region RectTransform Component
            RectTransform imageTransform = imageGameObject.AddComponent <RectTransform>();
            Utils.AlignRectTransformTopLeft(imageTransform, 12f, 12f, 9f, 3f);
            #endregion

            //===========================================================================
            // CanvasRenderer Component
            //===========================================================================
            #region CanvasRenderer Component
            imageGameObject.AddComponent <CanvasRenderer>();
            #endregion

            //===========================================================================
            // Image Component
            //===========================================================================
            #region Image Component
            Image image = imageGameObject.AddComponent <Image>();

            image.sprite = dockWidget.image;
            image.type   = Image.Type.Sliced;
            #endregion
            #endregion

            //===========================================================================
            // Text GameObject
            //===========================================================================
            #region Text GameObject
            GameObject textObject = new GameObject("Text");
            Utils.InitUIObject(textObject, tab.transform);

            //===========================================================================
            // RectTransform Component
            //===========================================================================
            #region RectTransform Component
            RectTransform textTransform = textObject.AddComponent <RectTransform>();
            Utils.AlignRectTransformStretchStretch(textTransform, 25f, 0f, 6f, 0f);
            #endregion

            //===========================================================================
            // Text Component
            //===========================================================================
            #region Text Component
            Text text = textObject.AddComponent <Text>();

            Assets.Common.DockWidgets.TextStyles.title.Apply(text);
            text.text = dockWidget.title;
            #endregion
            #endregion
            #endregion

            UpdateTabsGeometry();
        }