package com.jetbrains.lang.dart.ide.errorTreeView; import com.intellij.ui.HoverHyperlinkLabel; import com.intellij.ui.HyperlinkAdapter; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBRadioButton; import com.jetbrains.lang.dart.DartBundle; import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; public class DartProblemsFilterForm { interface FilterListener { void filtersChanged(); void filtersResetRequested(); } private JPanel myMainPanel; private JBCheckBox myErrorsCheckBox; private JBCheckBox myWarningsCheckBox; private JBCheckBox myHintsCheckBox; private JBRadioButton myWholeProjectRadioButton; private JBRadioButton myCurrentContentRootRadioButton; private JBRadioButton myCurrentDartPackageRadioButton; private JBRadioButton myCurrentDirectoryRadioButton; private JBRadioButton myCurrentFileRadioButton; private HoverHyperlinkLabel myResetFilterHyperlink; private List<FilterListener> myListeners = new ArrayList<>(); private void createUIComponents() { myResetFilterHyperlink = new HoverHyperlinkLabel(DartBundle.message("reset.filter")); myResetFilterHyperlink.addHyperlinkListener(new HyperlinkAdapter() { @Override protected void hyperlinkActivated(final HyperlinkEvent e) { myListeners.forEach(FilterListener::filtersResetRequested); } }); } public void reset(@NotNull final DartProblemsPresentationHelper presentationHelper) { myErrorsCheckBox.setSelected(presentationHelper.isShowErrors()); myWarningsCheckBox.setSelected(presentationHelper.isShowWarnings()); myHintsCheckBox.setSelected(presentationHelper.isShowHints()); if (presentationHelper.getFileFilterMode() == DartProblemsViewSettings.FileFilterMode.File) { myCurrentFileRadioButton.setSelected(true); } else if (presentationHelper.getFileFilterMode() == DartProblemsViewSettings.FileFilterMode.Directory) { myCurrentDirectoryRadioButton.setSelected(true); } else if (presentationHelper.getFileFilterMode() == DartProblemsViewSettings.FileFilterMode.DartPackage) { myCurrentDartPackageRadioButton.setSelected(true); } else if (presentationHelper.getFileFilterMode() == DartProblemsViewSettings.FileFilterMode.ContentRoot) { myCurrentContentRootRadioButton.setSelected(true); } else { myWholeProjectRadioButton.setSelected(true); } } public void addListener(@NotNull final FilterListener filterListener) { myListeners.add(filterListener); final ActionListener listener = e -> filterListener.filtersChanged(); myErrorsCheckBox.addActionListener(listener); myWarningsCheckBox.addActionListener(listener); myHintsCheckBox.addActionListener(listener); myWholeProjectRadioButton.addActionListener(listener); myCurrentContentRootRadioButton.addActionListener(listener); myCurrentDartPackageRadioButton.addActionListener(listener); myCurrentDirectoryRadioButton.addActionListener(listener); myCurrentFileRadioButton.addActionListener(listener); } public JPanel getMainPanel() { return myMainPanel; } public boolean isShowErrors() { return myErrorsCheckBox.isSelected(); } public boolean isShowWarnings() { return myWarningsCheckBox.isSelected(); } public boolean isShowHints() { return myHintsCheckBox.isSelected(); } public DartProblemsViewSettings.FileFilterMode getFileFilterMode() { if (myCurrentFileRadioButton.isSelected()) return DartProblemsViewSettings.FileFilterMode.File; if (myCurrentDirectoryRadioButton.isSelected()) return DartProblemsViewSettings.FileFilterMode.Directory; if (myCurrentDartPackageRadioButton.isSelected()) return DartProblemsViewSettings.FileFilterMode.DartPackage; if (myCurrentContentRootRadioButton.isSelected()) return DartProblemsViewSettings.FileFilterMode.ContentRoot; return DartProblemsViewSettings.FileFilterMode.All; } }