aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/INavigationManager.cs
blob: 1fcdb4410e992aec6aca00b81938a7c61fcaa5cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;

namespace Tango.PPC.Common.Navigation
{
    /// <summary>
    /// Represents the PPC views navigation manager.
    /// </summary>
    public interface INavigationManager
    {
        /// <summary>
        /// Occurs when the current view model has changed.
        /// </summary>
        event EventHandler<PPCViewModel> CurrentVMChanged;

        /// <summary>
        /// Gets the current module.
        /// </summary>
        IPPCModule CurrentModule { get; }

        /// <summary>
        /// Gets the current view model.
        /// </summary>
        PPCViewModel CurrentVM { get; }

        /// <summary>
        /// Gets a value indicating whether the navigation system is able to navigate to the previous view.
        /// </summary>
        bool CanNavigateBack { get; }

        /// <summary>
        /// Gets a value indicating whether the back should be enabled.
        /// </summary>
        bool IsBackEnabled { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether the navigation system is currently navigating.
        /// </summary>
        bool IsNavigating { get; set; }

        /// <summary>
        /// Navigates to the previous view if <see cref="CanNavigateBack"/> is true.
        /// </summary>
        Task<bool> NavigateBack();

        /// <summary>
        /// Navigates to the previous view..
        /// </summary>
        RelayCommand NavigateBackCommand { get; }

        /// <summary>
        /// Navigates to the specified full path in command parameter.
        /// </summary>
        RelayCommand<String> NavigateToCommand { get; }

        /// <summary>
        /// Navigates to the specified PPC view.
        /// </summary>
        /// <param name="view">The view.</param>
        Task<bool> NavigateTo(NavigationView view, bool pushToHistory = true);

        /// <summary>
        /// Navigates to the specified PPC view with the specified receive object.
        /// </summary>
        /// <param name="view">The view.</param>
        Task<bool> NavigateWithObject<TPass>(NavigationView view, TPass obj, bool pushToHistory = true);

        /// <summary>
        /// Navigates to the specified module.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        Task<bool> NavigateTo<T>(bool pushToHistory = true) where T : IPPCModule;

        /// <summary>
        /// Navigates to the specified module using the view path (e.g MainView.JobsView).
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="viewPath">The view path.</param>
        Task<bool> NavigateTo<T>(String viewPath, bool pushToHistory = true) where T : IPPCModule;

        /// <summary>
        /// Navigates to the specified module using the view path (e.g MainView,JobsView).
        /// This method makes it easy to do stuff like NavigateTo(nameof(MainView),nameof(JobsView));
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="viewPath">The view path.</param>
        Task<bool> NavigateTo<T>(bool pushToHistory = true, params String[] viewPath) where T : IPPCModule;

        /// <summary>
        /// Navigates to the specified module and view by full path (e.g Jobs.JobsView).
        /// </summary>
        /// <param name="fullPath">The full path.</param>
        Task<bool> NavigateTo(String fullPath, bool pushToHistory = true, Action<PPCViewModel, PPCViewModel> onNavigating = null, Action<PPCViewModel, PPCViewModel> onNavigated = null);

        /// <summary>
        /// Navigates to the specified module and view with the specified object and expecting a return parameter.
        /// The view must be of type INavigationResultProvider<TResult>.
        /// </summary>
        /// <param name="fullPath">The full path.</param>
        Task<TResult> NavigateForResult<TModule, TView, TResult, TPass>(TPass obj, bool pushToHistory = true)
            where TModule : IPPCModule;

        /// <summary>
        /// Navigates to the specified module and view with the specified object.
        /// </summary>
        /// <typeparam name="TModule">The type of the module.</typeparam>
        /// <typeparam name="TView">The type of the view.</typeparam>
        /// <typeparam name="TPass">The type of the pass.</typeparam>
        /// <param name="obj">The object.</param>
        /// <param name="pushToHistory">if set to <c>true</c> [push to history].</param>
        /// <returns></returns>
        Task<bool> NavigateWithObject<TModule, TView, TPass>(TPass obj, bool pushToHistory = true)
               where TModule : IPPCModule;

        /// <summary>
        /// Clears the navigation back history.
        /// </summary>
        void ClearHistory();

        /// <summary>
        /// Clears the navigation back history except the specified view type.
        /// </summary>
        void ClearHistoryExcept<T>();
    }
}