aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/FSE/Tango.FSE.Common/Navigation/INavigationManager.cs
blob: 6e28eb22be39c9dbb0781ebe663fb018392f1b55 (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
130
131
132
133
134
135
136
137
138
139
140
141
142
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tango.Core.Commands;

namespace Tango.FSE.Common.Navigation
{
    /// <summary>
    /// Represents the PPC views navigation manager.
    /// </summary>
    public interface INavigationManager
    {
        /// <summary>
        /// Occurs when the navigation manager if navigating to another view.
        /// </summary>
        event EventHandler<NavigationToEventArgs> Navigating;

        /// <summary>
        /// Gets the menu items.
        /// </summary>
        ObservableCollection<NavigationMenuItem> MenuItems { get; }

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

        /// <summary>
        /// Gets the current view model.
        /// </summary>
        FSEViewModel 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>
        /// 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 : IFSEModule;

        /// <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 : IFSEModule;

        /// <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 : IFSEModule;

        /// <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 : IFSEModule;

        /// <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">Push the current view to history ?.</param>
        /// <param name="force">Force the navigation even if we are on the same view.</param>
        /// <returns></returns>
        Task<bool> NavigateWithObject<TModule, TView, TPass>(TPass obj, bool pushToHistory = true, bool force = false)
               where TModule : IFSEModule;

        /// <summary>
        /// Navigates to the specified module and view with the specified object.
        /// Ideally will be used for navigating to a module that is not references by the current module.
        /// </summary>
        /// <param name="viewPath">The view full path (Module.ViewName.SubViewName).</param>
        /// <param name="obj">The object.</param>
        /// <param name="pushToHistory">Push the current view to history.</param>
        /// <returns></returns>
        Task<bool> NavigateWithObject(String viewPath, Object obj, bool pushToHistory = true);

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

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

        /// <summary>
        /// Deletes the specified history item.
        /// </summary>
        /// <typeparam name="TModule">The type of the module.</typeparam>
        /// <typeparam name="TView">The type of the view.</typeparam>
        void DeleteHistoryItem<TModule, TView>() where TModule : IFSEModule;
    }
}