diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index 8e8bddcce5e5..76861f059d82 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -60,10 +60,14 @@ - + + + + + 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 59bd8bc2ea7c..b558667734bc 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 @@ -53,7 +53,7 @@ public class StudyDirectoryProjectGenerator extends PythonProjectGenerator imple @NotNull @Override public String getName() { - return "Learn Python"; + return "Educational"; } diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyIntroductionCourse.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyIntroductionCourse.java new file mode 100644 index 000000000000..c35995a99751 --- /dev/null +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyIntroductionCourse.java @@ -0,0 +1,75 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jetbrains.python.edu.actions; + +import com.intellij.ide.impl.ProjectUtil; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.projectRoots.Sdk; +import com.jetbrains.python.configuration.PyConfigurableInterpreterList; +import com.jetbrains.python.edu.StudyDirectoryProjectGenerator; +import com.jetbrains.python.edu.StudyUtils; +import com.jetbrains.python.edu.course.CourseInfo; +import com.jetbrains.python.newProject.actions.GenerateProjectCallback; +import com.jetbrains.python.newProject.actions.ProjectSpecificSettingsStep; +import icons.StudyIcons; +import org.jetbrains.annotations.NotNull; + +import java.io.File; +import java.util.List; +import java.util.Map; + +public class StudyIntroductionCourse extends AnAction { + + public StudyIntroductionCourse() { + super("Introduction to Python", "Introduction to Python", StudyIcons.EducationalProjectType); + } + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + final File projectDir = new File(ProjectUtil.getBaseDir(), "PythonIntroduction"); + if (projectDir.exists()) { + ProjectUtil.openProject(projectDir.getPath(), null, false); + } + else { + final GenerateProjectCallback callback = new GenerateProjectCallback(null); + final StudyDirectoryProjectGenerator generator = new StudyDirectoryProjectGenerator(); + final Map courses = generator.getCourses(); + CourseInfo introCourse = null; + for (CourseInfo info : courses.keySet()) { + if ("Introduction to Python".equals(info.getName())) { + introCourse = info; + } + } + if (introCourse == null) { + introCourse = StudyUtils.getFirst(courses.keySet()); + } + generator.setSelectedCourse(introCourse); + final ProjectSpecificSettingsStep step = new ProjectSpecificSettingsStep(generator, callback, true); + + step.createPanel(); // initialize panel to set location + step.setLocation(projectDir.toString()); + + final Project project = ProjectManager.getInstance().getDefaultProject(); + final List sdks = PyConfigurableInterpreterList.getInstance(project).getAllPythonSdks(); + Sdk sdk = sdks.isEmpty() ? null : sdks.iterator().next(); + step.setSdk(sdk); + callback.consume(step); + } + } +} diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNewProject.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNewProject.java index 0b75c4bc01c4..2a42115c0dd7 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNewProject.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNewProject.java @@ -28,7 +28,7 @@ public class StudyNewProject extends ProjectSpecificAction { } public StudyNewProject() { - this("Learn Python", null); + this("Explore courses", null); } } diff --git a/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java b/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java index 1ad9cf7ececc..721030774979 100644 --- a/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java +++ b/python/ide/src/com/jetbrains/python/newProject/actions/AbstractProjectSettingsStep.java @@ -42,6 +42,7 @@ import com.jetbrains.python.sdk.flavors.JythonSdkFlavor; import com.jetbrains.python.sdk.flavors.PyPySdkFlavor; import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; import icons.PythonIcons; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -454,6 +455,10 @@ abstract public class AbstractProjectSettingsStep extends AbstractActionWithPane return myLocationField.getText(); } + public void setLocation(@NotNull final String location) { + myLocationField.setText(location); + } + public boolean installFramework() { return myInstallFramework; } diff --git a/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java b/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java index 2aa9a391512f..2e88b7f2767c 100644 --- a/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java +++ b/python/ide/src/com/jetbrains/python/newProject/actions/GenerateProjectCallback.java @@ -104,7 +104,7 @@ public class GenerateProjectCallback implements NullableConsumer