diff --git a/modules/tools/ui/src/main/kotlin/dev/turingcomplete/intellijdevelopertoolsplugin/tool/ui/other/RubberDuck.kt b/modules/tools/ui/src/main/kotlin/dev/turingcomplete/intellijdevelopertoolsplugin/tool/ui/other/RubberDuck.kt index 87bfc4c..02dcc8e 100644 --- a/modules/tools/ui/src/main/kotlin/dev/turingcomplete/intellijdevelopertoolsplugin/tool/ui/other/RubberDuck.kt +++ b/modules/tools/ui/src/main/kotlin/dev/turingcomplete/intellijdevelopertoolsplugin/tool/ui/other/RubberDuck.kt @@ -3,9 +3,11 @@ package dev.turingcomplete.intellijdevelopertoolsplugin.tool.ui.other import com.intellij.ide.BrowserUtil import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.Messages import com.intellij.ui.components.JBLabel import com.intellij.ui.dsl.builder.Align import com.intellij.ui.dsl.builder.Panel +import com.intellij.ui.dsl.builder.bindText import com.intellij.util.ui.components.BorderLayoutPanel import dev.turingcomplete.intellijdevelopertoolsplugin.settings.DeveloperToolConfiguration import dev.turingcomplete.intellijdevelopertoolsplugin.tool.ui.base.DeveloperUiTool @@ -17,8 +19,15 @@ import javax.imageio.ImageIO import javax.swing.ImageIcon import javax.swing.JLabel -class RubberDuck(parentDisposable: Disposable) : DeveloperUiTool(parentDisposable) { +class RubberDuck(configuration: DeveloperToolConfiguration, parentDisposable: Disposable) : DeveloperUiTool(parentDisposable) { // -- Properties ---------------------------------------------------------- // + + private val duckName = configuration.register( + key = "duckName", + defaultValue = "Rubber Duck", + propertyType = DeveloperToolConfiguration.PropertyType.INPUT + ) + // -- Initialization ------------------------------------------------------ // // -- Exposed Methods ----------------------------------------------------- // @@ -37,6 +46,12 @@ class RubberDuck(parentDisposable: Disposable) : DeveloperUiTool(parentDisposabl ) } + row("Duck Name:") { + textField() + .bindText(duckName) + .align(Align.FILL) + } + row { cell( BorderLayoutPanel().apply { @@ -49,7 +64,20 @@ class RubberDuck(parentDisposable: Disposable) : DeveloperUiTool(parentDisposabl val read = ImageIO.read(it) val scaledInstance = read.getScaledInstance(read.width.div(2), read.height.div(2), SCALE_SMOOTH) - addToCenter(JLabel(ImageIcon(scaledInstance))) + + val clickableDuck = JLabel(ImageIcon(scaledInstance)).apply { + toolTipText = "Quack me!" + addMouseListener(object : java.awt.event.MouseAdapter() { + override fun mouseClicked(e: java.awt.event.MouseEvent?) { + Messages.showInfoMessage( + "Hello, I'm ${duckName.get()} !", + "🐤 Quack!" + ) + } + }) + } + + addToCenter(clickableDuck) } } ) @@ -78,7 +106,7 @@ class RubberDuck(parentDisposable: Disposable) : DeveloperUiTool(parentDisposabl project: Project?, parentDisposable: Disposable, context: DeveloperUiToolContext, - ): ((DeveloperToolConfiguration) -> RubberDuck) = { RubberDuck(parentDisposable) } + ): ((DeveloperToolConfiguration) -> RubberDuck) = { configuration -> RubberDuck(configuration , parentDisposable) } } // -- Companion Object ---------------------------------------------------- //