diff --git a/python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java b/python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java index 7a5dfedc2c61..ac4867c142e3 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java @@ -13,7 +13,7 @@ import org.jetbrains.annotations.Nullable; @State(name = "StepicUpdateSettings", storages = @Storage("other.xml")) public class StudySettings implements PersistentStateComponent { - public static final Topic USER_SET = Topic.create("Edu.UserSet", UserSetListener.class); + public static final Topic SETTINGS_CHANGED = Topic.create("Edu.UserSet", StudySettingsListener.class); private StepicUser myUser; public long LAST_TIME_CHECKED = 0; private boolean myEnableTestingFromSamples = false; @@ -52,7 +52,7 @@ public class StudySettings implements PersistentStateComponent { public void setUser(@Nullable final StepicUser user) { myUser = user; - ApplicationManager.getApplication().getMessageBus().syncPublisher(USER_SET).userSet(user); + ApplicationManager.getApplication().getMessageBus().syncPublisher(SETTINGS_CHANGED).settingsChanged(); updateStepicUserWidget(); } @@ -69,6 +69,7 @@ public class StudySettings implements PersistentStateComponent { public void setEnableTestingFromSamples(boolean enableTestingFromSamples) { myEnableTestingFromSamples = enableTestingFromSamples; + ApplicationManager.getApplication().getMessageBus().syncPublisher(SETTINGS_CHANGED).settingsChanged(); } public boolean isCourseCreatorEnabled() { @@ -77,10 +78,11 @@ public class StudySettings implements PersistentStateComponent { public void setCourseCreatorEnabled(boolean courseCreatorEnabled) { isCourseCreatorEnabled = courseCreatorEnabled; + ApplicationManager.getApplication().getMessageBus().syncPublisher(SETTINGS_CHANGED).settingsChanged(); } @FunctionalInterface - public interface UserSetListener { - void userSet(StepicUser user); + public interface StudySettingsListener { + void settingsChanged(); } } diff --git a/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCoursesPanel.java b/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCoursesPanel.java index c460611b8ba9..c52cca2e30bc 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCoursesPanel.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/newproject/ui/EduCoursesPanel.java @@ -188,7 +188,7 @@ public class EduCoursesPanel extends JPanel { @Override public void mouseClicked(MouseEvent e) { if (!isLoggedIn() && myErrorLabel.isVisible()) { - ApplicationManager.getApplication().getMessageBus().connect().subscribe(StudySettings.USER_SET, u -> { + ApplicationManager.getApplication().getMessageBus().connect().subscribe(StudySettings.SETTINGS_CHANGED, () -> { StepicUser user = StudySettings.getInstance().getUser(); if (user != null) { ApplicationManager.getApplication().invokeLater(() -> { diff --git a/python/educational-python/Edu-Python/resources/META-INF/plugin.xml b/python/educational-python/Edu-Python/resources/META-INF/plugin.xml index ad73d8531626..11426e39b9e9 100644 --- a/python/educational-python/Edu-Python/resources/META-INF/plugin.xml +++ b/python/educational-python/Edu-Python/resources/META-INF/plugin.xml @@ -25,7 +25,6 @@ level="WARNING" implementationClass="com.jetbrains.edu.learning.PyStudyLanguageLevelInspection" displayName="Unsupported language level for a course" groupName="Inspection.Study.Python"/> - diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInitialConfigurator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInitialConfigurator.java index fb87f4f59b8a..472a4d68f8d6 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInitialConfigurator.java +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyInitialConfigurator.java @@ -2,12 +2,18 @@ package com.jetbrains.edu.learning; import com.intellij.codeInsight.CodeInsightSettings; import com.intellij.ide.util.PropertiesComponent; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.components.ApplicationComponent; +import com.intellij.openapi.extensions.ExtensionPoint; +import com.intellij.openapi.extensions.Extensions; +import com.intellij.openapi.extensions.ExtensionsArea; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.project.ex.ProjectManagerEx; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.platform.DirectoryProjectGenerator; import com.intellij.util.messages.MessageBus; +import com.jetbrains.edu.coursecreator.PyCCProjectGenerator; import org.jetbrains.annotations.NonNls; import java.io.File; @@ -15,6 +21,7 @@ import java.io.File; @SuppressWarnings({"UtilityClassWithoutPrivateConstructor", "UtilityClassWithPublicConstructor"}) public class PyStudyInitialConfigurator implements ApplicationComponent { @NonNls private static final String CONFIGURED_V40 = "StudyPyCharm.InitialConfiguration40"; + private final PyCCProjectGenerator myGenerator = new PyCCProjectGenerator(); /** * @noinspection UnusedParameters @@ -29,5 +36,20 @@ public class PyStudyInitialConfigurator implements ApplicationComponent { FileUtil.delete(courses); propertiesComponent.setValue(CONFIGURED_V40, "true"); } + ApplicationManager.getApplication().getMessageBus().connect().subscribe(StudySettings.SETTINGS_CHANGED, () -> { + ExtensionsArea rootArea = Extensions.getArea(null); + final boolean creatorEnabled = StudySettings.getInstance().isCourseCreatorEnabled(); + final ExtensionPoint extensionPoint = rootArea.getExtensionPoint(DirectoryProjectGenerator.EP_NAME); + if (creatorEnabled) { + if (!extensionPoint.hasExtension(myGenerator)) { + extensionPoint.registerExtension(myGenerator); + } + } + else { + if (extensionPoint.hasExtension(myGenerator)) { + extensionPoint.unregisterExtension(myGenerator); + } + } + }); } }