Display multiple PaneGroups side by side in an axis.
Inheritance: Flood.GUI.Controls.MultiSplitter
コード例 #1
0
ファイル: Container.cs プロジェクト: chartly/flood
        private static void MergeSubContainers(Container parentContainer)
        {
            var parentContainerSize = (parentContainer.IsHorizontal)? parentContainer.Width : parentContainer.Height;

            for (var parentPIndex = parentContainer.Panels.Count - 1; parentPIndex >= 0  ; parentPIndex--)
            {
                var childContainer = parentContainer.Panels[parentPIndex] as Container;
                if (childContainer == null ||
                    childContainer.IsHorizontal != parentContainer.IsHorizontal)
                    continue;

                for (var childPIndex = childContainer.Panels.Count - 1; childPIndex > 0  ; childPIndex--)
                {
                    var childPanel = childContainer.Panels[childPIndex];
                    parentContainer.InsertPanel(childPanel, childContainer, false);

                    var childPanelSize = (childContainer.IsHorizontal)? childPanel.Width : childPanel.Height;

                    var rightRPos = 1.0f;
                    if(parentContainer.Splitters.Count > parentPIndex + 1)
                        rightRPos = parentContainer.Splitters[parentPIndex + 1].RelativePosition;

                    var right = rightRPos * parentContainerSize;
                    var leftSplitter = parentContainer.Splitters[parentPIndex];
                    leftSplitter.RelativePosition = (right - childPanelSize) / parentContainerSize;
                }

                ReplaceContainerByPaneGroup(childContainer);
            }
            parentContainer.Invalidate();
        }
コード例 #2
0
ファイル: Container.cs プロジェクト: chartly/flood
        private static void ReplaceContainerByPaneGroup(Container childContainer)
        {
            var parentContainer = childContainer.Parent as Container;
            if (parentContainer == null)
                return;

            if (childContainer.Panels.Count != 1)
                return;

            parentContainer.ReplacePanel(childContainer,childContainer.Panels[0],true);
            MergeSubContainers(parentContainer);
        }
コード例 #3
0
ファイル: PaneGroup.cs プロジェクト: FloodProject/flood
        /// <summary>
        /// Move pane to a container relative to targetPaneGroup.
        /// </summary>
        /// <param name="pane">Pane to be moved</param>
        /// <param name="depth">Refer a parent container of targetPaneGroup, each
        /// depth is one parent container away. Depth 0 add a PaneContainer in the
        /// same container if the container is horizontal, if not adds the movedPane
        /// to a new child vertical container</param>
        /// <param name="moveRight"> True to move pane to the rigth of PaneGroup </param>
        internal void MovePaneHorizontally(TabButton pane, uint depth, bool moveRight)
        {
            var container = GetParentContainer(this);

            if (!container.IsHorizontal)
            {
                var childContainer = new Container(container) {IsHorizontal = true};
                container.ReplacePanel(this,childContainer,false);
                childContainer.InsertPanel(this);
                container = childContainer;
            }

            var paneGroup = new PaneGroup(container, paneManager);
            paneGroup.AddPage(pane);
            container.InsertPanel(paneGroup,this,!moveRight);
        }
コード例 #4
0
ファイル: PaneGroup.cs プロジェクト: FloodProject/flood
 public PaneGroup(Container parent, PaneManager paneManager)
     : base(parent)
 {
     AllowReorder = true;
 }
コード例 #5
0
ファイル: EditorWindow.cs プロジェクト: chartly/flood
        void InitializeGui()
        {
            GuiRenderer = new GwenRenderer();

            var textureName = "DefaultSkin.png";
            var defaultFont = new Flood.GUI.Font("Vera.ttf", 16);

            var resMan = FloodEngine.GetEngine().ResourceManager;
            var options = new ResourceLoadOptions {Name = textureName, AsynchronousLoad = false};
            var imageHandle = resMan.LoadResource<Image>(options);
            if (imageHandle.Id == 0)
                return;

            var skin = new TexturedSkin(GuiRenderer, imageHandle, defaultFont);
            Canvas = new Canvas(skin);

            var container = new Container(Canvas);
            var paneGroup = new PaneGroup(container);
            container.InsertPanel(paneGroup);
            paneGroup.AddPane(new Pane { Title = "PANE1" });
            paneGroup.AddPane(new Pane { Title = "PANE2" });

            Input = new GwenInput(FloodEngine.GetEngine().InputManager);
            Input.Initialize(Canvas);
        }
コード例 #6
0
ファイル: PaneManager.cs プロジェクト: FloodProject/flood
        public PaneManager(Canvas canvas)
        {
            container = new Container(canvas) { Dock = Pos.Fill };

            FocusedGroup = new LinkedList<PaneGroup>();
        }