Search in sources :

Example 1 with Task

use of com.jetbrains.edu.learning.courseFormat.Task in project intellij-community by JetBrains.

the class CCStudyActionListener method beforeCheck.

@Override
public void beforeCheck(AnActionEvent event) {
    Project project = event.getProject();
    if (project == null) {
        return;
    }
    if (!CCUtils.isCourseCreator(project)) {
        return;
    }
    VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(event.getDataContext());
    if (virtualFile == null) {
        return;
    }
    TaskFile taskFile = StudyUtils.getTaskFile(project, virtualFile);
    if (taskFile == null) {
        return;
    }
    Task task = taskFile.getTask();
    VirtualFile taskDir = StudyUtils.getTaskDir(virtualFile);
    if (taskDir == null) {
        return;
    }
    CCUtils.updateResources(project, task, taskDir);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) TaskFile(com.jetbrains.edu.learning.courseFormat.TaskFile) Project(com.intellij.openapi.project.Project) Task(com.jetbrains.edu.learning.courseFormat.Task)

Example 2 with Task

use of com.jetbrains.edu.learning.courseFormat.Task in project intellij-community by JetBrains.

the class CCSubtaskEditorNotificationProvider method createNotificationPanel.

@Nullable
@Override
public EditorNotificationPanel createNotificationPanel(@NotNull VirtualFile file, @NotNull FileEditor fileEditor) {
    if (!CCUtils.isCourseCreator(myProject)) {
        return null;
    }
    boolean isTestFile = CCUtils.isTestsFile(myProject, file);
    if (!isTestFile && StudyUtils.getTaskFile(myProject, file) == null) {
        return null;
    }
    Task task = StudyUtils.getTaskForFile(myProject, file);
    if (task == null || !task.hasSubtasks()) {
        return null;
    }
    EditorNotificationPanel panel = new EditorNotificationPanel(EditorColors.GUTTER_BACKGROUND);
    String header = (isTestFile ? "test" : "task") + " file";
    int activeSubtaskIndex = task.getActiveSubtaskIndex() + 1;
    int subtaskSize = task.getLastSubtaskIndex() + 1;
    panel.setText("This is a " + header + " for " + EduNames.SUBTASK + " " + activeSubtaskIndex + "/" + subtaskSize);
    panel.createActionLabel(SWITCH_SUBTASK, () -> createPopup(task, myProject).show(RelativePoint.getSouthEastOf(panel)));
    return panel;
}
Also used : Task(com.jetbrains.edu.learning.courseFormat.Task) EditorNotificationPanel(com.intellij.ui.EditorNotificationPanel) RelativePoint(com.intellij.ui.awt.RelativePoint) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with Task

use of com.jetbrains.edu.learning.courseFormat.Task in project intellij-community by JetBrains.

the class CCVirtualFileListener method deleteTask.

private static void deleteTask(@NotNull final Course course, @NotNull final VirtualFile removedTask) {
    VirtualFile lessonDir = removedTask.getParent();
    if (lessonDir == null || !lessonDir.getName().contains(EduNames.LESSON)) {
        return;
    }
    final Lesson lesson = course.getLesson(lessonDir.getName());
    if (lesson == null) {
        return;
    }
    Task task = lesson.getTask(removedTask.getName());
    if (task == null) {
        return;
    }
    CCUtils.updateHigherElements(lessonDir.getChildren(), file -> lesson.getTask(file.getName()), task.getIndex(), EduNames.TASK, -1);
    lesson.getTaskList().remove(task);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) Task(com.jetbrains.edu.learning.courseFormat.Task) Lesson(com.jetbrains.edu.learning.courseFormat.Lesson)

Example 4 with Task

use of com.jetbrains.edu.learning.courseFormat.Task in project intellij-community by JetBrains.

the class StudyTabTitleProvider method getEditorTabTitle.

