Add extension point to edu student plugin to provide action group for study tool window toolbar

This commit is contained in:
Valentina Kiryushkina
2016-02-03 21:39:28 +03:00
parent 933f69953f
commit facd2674f7
5 changed files with 72 additions and 4 deletions
@@ -32,6 +32,7 @@
<extensionPoints>
<extensionPoint qualifiedName="Edu.StudyExecutor" beanClass="com.intellij.lang.LanguageExtensionPoint"/>
<extensionPoint qualifiedName="Edu.StudyLanguageManager" beanClass="com.intellij.lang.LanguageExtensionPoint"/>
<extensionPoint qualifiedName="Edu.studyActionProvider" interface="com.jetbrains.edu.learning.StudyActionProvider"/>
</extensionPoints>
<actions>
@@ -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<StudyActionProvider> EP_NAME = ExtensionPointName.create("Edu.studyActionProvider");
@Nullable
DefaultActionGroup getActionGroup(@NotNull Project project);
}
@@ -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 {
@@ -32,6 +32,7 @@
<extensions defaultExtensionNs="Edu">
<StudyExecutor implementationClass="com.jetbrains.edu.learning.PyStudyExecutor" language="Python"/>
<StudyLanguageManager implementationClass="com.jetbrains.edu.learning.PyStudyLanguageManager" language="Python"/>
<studyActionProvider implementation="com.jetbrains.edu.learning.PyStudyActionProvider" />
</extensions>
<actions>
<action id="WelcomeScreen.PythonIntro" class="com.jetbrains.edu.learning.actions.PyStudyIntroductionCourseAction"
@@ -0,0 +1,29 @@
package com.jetbrains.edu.learning;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.project.Project;
import com.jetbrains.edu.courseFormat.Course;
import com.jetbrains.edu.learning.actions.*;
import org.jetbrains.annotations.NotNull;
public class PyStudyActionProvider implements StudyActionProvider {
@Override
public DefaultActionGroup getActionGroup(@NotNull Project project) {
Course course = StudyTaskManager.getInstance(project).getCourse();
if (course != null && course.getLanguage().equals("Python") && course.getCourseType().equals("PyCharm")) {
final DefaultActionGroup group = new DefaultActionGroup();
group.add(StudyCheckAction.createCheckAction(course));
group.add(new StudyPreviousStudyTaskAction());
group.add(new StudyNextStudyTaskAction());
group.add(new StudyRefreshTaskFileAction());
group.add(new StudyShowHintAction());
group.add(new StudyRunAction());
group.add(new StudyEditInputAction());
return group;
}
return null;
}
}