private static ExtensionPanel CreatePastingExtraOptions(ExtensionPanel ExtraOptions, VisualRepresentation TargetRep, IEnumerable <string> FilePaths)
        {
            ExtraOptions = ExtensionPanel.Create()
                           .AddGroupPanel("Pasting options...")
                           .AddSelectableOption(PASTE_AS_MAINCONTENT, "As main content", true,
                                                "The pasted object is intended as Summary (when text) or Pictogram (if image).")
                           .AddSelectableOption(PASTE_AS_DETAIL, "As detail", false,
                                                "The pasted object must be appended as detail.");

            if (TargetRep == null && FilePaths.CountsAtLeast(2))
            {
                ExtraOptions.AddSwitchOption(PASTE_MULTI_TARGETS, "Create multiple targets", true, "Create multiple targets (Concepts or Complements), one per each source file.");
            }

            var ButtonPasteAsComplement = new PaletteButton("As Text/Image Complement", Domain.ComplementDefImage.Pictogram);

            ButtonPasteAsComplement.MinHeight = 32;
            ButtonPasteAsComplement.Summary   = "Paste as a Text/Image Complement in the background";
            ButtonPasteAsComplement.Click    +=
                ((sender, args) =>
            {
                var OwnerWindow = ButtonPasteAsComplement.GetNearestVisualDominantOfType <Window>();
                if (OwnerWindow == null)
                {
                    return;
                }

                Display.SelectedOptionText = VisualComplement.__ClassDefinitor.TechName;
                OwnerWindow.Close();
            });
            ExtraOptions.Children.Add(ButtonPasteAsComplement);
            return(ExtraOptions);
        }
        private void ClipboardPasteIntoIdeas(View TargetView, ExtensionPanel ExtraOptions, IEnumerable <string> FilePaths, List <Idea> TargetIdeas)
        {
            var PasteAsDetail = true;

            if (ExtraOptions != null)
            {
                PasteAsDetail = (ExtraOptions.GetSelectableOption() == PASTE_AS_DETAIL);
            }

            TargetView.EditEngine.StartCommandVariation("Clipboard Paste (into Ideas)");

            if (FilePaths != null)
            {
                if (ExtraOptions.GetSwitchOption(PASTE_MULTI_TARGETS).IsTrue())
                {
                    var Index = 0;
                    foreach (var Target in TargetIdeas)
                    {
                        var FilePath = FilePaths.ElementAt(Index);
                        if (FilePath != null && File.Exists(FilePath))
                        {
                            PasteFileIntoIdea(Target, FilePath, PasteAsDetail);
                        }

                        Index++;
                    }
                }
                else
                {
                    foreach (var FilePath in FilePaths)
                    {
                        if (FilePath != null && File.Exists(FilePath))
                        {
                            PasteFileIntoIdea(TargetIdeas.First(), FilePath, PasteAsDetail);
                        }
                    }
                }
            }
            else
            {
                InjectPastingContentToIdea(TargetView, TargetIdeas.First(), PasteAsDetail);
            }

            TargetView.EditEngine.CompleteCommandVariation();
        }
        private static string DetermineTargetRepresentations(View TargetView, Point TargetPosition, ExtensionPanel ExtraOptions, List <Idea> TargetIdeas,
                                                             VisualRepresentation TargetRep, IEnumerable <string> FilePaths)
        {
            string Selection = null;

            if (TargetRep != null)
            {
                TargetIdeas.Clear();
                TargetIdeas.Add(TargetRep.RepresentedIdea);

                if (ExtraOptions != null)
                {
                    Selection = Display.DialogMultiOption("Paste...", "", null, ExtraOptions, true, null,
                                                          new SimplePresentationElement("In selection", PASTE_IN_SELECTEDIDEAS, "Paste into the selected Idea(s).",
                                                                                        Display.GetLibImage("accept.png")));
                    if (Selection.IsAbsent())
                    {
                        return(null);
                    }
                }
            }
            else
            {
                var ConceptDefs = TargetView.OwnerCompositeContainer.CompositeContentDomain.ConceptDefinitions.ToArray();

                Selection = Display.DialogMultiOption("Paste...", "Select Concept type to Create", null, ExtraOptions, true, null, ConceptDefs);
                if (Selection.IsAbsent())
                {
                    return(null);
                }

                if (Selection != VisualComplement.__ClassDefinitor.TechName)
                {
                    TargetIdeas.Clear();
                    var ConceptDef = ConceptDefs.First(cd => cd.TechName == Selection);

                    if (FilePaths == null)
                    {
                        var NewConcept = CreateConceptForPaste(TargetView, TargetPosition, ConceptDef, true);
                        TargetIdeas.Add(NewConcept);
                    }
                    else
                    {
                        FilePaths.ForEachIndexing(
                            (filepath, index) =>
                        {
                            var NewConcept  = CreateConceptForPaste(TargetView, TargetPosition, ConceptDef, index == 0);
                            NewConcept.Name = Path.GetFileNameWithoutExtension(filepath);
                            TargetIdeas.Add(NewConcept);
                        });
                    }
                }
            }

            return(Selection);
        }
        // ---------------------------------------------------------------------------------------------------------------------------------------------------------
        public void ClipboardPaste(View TargetView, bool AsIdeaShortcut = false, Point TargetPosition = default(Point), bool IsDroppingFiles = false)
        {
            if (IsClipboardTransferring && TargetView == ClipboardTransferSourceView)
            {
                UnmarkSelectedObjectsForCut();
                return;
            }

            try
            {
                // Paste Intra-Composition content ............................................................
                if (General.Execute(() => Clipboard.ContainsData(IdeaTransferFormat.Name),
                                    "Cannot access Windows Clipboard!").Result || AsIdeaShortcut)
                {
                    InjectCompositionContentToView(TargetView, AsIdeaShortcut);
                    return;
                }

                // Determine target types
                ExtensionPanel       ExtraOptions = null;
                IEnumerable <string> FilePaths    = null;
                if (General.Execute(() => Clipboard.ContainsFileDropList(),
                                    "Cannot access Windows Clipboard!").Result)
                {
                    FilePaths = General.Execute(() => Clipboard.GetFileDropList().Cast <string>(),
                                                "Cannot access Windows Clipboard!").Result;
                }

                var TargetIdeas = new List <Idea>();
                //- TargetIdeas.Add(TargetView.VisualizedCompositeIdea);

                if (TargetPosition == default(Point) || TargetPosition == Display.NULL_POINT)
                {
                    TargetPosition = TargetView.CurrentPresentationCenter;
                }

                var TargetRep = TargetView.SelectedObjects.Where(vobj => vobj is VisualElement)
                                .Select(vobj => ((VisualElement)vobj).OwnerRepresentation).FirstOrDefault();

                if (General.Execute(() => Clipboard.ContainsText(), "Cannot access Windows Clipboard!").Result ||
                    General.Execute(() => Clipboard.ContainsImage(), "Cannot access Windows Clipboard!").Result ||
                    FilePaths != null)
                {
                    ExtraOptions = CreatePastingExtraOptions(ExtraOptions, TargetRep, FilePaths);
                }

                // Determine target
                string Selection = DetermineTargetRepresentations(TargetView, TargetPosition, ExtraOptions, TargetIdeas, TargetRep, FilePaths);
                if (Selection == null)
                {
                    return;
                }

                if (Selection == VisualComplement.__ClassDefinitor.TechName)
                {
                    ClipboardPasteCreatingComplements(TargetView, TargetPosition, FilePaths);
                }
                else
                {
                    ClipboardPasteIntoIdeas(TargetView, ExtraOptions, FilePaths, TargetIdeas);
                }
            }
            catch (Exception Problem)
            {
                if (TargetView.EditEngine.IsVariating)
                {
                    TargetView.EditEngine.CompleteCommandVariation();
                    TargetView.EditEngine.Undo();
                }
                Console.WriteLine("Cannot Paste content. Problem: " + Problem.Message);
            }
        }