121 lines
3.4 KiB
C#
121 lines
3.4 KiB
C#
|
using System.Collections.ObjectModel;
|
|||
|
using System.Reflection;
|
|||
|
using System.Windows;
|
|||
|
using System.Windows.Controls;
|
|||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|||
|
using CtrEditor.ObjetosSim;
|
|||
|
|
|||
|
namespace CtrEditor.Controls
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// Interaction logic for osVisFilter.xaml
|
|||
|
/// </summary>
|
|||
|
public partial class osVisFilter : UserControl
|
|||
|
{
|
|||
|
public osVisFilter()
|
|||
|
{
|
|||
|
InitializeComponent();
|
|||
|
DataContext = FilterViewModel = new osVisFilterViewModel();
|
|||
|
}
|
|||
|
|
|||
|
public osVisFilterViewModel FilterViewModel { get; private set; }
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Updates the type filters based on the provided types
|
|||
|
/// </summary>
|
|||
|
public void UpdateAvailableTypes(IEnumerable<Type> types)
|
|||
|
{
|
|||
|
FilterViewModel.UpdateTypeFilters(types);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// ViewModel for the osVisFilter control
|
|||
|
/// </summary>
|
|||
|
public partial class osVisFilterViewModel : ObservableObject
|
|||
|
{
|
|||
|
[ObservableProperty]
|
|||
|
private bool showAll = true;
|
|||
|
|
|||
|
[ObservableProperty]
|
|||
|
private bool showCloned;
|
|||
|
|
|||
|
[ObservableProperty]
|
|||
|
private bool showAutoCreated;
|
|||
|
|
|||
|
[ObservableProperty]
|
|||
|
private bool showEnableOnAllPages;
|
|||
|
|
|||
|
[ObservableProperty]
|
|||
|
private bool showOnThisPage;
|
|||
|
|
|||
|
[ObservableProperty]
|
|||
|
private ObservableCollection<TypeFilterItem> typeFilters = new ObservableCollection<TypeFilterItem>();
|
|||
|
|
|||
|
public osVisFilterViewModel()
|
|||
|
{
|
|||
|
// PropertyChanged listeners could be added here if needed
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Updates the type filters based on the provided types
|
|||
|
/// </summary>
|
|||
|
public void UpdateTypeFilters(IEnumerable<Type> types)
|
|||
|
{
|
|||
|
// Remove types that are no longer present
|
|||
|
var typesToRemove = TypeFilters
|
|||
|
.Where(tf => !types.Contains(tf.Type))
|
|||
|
.ToList();
|
|||
|
|
|||
|
foreach (var item in typesToRemove)
|
|||
|
{
|
|||
|
TypeFilters.Remove(item);
|
|||
|
}
|
|||
|
|
|||
|
// Add new types that aren't already in the list
|
|||
|
foreach (var type in types)
|
|||
|
{
|
|||
|
if (!TypeFilters.Any(tf => tf.Type == type))
|
|||
|
{
|
|||
|
TypeFilters.Add(new TypeFilterItem(type)
|
|||
|
{
|
|||
|
DisplayName = GetTypeDisplayName(type),
|
|||
|
IsSelected = true
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Gets the display name for a type, using the NombreClase static method if available
|
|||
|
/// </summary>
|
|||
|
private string GetTypeDisplayName(Type type)
|
|||
|
{
|
|||
|
var methodInfo = type.GetMethod("NombreClase",
|
|||
|
BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);
|
|||
|
return methodInfo != null ?
|
|||
|
methodInfo.Invoke(null, null)?.ToString() :
|
|||
|
type.Name;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// Represents a type filter item with selection state
|
|||
|
/// </summary>
|
|||
|
public partial class TypeFilterItem : ObservableObject
|
|||
|
{
|
|||
|
[ObservableProperty]
|
|||
|
private bool isSelected = true;
|
|||
|
|
|||
|
[ObservableProperty]
|
|||
|
private string displayName;
|
|||
|
|
|||
|
public Type Type { get; }
|
|||
|
|
|||
|
public TypeFilterItem(Type type)
|
|||
|
{
|
|||
|
Type = type;
|
|||
|
DisplayName = type?.Name ?? "Unknown Type";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|