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.