blob: 0f8c5a53511aa1e69cc34c4881d443e164edf0b8 [file] [log] [blame]
package com.jetbrains.python.edu.ui;
import com.intellij.openapi.project.DumbAware;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindow;
import com.intellij.openapi.wm.ToolWindowFactory;
import com.intellij.ui.JBColor;
import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentFactory;
import com.intellij.util.ui.UIUtil;
import com.jetbrains.python.edu.StudyTaskManager;
import com.jetbrains.python.edu.actions.StudyReloadCourseAction;
import com.jetbrains.python.edu.course.Course;
import com.jetbrains.python.edu.course.Lesson;
import com.jetbrains.python.edu.course.LessonInfo;
import com.jetbrains.python.edu.course.StudyStatus;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
public class StudyToolWindowFactory implements ToolWindowFactory, DumbAware {
public static final String STUDY_TOOL_WINDOW = "Course Description";
JPanel contentPanel = new JPanel();
@Override
public void createToolWindowContent(@NotNull final Project project, @NotNull final ToolWindow toolWindow) {
if (StudyTaskManager.getInstance(project).getCourse() != null) {
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.PAGE_AXIS));
contentPanel.add(Box.createRigidArea(new Dimension(10, 0)));
StudyTaskManager taskManager = StudyTaskManager.getInstance(project);
Course course = taskManager.getCourse();
if (course == null) {
return;
}
String courseName = UIUtil.toHtml("<h1>" + course.getName() + "</h1>", 10);
String description = UIUtil.toHtml(course.getDescription(), 5);
String author = taskManager.getCourse().getAuthor();
String authorLabel = UIUtil.toHtml("<b>Author: </b>" + author, 5);
contentPanel.add(new JLabel(courseName));
contentPanel.add(new JLabel(authorLabel));
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
contentPanel.add(new JLabel(description));
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
JButton reloadCourseButton = new JButton("reload course");
reloadCourseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
StudyReloadCourseAction.reloadCourse(project);
}
});
contentPanel.add(reloadCourseButton);
int taskNum = 0;
int taskSolved = 0;
int lessonsCompleted = 0;
List<Lesson> lessons = course.getLessons();
for (Lesson lesson : lessons) {
if (lesson.getStatus() == StudyStatus.Solved) {
lessonsCompleted++;
}
LessonInfo lessonInfo = lesson.getLessonInfo();
taskNum += lessonInfo.getTaskNum();
taskSolved += lessonInfo.getTaskSolved();
}
String completedLessons = String.format("%d of %d lessons completed", lessonsCompleted, course.getLessons().size());
String completedTasks = String.format("%d of %d tasks completed", taskSolved, taskNum);
String tasksLeft = String.format("%d of %d tasks left", taskNum - taskSolved, taskNum);
contentPanel.add(Box.createVerticalStrut(10));
addStatistics(completedLessons);
addStatistics(completedTasks);
double percent = (taskSolved * 100.0) / taskNum;
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
StudyProgressBar studyProgressBar = new StudyProgressBar(percent / 100, JBColor.GREEN, 40, 10);
contentPanel.add(studyProgressBar);
addStatistics(tasksLeft);
ContentFactory contentFactory = ContentFactory.SERVICE.getInstance();
Content content = contentFactory.createContent(contentPanel, "", true);
toolWindow.getContentManager().addContent(content);
}
}
private void addStatistics(String statistics) {
String labelText = UIUtil.toHtml(statistics, 5);
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
JLabel statisticLabel = new JLabel(labelText);
contentPanel.add(statisticLabel);
}
}