From e4a4c4fe066ae78057bf17b44ea8f4c4d675c51b Mon Sep 17 00:00:00 2001 From: lr279911 Date: Wed, 28 Aug 2024 16:03:55 +0200 Subject: [PATCH] adding the possibility to copy all pvs from a view in the widget info dialog --- .../representation/javafx/Messages.java | 2 + .../javafx/WidgetInfoDialog.java | 89 ++++++++++++++++--- .../representation/javafx/messages.properties | 2 + .../javafx/messages_fr.properties | 4 + 4 files changed, 85 insertions(+), 12 deletions(-) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/Messages.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/Messages.java index 9a5413095b..9f0b610d55 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/Messages.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/Messages.java @@ -50,6 +50,8 @@ public class Messages ConvertToEmbeddedJavaScript, ConvertToEmbeddedPython, ConvertToScriptFile, + CopyWidgetInfo, + CopyButton, Edit, ExportWidgetInfo, ExportFailed, diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetInfoDialog.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetInfoDialog.java index 5adf641745..c53ebbe438 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetInfoDialog.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetInfoDialog.java @@ -20,12 +20,20 @@ import java.util.logging.Logger; import java.util.stream.Collectors; +import javafx.geometry.Pos; +import javafx.scene.layout.FlowPane; import javafx.event.EventHandler; -import javafx.scene.control.ContextMenu; -import javafx.scene.control.MenuItem; -import javafx.scene.control.SelectionMode; +import javafx.geometry.Insets; +import javafx.scene.Group; +import javafx.scene.Scene; +import javafx.scene.control.*; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.ContextMenuEvent; +import javafx.scene.layout.TilePane; +import javafx.stage.Stage; +import javafx.scene.input.Clipboard; +import javafx.scene.input.ClipboardContent; + import org.csstudio.display.builder.model.DisplayModel; import org.csstudio.display.builder.model.Widget; import org.csstudio.display.builder.model.WidgetDescriptor; @@ -34,6 +42,7 @@ import org.csstudio.display.builder.model.util.DisplayWidgetStats; import org.csstudio.display.builder.model.util.VTypeUtil; import org.csstudio.display.builder.representation.javafx.widgets.JFXBaseRepresentation; +import org.epics.pva.data.PVAValue; import org.epics.vtype.Alarm; import org.epics.vtype.AlarmSeverity; import org.epics.vtype.VNumberArray; @@ -55,17 +64,8 @@ import javafx.collections.ObservableList; import javafx.event.ActionEvent; import javafx.scene.Node; -import javafx.scene.control.Alert; import javafx.scene.control.Alert.AlertType; -import javafx.scene.control.Button; import javafx.scene.control.ButtonBar.ButtonData; -import javafx.scene.control.ButtonType; -import javafx.scene.control.Dialog; -import javafx.scene.control.Label; -import javafx.scene.control.Tab; -import javafx.scene.control.TabPane; -import javafx.scene.control.TableColumn; -import javafx.scene.control.TableView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.HBox; @@ -189,13 +189,18 @@ public WidgetInfoDialog(final Widget widget, final Collection pv tabs.getSelectionModel().select(1); final ButtonType export = new ButtonType(Messages.ExportWidgetInfo, ButtonData.LEFT); + final ButtonType copy = new ButtonType(Messages.CopyWidgetInfo, ButtonData.LEFT); + getDialogPane().setContent(tabs); getDialogPane().getButtonTypes().addAll(export, ButtonType.CLOSE); + getDialogPane().getButtonTypes().addAll(copy); setResizable(true); tabs.setMinWidth(800); Button exportButton = (Button)getDialogPane().lookupButton(export); + Button copyButton = (Button)getDialogPane().lookupButton(copy); + exportButton.addEventFilter( ActionEvent.ACTION, event -> { @@ -210,10 +215,70 @@ public WidgetInfoDialog(final Widget widget, final Collection pv event.consume(); } ); + copyButton.addEventFilter( + ActionEvent.ACTION, + event -> { + pvListDisplay(); + event.consume(); + } + ); setResultConverter(button -> true); } + + private void pvListDisplay(){ + FlowPane layout = new FlowPane(); + layout.setVgap(10); + layout.setHgap(20); + layout.setAlignment(Pos.TOP_CENTER); + Stage stage = new Stage(); + TextArea area = new TextArea(); + TilePane container = new TilePane(); + Button copyPv = new Button(Messages.CopyButton); + Button ok = new Button("OK"); + area.setPadding(new Insets(10, 10, 10, 10)); + area.setPrefSize(250,450); + stage.setResizable(false); + //stage.setMaxHeight(530); + //stage.setMaxWidth(270); + + layout.getChildren().add(area); + layout.getChildren().add(copyPv); + layout.getChildren().add(ok); + + Scene scene = new Scene(layout, 250, 500); + stage.setAlwaysOnTop(true); + stage.setTitle("PV List"); + stage.setScene(scene); + stage.show(); + + + pvs.stream().sorted(Comparator.comparing(pv -> pv.getName())).forEach(pv -> { + if(!area.getText().contains(pv.getName())) + area.setText(area.getText()+pv.getName()+"\n"); + }); + + EventHandler copying = new EventHandler() { + public void handle(ActionEvent e) + { + final Clipboard clipboard = Clipboard.getSystemClipboard(); + final ClipboardContent content = new ClipboardContent(); + content.putString(area.getText()); + clipboard.setContent(content); + } + }; + EventHandler cancel = new EventHandler() { + public void handle(ActionEvent e) + { + stage.close(); + } + }; + + copyPv.setOnAction(copying); + ok.setOnAction(cancel); + } + /** * Writes the table content of each tab to file. * diff --git a/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages.properties b/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages.properties index 29d8692889..d0a178c137 100644 --- a/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages.properties +++ b/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages.properties @@ -44,6 +44,8 @@ Copy=Copy Duplicate=Duplicate Edit=Edit\u2026 ExportWidgetInfo=Export to file +CopyWidgetInfo=Display Pv list +CopyButton =Copy to Clipboard ExportDone=Exported Widget Info to file {0}. ExportFailed=Export failed. FileTypeAll=All Files (*.*) diff --git a/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages_fr.properties b/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages_fr.properties index 5ca24bb967..26c1c15dd2 100644 --- a/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages_fr.properties +++ b/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/messages_fr.properties @@ -48,6 +48,10 @@ Copy=Copier Duplicate=Dupliquer Edit=Modifier\u2026 ExportWidgetInfo=Exporter vers un fichier +CopyWidgetInfo=Afficher liste des Pv +CopyButton =Copier dans le press-papier + + ExportDone=Informations sur le widget exportées dans le fichier {0}. ExportFailed=Échec de l'exportation. FileTypeAll=Tous les fichiers (*.*)