view Chronosv2/source/ApplicationStateObserver.cs @ 21:dfc81f8bb838

working version for sttocks except ui within metrowpf
author adminsh@apollo
date Tue, 20 Mar 2012 15:07:31 +0000
parents 741981715d94
children
line wrap: on
line source


using System;
using System.Windows;
using System.Windows.Shell;
using Chronos.Authentication;
using nRoute.ApplicationServices;
using nRoute.Components.Composition;
using nRoute.Components.Messaging;

namespace Chronos
{
    /// <summary>
    /// Dedicated observer for application state notifications
    /// </summary>
    [MapChannelObserver(typeof(ApplicationStateInfo), 
        InitializationMode=InitializationMode.WhenAvailable,
        Lifetime=InstanceLifetime.Singleton,
        ThreadOption=ThreadOption.UIThread)]
    public sealed class ApplicationStateObserver : IObserver<ApplicationStateInfo>
    {
        #region · Fields ·

        private SplashScreen splashScreen;

        #endregion

        #region · IObserver<ApplicationStateInfo> Members ·

        /// <summary>
        /// Notifies the observer that the provider has finished sending push-based notifications.
        /// </summary>
        public void OnCompleted()
        {
        }

        /// <summary>
        /// Notifies the observer that the provider has experienced an error condition.
        /// </summary>
        /// <param name="error">An object that provides additional information about the error.</param>
        public void OnError(Exception error)
        {
        }

        /// <summary>
        ///  Provides the observer with new data.
        /// </summary>
        /// <param name="value">The current notification information.</param>
        public void OnNext(ApplicationStateInfo value)
        {
            if (value.CurrentState == ApplicationState.Starting)
            {
                this.splashScreen = new SplashScreen("SplashScreen.png");
                this.splashScreen.Show(false);
            }
            else if (value.CurrentState == ApplicationState.Started)
            {
                // Close the splash screen
                if (this.splashScreen != null)
                {
                    this.splashScreen.Close(new TimeSpan(0, 0, 1));
                    this.splashScreen = null;
                }

                // Initialize the JumpList
                this.InitializeJumpList();

                // Publish LogOn Request 
                Channel<AuthenticationInfo>.Public.OnNext
                (
                    new AuthenticationInfo
                    {
                        Action = AuthenticationAction.LogOn
                    }, 
                    true
                );
            }
        }

        #endregion

        #region · Private Methods ·

        private void InitializeJumpList()
        {
            if (App.RunningOnWin7)
            {
                JumpList jl = JumpList.GetJumpList(nRoute.ApplicationServices.Application.Current);

                if (jl == null)
                {
                    jl = new JumpList();
                    JumpList.SetJumpList(nRoute.ApplicationServices.Application.Current, jl);
                }

                jl.Apply();
            }
        }

        #endregion
    }
}