plugin system docs
custom buttons for plugins calibration functions for Leeform
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Data;
|
||||
using System.Drawing;
|
||||
@@ -8,12 +9,14 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using VisionBuilder.UI.Common;
|
||||
using VisionBuilder.UI.Common.ViewModel.Classes;
|
||||
|
||||
namespace VisionBuilder.UI.Windows.Components
|
||||
{
|
||||
public partial class SingleCameraControl : UserControl
|
||||
{
|
||||
private SingleCameraVM _singleCameraVm;
|
||||
private readonly Dictionary<string, Control> _dynamicButtonControls = new();
|
||||
|
||||
public void SetViewModel(SingleCameraVM singleCameraVm)
|
||||
{
|
||||
@@ -25,11 +28,15 @@ namespace VisionBuilder.UI.Windows.Components
|
||||
|
||||
SetBindings();
|
||||
_singleCameraVm.PropertyChanged += SingleCameraVm_PropertyChanged;
|
||||
|
||||
_singleCameraVm.DynamicButtons.CollectionChanged += DynamicButtons_CollectionChanged;
|
||||
foreach (var btn in _singleCameraVm.DynamicButtons)
|
||||
AddDynamicButton(btn);
|
||||
}
|
||||
|
||||
private void SingleCameraVm_PropertyChanged(object? sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void SetBindings()
|
||||
@@ -53,9 +60,69 @@ namespace VisionBuilder.UI.Windows.Components
|
||||
|
||||
}
|
||||
|
||||
private void DynamicButtons_CollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
switch (e.Action)
|
||||
{
|
||||
case NotifyCollectionChangedAction.Add:
|
||||
foreach (ButtonDefinition btn in e.NewItems!)
|
||||
AddDynamicButton(btn);
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Remove:
|
||||
foreach (ButtonDefinition btn in e.OldItems!)
|
||||
RemoveDynamicButton(btn);
|
||||
break;
|
||||
case NotifyCollectionChangedAction.Reset:
|
||||
foreach (var ctrl in _dynamicButtonControls.Values)
|
||||
flowLayoutPanel2.Controls.Remove(ctrl);
|
||||
_dynamicButtonControls.Clear();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void AddDynamicButton(ButtonDefinition buttonDef)
|
||||
{
|
||||
var btn = new MaterialSkin.Controls.MaterialRaisedButton
|
||||
{
|
||||
Text = buttonDef.Title,
|
||||
Size = new Size(201, 85),
|
||||
Font = new Font("Segoe UI", 9F, FontStyle.Bold),
|
||||
DrawBorder = true,
|
||||
Primary = buttonDef.Type == EButtonType.Toggle && buttonDef.IsToggled,
|
||||
Visible = buttonDef.IsVisible
|
||||
};
|
||||
|
||||
btn.Click += (_, _) =>
|
||||
{
|
||||
buttonDef.Execute();
|
||||
if (buttonDef.Type == EButtonType.Toggle)
|
||||
btn.Primary = buttonDef.IsToggled;
|
||||
};
|
||||
|
||||
buttonDef.PropertyChanged += (_, args) =>
|
||||
{
|
||||
if (args.PropertyName == nameof(ButtonDefinition.IsVisible))
|
||||
btn.Visible = buttonDef.IsVisible;
|
||||
else if (args.PropertyName == nameof(ButtonDefinition.IsToggled))
|
||||
btn.Primary = buttonDef.IsToggled;
|
||||
};
|
||||
|
||||
flowLayoutPanel2.Controls.Add(btn);
|
||||
_dynamicButtonControls[buttonDef.Key] = btn;
|
||||
}
|
||||
|
||||
private void RemoveDynamicButton(ButtonDefinition buttonDef)
|
||||
{
|
||||
if (_dynamicButtonControls.TryGetValue(buttonDef.Key, out var ctrl))
|
||||
{
|
||||
flowLayoutPanel2.Controls.Remove(ctrl);
|
||||
_dynamicButtonControls.Remove(buttonDef.Key);
|
||||
}
|
||||
}
|
||||
|
||||
public SingleCameraControl()
|
||||
{
|
||||
|
||||
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user