Skip to content

Commit a4e8f1c

Browse files
romanpbmrok-povsic
authored andcommitted
Add possibility to create labels in Bookmap add-on configuration
1 parent 2a0f0c9 commit a4e8f1c

3 files changed

Lines changed: 32 additions & 11 deletions

File tree

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/data/income/AddUiField.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public enum FieldType {
3737
NUMBER,
3838
COLOR,
3939
BOOLEAN,
40-
STRING;
40+
STRING,
41+
LABEL
4142
}
4243
}

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/data/income/converters/AddFieldEventConverter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public AddUiField convert(String entity) {
3838
reloadOnChange
3939
);
4040
}
41-
return new AddUiField(alias, fieldType, name, defaultValue,reloadOnChange);
41+
return new AddUiField(alias, fieldType, name, defaultValue, reloadOnChange);
4242
}
4343

4444
private Object convertDefaultFieldToObject(String defaultValToken, AddUiField.FieldType fieldType) {
@@ -56,6 +56,9 @@ private Object convertDefaultFieldToObject(String defaultValToken, AddUiField.Fi
5656
var colorTokens = defaultValToken.split(",");
5757
return new Color(Integer.parseInt(colorTokens[0]), Integer.parseInt(colorTokens[1]), Integer.parseInt(colorTokens[2]));
5858
}
59+
case LABEL -> {
60+
return null;
61+
}
5962
}
6063
throw new RuntimeException("Unknown type received");
6164
}

serverside-rpc/src/main/java/com/bookmap/api/rpc/server/handlers/AddUiFieldHandler.java

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)