package requirejs.settings; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiManager; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import requirejs.RequirejsProjectComponent; import javax.swing.*; public class RequirejsSettingsPage implements Configurable { protected Project project; private JCheckBox pluginEnabledCheckbox; private JTextField publicPathField; private JTextField configFilePathField; private JPanel panel; private JCheckBox overrideBaseUrlCheckbox; private JTextField baseUrlField; public RequirejsSettingsPage(@NotNull final Project project) { this.project = project; } @Nls @Override public String getDisplayName() { return "Require.js Plugin"; } @Nullable @Override public String getHelpTopic() { return null; } @Nullable @Override public JComponent createComponent() { loadSettings(); return panel; } @Override public boolean isModified() { return !pluginEnabledCheckbox.isSelected() == getSettings().pluginEnabled || !publicPathField.getText().equals(getSettings().publicPath) || !configFilePathField.getText().equals(getSettings().configFilePath) || !overrideBaseUrlCheckbox.isSelected() == getSettings().overrideBaseUrl || !baseUrlField.getText().equals(getSettings().baseUrl); } @Override public void apply() throws ConfigurationException { project.getComponent(RequirejsProjectComponent.class).clearParse(); saveSettings(); PsiManager.getInstance(project).dropResolveCaches(); } protected void saveSettings() { getSettings().pluginEnabled = pluginEnabledCheckbox.isSelected(); getSettings().publicPath = publicPathField.getText(); getSettings().configFilePath = configFilePathField.getText(); getSettings().overrideBaseUrl = overrideBaseUrlCheckbox.isSelected(); if (getSettings().overrideBaseUrl) { getSettings().baseUrl = baseUrlField.getText(); } project.getComponent(RequirejsProjectComponent.class).validateSettings(); } protected void loadSettings() { pluginEnabledCheckbox.setSelected(getSettings().pluginEnabled); publicPathField.setText(getSettings().publicPath); configFilePathField.setText(getSettings().configFilePath); overrideBaseUrlCheckbox.setSelected(getSettings().overrideBaseUrl); baseUrlField.setText(getSettings().baseUrl); } @Override public void reset() { loadSettings(); } @Override public void disposeUIResources() { } protected Settings getSettings() { return Settings.getInstance(project); } }