diff --git a/python/educational-core/resources/META-INF/plugin.xml b/python/educational-core/resources/META-INF/plugin.xml
index 838d3d077cbb..d1523e23db1d 100644
--- a/python/educational-core/resources/META-INF/plugin.xml
+++ b/python/educational-core/resources/META-INF/plugin.xml
@@ -83,6 +83,10 @@
text="Fill Answer Placeholders">
+
+
+
@@ -170,7 +174,7 @@
-
+
diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCPluginToggleAction.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCPluginToggleAction.java
new file mode 100644
index 000000000000..0a6202110dea
--- /dev/null
+++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/actions/CCPluginToggleAction.java
@@ -0,0 +1,17 @@
+package com.jetbrains.edu.coursecreator.actions;
+
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.ToggleAction;
+import com.jetbrains.edu.learning.StudySettings;
+
+public class CCPluginToggleAction extends ToggleAction {
+ @Override
+ public boolean isSelected(AnActionEvent e) {
+ return StudySettings.getInstance().isCourseCreatorEnabled();
+ }
+
+ @Override
+ public void setSelected(AnActionEvent e, boolean state) {
+ StudySettings.getInstance().setCourseCreatorEnabled(state);
+ }
+}
\ No newline at end of file
diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/settings/CCOptions.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/settings/CCOptions.java
index c61a866b0fc6..6f5e3cd7768b 100644
--- a/python/educational-core/src/com/jetbrains/edu/coursecreator/settings/CCOptions.java
+++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/settings/CCOptions.java
@@ -2,6 +2,7 @@ package com.jetbrains.edu.coursecreator.settings;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.wm.IdeFocusManager;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.settings.StudyOptionsProvider;
import org.jetbrains.annotations.Nullable;
@@ -15,6 +16,7 @@ public class CCOptions implements StudyOptionsProvider {
@Nullable
@Override
public JComponent createComponent() {
+ if (!StudySettings.getInstance().isCourseCreatorEnabled()) return null;
if (CCSettings.getInstance().useHtmlAsDefaultTaskFormat()) {
myHtmlRadioButton.setSelected(true);
IdeFocusManager.getGlobalInstance().doWhenFocusSettlesDown(() -> {
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicUpdateSettings.java b/python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java
similarity index 64%
rename from python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicUpdateSettings.java
rename to python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java
index 94b2d9b6c817..60a44d7c546f 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicUpdateSettings.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/StudySettings.java
@@ -1,19 +1,21 @@
-package com.jetbrains.edu.learning.stepic;
+package com.jetbrains.edu.learning;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.components.State;
import com.intellij.openapi.components.Storage;
import com.intellij.util.xmlb.XmlSerializerUtil;
+import com.jetbrains.edu.learning.stepic.StepicUser;
import org.jetbrains.annotations.Nullable;
@State(name = "StepicUpdateSettings", storages = @Storage("other.xml"))
-public class StepicUpdateSettings implements PersistentStateComponent {
+public class StudySettings implements PersistentStateComponent {
private StepicUser myUser;
public long LAST_TIME_CHECKED = 0;
private boolean myEnableTestingFromSamples = false;
+ private boolean isCourseCreatorEnabled = false;
- public StepicUpdateSettings() {
+ public StudySettings() {
}
public long getLastTimeChecked() {
@@ -26,17 +28,17 @@ public class StepicUpdateSettings implements PersistentStateComponent
@@ -185,7 +187,7 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun
if (testOutput != null) {
// As tests in adaptive courses are created from
// samples and stored in task, to disable it we should ignore local testing results
- if (StepicUpdateSettings.getInstance().isEnableTestingFromSamples() && !testOutput.isSuccess()) {
+ if (StudySettings.getInstance().isEnableTestingFromSamples() && !testOutput.isSuccess()) {
onTaskFailed(testOutput.getMessage());
}
else {
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java b/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java
index 58c82ec9b24f..86297e048d58 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java
@@ -23,6 +23,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.util.containers.ContainerUtil;
import com.jetbrains.edu.learning.StudySerializationUtils;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.StudyTaskManager;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.core.EduNames;
@@ -35,7 +36,6 @@ import com.jetbrains.edu.learning.courseFormat.tasks.Task;
import com.jetbrains.edu.learning.editor.StudyEditor;
import com.jetbrains.edu.learning.statistics.EduUsagesCollector;
import com.jetbrains.edu.learning.stepic.EduStepicConnector;
-import com.jetbrains.edu.learning.stepic.StepicUpdateSettings;
import com.jetbrains.edu.learning.stepic.StepicUser;
import org.apache.commons.codec.binary.Base64;
import org.jetbrains.annotations.NotNull;
@@ -65,7 +65,7 @@ public class StudyProjectGenerator {
}
public boolean isLoggedIn() {
- final StepicUser user = StepicUpdateSettings.getInstance().getUser();
+ final StepicUser user = StudySettings.getInstance().getUser();
return user != null;
}
@@ -121,7 +121,7 @@ public class StudyProjectGenerator {
return getCourseFromStepic(project);
}
else {
- final StepicUser user = StepicUpdateSettings.getInstance().getUser();
+ final StepicUser user = StudySettings.getInstance().getUser();
if (user != null) {
final File adaptiveCourseFile = new File(new File(OUR_COURSES_DIR, ADAPTIVE_COURSE_PREFIX +
mySelectedCourseInfo.getName() + "_" +
@@ -405,7 +405,7 @@ public class StudyProjectGenerator {
myCourses = getCoursesFromCache();
}
if (force || myCourses.isEmpty()) {
- myCourses = execCancelable(() -> EduStepicConnector.getCourses(StepicUpdateSettings.getInstance().getUser()));
+ myCourses = execCancelable(() -> EduStepicConnector.getCourses(StudySettings.getInstance().getUser()));
flushCache(myCourses);
}
if (myCourses.isEmpty() || (myCourses.size() == 1 && myCourses.contains(CourseInfo.INVALID_COURSE))) {
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java
index db1dc541e2ce..2938f63bd0bc 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.StudyTaskManager;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.checker.StudyExecutor;
@@ -83,7 +84,7 @@ public class EduAdaptiveStepicConnector {
return null;
}
- StepicUser user = StepicUpdateSettings.getInstance().getUser();
+ StepicUser user = StudySettings.getInstance().getUser();
if (user == null) {
LOG.warn("User is null");
return null;
@@ -303,7 +304,7 @@ public class EduAdaptiveStepicConnector {
final Course course = StudyTaskManager.getInstance(project).getCourse();
if (course != null && editor != null && editor.getTaskFile() != null) {
indicator.checkCanceled();
- final StepicUser user = StepicUpdateSettings.getInstance().getUser();
+ final StepicUser user = StudySettings.getInstance().getUser();
if (user == null) {
LOG.warn("Can't get next recommendation: user is null");
ApplicationManager.getApplication().invokeLater(() -> StudyUtils.showErrorPopupOnToolbar(project,
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicAuthorizedClient.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicAuthorizedClient.java
index e94b9b39108b..3a2986023484 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicAuthorizedClient.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicAuthorizedClient.java
@@ -5,6 +5,7 @@ import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
+import com.jetbrains.edu.learning.StudySettings;
import org.apache.http.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
@@ -36,13 +37,12 @@ public class EduStepicAuthorizedClient {
return ourClient;
}
- StepicUpdateSettings stepicUpdateSettings = StepicUpdateSettings.getInstance();
+ StudySettings studySettings = StudySettings.getInstance();
-
- if (stepicUpdateSettings.getUser() == null) {
+ if (studySettings.getUser() == null) {
final StepicUser user = showLoginDialog();
if (user != null) {
- stepicUpdateSettings.setUser(user);
+ studySettings.setUser(user);
}
else {
LOG.warn("Unable to login");
@@ -50,7 +50,7 @@ public class EduStepicAuthorizedClient {
}
}
- StepicUser stepicUser = stepicUpdateSettings.getUser();
+ StepicUser stepicUser = studySettings.getUser();
assert stepicUser != null;
if (!EduStepicClient.isTokenUpToDate(stepicUser.getAccessToken())) {
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java
index b4e2f8b4107e..1931f7a2e768 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicConnector.java
@@ -9,6 +9,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.CourseInfo;
@@ -259,7 +260,7 @@ public class EduStepicConnector {
}
private static T getFromStepic(String link, final Class container) throws IOException{
- final StepicUser user = StepicUpdateSettings.getInstance().getUser();
+ final StepicUser user = StudySettings.getInstance().getUser();
final boolean isAuthorized = user != null;
if (isAuthorized) {
return EduStepicAuthorizedClient.getFromStepic(link, container, user);
@@ -355,7 +356,7 @@ public class EduStepicConnector {
public static String postAttempt(int id) throws IOException {
final CloseableHttpClient client = EduStepicAuthorizedClient.getHttpClient();
- if (client == null || StepicUpdateSettings.getInstance().getUser() == null) return "";
+ if (client == null || StudySettings.getInstance().getUser() == null) return "";
final HttpPost attemptRequest = new HttpPost(EduStepicNames.STEPIC_API_URL + EduStepicNames.ATTEMPTS);
String attemptRequestBody = new Gson().toJson(new StepicWrappers.AttemptWrapper(id));
attemptRequest.setEntity(new StringEntity(attemptRequestBody, ContentType.APPLICATION_JSON));
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicUpdater.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicUpdater.java
index b84efb073aa2..ed8afb093f92 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicUpdater.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduStepicUpdater.java
@@ -10,6 +10,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.Alarm;
import com.intellij.util.text.DateFormatUtil;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.courseFormat.CourseInfo;
import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
import org.jetbrains.annotations.NotNull;
@@ -34,7 +35,7 @@ public class EduStepicUpdater {
@Override
public void appFrameCreated(String[] commandLineArgs, @NotNull Ref willOpenProject) {
- long timeToNextCheck = StepicUpdateSettings.getInstance().getLastTimeChecked() + CHECK_INTERVAL - System.currentTimeMillis();
+ long timeToNextCheck = StudySettings.getInstance().getLastTimeChecked() + CHECK_INTERVAL - System.currentTimeMillis();
if (timeToNextCheck <= 0) {
myCheckRunnable.run();
}
@@ -51,7 +52,7 @@ public class EduStepicUpdater {
final List courses = EduStepicConnector.getCourses(null);
final List cachedCourses = StudyProjectGenerator.getCoursesFromCache();
StudyProjectGenerator.flushCache(courses);
- StepicUpdateSettings.getInstance().setLastTimeChecked(System.currentTimeMillis());
+ StudySettings.getInstance().setLastTimeChecked(System.currentTimeMillis());
courses.removeAll(cachedCourses);
if (!courses.isEmpty() && !cachedCourses.isEmpty()) {
@@ -79,7 +80,7 @@ public class EduStepicUpdater {
private static boolean checkNeeded() {
final List courses = StudyProjectGenerator.getCoursesFromCache();
- long timeToNextCheck = StepicUpdateSettings.getInstance().getLastTimeChecked() + CHECK_INTERVAL - System.currentTimeMillis();
+ long timeToNextCheck = StudySettings.getInstance().getLastTimeChecked() + CHECK_INTERVAL - System.currentTimeMillis();
return courses.isEmpty() || timeToNextCheck <= 0;
}
}
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicStudyOptions.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicStudyOptions.java
index 14ee91102936..a45c53652962 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicStudyOptions.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicStudyOptions.java
@@ -20,6 +20,7 @@ import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.components.JBCheckBox;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.settings.StudyOptionsProvider;
import org.jetbrains.annotations.NotNull;
@@ -79,7 +80,7 @@ public class StepicStudyOptions implements StudyOptionsProvider {
@Override
public void reset() {
- final StepicUpdateSettings stepikSettings = StepicUpdateSettings.getInstance();
+ final StudySettings stepikSettings = StudySettings.getInstance();
myEnableTestingFromSamples.setSelected(stepikSettings.isEnableTestingFromSamples());
final StepicUser user = stepikSettings.getUser();
if (user != null) {
@@ -95,7 +96,7 @@ public class StepicStudyOptions implements StudyOptionsProvider {
@Override
public void apply() throws ConfigurationException {
- final StepicUpdateSettings stepikSettings = StepicUpdateSettings.getInstance();
+ final StudySettings stepikSettings = StudySettings.getInstance();
if (isTestingFromSamplesEnabled() != stepikSettings.isEnableTestingFromSamples()) {
stepikSettings.setEnableTestingFromSamples(isTestingFromSamplesEnabled());
}
@@ -131,7 +132,7 @@ public class StepicStudyOptions implements StudyOptionsProvider {
}
private static void removeCredentials() {
- StepicUpdateSettings.getInstance().setUser(null);
+ StudySettings.getInstance().setUser(null);
EduStepicAuthorizedClient.invalidateClient();
}
@@ -142,7 +143,7 @@ public class StepicStudyOptions implements StudyOptionsProvider {
}
public boolean isModified() {
- final StepicUpdateSettings stepikSettings = StepicUpdateSettings.getInstance();
+ final StudySettings stepikSettings = StudySettings.getInstance();
boolean isTestOptionModified = !isTestingFromSamplesEnabled() == stepikSettings.isEnableTestingFromSamples();
final StepicUser user = stepikSettings.getUser();
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/ui/LoginPanel.java b/python/educational-core/src/com/jetbrains/edu/learning/ui/LoginPanel.java
index aa3ea057a709..f71f2df18e9a 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/ui/LoginPanel.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/ui/LoginPanel.java
@@ -3,9 +3,9 @@ package com.jetbrains.edu.learning.ui;
import com.intellij.ide.BrowserUtil;
import com.intellij.ui.DocumentAdapter;
import com.intellij.ui.components.JBLabel;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.stepic.EduStepicNames;
import com.jetbrains.edu.learning.stepic.LoginDialog;
-import com.jetbrains.edu.learning.stepic.StepicUpdateSettings;
import com.jetbrains.edu.learning.stepic.StepicUser;
import javax.swing.*;
@@ -49,7 +49,7 @@ public class LoginPanel {
e.getComponent().setCursor(Cursor.getDefaultCursor());
}
});
- final StepicUser user = StepicUpdateSettings.getInstance().getUser();
+ final StepicUser user = StudySettings.getInstance().getUser();
if (user != null) {
myLoginField.setText(user.getEmail());
myPasswordField.setText(user.getPassword());
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/ui/StudyNewProjectPanel.java b/python/educational-core/src/com/jetbrains/edu/learning/ui/StudyNewProjectPanel.java
index 46216fcb45c7..e236b5487fa3 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/ui/StudyNewProjectPanel.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/ui/StudyNewProjectPanel.java
@@ -26,11 +26,15 @@ import com.intellij.ui.AncestorListenerAdapter;
import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.util.ui.UIUtil;
+import com.jetbrains.edu.learning.StudySettings;
import com.jetbrains.edu.learning.StudyUtils;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.CourseInfo;
import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
-import com.jetbrains.edu.learning.stepic.*;
+import com.jetbrains.edu.learning.stepic.EduAdaptiveStepicConnector;
+import com.jetbrains.edu.learning.stepic.EduStepicAuthorizedClient;
+import com.jetbrains.edu.learning.stepic.LoginDialog;
+import com.jetbrains.edu.learning.stepic.StepicUser;
import icons.EducationalCoreIcons;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -361,7 +365,7 @@ public class StudyNewProjectPanel extends JPanel implements PanelWithAnchor {
if (stepicUser != null) {
stepicUser.setEmail(myLoginPanel.getLogin());
stepicUser.setPassword(myLoginPanel.getPassword());
- StepicUpdateSettings.getInstance().setUser(stepicUser);
+ StudySettings.getInstance().setUser(stepicUser);
myGenerator.setEnrolledCoursesIds(EduAdaptiveStepicConnector.getEnrolledCoursesIds(stepicUser));
final List courses = myGenerator.getCourses(true);
if (courses != null && myRefreshCourseList) {
diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java
index 5e079da7d852..a9d7e496138f 100644
--- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java
+++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyDirectoryProjectGenerator.java
@@ -24,10 +24,9 @@ import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiManager;
import com.intellij.util.BooleanFunction;
import com.jetbrains.edu.learning.courseFormat.Course;
-import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
import com.jetbrains.edu.learning.courseFormat.CourseInfo;
+import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
import com.jetbrains.edu.learning.stepic.EduStepicConnector;
-import com.jetbrains.edu.learning.stepic.StepicUpdateSettings;
import com.jetbrains.edu.learning.ui.StudyNewProjectPanel;
import com.jetbrains.python.configuration.PyConfigurableInterpreterList;
import com.jetbrains.python.newProject.PyNewProjectSettings;
@@ -190,7 +189,7 @@ public class PyStudyDirectoryProjectGenerator extends PythonProjectGenerator {
ProgressManager.getInstance().getProgressIndicator().setIndeterminate(true);
return StudyUtils.execCancelable(() -> EduStepicConnector.enrollToCourse(course.getId(),
- StepicUpdateSettings.getInstance().getUser()));
+ StudySettings.getInstance().getUser()));
}, "Creating Course", true, ProjectManager.getInstance().getDefaultProject());
}
diff --git a/python/educational-python/educational-python.iml b/python/educational-python/educational-python.iml
index 92200056b482..3d354ed20918 100644
--- a/python/educational-python/educational-python.iml
+++ b/python/educational-python/educational-python.iml
@@ -26,5 +26,6 @@
+
\ No newline at end of file
diff --git a/python/educational-python/resources/icons/com/jetbrains/edu/student.png b/python/educational-python/resources/icons/com/jetbrains/edu/student.png
new file mode 100644
index 000000000000..f5b75f2167a6
Binary files /dev/null and b/python/educational-python/resources/icons/com/jetbrains/edu/student.png differ
diff --git a/python/educational-python/resources/icons/com/jetbrains/edu/teacher.png b/python/educational-python/resources/icons/com/jetbrains/edu/teacher.png
new file mode 100644
index 000000000000..221e396ff599
Binary files /dev/null and b/python/educational-python/resources/icons/com/jetbrains/edu/teacher.png differ
diff --git a/python/educational-python/src/com/intellij/openapi/application/PyCharmEduConfigImportSettings.java b/python/educational-python/src/com/intellij/openapi/application/PyCharmEduConfigImportSettings.java
index 989c750681f3..f9c27f5fde05 100644
--- a/python/educational-python/src/com/intellij/openapi/application/PyCharmEduConfigImportSettings.java
+++ b/python/educational-python/src/com/intellij/openapi/application/PyCharmEduConfigImportSettings.java
@@ -6,7 +6,8 @@ import com.intellij.ide.plugins.PluginManagerCore;
@SuppressWarnings("UnusedDeclaration")
public class PyCharmEduConfigImportSettings extends ConfigImportSettings {
public PyCharmEduConfigImportSettings() {
- PluginManagerCore.disablePlugin("org.jetbrains.plugins.coursecreator");
+ PluginManagerCore.disablePlugin("com.jetbrains.edu.coursecreator");
+ PluginManagerCore.disablePlugin("com.jetbrains.edu.coursecreator.python");
}
}
diff --git a/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java b/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java
new file mode 100644
index 000000000000..603deb9c8605
--- /dev/null
+++ b/python/educational-python/src/com/jetbrains/python/edu/CustomizeEduStepPanel.java
@@ -0,0 +1,49 @@
+package com.jetbrains.python.edu;
+
+import com.intellij.ide.customize.AbstractCustomizeWizardStep;
+import com.intellij.openapi.ui.VerticalFlowLayout;
+import com.intellij.openapi.util.IconLoader;
+import com.jetbrains.edu.learning.StudySettings;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public class CustomizeEduStepPanel extends AbstractCustomizeWizardStep {
+
+ public CustomizeEduStepPanel() {
+ final JPanel studentPanel = new JPanel(new VerticalFlowLayout());
+ final JButton student = new JButton(IconLoader.findIcon("/icons/com/jetbrains/edu/student.png"));
+ student.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ StudySettings.getInstance().setCourseCreatorEnabled(false);
+ }
+ });
+ studentPanel.add(student);
+ studentPanel.add(new JLabel("Student", SwingConstants.CENTER));
+ add(studentPanel);
+
+ final JButton teacher = new JButton(IconLoader.findIcon("/icons/com/jetbrains/edu/teacher.png"));
+ final JPanel teacherPanel = new JPanel(new VerticalFlowLayout());
+ teacherPanel.add(teacher);
+ teacherPanel.add(new JLabel("Teacher", SwingConstants.CENTER));
+ teacher.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ StudySettings.getInstance().setCourseCreatorEnabled(true);
+ }
+ });
+ add(teacherPanel);
+ }
+
+ @Override
+ protected String getTitle() {
+ return "Are you student or teacher?";
+ }
+
+ @Override
+ protected String getHTMLHeader() {
+ return "";
+ }
+}
diff --git a/python/educational-python/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java b/python/educational-python/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java
index 0037d1b3048e..380da1c7bb79 100644
--- a/python/educational-python/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java
+++ b/python/educational-python/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java
@@ -25,6 +25,9 @@ import com.intellij.execution.executors.DefaultDebugExecutor;
import com.intellij.ide.AppLifecycleListener;
import com.intellij.ide.GeneralSettings;
import com.intellij.ide.SelectInTarget;
+import com.intellij.ide.customize.AbstractCustomizeWizardStep;
+import com.intellij.ide.customize.CustomizeIDEWizardDialog;
+import com.intellij.ide.customize.CustomizeIDEWizardStepsProvider;
import com.intellij.ide.projectView.impl.AbstractProjectViewPane;
import com.intellij.ide.scopeView.ScopeViewPane;
import com.intellij.ide.ui.UISettings;
@@ -87,6 +90,7 @@ import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
@@ -194,9 +198,9 @@ public class PyCharmEduInitialConfigurator {
ApplicationManager.getApplication().invokeLater(() -> {
if (!propertiesComponent.isValueSet(DISPLAYED_PROPERTY)) {
GeneralSettings.getInstance().setShowTipsOnStartup(false);
- propertiesComponent.setValue(DISPLAYED_PROPERTY, "true");
-
patchKeymap();
+ showInitialConfigurationDialog();
+ propertiesComponent.setValue(DISPLAYED_PROPERTY, "true");
}
});
}
@@ -396,5 +400,12 @@ public class PyCharmEduInitialConfigurator {
}
}
}
-
+ private static void showInitialConfigurationDialog() {
+ new CustomizeIDEWizardDialog(new CustomizeIDEWizardStepsProvider() {
+ @Override
+ public void initSteps(@NotNull CustomizeIDEWizardDialog dialog, @NotNull List steps) {
+ steps.add(new CustomizeEduStepPanel());
+ }
+ }).show();
+ }
}