mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Use StudyToolWindowConfigurator to provide fileEditorManagerListener in StudyToolWindow
This commit is contained in:
@@ -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() {
|
||||
}
|
||||
|
||||
+7
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+7
-83
@@ -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,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" />
|
||||
|
||||
+55
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user