From 5df510351a159c04f28d2addf020ff17bcbc2603 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 5 Oct 2018 17:24:36 +0300 Subject: [PATCH] support EditorTextField --- .../options/binding/ControlBinder.java | 7 +++- .../options/binding/ValueAccessor.java | 36 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/options/binding/ControlBinder.java b/platform/platform-impl/src/com/intellij/openapi/options/binding/ControlBinder.java index 336f1c94fde8..0e53cd884ae1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/binding/ControlBinder.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/binding/ControlBinder.java @@ -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."); } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/binding/ValueAccessor.java b/platform/platform-impl/src/com/intellij/openapi/options/binding/ValueAccessor.java index eb6f49e7d9fd..c1b3baf0d46c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/binding/ValueAccessor.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/binding/ValueAccessor.java @@ -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 { }; } + public static ControlValueAccessor editorTextFieldAccessor(final EditorTextField from) { + return new ControlValueAccessor() { + @Override + public String getValue() { + return from.getText(); + } + + @Override + public void setValue(String value) { + from.setText(value); + } + + @Override + public Class 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() {