@Nullable
@Override
public String getEditorTabTitle(Project project, VirtualFile file) {
    TaskFile taskFile = StudyUtils.getTaskFile(project, file);
    if (taskFile == null) {
        return null;
    }
    String title = new UniqueNameEditorTabTitleProvider().getEditorTabTitle(project, file);
    if (title == null) {
        return null;
    }
    String[] split = title.split(Pattern.quote(File.separator));
    for (int i = 0; i < split.length; i++) {
        String part = split[i];
        Task task = taskFile.getTask();
        VirtualFile taskDir = task.getTaskDir(project);
        if (taskDir != null && part.equals(taskDir.getName())) {
            split[i] = task.getName();
            continue;
        }
        Lesson lesson = task.getLesson();
        int lessonIndex = lesson.getIndex();
        if (part.equals(EduNames.LESSON + lessonIndex)) {
            split[i] = lesson.getName();
        }
    }
    return StringUtil.join(split, File.separator);
}
Also used : TaskFile(com.jetbrains.edu.learning.courseFormat.TaskFile) VirtualFile(com.intellij.openapi.vfs.VirtualFile) Task(com.jetbrains.edu.learning.courseFormat.Task) UniqueNameEditorTabTitleProvider(com.intellij.openapi.fileEditor.impl.UniqueNameEditorTabTitleProvider) Lesson(com.jetbrains.edu.learning.courseFormat.Lesson) Nullable(org.jetbrains.annotations.Nullable)

Example 5 with Task

use of com.jetbrains.edu.learning.courseFormat.Task in project intellij-community by JetBrains.

the class StudyBasePluginConfigurator method getFileEditorManagerListener.

@NotNull
@Override
public FileEditorManagerListener getFileEditorManagerListener(@NotNull Project project, @NotNull StudyToolWindow toolWindow) {
    return new FileEditorManagerListener() {

        @Override
        public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
            Task task = getTask(file);
            setTaskText(task, StudyUtils.getTaskDir(file));
            if (task != null) {
                if (task.isChoiceTask()) {
                    final StudyChoiceVariantsPanel choicePanel = new StudyChoiceVariantsPanel(task);
                    toolWindow.setBottomComponent(choicePanel);
                } else {
                    toolWindow.setBottomComponent(null);
                }
            }
        }

        @Override
        public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
            for (VirtualFile openedFile : source.getOpenFiles()) {
                if (StudyUtils.getTaskFile(project, openedFile) != null) {
                    return;
                }
            }
            toolWindow.setEmptyText(project);
        }

        @Override
        public void selectionChanged(@NotNull FileEditorManagerEvent event) {
            VirtualFile file = event.getNewFile();
            if (file != null) {
                Task task = getTask(file);
                setTaskText(task, StudyUtils.getTaskDir(file));
            }
            toolWindow.setBottomComponent(null);
        }

        @Nullable
        private Task getTask(@NotNull VirtualFile file) {
            return StudyUtils.getTaskForFile(project, file);
        }

        private void setTaskText(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
            String text = StudyUtils.getTaskTextFromTask(taskDirectory, task);
            if (text == null) {
                toolWindow.setEmptyText(project);
                return;
            }
            toolWindow.setTaskText(text, taskDirectory, project);
        }
    };
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) FileEditorManager(com.intellij.openapi.fileEditor.FileEditorManager) Task(com.jetbrains.edu.learning.courseFormat.Task) StudyChoiceVariantsPanel(com.jetbrains.edu.learning.editor.StudyChoiceVariantsPanel) FileEditorManagerEvent(com.intellij.openapi.fileEditor.FileEditorManagerEvent) FileEditorManagerListener(com.intellij.openapi.fileEditor.FileEditorManagerListener) NotNull(org.jetbrains.annotations.NotNull) Nullable(org.jetbrains.annotations.Nullable) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

Task (com.jetbrains.edu.learning.courseFormat.Task)33 VirtualFile (com.intellij.openapi.vfs.VirtualFile)19 Lesson (com.jetbrains.edu.learning.courseFormat.Lesson)11 TaskFile (com.jetbrains.edu.learning.courseFormat.TaskFile)11 Project (com.intellij.openapi.project.Project)9 Course (com.jetbrains.edu.learning.courseFormat.Course)6 Nullable (org.jetbrains.annotations.Nullable)6 Presentation (com.intellij.openapi.actionSystem.Presentation)4 PsiDirectory (com.intellij.psi.PsiDirectory)4 StudyEditor (com.jetbrains.edu.learning.editor.StudyEditor)4 File (java.io.File)4 Editor (com.intellij.openapi.editor.Editor)3 NewVirtualFile (com.intellij.openapi.vfs.newvfs.NewVirtualFile)3 PsiFile (com.intellij.psi.PsiFile)3 NotNull (org.jetbrains.annotations.NotNull)3 Module (com.intellij.openapi.module.Module)2 StudyTaskManager (com.jetbrains.edu.learning.StudyTaskManager)2 Gson (com.google.gson.Gson)1 GsonBuilder (com.google.gson.GsonBuilder)1 ExecutionException (com.intellij.execution.ExecutionException)1