Skip to content

Commit f6ace83

Browse files
authored
Merge pull request #2728 from Mathis-Hu/master
Add horizontal & vertical alignment properties #2727
2 parents a811e50 + 112e921 commit f6ace83

File tree

6 files changed

+97
-1
lines changed

6 files changed

+97
-1
lines changed

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ActionButtonWidget.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propEnabled;
1414
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
1515
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
16+
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontalAlignment;
17+
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propVerticalAlignment;
1618
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propPassword;
1719
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propRotationStep;
1820
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propText;
@@ -36,7 +38,9 @@
3638
import org.csstudio.display.builder.model.persist.WidgetFontService;
3739
import org.csstudio.display.builder.model.persist.XMLTags;
3840
import org.csstudio.display.builder.model.properties.CommonWidgetProperties;
41+
import org.csstudio.display.builder.model.properties.HorizontalAlignment;
3942
import org.csstudio.display.builder.model.properties.RotationStep;
43+
import org.csstudio.display.builder.model.properties.VerticalAlignment;
4044
import org.csstudio.display.builder.model.properties.WidgetColor;
4145
import org.csstudio.display.builder.model.properties.WidgetFont;
4246
import org.phoebus.framework.persistence.XMLUtil;
@@ -226,6 +230,8 @@ public WidgetConfigurator getConfigurator(final Version persisted_version)
226230
private volatile WidgetProperty<WidgetColor> foreground;
227231
private volatile WidgetProperty<WidgetColor> background;
228232
private volatile WidgetProperty<Boolean> transparent;
233+
private volatile WidgetProperty<HorizontalAlignment> horizontal_alignment;
234+
private volatile WidgetProperty<VerticalAlignment> vertical_alignment;
229235
private volatile WidgetProperty<RotationStep> rotation_step;
230236
private volatile WidgetProperty<Boolean> pv_writable;
231237
private volatile WidgetProperty<Boolean> confirm_dialog;
@@ -257,6 +263,8 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
257263
properties.add(foreground = propForegroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.TEXT)));
258264
properties.add(background = propBackgroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.BUTTON_BACKGROUND)));
259265
properties.add(transparent = propTransparent.createProperty(this, false));
266+
properties.add(horizontal_alignment = propHorizontalAlignment.createProperty(this, HorizontalAlignment.CENTER));
267+
properties.add(vertical_alignment = propVerticalAlignment.createProperty(this, VerticalAlignment.MIDDLE));
260268
properties.add(rotation_step = propRotationStep.createProperty(this, RotationStep.NONE));
261269
properties.add(enabled = propEnabled.createProperty(this, true));
262270
properties.add(pv_writable = runtimePropPVWritable.createProperty(this, true));
@@ -302,6 +310,18 @@ public WidgetProperty<Boolean> propTransparent()
302310
{
303311
return transparent;
304312
}
313+
314+
/** @return 'horizontal_alignment' property */
315+
public WidgetProperty<HorizontalAlignment> propHorizontalAlignment()
316+
{
317+
return horizontal_alignment;
318+
}
319+
320+
/** @return 'vertical_alignment' property */
321+
public WidgetProperty<VerticalAlignment> propVerticalAlignment()
322+
{
323+
return vertical_alignment;
324+
}
305325

