package com.jetbrains.edu.coursecreator.actions;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.ToggleAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.jetbrains.edu.coursecreator.CCUtils;
import com.jetbrains.edu.learning.StudyTaskManager;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.courseFormat.tasks.Task;
import com.jetbrains.edu.learning.ui.StudyToolWindow;
import org.jetbrains.annotations.NotNull;
public class CCEditTaskTextAction extends ToggleAction implements DumbAware {
private static final Logger LOG = Logger.getInstance(CCEditTaskTextAction.class);
private static final String EDITING_MODE = "Editing Mode";
public CCEditTaskTextAction() {
super(EDITING_MODE, EDITING_MODE, AllIcons.Modules.Edit);
}
@Override
public boolean isSelected(AnActionEvent e) {
Project project = e.getProject();
if (project == null) {
return false;
}
return StudyTaskManager.getInstance(project).getToolWindowMode() == StudyToolWindow.StudyToolWindowMode.EDITING;
}
@Override
public void setSelected(AnActionEvent e, boolean state) {
Project project = e.getProject();
if (project == null) {
return;
}
StudyToolWindow window = StudyUtils.getStudyToolWindow(project);
if (window == null) {
return;
}
Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
if (editor == null) {
return;
}
VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(editor.getDocument());
if (virtualFile == null) {
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
return;
}
Task task = StudyUtils.getTaskForFile(project, virtualFile);
if (task == null) {
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
return;
}
VirtualFile taskDir = task.getTaskDir(project);
if (taskDir == null) {
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
return;
}
VirtualFile taskTextFile = StudyUtils.findTaskDescriptionVirtualFile(project, taskDir);
if (taskTextFile == null) {
LOG.info("Failed to find task.html");
StudyTaskManager.getInstance(project).setTurnEditingMode(true);
return;
}
Document document = FileDocumentManager.getInstance().getDocument(taskTextFile);
if (!state) {
if (document != null) {
FileDocumentManager.getInstance().saveDocument(document);
}
window.leaveEditingMode(project);
return;
}
window.enterEditingMode(taskTextFile, project);
}
@Override
public void update(@NotNull AnActionEvent e) {
Project project = e.getProject();
if (project == null) {
return;
}
if (!CCUtils.isCourseCreator(project)) {
e.getPresentation().setEnabledAndVisible(false);
}
}
}