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); } }