From 471daec51d0fc9437f8551d5d48c9fa2fb031871 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Wed, 13 Dec 2017 18:50:24 +0200 Subject: Machine Studio, Dynamic Module Loading... --- .../ViewModels/MainViewVM.cs | 81 ++++++++++++ .../Tango.MachineStudio.UI/Views/MainView.xaml | 138 +++++++++++++++------ 2 files changed, 179 insertions(+), 40 deletions(-) (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI') diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs index 00571007c..5fb4b436d 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs @@ -1,8 +1,13 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.IO; using System.Linq; +using System.Reflection; using System.Text; using System.Threading.Tasks; +using Tango.Core.Commands; +using Tango.MachineStudio.Common; using Tango.MachineStudio.UI.SupervisingController; using Tango.SharedUI; @@ -10,11 +15,87 @@ namespace Tango.MachineStudio.UI.ViewModels { public class MainViewVM : ViewModel { + public ObservableCollection Modules { get; set; } + + private IStudioModule _currentModule; + + public IStudioModule CurrentModule + { + get { return _currentModule; } + set { _currentModule = value; RaisePropertyChangedAuto(); } + } + + private bool _isMenuOpened; + + public bool IsMenuOpened + { + get { return _isMenuOpened; } + set { _isMenuOpened = value; RaisePropertyChangedAuto(); } + } + + public RelayCommand StartModuleCommand { get; set; } + + public RelayCommand HomeCommand { get; set; } + public String Text { get; set; } public MainViewVM(IMainView view) : base(view) { + Modules = new ObservableCollection(); + + LoadModules(); + Text = "Hi ROy"; + + StartModuleCommand = new RelayCommand(StartModule); + + HomeCommand = new RelayCommand(Home); + } + + private void LoadModules() + { + string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + + foreach (var file in Directory.GetFiles(assemblyFolder, "*.dll").Where(x => x.Contains("MachineStudio"))) + { + try + { + Assembly moduleAssembly = null; + String pdbFile = Path.ChangeExtension(file, ".pdb"); + var data = File.ReadAllBytes(file); + + if (File.Exists(pdbFile)) + { + var pdbData = File.ReadAllBytes(pdbFile); + moduleAssembly = Assembly.Load(data, pdbData); + } + else + { + moduleAssembly = Assembly.Load(data); + } + + if (moduleAssembly != null) + { + foreach (var moduleType in moduleAssembly.GetTypes().Where(x => !x.IsInterface && typeof(IStudioModule).IsAssignableFrom(x))) + { + var module = Activator.CreateInstance(moduleType) as IStudioModule; + Modules.Add(module); + } + } + } + catch { } + } + } + + private void Home() + { + StartModule(null); + } + + private void StartModule(IStudioModule module) + { + IsMenuOpened = false; + CurrentModule = module; } protected override void OnViewAttached() diff --git a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml index f8424b26d..ad366ce9a 100644 --- a/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml +++ b/Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/Views/MainView.xaml @@ -15,12 +15,18 @@ - + + + + + User Name + + - Item 1 + Item 2 Item 3 Item 4 @@ -32,11 +38,11 @@ - - + + + + + + + +