2025-02-24 17:39:15 -03:00
|
|
|
|
using CtrEditor.ObjetosSim;
|
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
using System.Windows.Controls;
|
2025-02-25 07:10:58 -03:00
|
|
|
|
using System.Windows;
|
2025-02-24 17:39:15 -03:00
|
|
|
|
|
2025-02-25 07:10:58 -03:00
|
|
|
|
namespace CtrEditor.Controls
|
2025-02-24 17:39:15 -03:00
|
|
|
|
{
|
|
|
|
|
public partial class ObjectHierarchyView : UserControl
|
|
|
|
|
{
|
|
|
|
|
private MainViewModel _mainViewModel;
|
|
|
|
|
public ObservableCollection<OsTreeNode> RootNodes { get; set; }
|
|
|
|
|
|
|
|
|
|
public ObjectHierarchyView()
|
|
|
|
|
{
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
RootNodes = new ObservableCollection<OsTreeNode>();
|
|
|
|
|
this.DataContext = this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void Initialize(MainViewModel mainViewModel)
|
|
|
|
|
{
|
|
|
|
|
_mainViewModel = mainViewModel;
|
|
|
|
|
_mainViewModel.ObjetosSimulables.CollectionChanged += ObjetosSimulables_CollectionChanged;
|
|
|
|
|
UpdateTree();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ObjetosSimulables_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
UpdateTree();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateTree()
|
|
|
|
|
{
|
|
|
|
|
RootNodes.Clear();
|
|
|
|
|
|
|
|
|
|
// Agrupar por tipos
|
|
|
|
|
var groupsByType = _mainViewModel.ObjetosSimulables
|
|
|
|
|
.GroupBy(obj => obj.GetType());
|
|
|
|
|
|
|
|
|
|
foreach (var group in groupsByType)
|
|
|
|
|
{
|
|
|
|
|
// Usar GetTypeDisplayName para obtener el nombre de la clase
|
|
|
|
|
var typeNode = new OsTreeNode(OsTreeNode.GetTypeDisplayName(group.Key));
|
|
|
|
|
RootNodes.Add(typeNode);
|
|
|
|
|
|
|
|
|
|
foreach (var obj in group)
|
|
|
|
|
{
|
|
|
|
|
var objNode = new OsTreeNode(obj.Nombre, obj);
|
|
|
|
|
typeNode.Children.Add(objNode);
|
|
|
|
|
|
|
|
|
|
// Agregar relaciones group_Panel
|
|
|
|
|
if (!string.IsNullOrEmpty(obj.Group_Panel))
|
|
|
|
|
{
|
|
|
|
|
var linkedPanel = _mainViewModel.ObjetosSimulables
|
|
|
|
|
.FirstOrDefault(o => o.Nombre == obj.Group_Panel);
|
|
|
|
|
if (linkedPanel != null)
|
|
|
|
|
{
|
|
|
|
|
objNode.Children.Add(new OsTreeNode(linkedPanel.Nombre, linkedPanel, "(group_Panel)"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Agregar relaciones group_FramePanel
|
|
|
|
|
if (!string.IsNullOrEmpty(obj.Group_FramePanel))
|
|
|
|
|
{
|
|
|
|
|
var linkedFrame = _mainViewModel.ObjetosSimulables
|
|
|
|
|
.FirstOrDefault(o => o.Nombre == obj.Group_FramePanel);
|
|
|
|
|
if (linkedFrame != null)
|
|
|
|
|
{
|
|
|
|
|
objNode.Children.Add(new OsTreeNode(linkedFrame.Nombre, linkedFrame, "(group_FramePanel)"));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Agregar objetos que hacen referencia a este objeto
|
|
|
|
|
var referencingObjects = _mainViewModel.ObjetosSimulables
|
|
|
|
|
.Where(o => o.Group_Panel == obj.Nombre || o.Group_FramePanel == obj.Nombre);
|
|
|
|
|
|
|
|
|
|
foreach (var refObj in referencingObjects)
|
|
|
|
|
{
|
|
|
|
|
var relationType = refObj.Group_Panel == obj.Nombre ? "(referenced by group_Panel)" : "(referenced by group_FramePanel)";
|
|
|
|
|
objNode.Children.Add(new OsTreeNode(refObj.Nombre, refObj, relationType));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
|
|
|
|
|
{
|
|
|
|
|
if (e.NewValue is OsTreeNode node && node.AssociatedObject != null)
|
|
|
|
|
{
|
|
|
|
|
// Actualizar la selección en el MainViewModel
|
|
|
|
|
_mainViewModel.SelectedItemOsList = node.AssociatedObject;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|