Implementada la funcionalidad de bloqueo y desbloqueo de objetos seleccionados en el menú contextual: se agregó un submenú para gestionar el estado de bloqueo de los objetos, actualizando visualmente la selección y marcando cambios sin guardar en el modelo de vista.
This commit is contained in:
parent
9c4e87be9b
commit
883620b69d
|
@ -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)
|
private void Canvas_MouseEnter(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
if (e.OriginalSource == ImagenEnTrabajoCanvas)
|
if (e.OriginalSource == ImagenEnTrabajoCanvas)
|
||||||
|
@ -628,6 +645,35 @@ namespace CtrEditor
|
||||||
contextMenu.Items.Add(editPropertiesItem);
|
contextMenu.Items.Add(editPropertiesItem);
|
||||||
|
|
||||||
contextMenu.Items.Add(new Separator());
|
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;
|
contextMenu.IsOpen = true;
|
||||||
|
|
Loading…
Reference in New Issue