/// <summary> /// Initialize a new instance of the StorePageEventArgs class. /// </summary> /// <param name="storePage">Reference to store page that is associated with the event.</param> public StorePageEventArgs(KryptonStorePage storePage) => StorePage = storePage;
/// <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.", nameof(xmlReader)); } // Get the unique name of the page var uniqueName = xmlReader.GetAttribute(@"UN"); var boolStore = xmlReader.GetAttribute(@"S"); var 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(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(page); AutoHiddenGroupControl.Pages.Add(proxyPage); } } if (!xmlReader.Read()) { throw new ArgumentException(@"An element was expected but could not be read in.", nameof(xmlReader)); } if (xmlReader.Name != @"CPD") { throw new ArgumentException(@"Expected 'CPD' element was not found", nameof(xmlReader)); } var finished = xmlReader.IsEmptyElement; // Generate event so custom data can be loaded and/or the page to be added can be modified DockPageLoadingEventArgs pageLoading = new(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.", nameof(xmlReader)); } } } if (!xmlReader.Read()) { throw new ArgumentException(@"An element was expected but could not be read in.", nameof(xmlReader)); } }