diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyDirectoryProjectGenerator.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyDirectoryProjectGenerator.java index b8edda7b94ee..363c4d64691f 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyDirectoryProjectGenerator.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyDirectoryProjectGenerator.java @@ -36,11 +36,11 @@ import java.util.regex.Pattern; public class StudyDirectoryProjectGenerator extends PythonProjectGenerator implements DirectoryProjectGenerator { private static final Logger LOG = Logger.getInstance(StudyDirectoryProjectGenerator.class.getName()); private static final String REPO_URL = "https://github.com/JetBrains/pycharm-courses/archive/master.zip"; - private static final String USER_NAME = "medvector"; + private static final String USER_NAME = "PyCharm"; private static final String COURSE_META_FILE = "course.json"; private static final String COURSE_NAME_ATTRIBUTE = "name"; private static final Pattern CACHE_PATTERN = Pattern.compile("(name=(.*)) (path=(.*course.json)) (author=(.*)) (description=(.*))"); - private static final String REPOSITORY_NAME = "initial-python-course"; + private static final String REPOSITORY_NAME = "pycharm-courses"; public static final String AUTHOR_ATTRIBUTE = "author"; private final File myCoursesDir = new File(PathManager.getConfigPath(), "courses"); private static final String CACHE_NAME = "courseNames.txt"; diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java index ac3ac64d26a8..b33f692d4827 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java @@ -5,11 +5,10 @@ import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorLocation; -import com.intellij.openapi.fileEditor.FileEditorState; -import com.intellij.openapi.fileEditor.FileEditorStateLevel; +import com.intellij.openapi.editor.impl.DocumentImpl; +import com.intellij.openapi.fileEditor.*; import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx; import com.intellij.openapi.fileEditor.impl.text.PsiAwareTextEditorImpl; import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider; @@ -17,6 +16,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.pom.Navigatable; import com.intellij.ui.HideableTitledPanel; import com.jetbrains.python.edu.StudyDocumentListener; import com.jetbrains.python.edu.StudyTaskManager; @@ -40,7 +40,7 @@ import java.util.Map; * Implementation of StudyEditor which has panel with special buttons and task text * also @see {@link com.jetbrains.python.edu.editor.StudyFileEditorProvider} */ -public class StudyEditor implements FileEditor { +public class StudyEditor implements TextEditor { private static final String TASK_TEXT_HEADER = "Task Text"; private final FileEditor myDefaultEditor; private final JComponent myComponent; @@ -49,6 +49,7 @@ public class StudyEditor implements FileEditor { private JButton myPrevTaskButton; private JButton myRefreshButton; private static final Map myDocumentListeners = new HashMap(); + private Project myProject; public JButton getCheckButton() { return myCheckButton; @@ -77,14 +78,15 @@ public class StudyEditor implements FileEditor { } public StudyEditor(@NotNull final Project project, @NotNull final VirtualFile file) { - myDefaultEditor = TextEditorProvider.getInstance().createEditor(project, file); + myProject = project; + myDefaultEditor = TextEditorProvider.getInstance().createEditor(myProject, file); myComponent = myDefaultEditor.getComponent(); JPanel studyPanel = new JPanel(); studyPanel.setLayout(new BoxLayout(studyPanel, BoxLayout.Y_AXIS)); - TaskFile taskFile = StudyTaskManager.getInstance(project).getTaskFile(file); + TaskFile taskFile = StudyTaskManager.getInstance(myProject).getTaskFile(file); if (taskFile != null) { Task currentTask = taskFile.getTask(); - String taskText = currentTask.getResourceText(project, currentTask.getText(), false); + String taskText = currentTask.getResourceText(myProject, currentTask.getText(), false); final JLabel taskTextLabel = new JLabel(taskText); taskTextLabel.setBorder(new EmptyBorder(15, 20, 0, 100)); int fontSize = EditorColorsManager.getInstance().getGlobalScheme().getEditorFontSize(); @@ -97,13 +99,13 @@ public class StudyEditor implements FileEditor { JPanel taskActionsPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); studyButtonPanel.add(taskActionsPanel); studyButtonPanel.add(new JPanel()); - initializeButtons(project, taskActionsPanel, taskFile); + initializeButtons(taskActionsPanel, taskFile); studyPanel.add(studyButtonPanel); myComponent.add(studyPanel, BorderLayout.NORTH); } } - private void initializeButtons(@NotNull final Project project, @NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) { + private void initializeButtons(@NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) { myCheckButton = addButton(taskActionsPanel, "Check task", StudyIcons.Resolve); myPrevTaskButton = addButton(taskActionsPanel, "Prev Task", StudyIcons.Prev); myNextTaskButton = addButton(taskActionsPanel, "Next Task", StudyIcons.Next); @@ -114,7 +116,7 @@ public class StudyEditor implements FileEditor { @Override public void actionPerformed(ActionEvent e) { StudyRunAction studyRunAction = (StudyRunAction)ActionManager.getInstance().getAction("StudyRunAction"); - studyRunAction.run(project); + studyRunAction.run(myProject); } }); JButton watchInputButton = addButton(taskActionsPanel, "Watch test input", StudyIcons.WatchInput); @@ -122,7 +124,7 @@ public class StudyEditor implements FileEditor { @Override public void actionPerformed(ActionEvent e) { StudyEditInputAction studyEditInputAction = (StudyEditInputAction)ActionManager.getInstance().getAction("WatchInputAction"); - studyEditInputAction.showInput(project); + studyEditInputAction.showInput(myProject); } }); } @@ -130,7 +132,7 @@ public class StudyEditor implements FileEditor { @Override public void actionPerformed(ActionEvent e) { StudyCheckAction studyCheckAction = (StudyCheckAction)ActionManager.getInstance().getAction("CheckAction"); - studyCheckAction.check(project); + studyCheckAction.check(myProject); } }); @@ -138,7 +140,7 @@ public class StudyEditor implements FileEditor { @Override public void actionPerformed(ActionEvent e) { StudyNextStudyTaskAction studyNextTaskAction = (StudyNextStudyTaskAction)ActionManager.getInstance().getAction("NextTaskAction"); - studyNextTaskAction.navigateTask(project); + studyNextTaskAction.navigateTask(myProject); } }); myPrevTaskButton.addActionListener(new ActionListener() { @@ -146,14 +148,14 @@ public class StudyEditor implements FileEditor { public void actionPerformed(ActionEvent e) { StudyPreviousStudyTaskAction prevTaskAction = (StudyPreviousStudyTaskAction)ActionManager.getInstance().getAction("PreviousTaskAction"); - prevTaskAction.navigateTask(project); + prevTaskAction.navigateTask(myProject); } }); myRefreshButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { StudyRefreshTaskAction studyRefreshTaskAction = (StudyRefreshTaskAction)ActionManager.getInstance().getAction("RefreshTaskAction"); - studyRefreshTaskAction.refresh(project); + studyRefreshTaskAction.refresh(myProject); } }); } @@ -293,4 +295,27 @@ public class StudyEditor implements FileEditor { public static void removeListener(Document document) { myDocumentListeners.remove(document); } + + @NotNull + @Override + public Editor getEditor() { + if (myDefaultEditor instanceof TextEditor) + return ((TextEditor)myDefaultEditor).getEditor(); + return EditorFactory.getInstance().createViewer(new DocumentImpl(""), myProject); + } + + @Override + public boolean canNavigateTo(@NotNull Navigatable navigatable) { + if (myDefaultEditor instanceof TextEditor) { + ((TextEditor)myDefaultEditor).canNavigateTo(navigatable); + } + return false; + } + + @Override + public void navigateTo(@NotNull Navigatable navigatable) { + if (myDefaultEditor instanceof TextEditor) { + ((TextEditor)myDefaultEditor).navigateTo(navigatable); + } + } }