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(); }
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); }
/// <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); }
public PaneGroup(Container parent, PaneManager paneManager) : base(parent) { AllowReorder = true; }
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); }
public PaneManager(Canvas canvas) { container = new Container(canvas) { Dock = Pos.Fill }; FocusedGroup = new LinkedList<PaneGroup>(); }