EDU-900 Enable educator tools only if user confirmed that he/she is an educator

This commit is contained in:
Ekaterina Tuzova
2017-04-03 13:32:33 +03:00
parent 24f9b44869
commit df9f2237ad
21 changed files with 149 additions and 46 deletions
@@ -83,6 +83,10 @@
text="Fill Answer Placeholders">
<add-to-group group-id="HelpMenu" anchor="before" relative-to-action="HelpTopics"/>
</action>
<action id="CCEnablePluginAction" class="com.jetbrains.edu.coursecreator.actions.CCPluginToggleAction"
text="Enable Course Creator Features">
<add-to-group group-id="HelpMenu" anchor="before" relative-to-action="HelpTopics"/>
</action>
<action id="StudySwitchPanel" class="com.jetbrains.edu.learning.actions.StudySwitchTaskPanelAction"
text="Switch Task Description Panel">
</action>
@@ -170,7 +174,7 @@
<refactoring.moveHandler implementation="com.jetbrains.edu.learning.StudyMoveDelegate" order="first"/>
<statistics.usagesCollector implementation="com.jetbrains.edu.learning.statistics.EduUsagesCollector"/>
<applicationService serviceImplementation="com.jetbrains.edu.learning.statistics.EduUsagesCollector"/>
<applicationService serviceImplementation="com.jetbrains.edu.learning.stepic.StepicUpdateSettings"/>
<applicationService serviceImplementation="com.jetbrains.edu.learning.StudySettings"/>
<editorTabTitleProvider implementation="com.jetbrains.edu.learning.StudyTabTitleProvider"/>
<typedHandler implementation="com.jetbrains.edu.learning.StudyTypeHandlerDelegate" order="first, before completionAutoPopup"/>
@@ -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);
}
}
@@ -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(() -> {
@@ -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<StepicUpdateSettings> {
public class StudySettings implements PersistentStateComponent<StudySettings> {
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<StepicUpda
@Nullable
@Override
public StepicUpdateSettings getState() {
public StudySettings getState() {
return this;
}
@Override
public void loadState(StepicUpdateSettings state) {
public void loadState(StudySettings state) {
XmlSerializerUtil.copyBean(state, this);
}
public static StepicUpdateSettings getInstance() {
return ServiceManager.getService(StepicUpdateSettings.class);
public static StudySettings getInstance() {
return ServiceManager.getService(StudySettings.class);
}
@Nullable
@@ -55,4 +57,12 @@ public class StepicUpdateSettings implements PersistentStateComponent<StepicUpda
public void setEnableTestingFromSamples(boolean enableTestingFromSamples) {
myEnableTestingFromSamples = enableTestingFromSamples;
}
public boolean isCourseCreatorEnabled() {
return isCourseCreatorEnabled;
}
public void setCourseCreatorEnabled(boolean courseCreatorEnabled) {
isCourseCreatorEnabled = courseCreatorEnabled;
}
}
@@ -74,7 +74,6 @@ import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks;
import com.jetbrains.edu.learning.courseFormat.tasks.TheoryTask;
import com.jetbrains.edu.learning.courseGeneration.StudyProjectGenerator;
import com.jetbrains.edu.learning.editor.StudyEditor;
import com.jetbrains.edu.learning.stepic.StepicUpdateSettings;
import com.jetbrains.edu.learning.stepic.StepicUser;
import com.jetbrains.edu.learning.ui.StudyToolWindow;
import com.jetbrains.edu.learning.ui.StudyToolWindowFactory;
@@ -616,7 +615,7 @@ public class StudyUtils {
public static File getCourseDirectory(Course course) {
final File courseDirectory;
if (course.isAdaptive()) {
StepicUser user = StepicUpdateSettings.getInstance().getUser();
StepicUser user = StudySettings.getInstance().getUser();
String email = user == null ? "" : user.getEmail();
courseDirectory = new File(StudyProjectGenerator.OUR_COURSES_DIR,
@@ -19,14 +19,16 @@ import com.jetbrains.edu.learning.*;
import com.jetbrains.edu.learning.actions.StudyRunAction;
import com.jetbrains.edu.learning.core.EduNames;
import com.jetbrains.edu.learning.core.EduUtils;
import com.jetbrains.edu.learning.courseFormat.*;
import com.jetbrains.edu.learning.courseFormat.AnswerPlaceholder;
import com.jetbrains.edu.learning.courseFormat.Course;
import com.jetbrains.edu.learning.courseFormat.StudyStatus;
import com.jetbrains.edu.learning.courseFormat.TaskFile;
import com.jetbrains.edu.learning.courseFormat.tasks.ChoiceTask;
import com.jetbrains.edu.learning.courseFormat.tasks.Task;
import com.jetbrains.edu.learning.courseFormat.tasks.TaskWithSubtasks;
import com.jetbrains.edu.learning.courseFormat.tasks.TheoryTask;
import com.jetbrains.edu.learning.stepic.EduAdaptiveStepicConnector;
import com.jetbrains.edu.learning.stepic.EduStepicConnector;
import com.jetbrains.edu.learning.stepic.StepicUpdateSettings;
import com.jetbrains.edu.learning.stepic.StepicUser;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -109,7 +111,7 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun
runAfterTaskCheckedActions();
final Course course = StudyTaskManager.getInstance(myProject).getCourse();
if (course != null && EduNames.STUDY.equals(course.getCourseMode())) {
StepicUser user = StepicUpdateSettings.getInstance().getUser();
StepicUser user = StudySettings.getInstance().getUser();
if (user != null) {
EduStepicConnector.postSolution(myTask, testsOutput.isSuccess(), myProject);
}
@@ -149,7 +151,7 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun
}
private void checkForAdaptiveCourse(@NotNull ProgressIndicator indicator) {
final StepicUser user = StepicUpdateSettings.getInstance().getUser();
final StepicUser user = StudySettings.getInstance().getUser();
if (user == null) {
LOG.warn("User is null");
ApplicationManager.getApplication().invokeLater(() ->
@@ -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 {
@@ -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))) {
@@ -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,
@@ -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())) {
@@ -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> T getFromStepic(String link, final Class<T> 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));
@@ -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<Boolean> 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<CourseInfo> courses = EduStepicConnector.getCourses(null);
final List<CourseInfo> 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<CourseInfo> 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;
}
}
@@ -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();
@@ -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());
@@ -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<CourseInfo> courses = myGenerator.getCourses(true);
if (courses != null && myRefreshCourseList) {
@@ -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<PyN
ProgressManager.getInstance().runProcessWithProgressSynchronously(() -> {
ProgressManager.getInstance().getProgressIndicator().setIndeterminate(true);
return StudyUtils.execCancelable(() -> EduStepicConnector.enrollToCourse(course.getId(),
StepicUpdateSettings.getInstance().getUser()));
StudySettings.getInstance().getUser()));
}, "Creating Course", true, ProjectManager.getInstance().getDefaultProject());
}
@@ -26,5 +26,6 @@
<orderEntry type="module" module-name="xml-psi-impl" />
<orderEntry type="module" module-name="python-community-ide-resources" />
<orderEntry type="module" module-name="python-community" />
<orderEntry type="module" module-name="educational-core" />
</component>
</module>
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

@@ -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");
}
}
@@ -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 "";
}
}
@@ -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<AbstractCustomizeWizardStep> steps) {
steps.add(new CustomizeEduStepPanel());
}
}).show();
}
}