support EditorTextField

This commit is contained in:
Dmitry Avdeev
2018-10-05 17:27:58 +03:00
parent fc6c9f805b
commit 5df510351a
2 changed files with 42 additions and 1 deletions
@@ -18,6 +18,7 @@ package com.intellij.openapi.options.binding;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Pair;
import com.intellij.ui.EditorTextField;
import javax.swing.*;
import java.lang.reflect.Field;
@@ -45,7 +46,11 @@ public class ControlBinder {
}
else if (control instanceof JTextField){
controlAccessor = ValueAccessor.textFieldAccessor((JTextField)control);
} else {
}
else if (control instanceof EditorTextField) {
controlAccessor = ValueAccessor.editorTextFieldAccessor((EditorTextField)control);
}
else {
throw new IllegalArgumentException("Cannot bind control of type " + control.getClass() + ".\n" +
"Use bindControl(ControlValueAccessor, String) instead.");
}
@@ -2,7 +2,9 @@
package com.intellij.openapi.options.binding;
import com.intellij.openapi.editor.event.DocumentListener;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.EditorTextField;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -53,6 +55,40 @@ public abstract class ValueAccessor<V> {
};
}
public static ControlValueAccessor editorTextFieldAccessor(final EditorTextField from) {
return new ControlValueAccessor<String>() {
@Override
public String getValue() {
return from.getText();
}
@Override
public void setValue(String value) {
from.setText(value);
}
@Override
public Class<String> getType() {
return String.class;
}
@Override
public boolean isEnabled() {
return from.isEnabled();
}
@Override
public void addChangeListener(final Runnable listener) {
from.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void documentChanged(@NotNull com.intellij.openapi.editor.event.DocumentEvent event) {
listener.run();
}
});
}
};
}
public static ControlValueAccessor checkBoxAccessor(final JCheckBox from) {
return new ControlValueAccessor<Boolean>() {