import com.intellij.refactoring.move.MoveCallback;
import com.intellij.refactoring.move.MoveHandlerDelegate;
import com.intellij.util.Function;
+ import com.jetbrains.edu.coursecreator.CCUtils;
import com.jetbrains.edu.coursecreator.ui.CCMoveStudyItemDialog;
+ import com.jetbrains.edu.learning.StudyTaskManager;
++import com.jetbrains.edu.coursecreator.CCUtils;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.core.EduUtils;
import com.jetbrains.edu.learning.courseFormat.Course;
DataContext dataContext,
@Nullable PsiReference reference,
Editor editor) {
- return CCProjectService.getInstance(project).getCourse() != null;
- return true;
++ return CCUtils.isCourseCreator(project);
}
}
DataContext dataContext,
@Nullable PsiReference reference,
Editor editor) {
- return CCProjectService.getInstance(project).getCourse() != null;
- return true;
++ return CCUtils.isCourseCreator(project);
}
}
<with attribute="implementationClass" implements="com.jetbrains.edu.learning.StudyLanguageManager"/>
</extensionPoint>
<extensionPoint qualifiedName="Edu.studyPluginConfigurator" interface="com.jetbrains.edu.learning.StudyPluginConfigurator"/>
+ <extensionPoint qualifiedName="Edu.studyActionsProvider" interface="com.jetbrains.edu.learning.StudyActionsProvider"/>
<extensionPoint qualifiedName="Edu.studyTwitterPluginConfigurator" interface="com.jetbrains.edu.learning.StudyTwitterPluginConfigurator"/>
+ <extensionPoint qualifiedName="Edu.studyActionListener" interface="com.jetbrains.edu.learning.StudyActionListener"/>
+ <extensionPoint qualifiedName="Edu.optionsProvider" beanClass="com.jetbrains.edu.learning.settings.StudyOptionsProviderEP">>
+ <with attribute="instance" implements="com.jetbrains.edu.learning.settings.StudyOptionsProvider"/>
+ </extensionPoint>
</extensionPoints>
<actions>
StudyAfterCheckAction[] getAfterCheckActions();
@NotNull String getLanguageScriptUrl();
-
+
- @Nullable
- ModifiableSettingsPanel getSettingsPanel();
-
boolean accept(@NotNull final Project project);
}
public Map<TaskFile, StudyStatus> myTaskStatusMap = new HashMap<>();
public Map<Task, List<UserTest>> myUserTests = new HashMap<>();
public List<String> myInvisibleFiles = new ArrayList<>();
+ public boolean myShouldUseJavaFx = StudyUtils.hasJavaFx();
+ private StudyToolWindow.StudyToolWindowMode myToolWindowMode = StudyToolWindow.StudyToolWindowMode.TEXT;
+ private boolean myTurnEditingMode = false;
-
private StudyTaskManager() {
}
return myInvisibleFiles.contains(path);
}
+ public boolean shouldUseJavaFx() {
+ return myShouldUseJavaFx;
+ }
+
+ public void setShouldUseJavaFx(boolean shouldUseJavaFx) {
+ this.myShouldUseJavaFx = shouldUseJavaFx;
+ }
++
+ public StudyToolWindow.StudyToolWindowMode getToolWindowMode() {
+ return myToolWindowMode;
+ }
+
+ public void setToolWindowMode(StudyToolWindow.StudyToolWindowMode toolWindowMode) {
+ myToolWindowMode = toolWindowMode;
+ }
+
+ public boolean isTurnEditingMode() {
+ return myTurnEditingMode;
+ }
+
+ public void setTurnEditingMode(boolean turnEditingMode) {
+ myTurnEditingMode = turnEditingMode;
+ }
}
}
}
- @Nullable
- public static Document getPatternDocument(@NotNull final TaskFile taskFile, String name) {
- VirtualFile patternFile = getPatternFile(taskFile, name);
- if (patternFile == null) {
- return null;
- }
- return FileDocumentManager.getInstance().getDocument(patternFile);
- }
+
@Nullable
- public static Document getPatternDocument(@NotNull final TaskFile taskFile, String name) {
+ public static VirtualFile getPatternFile(@NotNull TaskFile taskFile, String name) {
Task task = taskFile.getTask();
String lessonDir = EduNames.LESSON + String.valueOf(task.getLesson().getIndex());
String taskDir = EduNames.TASK + String.valueOf(task.getIndex());
if (patternFile == null) {
return null;
}
+ return patternFile;
+ }
+
++ @Nullable
++ public static Document getPatternDocument(@NotNull final TaskFile taskFile, String name) {
++ VirtualFile patternFile = getPatternFile(taskFile, name);
++ if (patternFile == null) {
++ return null;
++ }
+ return FileDocumentManager.getInstance().getDocument(patternFile);
+ }
+
public static boolean isRenameableOrMoveable(@NotNull final Project project, @NotNull final Course course, @NotNull final PsiElement element) {
if (element instanceof PsiFile) {
VirtualFile virtualFile = ((PsiFile)element).getVirtualFile();
}
return null;
}
-
+ @Nullable
+ public static TaskFile getSelectedTaskFile(@NotNull Project project) {
+ VirtualFile[] files = FileEditorManager.getInstance(project).getSelectedFiles();
+ TaskFile taskFile = null;
+ for (VirtualFile file : files) {
+ taskFile = getTaskFile(project, file);
+ if (taskFile != null) {
+ break;
+ }
+ }
+ return taskFile;
+ }
- public static void update(Project project) {
+ public static void updateStudyToolWindow(Project project) {
final StudyToolWindow studyToolWindow = getStudyToolWindow(project);
if (studyToolWindow != null) {
String taskText = getTaskText(project);
}
}
- public static boolean isStudyProject(Project project) {
+ public static boolean isStudyProject(@NotNull Project project) {
return StudyTaskManager.getInstance(project).getCourse() != null;
}
-
+
+ public static boolean hasJavaFx() {
+ try {
+ Class.forName("javafx.application.Platform");
+ return true;
+ }
+ catch (ClassNotFoundException e) {
+ return false;
+ }
+ }
++
+ @Nullable
+ public static Task getTask(@NotNull Project project, @NotNull VirtualFile taskVF) {
+ Course course = StudyTaskManager.getInstance(project).getCourse();
+ if (course == null) {
+ return null;
+ }
+ VirtualFile lessonVF = taskVF.getParent();
+ if (lessonVF == null) {
+ return null;
+ }
+ Lesson lesson = course.getLesson(lessonVF.getName());
+ if (lesson == null) {
+ return null;
+ }
+ return lesson.getTask(taskVF.getName());
+ }
+
+ @Nullable
+ public static VirtualFile getTaskDir(@NotNull VirtualFile taskFile) {
+ VirtualFile parent = taskFile.getParent();
+ if (parent == null) {
+ return null;
+ }
+ String name = parent.getName();
+ if (name.contains(EduNames.TASK)) {
+ return parent;
+ }
+ if (EduNames.SRC.equals(name)) {
+ return parent.getParent();
+ }
+ return null;
+ }
}
if (project == null) {
return;
}
- ApplicationManager.getApplication().invokeLater(
- new Runnable() {
- @Override
- public void run() {
- ApplicationManager.getApplication().runWriteAction(new Runnable() {
- @Override
- public void run() {
- final Document document = editor.getDocument();
- final VirtualFile openedFile = FileDocumentManager.getInstance().getFile(document);
- if (openedFile != null) {
- final TaskFile taskFile = StudyUtils.getTaskFile(project, openedFile);
- if (taskFile != null) {
- WolfTheProblemSolver.getInstance(project).clearProblems(openedFile);
- final ToolWindow studyToolWindow = ToolWindowManager.getInstance(project).getToolWindow(StudyToolWindowFactory.STUDY_TOOL_WINDOW);
- if (studyToolWindow != null) {
- StudyUtils.updateToolWindows(project);
- studyToolWindow.show(null);
- }
- Course course = StudyTaskManager.getInstance(project).getCourse();
- if (course == null) {
- return;
- }
- StudyEditor.addDocumentListener(document, new EduDocumentListener(taskFile, true));
+
- if (!taskFile.getAnswerPlaceholders().isEmpty()) {
- StudyNavigator.navigateToFirstAnswerPlaceholder(editor, taskFile);
- boolean isStudyProject = EduNames.STUDY.equals(course.getCourseType());
- StudyUtils.drawAllWindows(editor, taskFile);
- if (isStudyProject) {
- editor.addEditorMouseListener(new WindowSelectionListener(taskFile));
- }
- }
- }
- }
- }
- });
+ final Document document = editor.getDocument();
+ final VirtualFile openedFile = FileDocumentManager.getInstance().getFile(document);
+ if (openedFile != null) {
+ final TaskFile taskFile = StudyUtils.getTaskFile(project, openedFile);
+ if (taskFile != null) {
+ WolfTheProblemSolver.getInstance(project).clearProblems(openedFile);
+ final ToolWindow studyToolWindow = ToolWindowManager.getInstance(project).getToolWindow(StudyToolWindowFactory.STUDY_TOOL_WINDOW);
+ if (studyToolWindow != null) {
+ StudyUtils.updateToolWindows(project);
+ studyToolWindow.show(null);
+ }
++ Course course = StudyTaskManager.getInstance(project).getCourse();
++ if (course == null) {
++ return;
++ }
++
++ StudyEditor.addDocumentListener(document, new EduDocumentListener(taskFile, true));
++
+ if (!taskFile.getAnswerPlaceholders().isEmpty()) {
+ StudyNavigator.navigateToFirstAnswerPlaceholder(editor, taskFile);
- StudyEditor.addDocumentListener(document, new EduDocumentListener(taskFile));
++ boolean isStudyProject = EduNames.STUDY.equals(course.getCourseType());
+ StudyUtils.drawAllWindows(editor, taskFile);
- editor.addEditorMouseListener(new WindowSelectionListener(taskFile));
++ if (isStudyProject) {
++ editor.addEditorMouseListener(new WindowSelectionListener(taskFile));
++ }
}
}
- );
+ }
}
@Override
}
@Override
- public JComponent createTaskInfoPanel(String taskText, Project project) {
+ public JComponent createTaskInfoPanel(Project project) {
myTaskTextPane = new JTextPane();
+ final JBScrollPane scrollPane = new JBScrollPane(myTaskTextPane);
myTaskTextPane.setContentType(new HTMLEditorKit().getContentType());
final EditorColorsScheme editorColorsScheme = EditorColorsManager.getInstance().getGlobalScheme();
int fontSize = editorColorsScheme.getEditorFontSize();
if (!UIUtil.isUnderDarcula()) {
myTaskTextPane.setBackground(EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground());
}
- myTaskTextPane.setBorder(new EmptyBorder(15, 20, 0, 100));
+ myTaskTextPane.setBorder(new EmptyBorder(20, 20, 0, 10));
- myTaskTextPane.setText(taskText);
myTaskTextPane.addHyperlinkListener(BrowserHyperlinkListener.INSTANCE);
- return myTaskTextPane;
+ return scrollPane;
}
- public void setTaskText(String text) {
+ public void setText(String text) {
myTaskTextPane.setText(text);
}
}