// Token: 0x0600714D RID: 29005 RVA: 0x00206A90 File Offset: 0x00204C90
        private object PagesChangedDelegate(object parameter)
        {
            PagesChangedEventArgs pagesChangedEventArgs = parameter as PagesChangedEventArgs;

            if (pagesChangedEventArgs == null)
            {
                throw new ArgumentOutOfRangeException("parameter");
            }
            this.ValidatePaginationArgs(pagesChangedEventArgs.Start, pagesChangedEventArgs.Count);
            int num = pagesChangedEventArgs.Count;

            if (pagesChangedEventArgs.Start + pagesChangedEventArgs.Count >= this._cache.Count || pagesChangedEventArgs.Start + pagesChangedEventArgs.Count < 0)
            {
                num = this._cache.Count - pagesChangedEventArgs.Start;
            }
            List <PageCacheChange> list = new List <PageCacheChange>(1);

            if (num > 0)
            {
                PageCacheChange pageCacheChange = this.DirtyRange(pagesChangedEventArgs.Start, num);
                if (pageCacheChange != null)
                {
                    list.Add(pageCacheChange);
                }
                this.FirePageCacheChangedEvent(list);
            }
            if (this.PagesChanged != null)
            {
                this.PagesChanged(this, pagesChangedEventArgs);
            }
            return(null);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Updates entries in the cache to have the current default page size.
        /// </summary>
        private void SetDefaultPageSize(bool dirtyOnly)
        {
            //Create our list of changes.  We can potentially have as many
            //changes as there are pages in the document.
            List <PageCacheChange> changes = new List <PageCacheChange>(PageCount);

            Invariant.Assert(_defaultPageSize != Size.Empty, "Default Page Size is Empty.");

            for (int i = 0; i < _cache.Count; i++)
            {
                if (_cache[i].Dirty || !dirtyOnly)
                {
                    PageCacheEntry newEntry;
                    newEntry.PageSize = _defaultPageSize;
                    newEntry.Dirty    = true;

                    PageCacheChange change = UpdateEntry(i, newEntry);
                    if (change != null)
                    {
                        changes.Add(change);
                    }
                }
            }

            //Fire off our PageCacheChanged event.
            FirePageCacheChangedEvent(changes);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Asynchronously handles the PagesChanged event.
        /// This means that one or more pages have been invalidated so we
        /// dirty their cache entries and fire off our PagesChanged event.
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        private object PagesChangedDelegate(object parameter)
        {
            PagesChangedEventArgs args = parameter as PagesChangedEventArgs;

            if (args == null)
            {
                throw new ArgumentOutOfRangeException("parameter");
            }

            //Validate incoming parameters
            ValidatePaginationArgs(args.Start, args.Count);

            //Start values outside the range of current pages are invalid.
            //if (args.Start >= _cache.Count)
            //{
            //    throw new ArgumentOutOfRangeException("args");
            //}

            //If the last page specified in the change is out of the range of currently-known
            //pages we make the assumption that the IDP means to invalidate all pages and so
            //we clip the count into range.
            //We also take into account integer overflow... if the sum of Start+Count is less than
            //zero then we've overflowed.
            int adjustedCount = args.Count;

            if (args.Start + args.Count >= _cache.Count ||
                args.Start + args.Count < 0)
            {
                adjustedCount = _cache.Count - args.Start;
            }

            //Create our list of changes.  We can have at most one.
            List <PageCacheChange> changes = new List <PageCacheChange>(1);

            //Now make the change if there is one to make.
            if (adjustedCount > 0)
            {
                PageCacheChange change = DirtyRange(args.Start, adjustedCount);
                if (change != null)
                {
                    changes.Add(change);
                }

                //Fire off our PageCacheChanged event.
                FirePageCacheChangedEvent(changes);
            }

            //Fire the PagesChanged event.
            if (PagesChanged != null)
            {
                PagesChanged(this, args);
            }

            return(null);
        }
 // Token: 0x06007156 RID: 29014 RVA: 0x00206FE4 File Offset: 0x002051E4
 private void ClearCache()
 {
     if (this._cache.Count > 0)
     {
         List <PageCacheChange> list = new List <PageCacheChange>(1);
         PageCacheChange        item = new PageCacheChange(0, this._cache.Count, PageCacheChangeType.Remove);
         list.Add(item);
         this._cache.Clear();
         this.FirePageCacheChangedEvent(list);
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Clears out the current cache and lets listeners know of the change.
        /// </summary>
        private void ClearCache()
        {
            if (_cache.Count > 0)
            {
                //Build our list of changes
                List <PageCacheChange> changes = new List <PageCacheChange>(1);
                //This change indicates that all of the pages were removed from the cache.
                PageCacheChange change = new PageCacheChange(0, _cache.Count, PageCacheChangeType.Remove);
                changes.Add(change);

                //Clear the cache
                _cache.Clear();

                //Fire the event.
                FirePageCacheChangedEvent(changes);
            }
        }
        // Token: 0x06007151 RID: 29009 RVA: 0x00206D48 File Offset: 0x00204F48
        private void SetDefaultPageSize(bool dirtyOnly)
        {
            List <PageCacheChange> list = new List <PageCacheChange>(this.PageCount);

            Invariant.Assert(this._defaultPageSize != Size.Empty, "Default Page Size is Empty.");
            for (int i = 0; i < this._cache.Count; i++)
            {
                if (this._cache[i].Dirty || !dirtyOnly)
                {
                    PageCacheEntry newEntry;
                    newEntry.PageSize = this._defaultPageSize;
                    newEntry.Dirty    = true;
                    PageCacheChange pageCacheChange = this.UpdateEntry(i, newEntry);
                    if (pageCacheChange != null)
                    {
                        list.Add(pageCacheChange);
                    }
                }
            }
            this.FirePageCacheChangedEvent(list);
        }
Exemplo n.º 7
0
        /// <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);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Clears out the current cache and lets listeners know of the change.
        /// </summary>
        private void ClearCache()
        {
            if (_cache.Count > 0)
            {                
                //Build our list of changes
                List<PageCacheChange> changes = new List<PageCacheChange>(1);
                //This change indicates that all of the pages were removed from the cache.
                PageCacheChange change = new PageCacheChange(0, _cache.Count, PageCacheChangeType.Remove);
                changes.Add(change);

                //Clear the cache
                _cache.Clear();
               
                //Fire the event.
                FirePageCacheChangedEvent(changes);
            }
        }
Exemplo n.º 9
0
        /// <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: 0x0600714F RID: 29007 RVA: 0x00206BA0 File Offset: 0x00204DA0
        private object GetPageCompletedDelegate(object parameter)
        {
            GetPageCompletedEventArgs getPageCompletedEventArgs = parameter as GetPageCompletedEventArgs;

            if (getPageCompletedEventArgs == null)
            {
                throw new ArgumentOutOfRangeException("parameter");
            }
            bool flag = this._pageDestroyedWatcher.IsDestroyed(getPageCompletedEventArgs.DocumentPage);

            this._pageDestroyedWatcher.RemovePage(getPageCompletedEventArgs.DocumentPage);
            if (flag)
            {
                return(null);
            }
            if (!getPageCompletedEventArgs.Cancelled && getPageCompletedEventArgs.Error == null && getPageCompletedEventArgs.DocumentPage != DocumentPage.Missing)
            {
                if (getPageCompletedEventArgs.DocumentPage.Size == Size.Empty)
                {
                    throw new ArgumentOutOfRangeException("args");
                }
                PageCacheEntry pageCacheEntry;
                pageCacheEntry.PageSize = getPageCompletedEventArgs.DocumentPage.Size;
                pageCacheEntry.Dirty    = false;
                List <PageCacheChange> list = new List <PageCacheChange>(2);
                if (getPageCompletedEventArgs.PageNumber > this._cache.Count - 1)
                {
                    PageCacheChange pageCacheChange = this.AddRange(getPageCompletedEventArgs.PageNumber, 1);
                    if (pageCacheChange != null)
                    {
                        list.Add(pageCacheChange);
                    }
                    pageCacheChange = this.UpdateEntry(getPageCompletedEventArgs.PageNumber, pageCacheEntry);
                    if (pageCacheChange != null)
                    {
                        list.Add(pageCacheChange);
                    }
                }
                else
                {
                    PageCacheChange pageCacheChange = this.UpdateEntry(getPageCompletedEventArgs.PageNumber, pageCacheEntry);
                    if (pageCacheChange != null)
                    {
                        list.Add(pageCacheChange);
                    }
                }
                if (this._isDefaultSizeKnown && pageCacheEntry.PageSize != this._lastPageSize)
                {
                    this._dynamicPageSizes = true;
                }
                this._lastPageSize = pageCacheEntry.PageSize;
                if (!this._isDefaultSizeKnown)
                {
                    this._defaultPageSize    = pageCacheEntry.PageSize;
                    this._isDefaultSizeKnown = true;
                    this.SetDefaultPageSize(true);
                }
                this.FirePageCacheChangedEvent(list);
            }
            if (this.GetPageCompleted != null)
            {
                this.GetPageCompleted(this, getPageCompletedEventArgs);
            }
            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);
        }
Exemplo n.º 12
0
        // Token: 0x060071E1 RID: 29153 RVA: 0x00209034 File Offset: 0x00207234
        private void OnPageCacheChanged(object sender, PageCacheChangedEventArgs args)
        {
            if (this._isLayoutCompleted)
            {
                List <RowCacheChange> list = new List <RowCacheChange>(args.Changes.Count);
                for (int i = 0; i < args.Changes.Count; i++)
                {
                    PageCacheChange pageCacheChange = args.Changes[i];
                    switch (pageCacheChange.Type)
                    {
                    case PageCacheChangeType.Add:
                    case PageCacheChangeType.Update:
                        if (pageCacheChange.Start > this.LastPageInCache)
                        {
                            RowCacheChange rowCacheChange = this.AddPageRange(pageCacheChange.Start, pageCacheChange.Count);
                            if (rowCacheChange != null)
                            {
                                list.Add(rowCacheChange);
                            }
                        }
                        else if (pageCacheChange.Start + pageCacheChange.Count - 1 <= this.LastPageInCache)
                        {
                            RowCacheChange rowCacheChange2 = this.UpdatePageRange(pageCacheChange.Start, pageCacheChange.Count);
                            if (rowCacheChange2 != null)
                            {
                                list.Add(rowCacheChange2);
                            }
                        }
                        else
                        {
                            RowCacheChange rowCacheChange3 = this.UpdatePageRange(pageCacheChange.Start, this.LastPageInCache - pageCacheChange.Start);
                            if (rowCacheChange3 != null)
                            {
                                list.Add(rowCacheChange3);
                            }
                            rowCacheChange3 = this.AddPageRange(this.LastPageInCache + 1, pageCacheChange.Count - (this.LastPageInCache - pageCacheChange.Start));
                            if (rowCacheChange3 != null)
                            {
                                list.Add(rowCacheChange3);
                            }
                        }
                        break;

                    case PageCacheChangeType.Remove:
                        if (this.PageCache.PageCount - 1 < this.LastPageInCache)
                        {
                            RowCacheChange rowCacheChange4 = this.TrimPageRange(this.PageCache.PageCount);
                            if (rowCacheChange4 != null)
                            {
                                list.Add(rowCacheChange4);
                            }
                        }
                        if (this._rowCache.Count <= 1 && (this._rowCache.Count == 0 || this._rowCache[0].PageCount < this._layoutColumns))
                        {
                            this.RecalcRows(0, this._layoutColumns);
                        }
                        break;

                    default:
                        throw new ArgumentOutOfRangeException("args");
                    }
                }
                RowCacheChangedEventArgs e = new RowCacheChangedEventArgs(list);
                this.RowCacheChanged(this, e);
                return;
            }
            if (this._isLayoutRequested)
            {
                this.RecalcRows(this._layoutPivotPage, this._layoutColumns);
            }
        }