private IPageAnimation GetPageAnimanition(NavigationAnimation animation) { switch (animation) { case NavigationAnimation.SlideTopToBottom: return(new SlidePageAnimation() { Duration = AnimationDuration.Short, Type = AnimationType.Slide, Subtype = AnimationSubtype.FromTop }); case NavigationAnimation.SlideBottomToTop: return(new SlidePageAnimation() { Duration = AnimationDuration.Short, Type = AnimationType.Slide, Subtype = AnimationSubtype.FromBottom }); case NavigationAnimation.SlideLeftToRight: return(new SlidePageAnimation() { Duration = AnimationDuration.Short, Type = AnimationType.Slide, Subtype = AnimationSubtype.FromRight }); case NavigationAnimation.SlideRightToLeft: return(new SlidePageAnimation() { Duration = AnimationDuration.Short, Type = AnimationType.Slide, Subtype = AnimationSubtype.FromLeft }); default: return(null); } }
public async Task NavigateToViewModelAsync(IViewModel viewModel, NavigationAnimation animation, Color?color = null, bool animated = false, bool modal = false) { try { AnimationPage targetPage = _pageLocator.ResolvePage(viewModel); if (targetPage != null) { if (animation != NavigationAnimation.None) { targetPage.PageAnimation = GetPageAnimanition(animation); animated = true; } SetBarBackgroundColor(targetPage, color ?? Color.Default); SetStatusBarColor(color ?? Color.Default); if (!modal) { await Navigator.PushAsync(targetPage, animated); } else { await Navigator.PushModalAsync(targetPage, animated); } } } catch (Exception e) { Console.WriteLine(e); throw; } }
public void NavigateToExitServerSelection(NavigationAnimation animation) { __MainWindowController.ServerListViewModel.SetSelectedServer(__MainWindowController.MainViewModel.SelectedExitServer, ServerSelectionType.ExitServer); __MainWindowController.ShowServersPage(animation); CurrentPage = NavigationTarget.ServerSelection; }
public void NavigateToSessionLimitPage(NavigationAnimation animation) { navigate(() => { // firewall should be disabled on LogIn page __MainWindowController.MainViewModel.ForceDisconnectAndDisableFirewall(); // if user is authenticated - do the LogOut first if (__MainWindowController.AppState.IsLoggedIn()) { if (CurrentPage == NavigationTarget.LogOutPage) { return; } __MainWindowController.ShowLogOutPage(animation, showSessionLimit: true); CurrentPage = NavigationTarget.LogOutPage; } else { if (CurrentPage == NavigationTarget.SessionLimitPage) { return; } __MainWindowController.ShowSessionLimitPage(animation); CurrentPage = NavigationTarget.SessionLimitPage; } }); }
public async Task PopModalAsync(NavigationAnimation animation, bool animated = false) { if (Navigator.ModalStack.Count > 0) { await Navigator.PopModalAsync(animated); } }
public void NavigateToLogInPage(NavigationAnimation animation, bool doLogIn = false, bool doForceLogin = false) { // firewall should be disabled on LogIn page __MainWindowController.MainViewModel.ForceDisconnectAndDisableFirewall(); __MainWindowController.ShowLogInPage(animation, doLogIn, doForceLogin); CurrentPage = NavigationTarget.LogInPage; }
public void ShowMainPage(NavigationAnimation animation) { // update account menu item App.UpdateTrayMenuItems(AppState, MainViewModel); // Hide 'Back' button on window title HideBackButton(); // Show title Title = StringUtils.String("Title", "IVPN"); AnimatedNavigate(DocumentFrame, animation); }
public void NavigateToMainPage(NavigationAnimation animation) { // Avoid enter Main page when we are logging-out. Can happen on startup (on first check of session status) when session was deleted from API server. // TODO: bad architecture. if (CurrentPage == NavigationTarget.LogOutPage) { return; } __MainWindowController.ShowMainPage(animation); CurrentPage = NavigationTarget.MainPage; }
public void NavigateToInitPage(NavigationAnimation animation) { navigate(() => { if (CurrentPage == NavigationTarget.InitPage) { return; } __MainWindowController.ShowInitPage(animation); CurrentPage = NavigationTarget.InitPage; }); }
public void NavigateToAutomaticServerConfiguration(NavigationAnimation animation = NavigationAnimation.FadeToLeft) { navigate(() => { if (CurrentPage == NavigationTarget.AutomaticServerConfiguration) { return; } __MainWindowController.ShowFastestServerConfiguration(animation); CurrentPage = NavigationTarget.AutomaticServerConfiguration; }); }
public void NavigateToLogOutPage(NavigationAnimation animation) { try { __MainWindowController.ShowLogOutPage(animation); CurrentPage = NavigationTarget.LogOutPage; } catch { NavigateToLogInPage(NavigationAnimation.FadeToRight); CurrentPage = NavigationTarget.LogInPage; } }
public void NavigateToEntryServerSelection(NavigationAnimation animation) { navigate(() => { __MainWindowController.ServerListViewModel.SetSelectedServer(__MainWindowController.MainViewModel.SelectedServer, ServerSelectionType.EntryServer); if (CurrentPage == NavigationTarget.ServerSelection) { return; } __MainWindowController.ShowServersPage(animation); CurrentPage = NavigationTarget.ServerSelection; }); }
public void NavigateToServerSelection(NavigationAnimation animation) { if (__MainWindowController.MainViewModel.IsAutomaticServerSelection) { __MainWindowController.ServerListViewModel.SetAutomaticServerSelection(ServerSelectionType.SingleServer); } else { __MainWindowController.ServerListViewModel.SetSelectedServer(__MainWindowController.MainViewModel.SelectedServer, ServerSelectionType.SingleServer); } __MainWindowController.ShowServersPage(animation); CurrentPage = NavigationTarget.ServerSelection; }
public void ShowServersPage(NavigationAnimation animation) { double height = DocumentFrame.ActualHeight; if (height <= 0) { height = FastestServerConfigFrame.ActualHeight; } ServersFrame.Height = height; AnimatedNavigate(ServersFrame, animation, () => { ShowBackButton(); ServerListViewModel.Navigated(); }); }
internal void NavigateDocumentPage(NavigationAnimation navigationAnimation, Page newPage) { p_Document pageDocument = DocumentFrame.Content as p_Document; if (pageDocument == null) { throw new Exception("Main page needs to be p_Document object"); } p_DocumentMenu documentMenu = pageDocument.DocumentFrame.Content as p_DocumentMenu; if (documentMenu == null) { throw new Exception("Document page cannot be found"); } AnimatedNavigate(documentMenu.DocumentPageFrame, newPage, navigationAnimation); }
public AnimationNavigationPage SetMainPage(Type targetType, NavigationAnimation animation, Color?color = null, object args = null) { try { var page = _pageLocator.ResolvePageAndViewModel(targetType, args); if (animation != NavigationAnimation.None) { page.PageAnimation = GetPageAnimanition(animation); } _navigationPage = new AnimationNavigationPage(page); SetBarBackgroundColor(_navigationPage, color ?? Color.Default); SetStatusBarColor(color ?? Color.Default); return(_navigationPage); } catch (Exception e) { Console.WriteLine(e); throw; } }
public void ShowMainPage(NavigationAnimation animation) { // run only on main UI thread if (Application.Current.Dispatcher.Thread != Thread.CurrentThread) { Application.Current.Dispatcher.Invoke(() => { ShowMainPage(animation); }); return; } // update account menu item App.UpdateTrayMenuItems(AppState, MainViewModel); // Hide 'Back' button on window title HideBackButton(); // Show title Title = StringUtils.String("Title", "IVPN"); AnimatedNavigate(DocumentFrame, animation); }
public void NavigateToLogOutPage(NavigationAnimation animation) { navigate(() => { if (CurrentPage == NavigationTarget.LogOutPage || CurrentPage == NavigationTarget.LogInPage) { return; } try { __MainWindowController.ShowLogOutPage(animation); CurrentPage = NavigationTarget.LogOutPage; } catch { NavigateToLogInPage(NavigationAnimation.FadeToRight); CurrentPage = NavigationTarget.LogInPage; } }); }
public void ShowLogInPage(NavigationAnimation animation, bool doLogIn = false, bool doForceLogin = false) { // update account menu item App.UpdateTrayMenuItems(AppState, MainViewModel); Action onComplete = null; if (doLogIn) { onComplete = new Action(() => { if (doForceLogin) { LogInViewModel.LogInAndDeleteAllSessionsCommand.Execute(null); } else { LogInViewModel.LogInCommand.Execute(null); } }); } AnimatedNavigate(LoginFrame, animation, onComplete); }
private async void GoBack_Cmd(object sender, ExecutedRoutedEventArgs e) { if (__NavigationStack.Count == 0) { return; } if (__NavigationStack.Count == 1) { await CloseProject(); return; } var navigationItem = __NavigationStack.Pop(); NavigationAnimation animation = NavigationAnimation.FadeToRight; if (navigationItem.Animation == NavigationAnimation.FadeUp) { animation = NavigationAnimation.FadeDown; } if (navigationItem.Animation == NavigationAnimation.FadeDown) { animation = NavigationAnimation.FadeUp; } if (navigationItem.Animation == NavigationAnimation.FadeToLeft) { animation = NavigationAnimation.FadeToRight; } if (navigationItem.Animation == NavigationAnimation.FadeToRight) { animation = NavigationAnimation.FadeToLeft; } AnimatedNavigate(navigationItem.Frame, navigationItem.Content as Page, animation, false); }
public void ShowFastestServerConfiguration(NavigationAnimation animation) { FastestServerConfigFrame.Height = ServersFrame.ActualHeight; AnimatedNavigate(FastestServerConfigFrame, animation, ShowBackButton); }
public void ShowInitPage(NavigationAnimation animation) { AnimatedNavigate(InitializationFrame, animation); }
public void ShowSingUpPage(NavigationAnimation animation) { OpenUrl(Constants.GetSignUpUrl()); }
public void ShowSessionLimitPage(NavigationAnimation animation) { AnimatedNavigate(SessionLimitFrame, animation); }
public void AnimatedNavigate(Frame targetFrame, Page newPage, NavigationAnimation navigationAnimation = NavigationAnimation.FadeToLeft, bool addToStack = true) { //var newFrame = CloneFrame(targetFrame); if (addToStack) { __NavigationStack.Push( new NavigationStackItem(targetFrame, targetFrame.Content, navigationAnimation)); } targetFrame.Content = newPage; //__TransitionTargetFrame = targetFrame; //__TransitionNewFrame = newFrame; double frameWidth = targetFrame.ActualWidth; double frameHeight = targetFrame.ActualHeight; TranslateTransform newFrameTransform = new TranslateTransform(); DoubleAnimation newFrameAnimation = new DoubleAnimation(); newFrameAnimation.AccelerationRatio = 1; newFrameAnimation.Completed += new EventHandler(AnimationCompleted); newFrameAnimation.Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)); TranslateTransform targetFrameTransform = new TranslateTransform(); DoubleAnimation targetFrameAnimation = new DoubleAnimation(); targetFrameAnimation.Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)); targetFrameAnimation.DecelerationRatio = 1; int animationLength; if (navigationAnimation == NavigationAnimation.FadeToLeft || navigationAnimation == NavigationAnimation.FadeToRight) { animationLength = 20;//(int)(frameWidth * ANIMATION_DISTANCE); } else { animationLength = 20;// (int)(frameHeight * ANIMATION_DISTANCE); } if (navigationAnimation == NavigationAnimation.FadeToLeft || navigationAnimation == NavigationAnimation.FadeUp) { newFrameAnimation.From = 0; newFrameAnimation.To = -animationLength; targetFrameAnimation.From = animationLength; targetFrameAnimation.To = 0; } else { newFrameAnimation.From = 0; newFrameAnimation.To = animationLength; targetFrameAnimation.From = -animationLength; targetFrameAnimation.To = 0; } DoubleAnimation opacityAnimation = new DoubleAnimation(); opacityAnimation.Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)); opacityAnimation.From = 1; opacityAnimation.To = 0; DoubleAnimation opacityAnimation2 = new DoubleAnimation(); opacityAnimation2.Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME / 2)); opacityAnimation2.From = 0; //opacityAnimation2.DecelerationRatio = 1; opacityAnimation2.To = 1; //newFrame.RenderTransform = newFrameTransform; targetFrame.RenderTransform = targetFrameTransform; //newFrame.BeginAnimation(Frame.OpacityProperty, opacityAnimation); targetFrame.BeginAnimation(Frame.OpacityProperty, opacityAnimation2); DependencyProperty translationProperty; if (navigationAnimation == NavigationAnimation.FadeToLeft || navigationAnimation == NavigationAnimation.FadeToRight) { translationProperty = TranslateTransform.XProperty; } else { translationProperty = TranslateTransform.YProperty; } newFrameTransform.BeginAnimation(translationProperty, newFrameAnimation); targetFrameTransform.BeginAnimation(translationProperty, targetFrameAnimation); }
public NavigationStackItem(Frame frame, object content, NavigationAnimation animation) { __Frame = frame; __Content = content; __Animation = animation; }
public NavigationRequest(Frame frame, NavigationAnimation animation, Action onComplete) { Frame = frame; Animation = animation; OnComplete = onComplete; }
public void AnimatedNavigate(Frame targetFrame, NavigationAnimation navigationAnimation = NavigationAnimation.FadeToLeft, Action onComplete = null) { if (!Dispatcher.CheckAccess()) { GuiUtils.InvokeInGuiThread(this, () => { AnimatedNavigate(targetFrame, navigationAnimation, onComplete); }); return; } if (__NavigationInProgress) { __NavigationQueue.Enqueue(new NavigationRequest(targetFrame, navigationAnimation, onComplete)); return; } /* * bool shouldNavigate = __CurrentFrame != null && * __CurrentFrame != targetFrame; * * targetFrame.Visibility = Visibility.Visible; * * __TransitionFrame = __CurrentFrame; * __CurrentFrame = targetFrame; * * if (!shouldNavigate || * navigationAnimation == NavigationAnimation.None) * { * NavigationComplete(); * return; * } * * if (targetFrame != DocumentFrame && * targetFrame.Content != null && * DocumentFrame.Content != null) * { * ((Page)targetFrame.Content).MinHeight = ((Page)DocumentFrame.Content).ActualHeight; * } * * __NavigationInProgress = true; * * Frame documentFrame = targetFrame; * * TranslateTransform transitionFrameTransform = new TranslateTransform(); * DoubleAnimation transitionFrameAnimation = new DoubleAnimation(); * transitionFrameAnimation.Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)); * transitionFrameAnimation.Completed += (sender, args) => * { * NavigationComplete(); * onComplete?.Invoke(); * }; * transitionFrameAnimation.DecelerationRatio = 1; * * TranslateTransform documentFrameTransform = new TranslateTransform(); * DoubleAnimation documentFrameAnimation = new DoubleAnimation(); * documentFrameAnimation.Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)); * documentFrameAnimation.DecelerationRatio = 1; * * int animationLength = (int)DocumentFrame.ActualWidth; * if (animationLength == 0) * animationLength = (int) ActualWidth; * * if (navigationAnimation == NavigationAnimation.FadeToLeft || navigationAnimation == NavigationAnimation.FadeUp) * { * transitionFrameAnimation.From = 1; * transitionFrameAnimation.To = -animationLength + 1; // small overlapping is required for smooth transition * documentFrameAnimation.From = animationLength; * documentFrameAnimation.To = 0; * } * else * { * transitionFrameAnimation.From = 0; * transitionFrameAnimation.To = animationLength; * * documentFrameAnimation.From = -animationLength + 1; // small overlapping is required for smooth transition * documentFrameAnimation.To = 0; * } * * DoubleAnimation opacityAnimation = new DoubleAnimation * { * Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)), * From = 1, * To = 0.5 * }; * * DoubleAnimation opacityAnimation2 = new DoubleAnimation * { * Duration = new Duration(TimeSpan.FromSeconds(TRANSITION_TIME)), * From = 0.9, * To = 1 * }; * * documentFrame.RenderTransform = documentFrameTransform; * __TransitionFrame.RenderTransform = transitionFrameTransform; * * // opacity * __TransitionFrame.BeginAnimation(Frame.OpacityProperty, opacityAnimation); * documentFrame.BeginAnimation(Frame.OpacityProperty, opacityAnimation2); * * DependencyProperty translationProperty; * * if (navigationAnimation == NavigationAnimation.FadeToLeft || navigationAnimation == NavigationAnimation.FadeToRight) * translationProperty = TranslateTransform.XProperty; * else * translationProperty = TranslateTransform.YProperty; * * // move * transitionFrameTransform.BeginAnimation(translationProperty, transitionFrameAnimation); * documentFrameTransform.BeginAnimation(translationProperty, documentFrameAnimation); */ bool shouldNavigate = __CurrentFrame != null && __CurrentFrame != targetFrame; targetFrame.Visibility = Visibility.Visible; __TransitionFrame = __CurrentFrame; __CurrentFrame = targetFrame; if (!shouldNavigate || navigationAnimation == NavigationAnimation.None) { NavigationComplete(); return; } __NavigationInProgress = true; Frame documentFrame = targetFrame; TranslateTransform transitionFrameTransform = new TranslateTransform(); TranslateTransform documentFrameTransform = new TranslateTransform(); DoubleAnimation opacityAnimation = new DoubleAnimation { Duration = new Duration(TimeSpan.FromSeconds(0.2)), From = 1, To = 0, FillBehavior = FillBehavior.HoldEnd }; DoubleAnimation opacityAnimation2 = new DoubleAnimation { Duration = new Duration(TimeSpan.FromSeconds(0.2)), BeginTime = TimeSpan.FromSeconds(0.2), From = 0, To = 1, FillBehavior = FillBehavior.HoldEnd }; documentFrame.RenderTransform = documentFrameTransform; __TransitionFrame.RenderTransform = transitionFrameTransform; opacityAnimation2.Completed += (sender, args) => { NavigationComplete(); onComplete?.Invoke(); }; // opacity targetFrame.Opacity = 0; __TransitionFrame.BeginAnimation(Frame.OpacityProperty, opacityAnimation); documentFrame.BeginAnimation(Frame.OpacityProperty, opacityAnimation2); }
public void NavigateToSingUpPage(NavigationAnimation animation) { __MainWindowController.ShowSingUpPage(animation); CurrentPage = NavigationTarget.SingUpPage; }
public void ShowLogOutPage(NavigationAnimation animation, bool showSessionLimit = false) { AnimatedNavigate(LogOutFrame, animation, async() => { await LogOutViewModel.DoLogOut(showSessionLimit); }); }