public BlockContainer(List <LinkDefinition.LinkWrapper> items) //load { Items = new IdeCollection <IdeBaseItem>(this, typeof(IBaseBlock)); foreach (LinkDefinition.LinkWrapper item in items) { if (item.Conditional != null) { if (item.Conditional.switchProperty != null) { Items.Add(new SwitchBlockModel(item, Items)); } else if (item.Conditional.ifNode != null) { Items.Add(new ConditionalBlockModel(item, Items)); } } else if (item.Link != null) { if (item.Link.IsTextLink) { Items.Add(new TextLinkModel(item, Items)); } else { OverlayLinkContainer container; if (!(Items.LastOrDefault() is OverlayLinkContainer)) { container = new OverlayLinkContainer(Items); Items.Add(container); //adds a new link container at the end } else { container = Items.Last() as OverlayLinkContainer; container.Items.CollectionChanged -= (a, b) => { OnContainerChanged?.Invoke(this, b); }; } container.Items.Add(new OverlayLinkModel(item, container.Items)); container.Items.CollectionChanged += (a, b) => { OnContainerChanged?.Invoke(this, b); }; } } else if (item.CardArtCrop != null) { Items.Add(new ArtOverlayBlockModel(item, Items)); } } Items.CollectionChanged += (a, b) => { OnContainerChanged?.Invoke(this, b); }; }
public OverlayLinkContainer(OverlayLinkContainer lc, IdeCollection <IdeBaseItem> source) : base(source) //copy { CanDragDrop = false; DropHandler = new TemplateLinkContainerDropHandler() { Container = this }; Items = new IdeCollection <IdeBaseItem>(this, typeof(OverlayLinkModel)); foreach (OverlayLinkModel link in lc.Items) { Items.Add(new OverlayLinkModel(link, Items)); } Items.CollectionChanged += LinkContainerUpdated; }
public void AddLink(OverlayLinkModel link, int index) { // if the next item is the OverlayLinkContainer if (index < Items.Count && Items[index] is OverlayLinkContainer nextContainer) { nextContainer.AddLink(0, link); } // if the previous item is the OverlayLinkContainer else if (index > 0 && Items[index - 1] is OverlayLinkContainer previousContainer) { previousContainer.AddLink(previousContainer.Items.Count, link); } // if there isn't any adjacent OverlayLinkContainers else { var newContainer = new OverlayLinkContainer(Items); newContainer.Items.CollectionChanged += (a, b) => { OnContainerChanged?.Invoke(this, b); }; Items.Insert(index, newContainer); newContainer.AddLink(0, link); } }