/// <summary> /// Initializes a new instance of the <see cref="Common.UI.DockWidgets.DockingAreaScript"/> class. /// </summary> public DockingAreaScript() : base() { mInstances.Add(this); mOrientation = DockingAreaOrientation.None; mParent = null; mChildren = new List<DockingAreaScript>(); mSizes = new List<float>(); mDockingGroupScript = null; mCachedDragCorners = null; }
/// <summary> /// Insert dock widget into specified docking area. /// </summary> /// <param name="dockingArea">Docking area.</param> /// <param name="orientation">Orientation.</param> /// <param name="index">Index.</param> public void InsertToDockingArea(DockingAreaScript dockingArea, DockingAreaOrientation orientation = DockingAreaOrientation.Horizontal, int index = 0) { DebugEx.VerboseFormat("DockWidgetScript.InsertToDockingArea(dockingArea = {0}, orientation = {1}, index = {2})", dockingArea, orientation, index); dockingArea.InsertDockWidget(this, orientation, index); }
/// <summary> /// Initializes a new instance of the <see cref="Common.UI.DockWidgets.DockingAreaScript"/> class. /// </summary> public DockingAreaScript() : base() { DebugEx.Verbose("Created DockingAreaScript object"); sInstances.Add(this); mOrientation = DockingAreaOrientation.None; mParent = null; mChildren = new List<DockingAreaScript>(); mSizes = new List<float>(); mDockingGroupScript = null; mCachedDragCorners = null; mChildlessListeners = new UnityEvent(); }
/// <summary> /// Removes the docking area. /// </summary> /// <param name="dockingArea">Docking area.</param> public void RemoveDockingArea(DockingAreaScript dockingArea) { DebugEx.VerboseFormat("DockingAreaScript.RemoveDockingArea(dockingArea = {0})", dockingArea); if (dockingArea.parent == this) { int index = mChildren.IndexOf(dockingArea); if (index >= 0) { float size = mSizes[index]; mChildren.RemoveAt(index); mSizes.RemoveAt(index); if (size < 1f) { float sizeMultiplier = 1 / (1f - size); for (int i = 0; i < mSizes.Count; ++i) { mSizes[i] *= sizeMultiplier; } } else { if (mSizes.Count > 0) { float newSize = 1f / mSizes.Count; for (int i = 0; i < mSizes.Count; ++i) { mSizes[i] = newSize; } } } if (mChildren.Count == 1) { dockingArea = mChildren[0]; DockingAreaOrientation orientation = dockingArea.mOrientation; List<DockingAreaScript> children = dockingArea.mChildren; List<float> sizes = dockingArea.mSizes; DockingGroupScript dockingGroupScript = dockingArea.mDockingGroupScript; if (dockingGroupScript != null) { dockingGroupScript.parent = this; dockingGroupScript.transform.SetParent(transform, false); } else { foreach (DockingAreaScript child in children) { child.mParent = this; child.transform.SetParent(transform, false); } } dockingArea.Destroy(); mOrientation = orientation; mChildren = children; mSizes = sizes; mDockingGroupScript = dockingGroupScript; } OnResize(); } else { DebugEx.Error("Failed to remove docking area"); } } else { DebugEx.Error("Docking area belongs not to this docking area"); } }
/// <summary> /// Inserts the specified dock widget. /// </summary> /// <param name="dockWidget">Dock widget.</param> /// <param name="orientation">Orientation.</param> /// <param name="index">Index.</param> public void InsertDockWidget(DockWidgetScript dockWidget, DockingAreaOrientation orientation = DockingAreaOrientation.Horizontal, int index = 0) { DebugEx.VerboseFormat("DockingAreaScript.InsertDockWidget(dockWidget = {0}, orientation = {1}, index = {2})", dockWidget, orientation, index); //*************************************************************************** // DockingGroup GameObject //*************************************************************************** #region DockingGroup GameObject GameObject dockingGroup = new GameObject("DockingGroup"); //=========================================================================== // RectTransform Component //=========================================================================== #region RectTransform Component RectTransform dockingGroupTransform = dockingGroup.AddComponent<RectTransform>(); Utils.AlignRectTransformStretchStretch(dockingGroupTransform); #endregion //=========================================================================== // DockingGroupScript Component //=========================================================================== #region DockingGroupScript Component DockingGroupScript dockingGroupScript = dockingGroup.AddComponent<DockingGroupScript>(); dockingGroupScript.InsertDockWidget(dockWidget); #endregion #endregion if (mChildren.Count == 0 && mDockingGroupScript == null) { mSizes.Add(1f); Utils.InitUIObject(dockingGroup, transform); mDockingGroupScript = dockingGroupScript; mDockingGroupScript.parent = this; } else if (mChildren.Count == 0 && mDockingGroupScript != null) { mSizes[0] = 0.5f; mSizes.Add(0.5f); mOrientation = orientation; //*************************************************************************** // DockingArea GameObject //*************************************************************************** #region DockingArea GameObject GameObject dockingArea = new GameObject("DockingArea"); Utils.InitUIObject(dockingArea, transform); //=========================================================================== // RectTransform Component //=========================================================================== #region RectTransform Component dockingArea.AddComponent<RectTransform>(); #endregion //=========================================================================== // DockingAreaScript Component //=========================================================================== #region DockingAreaScript Component DockingAreaScript dockingAreaScript = dockingArea.AddComponent<DockingAreaScript>(); dockingAreaScript.mParent = this; mChildren.Add(dockingAreaScript); dockingAreaScript.mSizes.Add(1f); if (index == 0) { Utils.InitUIObject(dockingGroup, dockingArea.transform); dockingAreaScript.mDockingGroupScript = dockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; } else { Utils.InitUIObject(mDockingGroupScript.gameObject, dockingArea.transform); dockingAreaScript.mDockingGroupScript = mDockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; } #endregion #endregion //*************************************************************************** // DockingArea GameObject //*************************************************************************** #region DockingArea GameObject dockingArea = new GameObject("DockingArea"); Utils.InitUIObject(dockingArea, transform); //=========================================================================== // RectTransform Component //=========================================================================== #region RectTransform Component dockingArea.AddComponent<RectTransform>(); #endregion //=========================================================================== // DockingAreaScript Component //=========================================================================== #region DockingAreaScript Component dockingAreaScript = dockingArea.AddComponent<DockingAreaScript>(); dockingAreaScript.mParent = this; mChildren.Add(dockingAreaScript); dockingAreaScript.mSizes.Add(1f); if (index == 0) { Utils.InitUIObject(mDockingGroupScript.gameObject, dockingArea.transform); dockingAreaScript.mDockingGroupScript = mDockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; } else { Utils.InitUIObject(dockingGroup, dockingArea.transform); dockingAreaScript.mDockingGroupScript = dockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; } #endregion #endregion mDockingGroupScript = null; } else { if (orientation != DockingAreaOrientation.None) { if (mOrientation == orientation) { float newSize = 1f / (mSizes.Count + 1); float sizeMultiplier = 1f - newSize; for (int i = 0; i < mSizes.Count; ++i) { mSizes[i] *= sizeMultiplier; } mSizes.Insert(index, newSize); //*************************************************************************** // DockingArea GameObject //*************************************************************************** #region DockingArea GameObject GameObject dockingArea = new GameObject("DockingArea"); Utils.InitUIObject(dockingArea, transform); dockingArea.transform.SetSiblingIndex(index); //=========================================================================== // RectTransform Component //=========================================================================== #region RectTransform Component dockingArea.AddComponent<RectTransform>(); #endregion //=========================================================================== // DockingAreaScript Component //=========================================================================== #region DockingAreaScript Component DockingAreaScript dockingAreaScript = dockingArea.AddComponent<DockingAreaScript>(); dockingAreaScript.mParent = this; mChildren.Insert(index, dockingAreaScript); dockingAreaScript.mSizes.Add(1f); Utils.InitUIObject(dockingGroup, dockingArea.transform); dockingAreaScript.mDockingGroupScript = dockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; #endregion #endregion } else { List<DockingAreaScript> newChildren = new List<DockingAreaScript>(); List<float> newSizes = new List<float>(); newSizes.Add(0.5f); newSizes.Add(0.5f); //*************************************************************************** // DockingArea GameObject //*************************************************************************** #region DockingArea GameObject GameObject dockingArea = new GameObject("DockingArea"); Utils.InitUIObject(dockingArea, transform); //=========================================================================== // RectTransform Component //=========================================================================== #region RectTransform Component dockingArea.AddComponent<RectTransform>(); #endregion //=========================================================================== // DockingAreaScript Component //=========================================================================== #region DockingAreaScript Component DockingAreaScript dockingAreaScript = dockingArea.AddComponent<DockingAreaScript>(); dockingAreaScript.mParent = this; newChildren.Add(dockingAreaScript); if (index == 0) { Utils.InitUIObject(dockingGroup, dockingArea.transform); dockingAreaScript.mDockingGroupScript = dockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; dockingAreaScript.mSizes.Add(1f); } else { foreach (DockingAreaScript child in mChildren) { child.mParent = dockingAreaScript; child.transform.SetParent(dockingArea.transform, false); } dockingAreaScript.mOrientation = mOrientation; dockingAreaScript.mChildren = mChildren; dockingAreaScript.mSizes = mSizes; } #endregion #endregion //*************************************************************************** // DockingArea GameObject //*************************************************************************** #region DockingArea GameObject dockingArea = new GameObject("DockingArea"); Utils.InitUIObject(dockingArea, transform); //=========================================================================== // RectTransform Component //=========================================================================== #region RectTransform Component dockingArea.AddComponent<RectTransform>(); #endregion //=========================================================================== // DockingAreaScript Component //=========================================================================== #region DockingAreaScript Component dockingAreaScript = dockingArea.AddComponent<DockingAreaScript>(); dockingAreaScript.mParent = this; newChildren.Add(dockingAreaScript); if (index == 0) { foreach (DockingAreaScript child in mChildren) { child.mParent = dockingAreaScript; child.transform.SetParent(dockingArea.transform, false); } dockingAreaScript.mOrientation = mOrientation; dockingAreaScript.mChildren = mChildren; dockingAreaScript.mSizes = mSizes; } else { Utils.InitUIObject(dockingGroup, dockingArea.transform); dockingAreaScript.mDockingGroupScript = dockingGroupScript; dockingAreaScript.mDockingGroupScript.parent = dockingAreaScript; dockingAreaScript.mSizes.Add(1f); } #endregion #endregion mOrientation = orientation; mChildren = newChildren; mSizes = newSizes; } } else { DebugEx.ErrorFormat("Invalid orientation value: {0}", orientation); } } OnResize(); }
/// <summary> /// Removes the docking area. /// </summary> /// <param name="dockingArea">Docking area.</param> public void RemoveDockingArea(DockingAreaScript dockingArea) { if (dockingArea.parent == this) { int index = mChildren.IndexOf(dockingArea); if (index >= 0) { mChildren.RemoveAt(index); if (mChildren.Count == 1) { dockingArea = mChildren[0]; mOrientation = dockingArea.mOrientation; mChildren = dockingArea.mChildren; mSizes = dockingArea.mSizes; mDockingGroupScript = dockingArea.mDockingGroupScript; if (mDockingGroupScript != null) { mDockingGroupScript.parent = this; mDockingGroupScript.transform.SetParent(transform, false); } else { foreach (DockingAreaScript child in mChildren) { child.mParent = this; child.transform.SetParent(transform, false); } } UnityEngine.Object.DestroyObject(dockingArea.gameObject); } OnResize(); } else { Debug.LogError("Failed to remove docking area"); } } else { Debug.LogError("Docking area belongs not to this docking area"); } }
/// <summary> /// Insert dock widget into specified docking area. /// </summary> /// <param name="dockingArea">Docking area.</param> /// <param name="orientation">Orientation.</param> /// <param name="index">Index.</param> public void InsertToDockingArea(DockingAreaScript dockingArea, DockingAreaOrientation orientation = DockingAreaOrientation.Horizontal, int index = 0) { dockingArea.InsertDockWidget(this, orientation, index); }
/// <summary> /// Insert dock widget into specified docking area. /// </summary> /// <param name="dockingArea">Docking area.</param> /// <param name="orientation">Orientation.</param> /// <param name="index">Index.</param> public void InsertToDockingArea(DockingAreaScript dockingArea, DockingAreaOrientation orientation = DockingAreaOrientation.Horizontal, int index = 0) { DebugEx.VerboseFormat("DockWidgetScript.InsertToDockingArea(dockingArea = {0}, orientation = {1}, index = {2})", dockingArea, orientation, index); dockingArea.InsertDockWidget(this, orientation, index); }