diff options
Diffstat (limited to 'src/main/java/me/laria/code/idea_caseconv/settings')
4 files changed, 138 insertions, 0 deletions
diff --git a/src/main/java/me/laria/code/idea_caseconv/settings/Configurable.java b/src/main/java/me/laria/code/idea_caseconv/settings/Configurable.java new file mode 100644 index 0000000..056afd7 --- /dev/null +++ b/src/main/java/me/laria/code/idea_caseconv/settings/Configurable.java @@ -0,0 +1,44 @@ +package me.laria.code.idea_caseconv.settings; + +import com.intellij.openapi.options.ConfigurationException; +import org.jetbrains.annotations.Nls; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; + +public class Configurable implements com.intellij.openapi.options.Configurable { + private SettingsComponent settingsComponent = null; + + @Nls(capitalization = Nls.Capitalization.Sentence) + @Override + public String getDisplayName() { + return "Case conversion"; + } + + @Nullable + @Override + public JComponent createComponent() { + settingsComponent = new SettingsComponent(); + return settingsComponent.getPanel(); + } + + @Override + public void disposeUIResources() { + settingsComponent = null; + } + + @Override + public boolean isModified() { + return Settings.getInstance().newlineMode != settingsComponent.getNewlineMode(); + } + + @Override + public void apply() throws ConfigurationException { + Settings.getInstance().newlineMode = settingsComponent.getNewlineMode(); + } + + @Override + public void reset() { + settingsComponent.setNewlineMode(Settings.getInstance().newlineMode); + } +} diff --git a/src/main/java/me/laria/code/idea_caseconv/settings/NewlineMode.java b/src/main/java/me/laria/code/idea_caseconv/settings/NewlineMode.java new file mode 100644 index 0000000..2f669bf --- /dev/null +++ b/src/main/java/me/laria/code/idea_caseconv/settings/NewlineMode.java @@ -0,0 +1,6 @@ +package me.laria.code.idea_caseconv.settings; + +public enum NewlineMode { + WHITESPACE, + RECORD_SEPARATOR, +} diff --git a/src/main/java/me/laria/code/idea_caseconv/settings/Settings.java b/src/main/java/me/laria/code/idea_caseconv/settings/Settings.java new file mode 100644 index 0000000..28f15b1 --- /dev/null +++ b/src/main/java/me/laria/code/idea_caseconv/settings/Settings.java @@ -0,0 +1,33 @@ +package me.laria.code.idea_caseconv.settings; + +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.util.xmlb.XmlSerializerUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +@State( + name = "me.laria.code.idea_caseconv.SettingsState", + storages = {@Storage("me_laria_code_idea_caseconv_plugin.xml")} +) +public class Settings implements PersistentStateComponent<Settings> { + public NewlineMode newlineMode = NewlineMode.WHITESPACE; + + + public static Settings getInstance() { + return ServiceManager.getService(Settings.class); + } + + @Nullable + @Override + public Settings getState() { + return this; + } + + @Override + public void loadState(@NotNull Settings state) { + XmlSerializerUtil.copyBean(state, this); + } +} diff --git a/src/main/java/me/laria/code/idea_caseconv/settings/SettingsComponent.java b/src/main/java/me/laria/code/idea_caseconv/settings/SettingsComponent.java new file mode 100644 index 0000000..8de59eb --- /dev/null +++ b/src/main/java/me/laria/code/idea_caseconv/settings/SettingsComponent.java @@ -0,0 +1,55 @@ +package me.laria.code.idea_caseconv.settings; + +import com.intellij.openapi.ui.ComboBox; +import com.intellij.util.ui.FormBuilder; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; + +public class SettingsComponent { + final private JPanel mainPanel; + final private ComboBox<String> newlineModeSelect; + + public SettingsComponent() { + newlineModeSelect = new ComboBox<>(new String[]{ + "White space", + "Record separator", + }); + + mainPanel = FormBuilder.createFormBuilder() + .addLabeledComponent( + "Treat newline as", + newlineModeSelect, + 1, + false + ) + .addComponentFillVertically(new JPanel(), 0) + .getPanel(); + } + + public NewlineMode getNewlineMode() { + switch (newlineModeSelect.getSelectedIndex()) { + case 0: + return NewlineMode.WHITESPACE; + case 1: + return NewlineMode.RECORD_SEPARATOR; + default: + throw new IndexOutOfBoundsException("newlineModeSelect returned invalid index"); + } + } + + public void setNewlineMode(@NotNull NewlineMode newlineMode) { + switch (newlineMode) { + case WHITESPACE: + newlineModeSelect.setSelectedIndex(0); + break; + case RECORD_SEPARATOR: + newlineModeSelect.setSelectedIndex(1); + break; + } + } + + public JComponent getPanel() { + return mainPanel; + } +} |