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 = null;
// 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.");
}