Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 ----------------------------------------------------- //

Expand All @@ -37,6 +46,12 @@ class RubberDuck(parentDisposable: Disposable) : DeveloperUiTool(parentDisposabl
)
}

row("Duck Name:") {
textField()
.bindText(duckName)
.align(Align.FILL)
}

row {
cell(
BorderLayoutPanel().apply {
Expand All @@ -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)
}
}
)
Expand Down Expand Up @@ -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 ---------------------------------------------------- //
Expand Down