From e2a337a7aab451bc7f31efbb2df707fca0901966 Mon Sep 17 00:00:00 2001 From: Pilzinsel64 Date: Wed, 29 Oct 2025 06:09:43 +0100 Subject: [PATCH] GalleryIconListViewVisualItem --- .../GalleryIconListViewVisualItem.cs | 106 ++++++++++++++++++ .../Pilz.UI.WinForms.Telerik.csproj | 2 +- 2 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 Pilz.UI.WinForms.Telerik/Controls/RadListView/GalleryIconListViewVisualItem.cs diff --git a/Pilz.UI.WinForms.Telerik/Controls/RadListView/GalleryIconListViewVisualItem.cs b/Pilz.UI.WinForms.Telerik/Controls/RadListView/GalleryIconListViewVisualItem.cs new file mode 100644 index 0000000..392fe63 --- /dev/null +++ b/Pilz.UI.WinForms.Telerik/Controls/RadListView/GalleryIconListViewVisualItem.cs @@ -0,0 +1,106 @@ +using Telerik.WinControls; +using Telerik.WinControls.UI; + +namespace Pilz.UI.WinForms.Telerik.Controls.RadListView; + +public class GalleryIconListViewVisualItem : IconListViewVisualItem +{ + public event EventHandler? ButtonClicked; + + private readonly RadPanelElement panel = new(); + private readonly StackLayoutElement stack = new(); + private readonly LightVisualElement titleElem = new(); + private readonly LightVisualElement imgElem = new(); + private readonly LightVisualButtonElement buttonElem = new(); + + protected override Type ThemeEffectiveType => typeof(IconListViewVisualItem); + + public RadSvgImage ButtonSvgImage + { + get => buttonElem.SvgImage; + set => buttonElem.SvgImage = value; + } + + public bool ButtonVisible + { + get => buttonElem.Visibility != ElementVisibility.Collapsed; + set => buttonElem.Visibility = value ? ElementVisibility.Hidden : ElementVisibility.Collapsed; + } + + protected override void CreateChildElements() + { + base.CreateChildElements(); + + panel.StretchHorizontally = true; + panel.StretchVertically = true; + panel.ShouldHandleMouseInput = false; + panel.NotifyParentOnMouseInput = true; + panel.PanelBorder.Visibility = ElementVisibility.Collapsed; + + stack.Orientation = Orientation.Vertical; + stack.StretchHorizontally = true; + stack.StretchVertically = true; + stack.ShouldHandleMouseInput = false; + stack.NotifyParentOnMouseInput = true; + + imgElem.Margin = new Padding(0, 10, 0, 10); + imgElem.ShouldHandleMouseInput = false; + imgElem.NotifyParentOnMouseInput = true; + + titleElem.Margin = new Padding(0, 10, 0, -10); + titleElem.AutoSize = true; + titleElem.ShouldHandleMouseInput = false; + titleElem.NotifyParentOnMouseInput = true; + + buttonElem.Size = new Size(20, 20); + buttonElem.ImageDrawType = ImageDrawType.Svg; + buttonElem.ShouldHandleMouseInput = true; + buttonElem.NotifyParentOnMouseInput = true; + buttonElem.Click += ButtonElem_Click; + buttonElem.Visibility = ElementVisibility.Collapsed; + + stack.Children.Add(imgElem); + stack.Children.Add(titleElem); + panel.Children.Add(stack); + panel.Children.Add(buttonElem); + Children.Add(panel); + } + + private void ButtonElem_Click(object? sender, EventArgs e) + { + ButtonClicked?.Invoke(this, e); + } + + protected override void DoMouseEnter(EventArgs e) + { + base.DoMouseEnter(e); + if (buttonElem.Visibility == ElementVisibility.Hidden) + buttonElem.Visibility = ElementVisibility.Visible; + } + + protected override void DoMouseLeave(EventArgs e) + { + base.DoMouseLeave(e); + if (buttonElem.Visibility == ElementVisibility.Visible) + buttonElem.Visibility = ElementVisibility.Hidden; + } + + protected override void ArrangeContentCore(RectangleF clientRect) + { + base.ArrangeContentCore(clientRect); + buttonElem.Arrange(new RectangleF( + panel.Size.Width - buttonElem.DesiredSize.Width - buttonElem.Padding.Right, + buttonElem.Padding.Top, + buttonElem.DesiredSize.Width, + buttonElem.DesiredSize.Height)); + } + + protected override void SynchronizeProperties() + { + base.SynchronizeProperties(); + DrawText = false; + DrawImage = false; + titleElem.Text = Data.Text; + imgElem.Image = Data.Image; + } +} diff --git a/Pilz.UI.WinForms.Telerik/Pilz.UI.WinForms.Telerik.csproj b/Pilz.UI.WinForms.Telerik/Pilz.UI.WinForms.Telerik.csproj index cd24854..72996b1 100644 --- a/Pilz.UI.WinForms.Telerik/Pilz.UI.WinForms.Telerik.csproj +++ b/Pilz.UI.WinForms.Telerik/Pilz.UI.WinForms.Telerik.csproj @@ -9,7 +9,7 @@ - 2.14.2 + 2.14.3 True