Wire up notification system for ContentChanged -> UI listeners

This commit is contained in:
John Lewin 2017-09-29 17:25:50 -07:00
parent 2b1fcff98b
commit 123f21dcab
5 changed files with 52 additions and 1 deletions

View file

@ -59,6 +59,8 @@ namespace MatterHackers.MatterControl.Library
public interface ILibraryWritableContainer : ILibraryContainer
{
event EventHandler<ItemChangedEventArgs> ItemContentChanged;
void Add(IEnumerable<ILibraryItem> items);
void Remove(IEnumerable<ILibraryItem> items);
void Rename(ILibraryItem item, string revisedName);
@ -75,4 +77,14 @@ namespace MatterHackers.MatterControl.Library
RenameItems,
RemoveItems
}
public class ItemChangedEventArgs : EventArgs
{
public ILibraryItem LibraryItem { get; }
public ItemChangedEventArgs(ILibraryItem libraryItem)
{
this.LibraryItem = libraryItem;
}
}
}

View file

@ -69,4 +69,15 @@ namespace MatterHackers.MatterControl.Library
}
}
}
public class MockLibraryItem : ILibraryItem
{
public string ID { get; set; }
public string Name { get; set; }
public bool IsProtected => true;
public bool IsVisible => true;
}
}

View file

@ -27,6 +27,7 @@ of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System;
using System.Collections.Generic;
using MatterHackers.Agg.Image;
@ -34,6 +35,13 @@ namespace MatterHackers.MatterControl.Library
{
public abstract class WritableContainer : LibraryContainer, ILibraryWritableContainer
{
public event EventHandler<ItemChangedEventArgs> ItemContentChanged;
public virtual void OnItemContentChanged(ItemChangedEventArgs args)
{
ItemContentChanged?.Invoke(this, args);
}
public virtual void Add(IEnumerable<ILibraryItem> items)
{
}

View file

@ -132,6 +132,11 @@ namespace MatterHackers.MatterControl.CustomWidgets
/// <param name="sourceContainer">The container to load</param>
private void DisplayContainerContent(ILibraryContainer sourceContainer)
{
if (this.ActiveContainer is ILibraryWritableContainer activeWritable)
{
activeWritable.ItemContentChanged -= WritableContainer_ItemContentChanged;
}
UiThread.RunOnIdle(() =>
{
if (sourceContainer == null)
@ -180,10 +185,25 @@ namespace MatterHackers.MatterControl.CustomWidgets
}
}
if (sourceContainer is ILibraryWritableContainer writableContainer)
{
writableContainer.ItemContentChanged += WritableContainer_ItemContentChanged;
}
this.Invalidate();
});
}
private void WritableContainer_ItemContentChanged(object sender, ItemChangedEventArgs e)
{
var firstItem = items.Where(i => i.Model.ID == e.LibraryItem.ID).FirstOrDefault();
if (firstItem != null)
{
firstItem.ViewWidget.LoadItemThumbnail().ConfigureAwait(false);
firstItem.ViewWidget.Invalidate();
}
}
public enum ViewMode
{
Icons,

View file

@ -88,7 +88,7 @@ namespace MatterHackers.MatterControl.CustomWidgets
return true;
}
protected async Task LoadItemThumbnail()
public async Task LoadItemThumbnail()
{
var listView = listViewItem.ListView;