5fb40889376dcef922821083e7401805799cbd4c
[idea/community.git] / python / educational-core / student / src / com / jetbrains / edu / learning / actions / StudyCheckAction.java
1 package com.jetbrains.edu.learning.actions;
2
3 import com.intellij.openapi.actionSystem.AnActionEvent;
4 import com.intellij.openapi.actionSystem.KeyboardShortcut;
5 import com.intellij.openapi.actionSystem.Presentation;
6 import com.intellij.openapi.keymap.KeymapUtil;
7 import com.intellij.openapi.project.DumbAwareAction;
8 import com.intellij.openapi.project.DumbService;
9 import com.intellij.openapi.project.Project;
10 import com.intellij.openapi.ui.MessageType;
11 import com.intellij.openapi.util.Ref;
12 import com.jetbrains.edu.learning.StudyUtils;
13 import com.jetbrains.edu.learning.checker.StudyCheckUtils;
14 import icons.InteractiveLearningIcons;
15 import org.jetbrains.annotations.NotNull;
16
17 import javax.swing.*;
18
19
20 public class StudyCheckAction extends DumbAwareAction {
21
22   public static final String ACTION_ID = "CheckAction";
23   public static final String SHORTCUT = "ctrl alt pressed ENTER";
24
25   protected Ref<Boolean> myCheckInProgress = new Ref<>(false);
26
27   public StudyCheckAction() {
28     super("Check Task (" + KeymapUtil.getShortcutText(new KeyboardShortcut(KeyStroke.getKeyStroke(SHORTCUT), null)) + ")", "Check current task", InteractiveLearningIcons.Resolve);
29   }
30
31   protected void check(@NotNull final Project project) {}
32
33   @Override
34   public void actionPerformed(@NotNull AnActionEvent e) {
35     Project project = e.getProject();
36     if (project == null) {
37       return;
38     }
39     if (DumbService.isDumb(project)) {
40       StudyCheckUtils.showTestResultPopUp("Checking is not available while indexing is in progress", MessageType.WARNING.getPopupBackground(), project);
41       return;
42     }
43     check(project);
44   }
45
46   @Override
47   public void update(AnActionEvent e) {
48     final Presentation presentation = e.getPresentation();
49     StudyUtils.updateAction(e);
50     if (presentation.isEnabled()) {
51       presentation.setEnabled(!myCheckInProgress.get());
52     }
53   }
54 }