diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/Messages.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/Messages.java index ef703a11c0..228ca08a1d 100644 --- a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/Messages.java +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/Messages.java @@ -14,7 +14,8 @@ public class Messages { // Keep in alphabetical order and aligned with messages.properties /** Localized message */ - public static String NavigateBack_TT, + public static String AppendPVNameToClipboard, + NavigateBack_TT, NavigateForward_TT, OpenDataBrowser, OpenInEditor, diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/ContextMenuAppendPvToClipboard.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/ContextMenuAppendPvToClipboard.java new file mode 100644 index 0000000000..ca981c5829 --- /dev/null +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/ContextMenuAppendPvToClipboard.java @@ -0,0 +1,52 @@ +package org.csstudio.display.builder.runtime.app; + +import javafx.scene.image.Image; +import javafx.scene.input.Clipboard; +import javafx.scene.input.ClipboardContent; +import org.phoebus.core.types.ProcessVariable; +import org.phoebus.framework.selection.Selection; +import org.phoebus.ui.javafx.ImageCache; +import org.phoebus.ui.spi.ContextMenuEntry; + +import java.util.List; +import java.util.stream.Collectors; + +public class ContextMenuAppendPvToClipboard implements ContextMenuEntry { + @Override + public String getName() { + return org.csstudio.display.builder.runtime.Messages.AppendPVNameToClipboard; + } + + private Image icon = ImageCache.getImage(ImageCache.class, "/icons/copy.png"); + @Override + public Image getIcon() { + return icon; + } + + @Override + public Class getSupportedType() { + return ProcessVariable.class; + } + + @Override + public void call(final Selection selection) + { + List pvs = selection.getSelections(); + String pvNamesToAppendToClipboard = pvs.stream().map(ProcessVariable::getName).collect(Collectors.joining(System.lineSeparator())); + + Clipboard clipboard = Clipboard.getSystemClipboard(); + String newContentInClipboard; + { + String existingContentInClipboard; + if (clipboard.hasString()) { + existingContentInClipboard = clipboard.getString() + System.lineSeparator(); + } else { + existingContentInClipboard = ""; + } + newContentInClipboard = existingContentInClipboard + pvNamesToAppendToClipboard; + } + ClipboardContent newContent = new ClipboardContent(); + newContent.putString(newContentInClipboard); + clipboard.setContent(newContent); + } +} diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayRuntimeInstance.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayRuntimeInstance.java index 466113199c..599a44c907 100644 --- a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayRuntimeInstance.java +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayRuntimeInstance.java @@ -98,6 +98,10 @@ public class DisplayRuntimeInstance implements AppInstance /** Toolbar button for navigation */ private ButtonBase navigate_backward, navigate_forward; + public String getDisplayName() { + return active_model.getDisplayName(); + } + /** Obtain the DisplayRuntimeInstance of a display * @param model {@link DisplayModel} * @return {@link DisplayRuntimeInstance} diff --git a/app/display/runtime/src/main/resources/META-INF/services/org.phoebus.ui.spi.ContextMenuEntry b/app/display/runtime/src/main/resources/META-INF/services/org.phoebus.ui.spi.ContextMenuEntry index 079574586b..83c7c8e009 100644 --- a/app/display/runtime/src/main/resources/META-INF/services/org.phoebus.ui.spi.ContextMenuEntry +++ b/app/display/runtime/src/main/resources/META-INF/services/org.phoebus.ui.spi.ContextMenuEntry @@ -1 +1,2 @@ -org.csstudio.display.builder.runtime.app.ProbeDisplayContextMenuEntry \ No newline at end of file +org.csstudio.display.builder.runtime.app.ProbeDisplayContextMenuEntry +org.csstudio.display.builder.runtime.app.ContextMenuAppendPvToClipboard \ No newline at end of file diff --git a/app/display/runtime/src/main/resources/org/csstudio/display/builder/runtime/messages.properties b/app/display/runtime/src/main/resources/org/csstudio/display/builder/runtime/messages.properties index 36a3330eb0..1b12cb48ed 100644 --- a/app/display/runtime/src/main/resources/org/csstudio/display/builder/runtime/messages.properties +++ b/app/display/runtime/src/main/resources/org/csstudio/display/builder/runtime/messages.properties @@ -1,3 +1,4 @@ +AppendPVNameToClipboard=Copy: Append PV to Clipboard NavigateBack_TT=Open previous display NavigateForward_TT=Open next display OpenDataBrowser=Open Data Browser