// Token: 0x06007152 RID: 29010 RVA: 0x00206DD8 File Offset: 0x00204FD8
 private void FirePageCacheChangedEvent(List <PageCacheChange> changes)
 {
     if (this.PageCacheChanged != null && changes != null && changes.Count > 0)
     {
         PageCacheChangedEventArgs e = new PageCacheChangedEventArgs(changes);
         this.PageCacheChanged(this, e);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Fires the PageCacheChanged event with the specified changelist.
        /// </summary>
        /// <param name="changes">The changes to pass along with the event.</param>
        private void FirePageCacheChangedEvent(List <PageCacheChange> changes)
        {
            Debug.Assert(changes != null, "Attempt to fire PageCacheChangedEvent with null change set.");

            //Fire off our PageCacheChangedEvent if we have any changes
            if (PageCacheChanged != null && changes != null && changes.Count > 0)
            {
                PageCacheChangedEventArgs args = new PageCacheChangedEventArgs(changes);
                PageCacheChanged(this, args);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Event Handler for the PageCacheChanged event.  Called whenever an entry in the
        /// PageCache is changed.  When this happens, the RowCache needs to Add, Remove, or
        /// Update row entries corresponding to the pages changed.
        /// </summary>
        /// <param name="sender">The object that sent this event.</param>
        /// <param name="args">The associated arguments.</param>
        private void OnPageCacheChanged(object sender, PageCacheChangedEventArgs args)
        {            
            //If we have a computed layout then we'll add/remove/frob rows to conform
            //to that layout.            
            if (_isLayoutCompleted)
            {
                List<RowCacheChange> changes = new List<RowCacheChange>(args.Changes.Count);
                for (int i = 0; i < args.Changes.Count; i++)
                {                    
                    PageCacheChange pageChange = args.Changes[i];
                    switch (pageChange.Type)
                    {
                        case PageCacheChangeType.Add:
                        case PageCacheChangeType.Update:
                            if (pageChange.Start > LastPageInCache)
                            {
                                //Completely new pages, so we add new cache entries
                                RowCacheChange change = AddPageRange(pageChange.Start, pageChange.Count);
                                if (change != null)
                                {
                                    changes.Add(change);
                                }
                            }
                            else
                            {
                                if (pageChange.Start + pageChange.Count - 1 <= LastPageInCache)
                                {
                                    //All pre-existing pages, so we just update the current cache entries.
                                    RowCacheChange change = UpdatePageRange(pageChange.Start, pageChange.Count);
                                    if (change != null)
                                    {
                                        changes.Add(change);
                                    }
                                }
                                else
                                {
                                    //Some pre-existing pages, some new.                        
                                    RowCacheChange change;
                                    change = UpdatePageRange(pageChange.Start, LastPageInCache - pageChange.Start);
                                    if (change != null)
                                    {
                                        changes.Add(change);
                                    }
                                    change = AddPageRange(LastPageInCache + 1, pageChange.Count - (LastPageInCache - pageChange.Start));
                                    if (change != null)
                                    {
                                        changes.Add(change);
                                    }
                                }
                            }
                            break;

                        case PageCacheChangeType.Remove:
                            //If PageCount is now less than the size of our cache due to repagination
                            //we remove the corresponding entries from our row cache.
                            if (PageCache.PageCount - 1 < LastPageInCache)
                            {
                                //Remove pages starting at the first no-longer-existent page.
                                //(PageCache.PageCount now points to the first dead page)
                                RowCacheChange change = TrimPageRange(PageCache.PageCount);
                                if (change != null)
                                {
                                    changes.Add(change);
                                }
                            }

                            //If because of the above trimming we have fewer pages left 
                            //in the document than the columns that were initially requested
                            //We'll need to recalc our layout from scratch.
                            //First we check to see if we have one or fewer rows left.
                            if (_rowCache.Count <= 1)
                            {
                                //If we have either no rows left or the remaining row has
                                //less than _layoutColumns pages on it, we need to recalc from the first page.
                                if (_rowCache.Count == 0 || _rowCache[0].PageCount < _layoutColumns )
                                {
                                    RecalcRows(0, _layoutColumns);
                                }                                
                            }
                            break;

                        default:
                            throw new ArgumentOutOfRangeException("args");                        
                    }                    
                }
                
                RowCacheChangedEventArgs newArgs = new RowCacheChangedEventArgs(changes);
                RowCacheChanged(this, newArgs);
            }
            else if (_isLayoutRequested)
            {
                //We've had a request to create a layout previously, but didn't have enough pages to do so before.
                //Try it now.
                RecalcRows(_layoutPivotPage, _layoutColumns);
            }            
        }   
Exemplo n.º 4
0
        /// <summary>
        /// Fires the PageCacheChanged event with the specified changelist.
        /// </summary>
        /// <param name="changes">The changes to pass along with the event.</param>
        private void FirePageCacheChangedEvent(List<PageCacheChange> changes)
        {
            Debug.Assert(changes != null, "Attempt to fire PageCacheChangedEvent with null change set.");

            //Fire off our PageCacheChangedEvent if we have any changes
            if (PageCacheChanged != null && changes != null && changes.Count > 0)
            {
                PageCacheChangedEventArgs args = new PageCacheChangedEventArgs(changes);
                PageCacheChanged(this, args);
            }
        }
Exemplo n.º 5
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);
            }
        }