package org.intellij.plugins.markdown.settings;
import com.intellij.ide.ui.LafManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.util.xmlb.annotations.Attribute;
import org.jetbrains.annotations.NotNull;
import java.net.URISyntaxException;
import java.net.URL;
public final class MarkdownCssSettings {
public static final MarkdownCssSettings DEFAULT = new MarkdownCssSettings(false);
public static final MarkdownCssSettings DARCULA = new MarkdownCssSettings(true);
@Attribute("UriEnabled")
private boolean myUriEnabled;
@Attribute("StylesheetUri")
@NotNull
private String myStylesheetUri;
@Attribute("TextEnabled")
private boolean myTextEnabled;
@Attribute("StylesheetText")
@NotNull
private String myStylesheetText;
private MarkdownCssSettings() {
this(MarkdownLAFListener.isDarcula());
}
private MarkdownCssSettings(boolean isDarcula) {
this(true, getPredefinedCssURI(isDarcula), false, "");
}
public MarkdownCssSettings(boolean uriEnabled, @NotNull String stylesheetUri, boolean textEnabled, @NotNull String stylesheetText) {
myUriEnabled = uriEnabled;
myStylesheetUri = stylesheetUri;
myTextEnabled = textEnabled;
myStylesheetText = stylesheetText;
}
public boolean isUriEnabled() {
return myUriEnabled;
}
@NotNull
public String getStylesheetUri() {
return myStylesheetUri;
}
public boolean isTextEnabled() {
return myTextEnabled;
}
@NotNull
public String getStylesheetText() {
return myStylesheetText;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MarkdownCssSettings settings = (MarkdownCssSettings)o;
if (myUriEnabled != settings.myUriEnabled) return false;
if (myTextEnabled != settings.myTextEnabled) return false;
if (!myStylesheetUri.equals(settings.myStylesheetUri)) return false;
if (!myStylesheetText.equals(settings.myStylesheetText)) return false;
return true;
}
@NotNull
public static MarkdownCssSettings getDefaultCssSettings(boolean isDarcula) {
return isDarcula ? DARCULA : DEFAULT;
}
@NotNull
private static String getPredefinedCssURI(boolean isDarcula) {
final String fileName = isDarcula ? "darcula.css" : "default.css";
try {
final URL resource = MarkdownCssSettings.class.getResource(fileName);
return resource != null ? resource.toURI().toString() : "";
}
catch (URISyntaxException e) {
Logger.getInstance(MarkdownCssSettings.class).error(e);
return "";
}
}
@Override
public int hashCode() {
int result = (myUriEnabled ? 1 : 0);
result = 31 * result + myStylesheetUri.hashCode();
result = 31 * result + (myTextEnabled ? 1 : 0);
result = 31 * result + myStylesheetText.hashCode();
return result;
}
public interface Holder {
void setMarkdownCssSettings(@NotNull MarkdownCssSettings settings);
@NotNull
MarkdownCssSettings getMarkdownCssSettings();
}
}