public IObjectContainer AddMasterPages(Stream stream) { CheckOpen(); if (stream == null) { throw new ArgumentNullException("stream"); } Serializer container = new Serializer(); Serializer reader = new Serializer(stream); reader.ReadAllFromStream(); foreach (MasterPage page in reader.MasterPageList) { if (reader.WorkingDirectoryGuid != _workingDirectoryGuid) { // They are from different document. foreach (Widget widget in page.Widgets) { widget.RebuildStyleChain(reader.GetWidgetBaseStyle(widget.Guid)); } } page.UpdateAllGuids(); AddMasterPage(page); // Save page data to the working directory. page.Save(); // Save embedded page data to the working directory. foreach (PageEmbeddedWidget embeddedWidget in page.Widgets.OfType <PageEmbeddedWidget>()) { foreach (EmbeddedPage embeddedPage in embeddedWidget.EmbeddedPages) { // Save embedded page. embeddedPage.Save(); } } container.AddPageInternal(page); } return(container); }
public IObjectContainer AddPages(Stream stream) { if (stream == null) { throw new ArgumentNullException("stream"); } CheckOpen(); Serializer container = new Serializer(); Serializer reader = new Serializer(stream); reader.ReadAllFromStream(); List <IDocumentPage> pages = new List <IDocumentPage>(); if (_documentData.DocumentType == DocumentType.Library) { pages.AddRange(reader.CustomObjectPageList); } else { pages.AddRange(reader.StandardPageList); } foreach (DocumentPage page in pages) { // They are from the different document if (reader.WorkingDirectoryGuid != _workingDirectoryGuid) { List <IRegion> regionList = new List <IRegion>(); regionList.AddRange(page.Widgets); regionList.AddRange(page.Masters); List <IRegion> newOrderList = new List <IRegion>(regionList.OrderBy(x => x.RegionStyle.Z)); Dictionary <Guid, IObjectContainer> newTargets = new Dictionary <Guid, IObjectContainer>(); // Break away all masters foreach (Master master in page.Masters) { IObjectContainer objects = reader.GetObjectsInAttachedMasterPage(master.MasterPageGuid); newTargets[master.Guid] = objects; // Update Guids as there may be many masters were created from the same master page. Page.UpdateObjectGuids(objects); Group parentGroup = master.ParentGroup as Group; if (parentGroup != null) { // Remove this master from its parent group. parentGroup.RemoveMaster(master); } // Ajust broken away widgets location double deltaX = master.MasterStyle.X; double deltaY = master.MasterStyle.Y; // Replace master with its broken widgets. int masterIndex = newOrderList.IndexOf(master); newOrderList.InsertRange(masterIndex, objects.WidgetList); newOrderList.Remove(master); foreach (Widget widget in objects.WidgetList) { if (!page.PageData.Widgets.Contains(widget.Guid)) { page.PageData.Widgets.Add(widget.Guid, widget); widget.ParentPage = page; // Set parent page. if (widget.ParentGroup == null && parentGroup != null) { // Add widget created by breaking master away to parent group if it is not in a group. parentGroup.AddWidget(widget); } widget.WidgetStyle.X += deltaX; widget.WidgetStyle.Y += deltaY; } } foreach (Group group in objects.GroupList) { if (!page.PageData.Groups.Contains(group.Guid)) { page.PageData.Groups.Add(group.Guid, group); group.ParentPage = page; if (group.ParentGroup == null && parentGroup != null) { // Add group created by breaking master away to parent group. parentGroup.AddGroup(group); } } } } foreach (Widget widget in page.Widgets) { // Rebuild widget base style widget.RebuildStyleChain(reader.GetWidgetBaseStyle(widget.Guid)); // Update action which has the master as a target. widget.UpdateActions(newTargets); } // Delete all masters page.DeleteAllMasters(); // Reset all widgets Zorder int index = 0; foreach (Widget widget in newOrderList) { widget.WidgetStyle.Z = index; index++; } } // Update all guids in this new page. page.UpdateAllGuids(); // Add this page to the document. AddPage(page); // Save embedded page data to the working directory. foreach (PageEmbeddedWidget embeddedWidget in page.Widgets.OfType <PageEmbeddedWidget>()) { foreach (EmbeddedPage embeddedPage in embeddedWidget.EmbeddedPages) { // Save embedded page and close it. embeddedPage.Close(); } } // Save page data to the working directory and close it. page.Close(); container.AddPageInternal(page); } return(container); }