From 6d8b7b7cfb4c7839bebcd0a49872ef313e02e612 Mon Sep 17 00:00:00 2001 From: Sergey Vasiliev Date: Tue, 25 Jul 2006 16:54:39 +0400 Subject: [PATCH] NPE + borders --- .../src/com/intellij/util/xml/ui/ComboControl.java | 97 ++++++++++++---------- 1 file changed, 53 insertions(+), 44 deletions(-) diff --git a/dom/openapi/src/com/intellij/util/xml/ui/ComboControl.java b/dom/openapi/src/com/intellij/util/xml/ui/ComboControl.java index 0434bfe441..9e495ca19b 100644 --- a/dom/openapi/src/com/intellij/util/xml/ui/ComboControl.java +++ b/dom/openapi/src/com/intellij/util/xml/ui/ComboControl.java @@ -11,6 +11,7 @@ import com.intellij.openapi.util.Factory; import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiManager; import com.intellij.util.Function; +import com.intellij.util.ui.UIUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xml.*; import com.intellij.util.xml.highlighting.DomElementAnnotationsManager; @@ -19,6 +20,8 @@ import com.intellij.util.xml.highlighting.DomElementsProblemsHolder; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import javax.swing.text.JTextComponent; +import javax.swing.border.EmptyBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -29,10 +32,10 @@ import java.util.List; * @author peter */ public class ComboControl extends BaseControl { - private static final Pair EMPTY = Pair.create(" ", null); + private static final Pair EMPTY = Pair.create(" ", null); private final Factory>> myDataFactory; private boolean myNullable; - private Map myIcons = new com.intellij.util.containers.HashMap(); + private Map myIcons = new com.intellij.util.containers.HashMap(); private final ActionListener myCommitListener = new ActionListener() { public void actionPerformed(ActionEvent e) { commit(); @@ -169,8 +172,6 @@ public class ComboControl extends BaseControl { } static JComboBox initComboBox(final JComboBox comboBox, final Condition validity) { - comboBox.setEditable(true); - comboBox.setEditor(new MyComboBoxEditor()); comboBox.setPrototypeDisplayValue(Pair.create("A", null)); comboBox.setRenderer(new DefaultListCellRenderer() { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { @@ -188,9 +189,17 @@ public class ComboControl extends BaseControl { return this; } }); + + initComboboxEditor(comboBox); + return comboBox; } + private static void initComboboxEditor(final JComboBox comboBox) { + comboBox.setEditable(true); + comboBox.setEditor(new MyComboBoxEditor()); + } + protected JComboBox createMainComponent(final JComboBox boundedComponent) { return tuneUpComboBox(boundedComponent == null ? new JComboBox() : boundedComponent, myDataFactory); } @@ -234,65 +243,65 @@ public class ComboControl extends BaseControl { protected void updateComponent() { final DomElement domElement = getDomElement(); - if (domElement == null || !domElement.isValid()) return; + if (domElement == null || !domElement.isValid()) return; final JComboBox comboBox = getComponent(); final Project project = getProject(); - ApplicationManager.getApplication().invokeLater(new Runnable() { - public void run() { - if (!getDomWrapper().isValid()) return; - - final DomElement domElement = getDomElement(); - if (!project.isOpen() || domElement == null || !domElement.isValid()) return; - - final DomElementAnnotationsManager manager = DomElementAnnotationsManager.getInstance(project); - final DomElementsProblemsHolder holder = manager.getCachedProblemHolder(domElement); - final List errorProblems = holder.getProblems(domElement, true); - final List warningProblems = - holder.getProblems(domElement, true, true, HighlightSeverity.WARNING); - - Color background = getDefaultBackground(); - comboBox.setToolTipText(null); - - if (errorProblems.size() > 0) { - background = getErrorBackground(); - comboBox.setToolTipText(TooltipUtils.getTooltipText(errorProblems)); - } - else if (warningProblems.size() > 0) { - background = getWarningBackground(); - comboBox.setToolTipText(TooltipUtils.getTooltipText(warningProblems)); - } + ApplicationManager.getApplication().invokeLater(new Runnable() { + public void run() { + if (!getDomWrapper().isValid()) return; + + final DomElement domElement = getDomElement(); + if (!project.isOpen() || domElement == null || !domElement.isValid()) return; + + final DomElementAnnotationsManager manager = DomElementAnnotationsManager.getInstance(project); + final DomElementsProblemsHolder holder = manager.getCachedProblemHolder(domElement); + final List errorProblems = holder.getProblems(domElement, true); + final List warningProblems = holder.getProblems(domElement, true, true, HighlightSeverity.WARNING); + + Color background = getDefaultBackground(); + comboBox.setToolTipText(null); + + if (errorProblems.size() > 0) { + background = getErrorBackground(); + comboBox.setToolTipText(TooltipUtils.getTooltipText(errorProblems)); + } + else if (warningProblems.size() > 0) { + background = getWarningBackground(); + comboBox.setToolTipText(TooltipUtils.getTooltipText(warningProblems)); + } final Pair pair = (Pair)comboBox.getSelectedItem(); final String s = pair.first; background = s != null && s.trim().length() > 0 ? getDefaultBackground() : background; - comboBox.setBackground(background); - comboBox.getEditor().getEditorComponent().setBackground(background); - } - }); + comboBox.setBackground(background); + comboBox.getEditor().getEditorComponent().setBackground(background); + } + }); } private static class MyComboBoxEditor implements ComboBoxEditor { - private JLabel myLabel; - private Pair myCurrentItem; - - public MyComboBoxEditor() { - myLabel = new JLabel(); - - } + private Pair myCurrentItem; + private ComboBoxEditor myDelegee = new JComboBox().getEditor(); public Component getEditorComponent() { - return myLabel; + final Component component = myDelegee.getEditorComponent(); + if (component instanceof JTextComponent) { + ((JTextComponent)component).setEditable(false); + ((JTextComponent)component).setSelectedTextColor(component.getForeground()); + ((JTextComponent)component).setSelectionColor(component.getBackground()); + } + + return component; } public void setItem(Object anObject) { - myCurrentItem = anObject instanceof Pair ? (Pair)anObject : EMPTY; + myCurrentItem = anObject instanceof Pair ? (Pair)anObject : EMPTY; - myLabel.setText(myCurrentItem.first); - myLabel.setIcon(myCurrentItem.second); + myDelegee.setItem(myCurrentItem.first); } public Object getItem() { -- 2.11.4.GIT