internal int getChildWidth(DockingContainer child) { if (this.getContainerType() == ContainerType.TabContents) { return(this._tabContainer.Width); } else if (this.getContainerType() == ContainerType.SplitContents) { if (child == _sContainer.Panel1.Controls[0]) { return(_sContainer.SplitterDistance); } else { if (_sContainer.Orientation == Orientation.Vertical) { return(_sContainer.Width - _sContainer.SplitterDistance); } else { return(_sContainer.Height - _sContainer.SplitterDistance); } } } else { //this is not possible return(this.Width); } }
public override void addChild(DockingContainer child, DockStyle dock, bool isRemainSize = true) { if (_id == _initContentId) { this.Controls.Remove(_initObj); Content = child; this.Controls.Add(child); child.Dock = DockStyle.Fill; //this.Name = child.Name; //this._id = child._id; //showTitleBar(true); this.setContainerType(ContainerType.SingleContent); /* * this.Controls.Remove(_initObj); * Content = child.Content; * this.Controls.Add(child.Content); * this.Name = child.Name; * this._id = child._id; * showTitleBar(true); * setType( = ContainerType.SingleContent; */ } else { base.addChild(child, dock, isRemainSize); } }
public DockingContainer(DockingRoot root, DockingContainer parent, String name, Control contents, int id, DockStyle initDock) : base() { if (root != null) { _root = root; } else { _root = this as DockingRoot; } _initDock = initDock; _parent = parent; Content = contents; this.Name = name; _draggingPopup = new DraggingPopup(_root, null); //평소에는 숨어있다가 Drag할 때에만 나타난다. _titleBar = new TitleBar(this, _draggingPopup, _root); InitializeComponent(); this.Width = Content.Width; this.Height = Content.Height; this.Location = new Point(0, 0); this._tabContainer.SetBounds(0, 0, this.Width, this.Height); this._tabContainer.Alignment = TabAlignment.Bottom; this._tabContainer.SelectedIndexChanged += new EventHandler(_tabContainer_SelectedIndexChanged); this._sContainer.SetBounds(0, 0, this.Width, this.Height); _id = id; this.DoubleBuffered = true; // _draggingPopup.MdiParent = _root.getMdiForm(); //if(Content!=null) Content.Resize += new EventHandler(_contents_Resize); this.SuspendLayout(); titleBarInitSetting(); Content.Location = new Point(0, _titleBar.Height); contents.Dock = DockStyle.Fill; this.Controls.Add(contents); this.ResumeLayout(); showTitleBar(true, name); this.Dock = DockStyle.Fill; if (_root != this) { _root.Connect(this.Name, this); } _tabContainer.TabIndexChanged += new EventHandler(_tabContainer_TabIndexChanged); }
void DockItOn(DockingContainer popup) { DockingContainer dockParent = _selectedDockingContainer; IconCenter.ButtonPosition pos = _posToDock; if (pos == IconCenter.ButtonPosition.NotOnTheButton) { return; } switch (pos) { case IconCenter.ButtonPosition.B_BottomHalf: dockParent.addChild(popup, DockStyle.Bottom); break; case IconCenter.ButtonPosition.B_BottomRemain: dockParent.addChild(popup, DockStyle.Bottom, true); break; case IconCenter.ButtonPosition.B_Center: dockParent.addChild(popup, DockStyle.Fill); break; case IconCenter.ButtonPosition.B_LeftHalf: dockParent.addChild(popup, DockStyle.Left); break; case IconCenter.ButtonPosition.B_LeftRemain: dockParent.addChild(popup, DockStyle.Left, true); break; case IconCenter.ButtonPosition.B_RightHalf: dockParent.addChild(popup, DockStyle.Right); break; case IconCenter.ButtonPosition.B_RightRemain: dockParent.addChild(popup, DockStyle.Right, true); break; case IconCenter.ButtonPosition.B_TopHalf: dockParent.addChild(popup, DockStyle.Top); break; case IconCenter.ButtonPosition.B_TopRemain: dockParent.addChild(popup, DockStyle.Top, true); break; } this.Connect(popup.Name, popup); popup.setNowInPopup(false); popup.hidePopup(); this.Refresh(); }
internal void DragEnd(DockingContainer movingObj, int x, int y) { _iconCenter.Hide(); _selection.Hide(); foreach (Control c in _iconSide) { c.Hide(); } DockItOn(movingObj); }
void addToTab(Sides side, DockingContainer child) { if (child.getContainerType() == ContainerType.SingleContent) { addAChildWithSingleContentToTabContainer(_tabSide[(int)side], child); } else //tabContents { addAChildWithTabContentToTabContainer(_tabSide[(int)side], child); } }
internal DraggingPopup(DockingRoot root, DockingContainer parent, int no = -1, String name = "DockingForm") : base((no < 0) ? ++(DraggingPopup.windowId) : no, name) { InitializeComponent(); _root = root; if (_parent != null) { _parent = parent; } _draggingEvent = new MouseEventHandler(DraggingPopup_MouseMove); }
internal void addAChildWithSingleContentToTabContainer(TabControl container, DockingContainer child) { container.TabPages.Add(child.Name, child.Name); child.SetBounds(0, 0, container.Width, container.Height - TITLE_BAR_HEIGHT); container.TabPages[child.Name].Controls.Add(child.Content); container.TabPages[child.Name].Tag = child._id; container.TabPages[child.Name].Width = container.Width; container.TabPages[child.Name].Height = container.Height - 20; _childId.Add(child.Name, child._id); _root.Disconnect(child.Name); }
void addChildOnCenter(DockingContainer child) { child.SetBounds(0, 0, this.Width, this.Height); if (this.getContainerType() == ContainerType.SingleContent) //(Content is TabControl) == false) { _tabContainer.TabPages.Add(this.Name, this.Name); //insert current content to tab this.Content.Dock = DockStyle.Fill; this.Content.SetBounds(0, 0, this.Width, this.Height); _tabContainer.TabPages[this.Name].Controls.Add(this.Content); _tabContainer.TabPages[this.Name].Tag = this._id; _childId.Add(this.Name, this._id); //_childId.Add(child.Name, child._id); if (child.getContainerType() == ContainerType.SingleContent) { addAChildWithSingleContentToTabContainer(_tabContainer, child); } else //else TabContents { addAChildWithTabContentToTabContainer(_tabContainer, child); } //this.Controls.Remove(Content); _tabContainer.Height = this.Height - TITLE_BAR_HEIGHT; _tabContainer.Width = this.Width; _tabContainer.Dock = DockStyle.Fill; Content = _tabContainer; this.Controls.Add(_tabContainer); showTitleBar(true, _tabContainer.TabPages[0].Name); } else //else TabContents { if (child.getContainerType() == ContainerType.SingleContent) { addAChildWithSingleContentToTabContainer(_tabContainer, child); } else //else TabContents { addAChildWithTabContentToTabContainer(_tabContainer, child); } } //_root.Disconnect(child.Name); this.setContainerType(ContainerType.TabContents); //this.Name = child.Name; //가장 최근에 선택된 tab의 이름을 가져온다. //this._id = _childId[child.Name]; showTitleBar(true, child.Name); _tabContainer.SelectTab(child.Name); }
public virtual void addChild(DockingContainer child, DockStyle dock, Boolean isRemainSize = true) { child.setParent(this); if (dock == DockStyle.Fill) { addChildOnCenter(child); } else { addChildOnSide(dock, child, isRemainSize); } }
internal void addAChildWithTabContentToTabContainer(TabControl container, DockingContainer child) { String name = ""; foreach (TabPage c in child.TabContainer.TabPages) { container.TabPages.Add(c); _childId.Add(c.Name, Int32.Parse(c.Tag.ToString())); c.Width = container.Width; c.Height = container.Height - 20; name = c.Name; } _root.Disconnect(child.Name); }
public Boolean setContent(DockingContainer c = null) { if (_parent == c) { return(false); } //this.SuspendLayout(); this.Padding = new Padding(5); if (c != null) { _parent = c; } this.Controls.Add(_parent); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //this.ResumeLayout(); return(true); }
internal TitleBar(DockingContainer parent, DraggingPopup popup, DockingRoot root) : base() { InitializeComponent(); _parent = parent; _popup = popup; _root = root; _mouseDown = new MouseEventHandler(TitleBar_MouseDown); _mouseUp = new MouseEventHandler(TitleBar_MouseUp); _mouseMove = new MouseEventHandler(TitleBar_MouseMove); this.Text = parent.Name; B_X.Click += new EventHandler(B_X_Click); B_Pin.Click += new EventHandler(B_Pin_Click); B_DownArrow.Click += new EventHandler(B_DownArrow_Click); this.MouseDown += _mouseDown; //this.MouseMove += _mouseMove; }
internal void reSizeSplitDistanceForChild(DockingContainer child, int size) //child 에서 크기조정을 요청할 때 호출된다. { if (_sContainer.Panel1.Controls[0] == child) { _sContainer.SplitterDistance = size; } else { if (_sContainer.Orientation == Orientation.Horizontal) { _sContainer.SplitterDistance = this.Width - size; } else { _sContainer.SplitterDistance = this.Height - size; } } }
internal void addToTab(DockingContainer child, DockStyle dock) { switch (dock) { case DockStyle.Left: addToTab(Sides.Left, child); break; case DockStyle.Right: addToTab(Sides.Right, child); break; case DockStyle.Top: addToTab(Sides.Top, child); break; case DockStyle.Bottom: addToTab(Sides.Bottom, child); break; } }
internal void Dragging(DockingContainer movingObj, int x, int y) { int maxDepth = 0; int depth; DockingContainer selectedSuccessor = null; this.Invalidate(); foreach (DockingContainer d in _successors.Values) { //for (int i = 0; i < _successors.Count; i++) //{ if (CoodinateHandling.isEntered(d, 0, 0) && d.isInPopup() == false) { if ((depth = d.getDepth()) > maxDepth) { maxDepth = depth; selectedSuccessor = d; } } } if (maxDepth > 0) { Rectangle rect = CoodinateHandling.FromClientToClient(selectedSuccessor, this); Point center = CoodinateHandling.getCenter(rect, _iconCenter.Width, _iconCenter.Height); ShowSelection(checkIfOverCenterBtns(), selectedSuccessor, movingObj); _iconCenter.SetBounds(center.X, center.Y, 0, 0, BoundsSpecified.Location); _iconCenter.Show(); _iconCenter.BringToFront(); _iconCenter.label1.Text = "" + selectedSuccessor.getDepth() + "/" + selectedSuccessor.Name + "/" + selectedSuccessor.getContainerType().ToString(); } else { _selection.Hide(); } }
protected virtual void PopChildFromThis(DockingContainer child) { //this.SuspendLayout(); if (this.getContainerType() == ContainerType.SplitContents) { DockingContainer rest; if (_sContainer.Panel1.Controls.Count == 0 || (_sContainer.Panel1.Controls[0] as DockingContainer) == child) { rest = _sContainer.Panel2.Controls[0] as DockingContainer; _sContainer.Panel1.Controls.Clear(); } else { rest = _sContainer.Panel1.Controls[0] as DockingContainer; _sContainer.Panel2.Controls.Clear(); } this.Controls.Remove(_sContainer); //_sContainer.Dispose(); if (rest.getContainerType() == ContainerType.SingleContent) { Content = rest.Content; //rest.Content = null; Content.Dock = DockStyle.Fill; this.Controls.Add(Content); this._id = rest._id; _children.Clear(); _childId.Clear(); this.Name = rest.Name; showTitleBar(true, rest.Name); _root.Disconnect(rest.Name); //기존의 rest는 사라질 것이므로 연결을 끊고 _root.Connect(rest.Name, this); //rest의 모든 내용을 계승한 this를 대신 연결한다. this.setContainerType(ContainerType.SingleContent); } else if (rest.getContainerType() == ContainerType.TabContents) { //_tabContainer.Dispose(); _tabContainer = rest._tabContainer; _tabContainer.SetBounds(0, 0, this.Width, this.Height - TITLE_BAR_HEIGHT); _tabContainer.Dock = DockStyle.Bottom; //rest._tabContainer = null; _children = rest._children; //rest._children = null; _childId = rest._childId; //rest._childId = null; Content = _tabContainer; this.Controls.Add(_tabContainer); this.Name = rest.Name; showTitleBar(true, rest.Name); _root.Disconnect(rest.Name); //기존의 rest는 사라질 것이므로 연결을 끊고 _root.Connect(rest.Name, this); //rest의 모든 내용을 계승한 this를 대신 연결한다. setContainerType(ContainerType.TabContents); } else //splitContainer - splitContainer는 _root와 연결되어 있지 않으므로 connection을 끊을 필요가 없다. { _sContainer = rest._sContainer; _sContainer.Width = this.Width; _sContainer.Height = this.Height; _sContainer.Dock = DockStyle.Fill; //rest._sContainer = null; _children = rest._children; //rest._children = null; _childId = rest._childId; //rest._childId = null; Content = _sContainer; this.Controls.Add(rest._sContainer); //showTitleBar(true, rest.Name); setContainerType(ContainerType.SplitContents); } } else // ContainerType 이 SingleType일 때이다. { this.Controls.Remove(child); this.Content = null; if (OnBlankContent != null) { OnBlankContent(); } setContainerType(ContainerType.SingleContent); } // this.ResumeLayout(); //child.Dispose(true); }
void addChildOnSide(DockStyle newChildDock, DockingContainer newChild, Boolean isRemainSize) { showTitleBar(false, ""); _root.Disconnect(this.Name); //새로운 것을 만들고 자기 자신은 루트와의 연결을 끊는다. // SplitContainer가 되면 titleBar가 사라진다. DockingContainer oldChild = new DockingContainer(_root, this, this.Name, Content, _id, _initDock); oldChild._type = this._type; oldChild._childId = this._childId; _id = -1; //컨테이너만 가지고 있을 것이므로 선택된 id가 없다. _titleBar.Text = ""; this._childId = new Dictionary <String, int>(); //연결을 끊고 새로운 id List를 만든다. _tabContainer = new TabControl(); //연결을 끊고 새로운 TabContainer를 만든다. //orientation을 선택한다. int newSize, oldSize, parentSize; if (newChildDock == DockStyle.Left || newChildDock == DockStyle.Right) { newSize = newChild.Width; oldSize = this.Width; if (_parent == null) { parentSize = this.Width; //parent가 null인 경우는 root일 경우. } else { parentSize = _parent.Width; } _sContainer.Orientation = Orientation.Vertical; } else { newSize = newChild.Height; oldSize = this.Height; if (_parent == null) { parentSize = this.Height; } else { parentSize = _parent.Height; } _sContainer.Orientation = Orientation.Horizontal; } this.SuspendLayout(); if (newChildDock == DockStyle.Left || newChildDock == DockStyle.Top) { _sContainer.Panel1.Controls.Add(newChild); _sContainer.Panel2.Controls.Add(oldChild); this._children.Add(newChild); this._children.Add(oldChild); this._sContainer.SplitterDistance = newSize; } else { _sContainer.Panel1.Controls.Add(oldChild); _sContainer.Panel2.Controls.Add(newChild); this._children.Add(oldChild); this._children.Add(newChild); this._sContainer.SplitterDistance = oldSize; } //크기 조정을 한다. if (isRemainSize) { if (parentSize < newSize + oldSize) { newSize = oldSize = oldSize / 2; //부모에게 크기 조정 요청할 필요 없음. } else { if (_root != this) { _parent.reSizeSplitDistanceForChild(this, newSize + oldSize); } else { throw new Exception("예상치 못한 상황. 루트이면서 부모의 크기보다 작다?"); //이런 상황 없음 } } } else { newSize = oldSize = oldSize / 2; //부모에게 크기 조정 요청할 필요 없음. } if (newChildDock == DockStyle.Left || newChildDock == DockStyle.Top) { this._sContainer.SplitterDistance = newSize; } else { this._sContainer.SplitterDistance = oldSize; } this.Controls.Remove(Content); Content = _sContainer; this.Controls.Add(_sContainer); this.setContainerType(ContainerType.SplitContents); this.Name = ""; this.ResumeLayout(); }
void checkInHotArea(DockingContainer movingObj, int x, int y) { }
internal void setParent(DockingContainer parent) { _parent = parent; }
void ShowSelection(IconCenter.ButtonPosition pos, DockingContainer dockParent, DockingContainer popup) { if (pos == IconCenter.ButtonPosition.NotOnTheButton) { _selection.Hide(); return; } _selectedDockingContainer = dockParent; _posToDock = pos; Size popupSize = popup.ClientSize; Rectangle dockScreen = CoodinateHandling.GetScreenRect(dockParent); Size parentSize = dockParent.Parent.ClientSize; Rectangle selectionRect = new Rectangle(dockScreen.Location, dockScreen.Size); switch (pos) { case IconCenter.ButtonPosition.B_BottomHalf: selectionRect.Y += selectionRect.Height = dockScreen.Height / 2; break; case IconCenter.ButtonPosition.B_BottomRemain: if (dockScreen.Height + popupSize.Height > parentSize.Height) { selectionRect.Y += selectionRect.Height = dockScreen.Height / 2; } else { selectionRect.Height = popupSize.Height; selectionRect.Y += dockScreen.Height - popupSize.Height; } break; case IconCenter.ButtonPosition.B_Center: //그대로 break; case IconCenter.ButtonPosition.B_LeftHalf: selectionRect.Width /= 2; break; case IconCenter.ButtonPosition.B_LeftRemain: if (dockScreen.Width + popupSize.Width > parentSize.Width) { selectionRect.Width /= 2; } else { selectionRect.Width = popupSize.Width; } break; case IconCenter.ButtonPosition.B_RightHalf: selectionRect.X += selectionRect.Width = selectionRect.Width / 2; break; case IconCenter.ButtonPosition.B_RightRemain: if (dockScreen.Width + popupSize.Width > parentSize.Width) { selectionRect.Width /= 2; } else { selectionRect.Width = popupSize.Width; } selectionRect.X += dockScreen.Width - selectionRect.Width; break; case IconCenter.ButtonPosition.B_TopHalf: selectionRect.Height /= 2; break; case IconCenter.ButtonPosition.B_TopRemain: if (dockScreen.Height + popupSize.Height > parentSize.Height) { selectionRect.Height = selectionRect.Height /= 2; } else { selectionRect.Height = popupSize.Height; } break; case IconCenter.ButtonPosition.NotOnTheButton: _selection.Hide(); break; } _selection.SetBounds(selectionRect.X, selectionRect.Y, selectionRect.Width, selectionRect.Height); _selection.Show(); _selection.BringToFront(); this.Refresh(); }
internal void DragBegin(DockingContainer movingObj, int x, int y) { showSideIcon(); }
protected override void PopChildFromThis(DockingContainer child) { base.PopChildFromThis(child); }
internal void Connect(String name, DockingContainer aSuccessor) { _successors.Add(name, aSuccessor); }