From f33273bbf60e5f1553d1f482b9183dcde9049c79 Mon Sep 17 00:00:00 2001 From: Miguel Date: Thu, 13 Jun 2024 00:26:02 +0200 Subject: [PATCH] Agregado de filtrado de objetossimulables. Hay mejorarlo. --- MainViewModel.cs | 78 +++++++++++++------ MainWindow.xaml | 39 ++++++++-- MainWindow.xaml.cs | 6 +- .../ucBuscarCoincidencias.xaml.cs | 2 +- .../Extraccion Datos/ucExtraccionTag.xaml.cs | 24 ++++-- PopUps/AssignImagesWindow.xaml.cs | 4 + XAMLhelpers.cs | 12 +++ estadoPersistente.cs | 2 + 8 files changed, 123 insertions(+), 44 deletions(-) diff --git a/MainViewModel.cs b/MainViewModel.cs index 36c934d..ffd9ef1 100644 --- a/MainViewModel.cs +++ b/MainViewModel.cs @@ -1,5 +1,4 @@ using System.ComponentModel; -using System.Runtime.CompilerServices; using System.Windows.Controls; using System.Windows.Input; using Ookii.Dialogs.Wpf; @@ -15,14 +14,11 @@ using System.Diagnostics; using System.Reflection; using CommunityToolkit.Mvvm.ComponentModel; using Xceed.Wpf.Toolkit.PropertyGrid; -using System.Text.RegularExpressions; -using System.Windows.Data; using CtrEditor.ObjetosSim.Extraccion_Datos; using ClosedXML.Excel; -using DocumentFormat.OpenXml.Spreadsheet; -using CommunityToolkit.Mvvm.Input; using CtrEditor.PopUps; -using CtrEditor.ObjetosSim.UserControls; +using System.Windows.Data; + namespace CtrEditor { @@ -88,6 +84,8 @@ namespace CtrEditor public MainWindow MainWindow { get => mainWindow; set => mainWindow = value; } + [ObservableProperty] + public ICollectionView vistaFiltrada; [ObservableProperty] private float canvasLeft; @@ -123,7 +121,8 @@ namespace CtrEditor DatosDeTrabajo.CargarImagenes(); ListaImagenes = new ObservableCollection(DatosDeTrabajo.Imagenes.Keys); // Actualizar claves SelectedImage = null; - if (EstadoPersistente.Instance.imagen != null && EstadoPersistente.Instance.imagen.Length > 0) + var x = ListaImagenes.FirstOrDefault(o => o == EstadoPersistente.Instance.imagen, null); + if (EstadoPersistente.Instance.imagen != null && EstadoPersistente.Instance.imagen.Length > 0 && x != null) SelectedImage = EstadoPersistente.Instance.imagen; else if (ListaImagenes.FirstOrDefault() != null) SelectedImage = ListaImagenes.FirstOrDefault(); @@ -154,16 +153,19 @@ namespace CtrEditor } [ObservableProperty] - private TreeItemViewModel selectedItemOsList; + private osBase selectedItemOsList; - partial void OnSelectedItemOsListChanged(TreeItemViewModel value) + partial void OnSelectedItemOsListChanged(osBase value) { - if (value.Item != null) + if (value != null) habilitarEliminarUserControl = true; else habilitarEliminarUserControl = false; } + [ObservableProperty] + public ObjetosSimulablesFilterTypes osListFilter; + [ObservableProperty] private TipoSimulable selectedItem; @@ -173,6 +175,12 @@ namespace CtrEditor [ObservableProperty] public ObservableCollection objetosSimulables; + partial void OnObjetosSimulablesChanged(ObservableCollection value) + { + VistaFiltrada = CollectionViewSource.GetDefaultView(ObjetosSimulables); + VistaFiltrada.Filter = FiltrarObjetos; + ObjetosSimulables.CollectionChanged += (s, e) => VistaFiltrada.Refresh(); + } // // Constructor @@ -183,9 +191,11 @@ namespace CtrEditor OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory); datosDeTrabajo = new DatosDeTrabajo(); - ObjetosSimulables = new ObservableCollection(); - TypeDecorationManager.AddExpandableIListConverter(objetosSimulables.GetType()); + osListFilter = new ObjetosSimulablesFilterTypes(); + osListFilter.PropertyChanged += OsListFilter_PropertyChanged; + + ObjetosSimulables = new ObservableCollection(); ListaOsBase = new ObservableCollection(); @@ -226,6 +236,20 @@ namespace CtrEditor stopwatch_Sim.Start(); } + private void OsListFilter_PropertyChanged(object? sender, PropertyChangedEventArgs e) + { + VistaFiltrada.Refresh(); + } + + private bool FiltrarObjetos(object item) + { + var objeto = item as osBase; + + return (objeto.Cloned == osListFilter.Cloned) && + (objeto.Enable_On_All_Pages == osListFilter.Enable_On_All_Pages) && + (objeto.Show_On_This_Page == osListFilter.Show_On_This_Page); + } + public void LoadInitialData() { // Suponiendo que "SelectedImage" es una propiedad que al establecerse dispara "ImageSelected" @@ -299,7 +323,7 @@ namespace CtrEditor private void DuplicarUserControl() { - if (SelectedItemOsList.Item is osBase objDuplicar) + if (SelectedItemOsList is osBase objDuplicar) DuplicarObjeto(objDuplicar, 0.5f, 0.5f); } @@ -351,10 +375,9 @@ namespace CtrEditor private void EliminarUserControl() { - if (SelectedItemOsList.Item is osBase objEliminar) + if (SelectedItemOsList is osBase objEliminar) { RemoverObjetoSimulable(objEliminar); - } } @@ -368,17 +391,19 @@ namespace CtrEditor private void EliminarAutoCreatedCommand() { - var objetosSimulablesCopy = new List(ObjetosSimulables); - foreach (var obj in objetosSimulablesCopy) - if (obj.AutoCreated) + var osAutoCreated_List = ObjetosSimulables + .Where(o => o.Show_On_This_Page && o.AutoCreated) + .ToList(); + foreach (var obj in osAutoCreated_List) RemoverObjetoSimulable(obj); } private void EliminarClonedCommand() { - var objetosSimulablesCopy = new List(ObjetosSimulables); - foreach (var obj in objetosSimulablesCopy) - if (obj is osExtraccionTag TEobj && TEobj.Cloned) + var osCloned_List = ObjetosSimulables + .Where(o => o.Show_On_This_Page && o.Cloned) + .ToList(); + foreach (var obj in osCloned_List) RemoverObjetoSimulable(obj); } @@ -489,19 +514,22 @@ namespace CtrEditor int col = 0; // Filtrar los objetos de tipo osExtraccionTag y crear una nueva lista - var osBuscarCoincidencias_List = ObjetosSimulables.OfType().ToList(); + var osBuscarCoincidencias_List = ObjetosSimulables + .OfType() + .Where(tag => tag.Show_On_This_Page) + .ToList(); var osExtraccionTagBaseGrouped_List = ObjetosSimulables .OfType() - .Where(tag => !tag.Cloned && tag.Id_Search_Templates != null && tag.Id_Search_Templates != "") + .Where(tag => tag.Show_On_This_Page && !tag.Cloned && tag.Id_Search_Templates != null && tag.Id_Search_Templates != "") .ToList(); var osExtraccionTagBaseFix_List = ObjetosSimulables .OfType() - .Where(tag => !tag.Cloned && (tag.Id_Search_Templates == null || tag.Id_Search_Templates == "")) + .Where(tag => tag.Show_On_This_Page && !tag.Cloned && (tag.Id_Search_Templates == null || tag.Id_Search_Templates == "")) .ToList(); var osExtraccionTagCloned_List = ObjetosSimulables .OfType() - .Where(tag => tag.Cloned) + .Where(tag => tag.Show_On_This_Page && tag.Cloned) .ToList(); // Columnas Fijas para los Tags no agrupados que no son clonados diff --git a/MainWindow.xaml b/MainWindow.xaml index b425239..f969b9b 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -164,6 +164,7 @@ + @@ -203,18 +204,40 @@ + + + + + + + + + + + + + + - - - - @@ -314,7 +337,7 @@ - +