package icons;

import com.intellij.openapi.util.IconLoader;

import javax.swing.*;

/**
 * NOTE THIS FILE IS AUTO-GENERATED
 * DO NOT EDIT IT BY HAND, run build/scripts/icons.gant instead
 */
public class StudyIcons {
  private static Icon load(String path) {
    return IconLoader.getIcon(path, StudyIcons.class);
  }

  public static final Icon EducationalProjectType = load("/icons/com/jetbrains/python/edu/EducationalProjectType.png"); // 32x32
  public static final Icon Lesson = load("/icons/com/jetbrains/python/edu/Lesson.png"); // 16x16
  public static final Icon LessonCompl = load("/icons/com/jetbrains/python/edu/LessonCompl.png"); // 16x16
  public static final Icon Playground = load("/icons/com/jetbrains/python/edu/Playground.png"); // 16x16
  public static final Icon Prev = load("/icons/com/jetbrains/python/edu/prev.png"); // 16x16
  public static final Icon Resolve = load("/icons/com/jetbrains/python/edu/resolve.png"); // 16x16
  public static final Icon ShowHint = load("/icons/com/jetbrains/python/edu/showHint.png"); // 24x24
  public static final Icon Task = load("/icons/com/jetbrains/python/edu/Task.png"); // 16x16
  public static final Icon TaskCompl = load("/icons/com/jetbrains/python/edu/TaskCompl.png"); // 16x16
  public static final Icon TaskProbl = load("/icons/com/jetbrains/python/edu/TaskProbl.png"); // 16x16
  public static final Icon WatchInput = load("/icons/com/jetbrains/python/edu/WatchInput.png"); // 24x24
}
