Vanara/Windows.Shell/TaskBar/ThumbnailToolbarButtonColle...

65 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using static Vanara.PInvoke.Shell32;
namespace Vanara.Windows.Shell
{
/// <summary>A collection of thumbnail toolbar buttons.</summary>
public class ThumbnailToolbarButtonCollection : ObservableCollection<ThumbnailToolbarButton>
{
private const int maxBtns = 7;
private readonly ThumbnailToolbar Parent;
internal ThumbnailToolbarButtonCollection(ThumbnailToolbar parent)
{
Parent = parent;
CollectionChanged += OnCollectionChanged;
}
/// <summary>Adds a sequence of <see cref="ThumbnailToolbarButton"/> instances to the collection.</summary>
/// <param name="items">The items to add.</param>
public void AddRange(IEnumerable<ThumbnailToolbarButton> items)
{
foreach (var item in items)
Add(item);
}
internal THUMBBUTTON[] ToArray()
{
var ret = new THUMBBUTTON[maxBtns];
for (var i = 0; i < maxBtns; i++)
{
if (i < Count)
ret[i] = this[i].btn;
else
ret[i] = THUMBBUTTON.Default;
ret[i].iId = (uint)i;
}
return ret;
}
/// <summary>Inserts the item into the collection.</summary>
/// <param name="index">The index at which to insert.</param>
/// <param name="item">The item to insert.</param>
protected override void InsertItem(int index, ThumbnailToolbarButton item)
{
if (Count >= maxBtns)
throw new InvalidOperationException($"A maximum of {maxBtns} buttons may be added to a {nameof(ThumbnailToolbarButtonCollection)}.");
item.indexer.ImageList = Parent.ImageList;
base.InsertItem(index, item);
}
/// <summary>Called when the collection has changed.</summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="NotifyCollectionChangedEventArgs"/> instance containing the event data.</param>
protected virtual void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e?.NewItems != null)
foreach (ThumbnailToolbarButton tbi in e.NewItems)
tbi.Parent = Parent;
}
}
}