protected Flow(FObj parent, PropertyList propertyList) : base(parent, propertyList) { this.name = GetElementName(); if (parent.GetName().Equals("fo:page-sequence")) { this.pageSequence = (PageSequence)parent; } else { throw new FonetException("flow must be child of " + "page-sequence, not " + parent.GetName()); } SetFlowName(GetProperty("flow-name").GetString()); if (pageSequence.IsFlowSet) { if (this.name.Equals("fo:flow")) { throw new FonetException("Only a single fo:flow permitted" + " per fo:page-sequence"); } else { throw new FonetException(this.name + " not allowed after fo:flow"); } } pageSequence.AddFlow(this); }
public void PageListAddedToSequence() { var pages = new[] { new SequencedControl(), new SequencedControl(), new SequencedControl() }; _pageSequence = new PageSequence(_parentControl, pages); Assert.That(_pageSequence.Pages, Is.EquivalentTo(pages)); }
public void CallingNextAdvancesPage() { var pages = new[] { new SequencedControl(), new SequencedControl(), new SequencedControl() }; _pageSequence = new PageSequence(_parentControl, pages); _pageSequence.NextPage(); Assert.That(_pageSequence.CurrentPageIndex, Is.EqualTo(1)); }
public void PageParamsAddedToSequence() { _pageSequence = new PageSequence(_parentControl, new SequencedControl(), new SequencedControl(), new SequencedControl() ); Assert.That(_pageSequence.Pages.Count(), Is.EqualTo(3)); }
public CookiecutterControl(Redirector outputWindow, ICookiecutterTelemetry telemetry, Uri feedUrl, Action <string> openFolder, Action updateCommandUI) { _updateCommandUI = updateCommandUI; _checkForUpdatesTimer = new DispatcherTimer(); _checkForUpdatesTimer.Tick += new EventHandler(CheckForUpdateTimer_Tick); string gitExeFilePath = GitClient.RecommendedGitFilePath; var gitClient = new GitClient(gitExeFilePath, outputWindow); var gitHubClient = new GitHubClient(); ViewModel = new CookiecutterViewModel( CookiecutterClientProvider.Create(outputWindow), gitHubClient, gitClient, telemetry, outputWindow, new LocalTemplateSource(CookiecutterViewModel.DefaultInstalledFolderPath, gitClient), new FeedTemplateSource(feedUrl), new GitHubTemplateSource(gitHubClient), openFolder ); ViewModel.UserConfigFilePath = CookiecutterViewModel.GetUserConfigPath(); ViewModel.OutputFolderPath = string.Empty; // leaving this empty for now, force user to enter one ViewModel.ContextLoaded += ViewModel_ContextLoaded; ViewModel.HomeClicked += ViewModel_HomeClicked; _searchPage = new CookiecutterSearchPage { DataContext = ViewModel }; _optionsPage = new CookiecutterOptionsPage { DataContext = ViewModel }; var pages = new List <Page>(); pages.Add(_searchPage); pages.Add(_optionsPage); _pageSequence = new CollectionViewSource { Source = new ObservableCollection <Page>(pages) }; PageCount = _pageSequence.View.OfType <object>().Count(); PageSequence = _pageSequence.View; PageSequence.MoveCurrentToFirst(); DataContext = this; InitializeComponent(); _searchPage.SelectedTemplateChanged += SearchPage_SelectedTemplateChanged; }
public IList <Page> GetPages(PageSequence pageSequence, PageCollection pageCollection, PageTemplateCollection pageTemplateCollection) { List <Page> pages = new List <Page>(); int fillUpPageIndex = -1; // Add dynamic elements. foreach (PageSequenceElement pageSequenceElement in pageSequence) { if (pageSequenceElement.FillUpMultiplier == 0) { if (pageSequenceElement.PageReferenceKey != null) { Page page = pageCollection[pageSequenceElement.PageReferenceKey]; if (page != null) { pages.Add(page); } } if (pageSequenceElement.PageTemplateReferenceKey != null) { pages.AddRange( CreatePagesFromTemplate(pageTemplateCollection[pageSequenceElement.PageTemplateReferenceKey])); } } else { fillUpPageIndex = pages.Count; } } // Also check if there are fillup templates. if (pageSequence.Any(pe => pe.FillUpMultiplier > 0)) { int multiplier = pageSequence.Where(pe => pe.FillUpMultiplier > 0).FirstOrDefault().FillUpMultiplier; // Add fillup pages. int pagesToAdd = multiplier - (pages.Count % multiplier); if (pagesToAdd < multiplier) { Page p = pageCollection[pageSequence.Where(pe => pe.FillUpMultiplier > 0).FirstOrDefault().PageReferenceKey]; for (int x = 0; x < pagesToAdd; x++) { p.Key += "_fillup_" + x; pages.Insert(fillUpPageIndex, p); } } } return(pages); }
/// <summary> /// Format the PageSequence. The PageSequence formats Pages and adds /// them to the AreaTree, which subsequently calls the StreamRenderer /// instance (this) again to render the page. At this time the page /// might be printed or it might be queued. A page might not be /// renderable immediately if the IDReferences are not all valid. In /// this case we defer the rendering until they are all valid. /// </summary> /// <param name="pageSequence"></param> public void Render(PageSequence pageSequence) { AreaTree a = new AreaTree(this); a.setFontInfo(fontInfo); pageSequence.Format(a); this.results.HaveFormattedPageSequence(pageSequence); FonetDriver.ActiveDriver.FireFonetInfo( "Last page-sequence produced " + pageSequence.PageCount + " page(s)."); }
internal void HaveFormattedPageSequence(PageSequence pageSequence) { this.pageCount += pageSequence.PageCount; if (this.pageSequences == null) { this.pageSequences = new ArrayList(); } this.pageSequences.Add( new PageSequenceResults( pageSequence.GetProperty("id").GetString(), pageSequence.PageCount)); }
public void QueuePage(Page page) { // Process markers PageSequence pageSequence = page.getPageSequence(); if (pageSequence != currentPageSequence) { currentPageSequence = pageSequence; currentPageSequenceMarkers = null; } ArrayList markers = page.getMarkers(); if (markers != null) { if (documentMarkers == null) { documentMarkers = new ArrayList(); } if (currentPageSequenceMarkers == null) { currentPageSequenceMarkers = new ArrayList(); } for (int i = 0; i < markers.Count; i++) { Marker marker = (Marker)markers[i]; marker.releaseRegistryArea(); currentPageSequenceMarkers.Add(marker); documentMarkers.Add(marker); } } // Try to optimise on the common case that there are no pages pending // and that all ID references are valid on the current pages. This // short-cuts the pipeline and renders the area immediately. if ((renderQueue.Count == 0) && idReferences.IsEveryIdValid()) { renderer.Render(page); } else { AddToRenderQueue(page); } pageCount++; }
private void EndElement() { if (currentFObj != null) { currentFObj.End(); // If it is a page-sequence, then we can finally render it. // This is the biggest performance problem we have, we need // to be able to render prior to this point. PageSequence pageSeq = currentFObj as PageSequence; if (pageSeq != null) { streamRenderer.Render(pageSeq); } currentFObj = currentFObj.getParent(); } }
/// <summary> /// Format the PageSequence. The PageSequence formats Pages and adds /// them to the AreaTree, which subsequently calls the StreamRenderer /// instance (this) again to render the page. At this time the page /// might be printed or it might be queued. A page might not be /// renderable immediately if the IDReferences are not all valid. In /// this case we defer the rendering until they are all valid. /// </summary> /// <param name="pageSequence"></param> public void Render(PageSequence pageSequence) { AreaTree a = new AreaTree(this); a.setFontInfo(fontInfo); var sw = System.Diagnostics.Stopwatch.StartNew(); pageSequence.Format(a); FonetDriver.ActiveDriver.FireFonetInfo(string.Format("Rendered Page Sequence Output in [{0}] seconds.", sw.Elapsed.TotalSeconds)); this.results.HaveFormattedPageSequence(pageSequence); FonetDriver.ActiveDriver.FireFonetInfo( "Last page-sequence produced " + pageSequence.PageCount + " page(s)."); }
public override Status Layout(Area area) { if (marker == MarkerStart) { marker = 0; Page containingPage = area.getPage(); bestMarker = SearchPage(containingPage); if (bestMarker != null) { bestMarker.resetMarkerContent(); return(bestMarker.LayoutMarker(area)); } AreaTree areaTree = containingPage.getAreaTree(); if (retrieveBoundary == RetrieveBoundary.PAGE_SEQUENCE) { PageSequence pageSequence = areaTree.GetCurrentPageSequence(); if (pageSequence == containingPage.getPageSequence()) { return(LayoutBestMarker(areaTree.GetCurrentPageSequenceMarkers(), area)); } } else if (retrieveBoundary == RetrieveBoundary.DOCUMENT) { return(LayoutBestMarker(areaTree.GetDocumentMarkers(), area)); } else if (retrieveBoundary != RetrieveBoundary.PAGE) { throw new FonetException("Illegal 'retrieve-boundary' value"); } } else if (bestMarker != null) { return(bestMarker.LayoutMarker(area)); } return(new Status(Status.OK)); }
private void ViewModel_HomeClicked(object sender, EventArgs e) { PageSequence.MoveCurrentToFirst(); _updateCommandUI(); }
static StandardElementMapping() { foObjs = new Hashtable(); // Declarations and Pagination and Layout Formatting Objects foObjs.Add("root", Root.GetMaker()); foObjs.Add("declarations", Declarations.GetMaker()); foObjs.Add("color-profile", ColorProfile.GetMaker()); foObjs.Add("page-sequence", PageSequence.GetMaker()); foObjs.Add("layout-master-set", LayoutMasterSet.GetMaker()); foObjs.Add("page-sequence-master", PageSequenceMaster.GetMaker()); foObjs.Add("single-page-master-reference", SinglePageMasterReference.GetMaker()); foObjs.Add("repeatable-page-master-reference", RepeatablePageMasterReference.GetMaker()); foObjs.Add("repeatable-page-master-alternatives", RepeatablePageMasterAlternatives.GetMaker()); foObjs.Add("conditional-page-master-reference", ConditionalPageMasterReference.GetMaker()); foObjs.Add("simple-page-master", SimplePageMaster.GetMaker()); foObjs.Add("region-body", RegionBody.GetMaker()); foObjs.Add("region-before", RegionBefore.GetMaker()); foObjs.Add("region-after", RegionAfter.GetMaker()); foObjs.Add("region-start", RegionStart.GetMaker()); foObjs.Add("region-end", RegionEnd.GetMaker()); foObjs.Add("flow", Flow.Flow.GetMaker()); foObjs.Add("static-content", StaticContent.GetMaker()); foObjs.Add("title", Title.GetMaker()); // Block-level Formatting Objects foObjs.Add("block", Block.GetMaker()); foObjs.Add("block-container", BlockContainer.GetMaker()); // Inline-level Formatting Objects foObjs.Add("bidi-override", BidiOverride.GetMaker()); foObjs.Add("character", Character.GetMaker()); foObjs.Add("initial-property-set", InitialPropertySet.GetMaker()); foObjs.Add("external-graphic", ExternalGraphic.GetMaker()); foObjs.Add("instream-foreign-object", InstreamForeignObject.GetMaker()); foObjs.Add("inline", Inline.GetMaker()); foObjs.Add("inline-container", InlineContainer.GetMaker()); foObjs.Add("leader", Leader.GetMaker()); foObjs.Add("page-number", PageNumber.GetMaker()); foObjs.Add("page-number-citation", PageNumberCitation.GetMaker()); // Formatting Objects for Tables foObjs.Add("table-and-caption", TableAndCaption.GetMaker()); foObjs.Add("table", Table.GetMaker()); foObjs.Add("table-column", TableColumn.GetMaker()); foObjs.Add("table-caption", TableCaption.GetMaker()); foObjs.Add("table-header", TableHeader.GetMaker()); foObjs.Add("table-footer", TableFooter.GetMaker()); foObjs.Add("table-body", TableBody.GetMaker()); foObjs.Add("table-row", TableRow.GetMaker()); foObjs.Add("table-cell", TableCell.GetMaker()); // Formatting Objects for Lists foObjs.Add("list-block", ListBlock.GetMaker()); foObjs.Add("list-item", ListItem.GetMaker()); foObjs.Add("list-item-body", ListItemBody.GetMaker()); foObjs.Add("list-item-label", ListItemLabel.GetMaker()); // Dynamic Effects: Link and Multi Formatting Objects foObjs.Add("basic-link", BasicLink.GetMaker()); foObjs.Add("multi-switch", MultiSwitch.GetMaker()); foObjs.Add("multi-case", MultiCase.GetMaker()); foObjs.Add("multi-toggle", MultiToggle.GetMaker()); foObjs.Add("multi-properties", MultiProperties.GetMaker()); foObjs.Add("multi-property-set", MultiPropertySet.GetMaker()); // Out-of-Line Formatting Objects foObjs.Add("float", Float.GetMaker()); foObjs.Add("footnote", Footnote.GetMaker()); foObjs.Add("footnote-body", FootnoteBody.GetMaker()); // Other Formatting Objects foObjs.Add("wrapper", Wrapper.GetMaker()); foObjs.Add("marker", Marker.GetMaker()); foObjs.Add("retrieve-marker", RetrieveMarker.GetMaker()); }
public void setPageSequence(PageSequence pageSequence) { this.pageSequence = pageSequence; }
private void ViewModel_ContextLoaded(object sender, EventArgs e) { PageSequence.MoveCurrentToLast(); _updateCommandUI(); }
internal void Parse(PixelFarm.Drawing.Pdf.MyPdfDocument doc) { //TEST CODE ONLY *** var root_maker = Root.GetMaker(); // var layout_master_set_maker = LayoutMasterSet.GetMaker(); var simplpe_page_master = SimplePageMaster.GetMaker(); var region_body = RegionBody.GetMaker(); var region_before = RegionBefore.GetMaker(); var region_after = RegionAfter.GetMaker(); // var pageSeq_maker = PageSequence.GetMaker(); var flow_maker = Flow.Flow.GetMaker(); var block_maker = Flow.Block.GetMaker(); string nsuri = "http://www.w3.org/1999/XSL/Format"; streamRenderer.StartRenderer(); //1. root Root rootObj = CreateAndAppend <Root>(null, root_maker, nsuri, "root", CreateAttributes()); //2. LayoutMasterSet masterSet = CreateAndAppend(rootObj, layout_master_set_maker, nsuri, "layout-master-set", CreateAttributes()); { SimplePageMaster simpleMaster = CreateAndAppend( masterSet, simplpe_page_master, nsuri, "simple-page-master", CreateAttributes( new AttrKeyValue("master-name", "simple"), new AttrKeyValue("page-height", "29.7cm"), new AttrKeyValue("margin-top", "1cm"), new AttrKeyValue("margin-bottom", "2cm"), new AttrKeyValue("margin-left", "2.5cm"), new AttrKeyValue("margin-right", "2.5cm") )); RegionBody rgnBody = CreateAndAppend(simpleMaster, region_body, nsuri, "region-body", CreateAttributes(new AttrKeyValue("margin-top", "3cm"))); RegionBefore rgnBefore = CreateAndAppend(simpleMaster, region_before, nsuri, "region-before", CreateAttributes(new AttrKeyValue("extent", "3cm"))); RegionAfter rgnAfter = CreateAndAppend(simpleMaster, region_after, nsuri, "region-after", CreateAttributes(new AttrKeyValue("extent", "1.5cm"))); simpleMaster.End(); } List <PixelFarm.Drawing.Pdf.MyPdfPage> pages = doc.Pages; int page_count = pages.Count; for (int i = 0; i < page_count; ++i) { PixelFarm.Drawing.Pdf.MyPdfPage p = pages[i]; PixelFarm.Drawing.Pdf.MyPdfCanvas canvas = p.Canvas; PageSequence page_seq = CreateAndAppend(rootObj, pageSeq_maker, nsuri, "page-sequence", CreateAttributes(new AttrKeyValue("master-reference", "simple"))); Flow.Flow flow_obj = CreateAndAppend(page_seq, flow_maker, nsuri, "flow", CreateAttributes(new AttrKeyValue("flow-name", "xsl-region-body"))); Flow.Block block_obj = CreateAndAppend( flow_obj, block_maker, nsuri, "block", CreateAttributes(new AttrKeyValue("font-size", "18pt"), new AttrKeyValue("color", "black"), new AttrKeyValue("text-align", "center") )); //very simple List <PixelFarm.Drawing.Pdf.MyPdfTextBlock> textElems = canvas.TextElems; //first sample , int elem_count = textElems.Count; for (int n = 0; n < elem_count; ++n) { PixelFarm.Drawing.Pdf.MyPdfTextBlock textBlock = textElems[n]; string txt = textBlock.Text; // char[] charBuff = txt.ToCharArray(); block_obj.AddCharacters(charBuff, 0, charBuff.Length); } streamRenderer.Render(page_seq); } FonetDriver.ActiveDriver.FireFonetInfo("Parsing of document complete, stopping renderer"); streamRenderer.StopRenderer(); }