From 03959e785f635697fcdf0f99aad9454fafbf4e2e Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Thu, 14 Jun 2018 11:57:22 +0300 Subject: Improved UdpDiscoveryClient (I Think...). Improved PPC NavigationManager by providing a way to navigate by module/view paths.. --- .../Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj | 8 +++ .../PPC/Modules/Tango.PPC.Jobs/ViewModelLocator.cs | 14 ++++- .../Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs | 17 ++++++ .../PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml | 14 +++++ .../Modules/Tango.PPC.Jobs/Views/JobView.xaml.cs | 28 ++++++++++ .../PPC/Modules/Tango.PPC.Jobs/Views/MainView.xaml | 6 ++- .../Navigation/INavigationManager.cs | 21 ++++++++ .../Tango.PPC.Common/Navigation/NavigationView.cs | 3 +- .../Navigation/DefaultNavigationManager.cs | 62 +++++++++++++++++++--- .../PPCApplication/DefaultPPCApplicationManager.cs | 1 + .../PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs | 8 ++- .../PPC/Tango.PPC.UI/Views/LayoutView.xaml | 2 +- .../PPC/Tango.PPC.UI/Views/LayoutView.xaml.cs | 5 -- .../PPC/Tango.PPC.UI/Views/MainView.xaml | 6 +-- 14 files changed, 175 insertions(+), 20 deletions(-) create mode 100644 Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs create mode 100644 Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml create mode 100644 Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml.cs (limited to 'Software/Visual_Studio/PPC') diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj index 48826d1f4..0f5a698d0 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Tango.PPC.Jobs.csproj @@ -72,6 +72,10 @@ Designer MSBuild:Compile + + Designer + MSBuild:Compile + Designer MSBuild:Compile @@ -96,11 +100,15 @@ True + JobsView.xaml + + JobView.xaml + MainView.xaml diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModelLocator.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModelLocator.cs index e9f636b80..171c35846 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModelLocator.cs +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModelLocator.cs @@ -17,6 +17,7 @@ namespace Tango.PPC.Jobs { TangoIOC.Default.Register(); TangoIOC.Default.Register(); + TangoIOC.Default.Register(); } /// @@ -31,7 +32,7 @@ namespace Tango.PPC.Jobs } /// - /// Gets the main view VM. + /// Gets the jobs list VM. /// public static JobsViewVM JobsViewVM { @@ -40,5 +41,16 @@ namespace Tango.PPC.Jobs return TangoIOC.Default.GetInstance(); } } + + /// + /// Gets the job details VM. + /// + public static JobViewVM JobViewVM + { + get + { + return TangoIOC.Default.GetInstance(); + } + } } } diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs new file mode 100644 index 000000000..55c5850f2 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/ViewModels/JobViewVM.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Tango.PPC.Common; + +namespace Tango.PPC.Jobs.ViewModels +{ + public class JobViewVM : PPCViewModel + { + public override void OnApplicationStarted() + { + + } + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml new file mode 100644 index 000000000..993b2365a --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml @@ -0,0 +1,14 @@ + + + + + diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml.cs b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml.cs new file mode 100644 index 000000000..c3e3ab688 --- /dev/null +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/JobView.xaml.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +namespace Tango.PPC.Jobs.Views +{ + /// + /// Interaction logic for JobView.xaml + /// + public partial class JobView : UserControl + { + public JobView() + { + InitializeComponent(); + } + } +} diff --git a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/MainView.xaml b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/MainView.xaml index 4c9f432cb..6b62bcc30 100644 --- a/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/MainView.xaml +++ b/Software/Visual_Studio/PPC/Modules/Tango.PPC.Jobs/Views/MainView.xaml @@ -7,9 +7,13 @@ xmlns:views="clr-namespace:Tango.PPC.Jobs.Views" xmlns:global="clr-namespace:Tango.PPC.Jobs" xmlns:local="clr-namespace:Tango.PPC.Jobs.Views" + xmlns:controls="clr-namespace:Tango.SharedUI.Controls;assembly=Tango.SharedUI" mc:Ignorable="d" d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - + + + + diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/INavigationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/INavigationManager.cs index 60ca12530..c0f7265fb 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/INavigationManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/INavigationManager.cs @@ -22,5 +22,26 @@ namespace Tango.PPC.Common.Navigation /// /// void NavigateTo() where T : IPPCModule; + + /// + /// Navigates to the specified module using the view path (e.g MainView.JobsView). + /// + /// + /// The view path. + void NavigateTo(String viewPath) where T : IPPCModule; + + /// + /// 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)); + /// + /// + /// The view path. + void NavigateTo(params String[] viewPath) where T : IPPCModule; + + /// + /// Navigates to the specified module name. + /// + /// Name of the module. + void NavigateTo(String moduleName); } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs index d860bce76..457aaf0ab 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.Common/Navigation/NavigationView.cs @@ -13,6 +13,7 @@ namespace Tango.PPC.Common.Navigation { LoadingView, LayoutView, - JobsView, + HomeModule, + ShutdownView, } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs index 12c759c1a..8c42a3a44 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Navigation/DefaultNavigationManager.cs @@ -3,7 +3,10 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; +using System.Windows.Media; using Tango.PPC.Common; +using Tango.PPC.Common.Modules; using Tango.PPC.Common.Navigation; using Tango.PPC.UI.Views; using Tango.SharedUI.Controls; @@ -12,23 +15,68 @@ namespace Tango.PPC.UI.Navigation { public class DefaultNavigationManager : INavigationManager { + private IPPCModuleLoader _moduleLoader; + + public DefaultNavigationManager(IPPCModuleLoader moduleLoader) + { + _moduleLoader = moduleLoader; + } + public void NavigateTo(NavigationView view) { - NavigationControl[] controls = new NavigationControl[] + if (view == NavigationView.HomeModule) { - MainView.Instance.NavigationControl, - LayoutView.Instance.NavigationControl - }; - - var control = controls.Where(x => x.Elements.ToList().Exists(y => NavigationControl.GetNavigationName(y) == view.ToString())).SingleOrDefault(); - control.NavigateTo(view.ToString()); + MainView.Instance.NavigationControl.NavigateTo(NavigationView.LayoutView.ToString()); + var firstModule = _moduleLoader.UserModules.FirstOrDefault(); + LayoutView.Instance.NavigationControl.NavigateTo(firstModule.Name); + } + else + { + MainView.Instance.NavigationControl.NavigateTo(view.ToString()); + } } public void NavigateTo() where T : IPPCModule { + MainView.Instance.NavigationControl.NavigateTo(NavigationView.LayoutView.ToString()); var navigationControl = LayoutView.Instance.NavigationControl; + var module = _moduleLoader.UserModules.SingleOrDefault(x => x.GetType() == typeof(T)); + navigationControl.NavigateTo(module.Name); + } + public void NavigateTo(string viewPath) where T : IPPCModule + { + NavigateTo(viewPath.Split(',')); + } + public void NavigateTo(params String[] viewPath) where T : IPPCModule + { + MainView.Instance.NavigationControl.NavigateTo(NavigationView.LayoutView.ToString()); + var navigationControl = LayoutView.Instance.NavigationControl; + var module = _moduleLoader.UserModules.SingleOrDefault(x => x.GetType() == typeof(T)); + var moduleView = navigationControl.NavigateTo(module.Name); + + var moduleNavigation = moduleView.FindChildOffline(); + + foreach (var view in viewPath) + { + moduleNavigation.RegisterForLoadedOrNow(async (x, e) => + { + await Task.Delay(100); + var v = moduleNavigation.NavigateTo(view); + + if (view != viewPath.Last()) + { + moduleNavigation = v.FindChildOffline(); + } + }); + } + } + + public void NavigateTo(string moduleName) + { + var navigationControl = LayoutView.Instance.NavigationControl; + navigationControl.NavigateTo(moduleName); } } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs index 8b772b8bc..2fbc6c34e 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs @@ -15,6 +15,7 @@ using Tango.Core; using System.IO; using Tango.Core.Helpers; using Tango.PPC.Common.Modules; +using System.Windows.Threading; namespace Tango.PPC.UI.PPCApplication { diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs index 20752ac71..588cc8b64 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/LoadingViewVM.cs @@ -6,18 +6,24 @@ using System.Text; using System.Threading.Tasks; using Tango.BL; using Tango.Core; +using Tango.Core.DI; using Tango.Core.Helpers; using Tango.PPC.Common; using Tango.PPC.Common.Application; using Tango.PPC.Common.Authentication; +using Tango.PPC.Common.Modules; using Tango.PPC.Common.Navigation; using Tango.PPC.Common.Notifications; +using Tango.PPC.Jobs; using Tango.SharedUI; namespace Tango.PPC.UI.ViewModels { public class LoadingViewVM : PPCViewModel { + [TangoInject] + public IPPCModuleLoader ModuleLoader { get; set; } + public async override void OnApplicationStarted() { await Task.Factory.StartNew(() => @@ -27,7 +33,7 @@ namespace Tango.PPC.UI.ViewModels ApplicationManager.ModulesInitialized += (_, __) => { - NavigationManager.NavigateTo(NavigationView.LayoutView); + NavigationManager.NavigateTo(NavigationView.HomeModule); }; await AuthenticationProvider.Login("roy@twine-s.com", "1234"); diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml index 46e104627..8baeab6a4 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml @@ -97,7 +97,7 @@ - + diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml.cs index 8ab602f2c..18ffa8ab2 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/LayoutView.xaml.cs @@ -46,11 +46,6 @@ namespace Tango.PPC.UI.Views module.Initialize(); } } - - if (modules.Count() > 0) - { - NavigationControl.NavigateTo(modules.First().Name); - } }); } } diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml index 8da05f0dd..1bfdda517 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/Views/MainView.xaml @@ -11,9 +11,9 @@ mc:Ignorable="d" d:DesignHeight="1280" d:DesignWidth="800" d:DataContext="{d:DesignInstance Type=vm:MainViewVM, IsDesignTimeCreatable=False}" DataContext="{x:Static global:ViewModelLocator.MainViewVM}"> - - - + + + -- cgit v1.3.1