//------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods /// <summary> /// Handler for the OnPaginationProgress event fired by the DocumentPaginator. /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void OnPaginationProgress(object sender, PaginationProgressEventArgs args) { //Since handling the PaginationProgress event entails a bit of work, we'll //have our dispatcher call the PaginationProgress event at Normal priority. Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, new DispatcherOperationCallback(PaginationProgressDelegate), args); }
/// <summary> /// Asynchronously handles the PaginationProgress event. /// This means that one or more pages have been added to the document, so we /// add any new pages to the cache, mark them as dirty, and fire off our PaginationProgress /// event. /// </summary> /// <param name="parameter"></param> /// <returns></returns> private object PaginationProgressDelegate(object parameter) { PaginationProgressEventArgs args = parameter as PaginationProgressEventArgs; if (args == null) { throw new InvalidOperationException("parameter"); } //Validate incoming parameters. ValidatePaginationArgs(args.Start, args.Count); if (_isPaginationCompleted) { if (args.Start == 0) { //Since we've started repaginating from the beginning of the document //after pagination was completed, we can't assume we know //the default page size anymore. _isDefaultSizeKnown = false; _dynamicPageSizes = false; } //Reset our IsPaginationCompleted flag since we just got a pagination event. _isPaginationCompleted = false; } //Check for integer overflow. if (args.Start + args.Count < 0) { throw new ArgumentOutOfRangeException("args"); } //Create our list of changes. We allocate space for 2 changes here //as we can have as many as two changes resulting from a Pagination event. List <PageCacheChange> changes = new List <PageCacheChange>(2); PageCacheChange change; //If we have pages to add or modify, do so now. if (args.Count > 0) { //If pagination has added new pages onto the end of the document, we //add new entries to our cache. if (args.Start >= _cache.Count) { //Completely new pages, so we add new cache entries change = AddRange(args.Start, args.Count); if (change != null) { changes.Add(change); } } else { //Pagination has updated some currently existing pages, so we'll //update our entries. if (args.Start + args.Count < _cache.Count) { //All pre-existing pages, so we just dirty the current cache entries. change = DirtyRange(args.Start, args.Count); if (change != null) { changes.Add(change); } } else { //Some pre-existing pages, some new. change = DirtyRange(args.Start, _cache.Count - args.Start); if (change != null) { changes.Add(change); } change = AddRange(_cache.Count, args.Count - (_cache.Count - args.Start) + 1); if (change != null) { changes.Add(change); } } } } //If the document's PageCount is now less than the size of our cache due to repagination //we remove the extra entries. int pageCount = _documentPaginator != null ? _documentPaginator.PageCount : 0; if (pageCount < _cache.Count) { change = new PageCacheChange(pageCount, _cache.Count - pageCount, PageCacheChangeType.Remove); changes.Add(change); //Remove the pages from the cache. _cache.RemoveRange(pageCount, _cache.Count - pageCount); } //Fire off our PageCacheChanged event. FirePageCacheChangedEvent(changes); //Fire the PaginationProgress event. if (PaginationProgress != null) { PaginationProgress(this, args); } return(null); }
// Token: 0x06007149 RID: 29001 RVA: 0x00206848 File Offset: 0x00204A48 private object PaginationProgressDelegate(object parameter) { PaginationProgressEventArgs paginationProgressEventArgs = parameter as PaginationProgressEventArgs; if (paginationProgressEventArgs == null) { throw new InvalidOperationException("parameter"); } this.ValidatePaginationArgs(paginationProgressEventArgs.Start, paginationProgressEventArgs.Count); if (this._isPaginationCompleted) { if (paginationProgressEventArgs.Start == 0) { this._isDefaultSizeKnown = false; this._dynamicPageSizes = false; } this._isPaginationCompleted = false; } if (paginationProgressEventArgs.Start + paginationProgressEventArgs.Count < 0) { throw new ArgumentOutOfRangeException("args"); } List <PageCacheChange> list = new List <PageCacheChange>(2); if (paginationProgressEventArgs.Count > 0) { if (paginationProgressEventArgs.Start >= this._cache.Count) { PageCacheChange pageCacheChange = this.AddRange(paginationProgressEventArgs.Start, paginationProgressEventArgs.Count); if (pageCacheChange != null) { list.Add(pageCacheChange); } } else if (paginationProgressEventArgs.Start + paginationProgressEventArgs.Count < this._cache.Count) { PageCacheChange pageCacheChange = this.DirtyRange(paginationProgressEventArgs.Start, paginationProgressEventArgs.Count); if (pageCacheChange != null) { list.Add(pageCacheChange); } } else { PageCacheChange pageCacheChange = this.DirtyRange(paginationProgressEventArgs.Start, this._cache.Count - paginationProgressEventArgs.Start); if (pageCacheChange != null) { list.Add(pageCacheChange); } pageCacheChange = this.AddRange(this._cache.Count, paginationProgressEventArgs.Count - (this._cache.Count - paginationProgressEventArgs.Start) + 1); if (pageCacheChange != null) { list.Add(pageCacheChange); } } } int num = (this._documentPaginator != null) ? this._documentPaginator.PageCount : 0; if (num < this._cache.Count) { PageCacheChange pageCacheChange = new PageCacheChange(num, this._cache.Count - num, PageCacheChangeType.Remove); list.Add(pageCacheChange); this._cache.RemoveRange(num, this._cache.Count - num); } this.FirePageCacheChangedEvent(list); if (this.PaginationProgress != null) { this.PaginationProgress(this, paginationProgressEventArgs); } return(null); }
// Token: 0x06006FE8 RID: 28648 RVA: 0x00202814 File Offset: 0x00200A14 internal void NotifyPaginationProgress(PaginationProgressEventArgs e) { this.OnPaginationProgress(e); }
// Token: 0x06007148 RID: 29000 RVA: 0x0020682A File Offset: 0x00204A2A private void OnPaginationProgress(object sender, PaginationProgressEventArgs args) { Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, new DispatcherOperationCallback(this.PaginationProgressDelegate), args); }