diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java index 1f56ddea77..73b88c918b 100644 --- a/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java +++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/Messages.java @@ -55,6 +55,9 @@ public class Messages FontStyle_BoldItalic, FontStyle_Italic, FontStyle_Regular, + FontStyle_Underline, + FontStyle_UnderlineBold, + FontStyle_UnderlineItalic, GroupWidget_Description, GroupWidget_Name, HighlightActiveRegion, diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/persist/NamedWidgetFonts.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/persist/NamedWidgetFonts.java index 0612137f98..191c6f77d7 100644 --- a/app/display/model/src/main/java/org/csstudio/display/builder/model/persist/NamedWidgetFonts.java +++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/persist/NamedWidgetFonts.java @@ -148,6 +148,12 @@ private WidgetFontStyle parseStyle(final String style_text) return WidgetFontStyle.ITALIC; case "bold italic": return WidgetFontStyle.BOLD_ITALIC; + case "underline": + return WidgetFontStyle.UNDERLINE; + case "underline_bold": + return WidgetFontStyle.UNDERLINE_BOLD; + case "underline_italic": + return WidgetFontStyle.UNDERLINE_ITALIC; default: return WidgetFontStyle.REGULAR; } diff --git a/app/display/model/src/main/java/org/csstudio/display/builder/model/properties/WidgetFontStyle.java b/app/display/model/src/main/java/org/csstudio/display/builder/model/properties/WidgetFontStyle.java index 71898e68ae..b9b5802053 100644 --- a/app/display/model/src/main/java/org/csstudio/display/builder/model/properties/WidgetFontStyle.java +++ b/app/display/model/src/main/java/org/csstudio/display/builder/model/properties/WidgetFontStyle.java @@ -22,7 +22,13 @@ public enum WidgetFontStyle /** Italic */ ITALIC(Messages.FontStyle_Italic), /** Bold and italic */ - BOLD_ITALIC(Messages.FontStyle_BoldItalic); + BOLD_ITALIC(Messages.FontStyle_BoldItalic), + /** Underline */ + UNDERLINE(Messages.FontStyle_Underline), + /** Underline and bold */ + UNDERLINE_BOLD(Messages.FontStyle_UnderlineBold), + /** Underline and italic*/ + UNDERLINE_ITALIC(Messages.FontStyle_UnderlineItalic); private final String name; diff --git a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties index 278fcc4753..5142ee46a9 100644 --- a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties +++ b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages.properties @@ -37,6 +37,9 @@ FontStyle_Bold=Bold FontStyle_BoldItalic=Bold & Italic FontStyle_Italic=Italic FontStyle_Regular=Regular +FontStyle_Underline=Underline +FontStyle_UnderlineBold=Underline & Bold +FontStyle_UnderlineItalic=Underline & Italic GroupWidget_Description=Group of widgets GroupWidget_Name=Group HighlightActiveRegion=Highlight Active Region diff --git a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages_fr.properties b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages_fr.properties index a5764e7ef7..64fb765e8f 100644 --- a/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages_fr.properties +++ b/app/display/model/src/main/resources/org/csstudio/display/builder/model/messages_fr.properties @@ -37,6 +37,9 @@ FontStyle_Bold=Gras FontStyle_BoldItalic=Gras & Italique FontStyle_Italic=Italique FontStyle_Regular=Normal +FontStyle_Underline=Souligné +FontStyle_UnderlineBold=Souligné & Gras +FontStyle_UnderlineItalic=Souligné & Italique GroupWidget_Description=Groupe de widgets GroupWidget_Name=Groupe HighlightActiveRegion=Mettre en surbrillance la région active diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/JFXUtil.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/JFXUtil.java index 953886c329..aae47e38c6 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/JFXUtil.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/JFXUtil.java @@ -171,8 +171,10 @@ public static Font convert(final WidgetFont font) switch (f.getStyle()) { case BOLD: + case UNDERLINE_BOLD: return Font.font(f.getFamily(), FontWeight.BOLD, FontPosture.REGULAR, calibrated); case ITALIC: + case UNDERLINE_ITALIC: return Font.font(f.getFamily(), FontWeight.NORMAL, FontPosture.ITALIC, calibrated); case BOLD_ITALIC: return Font.font(f.getFamily(), FontWeight.BOLD, FontPosture.ITALIC, calibrated); diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetFontPopOverController.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetFontPopOverController.java index 763c42ce9e..3c8f834e50 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetFontPopOverController.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/WidgetFontPopOverController.java @@ -22,6 +22,7 @@ import java.util.function.Consumer; import javafx.event.Event; +import javafx.scene.text.Text; import org.csstudio.display.builder.model.persist.NamedWidgetFonts; import org.csstudio.display.builder.model.persist.WidgetFontService; import org.csstudio.display.builder.model.properties.NamedWidgetFont; @@ -82,7 +83,7 @@ private static T defaultIfNull ( T value, T defaultValue ) { @FXML private ComboBox styles; @FXML private ComboBox sizes; - @FXML private TextField preview; + @FXML private Text preview; @FXML private Button cancelButton; @FXML private Button defaultButton; @@ -224,7 +225,9 @@ public void initialize ( URL location, ResourceBundle resources ) { } preview.setFont(JFXUtil.convert(newValue)); - + WidgetFontStyle style = newValue.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + preview.setUnderline(underline); }); // Buttons diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ActionButtonRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ActionButtonRepresentation.java index d72c31f938..669684f2c2 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ActionButtonRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ActionButtonRepresentation.java @@ -30,9 +30,7 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; -import org.csstudio.display.builder.model.properties.ActionInfos; -import org.csstudio.display.builder.model.properties.RotationStep; -import org.csstudio.display.builder.model.properties.StringWidgetProperty; +import org.csstudio.display.builder.model.properties.*; import org.csstudio.display.builder.model.spi.ActionInfo; import org.csstudio.display.builder.model.widgets.ActionButtonWidget; import org.csstudio.display.builder.representation.javafx.Cursors; @@ -167,7 +165,7 @@ private ButtonBase makeBaseButton() { button.setOnAction(event -> confirm(() -> handleActions(actions.getActions()))); result = button; if (actions.getActions().size() == 1) { - // If the ActionButton only has a single action and that is to + // If the ActionButton only has a single action and that is to // write to a PV then is_writePV should be true. // This means that if the PV is non-writable then the // ActionButton will be disabled. @@ -392,12 +390,12 @@ private void updateColors() { style = "-fx-background: transparent; -fx-color: transparent; -fx-focus-color: rgba(3,158,211,0.1); -fx-mark-color: transparent; -fx-background-color: transparent;"; else style = JFXUtil.shadedStyle(model_widget.propBackgroundColor().getValue()); - + final String fg_css = JFXUtil.webHex(model_widget.propForegroundColor().getValue()); // Most labels use -fx-text-fill style += " -fx-text-fill: " + fg_css + ";"; // Modena sets .menu-button .label to -fx-text-fill: -fx-text-base-color, so patch -fx-text-base-color as well - style += " -fx-text-base-color: " + fg_css + ";"; + style += " -fx-text-base-color: " + fg_css + ";"; } @Override @@ -412,6 +410,10 @@ public void updateChanges() { base.setText(button_text); base.setStyle(style); base.setFont(JFXUtil.convert(model_widget.propFont().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle fontStyle = font.getStyle(); + boolean underline = fontStyle.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + base.setUnderline(underline); // If widget is not wide enough to show the label, hide menu button 'arrow'. if (base instanceof MenuButton) { diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseLEDRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseLEDRepresentation.java index c75cdb1f86..00b30b9514 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseLEDRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BaseLEDRepresentation.java @@ -14,6 +14,8 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.widgets.BaseLEDWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; import org.epics.vtype.AlarmSeverity; @@ -230,6 +232,10 @@ public void updateChanges() final Color color = JFXUtil.convert(model_widget.propForegroundColor().getValue()); label.setTextFill(color); label.setFont(JFXUtil.convert(model_widget.propFont().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + label.setUnderline(underline); led.setStyle("-fx-stroke: " + JFXUtil.webRgbOrHex(model_widget.propLineColor().getValue())); diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BoolButtonRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BoolButtonRepresentation.java index 6fe8000d4f..014a0afbbf 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BoolButtonRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BoolButtonRepresentation.java @@ -20,6 +20,8 @@ import org.csstudio.display.builder.model.WidgetPropertyListener; import org.csstudio.display.builder.model.properties.CommonWidgetProperties; import org.csstudio.display.builder.model.properties.ConfirmDialog; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.util.ModelResourceUtil; import org.csstudio.display.builder.model.util.VTypeUtil; import org.csstudio.display.builder.model.widgets.BoolButtonWidget; @@ -359,7 +361,7 @@ private void representationChanged(final WidgetProperty property, final Objec value_label = state_labels[on_state]; computeBackground(); - + pos = JFXUtil.computePos(model_widget.propHorizontalAlignment().getValue(), model_widget.propVerticalAlignment().getValue()); @@ -394,6 +396,10 @@ public void updateChanges() hei = model_widget.propHeight().getValue(); button.setPrefSize(wid, hei); button.setFont(JFXUtil.convert(model_widget.propFont().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + button.setUnderline(underline); button.setTextFill(foreground); button.setStyle(background); @@ -417,7 +423,7 @@ public void updateChanges() { enabled = model_widget.propEnabled().getValue() && model_widget.runtimePropPVWritable().getValue(); - setDisabledLook(enabled, jfx_node.getChildren()); + setDisabledLook(enabled, jfx_node.getChildren()); } if (update_value) { diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/CheckBoxRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/CheckBoxRepresentation.java index db73a336b6..41d238ae29 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/CheckBoxRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/CheckBoxRepresentation.java @@ -15,6 +15,8 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.util.VTypeUtil; import org.csstudio.display.builder.model.widgets.CheckBoxWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; @@ -223,6 +225,11 @@ public void updateChanges() jfx_node.setText(label); jfx_node.setFont(JFXUtil.convert(model_widget.propFont().getValue())); jfx_node.setTextFill(JFXUtil.convert(model_widget.propForegroundColor().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + jfx_node.setUnderline(underline); + // Don't disable the widget, because that would also remove the // context menu etc. diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ChoiceButtonRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ChoiceButtonRepresentation.java index 2e336eeb0d..e124acc03b 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ChoiceButtonRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ChoiceButtonRepresentation.java @@ -18,6 +18,8 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.util.VTypeUtil; import org.csstudio.display.builder.model.widgets.ChoiceButtonWidget; import org.csstudio.display.builder.representation.javafx.Cursors; @@ -181,12 +183,12 @@ private void selectionChanged(final ObservableValue obs, final { active = false; } - } - else if (!enabled && newval == null) + } + else if (!enabled && newval == null) { // If the choice button is not enabled (no write allowed) // we still have to ensure the 'oldval' stays selected - // as otherwise clicking on the same value will set an + // as otherwise clicking on the same value will set an // unselected look on the ChoiceButton. toggle.selectToggle(oldval); } @@ -346,6 +348,10 @@ public void updateChanges() final ButtonBase b = (ButtonBase) node; b.setTextFill(fg); b.setFont(font); + WidgetFont fontStyle = model_widget.propFont().getValue(); + WidgetFontStyle style = fontStyle.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + b.setUnderline(underline); b.setAlignment(pos); b.setTextAlignment(TextAlignment.values()[model_widget.propHorizontalAlignment().getValue().ordinal()]); if (((Toggle)b).isSelected()) diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java index 66b46fd532..fa843110db 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/LabelRepresentation.java @@ -12,6 +12,8 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.properties.RotationStep; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.widgets.LabelWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; import org.phoebus.ui.javafx.TextUtils; @@ -188,6 +190,10 @@ public void updateChanges() label.setBackground(new Background(new BackgroundFill(color, CornerRadii.EMPTY, Insets.EMPTY))); } label.setFont(JFXUtil.convert(model_widget.propFont().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + label.setUnderline(underline); } } } diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RadioRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RadioRepresentation.java index c92fb5b4c8..63ac1f8c91 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RadioRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/RadioRepresentation.java @@ -18,6 +18,8 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.util.VTypeUtil; import org.csstudio.display.builder.model.widgets.RadioWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; @@ -305,6 +307,10 @@ public void updateChanges() final RadioButton rb = (RadioButton) rb_node; rb.setTextFill(fg); rb.setFont(font); + WidgetFont fontStyle = model_widget.propFont().getValue(); + WidgetFontStyle style = fontStyle.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + rb.setUnderline(underline); } } } diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java index 03d92d4bc7..c9edd66108 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java @@ -19,6 +19,8 @@ import org.csstudio.display.builder.model.UntypedWidgetPropertyListener; import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.util.VTypeUtil; import org.csstudio.display.builder.model.widgets.SlideButtonWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; @@ -94,6 +96,10 @@ public void updateChanges ( ) { label.setFont(JFXUtil.convert(model_widget.propFont().getValue())); label.setText(labelContent); label.setTextFill(foreground); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + label.setUnderline(underline); // Don't disable the widget, because that would also remove the context menu etc. // Just apply a style that matches the disabled look. diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextSymbolRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextSymbolRepresentation.java index d2fedb6f22..5130677ab2 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextSymbolRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextSymbolRepresentation.java @@ -21,6 +21,8 @@ import org.csstudio.display.builder.model.WidgetProperty; import org.csstudio.display.builder.model.WidgetPropertyListener; import org.csstudio.display.builder.model.properties.RotationStep; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.widgets.TextSymbolWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; import org.epics.util.array.ListNumber; @@ -222,6 +224,11 @@ protected Label createJFXNode ( ) throws Exception { : new Background(new BackgroundFill(JFXUtil.convert(model_widget.propBackgroundColor().getValue()), CornerRadii.EMPTY, Insets.EMPTY)) ); symbol.setFont(JFXUtil.convert(model_widget.propFont().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + symbol.setUnderline(underline); + symbol.setTextFill(JFXUtil.convert(model_widget.propForegroundColor().getValue())); symbol.setText("\u263A"); symbol.setManaged(false); diff --git a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java index 6d91069f48..fdaf5a8a8a 100644 --- a/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java +++ b/app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/TextUpdateRepresentation.java @@ -16,6 +16,8 @@ import org.csstudio.display.builder.model.WidgetPropertyListener; import org.csstudio.display.builder.model.properties.RotationStep; import org.csstudio.display.builder.model.properties.VerticalAlignment; +import org.csstudio.display.builder.model.properties.WidgetFont; +import org.csstudio.display.builder.model.properties.WidgetFontStyle; import org.csstudio.display.builder.model.widgets.PVWidget; import org.csstudio.display.builder.model.widgets.TextUpdateWidget; import org.csstudio.display.builder.representation.javafx.JFXUtil; @@ -256,6 +258,11 @@ public void updateChanges() Color color = JFXUtil.convert(model_widget.propForegroundColor().getValue()); label.setTextFill(color); label.setFont(JFXUtil.convert(model_widget.propFont().getValue())); + WidgetFont font = model_widget.propFont().getValue(); + WidgetFontStyle style = font.getStyle(); + boolean underline = style.toString().contains(WidgetFontStyle.UNDERLINE.toString()); + label.setUnderline(underline); + label.setAlignment(pos); label.setWrapText(model_widget.propWrapWords().getValue()); } diff --git a/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/WidgetFontPopOver.fxml b/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/WidgetFontPopOver.fxml index beea8aa199..db9ce6b5c9 100644 --- a/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/WidgetFontPopOver.fxml +++ b/app/display/representation-javafx/src/main/resources/org/csstudio/display/builder/representation/javafx/WidgetFontPopOver.fxml @@ -7,7 +7,7 @@ - + @@ -101,7 +101,7 @@ - + @@ -121,4 +121,3 @@ - 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 34d62d2aff..1e688d5611 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 @@ -1,179 +1,173 @@ -ActionButton_N_ActionsAsOneFmt={0} actions -ActionButton_N_ActionsFmt=Choisissez 1 parmi {0} -ActionButton_NoActions=VIDE -ActionsDialog_Actions=Actions : -ActionsDialog_Detail=Détail de l’action : -ActionsDialog_DisplayPath=Chemin de l’affichage : -ActionsDialog_ExecuteAll=Exécuter toutes les actions en une seule fois -ActionsDialog_FilePath=Chemin du fichier : -ActionsDialog_Info=Configurer les actions qui ouvrent des affichages, écrivent des PV, etc. -ActionsDialog_PVName=Nom du PV : -ActionsDialog_ScriptPath=Fichier de script : -ActionsDialog_ScriptText=Texte du script intégré : -ActionsDialog_Title=Actions -Add=Ajouter -AddEmbeddedJavaScript=Ajouter JavaScript intégré\u2026 -AddEmbeddedPython=Ajouter Python intégré\u2026 -AddJavaScriptFile=Ajouter un fichier JavaScript -AddPythonFile=Ajouter un fichier Python -ArchivedStatus=Archivé -ArchivedStatusGet=Obtenir l’état d’archivage -ArchivedStatusNo=Non -ArchivedStatusNotApplicable=Non applicable -ArchivedStatusPleaseWait=Veuillez patienter -ArchivedStatusYes=Oui -Alpha=Alpha -Blue=Bleu -BoolButtonError_Body=Le dialogue de confirmation est pris en charge uniquement pour le mode toggle. -BoolButtonError_Title=Configuration non prise en charge -ColorDialog_Current=Actuel -ColorDialog_Custom=Couleur personnalisée -ColorDialog_Default=Défaut -ColorDialog_Info=Séléctionnez une couleur prédéfinie, ou une couleur personnalisée -ColorDialog_Original=Original -ColorDialog_Predefined=Couleurs prédéfinies -ColorDialog_Title_FMT=Choisir {0} -ColorMap_Custom=Carte de couleurs personnalisée -ColorMapDialog_Add=Ajouter une couleur -ColorMapDialog_Color=Couleur -ColorMapDialog_Info=Séléctionnez une carte de couleurs prédéfinie. Optionnellement, personnalisez-la. -ColorMapDialog_PredefinedMap=Carte de couleurs prédéfinie -ColorMapDialog_Remove=Supprimer la couleur -ColorMapDialog_Result=Résultat -ColorMapDialog_Title=Carte de couleurs -ColorMapDialog_Value=Valeur (0-255) -Column=Colonne -ConvertToEmbeddedJavaScript=Convertir en JavaScript intégré\u2026 -ConvertToEmbeddedPython=Convertir en Python intégré\u2026 -ConvertToScriptFile=Convertir en fichier script -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 (*.*) -FileTypeDisplays=Affichages (*.bob) -FontDialog_ExampleText=Texte exemple -FontDialog_Family=Police personnalisée : -FontDialog_Info=Séléctionnez une police prédéfinie, ou une police personnalisée -FontDialog_Predefined=Polices prédéfinies -FontDialog_Preview=Aperçu : -FontDialog_Size=Taille : -FontDialog_Style=Style : -Green=Vert -HIGH=HIGH -HIHI=HIHI -LOLO=LOLO -LOW=LOW -MacrosDialog_Info=Entrer les macros -MacrosDialog_NameCol=Nom de la macro -MacrosDialog_Title=Macros -MacrosDialog_ValueCol=Valeur -MacrosTable_NameHint= -MacrosTable_ToolTip=Modifier les noms ou les valeurs. Ajouter une nouvelle macro dans la dernière ligne -MacrosTable_ValueHint= -MoveDown=Vers le bas -MoveUp=Vers le haut -NotSet=Non défini -OpenInExternalEditor=Ouvrir dans un éditeur externe -Password=Mot de passe -Password_Caption=Mot de passe : -Password_Error=Mot de passe incorrect -Password_Prompt=Entrer le mot de passe -PointsDialog_Info=Modifier les coordonnées des points -PointsDialog_Title=Modifier les points -PointsTable_Empty=Pas de points -PointsTable_X=X -PointsTable_Y=Y -Red=Rouge -Remove=Supprimer -Row=Ligne -RulesDialog_ColName=Règle -RulesDialog_ColBoolExp=Expression booléenne -RulesDialog_ColValExp=Expression de valeur -RulesDialog_DefaultRuleName=Nouvelle règle -RulesDialog_ExpressionsTT=Modifier les expressions -RulesDialog_Info=Modifier les règles pour le widget -RulesDialog_NoExpressions=Pas d’expressions dans le tableau. -RulesDialog_NoPVs=Pas de PVs dans le tableau. -RulesDialog_NoRules=Pas de règles dans le tableau. -RulesDialog_PVsTT=Modifier les noms des PV et sélectionner si les changements de leur valeur déclenchent l’exécution de la règle -RulesDialog_RulesTT=Modifier les règles -RulesDialog_SelectRule=Séléctionner la règle pour voir/ajouter PV/Expression -RulesDialog_ShowScript=Afficher le script -RulesDialog_Title=Règles -ScriptsDialog_BtnEmbedJS=Intégrer JS -ScriptsDialog_BtnEmbedPy=Intégrer Py -ScriptsDialog_BtnFile=Fichier -ScriptsDialog_CheckConnections=Déclencher uniquement lorsque tous les PVs sont connectés -ScriptsDialog_ColPV=Nom du PV -ScriptsDialog_ColScript=Script -ScriptsDialog_ColTrigger=Déclencheur -ScriptsDialog_DefaultScriptFile=mon_script.py -ScriptsDialog_Info=Modifier les scripts et leurs PVs -ScriptsDialog_JavaScriptScriptFile=mon_script.js -ScriptsDialog_NoScripts=Pas de scripts dans le tableau. -ScriptsDialog_NoPVs=Pas de PVs dans le tableau. -ScriptsDialog_PVsTT=Modifier les noms des PV et sélectionner si les changements de leur valeur déclenchent l’exécution du script -ScriptsDialog_PythonScriptFile=mon_script.py -ScriptsDialog_ScriptsTT=Séléctionner le fichier script externe ou modifier le texte du script intégré -ScriptsDialog_Title=Scripts -Select=Séléctionner\u2026 -ShowConfirmationDialogTitle=Veuillez confirmer -ShowErrorDialogTitle=Erreur -ShowMessageDialogTitle=Message -ShowSaveAsDialogTitle=Enregistrer sous -WebPageErrorDetails=Détails de l’erreur -WebPageErrorLoading=Erreur au chargement de la page -WebPageErrorMessage=Message d’erreur -WidgetColorPopOver_Hex=Valeur Hex : -WidgetColorPopOver_Alpha=Alpha : -WidgetColorPopOver_Blue=Bleu : -WidgetColorPopOver_Color=Couleur : -WidgetColorPopOver_CustomColor=Couleur personnalisée -WidgetColorPopOver_Default=défaut -WidgetColorPopOver_DefaultButton=Défaut -WidgetColorPopOver_Info={0} – Séléctionnez une couleur prédéfinie et/ou personnalisez-la. -WidgetColorPopOver_Green=Vert : -WidgetColorPopOver_Original=original -WidgetColorPopOver_PredefinedColors=Couleurs prédéfinies -WidgetColorPopOver_Red=Rouge : -WidgetColorPopOver_SearchField=Rechercher -WidgetColorPopOver_SearchFieldTT=Filtrer les couleurs par nom -WidgetFontPopOver_ExampleText=Texte exemple -WidgetFontPopOver_FontsFamilies=Familles de polices -WidgetFontPopOver_Info={0} – Séléctionnez une police prédéfinie et/ou personnalisez-la. -WidgetFontPopOver_PredefinedFonts=Polices prédéfinies -WidgetFontPopOver_Preview=Aperçu -WidgetFontPopOver_PreviewPrompt=Entrez votre texte pour un aperçu. -WidgetFontPopOver_SearchPrompt=Rechercher -WidgetFontPopOver_SearchPromptTT=Filtrer les polices par nom -WidgetFontPopOver_SizeCaption=Taille : -WidgetFontPopOver_SizePrompt=Entrez ou séléctionnez la taille de la police -WidgetFontPopOver_Sizes=Tailles -WidgetFontPopOver_StyleCaption=Style : -WidgetFontPopOver_StylePrompt=Séléctionnez le style de la police -WidgetFontPopOver_Styles=Styles -WidgetInfoDialog_Category=Catégorie -WidgetInfoDialog_Count=Nombre -WidgetInfoDialog_Disconnected=Déconnecté -WidgetInfoDialog_Info_Fmt=Widget "{0}" ({1}) -WidgetInfoDialog_Name=Nom -WidgetInfoDialog_Path=Chemin du widget -WidgetInfoDialog_Property=Propriété -WidgetInfoDialog_State=État -WidgetInfoDialog_WidgetStats=Statistiques des widgets -WidgetInfoDialog_TabMacros=Macros -WidgetInfoDialog_TabProperties=Propriétés -WidgetInfoDialog_TabPVs=PV -WidgetInfoDialog_Title=Infos du widget -WidgetInfoDialog_Total=Total -WidgetInfoDialog_Value=Valeur -WidgetInfoDialog_WidgetType=Type de widget -Zoom_All=Tout -Zoom_Height=Hauteur -Zoom_Width=Largeur -Reset_Axis_Ranges=Réinitialiser les axes +ActionButton_N_ActionsAsOneFmt={0} actions +ActionButton_N_ActionsFmt=Choisissez 1 parmi {0} +ActionButton_NoActions=VIDE +ActionsDialog_Actions=Actions : +ActionsDialog_Detail=D\u00E9tail de l\u2019action : +ActionsDialog_DisplayPath=Chemin de l\u2019affichage : +ActionsDialog_ExecuteAll=Ex\u00E9cuter toutes les actions en une seule fois +ActionsDialog_FilePath=Chemin du fichier : +ActionsDialog_Info=Configurer les actions qui ouvrent des affichages, \u00E9crivent des PV, etc. +ActionsDialog_PVName=Nom du PV : +ActionsDialog_ScriptPath=Fichier de script : +ActionsDialog_ScriptText=Texte du script int\u00E9gr\u00E9 : +ActionsDialog_Title=Actions +Add=Ajouter +AddEmbeddedJavaScript=Ajouter JavaScript int\u00E9gr\u00E9\u2026 +AddEmbeddedPython=Ajouter Python int\u00E9gr\u00E9\u2026 +AddJavaScriptFile=Ajouter un fichier JavaScript +AddPythonFile=Ajouter un fichier Python +Alpha=Alpha +Blue=Bleu +BoolButtonError_Body=Le dialogue de confirmation est pris en charge uniquement pour le mode toggle. +BoolButtonError_Title=Configuration non prise en charge +ColorDialog_Current=Actuel +ColorDialog_Custom=Couleur personnalis\u00E9e +ColorDialog_Default=D\u00E9faut +ColorDialog_Info=S\u00E9l\u00E9ctionnez une couleur pr\u00E9d\u00E9finie, ou une couleur personnalis\u00E9e +ColorDialog_Original=Original +ColorDialog_Predefined=Couleurs pr\u00E9d\u00E9finies +ColorDialog_Title_FMT=Choisir {0} +ColorMap_Custom=Carte de couleurs personnalis\u00E9e +ColorMapDialog_Add=Ajouter une couleur +ColorMapDialog_Color=Couleur +ColorMapDialog_Info=S\u00E9l\u00E9ctionnez une carte de couleurs pr\u00E9d\u00E9finie. Optionnellement, personnalisez-la. +ColorMapDialog_PredefinedMap=Carte de couleurs pr\u00E9d\u00E9finie +ColorMapDialog_Remove=Supprimer la couleur +ColorMapDialog_Result=R\u00E9sultat +ColorMapDialog_Title=Carte de couleurs +ColorMapDialog_Value=Valeur (0-255) +Column=Colonne +ConvertToEmbeddedJavaScript=Convertir en JavaScript int\u00E9gr\u00E9\u2026 +ConvertToEmbeddedPython=Convertir en Python int\u00E9gr\u00E9\u2026 +ConvertToScriptFile=Convertir en fichier script +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\u00E9es dans le fichier {0}. +ExportFailed=\u00C9chec de l\u2019exportation. +FileTypeAll=Tous les fichiers (*.*) +FileTypeDisplays=Affichages (*.bob) +FontDialog_ExampleText=Texte exemple +FontDialog_Family=Police personnalis\u00E9e : +FontDialog_Info=S\u00E9l\u00E9ctionnez une police pr\u00E9d\u00E9finie, ou une police personnalis\u00E9e +FontDialog_Predefined=Polices pr\u00E9d\u00E9finies +FontDialog_Preview=Aper\u00E7u : +FontDialog_Size=Taille : +FontDialog_Style=Style : +Green=Vert +HIGH=HIGH +HIHI=HIHI +LOLO=LOLO +LOW=LOW +MacrosDialog_Info=Entrer les macros +MacrosDialog_NameCol=Nom de la macro +MacrosDialog_Title=Macros +MacrosDialog_ValueCol=Valeur +MacrosTable_NameHint= +MacrosTable_ToolTip=Modifier les noms ou les valeurs. Ajouter une nouvelle macro dans la derni\u00E8re ligne +MacrosTable_ValueHint= +MoveDown=Vers le bas +MoveUp=Vers le haut +NotSet=Non d\u00E9fini +OpenInExternalEditor=Ouvrir dans un \u00E9diteur externe +Password=Mot de passe +Password_Caption=Mot de passe : +Password_Error=Mot de passe incorrect +Password_Prompt=Entrer le mot de passe +PointsDialog_Info=Modifier les coordonn\u00E9es des points +PointsDialog_Title=Modifier les points +PointsTable_Empty=Pas de points +PointsTable_X=X +PointsTable_Y=Y +Red=Rouge +Remove=Supprimer +Row=Ligne +RulesDialog_ColName=R\u00E8gle +RulesDialog_ColBoolExp=Expression bool\u00E9enne +RulesDialog_ColValExp=Expression de valeur +RulesDialog_DefaultRuleName=Nouvelle r\u00E8gle +RulesDialog_ExpressionsTT=Modifier les expressions +RulesDialog_Info=Modifier les r\u00E8gles pour le widget +RulesDialog_NoExpressions=Pas d\u2019expressions dans le tableau. +RulesDialog_NoPVs=Pas de PVs dans le tableau. +RulesDialog_NoRules=Pas de r\u00E8gles dans le tableau. +RulesDialog_PVsTT=Modifier les noms des PV et s\u00E9lectionner si les changements de leur valeur d\u00E9clenchent l\u2019ex\u00E9cution de la r\u00E8gle +RulesDialog_RulesTT=Modifier les r\u00E8gles +RulesDialog_SelectRule=S\u00E9l\u00E9ctionner la r\u00E8gle pour voir/ajouter PV/Expression +RulesDialog_ShowScript=Afficher le script +RulesDialog_Title=R\u00E8gles +ScriptsDialog_BtnEmbedJS=Int\u00E9grer JS +ScriptsDialog_BtnEmbedPy=Int\u00E9grer Py +ScriptsDialog_BtnFile=Fichier +ScriptsDialog_CheckConnections=D\u00E9clencher uniquement lorsque tous les PVs sont connect\u00E9s +ScriptsDialog_ColPV=Nom du PV +ScriptsDialog_ColScript=Script +ScriptsDialog_ColTrigger=D\u00E9clencheur +ScriptsDialog_DefaultScriptFile=mon_script.py +ScriptsDialog_Info=Modifier les scripts et leurs PVs +ScriptsDialog_JavaScriptScriptFile=mon_script.js +ScriptsDialog_NoScripts=Pas de scripts dans le tableau. +ScriptsDialog_NoPVs=Pas de PVs dans le tableau. +ScriptsDialog_PVsTT=Modifier les noms des PV et s\u00E9lectionner si les changements de leur valeur d\u00E9clenchent l\u2019ex\u00E9cution du script +ScriptsDialog_PythonScriptFile=mon_script.py +ScriptsDialog_ScriptsTT=S\u00E9l\u00E9ctionner le fichier script externe ou modifier le texte du script int\u00E9gr\u00E9 +ScriptsDialog_Title=Scripts +Select=S\u00E9l\u00E9ctionner\u2026 +ShowConfirmationDialogTitle=Veuillez confirmer +ShowErrorDialogTitle=Erreur +ShowMessageDialogTitle=Message +ShowSaveAsDialogTitle=Enregistrer sous +WebPageErrorDetails=D\u00E9tails de l\u0027erreur +WebPageErrorLoading=Erreur au chargement de la page +WebPageErrorMessage=Message d\u0027erreur +WidgetColorPopOver_Hex=Valeur Hex : +WidgetColorPopOver_Alpha=Alpha : +WidgetColorPopOver_Blue=Bleu : +WidgetColorPopOver_Color=Couleur : +WidgetColorPopOver_CustomColor=Couleur personnalis\u00E9e +WidgetColorPopOver_Default=d\u00E9faut +WidgetColorPopOver_DefaultButton=D\u00E9faut +WidgetColorPopOver_Info={0} \u2013 S\u00E9l\u00E9ctionnez une couleur pr\u00E9d\u00E9finie et/ou personnalisez-la. +WidgetColorPopOver_Green=Vert : +WidgetColorPopOver_Original=original +WidgetColorPopOver_PredefinedColors=Couleurs pr\u00E9d\u00E9finies +WidgetColorPopOver_Red=Rouge : +WidgetColorPopOver_SearchField=Rechercher +WidgetColorPopOver_SearchFieldTT=Filtrer les couleurs par nom +WidgetFontPopOver_ExampleText=Texte exemple +WidgetFontPopOver_FontsFamilies=Familles de polices +WidgetFontPopOver_Info={0} \u2013 S\u00E9l\u00E9ctionnez une police pr\u00E9d\u00E9finie et/ou personnalisez-la. +WidgetFontPopOver_PredefinedFonts=Polices pr\u00E9d\u00E9finies +WidgetFontPopOver_Preview=Aper\u00E7u +WidgetFontPopOver_PreviewPrompt=Entrez votre texte pour un aper\u00E7u. +WidgetFontPopOver_SearchPrompt=Rechercher +WidgetFontPopOver_SearchPromptTT=Filtrer les polices par nom +WidgetFontPopOver_SizeCaption=Taille : +WidgetFontPopOver_SizePrompt=Entrez ou s\u00E9l\u00E9ctionnez la taille de la police +WidgetFontPopOver_Sizes=Tailles +WidgetFontPopOver_StyleCaption=Style : +WidgetFontPopOver_StylePrompt=S\u00E9l\u00E9ctionnez le style de la police +WidgetFontPopOver_Styles=Styles +WidgetInfoDialog_Category=Cat\u00E9gorie +WidgetInfoDialog_Count=Nombre +WidgetInfoDialog_Disconnected=D\u00E9connect\u00E9 +WidgetInfoDialog_Info_Fmt=Widget "{0}" ({1}) +WidgetInfoDialog_Name=Nom +WidgetInfoDialog_Path=Chemin du widget +WidgetInfoDialog_Property=Propri\u00E9t\u00E9 +WidgetInfoDialog_State=\u00C9tat +WidgetInfoDialog_WidgetStats=Statistiques des widgets +WidgetInfoDialog_TabMacros=Macros +WidgetInfoDialog_TabProperties=Propri\u00E9t\u00E9s +WidgetInfoDialog_TabPVs=PV +WidgetInfoDialog_Title=Infos du widget +WidgetInfoDialog_Total=Total +WidgetInfoDialog_Value=Valeur +WidgetInfoDialog_WidgetType=Type de widget +Zoom_All=Tout +Zoom_Height=Hauteur +Zoom_Width=Largeur +Reset_Axis_Ranges=R\u00E9initialiser les axes