package krasa.formatter.settings;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import krasa.formatter.Messages;
import krasa.formatter.plugin.ProjectSettingsForm;
import krasa.formatter.utils.ProjectUtils;
import org.apache.commons.lang.ObjectUtils;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
// implements Configurable
public class MyConfigurable implements Configurable {
private ProjectPersistentStateComponent stateComponent;
private Project project;
@Nullable
private ProjectSettingsForm form;
public MyConfigurable(ProjectPersistentStateComponent stateComponent, Project project) {
this.stateComponent = stateComponent;
this.project = project;
if (project.isDefault()) {
stateComponent.loadState(stateComponent.getState());
}
}
@Override
@Nls
public String getDisplayName() {
return Messages.message("action.pluginSettings");
}
@Override
@Nullable
@NonNls
public String getHelpTopic() {
return "EclipseCodeFormatter.Configuration";
}
@Override
@NotNull
public JComponent createComponent() {
if (form == null) {
form = new ProjectSettingsForm(project, this);
}
return form.getRootComponent();
}
@Override
public boolean isModified() {
return form != null && (form.isModified(stateComponent.getState()) || (form.getDisplayedSettings() != null && !isSameId()));
}
private boolean isSameId() {
return ObjectUtils.equals(form.getDisplayedSettings().getId(), stateComponent.getState().getId());
}
@Override
public void apply() throws ConfigurationException {
if (form != null) {
form.validate();
stateComponent.setState(form.exportDisplayedSettings());
GlobalSettings.getInstance().updateSettings(stateComponent.getState(), project);
ProjectUtils.applyToAllOpenedProjects(stateComponent.getState());
}
}
@Override
public void reset() {
if (form != null) {
form.importFrom(stateComponent.getState());
}
}
@Override
public void disposeUIResources() {
form = null;
}
}