Agregado de filtrado de objetossimulables. Hay mejorarlo.

This commit is contained in:
Miguel 2024-06-13 00:26:02 +02:00
parent dc01704da6
commit f33273bbf6
8 changed files with 123 additions and 44 deletions

View File

@ -1,5 +1,4 @@
using System.ComponentModel; using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows.Controls; using System.Windows.Controls;
using System.Windows.Input; using System.Windows.Input;
using Ookii.Dialogs.Wpf; using Ookii.Dialogs.Wpf;
@ -15,14 +14,11 @@ using System.Diagnostics;
using System.Reflection; using System.Reflection;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using Xceed.Wpf.Toolkit.PropertyGrid; using Xceed.Wpf.Toolkit.PropertyGrid;
using System.Text.RegularExpressions;
using System.Windows.Data;
using CtrEditor.ObjetosSim.Extraccion_Datos; using CtrEditor.ObjetosSim.Extraccion_Datos;
using ClosedXML.Excel; using ClosedXML.Excel;
using DocumentFormat.OpenXml.Spreadsheet;
using CommunityToolkit.Mvvm.Input;
using CtrEditor.PopUps; using CtrEditor.PopUps;
using CtrEditor.ObjetosSim.UserControls; using System.Windows.Data;
namespace CtrEditor namespace CtrEditor
{ {
@ -88,6 +84,8 @@ namespace CtrEditor
public MainWindow MainWindow { get => mainWindow; set => mainWindow = value; } public MainWindow MainWindow { get => mainWindow; set => mainWindow = value; }
[ObservableProperty]
public ICollectionView vistaFiltrada;
[ObservableProperty] [ObservableProperty]
private float canvasLeft; private float canvasLeft;
@ -123,7 +121,8 @@ namespace CtrEditor
DatosDeTrabajo.CargarImagenes(); DatosDeTrabajo.CargarImagenes();
ListaImagenes = new ObservableCollection<string>(DatosDeTrabajo.Imagenes.Keys); // Actualizar claves ListaImagenes = new ObservableCollection<string>(DatosDeTrabajo.Imagenes.Keys); // Actualizar claves
SelectedImage = null; 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; SelectedImage = EstadoPersistente.Instance.imagen;
else if (ListaImagenes.FirstOrDefault() != null) else if (ListaImagenes.FirstOrDefault() != null)
SelectedImage = ListaImagenes.FirstOrDefault(); SelectedImage = ListaImagenes.FirstOrDefault();
@ -154,16 +153,19 @@ namespace CtrEditor
} }
[ObservableProperty] [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; habilitarEliminarUserControl = true;
else else
habilitarEliminarUserControl = false; habilitarEliminarUserControl = false;
} }
[ObservableProperty]
public ObjetosSimulablesFilterTypes osListFilter;
[ObservableProperty] [ObservableProperty]
private TipoSimulable selectedItem; private TipoSimulable selectedItem;
@ -173,6 +175,12 @@ namespace CtrEditor
[ObservableProperty] [ObservableProperty]
public ObservableCollection<osBase> objetosSimulables; public ObservableCollection<osBase> objetosSimulables;
partial void OnObjetosSimulablesChanged(ObservableCollection<osBase> value)
{
VistaFiltrada = CollectionViewSource.GetDefaultView(ObjetosSimulables);
VistaFiltrada.Filter = FiltrarObjetos;
ObjetosSimulables.CollectionChanged += (s, e) => VistaFiltrada.Refresh();
}
// //
// Constructor // Constructor
@ -183,9 +191,11 @@ namespace CtrEditor
OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory); OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory);
datosDeTrabajo = new DatosDeTrabajo(); datosDeTrabajo = new DatosDeTrabajo();
ObjetosSimulables = new ObservableCollection<osBase>(); osListFilter = new ObjetosSimulablesFilterTypes();
TypeDecorationManager.AddExpandableIListConverter<osBase>(objetosSimulables.GetType());
osListFilter.PropertyChanged += OsListFilter_PropertyChanged;
ObjetosSimulables = new ObservableCollection<osBase>();
ListaOsBase = new ObservableCollection<TipoSimulable>(); ListaOsBase = new ObservableCollection<TipoSimulable>();
@ -226,6 +236,20 @@ namespace CtrEditor
stopwatch_Sim.Start(); 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() public void LoadInitialData()
{ {
// Suponiendo que "SelectedImage" es una propiedad que al establecerse dispara "ImageSelected" // Suponiendo que "SelectedImage" es una propiedad que al establecerse dispara "ImageSelected"
@ -299,7 +323,7 @@ namespace CtrEditor
private void DuplicarUserControl() private void DuplicarUserControl()
{ {
if (SelectedItemOsList.Item is osBase objDuplicar) if (SelectedItemOsList is osBase objDuplicar)
DuplicarObjeto(objDuplicar, 0.5f, 0.5f); DuplicarObjeto(objDuplicar, 0.5f, 0.5f);
} }
@ -351,10 +375,9 @@ namespace CtrEditor
private void EliminarUserControl() private void EliminarUserControl()
{ {
if (SelectedItemOsList.Item is osBase objEliminar) if (SelectedItemOsList is osBase objEliminar)
{ {
RemoverObjetoSimulable(objEliminar); RemoverObjetoSimulable(objEliminar);
} }
} }
@ -368,17 +391,19 @@ namespace CtrEditor
private void EliminarAutoCreatedCommand() private void EliminarAutoCreatedCommand()
{ {
var objetosSimulablesCopy = new List<osBase>(ObjetosSimulables); var osAutoCreated_List = ObjetosSimulables
foreach (var obj in objetosSimulablesCopy) .Where(o => o.Show_On_This_Page && o.AutoCreated)
if (obj.AutoCreated) .ToList();
foreach (var obj in osAutoCreated_List)
RemoverObjetoSimulable(obj); RemoverObjetoSimulable(obj);
} }
private void EliminarClonedCommand() private void EliminarClonedCommand()
{ {
var objetosSimulablesCopy = new List<osBase>(ObjetosSimulables); var osCloned_List = ObjetosSimulables
foreach (var obj in objetosSimulablesCopy) .Where(o => o.Show_On_This_Page && o.Cloned)
if (obj is osExtraccionTag TEobj && TEobj.Cloned) .ToList();
foreach (var obj in osCloned_List)
RemoverObjetoSimulable(obj); RemoverObjetoSimulable(obj);
} }
@ -489,19 +514,22 @@ namespace CtrEditor
int col = 0; int col = 0;
// Filtrar los objetos de tipo osExtraccionTag y crear una nueva lista // Filtrar los objetos de tipo osExtraccionTag y crear una nueva lista
var osBuscarCoincidencias_List = ObjetosSimulables.OfType<osBuscarCoincidencias>().ToList(); var osBuscarCoincidencias_List = ObjetosSimulables
.OfType<osBuscarCoincidencias>()
.Where(tag => tag.Show_On_This_Page)
.ToList();
var osExtraccionTagBaseGrouped_List = ObjetosSimulables var osExtraccionTagBaseGrouped_List = ObjetosSimulables
.OfType<osExtraccionTag>() .OfType<osExtraccionTag>()
.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(); .ToList();
var osExtraccionTagBaseFix_List = ObjetosSimulables var osExtraccionTagBaseFix_List = ObjetosSimulables
.OfType<osExtraccionTag>() .OfType<osExtraccionTag>()
.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(); .ToList();
var osExtraccionTagCloned_List = ObjetosSimulables var osExtraccionTagCloned_List = ObjetosSimulables
.OfType<osExtraccionTag>() .OfType<osExtraccionTag>()
.Where(tag => tag.Cloned) .Where(tag => tag.Show_On_This_Page && tag.Cloned)
.ToList(); .ToList();
// Columnas Fijas para los Tags no agrupados que no son clonados // Columnas Fijas para los Tags no agrupados que no son clonados

View File

@ -164,6 +164,7 @@
<Grid Grid.Column="2"> <Grid Grid.Column="2">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="Auto" MinHeight="50" />
<RowDefinition Height="*" MinHeight="100" /> <RowDefinition Height="*" MinHeight="100" />
<!-- ListBox1 --> <!-- ListBox1 -->
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
@ -203,18 +204,40 @@
</ToolBar> </ToolBar>
</ToolBarTray> </ToolBarTray>
<xctk:PropertyGrid Grid.Row="1" x:Name="PanelFilter" AutoGenerateProperties="True"
ShowDescriptionByTooltip="False" ShowSearchBox="False" ShowSortOptions="False"
ShowSummary="False" ShowTitle="False" SelectedObject="{Binding OsListFilter}">
</xctk:PropertyGrid>
<!-- ListBox -->
<ListBox x:Name="ListaOs" Grid.Row="2" Margin="5" ItemsSource="{Binding VistaFiltrada}"
SelectedItem="{Binding SelectedItemOsList, Mode=TwoWay}"
SelectionChanged="ListaOs_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Nombre}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Enable_On_All_Pages}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Enable_On_All_Pages}" Value="False">
<Setter Property="Foreground" Value="Black" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<uc:TreeListControlOS x:Name="ListaOS" Grid.Row="1" Margin="5" ItemsSource="{Binding DataContext.ObjetosSimulables,
RelativeSource={RelativeSource AncestorType=Window}}"
SelectedItem="{Binding SelectedItemOsList, Mode=TwoWay, RelativeSource={RelativeSource AncestorType=Window}}"
SelectionChanged="TreeListControl_SelectionChanged" />
<!-- GridSplitter --> <!-- GridSplitter -->
<GridSplitter Grid.Row="2" Height="5" HorizontalAlignment="Stretch" Background="Gray" <GridSplitter Grid.Row="3" Height="5" HorizontalAlignment="Stretch" Background="Gray"
ResizeDirection="Rows" VerticalAlignment="Center" /> ResizeDirection="Rows" VerticalAlignment="Center" />
<!-- PanelEdicion --> <!-- PanelEdicion -->
<xctk:PropertyGrid Grid.Row="3" Margin="5" x:Name="PanelEdicion" AutoGenerateProperties="False" <xctk:PropertyGrid Grid.Row="4" Margin="5" x:Name="PanelEdicion" AutoGenerateProperties="False"
ShowDescriptionByTooltip="True"> ShowDescriptionByTooltip="True">
<xctk:PropertyGrid.EditorDefinitions> <xctk:PropertyGrid.EditorDefinitions>
@ -314,7 +337,7 @@
</xctk:PropertyGrid.EditorDefinitions> </xctk:PropertyGrid.EditorDefinitions>
</xctk:PropertyGrid> </xctk:PropertyGrid>
<ToolBarTray Grid.Row="4"> <ToolBarTray Grid.Row="5">
<ToolBar> <ToolBar>
<Button Command="{Binding TBEliminarUserControlCommand}" ToolTip="Eliminar Control"> <Button Command="{Binding TBEliminarUserControlCommand}" ToolTip="Eliminar Control">
<StackPanel> <StackPanel>

View File

@ -146,7 +146,7 @@ namespace CtrEditor
var viewModel = DataContext as MainViewModel; var viewModel = DataContext as MainViewModel;
if (viewModel != null) if (viewModel != null)
{ {
ListaOS.SelectedItem = ListaOS.FindViewModelForItem(datos); // Esto desencadenará ListaOs_SelectionChanged viewModel.SelectedItemOsList = datos; // Esto desencadenará ListaOs_SelectionChanged
} }
} }
@ -476,12 +476,12 @@ namespace CtrEditor
} }
} }
private void TreeListControl_SelectionChanged(object sender, ObjetosSim.UserControls.SelectionChangedEventArgs e) private void ListaOs_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{ {
//PanelEdicion.Children.Clear(); // Limpiar el panel existente //PanelEdicion.Children.Clear(); // Limpiar el panel existente
UserControlFactory.LimpiarPropiedadesosDatos(PanelEdicion); UserControlFactory.LimpiarPropiedadesosDatos(PanelEdicion);
if (e.SelectedItem.Item != null && e.SelectedItem.Item is osBase selectedObject) if (e.AddedItems.Count > 0 && e.AddedItems[0] is osBase selectedObject)
CargarPropiedadesosDatos(selectedObject); CargarPropiedadesosDatos(selectedObject);
} }
} }

