using CommunityToolkit.Mvvm.ComponentModel; using LibS7Adv; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using CtrEditor.FuncionesBase; 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] string button_Name; [ObservableProperty] public bool tipo_NC; [ObservableProperty] [property: Hidden] Color color_Pressed; [ObservableProperty] Color color_Titulo; [ObservableProperty] Color color; partial void OnColorChanged(Color value) { OnEstadoChanged(Estado); } [ObservableProperty] [property: Hidden] private Color colorButton; [ObservableProperty] public float tamano; public override void OnResize(float Delta_Width, float Delta_Height) { Tamano += Delta_Width + Delta_Height; } [ObservableProperty] public bool estado; partial void OnEstadoChanged(bool value) { if (value) Color_Pressed = Colors.LightGreen; else Color_Pressed = Colors.Gray; if (!Tipo_NC) EscribirBitTag(Tag, value); else EscribirBitTag(Tag, !value); } [ObservableProperty] public string tag; [ObservableProperty] public string tag_Luz; public void ButtonDownCommand() { Estado = true; } public void ButtonUpCommand() { Estado = false; } public osBoton() { Tamano = 0.30f; Estado = false; Tag = "M50.0"; // Set initial color Color = Colors.LightBlue; color_Titulo = Colors.Black; button_Name = "TAG"; Color_Pressed = Colors.Gray; } public override void UpdateGeometryStart() { // Se llama antes de la simulacion } public override void UpdatePLC(PLCViewModel plc, int elapsedMilliseconds) { if (LeerBitTag(Tag_Luz)) ColorButton = ObtenerColorMasClaroYSaturado(Color, 0.3, 0.5); else ColorButton = Color; } 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 base.ucLoaded(); ColorButton = Color; } 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 Highlight(bool State) { } public ZIndexEnum ZIndex() { return ZIndexEnum.Estaticos; } } }