mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Extract StudyBaseToolWindowConfigurator, add javadocs for configurator and do cleanup
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
package com.jetbrains.edu.learning;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.jetbrains.edu.courseFormat.Task;
|
||||
import com.jetbrains.edu.courseFormat.TaskFile;
|
||||
import com.jetbrains.edu.learning.actions.*;
|
||||
import com.jetbrains.edu.learning.ui.StudyToolWindow;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public abstract class StudyBaseToolWindowConfigurator implements StudyToolWindowConfigurator {
|
||||
@NotNull
|
||||
@Override
|
||||
public DefaultActionGroup getActionGroup(Project project) {
|
||||
final DefaultActionGroup group = new DefaultActionGroup();
|
||||
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;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Map<String, JPanel> getAdditionalPanels(Project project) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileEditorManagerListener getFileEditorManagerListener(@NotNull Project project, @NotNull StudyToolWindow toolWindow) {
|
||||
|
||||
return new FileEditorManagerListener() {
|
||||
|
||||
private static final String EMPTY_TASK_TEXT = "Please, open any task to see task description";
|
||||
|
||||
@Override
|
||||
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
Task task = getTask(file);
|
||||
setTaskText(task, file.getParent());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
toolWindow.setTaskText(EMPTY_TASK_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
|
||||
VirtualFile file = event.getNewFile();
|
||||
if (file != null) {
|
||||
Task task = getTask(file);
|
||||
setTaskText(task, file.getParent());
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Task getTask(@NotNull VirtualFile file) {
|
||||
TaskFile taskFile = StudyUtils.getTaskFile(project, file);
|
||||
if (taskFile != null) {
|
||||
return taskFile.getTask();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void setTaskText(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
|
||||
String text = StudyUtils.getTaskTextFromTask(task, taskDirectory);
|
||||
if (text == null) {
|
||||
toolWindow.setTaskText(EMPTY_TASK_TEXT);
|
||||
return;
|
||||
}
|
||||
toolWindow.setTaskText(text);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
+19
-5
@@ -4,24 +4,38 @@ import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.jetbrains.edu.learning.ui.StudyToolWindow;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Map;
|
||||
|
||||
public interface StudyToolWindowConfigurator {
|
||||
ExtensionPointName<StudyToolWindowConfigurator> EP_NAME = ExtensionPointName.create("Edu.studyToolWindowConfigurator");
|
||||
|
||||
|
||||
/**
|
||||
* Provide action group that should be placed on the tool window toolbar.
|
||||
* @param project
|
||||
* @return
|
||||
*/
|
||||
@NotNull
|
||||
DefaultActionGroup getActionGroup(Project project);
|
||||
|
||||
|
||||
/**
|
||||
* Provide panels, that could be added to Task tool window.
|
||||
* @param project
|
||||
* @return Map from panel id, i.e. "Task description", to panel itself.
|
||||
*/
|
||||
@NotNull
|
||||
HashMap<String, JPanel> getAdditionalPanels(Project project);
|
||||
Map<String, JPanel> getAdditionalPanels(Project project);
|
||||
|
||||
@NotNull
|
||||
FileEditorManagerListener getFileEditorManagerListener(@NotNull final Project project, @NotNull final StudyToolWindow toolWindow);
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @return parameter for CodeMirror script. Available languages: @see <@linktourl http://codemirror.net/mode/>
|
||||
*/
|
||||
@NotNull String getDefaultHighlightingMode();
|
||||
|
||||
boolean accept(@NotNull final Project project);
|
||||
|
||||
+4
-17
@@ -28,7 +28,6 @@ import com.intellij.openapi.ui.SimpleToolWindowPanel;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.JBCardLayout;
|
||||
import com.intellij.ui.OnePixelSplitter;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.jetbrains.edu.courseFormat.Course;
|
||||
import com.jetbrains.edu.courseFormat.Task;
|
||||
@@ -37,7 +36,6 @@ import com.jetbrains.edu.learning.StudyTaskManager;
|
||||
import com.jetbrains.edu.learning.StudyToolWindowConfigurator;
|
||||
import com.jetbrains.edu.learning.StudyUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.awt.*;
|
||||
@@ -72,16 +70,16 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
|
||||
setContent(mySplitPane);
|
||||
|
||||
StudyToolWindowConfigurator configurator = getStudyToolWindowConfigurator(project);
|
||||
StudyToolWindowConfigurator configurator = StudyUtils.getConfigurator(project);
|
||||
assert configurator != null;
|
||||
final FileEditorManagerListener listener = configurator.getFileEditorManagerListener(project, this);
|
||||
project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, listener);
|
||||
}
|
||||
|
||||
private void addAdditionalPanels(Project project) {
|
||||
StudyToolWindowConfigurator configurator = getStudyToolWindowConfigurator(project);
|
||||
StudyToolWindowConfigurator configurator = StudyUtils.getConfigurator(project);
|
||||
assert configurator != null;
|
||||
HashMap<String, JPanel> panels = configurator.getAdditionalPanels(project);
|
||||
Map<String, JPanel> panels = configurator.getAdditionalPanels(project);
|
||||
for (Map.Entry<String, JPanel> entry: panels.entrySet()) {
|
||||
myContentPanel.add(entry.getKey(), entry.getValue());
|
||||
}
|
||||
@@ -155,22 +153,11 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D
|
||||
LOG.warn("Course is null");
|
||||
return new DefaultActionGroup();
|
||||
}
|
||||
StudyToolWindowConfigurator configurator = getStudyToolWindowConfigurator(project);
|
||||
StudyToolWindowConfigurator configurator = StudyUtils.getConfigurator(project);
|
||||
assert configurator != null;
|
||||
|
||||
return configurator.getActionGroup(project);
|
||||
}
|
||||
|
||||
public abstract void setTaskText(String text) ;
|
||||
|
||||
@Nullable
|
||||
private static StudyToolWindowConfigurator getStudyToolWindowConfigurator(@NotNull Project project) {
|
||||
StudyToolWindowConfigurator[] extensions = StudyToolWindowConfigurator.EP_NAME.getExtensions();
|
||||
for (StudyToolWindowConfigurator extension: extensions) {
|
||||
if (extension.accept(project)) {
|
||||
return extension;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+6
-79
@@ -1,95 +1,20 @@
|
||||
package com.jetbrains.edu.learning;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.jetbrains.edu.courseFormat.Course;
|
||||
import com.jetbrains.edu.courseFormat.Task;
|
||||
import com.jetbrains.edu.courseFormat.TaskFile;
|
||||
import com.jetbrains.edu.learning.actions.*;
|
||||
import com.jetbrains.edu.learning.ui.StudyToolWindow;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class PyStudyToolWindowConfigurator implements StudyToolWindowConfigurator {
|
||||
public class PyStudyToolWindowConfigurator extends StudyBaseToolWindowConfigurator {
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DefaultActionGroup getActionGroup(Project project) {
|
||||
final DefaultActionGroup group = new DefaultActionGroup();
|
||||
final DefaultActionGroup group = super.getActionGroup(project);
|
||||
group.add(new PyStudyCheckAction());
|
||||
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;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public HashMap<String, JPanel> getAdditionalPanels(Project project) {
|
||||
return new HashMap<>();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileEditorManagerListener getFileEditorManagerListener(@NotNull Project project,
|
||||
@NotNull StudyToolWindow studyToolWindow) {
|
||||
return new FileEditorManagerListener() {
|
||||
|
||||
private static final String EMPTY_TASK_TEXT = "Please, open any task to see task description";
|
||||
|
||||
@Override
|
||||
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
Task task = getTask(file);
|
||||
setTaskText(task, file.getParent());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
|
||||
studyToolWindow.setTaskText(EMPTY_TASK_TEXT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
|
||||
VirtualFile file = event.getNewFile();
|
||||
if (file != null) {
|
||||
Task task = getTask(file);
|
||||
setTaskText(task, file.getParent());
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private Task getTask(@NotNull VirtualFile file) {
|
||||
TaskFile taskFile = StudyUtils.getTaskFile(project, file);
|
||||
if (taskFile != null) {
|
||||
return taskFile.getTask();
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private void setTaskText(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
|
||||
String text = StudyUtils.getTaskTextFromTask(task, taskDirectory);
|
||||
if (text == null) {
|
||||
studyToolWindow.setTaskText(EMPTY_TASK_TEXT);
|
||||
return;
|
||||
}
|
||||
studyToolWindow.setTaskText(text);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getDefaultHighlightingMode() {
|
||||
@@ -98,7 +23,9 @@ public class PyStudyToolWindowConfigurator implements StudyToolWindowConfigurato
|
||||
|
||||
@Override
|
||||
public boolean accept(@NotNull Project project) {
|
||||
Course course = StudyTaskManager.getInstance(project).getCourse();
|
||||
return course != null && course.getLanguage().equals("Python") && course.getCourseType().equals("PyCharm");
|
||||
StudyTaskManager taskManager = StudyTaskManager.getInstance(project);
|
||||
if (taskManager == null) return false;
|
||||
Course course = taskManager.getCourse();
|
||||
return course != null && "Python".equals(course.getLanguage()) && "PyCharm".equals(course.getCourseType());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user