View File

@ -344,7 +344,7 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
foreach (var obj in objetosSimulablesCopy) foreach (var obj in objetosSimulablesCopy)
if (obj is osExtraccionTag objExtraccionTag) if (obj is osExtraccionTag objExtraccionTag)
if (objExtraccionTag.Id_Search_Templates == this.Nombre && objExtraccionTag.Cloned) if (objExtraccionTag.Id_Search_Templates == this.Nombre && objExtraccionTag.Cloned)
_mainViewModel.ObjetosSimulables.Remove(objExtraccionTag); _mainViewModel.RemoverObjetoSimulable(objExtraccionTag);
var objetosSimulables2Copy = new List<osBase>(_mainViewModel.ObjetosSimulables); var objetosSimulables2Copy = new List<osBase>(_mainViewModel.ObjetosSimulables);
// Saltar el primer rectángulo en el foreach // Saltar el primer rectángulo en el foreach

View File

@ -25,7 +25,12 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public override string Nombre public override string Nombre
{ {
get => nombre; get => nombre;
set => SetProperty(ref nombre, value); set
{
if (Collumn_name == null || Collumn_name.Length==0)
Collumn_name = value;
SetProperty(ref nombre, value);
}
} }
[ObservableProperty] [ObservableProperty]
@ -38,18 +43,19 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
public override void TopChanged(float value) public override void TopChanged(float value)
{ {
base.TopChanged(value); base.TopChanged(value);
ResetTimer(); if (Extraer) ResetTimer();
} }
public override void LeftChanged(float value) public override void LeftChanged(float value)
{ {
base.LeftChanged(value); base.LeftChanged(value);
ResetTimer(); if (Extraer) ResetTimer();
} }
partial void OnExtraerChanged(bool value) partial void OnExtraerChanged(bool value)
{ {
ResetTimer(); if (Extraer)
ResetTimer();
} }
[ObservableProperty] [ObservableProperty]
@ -58,7 +64,8 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
partial void OnAnchoChanged(float value) partial void OnAnchoChanged(float value)
{ {
ResetTimer(); if (Extraer)
ResetTimer();
} }
[ObservableProperty] [ObservableProperty]
@ -67,7 +74,8 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
partial void OnAltoChanged(float value) partial void OnAltoChanged(float value)
{ {
ResetTimer(); if (Extraer)
ResetTimer();
} }
[ObservableProperty] [ObservableProperty]
@ -76,7 +84,8 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
partial void OnAnguloChanged(float value) partial void OnAnguloChanged(float value)
{ {
ResetTimer(); if (Extraer)
ResetTimer();
} }
public override void OnTimerAfterMovement() { public override void OnTimerAfterMovement() {
@ -84,6 +93,7 @@ namespace CtrEditor.ObjetosSim.Extraccion_Datos
if (Extraer) if (Extraer)
CaptureImageAreaAndDoOCR(); CaptureImageAreaAndDoOCR();
Extraer = false;
} }

