added a start of a work around for KT-1752 not being implemented yet so folks can write nicer swing programs

This commit is contained in:
James Strachan
2012-04-10 10:33:10 +01:00
parent c3b3e5c7c1
commit 686924b919
6 changed files with 219 additions and 10 deletions
@@ -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))
}
@@ -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
}
@@ -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
}
@@ -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))
}
@@ -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))
}
@@ -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)
}
}
}