diff --git a/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/ActionListeners.kt b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/ActionListeners.kt new file mode 100644 index 00000000000..de8dbd13dd5 --- /dev/null +++ b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/ActionListeners.kt @@ -0,0 +1,73 @@ +package kotlin.swing + +import javax.swing.* +import java.awt.event.* +import java.awt.* + +// TODO this file may be deleted when this issue is implemented +// http://youtrack.jetbrains.com/issue/KT-1752 + +/** + * Creates a [[ActionListener]] for the given function for processing each [[ActionEvent]] + */ +inline fun actionListener(fn: (ActionEvent) -> Unit): ActionListener = FunctionActionListener(fn) + +private class FunctionActionListener(val fn: (ActionEvent) -> Unit) : ActionListener { + public override fun actionPerformed(e: ActionEvent?) { + if (e != null) { + (fn)(e) + } + } +} + +inline fun Button.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun List.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun MenuItem.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun TextField.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun TrayIcon.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun AbstractButton.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun ButtonModel.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun ComboBoxEditor.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun DefaultButtonModel.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun JComboBox.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun JFileChooser.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun JTextField.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} + +inline fun Timer.addActionListener(fn: (ActionEvent) -> Unit): Unit { + addActionListener(actionListener(fn)) +} diff --git a/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Builders.kt b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Builders.kt index 88347fa25e1..4db1a8f1a3b 100644 --- a/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Builders.kt +++ b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Builders.kt @@ -16,13 +16,3 @@ fun panel(init: JPanel.() -> Unit): JPanel { p.init() return p } - -fun button(text: String, action: (ActionEvent) -> Unit): JButton { - val result = JButton(text) - result.addActionListener(object : ActionListener { - public override fun actionPerformed(e: ActionEvent?) { - action(e!!) - } - }) - return result -} diff --git a/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Buttons.kt b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Buttons.kt new file mode 100644 index 00000000000..5a210ca4683 --- /dev/null +++ b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/Buttons.kt @@ -0,0 +1,11 @@ +package kotlin.swing + +import javax.swing.* +import java.awt.event.* +import java.awt.* + +fun button(text: String, action: (ActionEvent) -> Unit): JButton { + val result = JButton(text) + result.addActionListener(action) + return result +} diff --git a/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/ChangeListeners.kt b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/ChangeListeners.kt new file mode 100644 index 00000000000..0ec6ac8b812 --- /dev/null +++ b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/ChangeListeners.kt @@ -0,0 +1,101 @@ +package kotlin.swing + +import java.awt.* +import java.awt.event.* +import javax.swing.* +import javax.swing.colorchooser.* +import javax.swing.event.* +import javax.swing.text.* + +// TODO this file may be deleted when this issue is implemented +// http://youtrack.jetbrains.com/issue/KT-1752 + +/** + * Creates a [[ChangeListener]] for the given function for processing each [[ChangeEvent]] + */ +inline fun changeListener(fn: (ChangeEvent) -> Unit): ChangeListener = FunctionChangeListener(fn) + +private class FunctionChangeListener(val fn: (ChangeEvent) -> Unit) : ChangeListener { + public override fun stateChanged(e: ChangeEvent?) { + if (e != null) { + (fn)(e) + } + } +} + +inline fun AbstractButton.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun AbstractSpinnerModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun BoundedRangeModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun ButtonModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun ColorSelectionModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun DefaultColorSelectionModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun DefaultSingleSelectionModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun JProgressBar.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun DefaultButtonModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun JSlider.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun JSpinner.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun JViewport.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun MenuSelectionManager.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun SingleSelectionModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun SpinnerModel.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun Caret.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun DefaultCaret.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun Style.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + +inline fun StyleContext.addChangeListener(fn: (ChangeEvent) -> Unit): Unit { + addChangeListener(changeListener(fn)) +} + diff --git a/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/PropertyChangeListeners.kt b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/PropertyChangeListeners.kt new file mode 100644 index 00000000000..e2c1cf90943 --- /dev/null +++ b/libraries/kotlin-swing/src/main/kotlin/kotlin/swing/PropertyChangeListeners.kt @@ -0,0 +1,15 @@ +package kotlin.swing + +import kotlin.beans.* + +import javax.swing.* +import java.awt.event.* +import java.awt.* +import java.beans.* + +// TODO this file may be deleted when this issue is implemented +// http://youtrack.jetbrains.com/issue/KT-1752 + +inline fun Component.addPropertyChangeListener(fn: (PropertyChangeEvent) -> Unit): Unit { + addPropertyChangeListener(propertyChangeListener(fn)) +} diff --git a/libraries/stdlib/src/kotlin/beans/Listeners.kt b/libraries/stdlib/src/kotlin/beans/Listeners.kt new file mode 100644 index 00000000000..680025ff12c --- /dev/null +++ b/libraries/stdlib/src/kotlin/beans/Listeners.kt @@ -0,0 +1,19 @@ +package kotlin.beans + +import java.beans.* + +// TODO this file may be deleted when this issue is implemented +// http://youtrack.jetbrains.com/issue/KT-1752 + +/** + * Creates a [[PropertyChangeListener]] for the given function for processing each [[PropertyChangeEvent]] + */ +inline fun propertyChangeListener(fn: (PropertyChangeEvent) -> Unit): PropertyChangeListener = FunctionPropertyChangeListener(fn) + +private class FunctionPropertyChangeListener(val fn: (PropertyChangeEvent) -> Unit) : PropertyChangeListener { + public override fun propertyChange(e: PropertyChangeEvent?) { + if (e != null) { + (fn)(e) + } + } +}