View File

@ -39,6 +39,10 @@ namespace CtrEditor.PopUps
public AssignImagesViewModel() public AssignImagesViewModel()
{ {
SelectedImagenes = new ObservableCollection<string>();
ListaImagenes = new ObservableCollection<string>();
ObjetosSimulables = new ObservableCollection<osBase>();
SelectedObjetosSimulables = new ObservableCollection<osBase>(); SelectedObjetosSimulables = new ObservableCollection<osBase>();
SelectedObjetosSimulables.CollectionChanged += SelectedObjetosSimulables_CollectionChanged; SelectedObjetosSimulables.CollectionChanged += SelectedObjetosSimulables_CollectionChanged;
} }

View File

@ -12,9 +12,21 @@ using CtrEditor.ObjetosSim;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using Xceed.Wpf.Toolkit.PropertyGrid.Attributes; using Xceed.Wpf.Toolkit.PropertyGrid.Attributes;
using System.Collections; using System.Collections;
using CommunityToolkit.Mvvm.ComponentModel;
namespace CtrEditor namespace CtrEditor
{ {
public partial class ObjetosSimulablesFilterTypes : ObservableObject
{
[ObservableProperty]
public bool cloned;
[ObservableProperty]
public bool enable_On_All_Pages;
[ObservableProperty]
public bool show_On_This_Page;
}
public class ListItemPropertyDescriptor<T> : PropertyDescriptor public class ListItemPropertyDescriptor<T> : PropertyDescriptor
{ {
private readonly IList<T> owner; private readonly IList<T> owner;

View File

@ -24,6 +24,8 @@ namespace CtrEditor
private string _imagen; private string _imagen;
private int _id; private int _id;
public ObjetosSimulablesFilterTypes osListFilter;
// Propiedad pública con get y set para controlar el acceso a _strDirectorioTrabajo // Propiedad pública con get y set para controlar el acceso a _strDirectorioTrabajo
public string directorio public string directorio
{ {