From 84f73f0d300fe22135a61de24a063ec9c7db0275 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Fri, 2 Aug 2024 11:03:59 +0200 Subject: [PATCH 1/2] CSSTUDIO-2081 Add context menu item "Copy: Append PV to Clipboard". --- .../display/builder/runtime/Messages.java | 3 +- .../app/ContextMenuAppendPvToClipboard.java | 52 +++++++++++++++++++ .../org.phoebus.ui.spi.ContextMenuEntry | 3 +- .../builder/runtime/messages.properties | 1 + 4 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/ContextMenuAppendPvToClipboard.java 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/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 From 6d865aa1f387375ec1d186e4af4bdc3f78fcc6d1 Mon Sep 17 00:00:00 2001 From: Abraham Wolk Date: Fri, 2 Aug 2024 13:33:05 +0200 Subject: [PATCH 2/2] CSSTUDIO-2081 Add getter getDisplayName() to DisplayRuntimeInstance. --- .../display/builder/runtime/app/DisplayRuntimeInstance.java | 4 ++++ 1 file changed, 4 insertions(+) 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}