From c353f6c6ea0f53770124f0284baf2cb2a81be443 Mon Sep 17 00:00:00 2001 From: Miguel Date: Wed, 18 Jun 2025 01:24:28 +0200 Subject: [PATCH] =?UTF-8?q?Se=20a=C3=B1adi=C3=B3=20la=20funcionalidad=20de?= =?UTF-8?q?=20gesti=C3=B3n=20de=20bibliotecas=20de=20objetos=20en=20la=20i?= =?UTF-8?q?nterfaz=20de=20usuario,=20incluyendo=20un=20nuevo=20comando=20p?= =?UTF-8?q?ara=20abrir=20la=20ventana=20de=20gesti=C3=B3n=20de=20bibliotec?= =?UTF-8?q?as.=20Se=20incorpor=C3=B3=20una=20nueva=20propiedad=20en=20la?= =?UTF-8?q?=20clase=20EstadoPersistente=20para=20almacenar=20directorios?= =?UTF-8?q?=20de=20bibliotecas=20y=20se=20realizaron=20mejoras=20en=20la?= =?UTF-8?q?=20estructura=20del=20c=C3=B3digo=20para=20una=20mayor=20clarid?= =?UTF-8?q?ad=20y=20mantenimiento.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Documentation/BibliotecaObjetos.md | 110 ++++++ MainViewModel.cs | 12 + MainWindow.xaml | 6 + PopUps/LibraryWindow.xaml | 168 +++++++++ PopUps/LibraryWindow.xaml.cs | 61 +++ PopUps/LibraryWindowViewModel.cs | 581 +++++++++++++++++++++++++++++ estadoPersistente.cs | 15 +- 7 files changed, 948 insertions(+), 5 deletions(-) create mode 100644 Documentation/BibliotecaObjetos.md create mode 100644 PopUps/LibraryWindow.xaml create mode 100644 PopUps/LibraryWindow.xaml.cs create mode 100644 PopUps/LibraryWindowViewModel.cs diff --git a/Documentation/BibliotecaObjetos.md b/Documentation/BibliotecaObjetos.md new file mode 100644 index 0000000..a3b9a94 --- /dev/null +++ b/Documentation/BibliotecaObjetos.md @@ -0,0 +1,110 @@ +# Biblioteca de Objetos Simulables + +## Descripción + +La biblioteca de objetos simulables es una nueva funcionalidad que permite gestionar y organizar objetos simulables en bibliotecas independientes del proyecto actual. Esto facilita la reutilización de objetos entre diferentes proyectos. + +## Características Principales + +### 1. Gestión de Directorios de Biblioteca +- **Agregar directorios**: Permite agregar nuevos directorios que contendrán bibliotecas de objetos +- **Eliminar directorios**: Permite remover directorios de la lista de bibliotecas +- **Persistencia global**: Los directorios se mantienen independientemente del proyecto actual + +### 2. Bibliotecas de Objetos +- **Proyecto actual**: El proyecto actual siempre aparece como una biblioteca +- **Archivos JSON**: Cada archivo JSON en los directorios de biblioteca se muestra como una biblioteca independiente +- **Visualización jerárquica**: Los objetos se organizan por tipo en un TreeView + +### 3. Sistema de Filtros +- **Filtros por tipo**: Permite mostrar/ocultar tipos específicos de objetos +- **Filtros por etiquetas**: Filtrado por etiquetas usando # (ej: #motor #bomba) +- **Filtros especiales**: + - Cloned (objetos clonados) + - Auto Created (objetos creados automáticamente) + - Enable On All Pages (objetos globales) + - Show On This Page (objetos visibles en página actual) + +### 4. Operaciones de Objetos +- **Copiar (Ctrl+C)**: Copia objetos seleccionados al portapapeles interno +- **Pegar (Ctrl+V)**: Pega objetos del portapapeles a la biblioteca seleccionada +- **Eliminar**: Elimina objetos de bibliotecas (no disponible para proyecto actual) +- **Visualizar propiedades**: PropertyGrid de solo lectura para inspeccionar objetos + +### 5. Gestión de Bibliotecas +- **Crear nueva biblioteca**: Crea un archivo JSON vacío como nueva biblioteca +- **Cargar automáticamente**: Las bibliotecas se cargan automáticamente al seleccionar directorios + +## Cómo Usar + +### Acceso +1. Haga clic en el botón **"Biblioteca"** en la barra de herramientas principal (al lado de "Assing Pages") +2. Se abrirá la ventana modal de gestión de bibliotecas + +### Configurar Directorios de Biblioteca +1. En la columna izquierda "Directorios de Biblioteca", haga clic en **"Agregar"** +2. Seleccione la carpeta que contendrá sus bibliotecas de objetos +3. El directorio se agregará a la lista y se guardará automáticamente + +### Navegar Bibliotecas +1. Seleccione un directorio de la lista en la columna izquierda +2. En la columna central aparecerán todas las bibliotecas (archivos JSON) encontradas +3. Seleccione una biblioteca para ver sus objetos organizados por tipo + +### Filtrar Objetos +1. Use la sección "Filtros" para mostrar/ocultar tipos específicos +2. Use el campo de búsqueda para filtrar por etiquetas (ej: `#motor #conveyor`) +3. Active los filtros especiales según sea necesario + +### Copiar/Pegar Objetos +1. **Para copiar**: Seleccione un objeto y presione Ctrl+C o haga clic en "Copiar" +2. **Para pegar**: Seleccione la biblioteca destino y presione Ctrl+V o haga clic en "Pegar" +3. Los objetos se copiarán con nuevos IDs únicos + +### Crear Nueva Biblioteca +1. Seleccione un directorio de biblioteca +2. Haga clic en **"Nueva Biblioteca"** +3. Elija nombre y ubicación para el archivo JSON +4. Se creará una biblioteca vacía lista para usar + +## Casos de Uso + +### Biblioteca de Componentes Estándar +- Cree una biblioteca con motores, sensores y actuadores estándar +- Reutilice estos componentes en múltiples proyectos +- Mantenga configuraciones consistentes entre proyectos + +### Plantillas de Sistemas +- Guarde sistemas completos (ej: línea de ensamblaje básica) +- Use como punto de partida para nuevos proyectos +- Facilite la estandarización de diseños + +### Backup y Versioning +- Mantenga copias de objetos importantes en bibliotecas externas +- Cree versiones de componentes con diferentes configuraciones +- Facilite la colaboración entre equipos + +## Estructura de Archivos + +Las bibliotecas se almacenan como archivos JSON con la misma estructura que los archivos de proyecto: + +```json +{ + "ObjetosSimulables": [...], + "UnitConverter": {...}, + "PLC_ConnectionData": {...} +} +``` + +## Notas Técnicas + +- Los directorios de biblioteca se almacenan en `EstadoPersistente.Instance.LibraryDirectories` +- Los objetos se serializan usando Newtonsoft.Json con `TypeNameHandling.All` +- La funcionalidad es independiente del directorio de trabajo actual +- Los filtros utilizan el mismo sistema que la aplicación principal (`osVisFilter`) + +## Limitaciones + +- No se pueden editar objetos directamente en las bibliotecas (solo copia/pegar) +- La eliminación solo está disponible para bibliotecas externas (no proyecto actual) +- Los archivos JSON deben tener estructura válida de SimulationData \ No newline at end of file diff --git a/MainViewModel.cs b/MainViewModel.cs index 679c6f6..fbc4c90 100644 --- a/MainViewModel.cs +++ b/MainViewModel.cs @@ -24,6 +24,7 @@ using System.Text.RegularExpressions; using System.Collections.Specialized; using CtrEditor.Serialization; // Add this line using CtrEditor.Controls; // Add this using directive +using CtrEditor.PopUps; // Add this using directive namespace CtrEditor { @@ -105,6 +106,7 @@ namespace CtrEditor public ICommand TBMultiPageExtractTagsCommand { get; } public ICommand TBMultiPageAnalizeCommand { get; } public ICommand TBMultiPageMatrixCommand { get; } + public ICommand TBLibraryManagerCommand { get; } public ICommand TBTogglePLCConnectionCommand => new RelayCommand(() => @@ -380,6 +382,7 @@ namespace CtrEditor TBAssingPagesCommand = new RelayCommand(AssingPagesCommand); TBMultiPageAnalizeCommand = new RelayCommand(MultiPageAnalizeCommand); TBMultiPageMatrixCommand = new RelayCommand(MultiPageMatrixCommand); + TBLibraryManagerCommand = new RelayCommand(ShowLibraryManager); stopwatch_Sim = new Stopwatch(); stopwatch_Sim.Start(); @@ -1158,6 +1161,15 @@ namespace CtrEditor { OnPropertyChanged(nameof(SelectedItemOsList)); } + + private void ShowLibraryManager() + { + var libraryWindow = new PopUps.LibraryWindow(); + var libraryViewModel = new PopUps.LibraryWindowViewModel(this); + libraryWindow.DataContext = libraryViewModel; + libraryWindow.Owner = MainWindow; + libraryWindow.ShowDialog(); + } } public class SimulationData diff --git a/MainWindow.xaml b/MainWindow.xaml index e90630e..cc4fa6d 100644 --- a/MainWindow.xaml +++ b/MainWindow.xaml @@ -251,6 +251,12 @@ + diff --git a/PopUps/LibraryWindow.xaml b/PopUps/LibraryWindow.xaml new file mode 100644 index 0000000..8ba4467 --- /dev/null +++ b/PopUps/LibraryWindow.xaml @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +