コード例 #1
0
ファイル: FloatWindow.cs プロジェクト: GodLesZ/svn-dump
		private void InternalConstruct(DockPanel dockPanel, DockPane pane, bool boundsSpecified, Rectangle bounds) {
			if (dockPanel == null)
				throw (new ArgumentNullException(Strings.FloatWindow_Constructor_NullDockPanel));

			m_nestedPanes = new NestedPaneCollection(this);

			FormBorderStyle = FormBorderStyle.SizableToolWindow;
			ShowInTaskbar = false;
			if (dockPanel.RightToLeft != RightToLeft)
				RightToLeft = dockPanel.RightToLeft;
			if (RightToLeftLayout != dockPanel.RightToLeftLayout)
				RightToLeftLayout = dockPanel.RightToLeftLayout;

			SuspendLayout();
			if (boundsSpecified) {
				Bounds = bounds;
				StartPosition = FormStartPosition.Manual;
			} else {
				StartPosition = FormStartPosition.WindowsDefaultLocation;
				Size = dockPanel.DefaultFloatWindowSize;
			}

			m_dockPanel = dockPanel;
			Owner = DockPanel.FindForm();
			DockPanel.AddFloatWindow(this);
			if (pane != null)
				pane.FloatWindow = this;

			ResumeLayout();
		}
コード例 #2
0
ファイル: DockWindow.cs プロジェクト: GodLesZ/svn-dump
		internal DockWindow(DockPanel dockPanel, DockState dockState) {
			m_nestedPanes = new NestedPaneCollection(this);
			m_dockPanel = dockPanel;
			m_dockState = dockState;
			Visible = false;

			SuspendLayout();

			if (DockState == DockState.DockLeft || DockState == DockState.DockRight ||
				DockState == DockState.DockTop || DockState == DockState.DockBottom) {
				m_splitter = new SplitterControl();
				Controls.Add(m_splitter);
			}

			if (DockState == DockState.DockLeft) {
				Dock = DockStyle.Left;
				m_splitter.Dock = DockStyle.Right;
			} else if (DockState == DockState.DockRight) {
				Dock = DockStyle.Right;
				m_splitter.Dock = DockStyle.Left;
			} else if (DockState == DockState.DockTop) {
				Dock = DockStyle.Top;
				m_splitter.Dock = DockStyle.Bottom;
			} else if (DockState == DockState.DockBottom) {
				Dock = DockStyle.Bottom;
				m_splitter.Dock = DockStyle.Top;
			} else if (DockState == DockState.Document) {
				Dock = DockStyle.Fill;
			}

			ResumeLayout();
		}
コード例 #3
0
ファイル: DockHelper.cs プロジェクト: GodLesZ/svn-dump
		public static FloatWindow FloatWindowAtPoint(Point pt, DockPanel dockPanel) {
			for (Control control = Win32Helper.ControlAtPoint(pt); control != null; control = control.Parent) {
				FloatWindow floatWindow = control as FloatWindow;
				if (floatWindow != null && floatWindow.DockPanel == dockPanel)
					return floatWindow;
			}

			return null;
		}
コード例 #4
0
			public AutoHideWindowControl(DockPanel dockPanel) {
				m_dockPanel = dockPanel;

				m_timerMouseTrack = new Timer();
				m_timerMouseTrack.Tick += new EventHandler(TimerMouseTrack_Tick);

				Visible = false;
				m_splitter = new SplitterControl(this);
				Controls.Add(m_splitter);
			}
コード例 #5
0
ファイル: DockHelper.cs プロジェクト: GodLesZ/svn-dump
		public static DockPane PaneAtPoint(Point pt, DockPanel dockPanel) {
			for (Control control = Win32Helper.ControlAtPoint(pt); control != null; control = control.Parent) {
				IDockContent content = control as IDockContent;
				if (content != null && content.DockHandler.DockPanel == dockPanel)
					return content.DockHandler.Pane;

				DockPane pane = control as DockPane;
				if (pane != null && pane.DockPanel == dockPanel)
					return pane;
			}

			return null;
		}
