Terminado el timer

This commit is contained in:
Miguel 2024-05-03 10:13:25 +02:00
parent 1e30f00c57
commit 101a65ad27
9 changed files with 112 additions and 27 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework> <TargetFramework>net8.0-windows8.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>

15
ICtrSimulado.cs Normal file
View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CtrEditor
{
public interface ICtrSimulado
{
string Nombre { get; }
void Update();
// other common methods and properties
}
}

View File

@ -1,4 +1,5 @@
using System; using CtrEditor;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
@ -12,26 +13,71 @@ using System.Windows.Input;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using static System.Runtime.InteropServices.JavaScript.JSType;
using System.Windows.Threading;
namespace CtrEditor namespace CtrEditor
{ {
public class TickSimulacionEventArgs : EventArgs
{
// Aquí puedes agregar propiedades o campos para pasar información adicional
// en el evento TickSimulacion
}
public class MainViewModel : INotifyPropertyChanged public class MainViewModel : INotifyPropertyChanged
{ {
public DatosDeTrabajo datosDeTrabajo { get; } public DatosDeTrabajo datosDeTrabajo { get; }
public ObservableCollection<string> listaImagenes { get; private set; } // Publicación de las claves del diccionario public ObservableCollection<string> listaImagenes { get; private set; } // Publicación de las claves del diccionario
private ObservableCollection<ICtrSimulado> _funciones;
private readonly DispatcherTimer _timerSimulacion;
private string _selectedImage; private string _selectedImage;
// Evento que se dispara cuando se selecciona una nueva imagen // Evento que se dispara cuando se selecciona una nueva imagen
public event EventHandler<string> ImageSelected; public event EventHandler<string> ImageSelected;
public event EventHandler<TickSimulacionEventArgs> TickSimulacion;
public MainViewModel() public MainViewModel()
{ {
OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory); OpenWorkDirectoryCommand = new RelayCommand(OpenWorkDirectory);
datosDeTrabajo = new DatosDeTrabajo(); datosDeTrabajo = new DatosDeTrabajo();
listaImagenes = new ObservableCollection<string>(datosDeTrabajo.Imagenes.Keys); listaImagenes = new ObservableCollection<string>(datosDeTrabajo.Imagenes.Keys);
_funciones = new ObservableCollection<ICtrSimulado>();
_funciones.Add(new OSBotella());
_funciones.Add(new OSPack());
directorioTrabajo = EstadoPersistente.Instance.directorio; directorioTrabajo = EstadoPersistente.Instance.directorio;
_timerSimulacion = new DispatcherTimer();
_timerSimulacion.Interval = TimeSpan.FromMilliseconds(100); // ajusta el intervalo según sea necesario
_timerSimulacion.Tick += OnTickSimulacion;
StartSimulationCommand = new RelayCommand(StartSimulation);
StopSimulationCommand = new RelayCommand(StopSimulation);
} }
public ICommand StartSimulationCommand { get; }
public ICommand StopSimulationCommand { get; }
private void StartSimulation()
{
_timerSimulacion.Start();
}
private void StopSimulation()
{
_timerSimulacion.Stop();
}
private void OnTickSimulacion(object sender, EventArgs e)
{
var args = new TickSimulacionEventArgs();
OnTickSimulacion(args);
}
protected virtual void OnTickSimulacion(TickSimulacionEventArgs e)
{
TickSimulacion?.Invoke(this, e);
}
public string directorioTrabajo public string directorioTrabajo
{ {
@ -50,6 +96,12 @@ namespace CtrEditor
} }
} }
public ObservableCollection<ICtrSimulado> CtrSimulado
{
get { return _funciones; }
set { _funciones = value; }
}
public string SelectedImage public string SelectedImage
{ {
get => _selectedImage; get => _selectedImage;
@ -84,6 +136,7 @@ namespace CtrEditor
{ {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
} }
} }
} }

View File

