Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NavigationManager{TPageIdentifier}"/> class.
        /// To gather page definitions it searches for classes marked with <see cref="NavigationPageAttribute"/> from <see cref="Assembly.GetCallingAssembly"/>
        /// </summary>
        /// <param name="fragmentManager">Fragment manager of main activity.</param>
        /// <param name="rootFrame">The view which will be used as the one being replaced with new Views</param>
        /// <param name="viewModelResolver">Class used to resolve ViewModels for pages derived from <see cref="FragmentBase{TViewModel}"/></param>
        /// <param name="stackResolver">Class allowing to differentiate to which stack given indentigier belongs.</param>
        /// <param name="interceptTransaction">Delegate allowing to modify <see cref="FragmentTransaction"/> before commiting.</param>
        public NavigationManager(
            FragmentManager fragmentManager,
            ViewGroup rootFrame,
            IViewModelResolver viewModelResolver = null,
            IStackResolver <NavigationFragmentBase, TPageIdentifier> stackResolver = null,
            Action <FragmentTransaction> interceptTransaction = null)
            : base(stackResolver)
        {
            _fragmentManager      = fragmentManager;
            _rootFrame            = rootFrame;
            _interceptTransaction = interceptTransaction;

            NavigationFragmentBase.ViewModelResolver = viewModelResolver;

            var types = Assembly.GetCallingAssembly().GetTypes();

            foreach (var type in types)
            {
                var attr = type.GetTypeInfo().GetCustomAttribute <NavigationPageAttribute>();

                if (attr != null)
                {
                    IPageProvider <NavigationFragmentBase> provider = null;

                    switch (attr.PageProviderType)
                    {
                    case NavigationPageAttribute.PageProvider.Cached:
                        provider = ObtainProviderFromType(typeof(CachedPageProvider <>));
                        break;

                    case NavigationPageAttribute.PageProvider.Oneshot:
                        provider = ObtainProviderFromType(typeof(OneshotPageProvider <>));
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    PageDefinitions.Add((TPageIdentifier)(object)attr.Page, provider);
                }

                IPageProvider <NavigationFragmentBase> ObtainProviderFromType(Type providerType)
                {
                    return((IPageProvider <NavigationFragmentBase>)providerType.MakeGenericType(type)
                           .GetConstructor(new Type[] { })
                           .Invoke(null));
                }
            }

            foreach (var pageDefinition in PageDefinitions)
            {
                pageDefinition.Value.PageIdentifier = pageDefinition.Key;
            }
        }
Example #2
0
        public MainViewModel(PageNavigationModel pageNavigation)
        {
            _presentationNavigation = new PresentationNavigationModel();

            _title = new PageTitle(_presentationNavigation);
            _slidesAndCode = new PageSlidesAndCode(_presentationNavigation);
            _aboutMe = new PageAboutMe(_presentationNavigation);
            _ericBrewer = new PageEricBrewer(_presentationNavigation);
            _udiDahan = new PageUdiDahan(_presentationNavigation);
            _gregYoung = new PageGregYoung(_presentationNavigation);
            _definitions = new PageDefinitions(_presentationNavigation);
            _proof = new PageProof(_presentationNavigation);
            _choices = new PageChoices(_presentationNavigation);
            _centralDatabase = new Pages.PageCentralDatabase(_presentationNavigation);
            _cqrs = new Pages.PageCQRS(_presentationNavigation);
            _eventSourcing = new Pages.PageEventSourcing(_presentationNavigation);
            _conclusion = new PageConclusion(_presentationNavigation);

            _pages = new IPage[]
            {
                _title,
                _slidesAndCode,
                _aboutMe,
                _ericBrewer,
                _udiDahan,
                _gregYoung,
                _definitions,
                _proof,
                _choices,
                _centralDatabase,
                _cqrs,
                _eventSourcing,
                _conclusion
            };

            _inertialScale = new InertialProperty(() => (float)PageNavigation.Scale);
            _positionX = new InertialProperty(() => (float)PageNavigation.Position.X);
            _positionY = new InertialProperty(() => (float)PageNavigation.Position.Y);

            _timer = new DispatcherTimer();
            _timer.Interval = TimeSpan.FromSeconds(0.05);
            _timer.Tick += delegate(object sender, EventArgs e)
            {
                _inertialScale.OnTimer();
                _positionX.OnTimer();
                _positionY.OnTimer();
            };
            _timer.Start();
        }
Example #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NavigationManager{TPageIdentifier}"/> class.
        /// To gather page definitions it searches for classes marked with <see cref="NavigationPageAttribute"/> from <see cref="Assembly.GetCallingAssembly"/>
        /// </summary>
        /// <param name="navigationController">Root navigation controller.</param>
        /// <param name="viewModelResolver">Resolver to assign proper ViewModel instances.</param>
        /// <param name="stackResolver">Class allowing to differentiate to which stack given indentigier belongs.</param>
        public NavigationManager(
            UINavigationController navigationController,
            IViewModelResolver viewModelResolver,
            IStackResolver <INavigationPage, TPageIdentifier> stackResolver = null)
            : base(stackResolver)
        {
            _navigationController = navigationController;

            ArgumentNavigationViewControler.ViewModelResolver        = viewModelResolver;
            ArgumentNavigationTabBarViewController.ViewModelResolver = viewModelResolver;

            var types = Assembly.GetCallingAssembly().GetTypes();

            foreach (var type in types)
            {
                var attr = type.GetTypeInfo().GetCustomAttribute <NavigationPageAttribute>();

                if (attr != null)
                {
                    IPageProvider <INavigationPage> providerType = null;

                    if (string.IsNullOrEmpty(attr.StoryboardName))
                    {
                        switch (attr.PageProviderType)
                        {
                        case NavigationPageAttribute.PageProvider.Cached:
                            providerType = ObtainProviderFromType(typeof(CachedPageProvider <>));
                            break;

                        case NavigationPageAttribute.PageProvider.Oneshot:
                            providerType = ObtainProviderFromType(typeof(OneshotPageProvider <>));
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }
                    else
                    {
                        switch (attr.PageProviderType)
                        {
                        case NavigationPageAttribute.PageProvider.Cached:
                            providerType = ObtainProviderFromType(typeof(StoryboardCachedPageProvider <>), true);
                            break;

                        case NavigationPageAttribute.PageProvider.Oneshot:
                            providerType = ObtainProviderFromType(typeof(StoryboardOneshotPageProvider <>), true);
                            break;

                        default:
                            throw new ArgumentOutOfRangeException();
                        }
                    }

                    PageDefinitions.Add((TPageIdentifier)(object)attr.Page, providerType);
                }

                IPageProvider <INavigationPage> ObtainProviderFromType(Type providerType, bool isStoryboard = false)
                {
                    return((IPageProvider <INavigationPage>)providerType
                           .MakeGenericType(type)
                           .GetConstructor(isStoryboard ? new[] { typeof(NavigationPageAttribute) } : new Type[] { })
                           .Invoke(isStoryboard ? new object[] { attr } : null));
                }
            }

            foreach (var pageDefinition in PageDefinitions)
            {
                pageDefinition.Value.PageIdentifier = pageDefinition.Key;
            }
        }
Example #4
0
 private void Init()
 {
     Versions = new ContentClassVersions(this, Caching.Enabled);
     PreassignedKeywords = new PreassignedKeywords(this, Caching.Enabled);
     PageDefinitions = new PageDefinitions(this, Caching.Enabled);
     TemplateVariants = new TemplateVariants(this, Caching.Enabled);
     Elements = new ContentClassElements(this, Caching.Enabled);
     ProjectVariantAssignments = new ProjectVariantAssignments(this, Caching.Enabled);
     EditableAreaSettings = new CCEditableAreaSettings(this);
 }