コード例 #6
0
		public void DockTo(DockPanel panel, DockStyle dockStyle) {
			if (panel != DockPanel)
				throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel");

			DockPane pane;

			if (dockStyle == DockStyle.Top)
				pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockTop, true);
			else if (dockStyle == DockStyle.Bottom)
				pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockBottom, true);
			else if (dockStyle == DockStyle.Left)
				pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockLeft, true);
			else if (dockStyle == DockStyle.Right)
				pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.DockRight, true);
			else if (dockStyle == DockStyle.Fill)
				pane = DockPanel.DockPaneFactory.CreateDockPane(Content, DockState.Document, true);
			else
				return;
		}
コード例 #7
0
			public SplitterDragHandler(DockPanel dockPanel)
				: base(dockPanel) {
			}
コード例 #8
0
			private static DockWindowStruct[] LoadDockWindows(XmlTextReader xmlIn, DockPanel dockPanel) {
				EnumConverter dockStateConverter = new EnumConverter(typeof(DockState));
				EnumConverter dockAlignmentConverter = new EnumConverter(typeof(DockAlignment));
				int countOfDockWindows = dockPanel.DockWindows.Count;
				DockWindowStruct[] dockWindows = new DockWindowStruct[countOfDockWindows];
				MoveToNextElement(xmlIn);
				for (int i = 0; i < countOfDockWindows; i++) {
					int id = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture);
					if (xmlIn.Name != "DockWindow" || id != i)
						throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);

					dockWindows[i].DockState = (DockState)dockStateConverter.ConvertFrom(xmlIn.GetAttribute("DockState"));
					dockWindows[i].ZOrderIndex = Convert.ToInt32(xmlIn.GetAttribute("ZOrderIndex"), CultureInfo.InvariantCulture);
					MoveToNextElement(xmlIn);
					if (xmlIn.Name != "DockList" && xmlIn.Name != "NestedPanes")
						throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
					int countOfNestedPanes = Convert.ToInt32(xmlIn.GetAttribute("Count"), CultureInfo.InvariantCulture);
					dockWindows[i].NestedPanes = new NestedPane[countOfNestedPanes];
					MoveToNextElement(xmlIn);
					for (int j = 0; j < countOfNestedPanes; j++) {
						int id2 = Convert.ToInt32(xmlIn.GetAttribute("ID"), CultureInfo.InvariantCulture);
						if (xmlIn.Name != "Pane" || id2 != j)
							throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
						dockWindows[i].NestedPanes[j].IndexPane = Convert.ToInt32(xmlIn.GetAttribute("RefID"), CultureInfo.InvariantCulture);
						dockWindows[i].NestedPanes[j].IndexPrevPane = Convert.ToInt32(xmlIn.GetAttribute("PrevPane"), CultureInfo.InvariantCulture);
						dockWindows[i].NestedPanes[j].Alignment = (DockAlignment)dockAlignmentConverter.ConvertFrom(xmlIn.GetAttribute("Alignment"));
						dockWindows[i].NestedPanes[j].Proportion = Convert.ToDouble(xmlIn.GetAttribute("Proportion"), CultureInfo.InvariantCulture);
						MoveToNextElement(xmlIn);
					}
				}

				return dockWindows;
			}
コード例 #9
0
			public static void LoadFromXml(DockPanel dockPanel, string fileName, DeserializeDockContent deserializeContent) {
				FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
				try {
					LoadFromXml(dockPanel, fs, deserializeContent);
				} finally {
					fs.Close();
				}
			}
コード例 #10
0
			public static void SaveAsXml(DockPanel dockPanel, Stream stream, Encoding encoding) {
				SaveAsXml(dockPanel, stream, encoding, false);
			}
コード例 #11
0
ファイル: DockPanelExtender.cs プロジェクト: GodLesZ/svn-dump
			public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane) {
				return new FloatWindow(dockPanel, pane);
			}
コード例 #12
0
		public VS2005AutoHideStrip(DockPanel panel)
			: base(panel) {
			SetStyle(ControlStyles.ResizeRedraw |
				ControlStyles.UserPaint |
				ControlStyles.AllPaintingInWmPaint |
				ControlStyles.OptimizedDoubleBuffer, true);
			BackColor = SystemColors.ControlLight;
		}
