浏览代码

Merge pull request #35 from Seedking/upgrade-ui-api

Upgrade kotlin UI dsl version 1 to 2
ruki 1 年之前
父节点
当前提交
da3a7edd5d

+ 1 - 1
gradle.properties

@@ -1,7 +1,7 @@
 pluginGroup=io.xmake
 pluginName=IntelliJ Xmake Plugin
 pluginVersion=1.3.0
-pluginSinceBuild=222.5
+pluginSinceBuild=223.7571.182
 pluginUntilBuild=232.*
 
 # Plugin Verifier integration -> https://github.com/JetBrains/gradle-intellij-plugin#plugin-verifier-dsl

+ 6 - 15
src/main/kotlin/io/xmake/project/XMakeNewProjectPanel.kt

@@ -6,11 +6,8 @@ import com.intellij.openapi.roots.ui.configuration.SdkComboBox
 import com.intellij.openapi.roots.ui.configuration.SdkComboBoxModel
 import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel
 import com.intellij.openapi.ui.ComboBox
-import com.intellij.ui.layout.LayoutBuilder
-import java.awt.BorderLayout
+import com.intellij.ui.dsl.builder.*
 import javax.swing.DefaultComboBoxModel
-import javax.swing.JComponent
-import javax.swing.JPanel
 
 class XMakeNewProjectPanel : Disposable {
 
@@ -34,7 +31,7 @@ class XMakeNewProjectPanel : Disposable {
     }
 
     // the module kinds
-    private val kindsComboBox = ComboBox(kindsModel)
+    private val moduleComboBox = ComboBox(kindsModel)
 
     // the module languages
     private val languagesComboBox = ComboBox(languagesModel)
@@ -54,8 +51,7 @@ class XMakeNewProjectPanel : Disposable {
             else -> "console"
         }
 
-
-    fun attachTo(layout: LayoutBuilder) = with(layout) {
+    fun attachTo(layout: Panel) = with(layout) {
         row("XMake SDK:") {
             val project = ProjectManager.getInstance().defaultProject
             val sdkModel = ProjectSdksModel()
@@ -64,23 +60,18 @@ class XMakeNewProjectPanel : Disposable {
                 sdkModel.addSdk(XMakeSdkType.instance, xmakeProgram, null)
             }
             val myJdkComboBox = SdkComboBox(SdkComboBoxModel.createSdkComboBoxModel(project, sdkModel))
-            wrapComponent(myJdkComboBox)(growX, pushX)
+            cell(myJdkComboBox).align(AlignX.FILL)
         }
         row("Module Language:") {
-            wrapComponent(languagesComboBox)(growX, pushX)
+            cell(languagesComboBox).align(AlignX.FILL)
         }
         row("Module Type:") {
-            wrapComponent(kindsComboBox)(growX, pushX)
+            cell(moduleComboBox).align(AlignX.FILL)
         }
 
         update()
     }
 
-    private fun wrapComponent(component: JComponent): JComponent =
-        JPanel(BorderLayout()).apply {
-            add(component, BorderLayout.NORTH)
-        }
-
     fun update() {
 
     }

+ 91 - 94
src/main/kotlin/io/xmake/project/XMakeProjectConfigurable.kt

@@ -9,14 +9,10 @@ import com.intellij.openapi.project.Project
 import com.intellij.openapi.ui.ComboBox
 import com.intellij.openapi.ui.LabeledComponent
 import com.intellij.openapi.ui.TextFieldWithBrowseButton
-import com.intellij.ui.RawCommandLineEditor
-import com.intellij.ui.components.CheckBox
-import com.intellij.ui.components.Label
-import com.intellij.ui.layout.LayoutBuilder
-import com.intellij.ui.layout.Row
-import com.intellij.ui.layout.panel
+import com.intellij.ui.components.JBCheckBox
+import com.intellij.ui.components.JBTextField
+import com.intellij.ui.dsl.builder.*
 import io.xmake.shared.XMakeConfiguration
-import io.xmake.shared.xmakeConfiguration
 import io.xmake.shared.xmakeConfigurationOrNull
 import java.awt.Dimension
 import javax.swing.JComponent
@@ -29,12 +25,10 @@ import java.awt.event.KeyEvent
 import java.awt.event.KeyListener
 import java.awt.event.ItemEvent
 import java.awt.event.ItemListener
-import java.io.IOException
 
 class XMakeProjectConfigurable(
         project: Project
 ) : Configurable, Configurable.NoScroll {
-
     // the platforms ui
     private val project = project
     private val platformsModel = DefaultComboBoxModel<String>()
@@ -49,7 +43,7 @@ class XMakeProjectConfigurable(
     private val modesComboBox = ComboBox<String>(modesModel)
 
     // the additional configuration
-    private val additionalConfiguration = RawCommandLineEditor()
+    private val additionalConfiguration = JBTextField()
 
     // the configuration command text
     private val configurationCommandText = JTextArea(10, 10)
@@ -88,100 +82,109 @@ class XMakeProjectConfigurable(
     }
 
     // verbose output
-    private val verboseOutput = CheckBox("Show verbose output", true)
+    private var verboseOutput = JBCheckBox("Show verbose output", true);
 
-    override fun createComponent(): JComponent = panel {
+    override fun createComponent(): JComponent {
+        return panel{
+            row("Platform:") {
+                comboBox(platformsModel)
+            }
 
-        labeledRow("Platform:", platformsComboBox) {
-            platformsComboBox()
-        }
+            row("Architecture:") {
+                comboBox(architecturesModel)
+            }
 
-        labeledRow("Architecture:", architecturesComboBox) {
-            architecturesComboBox()
-        }
+            row("Mode:"){
+                comboBox(modesModel)
+            }
 
-        labeledRow("Mode:", modesComboBox) {
-            modesComboBox()
-        }
+            row("Additional configuration:") {
+                cell(additionalConfiguration).align(AlignX.FILL)
+            }
 
-        labeledRow("Additional configuration:", additionalConfiguration) {
-            additionalConfiguration.apply {
-                makeWide()
-            }()
-        }
+            row {
+                cell(verboseOutput)
+            }
 
-        row { verboseOutput() }
+            row(workingDirectory.label) {
+                cell(workingDirectory).align(AlignX.FILL)
+            }
 
-        row(workingDirectory.label) {
-            workingDirectory.apply { makeWide() }()
-        }
+            row(buildOutputDirectory.label) {
+                cell(buildOutputDirectory).align(AlignX.FILL)
+            }
+            buildOutputDirectory.label.text = "Build directory: "
 
-        row(buildOutputDirectory.label) {
-            buildOutputDirectory.apply { makeWide() }()
-        }
-        buildOutputDirectory.label.text = "Build directory: "
+            row(androidNDKDirectory.label) {
+                cell(androidNDKDirectory).align(AlignX.FILL)
+            }
+            androidNDKDirectory.label.text = "Android NDK directory: "
 
-        row(androidNDKDirectory.label) {
-            androidNDKDirectory.apply { makeWide() }()
-        }
-        androidNDKDirectory.label.text = "Android NDK directory: "
+            row {
+                cell(configurationCommandText).align(AlignX.FILL)
+            }
+            configurationCommandText.setEditable(false)
+
+            platformsModel.addListDataListener(object : ListDataListener {
+                override fun contentsChanged(e: ListDataEvent) {
+                    architecturesModel.removeAllElements()
+                    for (architecture in XMakeConfiguration.getArchitecturesByPlatform(platformsModel.selectedItem.toString())) {
+                        architecturesModel.addElement(architecture)
+                    }
+                    configurationCommandText.text = previewConfigurationCommand
+                }
 
-        row {
-            configurationCommandText()
-        }
-        configurationCommandText.setEditable(false)
+                override fun intervalAdded(e: ListDataEvent) {
+                }
 
-        platformsModel.addListDataListener(object: ListDataListener {
-            override fun contentsChanged(e: ListDataEvent) {
-                architecturesModel.removeAllElements()
-                for (architecture in XMakeConfiguration.getArchitecturesByPlatform(platformsModel.selectedItem.toString())) {
-                    architecturesModel.addElement(architecture)
+                override fun intervalRemoved(e: ListDataEvent) {
                 }
-                configurationCommandText.text = previewConfigurationCommand
-            }
-            override fun intervalAdded(e: ListDataEvent) {
-            }
-            override fun intervalRemoved(e: ListDataEvent) {
-            }
-        })
+            })
 
-        architecturesModel.addListDataListener(object: ListDataListener {
-            override fun contentsChanged(e: ListDataEvent) {
-                configurationCommandText.text = previewConfigurationCommand
-            }
-            override fun intervalAdded(e: ListDataEvent) {
-            }
-            override fun intervalRemoved(e: ListDataEvent) {
-            }
-        })
+            architecturesModel.addListDataListener(object : ListDataListener {
+                override fun contentsChanged(e: ListDataEvent) {
+                    configurationCommandText.text = previewConfigurationCommand
+                }
 
-        modesModel.addListDataListener(object: ListDataListener {
-            override fun contentsChanged(e: ListDataEvent) {
-                configurationCommandText.text = previewConfigurationCommand
-            }
-            override fun intervalAdded(e: ListDataEvent) {
-            }
-            override fun intervalRemoved(e: ListDataEvent) {
-            }
-        })
+                override fun intervalAdded(e: ListDataEvent) {
+                }
 
-        additionalConfiguration.textField.addKeyListener(object: KeyListener {
-            override fun keyPressed(keyEvent: KeyEvent) {
-                configurationCommandText.text = previewConfigurationCommand
-            }
-            override fun keyReleased(keyEvent: KeyEvent) {
-                configurationCommandText.text = previewConfigurationCommand
-            }
-            override fun keyTyped(keyEvent: KeyEvent) {
-                configurationCommandText.text = previewConfigurationCommand
-            }
-        })
+                override fun intervalRemoved(e: ListDataEvent) {
+                }
+            })
 
-        verboseOutput.addItemListener(object: ItemListener {
-            override fun itemStateChanged(e: ItemEvent) {
-                configurationCommandText.text = previewConfigurationCommand
-            }
-        })
+            modesModel.addListDataListener(object : ListDataListener {
+                override fun contentsChanged(e: ListDataEvent) {
+                    configurationCommandText.text = previewConfigurationCommand
+                }
+
+                override fun intervalAdded(e: ListDataEvent) {
+                }
+
+                override fun intervalRemoved(e: ListDataEvent) {
+                }
+            })
+
+            additionalConfiguration.addKeyListener(object : KeyListener {
+                override fun keyPressed(keyEvent: KeyEvent) {
+                    configurationCommandText.text = previewConfigurationCommand
+                }
+
+                override fun keyReleased(keyEvent: KeyEvent) {
+                    configurationCommandText.text = previewConfigurationCommand
+                }
+
+                override fun keyTyped(keyEvent: KeyEvent) {
+                    configurationCommandText.text = previewConfigurationCommand
+                }
+            })
+
+            verboseOutput.addItemListener(object : ItemListener {
+                override fun itemStateChanged(e: ItemEvent) {
+                    configurationCommandText.text = previewConfigurationCommand
+                }
+            })
+        }
     }
 
     override fun disposeUIResources() {
@@ -271,12 +274,6 @@ class XMakeProjectConfigurable(
         preferredSize = Dimension(1000, height)
     }
 
-    private fun LayoutBuilder.labeledRow(labelText: String, component: JComponent, init: Row.() -> Unit) {
-        val label = Label(labelText)
-        label.labelFor = component
-        row(label) { init() }
-    }
-
     private val previewConfigurationCommand: String
         get() {
             var cmd = "xmake f"

+ 1 - 1
src/main/kotlin/io/xmake/project/XMakeProjectGeneratorPeer.kt

@@ -2,7 +2,7 @@ package io.xmake.project
 
 import com.intellij.openapi.ui.TextFieldWithBrowseButton
 import com.intellij.platform.GeneratorPeerImpl
-import com.intellij.ui.layout.panel
+import com.intellij.ui.dsl.builder.*
 import javax.swing.JComponent
 
 class XMakeProjectGeneratorPeer : GeneratorPeerImpl<XMakeConfigData>() {

+ 1 - 1
src/main/kotlin/io/xmake/project/XMakeSdkSettingsStep.kt

@@ -5,7 +5,7 @@ import com.intellij.ide.util.projectWizard.ModuleWizardStep
 import com.intellij.ide.util.projectWizard.WizardContext
 import com.intellij.openapi.module.Module
 import com.intellij.openapi.roots.ModifiableRootModel
-import com.intellij.ui.layout.panel
+import com.intellij.ui.dsl.builder.*
 import javax.swing.JComponent
 import com.intellij.openapi.util.Disposer
 

+ 2 - 2
src/main/kotlin/io/xmake/project/XMakeToolWindowFactory.kt

@@ -13,12 +13,12 @@ class XMakeToolWindowFactory : ToolWindowFactory {
 
         // add output tab/panel
         val toolwindowOutputPanel = XMakeToolWindowOutputPanel(project)
-        val outputTab = ContentFactory.SERVICE.getInstance().createContent(toolwindowOutputPanel, "Output", false)
+        val outputTab = ContentFactory.getInstance().createContent(toolwindowOutputPanel, "Output", false)
         toolWindow.contentManager.addContent(outputTab)
 
         // add problem tab/panel
         val toolwindowProblemPanel = XMakeToolWindowProblemPanel(project)
-        val problemTab = ContentFactory.SERVICE.getInstance().createContent(toolwindowProblemPanel, "Problem", false)
+        val problemTab = ContentFactory.getInstance().createContent(toolwindowProblemPanel, "Problem", false)
         toolWindow.contentManager.addContent(problemTab)
 
         // show the output panel by default

+ 12 - 2
src/main/kotlin/io/xmake/project/XMakeToolWindowProblemPanel.kt

@@ -12,8 +12,10 @@ import com.intellij.ui.JBColor
 import com.intellij.ui.SimpleTextAttributes
 import com.intellij.ui.components.JBList
 import com.intellij.ui.components.JBScrollPane
-import com.intellij.ui.layout.CCFlags
-import com.intellij.ui.layout.panel
+//import com.intellij.ui.layout.CCFlags
+//import com.intellij.ui.layout.panel
+import com.intellij.ui.dsl.builder.*
+import com.intellij.ui.dsl.builder.Row
 import io.xmake.icons.XMakeIcons
 import io.xmake.shared.XMakeProblem
 import java.awt.Font
@@ -85,11 +87,19 @@ class XMakeToolWindowProblemPanel(project: Project) : SimpleToolWindowPanel(fals
     }
 
     // the content
+    val content = panel {
+        row {
+            scrollCell(problemList)
+                .align(AlignX.FILL)
+        }
+    }
+    /*
     val content = panel {
         row {
             problemPane(CCFlags.push, CCFlags.grow)
         }
     }
+    */
 
     init {
 

+ 2 - 1
src/main/resources/META-INF/plugin.xml

@@ -45,6 +45,7 @@
     <strong>1.3.0</strong>
     <ul>
         <li>[FIX]: Update version </li>
+        <li>[FIX]: Upgrade Kotlin UI DSL version 1 to 2 </li>
     </ul>
     <strong>1.2.3</strong>
     <ul>
@@ -148,7 +149,7 @@
     </change-notes>
 
     <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
-    <idea-version since-build="222.5" until-build="232.*"/>
+    <idea-version since-build="223.7571.182" until-build="232.*"/>
 
     <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
          on how to target different products -->