From ef488e9e397a045afe5ad6d2c2a4c6b4e8b1cdfa Mon Sep 17 00:00:00 2001 From: NAME Date: Wed, 26 Mar 2008 10:02:01 +0000 Subject: scala.swing update --- src/swing/scala/swing/AWTComponentWrapper.scala | 3 - src/swing/scala/swing/BoxPanel.scala | 11 ++++ src/swing/scala/swing/Button.scala | 19 +++--- src/swing/scala/swing/Component.scala | 71 ++++++++++++++++------ src/swing/scala/swing/ComponentList.scala | 4 +- src/swing/scala/swing/Container.scala | 46 +++++++++----- src/swing/scala/swing/Dimension.scala | 18 +++++- src/swing/scala/swing/EditorComponent.scala | 5 ++ src/swing/scala/swing/EmptyBorder.scala | 11 ++-- src/swing/scala/swing/FlowPanel.scala | 6 ++ src/swing/scala/swing/Frame.scala | 41 +++++++++---- src/swing/scala/swing/GridPanel.scala | 14 +++++ src/swing/scala/swing/IndexedPanel.scala | 8 +++ src/swing/scala/swing/Label.scala | 14 ++--- src/swing/scala/swing/MainFrame.scala | 9 ++- src/swing/scala/swing/Orientation.scala | 47 ++++++++++++-- src/swing/scala/swing/Panel.scala | 16 ++--- src/swing/scala/swing/ProgressBar.scala | 29 +++++++++ src/swing/scala/swing/Publisher.scala | 16 ++--- src/swing/scala/swing/ScrollPane.scala | 16 ++--- src/swing/scala/swing/Showable.scala | 12 ++++ src/swing/scala/swing/SimpleGUIApplication.scala | 7 +-- src/swing/scala/swing/Slider.scala | 56 +++++++++++++---- src/swing/scala/swing/Spreadsheet.scala | 4 +- src/swing/scala/swing/Swing.scala | 35 +++++++++++ src/swing/scala/swing/SwingComponent.scala | 6 +- src/swing/scala/swing/Table.scala | 44 +++++++------- src/swing/scala/swing/TextComponent.scala | 34 +++++++---- src/swing/scala/swing/TextField.scala | 27 ++++---- src/swing/scala/swing/UIElement.scala | 5 ++ src/swing/scala/swing/event/ButtonPressed.scala | 2 +- src/swing/scala/swing/event/CaretUpdate.scala | 2 +- src/swing/scala/swing/event/CellModified.scala | 2 +- src/swing/scala/swing/event/ComponentEvent.scala | 3 + src/swing/scala/swing/event/ContentModified.scala | 3 + src/swing/scala/swing/event/Event.scala | 2 +- src/swing/scala/swing/event/TableChanged.scala | 4 +- src/swing/scala/swing/event/TableResized.scala | 4 +- src/swing/scala/swing/event/TextModified.scala | 2 +- src/swing/scala/swing/event/WindowActivated.scala | 2 +- src/swing/scala/swing/event/WindowClosed.scala | 2 +- src/swing/scala/swing/event/WindowClosing.scala | 2 +- .../scala/swing/event/WindowDeactivated.scala | 2 +- .../scala/swing/event/WindowDeiconified.scala | 2 +- src/swing/scala/swing/event/WindowEvent.scala | 4 +- src/swing/scala/swing/event/WindowIconified.scala | 2 +- src/swing/scala/swing/event/WindowOpened.scala | 2 +- src/swing/scala/swing/layout.scala | 12 ---- src/swing/scala/swing/test/CelsiusConverter.scala | 21 +++---- src/swing/scala/swing/test/CelsiusConverter2.scala | 18 +++--- src/swing/scala/swing/test/HelloWorld.scala | 9 ++- src/swing/scala/swing/test/SwingApp.scala | 8 +-- 52 files changed, 496 insertions(+), 248 deletions(-) delete mode 100644 src/swing/scala/swing/AWTComponentWrapper.scala create mode 100644 src/swing/scala/swing/BoxPanel.scala create mode 100644 src/swing/scala/swing/EditorComponent.scala create mode 100644 src/swing/scala/swing/FlowPanel.scala create mode 100644 src/swing/scala/swing/GridPanel.scala create mode 100644 src/swing/scala/swing/IndexedPanel.scala create mode 100644 src/swing/scala/swing/ProgressBar.scala create mode 100644 src/swing/scala/swing/Showable.scala create mode 100644 src/swing/scala/swing/Swing.scala create mode 100644 src/swing/scala/swing/UIElement.scala create mode 100644 src/swing/scala/swing/event/ComponentEvent.scala create mode 100644 src/swing/scala/swing/event/ContentModified.scala delete mode 100644 src/swing/scala/swing/layout.scala diff --git a/src/swing/scala/swing/AWTComponentWrapper.scala b/src/swing/scala/swing/AWTComponentWrapper.scala deleted file mode 100644 index 9a140e5506..0000000000 --- a/src/swing/scala/swing/AWTComponentWrapper.scala +++ /dev/null @@ -1,3 +0,0 @@ -package swing; - -class AWTComponentWrapper(val acomponent: java.awt.Component) extends Component diff --git a/src/swing/scala/swing/BoxPanel.scala b/src/swing/scala/swing/BoxPanel.scala new file mode 100644 index 0000000000..0c7c1b90bd --- /dev/null +++ b/src/swing/scala/swing/BoxPanel.scala @@ -0,0 +1,11 @@ +package swing + +class BoxPanel(orientation: Orientation)(content0: Component*) extends IndexedPanel { + override lazy val peer = { + val p = new javax.swing.JPanel + val l = new javax.swing.BoxLayout(p, orientation.peer) + p.setLayout(l) + p + } + content ++ content0 +} diff --git a/src/swing/scala/swing/Button.scala b/src/swing/scala/swing/Button.scala index 0f6d8dc056..5f945611c5 100644 --- a/src/swing/scala/swing/Button.scala +++ b/src/swing/scala/swing/Button.scala @@ -1,20 +1,21 @@ -package swing; +package swing import javax.swing._ import event._ /** A class for buttons; standard constructor wraps around a swing button */ -class Button(val jbutton: JButton) extends Container(jbutton) with SwingComponent with Publisher { +class Button(override val peer: JButton) extends Component with Publisher { def this(txt: String) = this(new JButton(txt)) - def this() = this(new JButton()) - def text: String = jbutton.getText() - def text_=(s: String) = jbutton.setText(s) - def icon: Icon = jbutton.getIcon() - def icon_=(i: Icon) = jbutton.setIcon(i) - jbutton.addActionListener { + def this() = this(new JButton) + def text: String = peer.getText + def text_=(s: String) = peer.setText(s) + def icon: Icon = peer.getIcon + def icon_=(i: Icon) = peer.setIcon(i) + peer.addActionListener { new java.awt.event.ActionListener { - def actionPerformed(e: java.awt.event.ActionEvent): unit = + def actionPerformed(e: java.awt.event.ActionEvent) { publish(ButtonPressed(Button.this)) + } } } } diff --git a/src/swing/scala/swing/Component.scala b/src/swing/scala/swing/Component.scala index 3a5c98d90b..a022340103 100644 --- a/src/swing/scala/swing/Component.scala +++ b/src/swing/scala/swing/Component.scala @@ -1,26 +1,61 @@ -package swing; +package swing -import javax.swing._; -import java.awt._; +import java.awt.Font +import javax.swing.border.Border -abstract class Component -extends Object -with Reactor -{ - val acomponent: java.awt.Component +object Component { + val ClientKey = "scala.swingWrapper" + def wrapperFor[C<:Component](c: javax.swing.JComponent): C = c.getClientProperty(ClientKey).asInstanceOf[C] +} + +abstract class Component extends UIElement with Showable.Swing with Reactor { + lazy val peer: javax.swing.JComponent = new javax.swing.JComponent {} + peer.putClientProperty(Component.ClientKey, this) + + def minimumSize = peer.getMinimumSize + def minimumSize_=(x: Dimension) = peer.setMinimumSize(x.peer) + def maxiumumSize = peer.getMaximumSize + def maxiumumSize_=(x: Dimension) = peer.setMaximumSize(x.peer) + def preferredSize = peer.getPreferredSize + def preferredSize_=(x: Dimension) = peer.setPreferredSize(x.peer) + + def xAlignment: Double = peer.getAlignmentX + def xAlignment_=(x: Double) = peer.setAlignmentX(x.toFloat) + def yAlignment: Double = peer.getAlignmentY + def yAlignment_=(x: Double) = peer.setAlignmentY(x.toFloat) + + def foreground: Color = new Color(peer.getForeground) + def foreground_=(x: Color) = peer.setForeground(x) + def background: Color = new Color(peer.getBackground) + def background_=(x: Color) = peer.setBackground(x) + def border: Border = peer.getBorder + def border_=(x: Border) { peer.setBorder(x) } - def preferredSize = acomponent.getPreferredSize - def preferredSize_=(x: Dimension) = acomponent.setPreferredSize(x) - def preferredSize_=(xy: (Int, Int)) = acomponent.setPreferredSize(Dimension(xy._1, xy._2)) + def font: Font = peer.getFont + def font_=(x: Font) = peer.setFont(x) + def opaque: Boolean = peer.isOpaque + def opaque_=(x: Boolean) = peer.setOpaque(x) - def foreground: Color = new Color(acomponent.getForeground) - def foreground_=(x: Color) = acomponent.setForeground(x) + def tooltip: String = peer.getToolTipText + def tooltip_=(t: String) = peer.setToolTipText(t) - def background: Color = new Color(acomponent.getBackground) - def background_=(x: Color) = acomponent.setBackground(x) + def inputVerifier: this.type => Boolean = { a => + peer.getInputVerifier().verify(a.peer) + } + def inputVerifier_=(v: this.type => Boolean) { + peer.setInputVerifier(new javax.swing.InputVerifier { + def verify(c: javax.swing.JComponent) = v(Component.wrapperFor(c)) + }) + } - def font: Font = acomponent.getFont - def font_=(x: Font) = acomponent.setFont(x) + /*def verifyOnTraversal: (Component, Component) => Boolean = { a => + peer.getInputVerifier().verify(a.peer) + } + def verifyOnTraversal_=(v: (Component, Component) => Boolean) { + peer.setInputVerifier(new javax.swing.InputVerifier { + def verify(c: javax.swing.JComponent) = v(Component.wrapperFor(c)) + }) + }*/ - def show: this.type = { acomponent.setVisible(true); this } + override def toString = "scala.swing wrapper " + peer.toString } diff --git a/src/swing/scala/swing/ComponentList.scala b/src/swing/scala/swing/ComponentList.scala index 3876c84492..fe1a66a1c4 100644 --- a/src/swing/scala/swing/ComponentList.scala +++ b/src/swing/scala/swing/ComponentList.scala @@ -3,8 +3,8 @@ package swing import javax.swing._ import event._ -class ComponentList(val jlist: JList) extends Container(jlist) with SwingComponent with Publisher { - def this() = this(new JList()) +class ComponentList(val jlist: JList) extends Container(jlist) with Publisher { + def this() = this(new JList) def this(elems: Seq[Object]) = this(new JList(elems.toArray)) def fixedCellWidth = jlist.getFixedCellWidth diff --git a/src/swing/scala/swing/Container.scala b/src/swing/scala/swing/Container.scala index 12cbf11072..72cf15d440 100644 --- a/src/swing/scala/swing/Container.scala +++ b/src/swing/scala/swing/Container.scala @@ -1,19 +1,37 @@ -package swing; +package swing -import javax.swing._ -import scala.collection.mutable.ListBuffer +import scala.collection.mutable.Buffer -class Container(val jcontainer: java.awt.Container) extends Component { - val acomponent = jcontainer - def this() = this(new java.awt.Container()) - val elems = new ListBuffer[Component] - def += (c: Component) = { - elems += c - jcontainer.add(c.acomponent) - } - def -= (c: Component) = { - elems -= c - jcontainer.remove(c.acomponent) +abstract class Container(override val peer: javax.swing.JComponent) extends Component { + def this() = this(new javax.swing.JComponent {}) + def content: Seq[Component] = new Content + + protected class Content extends Buffer[Component] { + def wrap(c: java.awt.Component) = Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent]) + def clear = peer.removeAll() + def remove(n: Int): Component = { + val c = peer.getComponent(n) + peer.remove(n) + wrap(c) + } + def update(n: Int, c: Component) { peer.add(c.peer, n) } + def insertAll(n: Int, iter: Iterable[Component]) { + var i = n + for(el <- iter) { + peer.add(el.peer, i) + i += 1 + } + } + def readOnly : RandomAccessSeq[Component] = new RandomAccessSeq[Component] { + def length = Content.this.length + def apply(idx : Int) = Content.this.apply(idx) + override def stringPrefix = Content.this.stringPrefix + "RO" + } + def +:(c: Component): Buffer[Component] = { update(0, c); this } + def +=(c: Component) { peer.add(c.peer); this } + def length = peer.getComponentCount + def elements = peer.getComponents.projection.map(wrap(_)).elements + def apply(n: Int) = wrap(peer.getComponent(n)) } } diff --git a/src/swing/scala/swing/Dimension.scala b/src/swing/scala/swing/Dimension.scala index 2c1ebde994..85a2c0a841 100644 --- a/src/swing/scala/swing/Dimension.scala +++ b/src/swing/scala/swing/Dimension.scala @@ -1,5 +1,17 @@ -package swing; +package swing -case class Dimension(w: Int, h: Int) extends java.awt.Dimension(w, h) { - def this(dim: java.awt.Dimension) = this(dim.width, dim.height) +object Dimension { + def apply(w: Int, h: Int) = new Dimension { + lazy val peer: java.awt.Dimension = new java.awt.Dimension(w, h) + } + + def wrap(dim: java.awt.Dimension) = new Dimension { + def peer: java.awt.Dimension = dim + } +} + +abstract class Dimension { + def peer: java.awt.Dimension + def width = peer.getWidth + def height = peer.getHeight } diff --git a/src/swing/scala/swing/EditorComponent.scala b/src/swing/scala/swing/EditorComponent.scala new file mode 100644 index 0000000000..e83dce3bc9 --- /dev/null +++ b/src/swing/scala/swing/EditorComponent.scala @@ -0,0 +1,5 @@ +package swing + +trait EditorComponent extends Component { + val contentModified: Publisher +} \ No newline at end of file diff --git a/src/swing/scala/swing/EmptyBorder.scala b/src/swing/scala/swing/EmptyBorder.scala index 4524f00fe3..0bbcc1e409 100644 --- a/src/swing/scala/swing/EmptyBorder.scala +++ b/src/swing/scala/swing/EmptyBorder.scala @@ -1,10 +1,9 @@ -package swing; +package swing -import javax.swing._ - -class EmptyBorder(_top: int, _left: int, _bottom: int, _right: int) -extends border.EmptyBorder(_top, _left, _bottom, _right) { - def this() = this(0, 0, 0, 0) +object EmptyBorder { + def apply(top: int, left: int, bottom: int, right: int) = + new javax.swing.border.EmptyBorder(top, left, bottom, right) + def apply() = new javax.swing.border.EmptyBorder(0, 0, 0, 0) } diff --git a/src/swing/scala/swing/FlowPanel.scala b/src/swing/scala/swing/FlowPanel.scala new file mode 100644 index 0000000000..cd14c2e731 --- /dev/null +++ b/src/swing/scala/swing/FlowPanel.scala @@ -0,0 +1,6 @@ +package swing + +class FlowPanel(orientation: Orientation)(content0: Component*) extends IndexedPanel { + override lazy val peer = new javax.swing.JPanel(new java.awt.FlowLayout(orientation.peer)) + content ++ content0 +} diff --git a/src/swing/scala/swing/Frame.scala b/src/swing/scala/swing/Frame.scala index fadd69d00c..d1ad443fe0 100644 --- a/src/swing/scala/swing/Frame.scala +++ b/src/swing/scala/swing/Frame.scala @@ -1,18 +1,33 @@ -package swing; +package swing -import javax.swing._; -import event._; +import javax.swing.JFrame +import event._ -class Frame(val jframe: JFrame) extends Container(jframe) with Publisher { - def this() = this(new JFrame("Untitled Frame")) - def title: String = jframe.getTitle() - def title_=(s: String) = jframe.setTitle(s) - val contents = new Container(jframe.getContentPane()) - private var default_button: Button = null - def defaultButton = default_button - def defaultButton_=(b: Button) = { default_button = b; jframe.getRootPane().setDefaultButton(b.jbutton) } - def pack: this.type = { jframe.pack(); this } - jframe.addWindowListener { +class Frame(val peer: JFrame) extends UIElement with Showable.Swing with Publisher { + def this() = this(new JFrame) + def title: String = peer.getTitle + def title_=(s: String) = peer.setTitle(s) + content = new Component {} + def content: Component = { + if (peer.getContentPane.getComponentCount == 0) new Component {} + else { + val c = peer.getContentPane.getComponent(0) + Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent]) + } + } + def content_=(c: Component) = { + if (peer.getContentPane.getComponentCount > 0) { + val old = peer.getContentPane.getComponent(0) + peer.getContentPane.remove(old) + } + peer.getContentPane.add(c.peer) + peer.pack() // pack also validates, which is generally required after an add} + + } + def defaultButton: Button = Component.wrapperFor(peer.getRootPane.getDefaultButton) + def defaultButton_=(b: Button) { peer.getRootPane.setDefaultButton(b.peer) } + def pack(): this.type = { peer.pack(); this } + peer.addWindowListener { new java.awt.event.WindowListener { def windowActivated(e: java.awt.event.WindowEvent) = publish(WindowActivated(Frame.this)) def windowClosed(e: java.awt.event.WindowEvent) = publish(WindowClosed(Frame.this)) diff --git a/src/swing/scala/swing/GridPanel.scala b/src/swing/scala/swing/GridPanel.scala new file mode 100644 index 0000000000..21bbd76455 --- /dev/null +++ b/src/swing/scala/swing/GridPanel.scala @@ -0,0 +1,14 @@ +package swing + +object GridPanel { + val Adapt = 0 +} + +class GridPanel(rows0: Int, cols0: Int)(content0: Component*) extends IndexedPanel { + override lazy val layout = new java.awt.GridLayout(rows0, cols0) + override lazy val peer = new javax.swing.JPanel(layout) + content ++ content0 + + def rows: Int = layout.getRows + def columns: Int = layout.getColumns +} diff --git a/src/swing/scala/swing/IndexedPanel.scala b/src/swing/scala/swing/IndexedPanel.scala new file mode 100644 index 0000000000..491df9a6b1 --- /dev/null +++ b/src/swing/scala/swing/IndexedPanel.scala @@ -0,0 +1,8 @@ +package swing + +import scala.collection.mutable.Buffer + +abstract class IndexedPanel extends Panel { + override val content: Buffer[Component] = new Content + def content_=(c: Component*) { content.clear(); content ++= c } +} diff --git a/src/swing/scala/swing/Label.scala b/src/swing/scala/swing/Label.scala index 622d74d9de..98ad0ff4d3 100644 --- a/src/swing/scala/swing/Label.scala +++ b/src/swing/scala/swing/Label.scala @@ -2,13 +2,13 @@ package swing; import javax.swing._; -class Label(val jlabel: JLabel) extends Container(jlabel) with SwingComponent { +class Label(override val peer: JLabel) extends Component { def this(txt: String) = this(new JLabel(txt)) def this() = this("Untitled Label") - def text: String = jlabel.getText() - def text_=(s: String) = jlabel.setText(s) - def halign: Orientation.Value = Orientation(jlabel.getHorizontalAlignment()) - def halign_=(x: Orientation.Value) = jlabel.setHorizontalAlignment(x.id) - def valign: Orientation.Value = Orientation(jlabel.getVerticalAlignment()) - def valign_=(x: Orientation.Value) = jlabel.setVerticalAlignment(x.id) + def text: String = peer.getText() + def text_=(s: String) = peer.setText(s) + def xLabelAlignment: XAlignment = XAlignment.wrap(peer.getHorizontalAlignment) + def xLabelAlignment_=(x: XAlignment) = peer.setHorizontalAlignment(x.peer) + def yLabelAlignment: YAlignment = YAlignment.wrap(peer.getVerticalAlignment) + def yLabelAlignment_=(x: YAlignment) = peer.setVerticalAlignment(x.peer) } diff --git a/src/swing/scala/swing/MainFrame.scala b/src/swing/scala/swing/MainFrame.scala index 59701ae5e9..ea35bccd53 100644 --- a/src/swing/scala/swing/MainFrame.scala +++ b/src/swing/scala/swing/MainFrame.scala @@ -1,10 +1,9 @@ -package swing; +package swing -import javax.swing._; -import event._; +import event._ -class MainFrame(jframe: JFrame) extends Frame(jframe) { - def this() = this(new JFrame("Untitled Frame")) +class MainFrame(peer: javax.swing.JFrame) extends Frame(peer) { + def this() = this(new javax.swing.JFrame) reactions += { case WindowClosing(_) => System.exit(1) } diff --git a/src/swing/scala/swing/Orientation.scala b/src/swing/scala/swing/Orientation.scala index 4c6bed34ab..ceb02f9778 100644 --- a/src/swing/scala/swing/Orientation.scala +++ b/src/swing/scala/swing/Orientation.scala @@ -2,10 +2,45 @@ package swing import javax.swing.SwingConstants._ -object Orientation extends Enumeration { - val left = Value(LEFT, "left") - val right = Value(RIGHT, "right") - val bottom = Value(BOTTOM, "bottom") - val top = Value(TOP, "top") - val center = Value(CENTER, "center") +object Orientation { + def wrap(n: Int): Orientation = n match { + case HORIZONTAL => Horizontal + case VERTICAL => Vertical + } } +sealed trait Orientation { def peer: Int } +case object Horizontal extends Orientation { def peer = HORIZONTAL } +case object Vertical extends Orientation { def peer = VERTICAL } + +object XAlignment { + def wrap(n: Int): XAlignment = n match { + case LEFT => Left + case RIGHT => Right + case CENTER => Center + } +} +sealed trait XAlignment { def peer: Int } + +object YAlignment { + def wrap(n: Int): YAlignment = n match { + case TOP => Top + case BOTTOM => Bottom + case CENTER => Center + //case BASELINE => Baseline + } +} +sealed trait YAlignment { def peer: Int } +case object Left extends XAlignment { def peer = LEFT } +case object Right extends XAlignment { def peer = RIGHT } +case object Top extends YAlignment { def peer = TOP } +//case object Baseline extends YAlignment { def peer = BASELINE } +case object Bottom extends YAlignment { def peer = BOTTOM } +case object Center extends XAlignment with YAlignment { def peer = CENTER } + +/*object Orientation extends Enumeration { + val Left = Value(LEFT, "left") + val Right = Value(RIGHT, "right") + val Bottom = Value(BOTTOM, "bottom") + val Top = Value(TOP, "top") + val Center = Value(CENTER, "center") +}*/ diff --git a/src/swing/scala/swing/Panel.scala b/src/swing/scala/swing/Panel.scala index e848e1bb7f..40fb69a6d6 100644 --- a/src/swing/scala/swing/Panel.scala +++ b/src/swing/scala/swing/Panel.scala @@ -1,15 +1,7 @@ -package swing; +package swing -import javax.swing._ -import java.awt.event._ +abstract class Panel extends Container { + override lazy val peer: javax.swing.JPanel = new javax.swing.JPanel -class Panel(val jpanel: JPanel) extends Container(jpanel) with SwingComponent { - def this(layout: java.awt.LayoutManager, elements: Component*) = { - this(new JPanel(layout)); - for (val elem <- elements) this += elem - } - def this(elements: Component*) = this(new java.awt.FlowLayout, elements: _*) - - def layout: java.awt.LayoutManager = jpanel.getLayout() - def layout_=(x: java.awt.LayoutManager) = jpanel.setLayout(x) + def layout: java.awt.LayoutManager = peer.getLayout } diff --git a/src/swing/scala/swing/ProgressBar.scala b/src/swing/scala/swing/ProgressBar.scala new file mode 100644 index 0000000000..6172a1f598 --- /dev/null +++ b/src/swing/scala/swing/ProgressBar.scala @@ -0,0 +1,29 @@ +package swing + +import event._ + +class ProgressBar(override val peer: javax.swing.JProgressBar) extends Component { + def this() = this(new javax.swing.JProgressBar) + + def orientation: Orientation = Orientation.wrap(peer.getOrientation) + def orientation_=(o: Orientation) { peer.setOrientation(o.peer) } + + def min: Int = peer.getMinimum + def min_=(v: Int) { peer.setMinimum(v) } + def max: Int = peer.getMaximum + def max_=(v: Int) { peer.setMaximum(v) } + def value: Int = peer.getValue + def value_=(v: Int) { peer.setValue(v) } + + def labelPainted: Boolean = peer.isStringPainted + def labelPainted_=(v: Boolean) { peer.setStringPainted(v) } + + def label: String = peer.getString + def label_=(v: String) = peer.setString(v) + + def indeterminate: Boolean = peer.isIndeterminate + def indeterminate_=(v: Boolean) { peer.setIndeterminate(v) } + + def paintBorder: Boolean = peer.isBorderPainted + def paintBorder(v: Boolean) { peer.setBorderPainted(v) } +} \ No newline at end of file diff --git a/src/swing/scala/swing/Publisher.scala b/src/swing/scala/swing/Publisher.scala index 09ff2522fe..76023aadf3 100644 --- a/src/swing/scala/swing/Publisher.scala +++ b/src/swing/scala/swing/Publisher.scala @@ -1,18 +1,14 @@ -package swing; +package swing import scala.collection.mutable.HashSet import event.Event -trait Publisher extends Object with Reactor { +trait Publisher extends Reactor { + protected var listeners = new HashSet[Reactions] - protected var listeners = new HashSet[Reactions]; - - def subscribe(listener: Reactions) = { listeners += listener } - - def unsubscribe(listener: Reactions) = { listeners -= listener } - - def publish(e: Event) = - for (val l <- listeners) l.send(e) + def subscribe(listener: Reactions) { listeners += listener } + def unsubscribe(listener: Reactions) { listeners -= listener } + def publish(e: Event) { for (val l <- listeners) l.send(e) } listenTo(this) } diff --git a/src/swing/scala/swing/ScrollPane.scala b/src/swing/scala/swing/ScrollPane.scala index d66d590d2e..b6cb577175 100644 --- a/src/swing/scala/swing/ScrollPane.scala +++ b/src/swing/scala/swing/ScrollPane.scala @@ -1,18 +1,14 @@ package swing; -import javax.swing._ -import javax.swing.table._ -import javax.swing.event._ -import event._ +import javax.swing.JScrollPane -class ScrollPane(val jscrollpane: JScrollPane) extends Container(jscrollpane) with SwingComponent with Publisher { - def this() = this(new JScrollPane()) - def this(contents: Component) = this(new JScrollPane(contents.acomponent)) +class ScrollPane(override val peer: JScrollPane) extends Container(peer) with Publisher { + def this() = this(new JScrollPane) + def this(contents: Component) = this(new JScrollPane(contents.peer)) def rowHeaderView: Component = null - def rowHeaderView_=(c: Component) = jscrollpane.setRowHeaderView(c.acomponent) - + def rowHeaderView_=(c: Component) = peer.setRowHeaderView(c.peer) def viewportView: Component = null - def viewportView_=(c: Component) = jscrollpane.setViewportView(c.acomponent) + def viewportView_=(c: Component) = peer.setViewportView(c.peer) } diff --git a/src/swing/scala/swing/Showable.scala b/src/swing/scala/swing/Showable.scala new file mode 100644 index 0000000000..02e6110144 --- /dev/null +++ b/src/swing/scala/swing/Showable.scala @@ -0,0 +1,12 @@ +package swing + +object Showable { + trait Swing extends Showable { + def peer: { def setVisible(b: Boolean) } + def show(): this.type = { peer.setVisible(true); this } + } +} + +trait Showable { + def show(): this.type +} diff --git a/src/swing/scala/swing/SimpleGUIApplication.scala b/src/swing/scala/swing/SimpleGUIApplication.scala index 43708d955a..208a85d1b4 100644 --- a/src/swing/scala/swing/SimpleGUIApplication.scala +++ b/src/swing/scala/swing/SimpleGUIApplication.scala @@ -3,14 +3,11 @@ package swing import javax.swing._ abstract class SimpleGUIApplication extends GUIApplication { - - def top: Frame; + def top: Frame def main(args: Array[String]) = { SwingUtilities.invokeLater { - new Runnable() { - def run(): unit = { init(); top.pack.show } - } + new Runnable { def run() { init(); top.pack.show() } } } } diff --git a/src/swing/scala/swing/Slider.scala b/src/swing/scala/swing/Slider.scala index 18fae3225b..10b56fe458 100644 --- a/src/swing/scala/swing/Slider.scala +++ b/src/swing/scala/swing/Slider.scala @@ -1,17 +1,47 @@ -package swing; +package swing -import javax.swing._ import event._ +import Swing._ -class Slider(val jbutton: JButton) extends Container(jbutton) with Publisher { - def this(txt: String) = this(new JButton(txt)) - def this() = this("Untitled Button") - def text: String = jbutton.getText() - def text_=(s: String) = jbutton.setText(s) - jbutton.addActionListener { - new java.awt.event.ActionListener { - def actionPerformed(e: java.awt.event.ActionEvent): unit = - {} - } +class Slider(override val peer: javax.swing.JSlider) extends Component with EditorComponent { + def this() = this(new javax.swing.JSlider) + + def orientation: Orientation = Orientation.wrap(peer.getOrientation) + def orientation_=(o: Orientation) { peer.setOrientation(o.peer) } + + def min: Int = peer.getMinimum + def min_=(v: Int) { peer.setMinimum(v) } + def max: Int = peer.getMaximum + def max_=(v: Int) { peer.setMaximum(v) } + def value: Int = peer.getValue + def value_=(v: Int) { peer.setValue(v) } + def extent: Int = peer.getExtent + def extent_=(v: Int) { peer.setExtent(v) } + + def paintLabels: Boolean = peer.getPaintLabels + def paintLabels_=(v: Boolean) { peer.setPaintLabels(v) } + def paintTicks: Boolean = peer.getPaintTicks + def paintTicks_=(v: Boolean) { peer.setPaintTicks(v) } + def paintTrack: Boolean = peer.getPaintTrack + def paintTrack_=(v: Boolean) { peer.setPaintTrack(v) } + + def snapToTicks: Boolean = peer.getSnapToTicks + def snapToTicks_=(v: Boolean) { peer.setSnapToTicks(v) } + + def minorTickSpacing: Int = peer.getMinorTickSpacing + def minorTickSpacing_=(v: Int) { peer.setMinorTickSpacing(v) } + def majorTickSpacing: Int = peer.getMajorTickSpacing + def majorTickSpacing_=(v: Int) { peer.setMajorTickSpacing(v) } + + def labels: collection.Map[Int, Label] = + new collection.jcl.MapWrapper[Int, Label] { def underlying = peer.getLabelTable.asInstanceOf[java.util.Hashtable[Int, Label]] } + def labels_=(l: collection.Map[Int, Label]) { + val table = new java.util.Hashtable[Any, Any] + for ((k,v) <- l) table.put(k, v) + peer.setLabelTable(table) + } + + lazy val contentModified = new Publisher { + peer.addChangeListener { ChangeListener( e => publish(ContentModified(Slider.this))) } } -} +} \ No newline at end of file diff --git a/src/swing/scala/swing/Spreadsheet.scala b/src/swing/scala/swing/Spreadsheet.scala index 6bd0d4a21e..62228890a3 100644 --- a/src/swing/scala/swing/Spreadsheet.scala +++ b/src/swing/scala/swing/Spreadsheet.scala @@ -5,7 +5,7 @@ import javax.swing.event.{TableModelListener, TableModelEvent} import javax.swing._ import event._ -class Spreadsheet(width: Int, height: Int) extends Component with SwingComponent with Publisher { +/*class Spreadsheet(width: Int, height: Int) extends Component with SwingComponent with Publisher { def showGrid: Boolean = acomponent.table.getShowHorizontalLines && acomponent.table.getShowVerticalLines @@ -97,4 +97,4 @@ class Spreadsheet(width: Int, height: Int) extends Component with SwingComponent def apply(pos: (Int, Int)) = data(pos._1, pos._2).userData -} +}*/ diff --git a/src/swing/scala/swing/Swing.scala b/src/swing/scala/swing/Swing.scala new file mode 100644 index 0000000000..8c0b255b73 --- /dev/null +++ b/src/swing/scala/swing/Swing.scala @@ -0,0 +1,35 @@ +package swing + +import javax.swing._ +import javax.swing.event._ + +object Swing { + implicit def block2Runnable(block: =>Unit): Runnable = new Runnable { + override def run = block + } + def ChangeListener(f: ChangeEvent => Unit) = new ChangeListener { + def stateChanged(e: ChangeEvent) { f(e) } + } + + def Box(min: Dimension, pref: Dimension, max: Dimension) = new Component { + override lazy val peer = new javax.swing.Box.Filler(min.peer, pref.peer, max.peer) + } + def HGlue = new Component { + override lazy val peer = javax.swing.Box.createHorizontalGlue.asInstanceOf[JComponent] + } + def VGlue = new Component { + override lazy val peer = javax.swing.Box.createVerticalGlue.asInstanceOf[JComponent] + } + def Glue = new Component { + override lazy val peer = javax.swing.Box.createGlue.asInstanceOf[JComponent] + } + def RigidBox(dim: Dimension) = new Component { + override lazy val peer = javax.swing.Box.createRigidArea(dim.peer).asInstanceOf[JComponent] + } + def HStrut(width: Int) = new Component { + override lazy val peer = javax.swing.Box.createHorizontalStrut(width).asInstanceOf[JComponent] + } + def VStrut(height: Int) = new Component { + override lazy val peer = javax.swing.Box.createVerticalStrut(height).asInstanceOf[JComponent] + } +} diff --git a/src/swing/scala/swing/SwingComponent.scala b/src/swing/scala/swing/SwingComponent.scala index 73c7c43aaf..e035518a8c 100644 --- a/src/swing/scala/swing/SwingComponent.scala +++ b/src/swing/scala/swing/SwingComponent.scala @@ -3,9 +3,9 @@ package swing import javax.swing._ import java.awt._ -trait SwingComponent extends Component { - val jcomponent = acomponent.asInstanceOf[JComponent]; +/*trait SwingComponent extends Component { + val jcomponent = acomponent.asInstanceOf[JComponent] def border: javax.swing.border.Border = jcomponent.getBorder() def border_=(x: javax.swing.border.Border): unit = jcomponent.setBorder(x) -} +}*/ diff --git a/src/swing/scala/swing/Table.scala b/src/swing/scala/swing/Table.scala index 17a44797c6..a55c231fdf 100644 --- a/src/swing/scala/swing/Table.scala +++ b/src/swing/scala/swing/Table.scala @@ -17,7 +17,7 @@ object Table { } } -class Table(val jtable: JTable) extends Container(jtable) with SwingComponent with Publisher { +class Table(override val peer: JTable) extends Component with Publisher { import Table._ def this() = this(new JTable()) def this(numRows: Int, numColumns: Int) = this(new JTable(numRows, numColumns)) @@ -28,41 +28,43 @@ class Table(val jtable: JTable) extends Container(jtable) with SwingComponent wi def this(dm: TableModel, cm: TableColumnModel) = this(new JTable(dm, cm)) def this(dm: TableModel, cm: TableColumnModel, sm: ListSelectionModel) = this(new JTable(dm, cm, sm)) - def rowHeight = jtable.getRowHeight - def rowHeight_=(x: Int) = jtable.setRowHeight(x) + def rowHeight = peer.getRowHeight + def rowHeight_=(x: Int) = peer.setRowHeight(x) - def rowCount = jtable.getRowCount + def rowCount = peer.getRowCount - def model = jtable.getModel() - def model_=(x: TableModel) = jtable.setModel(x) + def model = peer.getModel() + def model_=(x: TableModel) = peer.setModel(x) - def autoResizeMode: AutoResizeMode.Value = AutoResizeMode(jtable.getAutoResizeMode) - def autoResizeMode_=(x: Table.AutoResizeMode.Value) = jtable.setAutoResizeMode(x.id) + def autoResizeMode: AutoResizeMode.Value = AutoResizeMode(peer.getAutoResizeMode) + def autoResizeMode_=(x: Table.AutoResizeMode.Value) = peer.setAutoResizeMode(x.id) - def showGrid = jtable.getShowHorizontalLines && jtable.getShowVerticalLines - def showGrid_=(grid: Boolean) = jtable.setShowGrid(grid) + def showGrid = peer.getShowHorizontalLines && peer.getShowVerticalLines + def showGrid_=(grid: Boolean) = peer.setShowGrid(grid) - def gridColor = new swing.Color(jtable.getGridColor) - def gridColor_=(color: swing.Color) = jtable.setGridColor(color) + def gridColor = new swing.Color(peer.getGridColor) + def gridColor_=(color: swing.Color) = peer.setGridColor(color) - private val initialRenderer = jtable.getDefaultRenderer(classOf[AnyRef]) + private val initialRenderer = peer.getDefaultRenderer(classOf[AnyRef]) protected def render(isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int): Component = - new AWTComponentWrapper( - initialRenderer.getTableCellRendererComponent(jtable, jtable.getValueAt(row, column), isSelected, hasFocus, row, column)) + new Component { + override lazy val peer = initialRenderer.getTableCellRendererComponent(Table.this.peer, + Table.this.peer.getValueAt(row, column), isSelected, hasFocus, row, column).asInstanceOf[JComponent] + } - jtable.setDefaultRenderer(classOf[AnyRef], new TableCellRenderer { - def getTableCellRendererComponent(jtable: JTable, value: AnyRef, isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int) = - render(isSelected, hasFocus, row, column).acomponent + peer.setDefaultRenderer(classOf[AnyRef], new TableCellRenderer { + def getTableCellRendererComponent(table: JTable, value: AnyRef, isSelected: Boolean, hasFocus: Boolean, row: Int, column: Int) = + render(isSelected, hasFocus, row, column).peer }) - def apply(row: Int, column: Int) = jtable.getValueAt(row, column) - def update(row: Int, column: Int, value: AnyRef) = jtable.setValueAt(value, row, column) + def apply(row: Int, column: Int) = peer.getValueAt(row, column) + def update(row: Int, column: Int, value: AnyRef) = peer.setValueAt(value, row, column) def markUpdated(row: Int, column: Int) = update(row, column, apply(row, column)) /* - jtable.addActionListener { + peer.addActionListener { new java.awt.event.ActionListener { def actionPerformed(e: java.awt.event.ActionEvent): unit = publish(ButtonPressed(Button.this)) diff --git a/src/swing/scala/swing/TextComponent.scala b/src/swing/scala/swing/TextComponent.scala index 353349ffcf..ba535efb08 100644 --- a/src/swing/scala/swing/TextComponent.scala +++ b/src/swing/scala/swing/TextComponent.scala @@ -1,22 +1,34 @@ package swing import javax.swing._ -import javax.swing.text.JTextComponent -import javax.swing.event.{CaretEvent,CaretListener} -import event.CaretUpdate +import javax.swing.text._ +import javax.swing.event._ +import event._ -class TextComponent(val jtextcomponent: JTextComponent) -extends Container(jtextcomponent) with SwingComponent with Publisher { +class TextComponent(override val peer: JTextComponent) extends Component with EditorComponent with Publisher { + def text: String = peer.getText + def text_=(x: String) = peer.setText(x) - def text: String = jtextcomponent.getText() - def text_=(x: String) = jtextcomponent.setText(x) + val caret = new Caret(peer.getCaret) - val caret = new Caret(jtextcomponent.getCaret()) + def content: String = peer.getText + def content_=(v: String) { peer.setText(v) } - jtextcomponent.addCaretListener { + peer.addCaretListener { new CaretListener { - def caretUpdate(e: CaretEvent) = - publish(CaretUpdate(TextComponent.this)) + def caretUpdate(e: CaretEvent) { publish(CaretUpdate(TextComponent.this)) } + } + } + + lazy val contentModified = liveContentModified + + protected def liveContentModified = new Publisher { + peer.getDocument.addDocumentListener { + new DocumentListener { + override def changedUpdate(e:DocumentEvent) { publish(ContentModified(TextComponent.this)) } + override def insertUpdate(e:DocumentEvent) { publish(ContentModified(TextComponent.this)) } + override def removeUpdate(e:DocumentEvent) { publish(ContentModified(TextComponent.this)) } + } } } } diff --git a/src/swing/scala/swing/TextField.scala b/src/swing/scala/swing/TextField.scala index 5dd781011d..ab5043c1ac 100644 --- a/src/swing/scala/swing/TextField.scala +++ b/src/swing/scala/swing/TextField.scala @@ -1,22 +1,25 @@ -package swing; +package swing import javax.swing._ import java.awt.event._ import event._ -class TextField(val jtextfield: JTextField) extends TextComponent(jtextfield) { - def this(text: String, columns: int) = this(new JTextField(text, columns)); - def this(text: String) = this(new JTextField(text)); - def this(columns: int) = this(new JTextField(columns)); - def this() = this(new JTextField()); +class TextField(override val peer: JTextField) extends TextComponent(peer) { + def this(text: String, columns: int) = this(new JTextField(text, columns)) + def this(text: String) = this(new JTextField(text)) + def this(columns: int) = this(new JTextField(columns)) + def this() = this(new JTextField()) - def columns: int = jtextfield.getColumns() - def columns_=(x: int) = jtextfield.setColumns(x) + def columns: int = peer.getColumns() + def columns_=(x: int) = peer.setColumns(x) - jtextfield.addActionListener { - new ActionListener { - def actionPerformed(e: ActionEvent) = - publish(TextModified(TextField.this)) + override lazy val contentModified = new Publisher { + peer.addActionListener { + new ActionListener { + def actionPerformed(e: ActionEvent) { publish(ContentModified(TextField.this)) } + } } } + + override lazy val liveContentModified = super.liveContentModified } diff --git a/src/swing/scala/swing/UIElement.scala b/src/swing/scala/swing/UIElement.scala new file mode 100644 index 0000000000..bf0f81fcc5 --- /dev/null +++ b/src/swing/scala/swing/UIElement.scala @@ -0,0 +1,5 @@ +package swing + +trait UIElement { + +} diff --git a/src/swing/scala/swing/event/ButtonPressed.scala b/src/swing/scala/swing/event/ButtonPressed.scala index fb7850e93d..aa35f8ea72 100644 --- a/src/swing/scala/swing/event/ButtonPressed.scala +++ b/src/swing/scala/swing/event/ButtonPressed.scala @@ -1,3 +1,3 @@ package swing.event -case class ButtonPressed(b: Button) extends Event +case class ButtonPressed(override val source: Button) extends ComponentEvent(source) diff --git a/src/swing/scala/swing/event/CaretUpdate.scala b/src/swing/scala/swing/event/CaretUpdate.scala index 98d8b7f27c..a16d2a532a 100644 --- a/src/swing/scala/swing/event/CaretUpdate.scala +++ b/src/swing/scala/swing/event/CaretUpdate.scala @@ -1,3 +1,3 @@ package swing.event -case class CaretUpdate(text: TextComponent) extends Event +case class CaretUpdate(override val source: TextComponent) extends ComponentEvent(source) diff --git a/src/swing/scala/swing/event/CellModified.scala b/src/swing/scala/swing/event/CellModified.scala index bfaf61013b..266c625cc7 100644 --- a/src/swing/scala/swing/event/CellModified.scala +++ b/src/swing/scala/swing/event/CellModified.scala @@ -1,3 +1,3 @@ package swing.event -case class CellModified(col: Int, row: int, value: String) extends Event +//case class CellModified(source: Table, col: Int, row: int, value: String) extends Event(source) diff --git a/src/swing/scala/swing/event/ComponentEvent.scala b/src/swing/scala/swing/event/ComponentEvent.scala new file mode 100644 index 0000000000..191bc707f0 --- /dev/null +++ b/src/swing/scala/swing/event/ComponentEvent.scala @@ -0,0 +1,3 @@ +package swing.event + +abstract class ComponentEvent(override val source: Component) extends Event(source) diff --git a/src/swing/scala/swing/event/ContentModified.scala b/src/swing/scala/swing/event/ContentModified.scala new file mode 100644 index 0000000000..2d0d955720 --- /dev/null +++ b/src/swing/scala/swing/event/ContentModified.scala @@ -0,0 +1,3 @@ +package swing.event + +case class ContentModified(override val source: Component) extends ComponentEvent(source) diff --git a/src/swing/scala/swing/event/Event.scala b/src/swing/scala/swing/event/Event.scala index 21306d5b94..9df216819e 100644 --- a/src/swing/scala/swing/event/Event.scala +++ b/src/swing/scala/swing/event/Event.scala @@ -1,3 +1,3 @@ package swing.event -abstract class Event +abstract class Event(val source: UIElement) diff --git a/src/swing/scala/swing/event/TableChanged.scala b/src/swing/scala/swing/event/TableChanged.scala index 3e1c6f8f6d..5354219f7b 100644 --- a/src/swing/scala/swing/event/TableChanged.scala +++ b/src/swing/scala/swing/event/TableChanged.scala @@ -1,5 +1,5 @@ package swing.event -case class TableChanged(table: Table, firstRow: Int, lastRow: Int, column: Int) extends Event { - println("table changed: "+table+"/"+firstRow+"-"+lastRow+":"+column) +case class TableChanged(override val source: Table, firstRow: Int, lastRow: Int, column: Int) extends ComponentEvent(source) { + println("table changed: "+source+"/"+firstRow+"-"+lastRow+":"+column) } diff --git a/src/swing/scala/swing/event/TableResized.scala b/src/swing/scala/swing/event/TableResized.scala index 716ae89bf0..a2b598ba53 100644 --- a/src/swing/scala/swing/event/TableResized.scala +++ b/src/swing/scala/swing/event/TableResized.scala @@ -1,3 +1,3 @@ -package swing.event; +package swing.event -case class TableResized(table: Table) extends Event +case class TableResized(override val source: Table) extends ComponentEvent(source) diff --git a/src/swing/scala/swing/event/TextModified.scala b/src/swing/scala/swing/event/TextModified.scala index 703d7711a0..7ea4ff6b1c 100644 --- a/src/swing/scala/swing/event/TextModified.scala +++ b/src/swing/scala/swing/event/TextModified.scala @@ -1,3 +1,3 @@ package swing.event -case class TextModified(text: TextComponent) extends Event +//case class TextModified(override val source: TextComponent) extends ContentModified(source) diff --git a/src/swing/scala/swing/event/WindowActivated.scala b/src/swing/scala/swing/event/WindowActivated.scala index 5f4e0b3bbf..b2a9095fa6 100644 --- a/src/swing/scala/swing/event/WindowActivated.scala +++ b/src/swing/scala/swing/event/WindowActivated.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowActivated(window: Frame) extends WindowEvent; +case class WindowActivated(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/event/WindowClosed.scala b/src/swing/scala/swing/event/WindowClosed.scala index 5834d69c46..f2c50bf146 100644 --- a/src/swing/scala/swing/event/WindowClosed.scala +++ b/src/swing/scala/swing/event/WindowClosed.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowClosed(window: Frame) extends WindowEvent; +case class WindowClosed(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/event/WindowClosing.scala b/src/swing/scala/swing/event/WindowClosing.scala index 6938590347..309516fd89 100644 --- a/src/swing/scala/swing/event/WindowClosing.scala +++ b/src/swing/scala/swing/event/WindowClosing.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowClosing(window: Frame) extends WindowEvent; +case class WindowClosing(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/event/WindowDeactivated.scala b/src/swing/scala/swing/event/WindowDeactivated.scala index d44214c73d..d012167f98 100644 --- a/src/swing/scala/swing/event/WindowDeactivated.scala +++ b/src/swing/scala/swing/event/WindowDeactivated.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowDeactivated(window: Frame) extends WindowEvent; +case class WindowDeactivated(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/event/WindowDeiconified.scala b/src/swing/scala/swing/event/WindowDeiconified.scala index 6a956a47d2..3820b67024 100644 --- a/src/swing/scala/swing/event/WindowDeiconified.scala +++ b/src/swing/scala/swing/event/WindowDeiconified.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowDeiconified(window: Frame) extends WindowEvent; +case class WindowDeiconified(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/event/WindowEvent.scala b/src/swing/scala/swing/event/WindowEvent.scala index c6c8b6ffca..dd28f822ed 100644 --- a/src/swing/scala/swing/event/WindowEvent.scala +++ b/src/swing/scala/swing/event/WindowEvent.scala @@ -1,5 +1,3 @@ package swing.event -abstract class WindowEvent extends Event { - val window: Frame -} +abstract class WindowEvent(source: Frame) extends Event(source) diff --git a/src/swing/scala/swing/event/WindowIconified.scala b/src/swing/scala/swing/event/WindowIconified.scala index 2b6f6378c3..1ca67dc126 100644 --- a/src/swing/scala/swing/event/WindowIconified.scala +++ b/src/swing/scala/swing/event/WindowIconified.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowIconified(window: Frame) extends WindowEvent; +case class WindowIconified(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/event/WindowOpened.scala b/src/swing/scala/swing/event/WindowOpened.scala index 952176670a..b1f8a3a7d5 100644 --- a/src/swing/scala/swing/event/WindowOpened.scala +++ b/src/swing/scala/swing/event/WindowOpened.scala @@ -1,3 +1,3 @@ package swing.event -case class WindowOpened(window: Frame) extends WindowEvent; +case class WindowOpened(override val source: Frame) extends WindowEvent(source) diff --git a/src/swing/scala/swing/layout.scala b/src/swing/scala/swing/layout.scala deleted file mode 100644 index 3628b2de3a..0000000000 --- a/src/swing/scala/swing/layout.scala +++ /dev/null @@ -1,12 +0,0 @@ -package swing - -import java.awt._ - -object layout { - - val flex = 0 - - def grid(rows: int, columns: int) = new GridLayout(rows, columns) - def row = new FlowLayout() - def column = grid(flex, 1) -} diff --git a/src/swing/scala/swing/test/CelsiusConverter.scala b/src/swing/scala/swing/test/CelsiusConverter.scala index 8d78667aa5..493a901890 100644 --- a/src/swing/scala/swing/test/CelsiusConverter.scala +++ b/src/swing/scala/swing/test/CelsiusConverter.scala @@ -1,39 +1,36 @@ -package swing.test; +package swing.test import swing._ -import layout._ import event._ -import Orientation.{left, right} /** A GUI app to convert celsius to centigrade */ object CelsiusConverter extends SimpleGUIApplication { - def top: Frame = new MainFrame { + def top = new MainFrame { title = "Convert Celsius to Fahrenheit" defaultButton = convertButton - object tempCelsius extends TextField(); + object tempCelsius extends TextField object celsiusLabel extends Label { text = "Celsius" - border = new EmptyBorder(5, 5, 5, 5) + border = EmptyBorder(5, 5, 5, 5) } object convertButton extends Button { icon = new javax.swing.ImageIcon("c:\\workspace\\gui\\images\\convert.gif") - border = new EmptyBorder(5, 5, 5, 5) + border = EmptyBorder(5, 5, 5, 5) } object fahrenheitLabel extends Label { text = "Fahrenheit " - border = new EmptyBorder(5, 5, 5, 5) + border = EmptyBorder(5, 5, 5, 5) listenTo(convertButton, tempCelsius) reactions += { - case ButtonPressed(_) | TextModified(_) => + case ButtonPressed(_) | ContentModified(_) => val c = Integer.parseInt(tempCelsius.text) val f = c * 9 / 5 + 32 text = ""+f+" Fahrenheit" } } - contents += new Panel(tempCelsius, celsiusLabel, convertButton, fahrenheitLabel) { - layout = grid(2, 2) - border = new EmptyBorder(10, 10, 10, 10) + content = new GridPanel(2,2)(tempCelsius, celsiusLabel, convertButton, fahrenheitLabel) { + border = EmptyBorder(10, 10, 10, 10) } } } diff --git a/src/swing/scala/swing/test/CelsiusConverter2.scala b/src/swing/scala/swing/test/CelsiusConverter2.scala index 5813b3042d..5df70adcb0 100644 --- a/src/swing/scala/swing/test/CelsiusConverter2.scala +++ b/src/swing/scala/swing/test/CelsiusConverter2.scala @@ -1,26 +1,24 @@ -package swing.test; +package swing.test import swing._ -import layout._ import event._ -import Orientation.{left, right, center} object CelsiusConverter2 extends SimpleGUIApplication { def top = new MainFrame { title = "Convert Celsius / Fahrenheit" - object Celsius extends TextField { columns = 5 }; + object Celsius extends TextField { columns = 5 } object Fahrenheit extends TextField { columns = 5 } - contents += new Panel(Celsius, new Label(" Celsius = "), - Fahrenheit, new Label(" Fahrenheit")) { - border = new EmptyBorder(15, 10, 10, 10) + content = new FlowPanel(Horizontal)(Celsius, new Label(" Celsius = "), + Fahrenheit, new Label(" Fahrenheit")) { + border = EmptyBorder(15, 10, 10, 10) } - listenTo(Fahrenheit, Celsius) + listenTo(Fahrenheit.contentModified, Celsius.contentModified) reactions += { - case TextModified(Fahrenheit) => + case ContentModified(Fahrenheit) => val f = Integer.parseInt(Fahrenheit.text) val c = (f - 32) * 5 / 9 Celsius.text = c.toString - case TextModified(Celsius) => + case ContentModified(Celsius) => val c = Integer.parseInt(Celsius.text) val f = c * 9 / 5 + 32 Fahrenheit.text = f.toString diff --git a/src/swing/scala/swing/test/HelloWorld.scala b/src/swing/scala/swing/test/HelloWorld.scala index e19a6e92e4..4cbf254bb2 100644 --- a/src/swing/scala/swing/test/HelloWorld.scala +++ b/src/swing/scala/swing/test/HelloWorld.scala @@ -1,13 +1,12 @@ -package swing.test; +package swing.test -import swing._; -import javax.swing._; +import swing._ object HelloWorld extends GUIApplication { def main(args: Array[String]) = run { new Frame { - title = "HelloWorldSwing"; - contents += new Label("Hello World"); + title = "HelloWorldSwing" + content = new Label("Hello World") }.pack.show } } diff --git a/src/swing/scala/swing/test/SwingApp.scala b/src/swing/scala/swing/test/SwingApp.scala index 1712b74ee4..b66d0a0e48 100644 --- a/src/swing/scala/swing/test/SwingApp.scala +++ b/src/swing/scala/swing/test/SwingApp.scala @@ -1,8 +1,7 @@ -package swing.test; +package swing.test import swing._ import swing.event._ -import swing.layout._ object SwingApp extends SimpleGUIApplication { def top = new MainFrame { @@ -21,9 +20,8 @@ object SwingApp extends SimpleGUIApplication { object button extends Button { text = "I am a button" } - contents += new Panel(label, button) { - layout = column - border = new EmptyBorder(30, 30, 10, 30) + content = new GridPanel(GridPanel.Adapt,1)(label, button) { + border = EmptyBorder(5, 5, 5, 5) } } } -- cgit v1.2.3