diff --git a/python/educational-core/student/resources/META-INF/plugin.xml b/python/educational-core/student/resources/META-INF/plugin.xml index 7bc361944f2e..9b25c93ab323 100644 --- a/python/educational-core/student/resources/META-INF/plugin.xml +++ b/python/educational-core/student/resources/META-INF/plugin.xml @@ -32,6 +32,7 @@ + diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyActionProvider.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyActionProvider.java new file mode 100644 index 000000000000..b40a796175fa --- /dev/null +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyActionProvider.java @@ -0,0 +1,15 @@ +package com.jetbrains.edu.learning; + +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface StudyActionProvider { + ExtensionPointName EP_NAME = ExtensionPointName.create("Edu.studyActionProvider"); + + @Nullable + DefaultActionGroup getActionGroup(@NotNull Project project); + +} diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java b/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java index 5b597aabf265..b114fdd9ff17 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindow.java @@ -35,8 +35,10 @@ import com.intellij.ui.components.JBScrollPane; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import com.jetbrains.edu.EduNames; +import com.jetbrains.edu.courseFormat.Course; import com.jetbrains.edu.courseFormat.Task; import com.jetbrains.edu.courseFormat.TaskFile; +import com.jetbrains.edu.learning.StudyActionProvider; import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.StudyUtils; import com.jetbrains.edu.learning.actions.*; @@ -116,18 +118,38 @@ public class StudyToolWindow extends SimpleToolWindowPanel implements DataProvid } private static JPanel createToolbarPanel(@NotNull final Project project) { + final DefaultActionGroup group = getActionGroup(project); + + final ActionToolbar actionToolBar = ActionManager.getInstance().createActionToolbar("Study", group, true); + return JBUI.Panels.simplePanel(actionToolBar.getComponent()); + } + + private static DefaultActionGroup getActionGroup(@NotNull final Project project) { + StudyActionProvider[] extensions = StudyActionProvider.EP_NAME.getExtensions(); + DefaultActionGroup actionGroup = null; + Course course = StudyTaskManager.getInstance(project).getCourse(); + if (course == null) { + return createDefaultActionGroup(project); + } + for (StudyActionProvider actionProvider: extensions) { + actionGroup = actionProvider.getActionGroup(project); + if (actionGroup != null) break; + } + + return actionGroup == null ? createDefaultActionGroup(project) : actionGroup; + } + + @NotNull + private static DefaultActionGroup createDefaultActionGroup(@NotNull Project project) { final DefaultActionGroup group = new DefaultActionGroup(); group.add(StudyCheckAction.createCheckAction(StudyTaskManager.getInstance(project).getCourse())); group.add(new StudyPreviousStudyTaskAction()); group.add(new StudyNextStudyTaskAction()); group.add(new StudyRefreshTaskFileAction()); group.add(new StudyShowHintAction()); - group.add(new StudyRunAction()); group.add(new StudyEditInputAction()); - - final ActionToolbar actionToolBar = ActionManager.getInstance().createActionToolbar("Study", group, true); - return JBUI.Panels.simplePanel(actionToolBar.getComponent()); + return group; } static class StudyFileEditorManagerListener implements FileEditorManagerListener { diff --git a/python/educational-python/student-python/resources/META-INF/plugin.xml b/python/educational-python/student-python/resources/META-INF/plugin.xml index 8638261999fb..b349e508405b 100644 --- a/python/educational-python/student-python/resources/META-INF/plugin.xml +++ b/python/educational-python/student-python/resources/META-INF/plugin.xml @@ -32,6 +32,7 @@ +