Files
HawkeyeVision/VisionBuilder.UI.Windows/Dialogs/RecipeSelectionDialog.cs
2025-09-16 10:42:43 +02:00

97 lines
2.9 KiB
C#

using MaterialSkin.Controls;
using OpenCvSharp.XImgProc;
using System.Text.RegularExpressions;
using MaterialSkin.Core.Controls;
using OpenCvSharp.Extensions;
using VisionBuilder.UI.Common.ViewModel;
using VisionBuilder.UI.Common.ViewModel.Classes;
using VisionBuilder.UI.Common.ViewModel.Interfaces.UI;
namespace VisionBuilder.UI.Windows.Dialogs
{
public partial class RecipeSelectionDialog : MaterialForm
{
private readonly RecipeSelectionVM _recipeSelectionVm;
private readonly IRecipeCreationTool _recipeCreationTool;
public RecipeSelectionDialog(RecipeSelectionVM recipeSelectionVm, IRecipeCreationTool recipeCreationTool)
{
_recipeSelectionVm = recipeSelectionVm;
_recipeCreationTool = recipeCreationTool;
InitializeComponent();
ReloadRecipes();
if (_recipeCreationTool.Enabled)
{
btnCreateNewRecipe.Visible = true;
}
}
public void ReloadRecipes()
{
var recipes = _recipeSelectionVm.Recipes.ToList();
listView1.Items.Clear();
recipes = recipes.OrderBy(x => x.RecipeName).ToList();
listView1.LargeImageList = new ImageList() { ColorDepth = ColorDepth.Depth24Bit };
listView1.LargeImageList.ImageSize = new Size(128, 128);
var plug = new Bitmap(128, 128);
using (Graphics g = Graphics.FromImage(plug))
{
g.Clear(Color.Gray);
}
listView1.LargeImageList.Images.Add("plug", plug);
recipes.ForEach(x =>
{
if (x.Image != null)
{
var image = x.Image.Resize(new OpenCvSharp.Size(128, 128)).ToBitmap();
listView1.LargeImageList.Images.Add(x.RecipeName, image);
listView1.Items.Add(x.RecipeName, x.RecipeName, x.RecipeName).Tag = x;
}
else
{
listView1.Items.Add(x.RecipeName, x.RecipeName, "plug").Tag = x;
}
});
}
private void listView1_MouseClick(object sender, MouseEventArgs e)
{
if (listView1.SelectedIndices.Count > 0)
{
_recipeSelectionVm.SelectedRecipe = (RecipeData)listView1.SelectedItems[0].Tag!;
}
DialogResult = DialogResult.OK;
}
private void btnCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
}
private void btnCreateNewRecipe_Click(object sender, EventArgs e)
{
if (_recipeCreationTool.CreateRecipe(out var recipeName))
{
_recipeSelectionVm.SelectedRecipe = new RecipeData() { RecipeName = recipeName };
DialogResult = DialogResult.OK;
}
}
}
}