package com.scss; import com.intellij.codeInsight.intention.HighPriorityAction; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.icons.AllIcons.General; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Iconable; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; import javax.swing.Icon; import com.scss.settings.ScssLintSettingsPage; import org.jetbrains.annotations.NotNull; class EditSettingsAction implements IntentionAction, Iconable, HighPriorityAction { private static boolean ourInvoked; private final boolean fileLevelAnnotation; private final Icon icon; private final ScssLintSettingsPage configurable; EditSettingsAction(@NotNull ScssLintSettingsPage configurable) { this(configurable, false, General.Settings); } public EditSettingsAction(@NotNull ScssLintSettingsPage configurable, @NotNull Icon icon) { this(configurable, false, icon); } public EditSettingsAction(@NotNull ScssLintSettingsPage configurable, boolean fileLevelAnnotation) { this(configurable, fileLevelAnnotation, General.Settings); } private EditSettingsAction(@NotNull ScssLintSettingsPage configurable, boolean fileLevelAnnotation, @NotNull Icon icon) { this.configurable = configurable; this.fileLevelAnnotation = fileLevelAnnotation; this.icon = icon; } public Icon getIcon(@IconFlags int flags) { return this.icon; } @NotNull public String getText() { return this.fileLevelAnnotation ? "Settings..." : this.configurable.getDisplayName() + " settings..."; } @NotNull public String getFamilyName() { return this.getText(); } public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { return true; } public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { if (!ourInvoked) { ourInvoked = true; ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { EditSettingsAction.ourInvoked = false; EditSettingsAction.this.configurable.showSettings(); } }, ModalityState.any()); } } public boolean startInWriteAction() { return false; } }