private void OnAutoHiddenGroupHoverStart(object sender, KryptonPageEventArgs e) { // The auto hidden group contains proxy pages and not the real pages KryptonAutoHiddenProxyPage proxyPage = (KryptonAutoHiddenProxyPage)e.Item; OnPageHoverStart(new KryptonPageEventArgs(proxyPage.Page, e.Index)); }
private void AppendPagesToControl(KryptonPage[] pages) { // Make a list of all the 'store' pages being added List <string> uniqueNames = new List <string>(); foreach (KryptonPage page in pages) { if (page is KryptonStorePage) { uniqueNames.Add(page.UniqueName); } } // We only allow a single 'store' page in this docking location at a time if (uniqueNames.Count > 0) { DockingManager.PropogateAction(DockingPropogateAction.ClearAutoHiddenStoredPages, uniqueNames.ToArray()); } // Non-store pages need to be wrapped in a proxy appropriate for the auto hidden control for (int i = 0; i < pages.Length; i++) { if (!(pages[i] is KryptonStorePage)) { pages[i] = new KryptonAutoHiddenProxyPage(pages[i]); } } // Add the proxy pages so that we can still use the actual pages instances elsewhere AutoHiddenGroupControl.Pages.AddRange(pages); }
/// <summary> /// Slide the specified page into view and optionally select. /// </summary> /// <param name="uniqueName">Name of page to slide into view.</param> /// <param name="select">True to select the page; otherwise false.</param> public void SlidePageOut(string uniqueName, bool select) { // Search each of our AutoHiddenGroup entries for (int i = 0; i < Count; i++) { if (this[i] is KryptonDockingAutoHiddenGroup ahg) { // If the target page is inside this group KryptonPage page = ahg.AutoHiddenGroupControl.Pages[uniqueName]; if (page != null) { // Request the sliding panel slide itself into view with the provided page KryptonAutoHiddenProxyPage proxyPage = (KryptonAutoHiddenProxyPage)page; _slidePanel.SlideOut(proxyPage.Page, ahg.AutoHiddenGroupControl, select); break; } } } }
/// <summary> /// Propagates a page list request down the hierarchy of docking elements. /// </summary> /// <param name="state">Request that should result in pages collection being modified.</param> /// <param name="pages">Pages collection for modification by the docking elements.</param> public override void PropogatePageList(DockingPropogatePageList state, KryptonPageCollection pages) { switch (state) { case DockingPropogatePageList.All: case DockingPropogatePageList.AutoHidden: for (int i = AutoHiddenGroupControl.Pages.Count - 1; i >= 0; i--) { // Only add real pages and not just placeholders KryptonPage page = AutoHiddenGroupControl.Pages[i]; if ((page != null) && !(page is KryptonStorePage)) { // Remember the real page is inside a proxy! KryptonAutoHiddenProxyPage proxyPage = (KryptonAutoHiddenProxyPage)page; pages.Add(proxyPage.Page); } } break; } }
/// <summary> /// Perform docking element specific actions for loading a child xml. /// </summary> /// <param name="xmlReader">Xml reader object.</param> /// <param name="pages">Collection of available pages.</param> /// <param name="child">Optional reference to existing child docking element.</param> protected override void LoadChildDockingElement(XmlReader xmlReader, KryptonPageCollection pages, IDockingElement child) { KryptonDockingManager manager = DockingManager; // Is it the expected xml element name? if (xmlReader.Name != "KP") { throw new ArgumentException("Element name 'KP' was expected but found '" + xmlReader.Name + "' instead."); } // Get the unique name of the page string uniqueName = xmlReader.GetAttribute("UN"); string boolStore = xmlReader.GetAttribute("S"); string boolVisible = xmlReader.GetAttribute("V"); KryptonPage page; // If the entry is for just a placeholder... if (CommonHelper.StringToBool(boolStore)) { // Recreate the requested store page and append page = new KryptonStorePage(uniqueName, "AutoHiddenGroup"); AutoHiddenGroupControl.Pages.Add(page); } else { // Can we find a provided page to match the incoming layout? page = pages[uniqueName]; if (page == null) { // Generate event so developer can create and supply the page now RecreateLoadingPageEventArgs args = new RecreateLoadingPageEventArgs(uniqueName); manager.RaiseRecreateLoadingPage(args); if (!args.Cancel) { page = args.Page; // Add recreated page to the looking dictionary if ((page != null) && (pages[page.UniqueName] == null)) { pages.Add(page); } } } if (page != null) { // Use the loaded visible state page.Visible = CommonHelper.StringToBool(boolVisible); // Create a proxy around the page and append it KryptonAutoHiddenProxyPage proxyPage = new KryptonAutoHiddenProxyPage(page); AutoHiddenGroupControl.Pages.Add(proxyPage); } } if (!xmlReader.Read()) { throw new ArgumentException("An element was expected but could not be read in."); } if (xmlReader.Name != "CPD") { throw new ArgumentException("Expected 'CPD' element was not found"); } bool finished = xmlReader.IsEmptyElement; // Generate event so custom data can be loaded and/or the page to be added can be modified DockPageLoadingEventArgs pageLoading = new DockPageLoadingEventArgs(manager, xmlReader, page); manager.RaisePageLoading(pageLoading); // Read everything until we get the end of custom data marker while (!finished) { // Check it has the expected name if (xmlReader.NodeType == XmlNodeType.EndElement) { finished = (xmlReader.Name == "CPD"); } if (!finished) { if (!xmlReader.Read()) { throw new ArgumentException("An element was expected but could not be read in."); } } } if (!xmlReader.Read()) { throw new ArgumentException("An element was expected but could not be read in."); } }