Skip to content

Commit 1acf2c1

Browse files
authored
Merge pull request #3103 from ControlSystemStudio/CSSTUDIO-2081-appendOnly
CSSTUDIO-2081 Add context menu item "Copy: Append PV to Clipboard".
2 parents 105f8af + 6d865aa commit 1acf2c1

File tree

5 files changed

+61
-2
lines changed

5 files changed

+61
-2
lines changed

app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/Messages.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ public class Messages
1414
{
1515
// Keep in alphabetical order and aligned with messages.properties
1616
/** Localized message */
17-
public static String NavigateBack_TT,
17+
public static String AppendPVNameToClipboard,
18+
NavigateBack_TT,
1819
NavigateForward_TT,
1920
OpenDataBrowser,
2021
OpenInEditor,
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package org.csstudio.display.builder.runtime.app;
2+
3+
import javafx.scene.image.Image;
4+
import javafx.scene.input.Clipboard;
5+
import javafx.scene.input.ClipboardContent;
6+
import org.phoebus.core.types.ProcessVariable;
7+
import org.phoebus.framework.selection.Selection;
8+
import org.phoebus.ui.javafx.ImageCache;
9+
import org.phoebus.ui.spi.ContextMenuEntry;
10+
11+
import java.util.List;
12+
import java.util.stream.Collectors;
13+
14+
public class ContextMenuAppendPvToClipboard implements ContextMenuEntry {
15+
@Override
16+
public String getName() {
17+
return org.csstudio.display.builder.runtime.Messages.AppendPVNameToClipboard;
18+
}
19+
20+
private Image icon = ImageCache.getImage(ImageCache.class, "/icons/copy.png");
21+
@Override
22+
public Image getIcon() {
23+
return icon;
24+
}
25+
26+
@Override
27+
public Class<?> getSupportedType() {
28+
return ProcessVariable.class;
29+
}
30+
31+
@Override
32+
public void call(final Selection selection)
33+
{
34+
List<ProcessVariable> pvs = selection.getSelections();
35+
String pvNamesToAppendToClipboard = pvs.stream().map(ProcessVariable::getName).collect(Collectors.joining(System.lineSeparator()));
36+
37+
Clipboard clipboard = Clipboard.getSystemClipboard();
38+
String newContentInClipboard;
39+
{
40+
String existingContentInClipboard;
41+
if (clipboard.hasString()) {
42+
existingContentInClipboard = clipboard.getString() + System.lineSeparator();
43+
} else {
44+
existingContentInClipboard = "";
45+
}
46+
newContentInClipboard = existingContentInClipboard + pvNamesToAppendToClipboard;
47+
}
48+
ClipboardContent newContent = new ClipboardContent();
49+
newContent.putString(newContentInClipboard);
50+
clipboard.setContent(newContent);
51+
}
52+
}

app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayRuntimeInstance.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,10 @@ public class DisplayRuntimeInstance implements AppInstance
9898
/** Toolbar button for navigation */
9999
private ButtonBase navigate_backward, navigate_forward;
100100

101+
public String getDisplayName() {
102+
return active_model.getDisplayName();
103+
}
104+
101105
/** Obtain the DisplayRuntimeInstance of a display
102106
* @param model {@link DisplayModel}
103107
* @return {@link DisplayRuntimeInstance}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
org.csstudio.display.builder.runtime.app.ProbeDisplayContextMenuEntry
1+
org.csstudio.display.builder.runtime.app.ProbeDisplayContextMenuEntry
2+
org.csstudio.display.builder.runtime.app.ContextMenuAppendPvToClipboard

app/display/runtime/src/main/resources/org/csstudio/display/builder/runtime/messages.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
AppendPVNameToClipboard=Copy: Append PV to Clipboard
12
NavigateBack_TT=Open previous display
23
NavigateForward_TT=Open next display
34
OpenDataBrowser=Open Data Browser

0 commit comments

Comments
 (0)