From 6ea27a35ca749e0b3a42eeb636ce49bf31259fd7 Mon Sep 17 00:00:00 2001 From: banana Date: Sun, 3 Aug 2025 19:15:09 +0200 Subject: [PATCH 1/2] feat: Add an input to name the Rubber Duck --- .../tool/ui/other/RubberDuck.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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 87bfc4cb..c64d794c 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 { @@ -78,7 +93,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 ---------------------------------------------------- // From 426429909df6678c5b814d320ce704ad3e545a2e Mon Sep 17 00:00:00 2001 From: banana Date: Sun, 3 Aug 2025 19:16:44 +0200 Subject: [PATCH 2/2] feat: Make the Rubber Duck say its name on click --- .../tool/ui/other/RubberDuck.kt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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 c64d794c..02dcc8e5 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 @@ -64,7 +64,20 @@ class RubberDuck(configuration: DeveloperToolConfiguration, parentDisposable: Di 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) } } )