package org.asciidoc.intellij.settings; import com.intellij.openapi.application.ApplicationManager; 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.openapi.components.StoragePathMacros; import com.intellij.util.messages.Topic; import com.intellij.util.xmlb.XmlSerializerUtil; import com.intellij.util.xmlb.annotations.Property; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @State( name = "AsciidocApplicationSettings", storages = @Storage(file = StoragePathMacros.APP_CONFIG + "/asciidoc.xml") // keep the line above to be compatible with IntellJ 15.x editions // use the line below with IntellJ 2016.2.x // @Storage("asciidoc.xml") ) public class AsciiDocApplicationSettings implements PersistentStateComponent<AsciiDocApplicationSettings.State>, AsciiDocPreviewSettings.Holder { private State myState = new State(); @NotNull public static AsciiDocApplicationSettings getInstance() { return ServiceManager.getService(AsciiDocApplicationSettings.class); } @Nullable @Override public State getState() { return myState; } @Override public void loadState(State state) { XmlSerializerUtil.copyBean(state, myState); } @Override public void setAsciiDocPreviewSettings(@NotNull AsciiDocPreviewSettings settings) { myState.myPreviewSettings = settings; ApplicationManager.getApplication().getMessageBus().syncPublisher(SettingsChangedListener.TOPIC).onSettingsChange(this); } @NotNull @Override public AsciiDocPreviewSettings getAsciiDocPreviewSettings() { return myState.myPreviewSettings; } public static class State { @Property(surroundWithTag = false) @NotNull private AsciiDocPreviewSettings myPreviewSettings = AsciiDocPreviewSettings.DEFAULT; } public interface SettingsChangedListener { Topic<SettingsChangedListener> TOPIC = Topic.create("AsciiDocApplicationSettingsChanged", SettingsChangedListener.class); void onSettingsChange(@NotNull AsciiDocApplicationSettings settings); } }