コード例 #13
0
ファイル: DockPane.cs プロジェクト: GodLesZ/svn-dump
		public void DockTo(DockPanel panel, DockStyle dockStyle) {
			if (panel != DockPanel)
				throw new ArgumentException(Strings.IDockDragSource_DockTo_InvalidPanel, "panel");

			if (dockStyle == DockStyle.Top)
				DockState = DockState.DockTop;
			else if (dockStyle == DockStyle.Bottom)
				DockState = DockState.DockBottom;
			else if (dockStyle == DockStyle.Left)
				DockState = DockState.DockLeft;
			else if (dockStyle == DockStyle.Right)
				DockState = DockState.DockRight;
			else if (dockStyle == DockStyle.Fill)
				DockState = DockState.Document;
		}
コード例 #14
0
ファイル: DockPanelExtender.cs プロジェクト: GodLesZ/svn-dump
		internal DockPanelExtender(DockPanel dockPanel) {
			m_dockPanel = dockPanel;
		}
コード例 #15
0
ファイル: DockPanelExtender.cs プロジェクト: GodLesZ/svn-dump
			public AutoHideStripBase CreateAutoHideStrip(DockPanel panel) {
				return new VS2005AutoHideStrip(panel);
			}
コード例 #16
0
ファイル: DockPanelExtender.cs プロジェクト: GodLesZ/svn-dump
			public FloatWindow CreateFloatWindow(DockPanel dockPanel, DockPane pane, Rectangle bounds) {
				return new FloatWindow(dockPanel, pane, bounds);
			}
コード例 #17
0
ファイル: DockOutlineBase.cs プロジェクト: GodLesZ/svn-dump
		public void Show(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) {
			SaveOldValues();
			SetValues(Rectangle.Empty, dockPanel, dock, fullPanelEdge ? -1 : 0);
			TestChange();
		}
コード例 #18
0
			public static void SaveAsXml(DockPanel dockPanel, string fileName) {
				SaveAsXml(dockPanel, fileName, Encoding.Unicode);
			}
コード例 #19
0
ファイル: DockContent.cs プロジェクト: GodLesZ/svn-dump
		public void Show(DockPanel dockPanel) {
			DockHandler.Show(dockPanel);
		}
コード例 #20
0
        internal void SetDockState(bool isHidden, DockState visibleState, DockPane oldPane)
        {
            if (IsSuspendSetDockState)
            {
                return;
            }

            if (DockPanel == null && visibleState != DockState.Unknown)
            {
                throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_NullPanel);
            }

            if (visibleState == DockState.Hidden || (visibleState != DockState.Unknown && !IsDockStateValid(visibleState)))
            {
                throw new InvalidOperationException(Strings.DockContentHandler_SetDockState_InvalidState);
            }

            DockPanel dockPanel = DockPanel;

            if (dockPanel != null)
            {
                dockPanel.SuspendLayout(true);
            }

            SuspendSetDockState();

            DockState oldDockState = DockState;

            if (m_isHidden != isHidden || oldDockState == DockState.Unknown)
            {
                m_isHidden = isHidden;
            }
            m_visibleState = visibleState;
            m_dockState    = isHidden ? DockState.Hidden : visibleState;

            if (visibleState == DockState.Unknown)
            {
                Pane = null;
            }
            else
            {
                m_isFloat = (m_visibleState == DockState.Float);

                if (Pane == null)
                {
                    Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, visibleState, true);
                }
                else if (Pane.DockState != visibleState)
                {
                    if (Pane.Contents.Count == 1)
                    {
                        Pane.SetDockState(visibleState);
                    }
                    else
                    {
                        Pane = DockPanel.DockPaneFactory.CreateDockPane(Content, visibleState, true);
                    }
                }
            }

            if (Form.ContainsFocus)
            {
                if (DockState == DockState.Hidden || DockState == DockState.Unknown)
                {
                    DockPanel.ContentFocusManager.GiveUpFocus(Content);
                }
            }

            SetPaneAndVisible(Pane);

            if (oldPane != null && !oldPane.IsDisposed && oldDockState == oldPane.DockState)
            {
                RefreshDockPane(oldPane);
            }

            if (Pane != null && DockState == Pane.DockState)
            {
                if ((Pane != oldPane) ||
                    (Pane == oldPane && oldDockState != oldPane.DockState))
                {
                    // Avoid early refresh of hidden AutoHide panes
                    if ((Pane.DockWindow == null || Pane.DockWindow.Visible || Pane.IsHidden) && !Pane.IsAutoHide)
                    {
                        RefreshDockPane(Pane);
                    }
                }
            }

            if (oldDockState != DockState)
            {
                if (DockState == DockState.Hidden || DockState == DockState.Unknown ||
                    DockHelper.IsDockStateAutoHide(DockState))
                {
                    DockPanel.ContentFocusManager.RemoveFromList(Content);
                }
                else
                {
                    DockPanel.ContentFocusManager.AddToList(Content);
                }

                OnDockStateChanged(EventArgs.Empty);
            }
            ResumeSetDockState();

            if (dockPanel != null)
            {
                dockPanel.ResumeLayout(true, true);
            }
        }
