User: rednesto Date: 04 Jul 24 14:08 Revision: a3c6f09053af93bf3149fbdda7d91cb2df14c814 Summary: Convert event generation UI to Kotlin DSL TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9344&personal=false Index: src/main/kotlin/insight/generation/ui/EventListenerWizard.form =================================================================== --- src/main/kotlin/insight/generation/ui/EventListenerWizard.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/insight/generation/ui/EventListenerWizard.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) @@ -1,64 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Index: src/main/kotlin/insight/generation/ui/EventListenerWizard.kt =================================================================== --- src/main/kotlin/insight/generation/ui/EventListenerWizard.kt (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/insight/generation/ui/EventListenerWizard.kt (revision a3c6f09053af93bf3149fbdda7d91cb2df14c814) @@ -22,60 +22,62 @@ import com.intellij.ide.highlighter.JavaHighlightingColors import com.intellij.openapi.editor.ex.util.EditorUtil -import com.intellij.openapi.wm.ex.IdeFocusTraversalPolicy -import com.intellij.uiDesigner.core.GridConstraints +import com.intellij.openapi.observable.properties.PropertyGraph +import com.intellij.ui.dsl.builder.AlignX +import com.intellij.ui.dsl.builder.COLUMNS_LARGE +import com.intellij.ui.dsl.builder.bindText +import com.intellij.ui.dsl.builder.columns +import com.intellij.ui.dsl.builder.panel +import com.intellij.ui.dsl.builder.text import com.intellij.util.ui.UIUtil -import javax.swing.JLabel import javax.swing.JPanel -import javax.swing.JSeparator -import javax.swing.JTextField class EventListenerWizard(panel: JPanel?, className: String, defaultListenerName: String) { - lateinit var panel: JPanel - private lateinit var classNameTextField: JTextField - private lateinit var listenerNameTextField: JTextField - private lateinit var publicVoidLabel: JLabel - private lateinit var contentPanel: JPanel - private lateinit var separator: JSeparator - init { - classNameTextField.font = EditorUtil.getEditorFont() - listenerNameTextField.font = EditorUtil.getEditorFont() - publicVoidLabel.font = EditorUtil.getEditorFont() + private val graph = PropertyGraph("EventListenerWizard graph") + + private val listenerNameProperty = graph.property(defaultListenerName) + val chosenClassName: String by listenerNameProperty + + val panel: JPanel by lazy { + panel { + row { + textField() + .text(className) + .align(AlignX.FILL) + .apply { + component.font = EditorUtil.getEditorFont() + component.isEditable = false + } + } + + row { + label("public void").apply { + component.font = EditorUtil.getEditorFont() - if (UIUtil.isUnderDarcula()) { + if (UIUtil.isUnderDarcula()) { - publicVoidLabel.foreground = JavaHighlightingColors.KEYWORD.defaultAttributes.foregroundColor + component.foreground = JavaHighlightingColors.KEYWORD.defaultAttributes.foregroundColor - } else { + } else { - publicVoidLabel.foreground = + component.foreground = - JavaHighlightingColors.KEYWORD.fallbackAttributeKey!!.defaultAttributes.foregroundColor - } + JavaHighlightingColors.KEYWORD.fallbackAttributeKey!!.defaultAttributes.foregroundColor + } - - if (panel != null) { - separator.isVisible = true - contentPanel.add(panel, innerContentPanelConstraints) - } + } - classNameTextField.text = className - listenerNameTextField.text = defaultListenerName - - IdeFocusTraversalPolicy.getPreferredFocusedComponent(listenerNameTextField).requestFocus() - listenerNameTextField.requestFocus() + textField() + .bindText(listenerNameProperty) + .columns(COLUMNS_LARGE) + .focused() + .apply { + component.font = EditorUtil.getEditorFont() - } + } + } - val chosenClassName: String - get() = listenerNameTextField.text + if (panel != null) { + separator() - companion object { - private val innerContentPanelConstraints = GridConstraints() - - init { - innerContentPanelConstraints.row = 0 - innerContentPanelConstraints.column = 0 - innerContentPanelConstraints.rowSpan = 1 - innerContentPanelConstraints.colSpan = 1 - innerContentPanelConstraints.anchor = GridConstraints.ANCHOR_CENTER - innerContentPanelConstraints.fill = GridConstraints.FILL_BOTH - innerContentPanelConstraints.hSizePolicy = GridConstraints.SIZEPOLICY_FIXED - innerContentPanelConstraints.vSizePolicy = GridConstraints.SIZEPOLICY_FIXED + row { + cell(panel) - } - } -} + } + } + } + } +} Index: src/main/kotlin/platform/bukkit/generation/BukkitEventGenerationPanel.form =================================================================== --- src/main/kotlin/platform/bukkit/generation/BukkitEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/bukkit/generation/BukkitEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) @@ -1,48 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/platform/bukkit/generation/BukkitEventGenerationPanel.kt =================================================================== --- src/main/kotlin/platform/bukkit/generation/BukkitEventGenerationPanel.kt (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/bukkit/generation/BukkitEventGenerationPanel.kt (revision a3c6f09053af93bf3149fbdda7d91cb2df14c814) @@ -20,40 +20,41 @@ package com.demonwav.mcdev.platform.bukkit.generation +import com.demonwav.mcdev.asset.MCDevBundle import com.demonwav.mcdev.insight.generation.GenerationData import com.demonwav.mcdev.insight.generation.ui.EventGenerationPanel +import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.psi.PsiClass -import javax.swing.JCheckBox -import javax.swing.JComboBox +import com.intellij.ui.dsl.builder.bindItem +import com.intellij.ui.dsl.builder.bindSelected +import com.intellij.ui.dsl.builder.panel import javax.swing.JPanel class BukkitEventGenerationPanel(chosenClass: PsiClass) : EventGenerationPanel(chosenClass) { - private lateinit var ignoreCanceledCheckBox: JCheckBox - private lateinit var parentPanel: JPanel - private lateinit var eventPriorityComboBox: JComboBox + private val graph = PropertyGraph("BukkitEventGenerationPanel graph") - override val panel: JPanel - get() { - ignoreCanceledCheckBox.isSelected = true + private val ignoreCanceledProperty = graph.property(true) + private val eventPriorityProperty = graph.property("NORMAL") - // Not static because the form builder is not reliable - eventPriorityComboBox.addItem("MONITOR") - eventPriorityComboBox.addItem("HIGHEST") - eventPriorityComboBox.addItem("HIGH") - eventPriorityComboBox.addItem("NORMAL") - eventPriorityComboBox.addItem("LOW") - eventPriorityComboBox.addItem("LOWEST") + override val panel: JPanel by lazy { + panel { + row { + checkBox(MCDevBundle("generate.event_listener.ignore_if_canceled")) + .bindSelected(ignoreCanceledProperty) + } - eventPriorityComboBox.selectedIndex = 3 - - return parentPanel + row(MCDevBundle("generate.event_listener.event_priority")) { + comboBox(listOf("MONITOR", "HIGHEST", "HIGH", "NORMAL", "LOW", "LOWEST")) + .bindItem(eventPriorityProperty) - } + } + } + } override fun gatherData(): GenerationData { return BukkitGenerationData( - ignoreCanceledCheckBox.isSelected, - eventPriorityComboBox.selectedItem?.toString() ?: error("No selected item") + ignoreCanceledProperty.get(), + eventPriorityProperty.get() ) } } Index: src/main/kotlin/platform/bungeecord/generation/BungeeCordEventGenerationPanel.form =================================================================== --- src/main/kotlin/platform/bungeecord/generation/BungeeCordEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/bungeecord/generation/BungeeCordEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) @@ -1,40 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/platform/bungeecord/generation/BungeeCordEventGenerationPanel.kt =================================================================== --- src/main/kotlin/platform/bungeecord/generation/BungeeCordEventGenerationPanel.kt (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/bungeecord/generation/BungeeCordEventGenerationPanel.kt (revision a3c6f09053af93bf3149fbdda7d91cb2df14c814) @@ -20,29 +20,28 @@ package com.demonwav.mcdev.platform.bungeecord.generation +import com.demonwav.mcdev.asset.MCDevBundle import com.demonwav.mcdev.insight.generation.ui.EventGenerationPanel +import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.psi.PsiClass -import javax.swing.JComboBox +import com.intellij.ui.dsl.builder.bindItem +import com.intellij.ui.dsl.builder.panel import javax.swing.JPanel class BungeeCordEventGenerationPanel(chosenClass: PsiClass) : EventGenerationPanel(chosenClass) { - private lateinit var eventPriorityComboBox: JComboBox - private lateinit var parentPanel: JPanel + private val graph = PropertyGraph("BungeeCordEventGenerationPanel graph") - override val panel: JPanel - get() { - // Not static because the form builder is not reliable - eventPriorityComboBox.addItem("HIGHEST") - eventPriorityComboBox.addItem("HIGH") - eventPriorityComboBox.addItem("NORMAL") - eventPriorityComboBox.addItem("LOW") - eventPriorityComboBox.addItem("LOWEST") + private val eventPriorityProperty = graph.property("NORMAL") - eventPriorityComboBox.selectedIndex = 2 - - return parentPanel + override val panel: JPanel by lazy { + panel { + row(MCDevBundle("generate.event_listener.event_priority")) { + comboBox(listOf("HIGHEST", "HIGH", "NORMAL", "LOW", "LOWEST")) + .bindItem(eventPriorityProperty) - } + } + } + } - override fun gatherData() = BungeeCordGenerationData(eventPriorityComboBox.selectedItem.toString()) + override fun gatherData() = BungeeCordGenerationData(eventPriorityProperty.get()) } Index: src/main/kotlin/platform/sponge/generation/SpongeEventGenerationPanel.form =================================================================== --- src/main/kotlin/platform/sponge/generation/SpongeEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/sponge/generation/SpongeEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) @@ -1,48 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/platform/sponge/generation/SpongeEventGenerationPanel.kt =================================================================== --- src/main/kotlin/platform/sponge/generation/SpongeEventGenerationPanel.kt (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/sponge/generation/SpongeEventGenerationPanel.kt (revision a3c6f09053af93bf3149fbdda7d91cb2df14c814) @@ -20,40 +20,38 @@ package com.demonwav.mcdev.platform.sponge.generation +import com.demonwav.mcdev.asset.MCDevBundle import com.demonwav.mcdev.insight.generation.GenerationData import com.demonwav.mcdev.insight.generation.ui.EventGenerationPanel +import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.psi.PsiClass -import javax.swing.JCheckBox -import javax.swing.JComboBox +import com.intellij.ui.dsl.builder.bindItem +import com.intellij.ui.dsl.builder.bindSelected +import com.intellij.ui.dsl.builder.panel import javax.swing.JPanel class SpongeEventGenerationPanel(chosenClass: PsiClass) : EventGenerationPanel(chosenClass) { - private lateinit var parentPanel: JPanel - private lateinit var eventOrderComboBox: JComboBox - private lateinit var ignoreCanceledCheckBox: JCheckBox + private val graph = PropertyGraph("SpongeEventGenerationPanel graph") - override val panel: JPanel - get() { - ignoreCanceledCheckBox.isSelected = true + private val ignoreCanceledProperty = graph.property(true) + private val eventOrderProperty = graph.property("DEFAULT") - // Not static because the form builder is not reliable - eventOrderComboBox.addItem("PRE") - eventOrderComboBox.addItem("AFTER_PRE") - eventOrderComboBox.addItem("FIRST") - eventOrderComboBox.addItem("EARLY") - eventOrderComboBox.addItem("DEFAULT") - eventOrderComboBox.addItem("LATE") - eventOrderComboBox.addItem("LAST") - eventOrderComboBox.addItem("BEFORE_POST") - eventOrderComboBox.addItem("POST") + override val panel: JPanel by lazy { + panel { + row { + checkBox(MCDevBundle("generate.event_listener.ignore_if_canceled")) + .bindSelected(ignoreCanceledProperty) + } - eventOrderComboBox.selectedIndex = 4 - - return parentPanel + row(MCDevBundle("generate.event_listener.event_order")) { + comboBox(listOf("PRE", "AFTER_PRE", "FIRST", "EARLY", "DEFAULT", "LATE", "LAST", "BEFORE_POST", "POST")) + .bindItem(eventOrderProperty) - } + } + } + } override fun gatherData(): GenerationData { - return SpongeGenerationData(ignoreCanceledCheckBox.isSelected, eventOrderComboBox.selectedItem as String) + return SpongeGenerationData(ignoreCanceledProperty.get(), eventOrderProperty.get()) } } Index: src/main/kotlin/platform/velocity/generation/VelocityEventGenerationPanel.form =================================================================== --- src/main/kotlin/platform/velocity/generation/VelocityEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/velocity/generation/VelocityEventGenerationPanel.form (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) @@ -1,40 +0,0 @@ - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Index: src/main/kotlin/platform/velocity/generation/VelocityEventGenerationPanel.kt =================================================================== --- src/main/kotlin/platform/velocity/generation/VelocityEventGenerationPanel.kt (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/kotlin/platform/velocity/generation/VelocityEventGenerationPanel.kt (revision a3c6f09053af93bf3149fbdda7d91cb2df14c814) @@ -20,32 +20,31 @@ package com.demonwav.mcdev.platform.velocity.generation +import com.demonwav.mcdev.asset.MCDevBundle import com.demonwav.mcdev.insight.generation.GenerationData import com.demonwav.mcdev.insight.generation.ui.EventGenerationPanel +import com.intellij.openapi.observable.properties.PropertyGraph import com.intellij.psi.PsiClass -import javax.swing.JComboBox +import com.intellij.ui.dsl.builder.bindItem +import com.intellij.ui.dsl.builder.panel import javax.swing.JPanel class VelocityEventGenerationPanel(chosenClass: PsiClass) : EventGenerationPanel(chosenClass) { - private lateinit var parentPanel: JPanel - private lateinit var eventOrderComboBox: JComboBox + private val graph = PropertyGraph("VelocityEventGenerationPanel graph") - override val panel: JPanel - get() { - // Not static because the form builder is not reliable - eventOrderComboBox.addItem("FIRST") - eventOrderComboBox.addItem("EARLY") - eventOrderComboBox.addItem("NORMAL") - eventOrderComboBox.addItem("LATE") - eventOrderComboBox.addItem("LAST") + private val eventOrderProperty = graph.property("NORMAL") - eventOrderComboBox.selectedIndex = 2 - - return parentPanel + override val panel: JPanel by lazy { + panel { + row(MCDevBundle("generate.event_listener.event_order")) { + comboBox(listOf("FIRST", "EARLY", "NORMAL", "LATE", "LAST")) + .bindItem(eventOrderProperty) - } + } + } + } override fun gatherData(): GenerationData { - return VelocityGenerationData(eventOrderComboBox.selectedItem as String) + return VelocityGenerationData(eventOrderProperty.get()) } } Index: src/main/resources/messages/MinecraftDevelopment.properties =================================================================== --- src/main/resources/messages/MinecraftDevelopment.properties (revision d20f5e7f61d2f846778c86634cecdb282c8a8b9a) +++ src/main/resources/messages/MinecraftDevelopment.properties (revision a3c6f09053af93bf3149fbdda7d91cb2df14c814) @@ -98,6 +98,9 @@ generate.event_listener.title=Generate Event Listener generate.event_listener.settings=Event Listener Settings +generate.event_listener.event_priority=Event Priority +generate.event_listener.event_order=Event Order +generate.event_listener.ignore_if_canceled=Ignore if event is canceled generate.class.caption=Minecraft Class generate.class.description=Class generation for modders