- if (info.getFormat() == Format.BOOLEAN) {
- final JCheckBox field = new JCheckBox();
- field.setToolTipText(info.getDescription());
- Boolean state = info.getBoolean();
- if (state == null) {
- info.getDefaultBoolean();
+ // TODO: support arrays
+ Format fmt = info.getFormat();
+ if (info.isArray()) {
+ fmt = Format.STRING;
+ }
+
+ switch (fmt) {
+ case BOOLEAN:
+ addBooleanField(info, nhgap);
+ break;
+ case COLOR:
+ addColorField(info, nhgap);
+ break;
+ case FILE:
+ addBrowseField(info, nhgap, false);
+ break;
+ case DIRECTORY:
+ addBrowseField(info, nhgap, true);
+ break;
+ case COMBO_LIST:
+ addComboboxField(info, nhgap, true);
+ break;
+ case FIXED_LIST:
+ addComboboxField(info, nhgap, false);
+ break;
+ case INT:
+ addIntField(info, nhgap);
+ break;
+ case PASSWORD:
+ addPasswordField(info, nhgap);
+ break;
+ case STRING:
+ case LOCALE: // TODO?
+ default:
+ addStringField(info, nhgap);
+ break;
+ }
+ }
+
+ private void reload(Object value) {
+ // We consider "" and NULL to be equals
+ if ("".equals(value)) {
+ value = null;
+ }
+ orig = value;
+ }
+
+ private boolean isChanged(Object newValue) {
+ // We consider "" and NULL to be equals
+ if ("".equals(newValue)) {
+ newValue = null;
+ }
+
+ if (newValue == null) {
+ return orig != null;
+ }
+
+ return !newValue.equals(orig);
+ }
+
+ private void addStringField(final MetaInfo<E> info, int nhgap) {
+ final JTextField field = new JTextField();
+ field.setToolTipText(info.getDescription());
+ String value = info.getString(false);
+ reload(value);
+ field.setText(value);
+
+ info.addReloadedListener(new Runnable() {
+ @Override
+ public void run() {
+ String value = info.getString(false);
+ reload(value);
+ field.setText(value);