Luego de AgregarDirectorio de trabajo
This commit is contained in:
parent
2243c5ac9e
commit
a86a84bd9f
|
@ -0,0 +1,42 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.IO;
|
||||||
|
using Path = System.IO.Path;
|
||||||
|
|
||||||
|
namespace ROIEditor
|
||||||
|
{
|
||||||
|
public class EstadoTrabajo
|
||||||
|
{
|
||||||
|
public string strDirectorioTrabajo;
|
||||||
|
public string NombreImagenEditando;
|
||||||
|
|
||||||
|
private static string _filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "EstadoTrabajo.json");
|
||||||
|
|
||||||
|
public EstadoTrabajo()
|
||||||
|
{
|
||||||
|
strDirectorioTrabajo = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
|
||||||
|
NombreImagenEditando = null;
|
||||||
|
}
|
||||||
|
// Método para guardar el estado en un archivo JSON
|
||||||
|
public void GuardarEstado()
|
||||||
|
{
|
||||||
|
string json = JsonConvert.SerializeObject(this);
|
||||||
|
File.WriteAllText(_filePath, json);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Método para cargar el estado desde un archivo JSON
|
||||||
|
public static EstadoTrabajo CargarEstado()
|
||||||
|
{
|
||||||
|
if (File.Exists(_filePath))
|
||||||
|
{
|
||||||
|
string json = File.ReadAllText(_filePath);
|
||||||
|
return JsonConvert.DeserializeObject<EstadoTrabajo>(json);
|
||||||
|
}
|
||||||
|
return new EstadoTrabajo(); // Devuelve una nueva instancia si no existe el archivo
|
||||||
|
}
|
||||||
|
|
||||||
|
public string CarpetaDB()
|
||||||
|
{
|
||||||
|
return Path.Combine(strDirectorioTrabajo, "roieditor.db");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,7 +11,7 @@ using System.ComponentModel;
|
||||||
namespace ROIEditor
|
namespace ROIEditor
|
||||||
{
|
{
|
||||||
|
|
||||||
public class DatabaseManagerList<T>
|
public class ListaPersistente<T>
|
||||||
{
|
{
|
||||||
private readonly string connectionString;
|
private readonly string connectionString;
|
||||||
private readonly string tableName;
|
private readonly string tableName;
|
||||||
|
@ -46,7 +46,7 @@ namespace ROIEditor
|
||||||
|
|
||||||
public int Count => data.Count;
|
public int Count => data.Count;
|
||||||
|
|
||||||
public DatabaseManagerList(string dbPath, string tableName)
|
public ListaPersistente(string dbPath, string tableName)
|
||||||
{
|
{
|
||||||
connectionString = $"Data Source={dbPath}";
|
connectionString = $"Data Source={dbPath}";
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
|
@ -130,14 +130,14 @@ namespace ROIEditor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DatabaseManagerItem<T> where T : new()
|
public class ItemPersistente<T> where T : new()
|
||||||
{
|
{
|
||||||
private readonly string connectionString;
|
private readonly string connectionString;
|
||||||
private readonly string tableName;
|
private readonly string tableName;
|
||||||
private T data; // Ahora 'data' es un objeto de tipo T
|
private T data; // Ahora 'data' es un objeto de tipo T
|
||||||
public string Clave;
|
public string Clave;
|
||||||
|
|
||||||
public DatabaseManagerItem(string dbPath, string tableName)
|
public ItemPersistente(string dbPath, string tableName)
|
||||||
{
|
{
|
||||||
connectionString = $"Data Source={dbPath}";
|
connectionString = $"Data Source={dbPath}";
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
|
@ -21,57 +21,85 @@
|
||||||
</Style>
|
</Style>
|
||||||
</Window.Resources>
|
</Window.Resources>
|
||||||
<DockPanel LastChildFill="True">
|
<DockPanel LastChildFill="True">
|
||||||
<!-- Panel izquierdo para la lista de imágenes -->
|
<!-- Campo de texto y botón para directorio de trabajo en la parte superior -->
|
||||||
<ListBox x:Name="ListaImagenes" DockPanel.Dock="Left" Width="200" Margin="5">
|
<Grid DockPanel.Dock="Top" Height="25" Margin="5">
|
||||||
<!-- Aquí irán los elementos de la lista de imágenes -->
|
<Grid.ColumnDefinitions>
|
||||||
</ListBox>
|
<ColumnDefinition Width="*"/>
|
||||||
|
<!-- Esta columna ocupa todo el espacio disponible -->
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<ColumnDefinition Width="Auto"/>
|
||||||
|
<!-- Esta columna ocupa solo el espacio necesario para el contenido, en este caso, el botón -->
|
||||||
|
</Grid.ColumnDefinitions>
|
||||||
|
<TextBox x:Name="DirectorioTrabajo" Grid.Column="0" Margin="5,0"/>
|
||||||
|
<Button x:Name="SeleccionarDirectorio" Grid.Column="1" Width="130" Content="Seleccionar Directorio" Margin="5,0" Click="SeleccionarDirectorio_Click"/>
|
||||||
|
<Button x:Name="LeerDirectorio" Grid.Column="2" Width="130" Content="Leer Directorio" Margin="5,0" Click="LeerDirectorio_Click"/>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
<!-- Panel izquierdo para la lista de imágenes y funciones -->
|
||||||
|
<Grid DockPanel.Dock="Left" Width="200" Margin="5">
|
||||||
|
<Grid.RowDefinitions>
|
||||||
|
<RowDefinition Height="3*"/>
|
||||||
|
<!-- Esta fila ocupará 1/3 del espacio disponible -->
|
||||||
|
<RowDefinition Height="1*"/>
|
||||||
|
<!-- Esta fila ocupará 2/3 del espacio disponible -->
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
<ListBox x:Name="ListaFunciones" Grid.Row="0" Margin="0,0,0,5">
|
||||||
|
<!-- Aquí irán los elementos de la lista de funciones -->
|
||||||
|
</ListBox>
|
||||||
|
<ListBox x:Name="ListaImagenes" Grid.Row="1" Margin="0,5,0,0">
|
||||||
|
<!-- Aquí irán los elementos de la lista de imágenes -->
|
||||||
|
</ListBox>
|
||||||
|
|
||||||
|
|
||||||
|
</Grid>
|
||||||
|
|
||||||
|
|
||||||
<!-- Panel derecho dividido en dos para ROIs y formulario -->
|
<!-- Panel derecho dividido en dos para ROIs y formulario -->
|
||||||
<DockPanel DockPanel.Dock="Right" Width="400" Margin="5">
|
<Grid DockPanel.Dock="Right" Width="400" Margin="5">
|
||||||
<!-- Lista de ROIs -->
|
<Grid.RowDefinitions>
|
||||||
<ListBox x:Name="ListaROIs" DockPanel.Dock="Top" Height="300" Margin="0,0,0,5"/>
|
<RowDefinition Height="1*"/>
|
||||||
|
<!-- Espacio para la lista de ROIs -->
|
||||||
|
<RowDefinition Height="*"/>
|
||||||
|
<!-- Espacio restante para el formulario -->
|
||||||
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
<!-- Lista de ROIs -->
|
||||||
|
<ListBox x:Name="ListaROIs" Grid.Row="0" Margin="0,0,0,5">
|
||||||
|
<!-- Elementos de la lista de ROIs aquí -->
|
||||||
|
</ListBox>
|
||||||
|
|
||||||
<!-- Formulario para detalles del ROI -->
|
<!-- Formulario para detalles del ROI -->
|
||||||
<StackPanel DockPanel.Dock="Bottom" Margin="0,5,0,0">
|
<StackPanel Grid.Row="1" Margin="0,5,0,0">
|
||||||
<!-- Coordenadas X,Y -->
|
<!-- Coordenadas X,Y -->
|
||||||
<Label Content="Coordenadas X,Y:"/>
|
<Label Content="Coordenadas X,Y:"/>
|
||||||
<TextBox x:Name="ROI_xy" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_xy" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- DX, DY -->
|
<!-- DX, DY -->
|
||||||
<Label Content="DX, DY:"/>
|
<Label Content="DX, DY:"/>
|
||||||
<TextBox x:Name="ROI_dxdy" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_dxdy" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Nombre -->
|
<!-- Nombre -->
|
||||||
<Label Content="Nombre:"/>
|
<Label Content="Nombre:"/>
|
||||||
<TextBox x:Name="ROI_nombre" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_nombre" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Código Numérico -->
|
<!-- Código Numérico -->
|
||||||
<Label Content="Código Numérico:"/>
|
<Label Content="Código Numérico:"/>
|
||||||
<TextBox x:Name="ROI_num" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_num" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Descripción -->
|
<!-- Descripción -->
|
||||||
<Label Content="Descripción:"/>
|
<Label Content="Descripción:"/>
|
||||||
<TextBox x:Name="ROI_descripcion" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_descripcion" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Campo de texto 1 -->
|
<!-- Campo de texto 1 -->
|
||||||
<Label Content="Campo de texto 1:"/>
|
<Label Content="Campo de texto 1:"/>
|
||||||
<TextBox x:Name="ROI_text1" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_text1" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Campo de texto 2 -->
|
<!-- Campo de texto 2 -->
|
||||||
<Label Content="Campo de texto 2:"/>
|
<Label Content="Campo de texto 2:"/>
|
||||||
<TextBox x:Name="ROI_text2" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_text2" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Campo de texto 3 -->
|
<!-- Campo de texto 3 -->
|
||||||
<Label Content="Campo de texto 3:"/>
|
<Label Content="Campo de texto 3:"/>
|
||||||
<TextBox x:Name="ROI_text3" Margin="0,0,0,5"/>
|
<TextBox x:Name="ROI_text3" Margin="0,0,0,5"/>
|
||||||
|
|
||||||
<!-- Botones -->
|
<!-- Botones -->
|
||||||
<Button x:Name="Guardar_ROI" Content="Guardar" Margin="0,0,0,5"/>
|
<Button x:Name="Guardar_ROI" Content="Guardar" Margin="0,0,0,5"/>
|
||||||
<Button x:Name="Borrar_ROI" Content="Borrar ROI"/>
|
<Button x:Name="Borrar_ROI" Content="Borrar ROI"/>
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
|
</Grid>
|
||||||
|
|
||||||
</DockPanel>
|
|
||||||
|
|
||||||
<!-- Centro para la imagen con soporte de paneo y zoom -->
|
<!-- Centro para la imagen con soporte de paneo y zoom -->
|
||||||
<ScrollViewer x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
|
<ScrollViewer x:Name="ImagenEnTrabajoScrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
|
||||||
|
@ -81,9 +109,6 @@
|
||||||
<ScaleTransform ScaleX="1" ScaleY="1"/>
|
<ScaleTransform ScaleX="1" ScaleY="1"/>
|
||||||
</Canvas.LayoutTransform>
|
</Canvas.LayoutTransform>
|
||||||
</Canvas>
|
</Canvas>
|
||||||
|
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
</DockPanel>
|
</DockPanel>
|
||||||
</Window>
|
</Window>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
using Newtonsoft.Json;
|
using System.IO;
|
||||||
using System.Diagnostics.Eventing.Reader;
|
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
|
@ -14,7 +12,6 @@ using System.Windows.Shapes;
|
||||||
using Path = System.IO.Path;
|
using Path = System.IO.Path;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace ROIEditor
|
namespace ROIEditor
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -25,20 +22,23 @@ namespace ROIEditor
|
||||||
|
|
||||||
private Point? clickPosition = null;
|
private Point? clickPosition = null;
|
||||||
private bool _isDrawing = false;
|
private bool _isDrawing = false;
|
||||||
|
private bool _EstaCargandoTrabajo = false;
|
||||||
private Point _startPosition;
|
private Point _startPosition;
|
||||||
private Rectangle _currentRect = null;
|
private Rectangle _currentRect = null;
|
||||||
private Image imagenDeFondo;
|
private Image imagenDeFondo;
|
||||||
private bool _isDragging = false;
|
private bool _isDragging = false;
|
||||||
private Point _lastMousePosition;
|
private Point _lastMousePosition;
|
||||||
private string NombreImagenEditando;
|
private ListaPersistente<Roi> ListaDeROIs;
|
||||||
private DatabaseManagerList<Roi> ListaDeROIs = new DatabaseManagerList<Roi>("roiseditor.db","ROIs");
|
private ItemPersistente<ImagenEstado> EstadoImagenActual;
|
||||||
private DatabaseManagerItem<ImagenEstado> EstadoImagenActual = new DatabaseManagerItem<ImagenEstado>("imagenes.db","estados");
|
private EstadoTrabajo Estado;
|
||||||
|
|
||||||
// Constructor de MainWindow
|
// Constructor de MainWindow
|
||||||
public MainWindow()
|
public MainWindow()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
CargarImagenes();
|
|
||||||
|
this.Closing += MainWindow_Closing; // Suscribir al evento Closing
|
||||||
|
|
||||||
ListaImagenes.SelectionChanged += ListaImagenes_SelectionChanged;
|
ListaImagenes.SelectionChanged += ListaImagenes_SelectionChanged;
|
||||||
|
|
||||||
ImagenEnTrabajoCanvas.MouseLeftButtonDown += ImagenEnTrabajoCanvas_MouseLeftButtonDown;
|
ImagenEnTrabajoCanvas.MouseLeftButtonDown += ImagenEnTrabajoCanvas_MouseLeftButtonDown;
|
||||||
|
@ -70,8 +70,63 @@ namespace ROIEditor
|
||||||
ROI_text2.LostFocus += GuardarCambiosRoi;
|
ROI_text2.LostFocus += GuardarCambiosRoi;
|
||||||
ROI_text3.LostFocus += GuardarCambiosRoi;
|
ROI_text3.LostFocus += GuardarCambiosRoi;
|
||||||
|
|
||||||
|
// Se carga el ultimo estado
|
||||||
|
Estado = EstadoTrabajo.CargarEstado();
|
||||||
|
|
||||||
|
DirectorioTrabajo.Text = Estado.strDirectorioTrabajo;
|
||||||
|
ActualizarPorCambioDirTrabajo();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
||||||
|
{
|
||||||
|
SalvarEstadoImgen_y_ROIs();
|
||||||
|
Estado.GuardarEstado(); // Guardar el estado cuando la ventana se cierra
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SeleccionarDirectorio_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
var dialog = new Ookii.Dialogs.Wpf.VistaFolderBrowserDialog();
|
||||||
|
if (dialog.ShowDialog(this).GetValueOrDefault())
|
||||||
|
{
|
||||||
|
DirectorioTrabajo.Text = dialog.SelectedPath;
|
||||||
|
if (Estado.strDirectorioTrabajo != DirectorioTrabajo.Text)
|
||||||
|
{
|
||||||
|
Estado.strDirectorioTrabajo = DirectorioTrabajo.Text;
|
||||||
|
ActualizarPorCambioDirTrabajo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LeerDirectorio_Click(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
ActualizarPorCambioDirTrabajo();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ActualizarPorCambioDirTrabajo()
|
||||||
|
{
|
||||||
|
string dbPath = Estado.CarpetaDB();
|
||||||
|
_EstaCargandoTrabajo = true;
|
||||||
|
|
||||||
|
ListaDeROIs = new ListaPersistente<Roi>(dbPath, "ROIs");
|
||||||
|
EstadoImagenActual = new ItemPersistente<ImagenEstado>(dbPath, "estados");
|
||||||
|
|
||||||
|
CargarImagenes();
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(Estado.NombreImagenEditando))
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ListaImagenes.Items.Count; i++)
|
||||||
|
{
|
||||||
|
if ((string)ListaImagenes.Items[i] == Estado.NombreImagenEditando)
|
||||||
|
{
|
||||||
|
ListaImagenes.SelectedIndex = i; // Selecciona el ítem que coincide con el último editado
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_EstaCargandoTrabajo = false;
|
||||||
|
}
|
||||||
|
|
||||||
private void ListaROIs_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void ListaROIs_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
|
@ -370,32 +425,27 @@ namespace ROIEditor
|
||||||
}
|
}
|
||||||
public string PathPlantillasJson()
|
public string PathPlantillasJson()
|
||||||
{
|
{
|
||||||
string jsonPath = Path.ChangeExtension(NombreImagenEditando, ".json");
|
string jsonPath = Path.ChangeExtension(Estado.NombreImagenEditando, ".json");
|
||||||
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas", jsonPath);
|
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas", jsonPath);
|
||||||
return imagePath;
|
return imagePath;
|
||||||
}
|
}
|
||||||
public string PathPlantillasPNG()
|
public string PathPlantillasPNG()
|
||||||
{
|
{
|
||||||
string jsonPath = Path.ChangeExtension(NombreImagenEditando, ".png");
|
string jsonPath = Path.ChangeExtension(Estado.NombreImagenEditando, ".png");
|
||||||
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas", jsonPath);
|
var imagePath = Path.Combine(Directory.GetCurrentDirectory(), "Plantillas", jsonPath);
|
||||||
return imagePath;
|
return imagePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ListaImagenes_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
private void ListaImagenes_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (ListaImagenes.SelectedItem != null)
|
if (ListaImagenes.SelectedItem != null)
|
||||||
{
|
{
|
||||||
if (NombreImagenEditando != null)
|
SalvarEstadoImgen_y_ROIs();
|
||||||
{
|
|
||||||
SalvarEstadoImagen();
|
|
||||||
}
|
|
||||||
if (ListaDeROIs.Count>0)
|
|
||||||
{
|
|
||||||
ListaDeROIs.Save();
|
|
||||||
}
|
|
||||||
NombreImagenEditando = ListaImagenes.SelectedItem.ToString();
|
|
||||||
|
|
||||||
ListaDeROIs.Load(NombreImagenEditando);
|
Estado.NombreImagenEditando = ListaImagenes.SelectedItem.ToString();
|
||||||
|
|
||||||
|
ListaDeROIs.Load(Estado.NombreImagenEditando);
|
||||||
ActualizarListaROIsEnUI();
|
ActualizarListaROIsEnUI();
|
||||||
|
|
||||||
var imagePath = PathPlantillasPNG();
|
var imagePath = PathPlantillasPNG();
|
||||||
|
@ -405,10 +455,26 @@ namespace ROIEditor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void SalvarEstadoImgen_y_ROIs()
|
||||||
|
{
|
||||||
|
if (!_EstaCargandoTrabajo)
|
||||||
|
{
|
||||||
|
// Si es igual es porque es la primera vez que se carga
|
||||||
|
if (Estado.NombreImagenEditando != null)
|
||||||
|
{
|
||||||
|
SalvarEstadoImagen();
|
||||||
|
}
|
||||||
|
if (ListaDeROIs.Count > 0)
|
||||||
|
{
|
||||||
|
ListaDeROIs.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void CargarEstadoImagen()
|
private void CargarEstadoImagen()
|
||||||
{
|
{
|
||||||
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
var st = (ScaleTransform)ImagenEnTrabajoCanvas.LayoutTransform;
|
||||||
if (EstadoImagenActual.Load(NombreImagenEditando))
|
if (EstadoImagenActual.Load(Estado.NombreImagenEditando))
|
||||||
{
|
{
|
||||||
var EACargado = EstadoImagenActual.Get();
|
var EACargado = EstadoImagenActual.Get();
|
||||||
|
|
||||||
|
@ -444,7 +510,7 @@ namespace ROIEditor
|
||||||
ea.HorizontalOffset = ImagenEnTrabajoScrollViewer.HorizontalOffset;
|
ea.HorizontalOffset = ImagenEnTrabajoScrollViewer.HorizontalOffset;
|
||||||
ea.VerticalOffset = ImagenEnTrabajoScrollViewer.VerticalOffset;
|
ea.VerticalOffset = ImagenEnTrabajoScrollViewer.VerticalOffset;
|
||||||
|
|
||||||
EstadoImagenActual.Save(NombreImagenEditando);
|
EstadoImagenActual.Save(Estado.NombreImagenEditando);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -500,9 +566,5 @@ namespace ROIEditor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -11,6 +11,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.3" />
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.3" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||||
|
<PackageReference Include="Ookii.Dialogs.Wpf" Version="5.0.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
Loading…
Reference in New Issue