For #EDU-565 Recreate StudyCheckAction Make StudyToolbarAction extend DumbAwareAction

This commit is contained in:
Valentina Kiryushkina
2016-03-14 17:03:00 +03:00
parent 2fe0b24f05
commit 2eaa577990
10 changed files with 86 additions and 58 deletions
@@ -0,0 +1,55 @@
package com.jetbrains.edu.learning.actions;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.KeyboardShortcut;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.util.Ref;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.checker.StudyCheckUtils;
import icons.InteractiveLearningIcons;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
public abstract class StudyCheckAction extends StudyToolbarAction {
public static final String SHORTCUT = "ctrl alt pressed ENTER";
protected Ref<Boolean> myCheckInProgress = new Ref<>(false);
public StudyCheckAction() {
super("Check Task (" + KeymapUtil.getShortcutText(new KeyboardShortcut(KeyStroke.getKeyStroke(SHORTCUT), null)) + ")", "Check current task", InteractiveLearningIcons.Resolve);
}
public abstract void check(@NotNull final Project project);
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = e.getProject();
if (project == null) {
return;
}
if (DumbService.isDumb(project)) {
StudyCheckUtils.showTestResultPopUp("Checking is not available while indexing is in progress", MessageType.WARNING.getPopupBackground(), project);
return;
}
check(project);
}
@Override
public void update(AnActionEvent e) {
final Presentation presentation = e.getPresentation();
StudyUtils.updateAction(e);
if (presentation.isEnabled()) {
presentation.setEnabled(!myCheckInProgress.get());
}
}
@Override
public String[] getShortcuts() {
return new String[] {SHORTCUT};
}
}
@@ -6,6 +6,7 @@ import com.intellij.openapi.keymap.KeymapUtil;
import com.jetbrains.edu.learning.courseFormat.Task;
import com.jetbrains.edu.learning.navigation.StudyNavigator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -28,11 +29,13 @@ public class StudyNextStudyTaskAction extends StudyTaskNavigationAction {
return StudyNavigator.nextTask(sourceTask);
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Nullable
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT};
@@ -4,6 +4,7 @@ import com.intellij.icons.AllIcons;
import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
import com.jetbrains.edu.learning.StudyUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -30,11 +31,13 @@ public class StudyNextWindowAction extends StudyWindowNavigationAction {
return null;
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Nullable
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT, SHORTCUT2};
@@ -32,11 +32,13 @@ public class StudyPrevWindowAction extends StudyWindowNavigationAction {
return null;
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Nullable
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT};
@@ -7,6 +7,7 @@ import com.jetbrains.edu.learning.courseFormat.Task;
import com.jetbrains.edu.learning.navigation.StudyNavigator;
import icons.InteractiveLearningIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -28,11 +29,13 @@ public class StudyPreviousStudyTaskAction extends StudyTaskNavigationAction {
return StudyNavigator.previousTask(sourceTask);
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Nullable
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT};
@@ -10,7 +10,6 @@ import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.ui.Messages;
@@ -30,10 +29,11 @@ import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.editor.StudyEditor;
import com.jetbrains.edu.learning.navigation.StudyNavigator;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class StudyRefreshTaskFileAction extends StudyToolbarAction implements DumbAware {
public class StudyRefreshTaskFileAction extends StudyToolbarAction {
public static final String ACTION_ID = "RefreshTaskAction";
public static final String SHORTCUT = "ctrl shift pressed X";
private static final Logger LOG = Logger.getInstance(StudyRefreshTaskFileAction.class.getName());
@@ -164,11 +164,13 @@ public class StudyRefreshTaskFileAction extends StudyToolbarAction implements Du
}
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Nullable
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT};
@@ -7,7 +7,6 @@ import com.intellij.openapi.actionSystem.KeyboardShortcut;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupFactory;
@@ -22,10 +21,11 @@ import com.jetbrains.edu.learning.StudyTaskManager;
import com.jetbrains.edu.learning.StudyUtils;
import icons.InteractiveLearningIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public class StudyShowHintAction extends StudyToolbarAction implements DumbAware {
public class StudyShowHintAction extends StudyToolbarAction {
public static final String ACTION_ID = "ShowHintAction";
public static final String SHORTCUT = "ctrl pressed 7";
private static final String ourWarningMessage = "Put the caret in the answer placeholder to get hint";
@@ -90,11 +90,13 @@ public class StudyShowHintAction extends StudyToolbarAction implements DumbAware
StudyUtils.updateAction(e);
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Nullable
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT};
@@ -3,7 +3,6 @@ package com.jetbrains.edu.learning.actions;
import com.intellij.ide.projectView.ProjectView;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.ui.popup.Balloon;
@@ -28,7 +27,7 @@ import javax.swing.tree.TreePath;
import java.util.Map;
abstract public class StudyTaskNavigationAction extends StudyToolbarAction implements DumbAware {
abstract public class StudyTaskNavigationAction extends StudyToolbarAction {
public StudyTaskNavigationAction(@Nullable String text, @Nullable String description, @Nullable Icon icon) {
super(text, description, icon);
}
@@ -1,16 +1,19 @@
package com.jetbrains.edu.learning.actions;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.project.DumbAwareAction;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
public abstract class StudyToolbarAction extends AnAction {
public abstract class StudyToolbarAction extends DumbAwareAction {
public StudyToolbarAction(@Nullable String text, @Nullable String description, @Nullable Icon icon) {
super(text, description, icon);
}
@NotNull
public abstract String getActionId();
@Nullable
public abstract String[] getShortcuts();
}
@@ -2,22 +2,16 @@ package com.jetbrains.edu.learning;
import com.intellij.execution.ExecutionException;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.KeyboardShortcut;
import com.intellij.openapi.actionSystem.Presentation;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.IdeFocusManager;
import com.jetbrains.edu.learning.actions.StudyCheckAction;
import com.jetbrains.edu.learning.actions.StudyRunAction;
import com.jetbrains.edu.learning.actions.StudyToolbarAction;
import com.jetbrains.edu.learning.checker.StudyCheckTask;
import com.jetbrains.edu.learning.checker.StudyCheckUtils;
import com.jetbrains.edu.learning.checker.StudyTestRunner;
@@ -26,39 +20,16 @@ import com.jetbrains.edu.learning.courseFormat.StudyStatus;
import com.jetbrains.edu.learning.courseFormat.Task;
import com.jetbrains.edu.learning.courseFormat.TaskFile;
import com.jetbrains.edu.learning.editor.StudyEditor;
import icons.InteractiveLearningIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Map;
public class PyStudyCheckAction extends StudyToolbarAction {
public class PyStudyCheckAction extends StudyCheckAction {
private static final Logger LOG = Logger.getInstance(PyStudyCheckAction.class);
public static final String ACTION_ID = "PyCheckAction";
public static final String SHORTCUT = "ctrl alt pressed ENTER";
protected Ref<Boolean> myCheckInProgress = new Ref<>(false);
public PyStudyCheckAction() {
super("Check Task (" + KeymapUtil.getShortcutText(new KeyboardShortcut(KeyStroke.getKeyStroke(SHORTCUT), null)) + ")", "Check current task", InteractiveLearningIcons.Resolve);
}
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Project project = e.getProject();
if (project == null) {
return;
}
if (DumbService.isDumb(project)) {
StudyCheckUtils.showTestResultPopUp("Checking is not available while indexing is in progress", MessageType.WARNING.getPopupBackground(), project);
return;
}
check(project);
}
protected void check(@NotNull Project project) {
public void check(@NotNull Project project) {
ApplicationManager.getApplication().runWriteAction(() -> {
CommandProcessor.getInstance().runUndoTransparentAction(() -> {
final StudyEditor selectedEditor = StudyUtils.getSelectedStudyEditor(project);
@@ -161,25 +132,10 @@ public class PyStudyCheckAction extends StudyToolbarAction {
}
return taskVirtualFile;
}
@NotNull
@Override
public String getActionId() {
return ACTION_ID;
}
@Override
public String[] getShortcuts() {
return new String[]{SHORTCUT};
}
@Override
public void update(AnActionEvent e) {
final Presentation presentation = e.getPresentation();
StudyUtils.updateAction(e);
if (presentation.isEnabled()) {
presentation.setEnabled(!myCheckInProgress.get());
}
}
}