예제 #1
0
        /// <summary>
        /// <see cref="ITextView.BringPositionIntoViewAsync"/>
        /// </summary>
        internal override void BringPositionIntoViewAsync(ITextPointer position, object userState) 
        {
            DocumentPageTextView pageTextView; 
            int pageNumber; 
            BringPositionIntoViewRequest pendingRequest;
 
            // Verify that layout information is valid. Cannot continue if not valid.
            if (!IsValid)
            {
                throw new InvalidOperationException(SR.Get(SRID.TextViewInvalidLayout)); 
            }
            if (_pendingRequest != null) 
            { 
                // Ignore new request if the previous is not completed yet.
                OnBringPositionIntoViewCompleted(new BringPositionIntoViewCompletedEventArgs( 
                    position, false, null, false, userState));
            }

            pendingRequest = new BringPositionIntoViewRequest(position, userState); 
            _pendingRequest = pendingRequest;
 
            pageTextView = GetTextViewFromPosition(position); 
            // If the position is currently in the view, do nothing.
            // Otherwise, let the viewer handle the request. 
            if (pageTextView != null)
            {
                pendingRequest.Succeeded = true;
                OnBringPositionIntoViewCompleted(pendingRequest); 
            }
            else 
            { 
                if (position is ContentPosition)
                { 
                    DynamicDocumentPaginator documentPaginator = _viewer.Document.DocumentPaginator as DynamicDocumentPaginator;
                    if (documentPaginator != null)
                    {
                        pageNumber = documentPaginator.GetPageNumber((ContentPosition)position) + 1; 
                        if (_viewer.CanGoToPage(pageNumber))
                        { 
                            _viewer.GoToPage(pageNumber); 
                        }
                        else 
                        {
                            OnBringPositionIntoViewCompleted(pendingRequest);
                        }
                    } 
                    else
                    { 
                        OnBringPositionIntoViewCompleted(pendingRequest); 
                    }
                } 
                else
                {
                    OnBringPositionIntoViewCompleted(pendingRequest);
                } 
            }
        } 
예제 #2
0
 /// <summary> 
 /// Fires BringPositionIntoViewCompleted event.
 /// </summary> 
 private void OnBringPositionIntoViewCompleted(BringPositionIntoViewRequest request)
 {
     _pendingRequest = null;
     OnBringPositionIntoViewCompleted(new BringPositionIntoViewCompletedEventArgs( 
         request.Position, request.Succeeded, null, false, request.UserState));
 }