Minor Rename study settings
[idea/community.git] / python / educational-core / student / src / com / jetbrains / edu / learning / settings / StudyConfigurable.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.jetbrains.edu.learning.settings;
17
18 import com.intellij.openapi.options.ConfigurationException;
19 import com.intellij.openapi.options.SearchableConfigurable;
20 import com.intellij.openapi.ui.VerticalFlowLayout;
21 import com.jetbrains.edu.learning.StudyPluginConfigurator;
22 import org.jetbrains.annotations.Nls;
23 import org.jetbrains.annotations.NotNull;
24 import org.jetbrains.annotations.Nullable;
25
26 import javax.swing.*;
27 import java.util.ArrayList;
28
29 public class StudyConfigurable implements SearchableConfigurable {
30   public static final String ID = "com.jetbrains.edu.learning.stepic.EduConfigurable";
31   private JPanel myMainPanel;
32   private ArrayList<ModifiableSettingsPanel> myPluginsSettingsPanels;
33   private StudyBaseSettingsPanel mySettingsPanel;
34
35   public StudyConfigurable() {
36   }
37
38   @NotNull
39   @Override
40   public String getId() {
41     return ID;
42   }
43
44   @Nullable
45   @Override
46   public Runnable enableSearch(String option) {
47     return null;
48   }
49
50   @Nls
51   @Override
52   public String getDisplayName() {
53     return "Education";
54   }
55
56   @NotNull
57   @Override
58   public String getHelpTopic() {
59     return ID;
60   }
61
62   @Nullable
63   @Override
64   public JComponent createComponent() {
65     if (myMainPanel == null) {
66       myMainPanel = new JPanel(new VerticalFlowLayout());
67     }
68     mySettingsPanel = new StudyBaseSettingsPanel();
69     myMainPanel.add(mySettingsPanel.getPanel());
70
71     myPluginsSettingsPanels = new ArrayList<>();
72     StudyPluginConfigurator[] extensions = StudyPluginConfigurator.EP_NAME.getExtensions();
73     for (StudyPluginConfigurator configurator: extensions) {
74       final ModifiableSettingsPanel settingsPanel = configurator.getSettingsPanel();
75       if (settingsPanel != null) {
76         myPluginsSettingsPanels.add(settingsPanel);
77         myMainPanel.add(settingsPanel.getPanel());
78       }
79     }
80     return myMainPanel;
81   }
82
83   @Override
84   public boolean isModified() {
85     if (mySettingsPanel != null) {
86       boolean isModified = mySettingsPanel.isModified();
87       if (myPluginsSettingsPanels != null && !myPluginsSettingsPanels.isEmpty()) {
88         for (ModifiableSettingsPanel settingsPanel: myPluginsSettingsPanels) {
89           isModified &= settingsPanel.isModified();
90         }
91       }
92       return isModified;
93     }
94     return false;
95   }
96
97   public void apply() throws ConfigurationException {
98     if (myMainPanel != null) {
99       mySettingsPanel.apply();
100       if (myPluginsSettingsPanels != null && !myPluginsSettingsPanels.isEmpty()) {
101         for (ModifiableSettingsPanel settingsPanel: myPluginsSettingsPanels) {
102           settingsPanel.apply();
103         }
104       }
105     }
106   }
107
108   public void reset() {
109     if (myMainPanel != null) {
110       mySettingsPanel.apply();
111       if (myPluginsSettingsPanels != null && !myPluginsSettingsPanels.isEmpty()) {
112         for (ModifiableSettingsPanel settingsPanel: myPluginsSettingsPanels) {
113           settingsPanel.reset();
114         }
115       }
116     }
117   }
118
119   @Override
120   public void disposeUIResources() {
121     myMainPanel = null;
122   }
123 }
124