@@ -26,6 +26,7 @@ public class AddUiFieldHandler implements Handler<AddUiField> {
2626 private final Map <String , JButton > aliasToApplySettingsButton = new HashMap <>();
2727
2828 private final Map <String , PendingParameterChanges > parameterNameToPendingChanges = new ConcurrentHashMap <>();
29+ private int row = 0 ;
2930
3031 public AddUiFieldHandler (Map <String , State > aliasToState , EventLoop eventLoop ) {
3132 this .aliasToState = aliasToState ;
@@ -35,13 +36,17 @@ public AddUiFieldHandler(Map<String, State> aliasToState, EventLoop eventLoop) {
3536 @ Override
3637 public void handle (AddUiField event ) {
3738 SwingUtilities .invokeLater (() -> {
38- var state = aliasToState .get (event .alias );
39+ State state = aliasToState .get (event .alias );
3940 initSettingsIfNotInited (event .alias , state );
40- var settings = state .settings ;
41+ RpcSettings settings = state .settings ;
42+ if (event .fieldType == AddUiField .FieldType .LABEL ) {
43+ addLabelField (state , event );
44+ return ;
45+ }
4146 try {
4247 // TODO: check that parameter is the same
4348 if (!settings .containsParameter (event .name )) {
44- state . settings .addParameter (event .name , new RpcSettings .SettingsParameter (event .name , event .fieldType , event .defaultValue ));
49+ settings .addParameter (event .name , new RpcSettings .SettingsParameter (event .name , event .fieldType , event .defaultValue ));
4550 }
4651 } catch (Exception ex ) {
4752 RpcLogger .warn ("Failed to add UI parameter" , ex );
@@ -90,15 +95,15 @@ private void addColorField(State state, AddUiField event) {
9095 )
9196 );
9297
93- var colorLabel = new JLabel (parameterName );
98+ var colorLabel = new JLabel ("<html>" + parameterName + "</html>" );
9499 state .colorsConfig .add (colorLabel , getConstraintsForColors (0 , getNextRowForComponentInColorsPanel (state )));
95100 state .colorsConfig .add (colorItem , getConstraintsForColors (1 , getNextRowForComponentInColorsPanel (state )));
96101
97102 }
98103
99104 private void addBooleanField (State state , AddUiField event ) {
100105 var checkBox = new JCheckBox ("" );
101- var label = new JLabel (event .name );
106+ var label = new JLabel ("<html>" + event .name + "</html>" );
102107 var panel = state .settingsConfig ;
103108 panel .add (label , getConstraints (0 , getNextRowForComponentInSettingPanel (state )));
104109 panel .add (checkBox , getConstraints (1 , getNextRowForComponentInSettingPanel (state )));
@@ -115,9 +120,21 @@ private void addBooleanField(State state, AddUiField event) {
115120 checkBox .addChangeListener (e -> setNewSettingsValue (event .alias , state , event .name , event .fieldType , checkBox .isSelected (), false ));
116121 }
117122
123+ private void addLabelField (State state , AddUiField event ) {
124+ var label = new JLabel ("<html>" + event .name + "</html>" );
125+ var panel = state .settingsConfig ;
126+ var constraints = new GridBagConstraints ();
127+ constraints .gridwidth = GridBagConstraints .REMAINDER ; // This is the last component in its row
128+ constraints .fill = GridBagConstraints .HORIZONTAL ;
129+ constraints .gridy = getNextRowForComponentInSettingPanel (state );
130+ constraints .insets = new Insets (5 , 5 , 5 , 5 );
131+ panel .add (label , constraints );
132+ row ++;
133+ }
134+
118135 private void addStringField (State state , AddUiField event ) {
119136 var textField = new JTextField ();
120- var label = new JLabel (event .name );
137+ var label = new JLabel ("<html>" + event .name + "</html>" );
121138 var text = (String ) event .defaultValue ;
122139 if (state .settings .containsParameter (event .name )) {
123140 text = state .settings .getParameter (event .name ).getValue (String .class );
@@ -145,7 +162,7 @@ private void addNumberField(State state, AddUiField event) {
145162 BigDecimal defaultValue = (BigDecimal ) (parameter == null ? event .defaultValue : parameter .getValue (BigDecimal .class ));
146163 setNewSettingsValue (event .alias , state , settingParameterName , event .fieldType , defaultValue , true );
147164
148- var label = new JLabel (settingParameterName );
165+ var label = new JLabel ("<html>" + settingParameterName + "</html>" );
149166 var sModel = new SpinnerNumberModel (
150167 defaultValue .doubleValue (), event .minimum .doubleValue (), event .maximum .doubleValue (), event .step .doubleValue ()
151168 );
@@ -238,11 +255,11 @@ private static void setDefaultConstraints(GridBagConstraints gbConst, int x, int
238255 // TODO: this is trick by which number of lines is defined dynamically, try to find more consistent solution, Maybe move UI to external class
239256 // each line has exactly two components, label and components through which configuration can be made
240257 private int getNextRowForComponentInSettingPanel (State state ) {
241- return (state .settingsConfig .getComponentCount () - 1 ) / 2 ;
258+ return (state .settingsConfig .getComponentCount () - 1 - row ) / 2 + row ;
242259 }
243260
244261 private int getNextRowForComponentInColorsPanel (State state ) {
245- return state .colorsConfig .getComponentCount () / 2 ;
262+ return ( state .colorsConfig .getComponentCount () - row ) / 2 + row ;
246263 }
247264
248265
0 commit comments