From 883620b69d7f677fbb880101040fc884a9aa7300 Mon Sep 17 00:00:00 2001 From: Miguel Date: Fri, 13 Jun 2025 22:07:37 +0200 Subject: [PATCH] =?UTF-8?q?Implementada=20la=20funcionalidad=20de=20bloque?= =?UTF-8?q?o=20y=20desbloqueo=20de=20objetos=20seleccionados=20en=20el=20m?= =?UTF-8?q?en=C3=BA=20contextual:=20se=20agreg=C3=B3=20un=20submen=C3=BA?= =?UTF-8?q?=20para=20gestionar=20el=20estado=20de=20bloqueo=20de=20los=20o?= =?UTF-8?q?bjetos,=20actualizando=20visualmente=20la=20selecci=C3=B3n=20y?= =?UTF-8?q?=20marcando=20cambios=20sin=20guardar=20en=20el=20modelo=20de?= =?UTF-8?q?=20vista.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MainWindow.xaml.cs | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs index 6be777a..801cdf5 100644 --- a/MainWindow.xaml.cs +++ b/MainWindow.xaml.cs @@ -426,6 +426,23 @@ namespace CtrEditor } } + private void LockSelectedObjects(bool lockState) + { + foreach (var selectedObject in _objectManager.SelectedObjects) + { + selectedObject.Lock_movement = lockState; + } + + // Actualizar los visuales de selección para reflejar el cambio de estado + _objectManager.UpdateSelectionVisuals(); + + // Marcar como cambios sin guardar + if (DataContext is MainViewModel viewModel) + { + viewModel.HasUnsavedChanges = true; + } + } + private void Canvas_MouseEnter(object sender, MouseEventArgs e) { if (e.OriginalSource == ImagenEnTrabajoCanvas) @@ -628,6 +645,35 @@ namespace CtrEditor contextMenu.Items.Add(editPropertiesItem); contextMenu.Items.Add(new Separator()); + + // Opciones de bloqueo/desbloqueo + var lockSubmenu = new MenuItem { Header = "Bloqueo" }; + + // Verificar el estado actual de los objetos + int totalObjects = _objectManager.SelectedObjects.Count; + int lockedObjects = _objectManager.SelectedObjects.Count(obj => obj.Lock_movement); + int unlockedObjects = totalObjects - lockedObjects; + + var lockAllItem = new MenuItem { Header = $"Bloquear Objetos ({unlockedObjects} desbloqueados)" }; + lockAllItem.Click += (s, e) => LockSelectedObjects(true); + lockAllItem.IsEnabled = unlockedObjects > 0; + lockSubmenu.Items.Add(lockAllItem); + + var unlockAllItem = new MenuItem { Header = $"Desbloquear Objetos ({lockedObjects} bloqueados)" }; + unlockAllItem.Click += (s, e) => LockSelectedObjects(false); + unlockAllItem.IsEnabled = lockedObjects > 0; + lockSubmenu.Items.Add(unlockAllItem); + + // Mostrar estado actual si hay mezcla + if (lockedObjects > 0 && unlockedObjects > 0) + { + lockSubmenu.Items.Add(new Separator()); + var statusItem = new MenuItem { Header = $"Estado: {lockedObjects} bloqueados, {unlockedObjects} libres", IsEnabled = false }; + lockSubmenu.Items.Add(statusItem); + } + + contextMenu.Items.Add(lockSubmenu); + contextMenu.Items.Add(new Separator()); } contextMenu.IsOpen = true;