using CommunityToolkit.Mvvm.ComponentModel; using LibS7Adv; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using CtrEditor.FuncionesBase; using System.ComponentModel; 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 "Botón"; } private string nombre = NombreClase(); [property: Category("Identificación")] [property: Description("Nombre identificativo del objeto")] [property: Name("Nombre")] public override string Nombre { get => nombre; set => SetProperty(ref nombre, value); } [ObservableProperty] [property: Category("Configuración")] [property: Description("Texto mostrado en el botón")] [property: Name("Texto del Botón")] string button_Name; [ObservableProperty] [property: Category("Configuración")] [property: Description("Tipo normalmente cerrado")] [property: Name("Normalmente Cerrado")] public bool tipo_NC; [ObservableProperty] [property: Hidden] [property: Category("Apariencia")] [property: Description("Color cuando está presionado")] [property: Name("Color Presionado")] Color color_Pressed; [ObservableProperty] [property: Category("Apariencia")] [property: Description("Color del texto del botón")] [property: Name("Color del Texto")] Color color_Titulo; [ObservableProperty] [property: Category("Apariencia")] [property: Description("Color principal del botón")] [property: Name("Color")] Color color; partial void OnColorChanged(Color value) { OnEstadoChanged(Estado); } [ObservableProperty] [property: Hidden] [property: Category("Apariencia")] [property: Description("Color actual del botón")] [property: Name("Color Actual")] private Color colorButton; [ObservableProperty] [property: Category("Apariencia")] [property: Description("Tamaño visual del botón")] [property: Name("Tamaño")] public float tamano; public override void OnResize(float Delta_Width, float Delta_Height) { Tamano += Delta_Width + Delta_Height; } [ObservableProperty] [property: Category("Simulación")] [property: Description("Estado actual del botón")] [property: Name("Estado")] 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] [property: Category("Enlace PLC")] [property: Description("Dirección del tag en el PLC")] [property: Name("Tag PLC")] public string tag; [ObservableProperty] [property: Category("Enlace PLC")] [property: Description("Tag para controlar luz indicadora")] [property: Name("Tag Luz")] 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 int zIndex_fromFrames { 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_Base() { return ZIndexEnum.Estaticos; } } }