コード例 #21
0
			protected DragHandler(DockPanel dockPanel) {
				m_dockPanel = dockPanel;
			}
コード例 #22
0
ファイル: DockContent.cs プロジェクト: GodLesZ/svn-dump
		public void Show(DockPanel dockPanel, DockState dockState) {
			DockHandler.Show(dockPanel, dockState);
		}
コード例 #23
0
			public static void SaveAsXml(DockPanel dockPanel, string fileName, Encoding encoding) {
				FileStream fs = new FileStream(fileName, FileMode.Create);
				try {
					SaveAsXml(dockPanel, fs, encoding);
				} finally {
					fs.Close();
				}
			}
コード例 #24
0
ファイル: DockContent.cs プロジェクト: GodLesZ/svn-dump
		public void Show(DockPanel dockPanel, Rectangle floatWindowBounds) {
			DockHandler.Show(dockPanel, floatWindowBounds);
		}
コード例 #25
0
			public static void SaveAsXml(DockPanel dockPanel, Stream stream, Encoding encoding, bool upstream) {
				XmlTextWriter xmlOut = new XmlTextWriter(stream, encoding);

				// Use indenting for readability
				xmlOut.Formatting = Formatting.Indented;

				if (!upstream)
					xmlOut.WriteStartDocument();

				// Always begin file with identification and warning
				xmlOut.WriteComment(Strings.DockPanel_Persistor_XmlFileComment1);
				xmlOut.WriteComment(Strings.DockPanel_Persistor_XmlFileComment2);

				// Associate a version number with the root element so that future version of the code
				// will be able to be backwards compatible or at least recognise out of date versions
				xmlOut.WriteStartElement("DockPanel");
				xmlOut.WriteAttributeString("FormatVersion", ConfigFileVersion);
				xmlOut.WriteAttributeString("DockLeftPortion", dockPanel.DockLeftPortion.ToString(CultureInfo.InvariantCulture));
				xmlOut.WriteAttributeString("DockRightPortion", dockPanel.DockRightPortion.ToString(CultureInfo.InvariantCulture));
				xmlOut.WriteAttributeString("DockTopPortion", dockPanel.DockTopPortion.ToString(CultureInfo.InvariantCulture));
				xmlOut.WriteAttributeString("DockBottomPortion", dockPanel.DockBottomPortion.ToString(CultureInfo.InvariantCulture));
				xmlOut.WriteAttributeString("ActiveDocumentPane", dockPanel.Panes.IndexOf(dockPanel.ActiveDocumentPane).ToString(CultureInfo.InvariantCulture));
				xmlOut.WriteAttributeString("ActivePane", dockPanel.Panes.IndexOf(dockPanel.ActivePane).ToString(CultureInfo.InvariantCulture));

				// Contents
				xmlOut.WriteStartElement("Contents");
				xmlOut.WriteAttributeString("Count", dockPanel.Contents.Count.ToString(CultureInfo.InvariantCulture));
				foreach (IDockContent content in dockPanel.Contents) {
					xmlOut.WriteStartElement("Content");
					xmlOut.WriteAttributeString("ID", dockPanel.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteAttributeString("PersistString", content.DockHandler.PersistString);
					xmlOut.WriteAttributeString("AutoHidePortion", content.DockHandler.AutoHidePortion.ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteAttributeString("IsHidden", content.DockHandler.IsHidden.ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteAttributeString("IsFloat", content.DockHandler.IsFloat.ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteEndElement();
				}
				xmlOut.WriteEndElement();

				// Panes
				xmlOut.WriteStartElement("Panes");
				xmlOut.WriteAttributeString("Count", dockPanel.Panes.Count.ToString(CultureInfo.InvariantCulture));
				foreach (DockPane pane in dockPanel.Panes) {
					xmlOut.WriteStartElement("Pane");
					xmlOut.WriteAttributeString("ID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteAttributeString("DockState", pane.DockState.ToString());
					xmlOut.WriteAttributeString("ActiveContent", dockPanel.Contents.IndexOf(pane.ActiveContent).ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteStartElement("Contents");
					xmlOut.WriteAttributeString("Count", pane.Contents.Count.ToString(CultureInfo.InvariantCulture));
					foreach (IDockContent content in pane.Contents) {
						xmlOut.WriteStartElement("Content");
						xmlOut.WriteAttributeString("ID", pane.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteAttributeString("RefID", dockPanel.Contents.IndexOf(content).ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteEndElement();
					}
					xmlOut.WriteEndElement();
					xmlOut.WriteEndElement();
				}
				xmlOut.WriteEndElement();

				// DockWindows
				xmlOut.WriteStartElement("DockWindows");
				int dockWindowId = 0;
				foreach (DockWindow dw in dockPanel.DockWindows) {
					xmlOut.WriteStartElement("DockWindow");
					xmlOut.WriteAttributeString("ID", dockWindowId.ToString(CultureInfo.InvariantCulture));
					dockWindowId++;
					xmlOut.WriteAttributeString("DockState", dw.DockState.ToString());
					xmlOut.WriteAttributeString("ZOrderIndex", dockPanel.Controls.IndexOf(dw).ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteStartElement("NestedPanes");
					xmlOut.WriteAttributeString("Count", dw.NestedPanes.Count.ToString(CultureInfo.InvariantCulture));
					foreach (DockPane pane in dw.NestedPanes) {
						xmlOut.WriteStartElement("Pane");
						xmlOut.WriteAttributeString("ID", dw.NestedPanes.IndexOf(pane).ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteAttributeString("RefID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture));
						NestedDockingStatus status = pane.NestedDockingStatus;
						xmlOut.WriteAttributeString("PrevPane", dockPanel.Panes.IndexOf(status.PreviousPane).ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteAttributeString("Alignment", status.Alignment.ToString());
						xmlOut.WriteAttributeString("Proportion", status.Proportion.ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteEndElement();
					}
					xmlOut.WriteEndElement();
					xmlOut.WriteEndElement();
				}
				xmlOut.WriteEndElement();

				// FloatWindows
				RectangleConverter rectConverter = new RectangleConverter();
				xmlOut.WriteStartElement("FloatWindows");
				xmlOut.WriteAttributeString("Count", dockPanel.FloatWindows.Count.ToString(CultureInfo.InvariantCulture));
				foreach (FloatWindow fw in dockPanel.FloatWindows) {
					xmlOut.WriteStartElement("FloatWindow");
					xmlOut.WriteAttributeString("ID", dockPanel.FloatWindows.IndexOf(fw).ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteAttributeString("Bounds", rectConverter.ConvertToInvariantString(fw.Bounds));
					xmlOut.WriteAttributeString("ZOrderIndex", fw.DockPanel.FloatWindows.IndexOf(fw).ToString(CultureInfo.InvariantCulture));
					xmlOut.WriteStartElement("NestedPanes");
					xmlOut.WriteAttributeString("Count", fw.NestedPanes.Count.ToString(CultureInfo.InvariantCulture));
					foreach (DockPane pane in fw.NestedPanes) {
						xmlOut.WriteStartElement("Pane");
						xmlOut.WriteAttributeString("ID", fw.NestedPanes.IndexOf(pane).ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteAttributeString("RefID", dockPanel.Panes.IndexOf(pane).ToString(CultureInfo.InvariantCulture));
						NestedDockingStatus status = pane.NestedDockingStatus;
						xmlOut.WriteAttributeString("PrevPane", dockPanel.Panes.IndexOf(status.PreviousPane).ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteAttributeString("Alignment", status.Alignment.ToString());
						xmlOut.WriteAttributeString("Proportion", status.Proportion.ToString(CultureInfo.InvariantCulture));
						xmlOut.WriteEndElement();
					}
					xmlOut.WriteEndElement();
					xmlOut.WriteEndElement();
				}
				xmlOut.WriteEndElement();	//	</FloatWindows>

				xmlOut.WriteEndElement();

				if (!upstream) {
					xmlOut.WriteEndDocument();
					xmlOut.Close();
				} else
					xmlOut.Flush();
			}
コード例 #26
0
ファイル: DockContent.cs プロジェクト: GodLesZ/svn-dump
		public void DockTo(DockPanel panel, DockStyle dockStyle) {
			DockHandler.DockTo(panel, dockStyle);
		}
コード例 #27
0
			public static void LoadFromXml(DockPanel dockPanel, Stream stream, DeserializeDockContent deserializeContent) {
				LoadFromXml(dockPanel, stream, deserializeContent, true);
			}
コード例 #28
0
				private void SetOutline(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge) {
					Rectangle rect = fullPanelEdge ? dockPanel.DockArea : dockPanel.DocumentWindowBounds;
					rect.Location = dockPanel.PointToScreen(rect.Location);
					if (dock == DockStyle.Top) {
						int height = dockPanel.GetDockWindowSize(DockState.DockTop);
						rect = new Rectangle(rect.X, rect.Y, rect.Width, height);
					} else if (dock == DockStyle.Bottom) {
						int height = dockPanel.GetDockWindowSize(DockState.DockBottom);
						rect = new Rectangle(rect.X, rect.Bottom - height, rect.Width, height);
					} else if (dock == DockStyle.Left) {
						int width = dockPanel.GetDockWindowSize(DockState.DockLeft);
						rect = new Rectangle(rect.X, rect.Y, width, rect.Height);
					} else if (dock == DockStyle.Right) {
						int width = dockPanel.GetDockWindowSize(DockState.DockRight);
						rect = new Rectangle(rect.Right - width, rect.Y, width, rect.Height);
					} else if (dock == DockStyle.Fill) {
						rect = dockPanel.DocumentWindowBounds;
						rect.Location = dockPanel.PointToScreen(rect.Location);
					}

					SetDragForm(rect);
				}
コード例 #29
0
			public static void LoadFromXml(DockPanel dockPanel, Stream stream, DeserializeDockContent deserializeContent, bool closeStream) {

				if (dockPanel.Contents.Count != 0)
					throw new InvalidOperationException(Strings.DockPanel_LoadFromXml_AlreadyInitialized);

				XmlTextReader xmlIn = new XmlTextReader(stream);
				xmlIn.WhitespaceHandling = WhitespaceHandling.None;
				xmlIn.MoveToContent();

				while (!xmlIn.Name.Equals("DockPanel")) {
					if (!MoveToNextElement(xmlIn))
						throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
				}

				string formatVersion = xmlIn.GetAttribute("FormatVersion");
				if (!IsFormatVersionValid(formatVersion))
					throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidFormatVersion);

				DockPanelStruct dockPanelStruct = new DockPanelStruct();
				dockPanelStruct.DockLeftPortion = Convert.ToDouble(xmlIn.GetAttribute("DockLeftPortion"), CultureInfo.InvariantCulture);
				dockPanelStruct.DockRightPortion = Convert.ToDouble(xmlIn.GetAttribute("DockRightPortion"), CultureInfo.InvariantCulture);
				dockPanelStruct.DockTopPortion = Convert.ToDouble(xmlIn.GetAttribute("DockTopPortion"), CultureInfo.InvariantCulture);
				dockPanelStruct.DockBottomPortion = Convert.ToDouble(xmlIn.GetAttribute("DockBottomPortion"), CultureInfo.InvariantCulture);
				dockPanelStruct.IndexActiveDocumentPane = Convert.ToInt32(xmlIn.GetAttribute("ActiveDocumentPane"), CultureInfo.InvariantCulture);
				dockPanelStruct.IndexActivePane = Convert.ToInt32(xmlIn.GetAttribute("ActivePane"), CultureInfo.InvariantCulture);

				// Load Contents
				MoveToNextElement(xmlIn);
				if (xmlIn.Name != "Contents")
					throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
				ContentStruct[] contents = LoadContents(xmlIn);

				// Load Panes
				if (xmlIn.Name != "Panes")
					throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
				PaneStruct[] panes = LoadPanes(xmlIn);

				// Load DockWindows
				if (xmlIn.Name != "DockWindows")
					throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
				DockWindowStruct[] dockWindows = LoadDockWindows(xmlIn, dockPanel);

				// Load FloatWindows
				if (xmlIn.Name != "FloatWindows")
					throw new ArgumentException(Strings.DockPanel_LoadFromXml_InvalidXmlFormat);
				FloatWindowStruct[] floatWindows = LoadFloatWindows(xmlIn);

				if (closeStream)
					xmlIn.Close();

				dockPanel.SuspendLayout(true);

				dockPanel.DockLeftPortion = dockPanelStruct.DockLeftPortion;
				dockPanel.DockRightPortion = dockPanelStruct.DockRightPortion;
				dockPanel.DockTopPortion = dockPanelStruct.DockTopPortion;
				dockPanel.DockBottomPortion = dockPanelStruct.DockBottomPortion;

				// Set DockWindow ZOrders
				int prevMaxDockWindowZOrder = int.MaxValue;
				for (int i = 0; i < dockWindows.Length; i++) {
					int maxDockWindowZOrder = -1;
					int index = -1;
					for (int j = 0; j < dockWindows.Length; j++) {
						if (dockWindows[j].ZOrderIndex > maxDockWindowZOrder && dockWindows[j].ZOrderIndex < prevMaxDockWindowZOrder) {
							maxDockWindowZOrder = dockWindows[j].ZOrderIndex;
							index = j;
						}
					}

					dockPanel.DockWindows[dockWindows[index].DockState].BringToFront();
					prevMaxDockWindowZOrder = maxDockWindowZOrder;
				}

				// Create Contents
				for (int i = 0; i < contents.Length; i++) {
					IDockContent content = deserializeContent(contents[i].PersistString);
					if (content == null)
						content = new DummyContent();
					content.DockHandler.DockPanel = dockPanel;
					content.DockHandler.AutoHidePortion = contents[i].AutoHidePortion;
					content.DockHandler.IsHidden = true;
					content.DockHandler.IsFloat = contents[i].IsFloat;
				}

				// Create panes
				for (int i = 0; i < panes.Length; i++) {
					DockPane pane = null;
					for (int j = 0; j < panes[i].IndexContents.Length; j++) {
						IDockContent content = dockPanel.Contents[panes[i].IndexContents[j]];
						if (j == 0)
							pane = dockPanel.DockPaneFactory.CreateDockPane(content, panes[i].DockState, false);
						else if (panes[i].DockState == DockState.Float)
							content.DockHandler.FloatPane = pane;
						else
							content.DockHandler.PanelPane = pane;
					}
				}

				// Assign Panes to DockWindows
				for (int i = 0; i < dockWindows.Length; i++) {
					for (int j = 0; j < dockWindows[i].NestedPanes.Length; j++) {
						DockWindow dw = dockPanel.DockWindows[dockWindows[i].DockState];
						int indexPane = dockWindows[i].NestedPanes[j].IndexPane;
						DockPane pane = dockPanel.Panes[indexPane];
						int indexPrevPane = dockWindows[i].NestedPanes[j].IndexPrevPane;
						DockPane prevPane = (indexPrevPane == -1) ? dw.NestedPanes.GetDefaultPreviousPane(pane) : dockPanel.Panes[indexPrevPane];
						DockAlignment alignment = dockWindows[i].NestedPanes[j].Alignment;
						double proportion = dockWindows[i].NestedPanes[j].Proportion;
						pane.DockTo(dw, prevPane, alignment, proportion);
						if (panes[indexPane].DockState == dw.DockState)
							panes[indexPane].ZOrderIndex = dockWindows[i].ZOrderIndex;
					}
				}

				// Create float windows
				for (int i = 0; i < floatWindows.Length; i++) {
					FloatWindow fw = null;
					for (int j = 0; j < floatWindows[i].NestedPanes.Length; j++) {
						int indexPane = floatWindows[i].NestedPanes[j].IndexPane;
						DockPane pane = dockPanel.Panes[indexPane];
						if (j == 0)
							fw = dockPanel.FloatWindowFactory.CreateFloatWindow(dockPanel, pane, floatWindows[i].Bounds);
						else {
							int indexPrevPane = floatWindows[i].NestedPanes[j].IndexPrevPane;
							DockPane prevPane = indexPrevPane == -1 ? null : dockPanel.Panes[indexPrevPane];
							DockAlignment alignment = floatWindows[i].NestedPanes[j].Alignment;
							double proportion = floatWindows[i].NestedPanes[j].Proportion;
							pane.DockTo(fw, prevPane, alignment, proportion);
						}

						if (panes[indexPane].DockState == fw.DockState)
							panes[indexPane].ZOrderIndex = floatWindows[i].ZOrderIndex;
					}
				}

				// sort IDockContent by its Pane's ZOrder
				int[] sortedContents = null;
				if (contents.Length > 0) {
					sortedContents = new int[contents.Length];
					for (int i = 0; i < contents.Length; i++)
						sortedContents[i] = i;

					int lastDocument = contents.Length;
					for (int i = 0; i < contents.Length - 1; i++) {
						for (int j = i + 1; j < contents.Length; j++) {
							DockPane pane1 = dockPanel.Contents[sortedContents[i]].DockHandler.Pane;
							int ZOrderIndex1 = pane1 == null ? 0 : panes[dockPanel.Panes.IndexOf(pane1)].ZOrderIndex;
							DockPane pane2 = dockPanel.Contents[sortedContents[j]].DockHandler.Pane;
							int ZOrderIndex2 = pane2 == null ? 0 : panes[dockPanel.Panes.IndexOf(pane2)].ZOrderIndex;
							if (ZOrderIndex1 > ZOrderIndex2) {
								int temp = sortedContents[i];
								sortedContents[i] = sortedContents[j];
								sortedContents[j] = temp;
							}
						}
					}
				}

				// show non-document IDockContent first to avoid screen flickers
				for (int i = 0; i < contents.Length; i++) {
					IDockContent content = dockPanel.Contents[sortedContents[i]];
					if (content.DockHandler.Pane != null && content.DockHandler.Pane.DockState != DockState.Document)
						content.DockHandler.IsHidden = contents[sortedContents[i]].IsHidden;
				}

				// after all non-document IDockContent, show document IDockContent
				for (int i = 0; i < contents.Length; i++) {
					IDockContent content = dockPanel.Contents[sortedContents[i]];
					if (content.DockHandler.Pane != null && content.DockHandler.Pane.DockState == DockState.Document)
						content.DockHandler.IsHidden = contents[sortedContents[i]].IsHidden;
				}

				for (int i = 0; i < panes.Length; i++)
					dockPanel.Panes[i].ActiveContent = panes[i].IndexActiveContent == -1 ? null : dockPanel.Contents[panes[i].IndexActiveContent];

				if (dockPanelStruct.IndexActiveDocumentPane != -1)
					dockPanel.Panes[dockPanelStruct.IndexActiveDocumentPane].Activate();

				if (dockPanelStruct.IndexActivePane != -1)
					dockPanel.Panes[dockPanelStruct.IndexActivePane].Activate();

				for (int i = dockPanel.Contents.Count - 1; i >= 0; i--)
					if (dockPanel.Contents[i] is DummyContent)
						dockPanel.Contents[i].DockHandler.Form.Close();

				dockPanel.ResumeLayout(true, true);
			}
コード例 #30
0
			public DockDragHandler(DockPanel panel)
				: base(panel) {
			}
コード例 #31
0
			public FocusManagerImpl(DockPanel dockPanel) {
				m_dockPanel = dockPanel;
				m_localWindowsHook = new LocalWindowsHook(Win32.HookType.WH_CALLWNDPROCRET);
				m_hookEventHandler = new LocalWindowsHook.HookEventHandler(HookEventHandler);
				m_localWindowsHook.HookInvoked += m_hookEventHandler;
				m_localWindowsHook.Install();
			}
コード例 #32
0
 public void Show(DockPanel dockPanel, DockStyle dock, bool fullPanelEdge)
 {
     SaveOldValues();
     SetValues(Rectangle.Empty, dockPanel, dock, fullPanelEdge ? -1 : 0);
     TestChange();
 }