@ -13,8 +13,8 @@
<Menu VerticalAlignment="Top" HorizontalAlignment="Stretch"> <Menu VerticalAlignment="Top" HorizontalAlignment="Stretch">
<MenuItem Header="Projecto"> <MenuItem Header="Projecto">
<MenuItem Header="Abrir Directorio de trabajo" Command="{Binding OpenWorkDirectoryCommand}" /> <MenuItem Header="Abrir Directorio de trabajo" Command="{Binding OpenWorkDirectoryCommand}" />
<MenuItem Header="Iniciar Simulacion" Command="{Binding RunSimCommand}" /> <MenuItem Header="Iniciar Simulacion" Command="{Binding StartSimulationCommand}" />
<MenuItem Header="Detenet Simulacion" Command="{Binding StopSimCommand}" /> <MenuItem Header="Detenet Simulacion" Command="{Binding StopSimulationCommand}" />
<MenuItem Header="Guardar" Command="{Binding SaveCommand}" /> <MenuItem Header="Guardar" Command="{Binding SaveCommand}" />
<MenuItem Header="Salir" Command="{Binding ExitCommand}" /> <MenuItem Header="Salir" Command="{Binding ExitCommand}" />
</MenuItem> </MenuItem>
@ -23,9 +23,9 @@
<Grid Margin="0,20,0,0"> <Grid Margin="0,20,0,0">
<!-- Margen superior para el menú --> <!-- Margen superior para el menú -->
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*" MinWidth="100"/>
<ColumnDefinition Width="2*"/> <ColumnDefinition Width="4*" MinWidth="200"/>
<ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*" MinWidth="100"/>
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<!-- Primera Columna --> <!-- Primera Columna -->
@ -35,23 +35,13 @@
<RowDefinition Height="1*"/> <RowDefinition Height="1*"/>
</Grid.RowDefinitions> </Grid.RowDefinitions>
<ListBox x:Name="ListaImagenes" Grid.Row="0" Margin="5" ItemsSource="{Binding listaImagenes}" SelectedItem="{Binding SelectedImage}" /> <ListBox x:Name="ListaImagenes" Grid.Row="0" Margin="5" ItemsSource="{Binding listaImagenes}" SelectedItem="{Binding SelectedImage}" />
<ListBox x:Name="ListaFunciones" Grid.Row="1" Margin="5"/> <ListBox x:Name="ListaFunciones" Grid.Row="1" Margin="5" ItemsSource="{Binding CtrSimulado}" DisplayMemberPath="Nombre"/>
</Grid> </Grid>
<!-- GridSplitter -->
<GridSplitter Grid.Column="0" Grid.Row="0" HorizontalAlignment="Right" Width="5" Background="LightGray" />
<!-- Segunda Columna --> <!-- Segunda Columna -->
<Grid Grid.Column="1"> <Grid Grid.Column="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<!-- Espacio para el menú -->
<RowDefinition Height="*"/>
<!-- Espacio restante para el Canvas -->
</Grid.RowDefinitions>
<Menu Grid.Row="0" Height="20" VerticalAlignment="Top">
<MenuItem Header="Nuevo"/>
<MenuItem Header="Eliminar"/>
</Menu>
<ScrollViewer x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" PanningMode="Both"> <ScrollViewer x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" PanningMode="Both">
<Canvas x:Name="ImagenEnTrabajoCanvas" Margin="200"> <Canvas x:Name="ImagenEnTrabajoCanvas" Margin="200">
<!-- El Margin puede ser ajustado según el espacio adicional que quieras proporcionar --> <!-- El Margin puede ser ajustado según el espacio adicional que quieras proporcionar -->
@ -62,6 +52,8 @@
</ScrollViewer> </ScrollViewer>
</Grid> </Grid>
<!-- GridSplitter -->
<GridSplitter Grid.Column="1" Grid.Row="0" HorizontalAlignment="Right" Width="5" Background="LightGray" />
<!-- Tercera Columna --> <!-- Tercera Columna -->
<Grid Grid.Column="2"> <Grid Grid.Column="2">

View File

@ -35,6 +35,7 @@ namespace CtrEditor
if (DataContext is MainViewModel viewModel) if (DataContext is MainViewModel viewModel)
{ {
viewModel.ImageSelected += ViewModel_ImageSelected; viewModel.ImageSelected += ViewModel_ImageSelected;
viewModel.TickSimulacion += MainViewModel_TickSimulacion;
} }
} }
private void ViewModel_ImageSelected(object sender, string imagePath) private void ViewModel_ImageSelected(object sender, string imagePath)
@ -139,6 +140,20 @@ namespace CtrEditor
e.Handled = true; // Evita el procesamiento adicional del evento e.Handled = true; // Evita el procesamiento adicional del evento
} }
private void MainViewModel_TickSimulacion(object sender, TickSimulacionEventArgs e)
{
// aquí puedes agregar la lógica para actualizar tus UserControl
// en el ImagenEnTrabajoCanvas
foreach (var child in ImagenEnTrabajoCanvas.Children)
{
if (child is ICtrSimulado uc)
{
// llama al método Update de cada UserControl
uc.Update();
}
}
}
private void MainWindow_Closed(object sender, EventArgs e) private void MainWindow_Closed(object sender, EventArgs e)
{ {
if (DataContext is MainViewModel viewModel) if (DataContext is MainViewModel viewModel)

View File

@ -18,12 +18,17 @@ namespace CtrEditor
/// <summary> /// <summary>
/// Interaction logic for ObjetoSimuladoBotella.xaml /// Interaction logic for ObjetoSimuladoBotella.xaml
/// </summary> /// </summary>
public partial class ObjetoSimuladoBotella : UserControl public partial class OSBotella : UserControl, ICtrSimulado
{ {
public ObjetoSimuladoBotella() public OSBotella()
{ {
InitializeComponent(); InitializeComponent();
} }
public string Nombre => "Botellas";
public void Update()
{
// implementation of Update method
}
} }
} }

View File

@ -1,4 +1,4 @@
<UserControl x:Class="CtrEditor.ObjetoSimuladoBotella" <UserControl x:Class="CtrEditor.OSBotella"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="100" Height="300"> Width="100" Height="300">

View File

@ -1,4 +1,4 @@
<UserControl x:Class="CtrEditor.ObjetoSimuladoPack" <UserControl x:Class="CtrEditor.OSPack"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="200" Height="150"> Width="200" Height="150">

View File

@ -18,12 +18,17 @@ namespace CtrEditor
/// <summary> /// <summary>
/// Interaction logic for ObjetoSimuladoPack.xaml /// Interaction logic for ObjetoSimuladoPack.xaml
/// </summary> /// </summary>
public partial class ObjetoSimuladoPack : UserControl public partial class OSPack : UserControl, ICtrSimulado
{ {
public ObjetoSimuladoPack() public OSPack()
{ {
InitializeComponent(); InitializeComponent();
} }
public string Nombre => "Packs";
public void Update()
{
// implementation of Update method
}
} }
} }