306326
/** @return 'rotation_step' property */
307327
public WidgetProperty<RotationStep> propRotationStep()

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/BoolButtonWidget.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propEnabled;
1717
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
1818
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
19+
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontalAlignment;
20+
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propVerticalAlignment;
1921
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propLabelsFromPV;
2022
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propOffColor;
2123
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propOffLabel;
@@ -42,6 +44,8 @@
4244
import org.csstudio.display.builder.model.persist.WidgetFontService;
4345
import org.csstudio.display.builder.model.properties.ConfirmDialog;
4446
import org.csstudio.display.builder.model.properties.EnumWidgetProperty;
47+
import org.csstudio.display.builder.model.properties.HorizontalAlignment;
48+
import org.csstudio.display.builder.model.properties.VerticalAlignment;
4549
import org.csstudio.display.builder.model.properties.WidgetColor;
4650
import org.csstudio.display.builder.model.properties.WidgetFont;
4751
import org.phoebus.framework.persistence.XMLUtil;
@@ -170,6 +174,8 @@ public EnumWidgetProperty<Mode> createProperty(final Widget widget, final Mode d
170174
private volatile WidgetProperty<WidgetFont> font;
171175
private volatile WidgetProperty<WidgetColor> background;
172176
private volatile WidgetProperty<WidgetColor> foreground;
177+
private volatile WidgetProperty<HorizontalAlignment> horizontal_alignment;
178+
private volatile WidgetProperty<VerticalAlignment> vertical_alignment;
173179
private volatile WidgetProperty<Boolean> labels_from_pv;
174180
private volatile WidgetProperty<Boolean> enabled;
175181
private volatile WidgetProperty<Mode> mode;
@@ -205,6 +211,8 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
205211
properties.add(font = propFont.createProperty(this, WidgetFontService.get(NamedWidgetFonts.DEFAULT)));
206212
properties.add(foreground = propForegroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.TEXT)));
207213
properties.add(background = propBackgroundColor.createProperty(this, WidgetColorService.getColor(NamedWidgetColors.BUTTON_BACKGROUND)));
214+
properties.add(horizontal_alignment = propHorizontalAlignment.createProperty(this, HorizontalAlignment.CENTER));
215+
properties.add(vertical_alignment = propVerticalAlignment.createProperty(this, VerticalAlignment.MIDDLE));
208216
properties.add(labels_from_pv = propLabelsFromPV.createProperty(this, false));
209217
properties.add(enabled = propEnabled.createProperty(this, true));
210218
properties.add(mode = propMode.createProperty(this, Mode.TOGGLE));
@@ -278,6 +286,18 @@ public WidgetProperty<WidgetColor> propForegroundColor()
278286
{
279287
return foreground;
280288
}
289+
290+
/** @return 'horizontal_alignment' property */
291+
public WidgetProperty<HorizontalAlignment> propHorizontalAlignment()
292+
{
293+
return horizontal_alignment;
294+
}
295+
296+
/** @return 'vertical_alignment' property */
297+
public WidgetProperty<VerticalAlignment> propVerticalAlignment()
298+
{
299+
return vertical_alignment;
300+
}
281301

282302
/** @return 'labels_from_pv' property */
283303
public WidgetProperty<Boolean> propLabelsFromPV()

app/display/model/src/main/java/org/csstudio/display/builder/model/widgets/ChoiceButtonWidget.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propFont;
1515
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propForegroundColor;
1616
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontal;
17+
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propHorizontalAlignment;
18+
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propVerticalAlignment;
1719
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propItemsFromPV;
1820
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propPassword;
1921
import static org.csstudio.display.builder.model.properties.CommonWidgetProperties.propSelectedColor;
@@ -34,6 +36,8 @@
3436
import org.csstudio.display.builder.model.persist.WidgetColorService;
3537
import org.csstudio.display.builder.model.persist.WidgetFontService;
3638
import org.csstudio.display.builder.model.properties.CommonWidgetProperties;
39+
import org.csstudio.display.builder.model.properties.HorizontalAlignment;
40+
import org.csstudio.display.builder.model.properties.VerticalAlignment;
3741
import org.csstudio.display.builder.model.properties.WidgetColor;
3842
import org.csstudio.display.builder.model.properties.WidgetFont;
3943

@@ -66,6 +70,8 @@ public Widget createWidget()
6670
private volatile WidgetProperty<WidgetColor> selected;
6771
private volatile ArrayWidgetProperty<WidgetProperty<String>> items;
6872
private volatile WidgetProperty<Boolean> items_from_pv;
73+
private volatile WidgetProperty<HorizontalAlignment> horizontal_alignment;
74+
private volatile WidgetProperty<VerticalAlignment> vertical_alignment;
6975
private volatile WidgetProperty<Boolean> horizontal;
7076
private volatile WidgetProperty<Boolean> enabled;
7177
private volatile WidgetProperty<Boolean> confirm_dialog;
@@ -97,6 +103,8 @@ protected void defineProperties(final List<WidgetProperty<?>> properties)
97103
propItem.createProperty(this, Messages.ComboWidget_Item + " 2")));
98104
properties.add(items);
99105
properties.add(items_from_pv = propItemsFromPV.createProperty(this, true));
106+
properties.add(horizontal_alignment = propHorizontalAlignment.createProperty(this, HorizontalAlignment.CENTER));
107+
properties.add(vertical_alignment = propVerticalAlignment.createProperty(this, VerticalAlignment.MIDDLE));
100108
properties.add(horizontal = propHorizontal.createProperty(this, true));
101109
properties.add(enabled = propEnabled.createProperty(this, true));
102110
properties.add(confirm_dialog = propConfirmDialog.createProperty(this, false));
@@ -139,6 +147,18 @@ public WidgetProperty< List<WidgetProperty<String>> > propItems()
139147
{
140148
return items;
141149
}
150+
151+
/** @return 'horizontal_alignment' property */
152+
public WidgetProperty<HorizontalAlignment> propHorizontalAlignment()
153+
{
154+
return horizontal_alignment;
155+
}
156+
157+
/** @return 'vertical_alignment' property */
158+
public WidgetProperty<VerticalAlignment> propVerticalAlignment()
159+
{
160+
return vertical_alignment;
161+
}
142162

