Use StudyToolWindowConfigurator to provide fileEditorManagerListener in StudyToolWindow

This commit is contained in:
Valentina Kiryushkina
2016-02-03 21:39:29 +03:00
parent c28d98c0e3
commit e18c094269
9 changed files with 101 additions and 91 deletions
@@ -1,3 +0,0 @@
browser.action.back=Click to go back
browser.action.forward=Click to go forward
browser.action.open.link=Click to open link in browser
@@ -0,0 +1,5 @@
browser.action.back=Click to go back
browser.action.forward=Click to go forward
browser.action.open.link=Click to open link in browser
empty.task.text="Please, open any task to see task description"
@@ -17,7 +17,7 @@ public class StudyBundle {
private static Reference<ResourceBundle> ourBundle;
@NonNls
private static final String BUNDLE = "StudyBundle";
private static final String BUNDLE = "bundle.StudyBundle";
private StudyBundle() {
}
@@ -2,8 +2,11 @@ package com.jetbrains.edu.learning;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.fileEditor.FileEditorManager;
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.*;
@@ -13,8 +16,10 @@ public interface StudyToolWindowConfigurator {
@NotNull
DefaultActionGroup getActionGroup(Project project);
HashMap<String, JPanel> getAdditionalPanels(Project project);
HashMap<String, JPanel> getAdditionalPanels(Project project);
FileEditorManagerListener getFileEditorManagerListener(@NotNull final Project project, @NotNull final StudyToolWindow toolWindow);
boolean accept(@NotNull final Project project);
@@ -43,6 +43,7 @@ import com.jetbrains.edu.learning.editor.StudyEditor;
import com.jetbrains.edu.learning.run.StudyExecutor;
import com.jetbrains.edu.learning.run.StudyTestRunner;
import com.jetbrains.edu.learning.ui.StudyProgressToolWindowFactory;
import com.jetbrains.edu.learning.ui.StudyToolWindow;
import com.jetbrains.edu.learning.ui.StudyToolWindowFactory;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -394,4 +395,27 @@ public class StudyUtils {
}
return false;
}
@Nullable
public static String getTaskTextFromTask(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
if (task == null) {
return null;
}
String text = task.getText();
if (text != null) {
return text;
}
if (taskDirectory != null) {
VirtualFile taskTextFile = taskDirectory.findChild(EduNames.TASK_HTML);
if (taskTextFile != null) {
try {
return FileUtil.loadTextAndClose(taskTextFile.getInputStream());
}
catch (IOException e) {
LOG.info(e);
}
}
}
return null;
}
}
@@ -22,20 +22,18 @@ import com.intellij.openapi.actionSystem.DataProvider;
import com.intellij.openapi.actionSystem.DefaultActionGroup;
import com.intellij.openapi.diagnostic.Logger;
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.ui.SimpleToolWindowPanel;
import com.intellij.openapi.util.io.FileUtil;
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.EduNames;
import com.jetbrains.edu.courseFormat.Course;
import com.jetbrains.edu.courseFormat.Task;
import com.jetbrains.edu.courseFormat.TaskFile;
import com.jetbrains.edu.learning.StudyBundle;
import com.jetbrains.edu.learning.StudyTaskManager;
import com.jetbrains.edu.learning.StudyToolWindowConfigurator;
import com.jetbrains.edu.learning.StudyUtils;
@@ -44,12 +42,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.IOException;
import java.util.Map;
public class StudyToolWindow extends SimpleToolWindowPanel implements DataProvider, Disposable {
private static final Logger LOG = Logger.getInstance(StudyToolWindow.class);
private static final String EMPTY_TASK_TEXT = "Please, open any task to see task description";
private static final String EMPTY_TASK_TEXT = StudyBundle.message("empty.task.text");
private static final String TASK_INFO_ID = "taskInfo";
private final JBCardLayout myCardLayout;
private final JPanel myContentPanel;
@@ -75,7 +72,9 @@ public class StudyToolWindow extends SimpleToolWindowPanel implements DataProvid
setContent(mySplitPane);
final FileEditorManagerListener listener = new StudyFileEditorManagerListener(project, this);
StudyToolWindowConfigurator configurator = getStudyToolWindowConfigurator(project);
assert configurator != null;
final FileEditorManagerListener listener = configurator.getFileEditorManagerListener(project, this);
project.getMessageBus().connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, listener);
}
@@ -113,7 +112,7 @@ public class StudyToolWindow extends SimpleToolWindowPanel implements DataProvid
}
final Task task = taskFile.getTask();
if (task != null) {
return getTaskTextFromTask(task, task.getTaskDir(project));
return StudyUtils.getTaskTextFromTask(task, task.getTaskDir(project));
}
return null;
}
@@ -161,33 +160,10 @@ public class StudyToolWindow extends SimpleToolWindowPanel implements DataProvid
return group;
}
private void setTaskText(String text) {
public void setTaskText(String text) {
myBrowserWindow.loadContent(text);
}
@Nullable
private static String getTaskTextFromTask(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
if (task == null) {
return null;
}
String text = task.getText();
if (text != null) {
return text;
}
if (taskDirectory != null) {
VirtualFile taskTextFile = taskDirectory.findChild(EduNames.TASK_HTML);
if (taskTextFile != null) {
try {
return FileUtil.loadTextAndClose(taskTextFile.getInputStream());
}
catch (IOException e) {
LOG.info(e);
}
}
}
return null;
}
@Nullable
private static StudyToolWindowConfigurator getStudyToolWindowConfigurator(@NotNull Project project) {
StudyToolWindowConfigurator[] extensions = StudyToolWindowConfigurator.EP_NAME.getExtensions();
@@ -198,56 +174,4 @@ public class StudyToolWindow extends SimpleToolWindowPanel implements DataProvid
}
return null;
}
static class StudyFileEditorManagerListener implements FileEditorManagerListener {
private Project myProject;
private StudyToolWindow myStudyToolWindow;
StudyFileEditorManagerListener(@NotNull final Project project, StudyToolWindow studyToolWindow) {
myProject = project;
myStudyToolWindow = studyToolWindow;
}
@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) {
myStudyToolWindow.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(myProject, file);
if (taskFile != null) {
return taskFile.getTask();
}
else {
return null;
}
}
private void setTaskText(@Nullable final Task task, @Nullable final VirtualFile taskDirectory) {
String text = getTaskTextFromTask(task, taskDirectory);
if (text == null) {
myStudyToolWindow.setTaskText(EMPTY_TASK_TEXT);
return;
}
myStudyToolWindow.setTaskText(text);
}
}
}
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
@@ -1,11 +1,19 @@
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.*;
@@ -32,6 +40,53 @@ public class PyStudyToolWindowConfigurator implements StudyToolWindowConfigurato
return new HashMap<>();
}
@Override
public FileEditorManagerListener getFileEditorManagerListener(@NotNull Project project,
@NotNull StudyToolWindow studyToolWindow) {
return new FileEditorManagerListener() {
@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(StudyBundle.message("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(StudyBundle.message("empty.task.text"));
return;
}
studyToolWindow.setTaskText(text);
}
};
}
@Override
public boolean accept(@NotNull Project project) {
Course course = StudyTaskManager.getInstance(project).getCourse();
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />