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 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) (limited to 'Software/Visual_Studio/MachineStudio/Tango.MachineStudio.UI/ViewModels/MainViewVM.cs') 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() -- cgit v1.3.1