private MachineElementViewModel ToViewModel(MachineElement me)
        {
            MachineElementViewModel vm = null;

            if (me != null)
            {
                if (me.ToolHolderType != MachineModels.Enums.ToolHolderType.None)
                {
                    vm = new ToolHolderViewModel()
                    {
                        ToolHolderId = me.ToolHolderData.Id, ToolHolderType = me.ToolHolderType
                    };
                }
                else
                {
                    vm = new MachineElementViewModel();
                }

                vm.Name = me.Name;

                if (me.Children.Count > 0)
                {
                    var children = new List <MachineElementViewModel>();

                    foreach (var item in me.Children)
                    {
                        children.Add(ToViewModel(item));
                    }

                    vm.Children = children;
                }
            }

            return(vm);
        }
 private void OnMachineElementsLoaded(MachineElementsLoaded msg)
 {
     Selected = null;
     Elements = new List <MachineElementViewModel>()
     {
         ToViewModel(msg.Elements)
     };
     RaisePropertyChanged(nameof(Elements));
 }
 private void UnloadTools(MachineElementViewModel vm)
 {
     if (vm is IToolHolderManagement thm)
     {
         thm.UnloadTool();
     }
     else if (vm.Children.Count() > 0)
     {
         foreach (var item in vm.Children)
         {
             UnloadTools(item);
         }
     }
 }
 private void GetActiveTooling(MachineElementViewModel vm, Tooling tooling)
 {
     if (vm is IToolHolderManagement thm)
     {
         if (thm.IsToolPresent)
         {
             if (thm is IToolingUnitProvider tup)
             {
                 tooling.Units.Add(tup.GetToolingUnit());
             }
         }
     }
     else if (vm.Children.Count() > 0)
     {
         foreach (var item in vm.Children)
         {
             GetActiveTooling(item, tooling);
         }
     }
 }
 private void SetActiveTooling(MachineElementViewModel vm, Dictionary <int, ToolingUnit> td)
 {
     if (vm is IToolHolderManagement thm)
     {
         if (vm is IToolingUnitProvider tup)
         {
             if (td.TryGetValue(tup.GetToolHolderId(), out ToolingUnit tu))
             {
                 Messenger.Default.Send(new TryToLoadTool()
                 {
                     ToolingHolder = thm, ToolName = tu.ToolName
                 });
             }
         }
     }
     else if (vm.Children.Count() > 0)
     {
         foreach (var item in vm.Children)
         {
             SetActiveTooling(item, td);
         }
     }
 }