Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -217,6 +217,7 @@ public class Messages
WidgetProperties_Editable,
WidgetProperties_EmptyColor,
WidgetProperties_Enabled,
WidgetProperties_Stretched,
WidgetProperties_ExtremaVisible,
WidgetProperties_FallbackSymbol,
WidgetProperties_File,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,13 @@ public WidgetProperty<List<RuleInfo>> createProperty(final Widget widget,
public static final WidgetPropertyDescriptor<Boolean> propEnabled =
newBooleanPropertyDescriptor(WidgetPropertyCategory.BEHAVIOR, "enabled", Messages.WidgetProperties_Enabled);

/**
* 'stretched' property
*/
public static final WidgetPropertyDescriptor<Boolean> propStretched =
newBooleanPropertyDescriptor(WidgetPropertyCategory.BEHAVIOR, "stretched", Messages.WidgetProperties_Stretched);


/**
* 'interactive' property: Does widget react to mouse etc. at runtime?
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propConfirmDialogOptions;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propConfirmMessage;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propEnabled;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propStretched;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propOffColor;
Expand Down Expand Up @@ -74,6 +75,7 @@
private volatile WidgetProperty<ConfirmDialog> confirm_dialog;
private volatile WidgetProperty<String> confirm_message;
private volatile WidgetProperty<Boolean> enabled;
private volatile WidgetProperty<Boolean> stretched;
private volatile WidgetProperty<WidgetFont> font;
private volatile WidgetProperty<WidgetColor> foreground;
private volatile WidgetProperty<String> label;
Expand Down Expand Up @@ -121,6 +123,13 @@
return enabled;
}

/**
* @return 'stretched' property.
*/
public WidgetProperty<Boolean> propStretched ( ) {
return stretched;
}

/**
* @return 'font' property.
*/
Expand Down Expand Up @@ -176,6 +185,7 @@
properties.add(foreground = propForegroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.TEXT)));
properties.add(auto_size = propAutoSize.createProperty(this, false));
properties.add(enabled = propEnabled.createProperty(this, true));
properties.add(stretched = propStretched.createProperty(this, false));

Check warning on line 188 in app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/SlideButtonWidget.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Extract the assignment out of this expression.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaDOteuf0CUD1cnWoXqW&open=AaDOteuf0CUD1cnWoXqW&pullRequest=3938
properties.add(confirm_dialog = propConfirmDialogOptions.createProperty(this, ConfirmDialog.NONE));
properties.add(confirm_message = propConfirmMessage.createProperty(this, "Are your sure you want to do this?"));
properties.add(password = propPassword.createProperty(this, ""));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ WidgetProperties_DiscreteSeconds=Discrete Seconds
WidgetProperties_Editable=Editable
WidgetProperties_EmptyColor=Empty Color
WidgetProperties_Enabled=Enabled
WidgetProperties_Stretched=Stretched
WidgetProperties_ExtremaVisible=Extrema Visible
WidgetProperties_DragDisabled=Drag Disabled
WidgetProperties_FallbackSymbol=Fallback Symbol
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ WidgetProperties_DiscreteSeconds=Secondes discrètes
WidgetProperties_Editable=Modifiable
WidgetProperties_EmptyColor=Couleur vide
WidgetProperties_Enabled=Activé
WidgetProperties_Stretched=Etiré
WidgetProperties_ExtremaVisible=Extrêmes visibles
WidgetProperties_DragDisabled=Glisser-déposer désactivé
WidgetProperties_FallbackSymbol=Symbole de secours
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import org.csstudio.display.builder.model.widgets.SlideButtonWidget;
import org.csstudio.display.builder.representation.javafx.JFXUtil;
import org.epics.vtype.VType;
import org.phoebus.ui.javafx.Styles;

import javafx.application.Platform;
import javafx.geometry.Pos;
Expand All @@ -32,6 +31,7 @@
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;


Expand All @@ -56,6 +56,9 @@
private final WidgetPropertyListener<Integer> bitChangedListener = this::bitChanged;
private final WidgetPropertyListener<String> labelChangedListener = this::labelChanged;
private final WidgetPropertyListener<VType> valueChangedListener = this::valueChanged;
private final UntypedWidgetPropertyListener stretchedChangedListener = this::stretchedChanged;

private final AtomicBoolean updating = new AtomicBoolean();

protected volatile int bit = 0;
protected volatile boolean enabled = true;
Expand All @@ -65,18 +68,20 @@

private volatile ToggleSwitch button;
private volatile Label label;
private volatile StackPane buttonContainer;

private volatile Color foreground;
private volatile String state_colors;

private volatile AtomicBoolean updating = new AtomicBoolean();

