IDEA-251172 Missing checkboxes in settings
[idea/community.git] / java / idea-ui / src / com / intellij / openapi / roots / ui / configuration / artifacts / ArtifactErrorPanel.java
1 // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.openapi.roots.ui.configuration.artifacts;
3
4 import com.intellij.icons.AllIcons;
5 import com.intellij.ide.IdeBundle;
6 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ConfigurationErrorQuickFix;
7 import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureProblemType;
8 import com.intellij.openapi.ui.popup.JBPopupFactory;
9 import com.intellij.openapi.ui.popup.PopupStep;
10 import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
11 import com.intellij.openapi.util.NlsContexts;
12 import com.intellij.util.containers.ContainerUtil;
13 import com.intellij.util.ui.UIUtil;
14 import com.intellij.util.ui.update.Activatable;
15 import com.intellij.util.ui.update.UiNotifyConnector;
16 import org.jetbrains.annotations.NotNull;
17
18 import javax.swing.*;
19 import java.awt.*;
20 import java.awt.event.ActionEvent;
21 import java.awt.event.ActionListener;
22 import java.util.List;
23
24 public final class ArtifactErrorPanel {
25   private final JPanel myMainPanel;
26   private final JButton myFixButton;
27   private final JLabel myErrorLabel;
28   private List<? extends ConfigurationErrorQuickFix> myCurrentQuickFixes;
29   private @NlsContexts.Label String myErrorText;
30
31   public ArtifactErrorPanel(final ArtifactEditorImpl artifactEditor) {
32     myMainPanel = new JPanel(new BorderLayout());
33     myErrorLabel = new JLabel();
34     myMainPanel.add(myErrorLabel, BorderLayout.CENTER);
35     myFixButton = new JButton();
36     myMainPanel.add(myFixButton, BorderLayout.EAST);
37     new UiNotifyConnector(myMainPanel, new Activatable() {
38       @Override
39       public void showNotify() {
40         if (myErrorText != null) {
41           myErrorLabel.setText(myErrorText);
42           myErrorText = null;
43         }
44       }
45     });
46     myFixButton.addActionListener(new ActionListener() {
47       @Override
48       public void actionPerformed(ActionEvent e) {
49         if (!myCurrentQuickFixes.isEmpty()) {
50           if (myCurrentQuickFixes.size() == 1) {
51             performFix(ContainerUtil.getFirstItem(myCurrentQuickFixes, null), artifactEditor);
52           }
53           else {
54             JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<ConfigurationErrorQuickFix>(null, myCurrentQuickFixes) {
55               @NotNull
56               @Override
57               public String getTextFor(ConfigurationErrorQuickFix value) {
58                 return value.getActionName();
59               }
60
61               @Override
62               public PopupStep onChosen(ConfigurationErrorQuickFix selectedValue, boolean finalChoice) {
63                 performFix(selectedValue, artifactEditor);
64                 return FINAL_CHOICE;
65               }
66             }).showUnderneathOf(myFixButton);
67           }
68         }
69       }
70     });
71     clearError();
72   }
73
74   private static void performFix(ConfigurationErrorQuickFix quickFix, ArtifactEditorImpl artifactEditor) {
75     quickFix.performFix();
76     artifactEditor.queueValidation();
77   }
78
79   public void showError(@NotNull @NlsContexts.Label String message, @NotNull ProjectStructureProblemType.Severity severity,
80                         @NotNull List<? extends ConfigurationErrorQuickFix> quickFixes) {
81     myErrorLabel.setVisible(true);
82     myErrorLabel.setIcon(severity == ProjectStructureProblemType.Severity.ERROR ? AllIcons.General.Error :
83                          severity == ProjectStructureProblemType.Severity.WARNING ? AllIcons.General.Warning : AllIcons.General.Information);
84     final String errorText = UIUtil.toHtml(message);
85     if (myErrorLabel.isShowing()) {
86       myErrorLabel.setText(errorText);
87     }
88     myErrorText = errorText;
89     myMainPanel.setVisible(true);
90     myCurrentQuickFixes = quickFixes;
91     myFixButton.setVisible(!quickFixes.isEmpty());
92     if (!quickFixes.isEmpty()) {
93       myFixButton.setText(quickFixes.size() == 1 ? ContainerUtil.getFirstItem(quickFixes, null).getActionName() : IdeBundle.message("button.fix"));
94     }
95   }
96
97   public void clearError() {
98     myErrorText = null;
99     myMainPanel.setVisible(false);
100     myErrorLabel.setVisible(false);
101     myFixButton.setVisible(false);
102   }
103
104   public JComponent getMainPanel() {
105     return myMainPanel;
106   }
107 }