From 0ec2b040f89a3edddfecf1d3a7afaed2fab46828 Mon Sep 17 00:00:00 2001 From: Matthias Gugel Date: Sun, 13 Dec 2020 00:53:02 +0100 Subject: [PATCH] Provide filename template configuration --- .../CreateFileWithFilenameTemplateAction.kt | 49 ------------------- .../CreateFileWithFilenameTemplateAction.kt | 32 ++++++++++++ .../settings/FilenameTemplateConfigurable.kt | 42 ++++++++++++++++ .../FilenameTemplateSettingsComponent.kt | 40 +++++++++++++++ .../settings/FilenameTemplateSettingsState.kt | 30 ++++++++++++ src/main/resources/META-INF/plugin.xml | 10 ++-- 6 files changed, 150 insertions(+), 53 deletions(-) delete mode 100644 src/main/kotlin/CreateFileWithFilenameTemplateAction.kt create mode 100644 src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt create mode 100644 src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt create mode 100644 src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt create mode 100644 src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt diff --git a/src/main/kotlin/CreateFileWithFilenameTemplateAction.kt b/src/main/kotlin/CreateFileWithFilenameTemplateAction.kt deleted file mode 100644 index fd5e7b7..0000000 --- a/src/main/kotlin/CreateFileWithFilenameTemplateAction.kt +++ /dev/null @@ -1,49 +0,0 @@ -import com.intellij.icons.AllIcons -import com.intellij.ide.IdeBundle -import com.intellij.ide.actions.CreateFileAction -import com.intellij.ide.ui.newItemPopup.NewItemPopupUtil -import com.intellij.ide.ui.newItemPopup.NewItemSimplePopupPanel -import com.intellij.lang.LangBundle -import com.intellij.openapi.project.Project -import com.intellij.openapi.ui.InputValidatorEx -import com.intellij.openapi.ui.popup.JBPopup -import com.intellij.psi.PsiDirectory -import com.intellij.psi.PsiElement -import java.awt.event.InputEvent -import java.util.function.Consumer - -class CreateFileWithFilenameTemplateAction : - CreateFileAction("Flyway File", "Create flyway migration file", AllIcons.FileTypes.Unknown) { - override fun invokeDialog( - project: Project, - directory: PsiDirectory, - elementsConsumer: Consumer?> - ) { - val validator: MyInputValidator = MyValidator(project, directory) - createLightWeightPopup(validator, elementsConsumer).showCenteredInCurrentWindow(project) - } - - private fun createLightWeightPopup( - validator: MyInputValidator, - consumer: Consumer?> - ): JBPopup { - val contentPanel = NewItemSimplePopupPanel() - val nameField = contentPanel.textField - - val popup = NewItemPopupUtil.createNewItemPopup(IdeBundle.message("title.new.file"), contentPanel, nameField) - contentPanel.applyAction = com.intellij.util.Consumer { event: InputEvent? -> - val name = nameField.text - if (validator.checkInput(name) && validator.canClose(name)) { - popup.closeOk(event) - consumer.accept(validator.createdElements) - } else { - val errorMessage = - if (validator is InputValidatorEx) (validator as InputValidatorEx).getErrorText(name) else LangBundle.message( - "incorrect.name" - ) - contentPanel.setError(errorMessage) - } - } - return popup - } -} diff --git a/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt b/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt new file mode 100644 index 0000000..4a35c26 --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/CreateFileWithFilenameTemplateAction.kt @@ -0,0 +1,32 @@ +package de.idetools.filename_template + +import com.intellij.icons.AllIcons +import com.intellij.ide.IdeBundle +import com.intellij.ide.actions.CreateFileAction +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages +import com.intellij.psi.PsiDirectory +import com.intellij.psi.PsiElement +import java.time.LocalDateTime +import java.time.ZoneOffset + +class CreateFileWithFilenameTemplateAction( + text: String, + description: String, + private val template: String +) : + CreateFileAction(text, description, AllIcons.FileTypes.Unknown) { + + override fun invokeDialog(project: Project?, directory: PsiDirectory?): Array { + val validator: MyInputValidator = MyValidator(project, directory) + Messages.showInputDialog( + project, + IdeBundle.message("prompt.enter.new.file.name"), + IdeBundle.message("title.new.file"), + null, + template, + validator + ) + return validator.createdElements + } +} diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt new file mode 100644 index 0000000..858f99c --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateConfigurable.kt @@ -0,0 +1,42 @@ +package de.idetools.filename_template.settings + +import com.intellij.openapi.options.Configurable +import com.intellij.openapi.options.ConfigurationException +import org.jetbrains.annotations.Nls +import javax.swing.JComponent + + +class FilenameTemplateConfigurable : Configurable { + private var component: FilenameTemplateSettingsComponent = FilenameTemplateSettingsComponent() + + @Nls(capitalization = Nls.Capitalization.Title) + override fun getDisplayName(): String { + return "Filename Template Settings" + } + + override fun createComponent(): JComponent { + return component.panel + } + + override fun isModified(): Boolean { + val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance + return component.text != settings.text || + component.description != settings.description || + component.template != settings.template + } + + @Throws(ConfigurationException::class) + override fun apply() { + val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance + settings.text = component.text + settings.description = component.description + settings.template = component.template + } + + override fun reset() { + val settings: FilenameTemplateSettingsState = FilenameTemplateSettingsState.instance + component.text = settings.text + component.description = settings.description + component.template = settings.template + } +} diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt new file mode 100644 index 0000000..12f08f5 --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsComponent.kt @@ -0,0 +1,40 @@ +package de.idetools.filename_template.settings + +import com.intellij.ui.components.JBLabel +import com.intellij.ui.components.JBTextField +import com.intellij.util.ui.FormBuilder +import javax.swing.JPanel + +class FilenameTemplateSettingsComponent { + val panel: JPanel + private val textField: JBTextField = JBTextField() + private val descriptionField: JBTextField = JBTextField() + private val templateField: JBTextField = JBTextField() + + var text: String + get() = textField.text + set(value) { + textField.text = value + } + + var description: String + get() = descriptionField.text + set(value) { + descriptionField.text = value + } + + var template: String + get() = templateField.text + set(value) { + templateField.text = value + } + + init { + panel = FormBuilder.createFormBuilder() + .addLabeledComponent(JBLabel("Text"), textField, 1, false) + .addLabeledComponent(JBLabel("Description"), descriptionField, 1, false) + .addLabeledComponent(JBLabel("Template"), templateField, 1, false) + .addComponentFillVertically(JPanel(), 0) + .panel + } +} diff --git a/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt new file mode 100644 index 0000000..3c31a9d --- /dev/null +++ b/src/main/kotlin/de/idetools/filename_template/settings/FilenameTemplateSettingsState.kt @@ -0,0 +1,30 @@ +package de.idetools.filename_template.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 + +@State( + name = "de.idetools.filename_template.settings.FilenameTemplateSettingsState", + storages = [Storage("FilenameTemplateSettings.xml")] +) +class FilenameTemplateSettingsState : PersistentStateComponent { + var text = "" + var description = "" + var template = "" + + override fun getState(): FilenameTemplateSettingsState { + return this + } + + override fun loadState(state: FilenameTemplateSettingsState) { + XmlSerializerUtil.copyBean(state, this) + } + + companion object { + val instance: FilenameTemplateSettingsState + get() = ServiceManager.getService(FilenameTemplateSettingsState::class.java) + } +} diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index fa04033..b3ae9f6 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -12,13 +12,15 @@ com.intellij.modules.platform - + + - - -