RUBY-20720 run anything popup

* open addExtension method and reuse it
* implement different laf editors with icons handler
This commit is contained in:
Dmitry.Krasilschikov
2018-01-16 00:52:36 +03:00
committed by Valentin Fondaratov
parent 31aa3fe35a
commit 3f56f4679d
3 changed files with 34 additions and 19 deletions
@@ -29,10 +29,12 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.IdeFocusManager;
import com.intellij.ui.components.JBList;
import com.intellij.ui.components.JBTextField;
import com.intellij.util.Consumer;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.ui.JBInsets;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -116,23 +118,8 @@ public class SearchTextField extends JPanel {
@Override
public void setUI(TextUI ui) {
if (SystemInfo.isMac) {
try {
Class<?> uiClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextFieldUI")
: Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI");
Method method = ReflectionUtil.getMethod(uiClass, "createUI", JComponent.class);
if (method != null) {
super.setUI((TextUI)method.invoke(uiClass, this));
Class<?> borderClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextBorder")
: Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder");
setBorder((Border)ReflectionUtil.newInstance(borderClass));
setOpaque(false);
}
return;
}
catch (Exception ignored) {
}
}
if (customSetupUIAndTextField(this, textUI -> super.setUI(textUI))) return;
super.setUI(ui);
}
};
@@ -301,6 +288,27 @@ public class SearchTextField extends JPanel {
return UIUtil.isUnderGTKLookAndFeel();
}
protected boolean customSetupUIAndTextField(@NotNull TextFieldWithProcessing textField, @NotNull Consumer<TextUI> uiConsumer) {
if (SystemInfo.isMac) {
try {
Class<?> uiClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextFieldUI")
: Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextFieldUI");
Method method = ReflectionUtil.getMethod(uiClass, "createUI", JComponent.class);
if (method != null) {
uiConsumer.consume((TextUI)method.invoke(uiClass, textField));
Class<?> borderClass = UIUtil.isUnderIntelliJLaF() ? Class.forName("com.intellij.ide.ui.laf.intellij.MacIntelliJTextBorder")
: Class.forName("com.intellij.ide.ui.laf.darcula.ui.DarculaTextBorder");
textField.setBorder((Border)ReflectionUtil.newInstance(borderClass));
textField.setOpaque(false);
}
return true;
}
catch (Exception ignored) {
}
}
return false;
}
public void addDocumentListener(DocumentListener listener) {
getTextEditor().getDocument().addDocumentListener(listener);
}
@@ -495,7 +495,7 @@ public abstract class TextFieldWithPopupHandlerUI extends BasicTextFieldUI imple
}
}
private void addExtension(Extension extension) {
protected void addExtension(Extension extension) {
icons.put(extension.toString(), new IconHolder(extension));
if (extension.isIconBeforeText()) {
insets.left += extension.getPreferredSpace();
@@ -1408,4 +1408,11 @@ ext.project.data.serializer.description=select serialization format for external
editor.keep.completion.hints.longer=false
editor.keep.completion.hints.longer.description=Don't remove hints for parameter names added on method call completion until caret moves \
to another line
to another line
run.anything.rake.tasks=true
run.anything.generators=true
run.anything.bundler.actions=true
run.anything.permanent.configurations=true
run.anything.temporary.configurations=true
run.anything.undefined.commands=true