@Override
public void updateChanges ( ) {

super.updateChanges();

if ( dirty_size.checkAndClear() ) {
final boolean sizeChanged = dirty_size.checkAndClear();
final boolean styleChanged = dirty_style.checkAndClear();

if (sizeChanged) {
if ( model_widget.propAutoSize().getValue() ) {
jfx_node.setPrefSize(-1, -1);
jfx_node.autosize();
Expand All @@ -87,7 +92,7 @@
jfx_node.setPrefSize(model_widget.propWidth().getValue(), model_widget.propHeight().getValue());
}

if ( dirty_style.checkAndClear() ) {
if (styleChanged) {

button.setStyle(state_colors);

Expand Down Expand Up @@ -115,40 +120,88 @@
}
}

if (sizeChanged || styleChanged) {
updateLayout();
}
}

@Override
public HBox createJFXNode ( ) throws Exception {
return updateLayout();
}

button = new ToggleSwitch();
protected HBox updateLayout()

Check failure on line 133 in app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Refactor this method to reduce its Cognitive Complexity from 16 to the 15 allowed.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaDOte2T0CUD1cnWoXqa&open=AaDOte2T0CUD1cnWoXqa&pullRequest=3938
{
final HBox hbox;

if (button == null) {
button = new ToggleSwitch();
if (!toolkit.isEditMode())
button.addEventFilter(MouseEvent.MOUSE_RELEASED, event ->
{
// To avoid setting a new value when context menu is requested,
// slide only if primary button was pressed.
if (event.getButton().equals(MouseButton.PRIMARY)) {
handleSlide();
}
event.consume();
});
}

button.setMinSize(37, 20);
button.setPrefSize(37, 20);
button.setGraphicTextGap(0);
button.setMnemonicParsing(false);

if (! toolkit.isEditMode() )
button.addEventFilter(MouseEvent.MOUSE_RELEASED, event ->
{
// To avoid setting a new value when context menu is requested,
// slide only if primary button was pressed.
if(event.getButton().equals(MouseButton.PRIMARY)) {
handleSlide();
}
event.consume();
});

label = new Label(labelContent);
if (label == null)
label = new Label(labelContent);

label.setMaxWidth(Double.MAX_VALUE);
label.setMnemonicParsing(false);
HBox.setHgrow(label, Priority.ALWAYS);
HBox hbox = new HBox(6, button, label);
hbox.setAlignment(Pos.CENTER_RIGHT);
return hbox;
label.setMaxWidth(Double.MAX_VALUE);


if (jfx_node != null) {
hbox = jfx_node;
hbox.getChildren().clear();
} else {
hbox = new HBox(6);
}

if (model_widget.propStretched().getValue()) {

Check warning on line 170 in app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a primitive boolean expression here.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaDOte2T0CUD1cnWoXqZ&open=AaDOte2T0CUD1cnWoXqZ&pullRequest=3938
if (buttonContainer == null) {
buttonContainer = new StackPane(button);
buttonContainer.setAlignment(Pos.CENTER);
}

double height = hbox.getHeight();
if (height > 20) {
double scale = height / 20.0;
button.setScaleX(scale);
button.setScaleY(scale);

buttonContainer.setPrefWidth(37 * scale);
buttonContainer.setMinWidth(37 * scale);
buttonContainer.setMaxWidth(37 * scale);
}

hbox.getChildren().addAll(buttonContainer, label);
hbox.setAlignment(Pos.CENTER_LEFT);
} else {
buttonContainer = null;

button.setScaleX(1);
button.setScaleY(1);

hbox.getChildren().addAll(button, label);
hbox.setAlignment(Pos.CENTER_RIGHT);

HBox.setHgrow(label, Priority.ALWAYS);
}

return hbox;
}


@Override
protected boolean isFilteringEditModeClicks()
{
Expand All @@ -169,6 +222,7 @@

styleChanged(null, null, null);

model_widget.propStretched().addUntypedPropertyListener(stretchedChangedListener);
model_widget.propEnabled().addUntypedPropertyListener(styleChangedListener);
model_widget.propFont().addUntypedPropertyListener(styleChangedListener);
model_widget.propForegroundColor().addUntypedPropertyListener(styleChangedListener);
Expand All @@ -188,6 +242,7 @@
@Override
protected void unregisterListeners()
{
model_widget.propStretched().removePropertyListener(stretchedChangedListener);
model_widget.propAutoSize().removePropertyListener(sizeChangedListener);
model_widget.propHeight().removePropertyListener(sizeChangedListener);
model_widget.propWidth().removePropertyListener(sizeChangedListener);
Expand All @@ -204,11 +259,14 @@
}

private void bitChanged ( final WidgetProperty<Integer> property, final Integer old_value, final Integer new_value ) {

bit = ( new_value != null ? new_value : model_widget.propBit().getValue() );

stateChanged(bit, value);
}

private void stretchedChanged(final WidgetProperty<?> property, final Object old_value, final Object new_value) {

Check warning on line 266 in app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaDOte2T0CUD1cnWoXqY&open=AaDOte2T0CUD1cnWoXqY&pullRequest=3938

Check warning on line 266 in app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/SlideButtonRepresentation.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this local variable to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=ControlSystemStudio_phoebus&issues=AaDOte2S0CUD1cnWoXqX&open=AaDOte2S0CUD1cnWoXqX&pullRequest=3938
dirty_size.mark();
dirty_style.mark();
toolkit.scheduleUpdate(this);
}

private void confirm ( ) {
Expand All @@ -235,7 +293,7 @@
final String message = model_widget.propConfirmMessage().getValue();
final String password = model_widget.propPassword().getValue();

if ( password.length() > 0 ) {
if (!password.isEmpty()) {
if ( toolkit.showPasswordDialog(model_widget, message, password) == null ) {
return;
}
Expand Down
Loading