Search in sources :

Example 1 with WidgetDescriptor

use of org.csstudio.display.builder.model.WidgetDescriptor 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)

Example 2 with WidgetDescriptor

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

the class MorphWidgetMenuSupport method createMenuManager.

private MenuManager createMenuManager() {
    final MenuManager mm = new MenuManager(Messages.ReplaceWith);
    mm.setRemoveAllWhenShown(true);
    mm.addMenuListener((manager) -> {
        if (editor.getWidgetSelectionHandler().getSelection().isEmpty())
            manager.add(new Action(Messages.ReplaceWith_NoWidgets) {
            });
        else {
            // Create menu that lists all widget types
            WidgetCategory category = null;
            for (WidgetDescriptor descr : WidgetFactory.getInstance().getWidgetDescriptions()) {
                if (Preferences.getHiddenWidgets().contains(descr.getType()))
                    continue;
                // Header for start of each category
                if (descr.getCategory() != category) {
                    category = descr.getCategory();
                    // Use disabled, empty action to show category name
                    final Action info = new Action(category.getDescription()) {
                    };
                    info.setEnabled(false);
                    manager.add(new Separator());
                    manager.add(info);
                }
                manager.add(new MorphAction(descr));
            }
        }
    });
    mm.setImageDescriptor(Plugin.getIcon("replace.png"));
    return mm;
}
Also used : AddWidgetAction(org.csstudio.display.builder.editor.undo.AddWidgetAction) CompoundUndoableAction(org.csstudio.display.builder.util.undo.CompoundUndoableAction) RemoveWidgetsAction(org.csstudio.display.builder.editor.undo.RemoveWidgetsAction) Action(org.eclipse.jface.action.Action) MenuManager(org.eclipse.jface.action.MenuManager) WidgetDescriptor(org.csstudio.display.builder.model.WidgetDescriptor) WidgetCategory(org.csstudio.display.builder.model.WidgetCategory) Separator(org.eclipse.jface.action.Separator)

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