/// <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; } }
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(); }
/// <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; } }
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); }