예제 #1
0
 public void Drop(IDropInfo dropInfo)
 {
     if (dropInfo.Data is OverlayBlockDefinitionItemModel dropItem)
     {
         if (dropInfo.TargetItem is OverlayLinkModel overlayLink && dropInfo.DropTargetAdorner == DropTargetAdorners.Highlight)
         {
             // change the link definition of an existing text link item
             overlayLink.LinkedBlock = dropItem;
         }
         else
         {
             var item = new OverlayLinkModel(Container.Items)
             {
                 LinkedBlock = dropItem
             };
             Container.Items.Insert(dropInfo.UnfilteredInsertIndex, item);
         }
     }
예제 #2
0
        public void Drop(IDropInfo dropInfo)
        {
            if (dropInfo.Data is TextBlockDefinitionItemModel textDef)
            {
                // Dropping the definition into a blockcontainer
                if (dropInfo.TargetCollection is IdeCollection <IdeBaseItem> collection && collection.Parent is BlockContainer container)
                {
                    var link = new TextLinkModel(container.Items)
                    {
                        LinkedBlock = textDef
                    };
                    container.Items.Insert(dropInfo.UnfilteredInsertIndex, link);
                }
                // change the link definition of an existing text link item
                else if (dropInfo.TargetItem is TextLinkModel textLink)
                {
                    textLink.LinkedBlock = textDef;
                }
                // Dropping the definition into a conditional case
                else if (dropInfo.TargetItem is IBaseConditionalCase conditionalCase)
                {
                    var link = new TextLinkModel(conditionalCase.BlockContainer.Items)
                    {
                        LinkedBlock = textDef
                    };
                    conditionalCase.BlockContainer.Items.Add(link);
                }
                return;
            }
            if (dropInfo.Data is OverlayBlockDefinitionItemModel overlayDef)
            {
                // Dropping the definition into a blockcontainer
                if (dropInfo.TargetCollection is IdeCollection <IdeBaseItem> collection && collection.Parent is BlockContainer container)
                {
                    var link = new OverlayLinkModel(container.Items)
                    {
                        LinkedBlock = overlayDef
                    };
                    container.AddLink(link, dropInfo.UnfilteredInsertIndex);
                }

                // Dropping the definition into a conditional case
                else if (dropInfo.TargetItem is IBaseConditionalCase conditionalCase)
                {
                    var link = new OverlayLinkModel(conditionalCase.BlockContainer.Items)
                    {
                        LinkedBlock = overlayDef,
                    };
                    conditionalCase.BlockContainer.AddLink(link, conditionalCase.BlockContainer.Items.Count);
                }
                return;
            }
            if (dropInfo.Data is OverlayLinkModel overlayLink)
            {
                if (IsOverlayHandler == false)
                {
                    return;
                }
                if (dropInfo.TargetItem is IBaseConditionalCase conditionalCase)
                {
                    overlayLink.RemoveItem();
                    conditionalCase.BlockContainer.AddLink(overlayLink, conditionalCase.BlockContainer.Items.Count);
                }
                else if (dropInfo.TargetItem is IBaseBlock block)
                {
                    overlayLink.RemoveItem();
                    int insertIndex = dropInfo.UnfilteredInsertIndex;
                    (block.Source.Parent as BlockContainer).AddLink(overlayLink, insertIndex);
                }
            }
            else
            {
                DragDrop.DefaultDropHandler.Drop(dropInfo);
            }
        }