mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fix problem with study task description tool window blinking on task change
* Create separate methods for tool window initialization and tool window update * On update only set new text in study tool window browser window
This commit is contained in:
+1
-1
@@ -102,7 +102,7 @@ public class StudyProjectComponent implements ProjectComponent {
|
||||
studyToolWindow.show(null);
|
||||
}
|
||||
if (progressToolWindow != null) {
|
||||
StudyUtils.updateToolWindows(myProject);
|
||||
StudyUtils.initToolWindows(myProject);
|
||||
progressToolWindow.show(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-27
@@ -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) {
|
||||
|
||||
+8
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user