using CommunityToolkit.Mvvm.ComponentModel; using CtrEditor.Convertidores; using CtrEditor.Siemens; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace CtrEditor.ObjetosSim { /// /// Interaction logic for ucBoton.xaml /// public partial class osBoton : osBase, IosBase { // Otros datos y métodos relevantes para la simulación public static string NombreClase() { return "Boton"; } private string nombre = NombreClase(); public override string Nombre { get => nombre; set => SetProperty(ref nombre, value); } [ObservableProperty] public bool tipo_NC; [ObservableProperty] private Brush color; [ObservableProperty] private Brush colorButton_oculto; [ObservableProperty] public float tamano; [ObservableProperty] public bool estado; partial void OnEstadoChanged(bool value) { if (value) ColorButton_oculto = Brushes.LightGreen; else ColorButton_oculto = Color; if (!Tipo_NC) EscribirBitTag(Tag, value); else EscribirBitTag(Tag, !value); } [ObservableProperty] public string tag; public void ButtonDownCommand() { Estado = true; } public void ButtonUpCommand() { Estado = false; } public osBoton() { Tamano = 0.30f; Estado = false; Tag = "M50.0"; // Set initial color Color = Brushes.LightBlue; } public override void UpdateGeometryStart() { // Se llama antes de la simulacion } public override void UpdatePLC(PLCModel plc, int elapsedMilliseconds) { } public override void UpdatePLCPrimerCiclo() { // Escribimos el valor actual al iniciar la conexion // Esto es util para NC principalmente OnEstadoChanged(Estado); } public override void UpdateControl(int elapsedMilliseconds) { } public override void ucLoaded() { // El UserControl ya se ha cargado y podemos obtener las coordenadas para // crear el objeto de simulacion ActualizarLeftTop(); } public override void ucUnLoaded() { // El UserControl se esta eliminando // eliminar el objeto de simulacion } } public partial class ucBoton : UserControl, IDataContainer { public osBase? Datos { get; set; } public ucBoton() { InitializeComponent(); this.DataContextChanged += OnDataContextChanged; this.Loaded += OnLoaded; this.Unloaded += OnUnloaded; } private void OnLoaded(object sender, RoutedEventArgs e) { Datos?.ucLoaded(); } private void OnUnloaded(object sender, RoutedEventArgs e) { Datos?.ucUnLoaded(); } private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { Datos = e.NewValue as osBase; } private void Ellipse_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { if (Datos is osBoton osBotonData) { osBotonData.ButtonDownCommand(); e.Handled = true; // Evita que el evento se propague } } private void Ellipse_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { if (Datos is osBoton osBotonData) { osBotonData.ButtonUpCommand(); e.Handled = true; // Evita que el evento se propague } } public void Resize(float width, float height) { } public void Move(float LeftPixels, float TopPixels) { if (Datos != null) { Datos.Left = PixelToMeter.Instance.calc.PixelsToMeters(LeftPixels); Datos.Top = PixelToMeter.Instance.calc.PixelsToMeters(TopPixels); } } public void Rotate(float Angle) { } public void Highlight(bool State) { } public int ZIndex() { return 10; } } }