1212import org .csstudio .display .builder .model .DirtyFlag ;
1313import org .csstudio .display .builder .model .UntypedWidgetPropertyListener ;
1414import org .csstudio .display .builder .model .WidgetProperty ;
15+ import org .csstudio .display .builder .model .WidgetPropertyListener ;
1516import org .csstudio .display .builder .model .util .VTypeUtil ;
1617import org .csstudio .display .builder .model .widgets .TankWidget ;
1718import org .csstudio .display .builder .representation .Preferences ;
2122import org .epics .vtype .VType ;
2223
2324import javafx .scene .layout .Pane ;
25+ import javafx .scene .transform .Rotate ;
26+ import javafx .scene .transform .Translate ;
2427
2528/** Creates JavaFX item for model widget
2629 * @author Kay Kasemir
@@ -30,6 +33,7 @@ public class TankRepresentation extends RegionBaseRepresentation<Pane, TankWidge
3033 private final DirtyFlag dirty_look = new DirtyFlag ();
3134 private final UntypedWidgetPropertyListener lookListener = this ::lookChanged ;
3235 private final UntypedWidgetPropertyListener valueListener = this ::valueChanged ;
36+ private final WidgetPropertyListener <Boolean > orientationChangedListener = this ::orientationChanged ;
3337
3438 private volatile RTTank tank ;
3539
@@ -59,6 +63,7 @@ protected void registerListeners()
5963 model_widget .propMaximum ().addUntypedPropertyListener (valueListener );
6064 model_widget .propLogScale ().addUntypedPropertyListener (valueListener );
6165 model_widget .runtimePropValue ().addUntypedPropertyListener (valueListener );
66+ model_widget .propHorizontal ().addPropertyListener (orientationChangedListener );
6267 valueChanged (null , null , null );
6368 }
6469
@@ -79,6 +84,7 @@ protected void unregisterListeners()
7984 model_widget .propMaximum ().removePropertyListener (valueListener );
8085 model_widget .propLogScale ().removePropertyListener (valueListener );
8186 model_widget .runtimePropValue ().removePropertyListener (valueListener );
87+ model_widget .propHorizontal ().removePropertyListener (orientationChangedListener );
8288 super .unregisterListeners ();
8389 }
8490
@@ -117,6 +123,17 @@ private void valueChanged(final WidgetProperty<?> property, final Object old_val
117123 tank .setLogScale (model_widget .propLogScale ().getValue ());
118124 }
119125
126+ private void orientationChanged (final WidgetProperty <Boolean > prop , final Boolean old , final Boolean horizontal )
127+ {
128+ if (toolkit .isEditMode ()) {
129+ final int w = model_widget .propWidth ().getValue ();
130+ final int h = model_widget .propHeight ().getValue ();
131+ model_widget .propWidth ().setValue (h );
132+ model_widget .propHeight ().setValue (w );
133+ }
134+ lookChanged (prop , old , horizontal );
135+ }
136+
120137 @ Override
121138 public void updateChanges ()
122139 {
@@ -125,9 +142,23 @@ public void updateChanges()
125142 {
126143 double width = model_widget .propWidth ().getValue ();
127144 double height = model_widget .propHeight ().getValue ();
128- jfx_node .setPrefSize (width , height );
129- tank .setWidth (width );
130- tank .setHeight (height );
145+ boolean horizontal = model_widget .propHorizontal ().getValue ();
146+ if (horizontal )
147+ {
148+ jfx_node .getTransforms ().setAll (
149+ new Translate (width , 0 ),
150+ new Rotate (90 , 0 , 0 ));
151+ jfx_node .setPrefSize (height , width );
152+ tank .setWidth (height );
153+ tank .setHeight (width );
154+ }
155+ else
156+ {
157+ jfx_node .getTransforms ().clear ();
158+ jfx_node .setPrefSize (width , height );
159+ tank .setWidth (width );
160+ tank .setHeight (height );
161+ }
131162 tank .setFont (JFXUtil .convert (model_widget .propFont ().getValue ()));
132163 tank .setBackground (JFXUtil .convert (model_widget .propBackground ().getValue ()));
133164 tank .setForeground (JFXUtil .convert (model_widget .propForeground ().getValue ()));
0 commit comments