diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java index 45f033e937fd..1dc14d36bb51 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyProjectComponent.java @@ -102,7 +102,7 @@ public class StudyProjectComponent implements ProjectComponent { studyToolWindow.show(null); } if (progressToolWindow != null) { - StudyUtils.updateToolWindows(myProject); + StudyUtils.initToolWindows(myProject); progressToolWindow.show(null); } } diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java index a1ed979c5309..0f68f81654ef 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/StudyUtils.java @@ -18,6 +18,7 @@ import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.impl.DocumentImpl; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditor; +import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; @@ -26,26 +27,30 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.ui.JBColor; import com.intellij.ui.awt.RelativePoint; +import com.intellij.ui.content.Content; import com.intellij.util.ui.UIUtil; import com.jetbrains.edu.EduAnswerPlaceholderDeleteHandler; import com.jetbrains.edu.EduAnswerPlaceholderPainter; import com.jetbrains.edu.EduNames; import com.jetbrains.edu.EduUtils; import com.jetbrains.edu.courseFormat.*; -import com.jetbrains.edu.learning.editor.StudyEditor; import com.jetbrains.edu.learning.checker.StudyExecutor; import com.jetbrains.edu.learning.checker.StudyTestRunner; +import com.jetbrains.edu.learning.editor.StudyEditor; 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; +import javax.swing.*; import java.awt.*; import java.io.*; import java.util.Collection; @@ -56,6 +61,7 @@ public class StudyUtils { } private static final Logger LOG = Logger.getInstance(StudyUtils.class.getName()); + private static final String EMPTY_TASK_TEXT = "Please, open any task to see task description"; public static void closeSilently(@Nullable final Closeable stream) { if (stream != null) { @@ -122,15 +128,42 @@ public class StudyUtils { } public static void updateToolWindows(@NotNull final Project project) { + final ToolWindowManager windowManager = ToolWindowManager.getInstance(project); + StudyToolWindowFactory factory = new StudyToolWindowFactory(); + factory.update(project); + + createProgressToolWindowContent(project, windowManager); + } + + public static void initToolWindows(@NotNull final Project project) { final ToolWindowManager windowManager = ToolWindowManager.getInstance(project); windowManager.getToolWindow(StudyToolWindowFactory.STUDY_TOOL_WINDOW).getContentManager().removeAllContents(false); StudyToolWindowFactory factory = new StudyToolWindowFactory(); factory.createToolWindowContent(project, windowManager.getToolWindow(StudyToolWindowFactory.STUDY_TOOL_WINDOW)); + createProgressToolWindowContent(project, windowManager); + } + + private static void createProgressToolWindowContent(@NotNull Project project, ToolWindowManager windowManager) { windowManager.getToolWindow(StudyProgressToolWindowFactory.ID).getContentManager().removeAllContents(false); StudyProgressToolWindowFactory windowFactory = new StudyProgressToolWindowFactory(); windowFactory.createToolWindowContent(project, windowManager.getToolWindow(StudyProgressToolWindowFactory.ID)); } + + @Nullable + public static StudyToolWindow getStudyToolWindow(@NotNull final Project project) { + ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(StudyToolWindowFactory.STUDY_TOOL_WINDOW); + if (toolWindow != null) { + Content[] contents = toolWindow.getContentManager().getContents(); + for (Content content: contents) { + JComponent component = content.getComponent(); + if (component != null && component instanceof StudyToolWindow) { + return (StudyToolWindow)component; + } + } + } + return null; + } public static void deleteFile(@NotNull final VirtualFile file) { try { @@ -427,4 +460,23 @@ public class StudyUtils { } return null; } + + public static String getTaskText(@NotNull final Project project) { + VirtualFile[] files = FileEditorManager.getInstance(project).getSelectedFiles(); + TaskFile taskFile = null; + for (VirtualFile file : files) { + taskFile = getTaskFile(project, file); + if (taskFile != null) { + break; + } + } + if (taskFile == null) { + return EMPTY_TASK_TEXT; + } + final Task task = taskFile.getTask(); + if (task != null) { + return getTaskTextFromTask(task, task.getTaskDir(project)); + } + return null; + } } 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 c03a621624e7..e77592c7e355 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 @@ -21,17 +21,13 @@ import com.intellij.openapi.actionSystem.ActionToolbar; 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.FileEditorManagerListener; import com.intellij.openapi.project.Project; 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.ui.JBUI; import com.jetbrains.edu.courseFormat.Course; -import com.jetbrains.edu.courseFormat.Task; -import com.jetbrains.edu.courseFormat.TaskFile; import com.jetbrains.edu.learning.StudyTaskManager; import com.jetbrains.edu.learning.StudyToolWindowConfigurator; import com.jetbrains.edu.learning.StudyUtils; @@ -43,7 +39,6 @@ import java.util.Map; public abstract 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 TASK_INFO_ID = "taskInfo"; private final JBCardLayout myCardLayout; private final JPanel myContentPanel; @@ -57,7 +52,7 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D } public void init(Project project) { - String taskText = getTaskText(project); + String taskText = StudyUtils.getTaskText(project); if (taskText == null) return; JPanel toolbarPanel = createToolbarPanel(project); @@ -117,27 +112,8 @@ public abstract class StudyToolWindow extends SimpleToolWindowPanel implements D public JPanel getContentPanel() { return myContentPanel; } - - - private static String getTaskText(@NotNull final Project project) { - VirtualFile[] files = FileEditorManager.getInstance(project).getSelectedFiles(); - TaskFile taskFile = null; - for (VirtualFile file : files) { - taskFile = StudyUtils.getTaskFile(project, file); - if (taskFile != null) { - break; - } - } - if (taskFile == null) { - return EMPTY_TASK_TEXT; - } - final Task task = taskFile.getTask(); - if (task != null) { - return StudyUtils.getTaskTextFromTask(task, task.getTaskDir(project)); - } - return null; - } - + + public abstract JComponent createTaskInfoPanel(String taskText, Project project); private static JPanel createToolbarPanel(@NotNull final Project project) { diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindowFactory.java b/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindowFactory.java index c0ededad3dc6..2394f32158cb 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindowFactory.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/ui/StudyToolWindowFactory.java @@ -10,6 +10,7 @@ import com.intellij.ui.content.ContentManager; import com.jetbrains.edu.courseFormat.Course; import com.jetbrains.edu.learning.StudyProjectComponent; import com.jetbrains.edu.learning.StudyTaskManager; +import com.jetbrains.edu.learning.StudyUtils; import icons.InteractiveLearningIcons; import org.jetbrains.annotations.NotNull; @@ -39,4 +40,11 @@ public class StudyToolWindowFactory implements ToolWindowFactory, DumbAware { } } + public void update(Project project) { + final StudyToolWindow studyToolWindow = StudyUtils.getStudyToolWindow(project); + if (studyToolWindow != null) { + String taskText = StudyUtils.getTaskText(project); + studyToolWindow.setTaskText(taskText); + } + } }