diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/script/ScriptUtil.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/script/ScriptUtil.java index 974a1640f2..38ad56079e 100644 --- a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/script/ScriptUtil.java +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/script/ScriptUtil.java @@ -24,6 +24,9 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import javafx.application.Platform; +import javafx.scene.input.Clipboard; +import javafx.scene.input.ClipboardContent; import org.csstudio.display.builder.model.ChildrenProperty; import org.csstudio.display.builder.model.DisplayModel; import org.csstudio.display.builder.model.Widget; @@ -533,4 +536,24 @@ public static void openWeb(final Widget widget, final String url) throws Excepti done.get(); } + + /** + * Puts a {@link String} on the system clipboard. + *

+ * If called from a Jython script, non-matching content types will trigger an exception in the interpreter. + * An {@link IllegalArgumentException} is thrown if provided content string is null. That way + * the script may detect the mistake. + *

+ * + * @param content By contract: must be a non-null String + */ + @SuppressWarnings("unused") + public static void putOnClipboard(String content){ + if(content == null){ + throw new IllegalArgumentException("content is null"); + } + ClipboardContent clipboardContent = new ClipboardContent(); + clipboardContent.putString(content); + Platform.runLater(() -> Clipboard.getSystemClipboard().setContent(clipboardContent)); + } }