User: rednesto Date: 04 Jul 24 16:49 Revision: ca003f90104183b54a82500a44edfe62bcc43082 Summary: Convert last forms to Kotlin UI DSL TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9346&personal=false Index: src/main/kotlin/platform/mixin/action/FindMixinsComponent.form =================================================================== --- src/main/kotlin/platform/mixin/action/FindMixinsComponent.form (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/kotlin/platform/mixin/action/FindMixinsComponent.form (revision 6aa9273da52cc76483f324f922eff23d2475d272) @@ -1,26 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/platform/mixin/action/FindMixinsComponent.kt =================================================================== --- src/main/kotlin/platform/mixin/action/FindMixinsComponent.kt (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/kotlin/platform/mixin/action/FindMixinsComponent.kt (revision ca003f90104183b54a82500a44edfe62bcc43082) @@ -20,28 +20,27 @@ package com.demonwav.mcdev.platform.mixin.action -import com.demonwav.mcdev.util.toArray import com.intellij.ide.util.PsiClassListCellRenderer import com.intellij.psi.PsiClass import com.intellij.ui.components.JBList +import com.intellij.ui.dsl.builder.Align +import com.intellij.ui.dsl.builder.panel import java.awt.event.MouseAdapter import java.awt.event.MouseEvent import javax.swing.JPanel -import javax.swing.ListModel class FindMixinsComponent(classes: List) : MouseAdapter() { - private lateinit var classList: JBList - lateinit var panel: JPanel - private set + private val classList = JBList(classes).apply { + cellRenderer = PsiClassListCellRenderer() + addMouseListener(this@FindMixinsComponent) + } - init { - @Suppress("UNCHECKED_CAST") - classList.model = JBList.createDefaultListModel(*classes.toArray()) as ListModel - classList.cellRenderer = PsiClassListCellRenderer() - - classList.addMouseListener(this) + val panel: JPanel = panel { + row { + cell(classList).align(Align.FILL) - } + } + } override fun mouseClicked(e: MouseEvent) { classList.selectedValue?.takeIf(PsiClass::canNavigate)?.navigate(true) Index: src/main/kotlin/translations/actions/TranslationSortOrderDialog.form =================================================================== --- src/main/kotlin/translations/actions/TranslationSortOrderDialog.form (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/kotlin/translations/actions/TranslationSortOrderDialog.form (revision 6aa9273da52cc76483f324f922eff23d2475d272) @@ -1,89 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/translations/actions/TranslationSortOrderDialog.kt =================================================================== --- src/main/kotlin/translations/actions/TranslationSortOrderDialog.kt (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/kotlin/translations/actions/TranslationSortOrderDialog.kt (revision ca003f90104183b54a82500a44edfe62bcc43082) @@ -20,45 +20,59 @@ package com.demonwav.mcdev.translations.actions +import com.demonwav.mcdev.asset.MCDevBundle import com.demonwav.mcdev.translations.sorting.Ordering +import com.intellij.CommonBundle +import com.intellij.openapi.observable.properties.PropertyGraph +import com.intellij.ui.dsl.builder.AlignX +import com.intellij.ui.dsl.builder.bindIntValue +import com.intellij.ui.dsl.builder.bindItem +import com.intellij.ui.dsl.builder.panel import java.awt.Component import java.awt.event.KeyEvent import java.awt.event.WindowAdapter import java.awt.event.WindowEvent -import javax.swing.DefaultComboBoxModel import javax.swing.DefaultListCellRenderer -import javax.swing.JButton -import javax.swing.JComboBox import javax.swing.JComponent import javax.swing.JDialog import javax.swing.JList -import javax.swing.JPanel -import javax.swing.JSpinner import javax.swing.KeyStroke -import javax.swing.SpinnerNumberModel import javax.swing.WindowConstants class TranslationSortOrderDialog(excludeDefaultOption: Boolean, defaultSelection: Ordering) : JDialog() { - private lateinit var contentPane: JPanel - private lateinit var buttonOK: JButton - private lateinit var buttonCancel: JButton - private lateinit var comboSelection: JComboBox - private lateinit var spinnerComments: JSpinner - init { - setContentPane(contentPane) - isModal = true - title = "Select Sort Order" - getRootPane().defaultButton = buttonOK + private val graph = PropertyGraph("TranslationSortOrderDialog graph") - buttonOK.addActionListener { onOK() } - buttonCancel.addActionListener { onCancel() } - spinnerComments.model = SpinnerNumberModel(0, 0, Int.MAX_VALUE, 1) + private val orderProperty = graph.property(defaultSelection) + private val keepCommentsProperty = graph.property(0) + + private var canceled = false + + init { val availableOrderings = if (excludeDefaultOption) NON_DEFAULT_ORDERINGS else ALL_ORDERINGS - comboSelection.model = DefaultComboBoxModel(availableOrderings) - comboSelection.renderer = CellRenderer - comboSelection.selectedItem = defaultSelection + val panel = panel { + row(MCDevBundle("translation_sort.order")) { + comboBox(availableOrderings, CellRenderer) + .bindItem(orderProperty) + } + row(MCDevBundle("translation_sort.keep_comment")) { + spinner(0..Int.MAX_VALUE) + .bindIntValue(keepCommentsProperty::get, keepCommentsProperty::set) + } + + row { + button(CommonBundle.message("button.ok")) { onOK() }.align(AlignX.RIGHT).also { + getRootPane().defaultButton = it.component + } + button(CommonBundle.message("button.cancel")) { onCancel() }.align(AlignX.RIGHT) + } + } + contentPane = panel + + isModal = true + title = MCDevBundle("translation_sort.title") + // call onCancel() when cross is clicked defaultCloseOperation = WindowConstants.DO_NOTHING_ON_CLOSE addWindowListener( @@ -70,7 +84,7 @@ ) // call onCancel() on ESCAPE - contentPane.registerKeyboardAction( + panel.registerKeyboardAction( { onCancel() }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, @@ -82,7 +96,7 @@ } private fun onCancel() { - comboSelection.selectedIndex = -1 + canceled = true dispose() } @@ -100,17 +114,17 @@ } companion object { - private val ALL_ORDERINGS = Ordering.values() - private val NON_DEFAULT_ORDERINGS = Ordering.values() - .filterNot { it == Ordering.LIKE_DEFAULT }.toTypedArray() + private val ALL_ORDERINGS = Ordering.entries + private val NON_DEFAULT_ORDERINGS = Ordering.entries + .filterNot { it == Ordering.LIKE_DEFAULT } fun show(excludeDefaultOption: Boolean, defaultSelection: Ordering): Pair { val dialog = TranslationSortOrderDialog(excludeDefaultOption, defaultSelection) dialog.pack() dialog.setLocationRelativeTo(dialog.owner) dialog.isVisible = true - val order = dialog.comboSelection.selectedItem as? Ordering - val comments = dialog.spinnerComments.value as Int + val order = if (dialog.canceled) null else dialog.orderProperty.get() + val comments = dialog.keepCommentsProperty.get() return (order to comments) } } Index: src/main/kotlin/translations/sorting/TranslationTemplateConfigurable.form =================================================================== --- src/main/kotlin/translations/sorting/TranslationTemplateConfigurable.form (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/kotlin/translations/sorting/TranslationTemplateConfigurable.form (revision 6aa9273da52cc76483f324f922eff23d2475d272) @@ -1,58 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/translations/sorting/TranslationTemplateConfigurable.kt =================================================================== --- src/main/kotlin/translations/sorting/TranslationTemplateConfigurable.kt (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/kotlin/translations/sorting/TranslationTemplateConfigurable.kt (revision ca003f90104183b54a82500a44edfe62bcc43082) @@ -20,6 +20,7 @@ package com.demonwav.mcdev.translations.sorting +import com.demonwav.mcdev.asset.MCDevBundle import com.demonwav.mcdev.translations.lang.colors.LangSyntaxHighlighter import com.intellij.codeInsight.template.impl.TemplateEditorUtil import com.intellij.ide.DataManager @@ -30,6 +31,8 @@ import com.intellij.openapi.editor.ex.util.LexerEditorHighlighter import com.intellij.openapi.options.Configurable import com.intellij.openapi.project.Project +import com.intellij.ui.dsl.builder.Align +import com.intellij.ui.dsl.builder.panel import com.intellij.util.ui.JBUI import java.awt.BorderLayout import javax.swing.DefaultComboBoxModel @@ -39,32 +42,47 @@ import org.jetbrains.annotations.Nls class TranslationTemplateConfigurable(private val project: Project) : Configurable { - private lateinit var panel: JPanel private lateinit var cmbScheme: JComboBox - private lateinit var editorPanel: JPanel - private lateinit var templateEditor: Editor + private var templateEditor: Editor? = null + private val editorPanel = JPanel(BorderLayout()).apply { + preferredSize = JBUI.size(250, 450) + minimumSize = preferredSize + } + + private val panel = panel { + row(MCDevBundle("minecraft.settings.lang_template.scheme")) { + cmbScheme = comboBox(emptyList()).component + } + + row { + label(MCDevBundle("minecraft.settings.lang_template.comment")) + } + + row { + cell(editorPanel).align(Align.FILL) + } + } + @Nls - override fun getDisplayName() = "Localization Template" + override fun getDisplayName() = MCDevBundle("minecraft.settings.lang_template.display_name") override fun getHelpTopic(): String? = null - override fun createComponent(): JComponent { - return panel - } + override fun createComponent(): JComponent = panel private fun getActiveTemplateText() = when { cmbScheme.selectedIndex == 0 -> TemplateManager.getGlobalTemplateText() !project.isDefault -> TemplateManager.getProjectTemplateText(project) - else -> "You must have selected a project for this!" + else -> MCDevBundle("minecraft.settings.lang_template.project_must_be_selected") } private fun init() { if (project.isDefault) { - cmbScheme.selectedIndex = 0 cmbScheme.model = DefaultComboBoxModel(arrayOf("Global")) - } else if (cmbScheme.selectedIndex == 0) { + cmbScheme.selectedIndex = 0 + } else { cmbScheme.model = DefaultComboBoxModel(arrayOf("Global", "Project")) } cmbScheme.addActionListener { @@ -82,24 +100,25 @@ editorColorsScheme, ) (templateEditor as EditorEx).highlighter = highlighter - templateEditor.settings.isLineNumbersShown = true + templateEditor!!.settings.isLineNumbersShown = true - editorPanel.preferredSize = JBUI.size(250, 100) - editorPanel.minimumSize = editorPanel.preferredSize editorPanel.removeAll() - editorPanel.add(templateEditor.component, BorderLayout.CENTER) + editorPanel.add(templateEditor!!.component, BorderLayout.CENTER) } override fun isModified(): Boolean { - return templateEditor.document.text != getActiveTemplateText() + return templateEditor?.document?.text != getActiveTemplateText() != false } override fun apply() { + val editor = templateEditor + ?: return + val project = CommonDataKeys.PROJECT.getData(DataManager.getInstance().getDataContext(panel)) if (cmbScheme.selectedIndex == 0) { - TemplateManager.writeGlobalTemplate(templateEditor.document.text) + TemplateManager.writeGlobalTemplate(editor.document.text) } else if (project != null) { - TemplateManager.writeProjectTemplate(project, templateEditor.document.text) + TemplateManager.writeProjectTemplate(project, editor.document.text) } } Index: src/main/resources/messages/MinecraftDevelopment.properties =================================================================== --- src/main/resources/messages/MinecraftDevelopment.properties (revision 6aa9273da52cc76483f324f922eff23d2475d272) +++ src/main/resources/messages/MinecraftDevelopment.properties (revision ca003f90104183b54a82500a44edfe62bcc43082) @@ -193,6 +193,10 @@ intention.error.cannot.create.class.message=Cannot create class ''{0}''\n{1} intention.error.cannot.create.class.title=Failed to Create Class +translation_sort.title=Select Sort Order +translation_sort.order=Sort Order +translation_sort.keep_comment=Keep Comment + minecraft.settings.display_name=Minecraft Development minecraft.settings.title=Minecraft Development Settings minecraft.settings.change_update_channel=Change Plugin Update Channel @@ -203,3 +207,9 @@ minecraft.settings.chat_color_underline_style=Chat color underline style: minecraft.settings.mixin=Mixin minecraft.settings.mixin.shadow_annotation_same_line=@Shadow annotations on same line +minecraft.settings.lang_template.display_name=Localization Template +minecraft.settings.lang_template.scheme=Scheme: +minecraft.settings.lang_template.project_must_be_selected=You must have selected a project for this! +minecraft.settings.lang_template.comment=You may edit the template used for translation key sorting here.\ +
Each line may be empty, a comment (with #) or a glob pattern for matching translation keys (like "item.*").\ +
Note: Empty lines are respected and will be put into the sorting result.