diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java new file mode 100644 index 000000000000..cbd1c2482032 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/filter/InspectionFilterAction.java @@ -0,0 +1,129 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.profile.codeInspection.ui.filter; + +import com.intellij.codeHighlighting.HighlightDisplayLevel; +import com.intellij.codeInsight.daemon.impl.SeverityRegistrar; +import com.intellij.codeInspection.ex.InspectionProfileImpl; +import com.intellij.icons.AllIcons; +import com.intellij.lang.annotation.HighlightSeverity; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.actionSystem.ex.CheckboxAction; +import com.intellij.profile.codeInspection.SeverityProvider; +import com.intellij.profile.codeInspection.ui.LevelChooserAction; +import com.intellij.profile.codeInspection.ui.SingleInspectionProfilePanel; +import org.jetbrains.annotations.Nullable; + +import java.util.SortedSet; + +/** + * @author Dmitry Batkovich + */ +public class InspectionFilterAction extends DefaultActionGroup { + + private final SeverityRegistrar mySeverityRegistrar; + private final InspectionsFilter myInspectionsFilter; + + public InspectionFilterAction(final InspectionProfileImpl profile, final InspectionsFilter inspectionsFilter) { + super("Filter Inspections", true); + myInspectionsFilter = inspectionsFilter; + mySeverityRegistrar = ((SeverityProvider)profile.getProfileManager()).getOwnSeverityRegistrar(); + getTemplatePresentation().setIcon(AllIcons.General.Filter); + tune(); + } + + private void tune() { + addAction(new ShowEnabledOrDisabledInspectionsAction(null)); + addAction(new ShowEnabledOrDisabledInspectionsAction(true)); + addAction(new ShowEnabledOrDisabledInspectionsAction(false)); + addSeparator(); + + final SortedSet<HighlightSeverity> severities = LevelChooserAction.getSeverities(mySeverityRegistrar); + for (final HighlightSeverity severity : severities) { + add(new ShowWithSpecifiedSeverityInspectionsAction(severity)); + } + addSeparator(); + + add(new ShowAvailableOnlyOnAnalyzeInspectionsAction()); + } + + private class ShowAvailableOnlyOnAnalyzeInspectionsAction extends CheckboxAction { + + public ShowAvailableOnlyOnAnalyzeInspectionsAction() { + super("Show Only \"Available only for Analyze | Inspect Code\""); + } + + @Override + public boolean isSelected(final AnActionEvent e) { + return myInspectionsFilter.isAvailableOnlyForAnalyze(); + } + + @Override + public void setSelected(final AnActionEvent e, final boolean state) { + myInspectionsFilter.setAvailableOnlyForAnalyze(state); + } + } + + private class ShowWithSpecifiedSeverityInspectionsAction extends CheckboxAction { + + private final HighlightSeverity mySeverity; + + private ShowWithSpecifiedSeverityInspectionsAction(final HighlightSeverity severity) { + super(SingleInspectionProfilePanel.renderSeverity(severity), + null, + HighlightDisplayLevel.find(severity).getIcon()); + mySeverity = severity; + } + + + @Override + public boolean isSelected(final AnActionEvent e) { + return myInspectionsFilter.containsSeverity(mySeverity); + } + + @Override + public void setSelected(final AnActionEvent e, final boolean state) { + if (state) { + myInspectionsFilter.add(mySeverity); + } else { + myInspectionsFilter.remove(mySeverity); + } + } + } + + private class ShowEnabledOrDisabledInspectionsAction extends CheckboxAction { + + private final Boolean myShowEnabledActions; + + public ShowEnabledOrDisabledInspectionsAction(@Nullable final Boolean showEnabledActions) { + super(showEnabledActions == null ? "All Inspections" : (showEnabledActions ? "Enabled" : "Disabled")); + myShowEnabledActions = showEnabledActions; + } + + + @Override + public boolean isSelected(final AnActionEvent e) { + return myInspectionsFilter.getSuitableInspectionsStates() == myShowEnabledActions; + } + + @Override + public void setSelected(final AnActionEvent e, final boolean state) { + myInspectionsFilter.setSuitableInspectionsStates(myShowEnabledActions); + } + } +}
\ No newline at end of file |