143163
/** @return 'horizontal' property */
144164
public WidgetProperty<Boolean> propHorizontal()

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/ActionButtonRepresentation.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
import javafx.application.Platform;
3939
import javafx.geometry.Dimension2D;
40+
import javafx.geometry.Pos;
4041
import javafx.scene.Cursor;
4142
import javafx.scene.control.Button;
4243
import javafx.scene.control.ButtonBase;
@@ -50,6 +51,7 @@
5051
import javafx.scene.layout.CornerRadii;
5152
import javafx.scene.layout.Pane;
5253
import javafx.scene.paint.Color;
54+
import javafx.scene.text.TextAlignment;
5355
import javafx.scene.transform.Rotate;
5456
import javafx.scene.transform.Translate;
5557

@@ -105,6 +107,7 @@ public class ActionButtonRepresentation extends RegionBaseRepresentation<Pane, A
105107
private final UntypedWidgetPropertyListener buttonChangedListener = this::buttonChanged;
106108
private final UntypedWidgetPropertyListener representationChangedListener = this::representationChanged;
107109
private final WidgetPropertyListener<Boolean> enablementChangedListener = this::enablementChanged;
110+
private volatile Pos pos;
108111

109112
@Override
110113
protected boolean isFilteringEditModeClicks()
@@ -348,7 +351,8 @@ protected void registerListeners()
348351
{
349352
updateColors();
350353
super.registerListeners();
351-
354+
pos = JFXUtil.computePos(model_widget.propHorizontalAlignment().getValue(),
355+
model_widget.propVerticalAlignment().getValue());
352356
model_widget.propWidth().addUntypedPropertyListener(representationChangedListener);
353357
model_widget.propHeight().addUntypedPropertyListener(representationChangedListener);
354358
model_widget.propText().addUntypedPropertyListener(representationChangedListener);
@@ -361,6 +365,8 @@ protected void registerListeners()
361365
model_widget.propBackgroundColor().addUntypedPropertyListener(buttonChangedListener);
362366
model_widget.propForegroundColor().addUntypedPropertyListener(buttonChangedListener);
363367
model_widget.propTransparent().addUntypedPropertyListener(buttonChangedListener);
368+
model_widget.propHorizontalAlignment().addUntypedPropertyListener(buttonChangedListener);
369+
model_widget.propVerticalAlignment().addUntypedPropertyListener(buttonChangedListener);
364370
model_widget.propActions().addUntypedPropertyListener(buttonChangedListener);
365371

366372
if (! toolkit.isEditMode() && isLabelValue())
@@ -384,6 +390,8 @@ protected void unregisterListeners()
384390
model_widget.propBackgroundColor().removePropertyListener(buttonChangedListener);
385391
model_widget.propForegroundColor().removePropertyListener(buttonChangedListener);
386392
model_widget.propTransparent().removePropertyListener(buttonChangedListener);
393+
model_widget.propHorizontalAlignment().removePropertyListener(buttonChangedListener);
394+
model_widget.propVerticalAlignment().removePropertyListener(buttonChangedListener);
387395
model_widget.propActions().removePropertyListener(buttonChangedListener);
388396
super.unregisterListeners();
389397
}
@@ -399,6 +407,8 @@ protected void attachTooltip()
399407
/** Complete button needs to be updated */
400408
private void buttonChanged(final WidgetProperty<?> property, final Object old_value, final Object new_value)
401409
{
410+
pos = JFXUtil.computePos(model_widget.propHorizontalAlignment().getValue(),
411+
model_widget.propVerticalAlignment().getValue());
402412
dirty_actionls.mark();
403413
representationChanged(property, old_value, new_value);
404414
}
@@ -496,6 +506,8 @@ public void updateChanges()
496506
was_ever_transformed = true;
497507
break;
498508
}
509+
base.setAlignment(pos);
510+
base.setTextAlignment(TextAlignment.values()[model_widget.propHorizontalAlignment().getValue().ordinal()]);
499511
}
500512
if (dirty_enablement.checkAndClear())
501513
{

app/display/representation-javafx/src/main/java/org/csstudio/display/builder/representation/javafx/widgets/BoolButtonRepresentation.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import org.phoebus.ui.javafx.Styles;
3333

3434
import javafx.application.Platform;
35+
import javafx.geometry.Pos;
3536
import javafx.scene.control.Button;
3637
import javafx.scene.control.ButtonBase;
3738
import javafx.scene.image.Image;
@@ -43,6 +44,7 @@
4344
import javafx.scene.paint.Paint;
4445
import javafx.scene.paint.Stop;
4546
import javafx.scene.shape.Ellipse;
47+
import javafx.scene.text.TextAlignment;
4648

4749
/** Creates JavaFX item for model widget
4850
* @author Megan Grodowitz
@@ -89,6 +91,7 @@ public class BoolButtonRepresentation extends RegionBaseRepresentation<Pane, Boo
8991
private final WidgetPropertyListener<VType> valueChangedListener = this::valueChanged;
9092
private final WidgetPropertyListener<Mode> modeChangeListener = this::modeChanged;
9193
private final WidgetPropertyListener<ConfirmDialog> confirmDialogWidgetPropertyListener = this::confirmationDialogChanged;
94+
private volatile Pos pos;
9295

9396
@Override
9497
public Pane createJFXNode() throws Exception
@@ -185,6 +188,8 @@ protected void registerListeners()
185188
{
186189
super.registerListeners();
187190
representationChanged(null,null,null);
191+
pos = JFXUtil.computePos(model_widget.propHorizontalAlignment().getValue(),
192+
model_widget.propVerticalAlignment().getValue());
188193
model_widget.propWidth().addUntypedPropertyListener(representationChangedListener);
189194
model_widget.propHeight().addUntypedPropertyListener(representationChangedListener);
190195
model_widget.propOffLabel().addUntypedPropertyListener(representationChangedListener);
@@ -197,6 +202,8 @@ protected void registerListeners()
197202
model_widget.propFont().addUntypedPropertyListener(representationChangedListener);
198203
model_widget.propForegroundColor().addUntypedPropertyListener(representationChangedListener);
199204
model_widget.propBackgroundColor().addUntypedPropertyListener(representationChangedListener);
205+
model_widget.propHorizontalAlignment().addUntypedPropertyListener(representationChangedListener);
206+
model_widget.propVerticalAlignment().addUntypedPropertyListener(representationChangedListener);
200207
model_widget.propEnabled().addPropertyListener(enablementChangedListener);
201208
model_widget.runtimePropPVWritable().addPropertyListener(enablementChangedListener);
202209
model_widget.propBit().addPropertyListener(bitChangedListener);
@@ -226,6 +233,8 @@ protected void unregisterListeners()
226233
model_widget.propFont().removePropertyListener(representationChangedListener);
227234
model_widget.propForegroundColor().removePropertyListener(representationChangedListener);
228235
model_widget.propBackgroundColor().removePropertyListener(representationChangedListener);
236+
model_widget.propHorizontalAlignment().removePropertyListener(representationChangedListener);
237+
model_widget.propVerticalAlignment().removePropertyListener(representationChangedListener);
229238
model_widget.propEnabled().removePropertyListener(enablementChangedListener);
230239
model_widget.runtimePropPVWritable().removePropertyListener(enablementChangedListener);
231240
model_widget.propBit().removePropertyListener(bitChangedListener);
@@ -338,6 +347,9 @@ private void representationChanged(final WidgetProperty<?> property, final Objec
338347
value_label = state_labels[on_state];
339348

340349
computeBackground();
350+
351+
pos = JFXUtil.computePos(model_widget.propHorizontalAlignment().getValue(),
352+
model_widget.propVerticalAlignment().getValue());
341353

342354
dirty_representation.mark();
343355
toolkit.scheduleUpdate(this);
@@ -418,6 +430,8 @@ public void updateChanges()
418430
else
419431
button.setGraphic(image);
420432
}
433+
button.setAlignment(pos);
434+
button.setTextAlignment(TextAlignment.values()[model_widget.propHorizontalAlignment().getValue().ordinal()]);
421435
}
422436

423437
@Override

0 commit comments

Comments
 (0)