DocumentApplicationJournalEntry.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Framework / MS / Internal / documents / Application / DocumentApplicationJournalEntry.cs / 1305600 / DocumentApplicationJournalEntry.cs

                            //---------------------------------------------------------------------------- 
//
// 
//    Copyright (C) Microsoft Corporation.  All rights reserved.
//  
//
// Description: Attached to custom journal entries created for changes in the DocumentApplication's 
//   UI state. 
//
// History: 
//  06/24/2005 - JeremyNS created
//
//---------------------------------------------------------------------------
 
using System;
using System.Runtime.Serialization; 
using System.Security; 
using System.Security.Permissions;
using System.Diagnostics; 
using System.Windows;
using System.Windows.Documents;
using System.Windows.Navigation;
using System.Windows.Controls; 

namespace MS.Internal.Documents.Application 
{ 
    /// 
    /// DocumentApplicationJournalEntry is not a real journal entry, just the CustomContentState 
    /// attached to one. It wraps a DocumentApplicationState object, which is the actual view state.
    /// The split is needed because PresentationUI cannot access internal Framework classes and methods.
    /// 
    [Serializable] 
    internal sealed class DocumentApplicationJournalEntry : System.Windows.Navigation.CustomContentState
    { 
        //----------------------------------------------------- 
        //
        //  Constructors 
        //
        //-----------------------------------------------------
        /// 
        /// Constructs a DocumentApplicationJournalEntry 
        /// 
        /// State of the DocumentApplication to journal 
        /// Name of the journal entry to display in the UI. 
        /// If this is null it will default to the URI source.
        public DocumentApplicationJournalEntry(object state, string name) 
        {
            Invariant.Assert(state is DocumentApplicationState,
                "state should be of type DocumentApplicationState");
 
            // Store parameters locally.
            _state = state; 
            _displayName = name; 
        }
 
        public DocumentApplicationJournalEntry(object state):
            this(state, null)
        {
        } 

        //------------------------------------------------------ 
        // 
        //  Public Methods
        // 
        //-----------------------------------------------------
        /// 
        /// Used to reset the UI to state of this entry
        ///  
        /// NavigationService currently running
        /// Navigation direction 
        ///  
        /// Critical: set_StoredDocumentApplicationState is defined in a non-APTCA assembly.
        /// TreatAsSafe: call to set_StoredDocumentApplicationState does not entail any risk. 
        /// 
        [SecurityCritical, SecurityTreatAsSafe]
        public override void Replay(NavigationService navigationService, NavigationMode mode)
        { 
            ContentControl navigator = (ContentControl)navigationService.INavigatorHost;
            // Find a reference to the DocumentViewer hosted in the NavigationWindow 
            // On initial history navigation in the browser, the window's layout may not have been 
            // done yet. ApplyTemplate() causes the viewer to be created.
            navigator.ApplyTemplate(); 
            DocumentApplicationDocumentViewer docViewer = navigator.Template.FindName(
                "PUIDocumentApplicationDocumentViewer", navigator)
                as DocumentApplicationDocumentViewer;
            Debug.Assert(docViewer != null, "PUIDocumentApplicationDocumentViewer not found."); 
            if (docViewer != null)
            { 
                // Set the new state on the DocumentViewer 
                if (_state is DocumentApplicationState)
                { 
                    docViewer.StoredDocumentApplicationState = (DocumentApplicationState)_state;
                }

                // Check that a Document exists. 
                if (navigationService.Content != null)
                { 
                    IDocumentPaginatorSource document = navigationService.Content as IDocumentPaginatorSource; 

                    // If the document has already been paginated (could happen in the 
                    // case of a fragment navigation), then set the DocumentViewer to the
                    // new state that was set.
                    if ((document != null) && (document.DocumentPaginator.IsPageCountValid))
                    { 
                        docViewer.SetUIToStoredState();
                    } 
                } 
            }
        } 

        public override string JournalEntryName
        {
            get { return _displayName; } 
        }
 
        //------------------------------------------------------ 
        //
        //  Private Fields. 
        //
        //------------------------------------------------------

        // The DocumentApplicationState has been weakly-typed to avoid PresentationFramework 
        // having a type dependency on PresentationUI.  The perf impact of the weak
        // typed variables in this case was determined to be much less than forcing the load 
        // of a new assembly when Assembly.GetTypes was called on PresentationFramework. 
        private object _state; // DocumentApplicationState
 
        private string _displayName;

    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK