Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e306a54
CSSTUDIO-2072 Generalize the class "ContextMenuEntry" to tree-structu…
abrahamwolk Jan 30, 2024
c6055af
CSSTUDIO-2072 Add the class "ContextMenuCopySubMenu".
abrahamwolk Jan 30, 2024
8ecb9ee
CSSTUDIO-2072 Add Messages.CopySubMenu.
abrahamwolk Jan 30, 2024
9be0a09
CSSTUDIO-2072 Implement the method ContextMenuCopySubMenu.getSupporte…
abrahamwolk Jan 30, 2024
e7927a9
CSSTUDIO-2072 Implement ContextMenuCopySubMenu.getIcon().
abrahamwolk Jan 30, 2024
423e11e
CSSTUDIO-2072 Implement ContextMenuCopySubMenu.getChildren().
abrahamwolk Jan 30, 2024
c6ccb0d
CSSTUDIO-2072 Modify the file "ContextMenuEntry" to contain the Copy …
abrahamwolk Jan 30, 2024
2be1c3b
CSSTUDIO-2072 Add functionality to copy and append PV names, optional…
abrahamwolk Apr 16, 2024
ab35486
CSSTUDIO-2072 Add "Selection" column to the Widget Info dialog.
abrahamwolk Apr 16, 2024
e716aee
CSSTUDIO-2072 Add functionality to copy PV names, and possibly associ…
abrahamwolk Apr 19, 2024
3d0eed9
CSSTUDIO-2072 Fix name: rename 'appendPVAndDescriptionToClipboardCont…
abrahamwolk Apr 23, 2024
c760288
CSSTUDIO-2072 Add labels to messages.properties.
abrahamwolk Apr 23, 2024
908ae5d
CSSTUDIO-2072 Add labels to messages.properties.
abrahamwolk Apr 23, 2024
e0c401e
Merge branch 'master' into CSSTUDIO-2072-contextMenu
abrahamwolk Apr 23, 2024
c9cbe0e
CSSTUDIO-2081 Fix wrongly resolved merge conflict in ContextMenuHelpe…
abrahamwolk Apr 24, 2024
ef4a835
CSSTUDIO-2072 Distinguish between singular and plural in labels.
abrahamwolk May 8, 2024
7e23399
CSSTUDIO-2072 Change 'd' to 'D'.
abrahamwolk May 8, 2024
ba114bd
CSSTUDIO-2072 Add button "Copy PV Names" and rename existing button: …
abrahamwolk May 8, 2024
3900680
CSSTUDIO-2072 Remove Messages.Selected.
abrahamwolk May 8, 2024
be2a938
CSSTUDIO-2072 Replace table column header with a checkbox for that ca…
abrahamwolk May 8, 2024
2e37d39
CSSTUDIO-2072 Use System.lineSeparator() instead of "\n".
abrahamwolk May 8, 2024
692cbf8
CSSTUDIO-2072 Reduce width of column for selecting PV names.
abrahamwolk May 8, 2024
ca0ccdc
CSSTUDIO-2072 Rename button: "Close" -> "Cancel".
abrahamwolk May 8, 2024
505f951
CSSTUDIO-2072 Move the context menu-items for copying and appending P…
abrahamwolk Jun 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class Messages
BoolButtonError_Body,
BoolButtonError_Title,
Blue,
Cancel,
ColorDialog_Current,
ColorDialog_Custom,
ColorDialog_Default,
Expand All @@ -62,6 +63,12 @@ public class Messages
ConvertToEmbeddedJavaScript,
ConvertToEmbeddedPython,
ConvertToScriptFile,
CopyPVName,
CopyPVNames,
CopyPVNameAndDescription,
CopyPVNamesAndDescriptions,
Description,
DeSelectAll,
Edit,
ExportWidgetInfo,
ExportFailed,
Expand Down Expand Up @@ -102,6 +109,7 @@ public class Messages
PointsTable_Empty,
PointsTable_X,
PointsTable_Y,
PVName,
Red,
Remove,
Row,
Expand Down Expand Up @@ -136,6 +144,7 @@ public class Messages
ScriptsDialog_ScriptsTT,
ScriptsDialog_Title,
Select,
SelectAll,
ShowConfirmationDialogTitle,
ShowErrorDialogTitle,
ShowMessageDialogTitle,
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Alpha=Alpha
Blue=Blue
BoolButtonError_Body=Confirmation dialog supported only for toggle mode.
BoolButtonError_Title=Unsupported configuration
Cancel=Cancel
ColorDialog_Current=Current
ColorDialog_Custom=Custom Color
ColorDialog_Default=Default
Expand All @@ -45,6 +46,12 @@ ConvertToEmbeddedJavaScript=Convert to Embedded JavaScript\u2026
ConvertToEmbeddedPython=Convert to Embedded Python\u2026
ConvertToScriptFile=Convert to Script File
Copy=Copy
CopyPVName=Copy PV Name
CopyPVNames=Copy PV Names
CopyPVNameAndDescription=Copy PV Name & Description
CopyPVNamesAndDescriptions=Copy PV Names & Descriptions
Description=Description
DeSelectAll=De-Select All
Duplicate=Duplicate
Edit=Edit\u2026
ExportWidgetInfo=Export to file
Expand Down Expand Up @@ -84,6 +91,7 @@ PointsDialog_Title=Edit Points
PointsTable_Empty=No points
PointsTable_X=X
PointsTable_Y=Y
PVName=PV Name
Red=Red
Remove=Remove
Row=Row
Expand Down Expand Up @@ -118,6 +126,7 @@ ScriptsDialog_PythonScriptFile=my_script.py
ScriptsDialog_ScriptsTT=Select external script file or edit embedded script text
ScriptsDialog_Title=Scripts
Select=Select\u2026
SelectAll=Select All
ShowConfirmationDialogTitle=Please Confirm
ShowErrorDialogTitle=Error
ShowMessageDialogTitle=Message
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.csstudio.display.builder.runtime;

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 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<ProcessVariable> 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() + "\n";
} else {
existingContentInClipboard = "";
}
newContentInClipboard = existingContentInClipboard + pvNamesToAppendToClipboard;
}
ClipboardContent newContent = new ClipboardContent();
newContent.putString(newContentInClipboard);
clipboard.setContent(newContent);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
package org.csstudio.display.builder.runtime;

import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.control.Tooltip;
import javafx.scene.image.Image;
import javafx.scene.input.Clipboard;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.text.Text;
import javafx.stage.Window;
import javafx.util.Pair;
import org.csstudio.display.builder.runtime.app.DisplayRuntimeInstance;
import org.phoebus.core.types.ProcessVariable;
import org.phoebus.framework.selection.Selection;
import org.phoebus.ui.dialog.DialogHelper;
import org.phoebus.ui.docking.DockItem;
import org.phoebus.ui.docking.DockPane;
import org.phoebus.ui.javafx.ImageCache;
import org.phoebus.ui.spi.ContextMenuEntry;

import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;

public class ContextMenuAppendPvToClipboardWithDescription implements ContextMenuEntry {
@Override
public String getName() {
return Messages.AppendPVNameToClipboardWithDescription;
}

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<ProcessVariable> pvs = selection.getSelections();
String pvNamesToAppendToClipboard = pvs.stream().map(ProcessVariable::getName).collect(Collectors.joining(System.lineSeparator()));

String defaultDescription;
{
var activeDockPane = DockPane.getActiveDockPane();
var activeDockItem = (DockItem) activeDockPane.getSelectionModel().getSelectedItem();
if (activeDockItem.getApplication() instanceof DisplayRuntimeInstance) {
DisplayRuntimeInstance displayRuntimeInstance = (DisplayRuntimeInstance) activeDockItem.getApplication();
defaultDescription = displayRuntimeInstance.getDisplayName();
}
else {
defaultDescription = "";
}
}

BiConsumer<String, String> appendPVAndDescriptionToClipboardContinuation = (pvName, description) -> {
Clipboard clipboard = Clipboard.getSystemClipboard();
String newContentInClipboard;
{
String existingContentInClipboard;
if (clipboard.hasString()) {
existingContentInClipboard = clipboard.getString() + "\n";
} else {
existingContentInClipboard = "";
}
newContentInClipboard = existingContentInClipboard + pvName + "," + description;
}
ClipboardContent newContent = new ClipboardContent();
newContent.putString(newContentInClipboard);
clipboard.setContent(newContent);
};

String pvName = pvNamesToAppendToClipboard;

addDescriptionToPvNameModalDialog(pvName,
defaultDescription,
"Append",
appendPVAndDescriptionToClipboardContinuation);
}

public static void addDescriptionToPvNameModalDialog(String pvName,
String defaultDescription,
String acceptButtonText,
BiConsumer continuation) {
Window windowToPositionTheConfirmationDialogOver = DockPane.getActiveDockPane().getScene().getWindow();

ButtonType acceptButtonType = new ButtonType(acceptButtonText);
ButtonType cancelButtonType = new ButtonType("Cancel");

FutureTask<Optional<Pair<String, String>>> displayConfirmationWindow = new FutureTask(() -> {
Alert prompt = new Alert(Alert.AlertType.NONE);

prompt.getDialogPane().getButtonTypes().add(cancelButtonType);
Button cancelButton = (Button) prompt.getDialogPane().lookupButton(cancelButtonType);
cancelButton.setTooltip(new Tooltip(cancelButton.getText()));

prompt.getDialogPane().getButtonTypes().add(acceptButtonType);
Button acceptButton = (Button) prompt.getDialogPane().lookupButton(acceptButtonType);
acceptButton.setTooltip(new Tooltip(acceptButton.getText()));

GridPane gridPane = new GridPane();
gridPane.setPrefWidth(Double.MAX_VALUE);
gridPane.setVgap(4);

ColumnConstraints firstColumnColumnConstraints = new ColumnConstraints();
gridPane.getColumnConstraints().add(0, firstColumnColumnConstraints);
ColumnConstraints secondColumnColumnConstraints = new ColumnConstraints();
secondColumnColumnConstraints.setHgrow(Priority.ALWAYS);
secondColumnColumnConstraints.setFillWidth(true);
gridPane.getColumnConstraints().add(1, secondColumnColumnConstraints);

int currentRow = 0;

Text pvNameLabelText = new Text("PV Name: ");
pvNameLabelText.setStyle("-fx-font-size: 14; -fx-font-weight: bold; ");
gridPane.add(pvNameLabelText, 0, currentRow);

Text pvNameText = new Text(pvName);
pvNameText.setStyle("-fx-font-size: 14; -fx-font-style: italic; ");
gridPane.add(pvNameText, 1, currentRow);
currentRow++;

Text descriptionLabelText = new Text("Description: ");
descriptionLabelText.setStyle("-fx-font-size: 14; -fx-font-weight: bold; ");
gridPane.add(descriptionLabelText, 0, currentRow);

TextField descriptionText = new TextField(defaultDescription);
descriptionText.setStyle("-fx-font-size: 14; ");
descriptionText.setOnKeyPressed(keyEvent -> {
if (keyEvent.getCode() == KeyCode.ENTER) {
keyEvent.consume();
acceptButton.fire();
}
});
gridPane.add(descriptionText, 1, currentRow);
currentRow++;

prompt.getDialogPane().setOnKeyPressed(keyEvent -> {
if (keyEvent.getCode() == KeyCode.ESCAPE) {
keyEvent.consume();
cancelButton.fire();
}
});

ScrollPane scrollPane = new ScrollPane();
scrollPane.setContent(gridPane);

prompt.getDialogPane().setContent(gridPane);

prompt.setHeaderText("Append PV Name with Description to the Clipboard");
prompt.setTitle("Append PV Name with Description to the Clipboard");

int prefWidth = 500;
int prefHeight = 150;
prompt.getDialogPane().setPrefSize(prefWidth, prefHeight);
prompt.getDialogPane().setMinSize(Region.USE_PREF_SIZE, Region.USE_PREF_SIZE);
prompt.setResizable(false);

DialogHelper.positionDialog(prompt, windowToPositionTheConfirmationDialogOver.getScene().getRoot(), -prefWidth/2, -prefHeight/2);
descriptionText.requestFocus();
descriptionText.selectAll();

if (prompt.showAndWait().orElse(ButtonType.CANCEL) == acceptButtonType) {
String description = descriptionText.getText();
Pair<String, String> pvNameAndDescription = new Pair<>(pvName, description);
return Optional.of(pvNameAndDescription);
}
else {
return Optional.empty();
}
});

if (Platform.isFxApplicationThread()) {
displayConfirmationWindow.run();
}
else {
Platform.runLater(displayConfirmationWindow);
}
try {
Optional<Pair<String, String>> maybePVNameAndDescription = displayConfirmationWindow.get();
maybePVNameAndDescription.ifPresent(pair -> continuation.accept(pair.getKey(), pair.getValue()));
} catch (ExecutionException e) {
; // Do nothing.
} catch (InterruptedException e) {
; // Do nothing.
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.phoebus.applications.probe;

import static org.phoebus.applications.probe.Probe.logger;
package org.csstudio.display.builder.runtime;

import java.util.List;
import java.util.logging.Level;

import static org.csstudio.display.builder.runtime.WidgetRuntime.logger;

import org.epics.vtype.Alarm;
import org.epics.vtype.AlarmSeverity;
import org.epics.vtype.Time;
Expand All @@ -27,7 +27,7 @@
* @author Kay Kasemir
*/
@SuppressWarnings("nls")
public class ContextMenuPvAndValueToClipboard extends ContextMenuPvToClipboard
public class ContextMenuCopyPvAndValueToClipboard extends ContextMenuCopyPvToClipboard
{
@Override
public String getName()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.phoebus.applications.probe;
package org.csstudio.display.builder.runtime;

import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -27,7 +27,7 @@
* @author Kay Kasemir
*/
@SuppressWarnings("nls")
public class ContextMenuPvToClipboard implements ContextMenuEntry
public class ContextMenuCopyPvToClipboard implements ContextMenuEntry
{
private static final Class<?> supportedTypes = ProcessVariable.class;

Expand Down
Loading