diff --git a/Converters/ImageDisplayNameConverter.cs b/Converters/ImageDisplayNameConverter.cs index 4aeb080..8609de0 100644 --- a/Converters/ImageDisplayNameConverter.cs +++ b/Converters/ImageDisplayNameConverter.cs @@ -14,7 +14,7 @@ namespace CtrEditor.Converters // Buscar el MainViewModel en el Application.Current.MainWindow.DataContext if (Application.Current?.MainWindow?.DataContext is MainViewModel viewModel) { - return viewModel.GetImageDisplayName(imageName); + return viewModel.GetImageDisplayNameWithTags(imageName); } } return value; diff --git a/DatosDeTrabajo.cs b/DatosDeTrabajo.cs index 7cb93c4..36c131e 100644 --- a/DatosDeTrabajo.cs +++ b/DatosDeTrabajo.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; +using Newtonsoft.Json; namespace CtrEditor { @@ -68,6 +69,8 @@ namespace CtrEditor private void CargarDatosImagenesExistentes() { + var jsonSerializerSettings = GetJsonSerializerSettings(); + foreach (var imageName in Imagenes.Keys) { string jsonPath = ObtenerPathImagenConExtension(imageName, ".json"); @@ -75,17 +78,65 @@ namespace CtrEditor { try { - // Solo cargamos los datos de imagen si existe el archivo JSON - // El StateSerializer se encargará de cargar los datos completos - _mainViewModel.GetOrCreateImageData(imageName); + // Cargar datos completos del archivo JSON + string jsonString = File.ReadAllText(jsonPath); + var simulationData = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString, jsonSerializerSettings); + + // Cargar datos de imágenes si existen en el archivo + if (simulationData?.ImageDataDictionary != null) + { + foreach (var imageDataEntry in simulationData.ImageDataDictionary) + { + // Solo cargar si no existe ya en el diccionario principal + if (!_mainViewModel._imageDataDictionary.ContainsKey(imageDataEntry.Key)) + { + _mainViewModel._imageDataDictionary[imageDataEntry.Key] = imageDataEntry.Value; + } + } + } + + // Compatibilidad con versiones anteriores (ImageCustomNames) +#pragma warning disable CS0618 // Type or member is obsolete + if (simulationData?.ImageCustomNames != null) + { + foreach (var customName in simulationData.ImageCustomNames) + { + var imageData = _mainViewModel.GetOrCreateImageData(customName.Key); + if (string.IsNullOrEmpty(imageData.CustomName)) // Solo actualizar si no tiene nombre personalizado + { + imageData.CustomName = customName.Value; + } + } + } +#pragma warning restore CS0618 } catch (Exception ex) { // Log del error pero no fallar la carga completa - System.Diagnostics.Debug.WriteLine($"Error al pre-cargar datos de imagen {imageName}: {ex.Message}"); + System.Diagnostics.Debug.WriteLine($"Error al cargar datos de imagen desde {jsonPath}: {ex.Message}"); + + // Como fallback, crear una instancia vacía + _mainViewModel.GetOrCreateImageData(imageName); } } + else + { + // Si no existe archivo JSON, crear instancia vacía + _mainViewModel.GetOrCreateImageData(imageName); + } } } + + private Newtonsoft.Json.JsonSerializerSettings GetJsonSerializerSettings() + { + return new Newtonsoft.Json.JsonSerializerSettings + { + Formatting = Newtonsoft.Json.Formatting.Indented, + NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, + TypeNameHandling = Newtonsoft.Json.TypeNameHandling.Auto, + ObjectCreationHandling = Newtonsoft.Json.ObjectCreationHandling.Replace, + ConstructorHandling = Newtonsoft.Json.ConstructorHandling.AllowNonPublicDefaultConstructor + }; + } } } diff --git a/MainViewModel.cs b/MainViewModel.cs index d8de8dc..d8dddf5 100644 --- a/MainViewModel.cs +++ b/MainViewModel.cs @@ -448,6 +448,22 @@ namespace CtrEditor return imageName; } + public string GetImageDisplayNameWithTags(string imageName) + { + if (_imageDataDictionary.TryGetValue(imageName, out var imageData)) + { + var displayName = imageData.DisplayName; + var tags = imageData.Etiquetas; + + if (!string.IsNullOrWhiteSpace(tags)) + { + return $"{displayName} {tags}"; + } + return displayName; + } + return imageName; + } + public Models.ImageData GetOrCreateImageData(string imageName) { if (!_imageDataDictionary.TryGetValue(imageName, out var imageData))