2424import javafx .beans .value .ChangeListener ;
2525import javafx .event .ActionEvent ;
2626import javafx .event .EventHandler ;
27+ import javafx .geometry .Pos ;
2728import javafx .scene .control .Button ;
2829import javafx .scene .control .ButtonType ;
2930import javafx .scene .control .CheckBox ;
3435import javafx .scene .control .Spinner ;
3536import javafx .scene .control .TextField ;
3637import javafx .scene .control .Tooltip ;
38+ import javafx .scene .layout .ColumnConstraints ;
3739import javafx .scene .layout .GridPane ;
3840import javafx .scene .layout .HBox ;
3941import javafx .scene .layout .Priority ;
@@ -69,6 +71,13 @@ public ItemConfigDialog(final AlarmClient model, final AlarmTreeItem<?> item)
6971 layout .setHgap (5 );
7072 layout .setVgap (5 );
7173
74+ // First fixed-size column for labels
75+ // Second column grows
76+ final ColumnConstraints col1 = new ColumnConstraints (190 );
77+ final ColumnConstraints col2 = new ColumnConstraints ();
78+ col2 .setHgrow (Priority .ALWAYS );
79+ layout .getColumnConstraints ().setAll (col1 , col2 );
80+
7281 int row = 0 ;
7382
7483 // Show item path, allow copying it out.
@@ -90,9 +99,10 @@ public ItemConfigDialog(final AlarmClient model, final AlarmTreeItem<?> item)
9099
91100 layout .add (new Label ("Behavior:" ), 0 , row );
92101 enabled = new CheckBox ("Enabled" );
93- enabled .setTooltip (new Tooltip ("Enable alarms? See also filter expression " ));
102+ enabled .setTooltip (new Tooltip ("Enable alarms? See also 'Enabling Filter' " ));
94103 enabled .setSelected (leaf .isEnabled ());
95- enabled .setOnAction ((event ) -> {
104+ enabled .setOnAction ((event ) ->
105+ {
96106 relative_date .getSelectionModel ().clearSelection ();
97107 relative_date .setValue (null );
98108 enabled_date_picker .getEditor ().clear ();
@@ -112,34 +122,41 @@ public ItemConfigDialog(final AlarmClient model, final AlarmTreeItem<?> item)
112122
113123 layout .add (new Label ("Disable until:" ), 0 , row );
114124 enabled_date_picker = new DateTimePicker ();
125+ enabled_date_picker .setTooltip (new Tooltip ("Select a date until which the alarm should be disabled" ));
115126 enabled_date_picker .setDateTimeValue (leaf .getEnabledDate ());
127+ enabled_date_picker .setPrefSize (280 , 25 );
128+
116129 relative_date = new ComboBox <String >();
130+ relative_date .setTooltip (new Tooltip ("Select a predefined duration for disabling the alarm" ));
117131 relative_date .getItems ().addAll (AlarmSystem .shelving_options );
132+ relative_date .setPrefSize (200 , 25 );
118133
119- final EventHandler <ActionEvent > relative_event_handler = new EventHandler <>() {
120- @ Override public void handle (ActionEvent e ) {
121- enabled .setSelected (false );
122- enabled_date_picker .getEditor ().clear ();
123- }
134+ final EventHandler <ActionEvent > relative_event_handler = (ActionEvent e ) ->
135+ {
136+ enabled .setSelected (false );
137+ enabled_date_picker .getEditor ().clear ();
124138 };
125139
126140 relative_date .setOnAction (relative_event_handler );
127141
128142 // setOnAction for relative date must be set to null as to not trigger event when setting value
129- enabled_date_picker .setOnAction (new EventHandler < ActionEvent >() {
130- @ Override public void handle ( ActionEvent e ) {
131- if (enabled_date_picker .getDateTimeValue () != null ) {
132- relative_date . setOnAction ( null );
133- enabled . setSelected ( false );
134- enabled_date_picker . getEditor (). commitValue ( );
135- relative_date . getSelectionModel ().clearSelection ();
136- relative_date .setValue ( null );
137- relative_date .setOnAction ( relative_event_handler );
138- } ;
139- }
143+ enabled_date_picker .setOnAction (( ActionEvent e ) ->
144+ {
145+ if (enabled_date_picker .getDateTimeValue () != null )
146+ {
147+ relative_date . setOnAction ( null );
148+ enabled . setSelected ( false );
149+ enabled_date_picker . getEditor ().commitValue ();
150+ relative_date .getSelectionModel (). clearSelection ( );
151+ relative_date .setValue ( null );
152+ relative_date . setOnAction ( relative_event_handler ) ;
153+ };
140154 });
141155
142- layout .add (new HBox (10 , enabled_date_picker , relative_date ), 1 , row ++);
156+ final HBox until_box = new HBox (10 , enabled_date_picker , relative_date );
157+ until_box .setAlignment (Pos .CENTER );
158+ HBox .setHgrow (relative_date , Priority .ALWAYS );
159+ layout .add (until_box , 1 , row ++);
143160
144161 layout .add (new Label ("Alarm Delay [seconds]:" ), 0 , row );
145162 delay = new Spinner <>(0 , Integer .MAX_VALUE , leaf .getDelay ());
@@ -170,7 +187,7 @@ public ItemConfigDialog(final AlarmClient model, final AlarmTreeItem<?> item)
170187 count .setPrefWidth (80 );
171188 layout .add (count , 1 , row ++);
172189
173- layout .add (new Label ("Enabling Filter" ), 0 , row );
190+ layout .add (new Label ("Enabling Filter: " ), 0 , row );
174191 filter = new TextField (leaf .getFilter ());
175192 filter .setTooltip (new Tooltip ("Optional expression for enabling the alarm" ));
176193 layout .add (filter , 1 , row ++);
@@ -201,28 +218,25 @@ public ItemConfigDialog(final AlarmClient model, final AlarmTreeItem<?> item)
201218 // 'dummy' is used for that.
202219
203220 // Guidance:
204- layout .add (new Label ("Guidance:" ), 0 , row );
205- final Label dummy = new Label ("" );
206- GridPane .setHgrow (dummy , Priority .ALWAYS );
207- layout .add (dummy , 1 , row ++);
221+ layout .add (new Label ("Guidance:" ), 0 , row ++, 2 , 1 );
208222 guidance = new TitleDetailTable (item .getGuidance ());
209223 guidance .setPrefHeight (100 );
210224 layout .add (guidance , 0 , row ++, 2 , 1 );
211225
212226 // Displays:
213- layout .add (new Label ("Displays:" ), 0 , row ++);
227+ layout .add (new Label ("Displays:" ), 0 , row ++, 2 , 1 );
214228 displays = new TitleDetailTable (item .getDisplays ());
215229 displays .setPrefHeight (100 );
216230 layout .add (displays , 0 , row ++, 2 , 1 );
217231
218232 // Commands:
219- layout .add (new Label ("Commands:" ), 0 , row ++);
233+ layout .add (new Label ("Commands:" ), 0 , row ++, 2 , 1 );
220234 commands = new TitleDetailTable (item .getCommands ());
221235 commands .setPrefHeight (100 );
222236 layout .add (commands , 0 , row ++, 2 , 1 );
223237
224238 // Automated Actions:
225- layout .add (new Label ("Automated Actions:" ), 0 , row ++);
239+ layout .add (new Label ("Automated Actions:" ), 0 , row ++, 2 , 1 );
226240 actions = new TitleDetailDelayTable (item .getActions ());
227241 actions .setPrefHeight (100 );
228242 layout .add (actions , 0 , row ++, 2 , 1 );
@@ -231,9 +245,9 @@ public ItemConfigDialog(final AlarmClient model, final AlarmTreeItem<?> item)
231245 final ScrollPane scroll = new ScrollPane (layout );
232246
233247 // Scroll pane stops the content from resizing,
234- // so tell content to use the widths of the scroll pane,
235- // minus some border , and suggest minimum width
236- scroll .widthProperty ().addListener ((p , old , width ) -> layout .setPrefWidth (Math .max (width .doubleValue ()-25 , 450 )));
248+ // so tell content to use the widths of the scroll pane
249+ // minus 40 to provide space for the scroll bar , and suggest minimum width
250+ scroll .widthProperty ().addListener ((p , old , width ) -> layout .setPrefWidth (Math .max (width .doubleValue ()-40 , 450 )));
237251
238252 getDialogPane ().setContent (scroll );
239253 setResizable (true );
0 commit comments