Search in sources :

Example 1 with PVWidget

use of org.csstudio.display.builder.model.widgets.PVWidget in project org.csstudio.display.builder by kasemir.

the class WidgetTransfer method installWidgetsFromString.

private static void installWidgetsFromString(final DragEvent event, final String text, final SelectedWidgetUITracker selection_tracker, final List<Widget> widgets) {
    // Consider each word a separate PV
    final String[] words = text.split("[ \n]+");
    final boolean multiple = words.length > 1;
    final List<WidgetDescriptor> descriptors = getPVWidgetDescriptors();
    final List<String> choices = new ArrayList<>(descriptors.size() + (multiple ? 1 : 0));
    final String format = multiple ? Messages.WT_FromString_multipleFMT : Messages.WT_FromString_singleFMT;
    // Always offer a single LabelWidget for the complete text
    final String defaultChoice = NLS.bind(Messages.WT_FromString_singleFMT, LabelWidget.WIDGET_DESCRIPTOR.getName());
    choices.add(defaultChoice);
    // When multiple words were dropped, offer multiple label widgets
    if (multiple) {
        choices.add(NLS.bind(Messages.WT_FromString_multipleFMT, LabelWidget.WIDGET_DESCRIPTOR.getName()));
    }
    choices.addAll(descriptors.stream().map(d -> NLS.bind(format, d.getName())).collect(Collectors.toList()));
    Collections.sort(choices);
    final ChoiceDialog<String> dialog = new ChoiceDialog<>(defaultChoice, choices);
    dialog.setX(event.getScreenX() - 100);
    dialog.setY(event.getScreenY() - 200);
    dialog.setTitle(Messages.WT_FromString_dialog_title);
    dialog.setHeaderText(NLS.bind(Messages.WT_FromString_dialog_headerFMT, reduceStrings(words)));
    dialog.setContentText(Messages.WT_FromString_dialog_content);
    final Optional<String> result = dialog.showAndWait();
    if (!result.isPresent()) {
        return;
    }
    final String choice = result.get();
    if (defaultChoice.equals(choice)) {
        logger.log(Level.FINE, "Dropped text: created LabelWidget [{0}].", text);
        // Not a valid XML. Instantiate a Label object.
        final LabelWidget widget = (LabelWidget) LabelWidget.WIDGET_DESCRIPTOR.createWidget();
        widget.propText().setValue(text);
        widgets.add(widget);
    } else {
        // Parse selection back into widget descriptor
        final MessageFormat msgf = new MessageFormat(format);
        final String descriptorName;
        try {
            descriptorName = msgf.parse(choice)[0].toString();
        } catch (Exception ex) {
            logger.log(Level.SEVERE, "Cannot parse selected widget type " + choice, ex);
            return;
        }
        WidgetDescriptor descriptor = null;
        if (LabelWidget.WIDGET_DESCRIPTOR.getName().equals(descriptorName)) {
            descriptor = LabelWidget.WIDGET_DESCRIPTOR;
        } else {
            descriptor = descriptors.stream().filter(d -> descriptorName.equals(d.getName())).findFirst().orElse(null);
        }
        if (descriptor == null) {
            logger.log(Level.SEVERE, "Cannot obtain widget for " + descriptorName);
            return;
        }
        for (String word : words) {
            final Widget widget = descriptor.createWidget();
            logger.log(Level.FINE, "Dropped text: created {0} [{1}].", new Object[] { widget.getClass().getSimpleName(), word });
            if (widget instanceof PVWidget) {
                ((PVWidget) widget).propPVName().setValue(word);
            } else if (widget instanceof LabelWidget) {
                ((LabelWidget) widget).propText().setValue(word);
            } else {
                logger.log(Level.WARNING, "Unexpected widget type [{0}].", widget.getClass().getSimpleName());
            }
            final int index = widgets.size();
            if (index > 0) {
                // Place widgets below each other
                final Widget previous = widgets.get(index - 1);
                int x = previous.propX().getValue();
                int y = previous.propY().getValue() + previous.propHeight().getValue();
                // Align (if enabled)
                final Point2D pos = selection_tracker.gridConstrain(x, y);
                widget.propX().setValue((int) pos.getX());
                widget.propY().setValue((int) pos.getY());
            }
            widgets.add(widget);
        }
    }
}
Also used : Color(java.awt.Color) ToolkitRepresentation(org.csstudio.display.builder.representation.ToolkitRepresentation) Arrays(java.util.Arrays) PictureWidget(org.csstudio.display.builder.model.widgets.PictureWidget) RenderingHints(java.awt.RenderingHints) ChoiceDialog(javafx.scene.control.ChoiceDialog) DragEvent(javafx.scene.input.DragEvent) ModelReader(org.csstudio.display.builder.model.persist.ModelReader) SelectedWidgetUITracker(org.csstudio.display.builder.editor.tracker.SelectedWidgetUITracker) PVWidget(org.csstudio.display.builder.model.widgets.PVWidget) ByteArrayInputStream(java.io.ByteArrayInputStream) ImageIO(javax.imageio.ImageIO) Palette(org.csstudio.display.builder.editor.palette.Palette) Point2D(javafx.geometry.Point2D) WidgetProperty(org.csstudio.display.builder.model.WidgetProperty) WidgetDescriptor(org.csstudio.display.builder.model.WidgetDescriptor) BufferedImage(java.awt.image.BufferedImage) NLS(org.eclipse.osgi.util.NLS) WidgetClassesService(org.csstudio.display.builder.model.persist.WidgetClassesService) Messages(org.csstudio.display.builder.editor.Messages) Collectors(java.util.stream.Collectors) List(java.util.List) Stream(java.util.stream.Stream) WidgetFactory(org.csstudio.display.builder.model.WidgetFactory) RTFEditorKit(javax.swing.text.rtf.RTFEditorKit) Optional(java.util.Optional) BasicStroke(java.awt.BasicStroke) Document(javax.swing.text.Document) ClipboardContent(javafx.scene.input.ClipboardContent) DisplayModel(org.csstudio.display.builder.model.DisplayModel) Plugin.logger(org.csstudio.display.builder.editor.Plugin.logger) MouseEvent(javafx.scene.input.MouseEvent) TransferMode(javafx.scene.input.TransferMode) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) HTMLEditorKit(javax.swing.text.html.HTMLEditorKit) Dragboard(javafx.scene.input.Dragboard) Graphics2D(java.awt.Graphics2D) DisplayEditor(org.csstudio.display.builder.editor.DisplayEditor) WebBrowserWidget(org.csstudio.display.builder.model.widgets.WebBrowserWidget) LabelWidget(org.csstudio.display.builder.model.widgets.LabelWidget) Stroke(java.awt.Stroke) ModelWriter(org.csstudio.display.builder.model.persist.ModelWriter) ModelResourceUtil(org.csstudio.display.builder.model.util.ModelResourceUtil) ArrayWidgetProperty(org.csstudio.display.builder.model.ArrayWidgetProperty) Dimension2D(javafx.geometry.Dimension2D) SymbolRepresentation(org.csstudio.display.builder.representation.javafx.widgets.SymbolRepresentation) Node(javafx.scene.Node) WritableImage(javafx.scene.image.WritableImage) EmbeddedDisplayWidget(org.csstudio.display.builder.model.widgets.EmbeddedDisplayWidget) SymbolWidget(org.csstudio.display.builder.model.widgets.SymbolWidget) File(java.io.File) EditorUtil(org.csstudio.display.builder.editor.EditorUtil) Consumer(java.util.function.Consumer) SwingFXUtils(javafx.embed.swing.SwingFXUtils) Widget(org.csstudio.display.builder.model.Widget) Collections(java.util.Collections) Image(javafx.scene.image.Image) InputStream(java.io.InputStream) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) PictureWidget(org.csstudio.display.builder.model.widgets.PictureWidget) PVWidget(org.csstudio.display.builder.model.widgets.PVWidget) WebBrowserWidget(org.csstudio.display.builder.model.widgets.WebBrowserWidget) LabelWidget(org.csstudio.display.builder.model.widgets.LabelWidget) EmbeddedDisplayWidget(org.csstudio.display.builder.model.widgets.EmbeddedDisplayWidget) SymbolWidget(org.csstudio.display.builder.model.widgets.SymbolWidget) Widget(org.csstudio.display.builder.model.Widget) PVWidget(org.csstudio.display.builder.model.widgets.PVWidget) WidgetDescriptor(org.csstudio.display.builder.model.WidgetDescriptor) ChoiceDialog(javafx.scene.control.ChoiceDialog) Point2D(javafx.geometry.Point2D) LabelWidget(org.csstudio.display.builder.model.widgets.LabelWidget)

Aggregations

BasicStroke (java.awt.BasicStroke)1 Color (java.awt.Color)1 Graphics2D (java.awt.Graphics2D)1 RenderingHints (java.awt.RenderingHints)1 Stroke (java.awt.Stroke)1 BufferedImage (java.awt.image.BufferedImage)1 ByteArrayInputStream (java.io.ByteArrayInputStream)1 File (java.io.File)1 InputStream (java.io.InputStream)1 MessageFormat (java.text.MessageFormat)1 ArrayList (java.util.ArrayList)1 Arrays (java.util.Arrays)1 Collections (java.util.Collections)1 List (java.util.List)1 Optional (java.util.Optional)1 Consumer (java.util.function.Consumer)1 Level (java.util.logging.Level)1 Collectors (java.util.stream.Collectors)1 Stream (java.util.stream.Stream)1 SwingFXUtils (javafx.embed.swing.SwingFXUtils)1