summaryrefslogtreecommitdiff
path: root/src/swing
diff options
context:
space:
mode:
authorNAME <USER@epfl.ch>2008-04-21 13:00:40 +0000
committerNAME <USER@epfl.ch>2008-04-21 13:00:40 +0000
commitd814e5047d99fe3cca56b8bdea1b6cf16b73f48b (patch)
tree2233b3765a91232600111d62320783a6d7a20867 /src/swing
parentd17ec3325ae0f61493dfce8a311dcde26f7011a4 (diff)
downloadscala-d814e5047d99fe3cca56b8bdea1b6cf16b73f48b.tar.gz
scala-d814e5047d99fe3cca56b8bdea1b6cf16b73f48b.tar.bz2
scala-d814e5047d99fe3cca56b8bdea1b6cf16b73f48b.zip
scala.swing update for rc2
Diffstat (limited to 'src/swing')
-rw-r--r--src/swing/scala/swing/Action.scala37
-rw-r--r--src/swing/scala/swing/Applet.scala8
-rw-r--r--src/swing/scala/swing/Border.scala57
-rw-r--r--src/swing/scala/swing/BoxPanel.scala11
-rw-r--r--src/swing/scala/swing/BufferWrapper.scala (renamed from src/swing/scala/swing/BufferAdapter.scala)2
-rw-r--r--src/swing/scala/swing/ButtonGroup.scala (renamed from src/swing/scala/swing/ButtonMutex.scala)12
-rw-r--r--src/swing/scala/swing/Caret.scala8
-rw-r--r--src/swing/scala/swing/CheckBox.scala5
-rw-r--r--src/swing/scala/swing/Color.scala5
-rw-r--r--src/swing/scala/swing/Component.scala33
-rw-r--r--src/swing/scala/swing/ComponentList.scala2
-rw-r--r--src/swing/scala/swing/Container.scala53
-rw-r--r--src/swing/scala/swing/EdgePosition.scala10
-rw-r--r--src/swing/scala/swing/EditorComponent.scala5
-rw-r--r--src/swing/scala/swing/EmptyBorder.scala10
-rw-r--r--src/swing/scala/swing/FlowPanel.scala9
-rw-r--r--src/swing/scala/swing/FormattedTextField.scala9
-rw-r--r--src/swing/scala/swing/Frame.scala20
-rw-r--r--src/swing/scala/swing/GUIApplication.scala11
-rw-r--r--src/swing/scala/swing/GridBagPanel.scala11
-rw-r--r--src/swing/scala/swing/GridPanel.scala9
-rw-r--r--src/swing/scala/swing/IndexedContainer.scala8
-rw-r--r--src/swing/scala/swing/Label.scala13
-rw-r--r--src/swing/scala/swing/LayoutContainer.scala6
-rw-r--r--src/swing/scala/swing/Menu.scala36
-rw-r--r--src/swing/scala/swing/Orientable.scala5
-rw-r--r--src/swing/scala/swing/Orientation.scala58
-rw-r--r--src/swing/scala/swing/Oriented.scala6
-rw-r--r--src/swing/scala/swing/Panel.scala9
-rw-r--r--src/swing/scala/swing/ProgressBar.scala5
-rw-r--r--src/swing/scala/swing/PushButton.scala6
-rw-r--r--src/swing/scala/swing/RadioButton.scala5
-rw-r--r--src/swing/scala/swing/RootPanel.scala21
-rw-r--r--src/swing/scala/swing/ScrollPane.scala13
-rw-r--r--src/swing/scala/swing/Scrollable.scala13
-rw-r--r--src/swing/scala/swing/Selectable.scala11
-rw-r--r--src/swing/scala/swing/Separator.scala4
-rw-r--r--src/swing/scala/swing/SequentialContainer.scala15
-rw-r--r--src/swing/scala/swing/Showable.scala12
-rw-r--r--src/swing/scala/swing/SimpleGUIApplication.scala4
-rw-r--r--src/swing/scala/swing/Slider.scala13
-rw-r--r--src/swing/scala/swing/SplitPane.scala44
-rw-r--r--src/swing/scala/swing/Spreadsheet.scala100
-rw-r--r--src/swing/scala/swing/Swing.scala8
-rw-r--r--src/swing/scala/swing/SwingComponent.scala11
-rw-r--r--src/swing/scala/swing/TabbedPane.scala97
-rw-r--r--src/swing/scala/swing/Table.scala22
-rw-r--r--src/swing/scala/swing/TextArea.scala3
-rw-r--r--src/swing/scala/swing/TextComponent.scala53
-rw-r--r--src/swing/scala/swing/TextField.scala15
-rw-r--r--src/swing/scala/swing/ToggleButton.scala3
-rw-r--r--src/swing/scala/swing/UIElement.scala22
-rw-r--r--src/swing/scala/swing/Views.scala2
-rw-r--r--src/swing/scala/swing/XAlignment.scala9
-rw-r--r--src/swing/scala/swing/YAlignment.scala10
-rw-r--r--src/swing/scala/swing/event/CellModified.scala3
-rw-r--r--src/swing/scala/swing/event/ContentModified.scala3
-rw-r--r--src/swing/scala/swing/event/MouseEvent.scala2
-rw-r--r--src/swing/scala/swing/event/SelectionEvent.scala6
-rw-r--r--src/swing/scala/swing/event/TableEvent.scala10
-rw-r--r--src/swing/scala/swing/event/TextModified.scala3
-rw-r--r--src/swing/scala/swing/event/ValueChanged.scala3
-rw-r--r--src/swing/scala/swing/geometry/Dimension.scala17
-rw-r--r--src/swing/scala/swing/geometry/Point.scala7
-rw-r--r--src/swing/scala/swing/geometry/Rectangle.scala19
-rw-r--r--src/swing/scala/swing/model/Matrix.scala4
-rw-r--r--src/swing/scala/swing/test/CelsiusConverter.scala18
-rw-r--r--src/swing/scala/swing/test/CelsiusConverter2.scala30
-rw-r--r--src/swing/scala/swing/test/GridBagDemo.scala94
-rw-r--r--src/swing/scala/swing/test/HelloWorld.scala8
-rw-r--r--src/swing/scala/swing/test/MenuDemo.scala32
-rw-r--r--src/swing/scala/swing/test/SimpleApplet.scala6
-rw-r--r--src/swing/scala/swing/test/SwingApp.scala4
-rw-r--r--src/swing/scala/swing/test/TableSelection.scala36
-rw-r--r--src/swing/scala/swing/test/UIDemo.scala84
-rw-r--r--src/swing/scala/swing/test/UIElementTest.scala13
76 files changed, 737 insertions, 654 deletions
diff --git a/src/swing/scala/swing/Action.scala b/src/swing/scala/swing/Action.scala
index 627d9468b9..c4f099e9a9 100644
--- a/src/swing/scala/swing/Action.scala
+++ b/src/swing/scala/swing/Action.scala
@@ -12,8 +12,12 @@ object Action {
def action: Action
def action_=(a: Action)
- def hideActionText: Boolean
- def hideActionText_=(b: Boolean)
+ //1.6: def hideActionText: Boolean
+ //def hideActionText_=(b: Boolean)
+ }
+
+ def apply(title: String)(block: =>Unit) = new Action(title) {
+ def apply() { block }
}
}
@@ -41,10 +45,10 @@ abstract class Action(title0: String) {
/**
* None if large icon and small icon are not equal.
*/
- def icon: Option[Icon] = if(largeIcon == smallIcon) largeIcon else None
- def icon_=(i: Option[Icon]) { largeIcon = i; smallIcon = i }
- def largeIcon: Option[Icon] = toOption(peer.getValue(javax.swing.Action.LARGE_ICON_KEY))
- def largeIcon_=(i: Option[Icon]) { peer.putValue(javax.swing.Action.LARGE_ICON_KEY, toNull(i)) }
+ def icon: Option[Icon] = smallIcon //if(largeIcon == smallIcon) largeIcon else None
+ def icon_=(i: Option[Icon]) { /*largeIcon = i;*/ smallIcon = i }
+ // 1.6: def largeIcon: Option[Icon] = toOption(peer.getValue(javax.swing.Action.LARGE_ICON_KEY))
+ // def largeIcon_=(i: Option[Icon]) { peer.putValue(javax.swing.Action.LARGE_ICON_KEY, toNull(i)) }
def smallIcon: Option[Icon] = toOption(peer.getValue(javax.swing.Action.SMALL_ICON))
def smallIcon_=(i: Option[Icon]) { peer.putValue(javax.swing.Action.SMALL_ICON, toNull(i)) }
@@ -73,14 +77,15 @@ abstract class Action(title0: String) {
java.awt.event.KeyEvent.VK_UNDEFINED)
def mnemonic_=(m: Int) { peer.putValue(javax.swing.Action.MNEMONIC_KEY, m) }
- /**
+ /*/**
* Indicates which character of the title should be underlined to indicate the mnemonic key.
* Ignored if out of bounds of the title string. Default: -1, i.e., ignored.
* For all buttons and thus menu items.
*/
- def mnemonicIndex: Int =
- ifNull(peer.getValue(javax.swing.Action.DISPLAYED_MNEMONIC_INDEX_KEY), -1)
- def mnemonicIndex_=(n: Int) { peer.putValue(javax.swing.Action.DISPLAYED_MNEMONIC_INDEX_KEY, n) }
+ 1.6: def mnemonicIndex: Int =
+ ifNull(peer.getValue(javax.swing.Action.DISPLAYED_MNEMONIC_INDEX_KEY), -1)
+ def mnemonicIndex_=(n: Int) { peer.putValue(javax.swing.Action.DISPLAYED_MNEMONIC_INDEX_KEY, n) }
+ */
/**
* For menus.
@@ -97,14 +102,14 @@ abstract class Action(title0: String) {
def enabled: Boolean = peer.isEnabled
def enabled_=(b: Boolean) { peer.setEnabled(b) }
- /**
+ /*/**
* Only honored if not <code>None</code>. For various buttons.
*/
- def selected: Option[Boolean] = toOption(peer.getValue(javax.swing.Action.SELECTED_KEY))
- def selected_=(b: Option[Boolean]) {
- peer.putValue(javax.swing.Action.SELECTED_KEY,
- if (b == None) null else new java.lang.Boolean(b.get))
- }
+ 1.6: def selected: Option[Boolean] = toOption(peer.getValue(javax.swing.Action.SELECTED_KEY))
+ def selected_=(b: Option[Boolean]) {
+ peer.putValue(javax.swing.Action.SELECTED_KEY,
+ if (b == None) null else new java.lang.Boolean(b.get))
+ }*/
def apply()
}
diff --git a/src/swing/scala/swing/Applet.scala b/src/swing/scala/swing/Applet.scala
index c80f8422dc..99c3c35c03 100644
--- a/src/swing/scala/swing/Applet.scala
+++ b/src/swing/scala/swing/Applet.scala
@@ -3,10 +3,12 @@ package scala.swing
import javax.swing.JApplet
/**
- * Clients should implement the ui field. See the SimpleApplet demo for a sample.
+ * Clients should implement the ui field. See the SimpleApplet demo for an example.
*
* Note: Applet extends JApplet to satisfy Java's applet loading mechanism.
* The usual component wrapping scheme doesn't work here.
+ *
+ * @see javax.swing.JApplet
*/
abstract class Applet extends JApplet { outer =>
val ui: UI
@@ -17,8 +19,8 @@ abstract class Applet extends JApplet { outer =>
abstract class UI extends RootPanel {
def peer = outer
- override def content_=(c: Component) {
- super.content_=(c)
+ override def contents_=(c: Component) {
+ super.contents_=(c)
peer.validate()
}
diff --git a/src/swing/scala/swing/Border.scala b/src/swing/scala/swing/Border.scala
new file mode 100644
index 0000000000..fef3481eeb
--- /dev/null
+++ b/src/swing/scala/swing/Border.scala
@@ -0,0 +1,57 @@
+package scala.swing
+
+import java.awt.Color
+import javax.swing.{Icon, BorderFactory}
+import javax.swing.border._
+
+/**
+ * @see javax.swing.BorderFactory
+ */
+object Border {
+ def Empty = BorderFactory.createEmptyBorder()
+ def Empty(top: Int, left: Int, bottom: Int, right: Int) =
+ BorderFactory.createEmptyBorder(top, left, bottom, right)
+
+ def Line(c: Color) = BorderFactory.createLineBorder(c)
+ def Line(c: Color, weight: Int) = BorderFactory.createLineBorder(c, weight)
+
+ def Beveled(kind: Embossing) = BorderFactory.createBevelBorder(kind.bevelPeer)
+ def Beveled(kind: Embossing, highlight: Color, shadow: Color) =
+ BorderFactory.createBevelBorder(kind.bevelPeer, highlight, shadow)
+ def Beveled(kind: Embossing,
+ highlightOuter: Color, highlightInner: Color,
+ shadowOuter: Color, shadowInner: Color) =
+ BorderFactory.createBevelBorder(kind.bevelPeer,
+ highlightOuter, highlightInner,
+ shadowOuter, shadowInner)
+
+ sealed abstract class Embossing {
+ def bevelPeer: Int
+ def etchPeer: Int
+ }
+ case object Lowered extends Embossing {
+ def bevelPeer = BevelBorder.LOWERED
+ def etchPeer = EtchedBorder.LOWERED
+ }
+ case object Raised extends Embossing {
+ def bevelPeer = BevelBorder.RAISED
+ def etchPeer = EtchedBorder.RAISED
+ }
+
+ def Etched = BorderFactory.createEtchedBorder()
+ def Etched(kind: Embossing) =
+ BorderFactory.createEtchedBorder(kind.etchPeer)
+ def Etched(kind: Embossing, highlight: Color, shadow: Color) =
+ BorderFactory.createEtchedBorder(kind.etchPeer, highlight, shadow)
+
+ def Matte(top: Int, left: Int, bottom: Int, right: Int, color: Color) =
+ BorderFactory.createMatteBorder(top, left, bottom, right, color)
+ def Matte(top: Int, left: Int, bottom: Int, right: Int, icon: Icon) =
+ BorderFactory.createMatteBorder(top, left, bottom, right, icon)
+
+ def Compound(outside: Border, inside: Border) =
+ BorderFactory.createCompoundBorder(outside, inside)
+
+ def Titled(border: Border, title: String) =
+ BorderFactory.createTitledBorder(border, title)
+} \ No newline at end of file
diff --git a/src/swing/scala/swing/BoxPanel.scala b/src/swing/scala/swing/BoxPanel.scala
index 6520224f04..0c13489025 100644
--- a/src/swing/scala/swing/BoxPanel.scala
+++ b/src/swing/scala/swing/BoxPanel.scala
@@ -1,10 +1,11 @@
package scala.swing
-class BoxPanel(orientation: Orientation) extends Panel with IndexedContainer {
- override lazy val peer = {
+/**
+ * @see javax.swing.BoxLayout
+ */
+class BoxPanel(orientation: Orientation.Value) extends Panel ({
val p = new javax.swing.JPanel
- val l = new javax.swing.BoxLayout(p, orientation.peer)
+ val l = new javax.swing.BoxLayout(p, orientation.id)
p.setLayout(l)
p
- }
-}
+ }) with SequentialContainer.Wrapper
diff --git a/src/swing/scala/swing/BufferAdapter.scala b/src/swing/scala/swing/BufferWrapper.scala
index 4e0c4b9d09..de5b2b0b81 100644
--- a/src/swing/scala/swing/BufferAdapter.scala
+++ b/src/swing/scala/swing/BufferWrapper.scala
@@ -5,7 +5,7 @@ import scala.collection.mutable.Buffer
/**
* Default partial implementation for buffer adapters.
*/
-protected[swing] abstract class BufferAdapter[A] extends Buffer[A] { outer =>
+protected[swing] abstract class BufferWrapper[A] extends Buffer[A] { outer =>
def clear { for (i <- 0 to length) remove(0) }
def update(n: Int, a: A) {
remove(0)
diff --git a/src/swing/scala/swing/ButtonMutex.scala b/src/swing/scala/swing/ButtonGroup.scala
index 4edae73b9d..66fa8fe874 100644
--- a/src/swing/scala/swing/ButtonMutex.scala
+++ b/src/swing/scala/swing/ButtonGroup.scala
@@ -4,8 +4,10 @@ import javax.swing.{AbstractButton => JAbstractButton,Icon}
import event._
import scala.collection._
-
-class ButtonMutex(initialButtons: Button*) {
+/**
+ * @see javax.swing.ButtonGroup
+ */
+class ButtonGroup(initialButtons: Button*) {
val peer: javax.swing.ButtonGroup = new javax.swing.ButtonGroup
val buttons: mutable.Set[Button] = new mutable.Set[Button] {
@@ -21,7 +23,7 @@ class ButtonMutex(initialButtons: Button*) {
}
buttons ++= initialButtons
- def deselectAll() { peer.clearSelection }
- def selected: Option[Selectable] = buttons.find(_.selected)
- def select(b: Selectable) { b.selected = true }
+ //1.6: def deselectAll() { peer.clearSelection }
+ def selected: Option[Button] = buttons.find(_.selected)
+ def select(b: Button) { peer.setSelected(b.peer.getModel, true) }
}
diff --git a/src/swing/scala/swing/Caret.scala b/src/swing/scala/swing/Caret.scala
deleted file mode 100644
index 68e8b2c108..0000000000
--- a/src/swing/scala/swing/Caret.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package scala.swing;
-
-import javax.swing
-
-class Caret(val jcaret: swing.text.Caret) extends Publisher {
- def dot: int = jcaret.getDot()
- def mark: int = jcaret.getMark()
-}
diff --git a/src/swing/scala/swing/CheckBox.scala b/src/swing/scala/swing/CheckBox.scala
index 7851c8c75d..92ebb93769 100644
--- a/src/swing/scala/swing/CheckBox.scala
+++ b/src/swing/scala/swing/CheckBox.scala
@@ -2,7 +2,10 @@ package scala.swing
import javax.swing._
-class CheckBox(override val peer: JCheckBox) extends ToggleButton {
+/**
+ * @see javax.swing.JCheckBox
+ */
+class CheckBox(override val peer: JCheckBox) extends ToggleButton(peer) {
def this(txt: String) = this(new JCheckBox(txt))
def this() = this(new JCheckBox)
} \ No newline at end of file
diff --git a/src/swing/scala/swing/Color.scala b/src/swing/scala/swing/Color.scala
deleted file mode 100644
index b29f54e1dc..0000000000
--- a/src/swing/scala/swing/Color.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package scala.swing
-
-/*case class Color(r: Int, g: Int, b: Int) extends java.awt.Color(r, g, b) {
- def this(col: java.awt.Color) = this(col.getRed, col.getGreen, col.getBlue)
-}*/
diff --git a/src/swing/scala/swing/Component.scala b/src/swing/scala/swing/Component.scala
index 85bb5866b1..8b3d85d05b 100644
--- a/src/swing/scala/swing/Component.scala
+++ b/src/swing/scala/swing/Component.scala
@@ -1,8 +1,8 @@
package scala.swing
import event._
-import geometry._
+import java.awt.{Dimension, Point}
import java.awt.event._
import javax.swing.JComponent
import javax.swing.border.Border
@@ -12,16 +12,19 @@ object Component {
def wrapperFor[C<:Component](c: javax.swing.JComponent): C = c.getClientProperty(ClientKey).asInstanceOf[C]
}
-abstract class Component extends UIElement with Showable.Swing with Publisher {
- lazy val peer: javax.swing.JComponent = new javax.swing.JComponent {}
+/**
+ * @see javax.swing.JComponent
+ */
+abstract class Component(override val peer: javax.swing.JComponent) extends UIElement with Publisher {
+ def this() = this(new javax.swing.JComponent{})
peer.putClientProperty(Component.ClientKey, this)
def minimumSize = peer.getMinimumSize
- def minimumSize_=(x: Dimension) = peer.setMinimumSize(x.peer)
+ def minimumSize_=(x: Dimension) = peer.setMinimumSize(x)
def maxiumumSize = peer.getMaximumSize
- def maxiumumSize_=(x: Dimension) = peer.setMaximumSize(x.peer)
+ def maxiumumSize_=(x: Dimension) = peer.setMaximumSize(x)
def preferredSize = peer.getPreferredSize
- def preferredSize_=(x: Dimension) = peer.setPreferredSize(x.peer)
+ def preferredSize_=(x: Dimension) = peer.setPreferredSize(x)
/**
* Used by certain layout managers, e.g., BoxLayout or OverlayLayout to
@@ -98,15 +101,15 @@ abstract class Component extends UIElement with Showable.Swing with Publisher {
def mouseExited(e: java.awt.event.MouseEvent) { }
def mouseClicked(e: java.awt.event.MouseEvent) {
publish(MouseClicked(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers, e.getClickCount, e.isPopupTrigger))
+ e.getPoint, e.getModifiers, e.getClickCount, e.isPopupTrigger))
}
def mousePressed(e: java.awt.event.MouseEvent) {
publish(MousePressed(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers, e.getClickCount, e.isPopupTrigger))
+ e.getPoint, e.getModifiers, e.getClickCount, e.isPopupTrigger))
}
def mouseReleased(e: java.awt.event.MouseEvent) {
publish(MouseReleased(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers, e.getClickCount, e.isPopupTrigger))
+ e.getPoint, e.getModifiers, e.getClickCount, e.isPopupTrigger))
}
})
}
@@ -114,11 +117,11 @@ abstract class Component extends UIElement with Showable.Swing with Publisher {
peer.addMouseListener(new MouseListener {
def mouseEntered(e: java.awt.event.MouseEvent) {
publish(MouseEntered(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers))
+ e.getPoint, e.getModifiers))
}
def mouseExited(e: java.awt.event.MouseEvent) {
publish(MouseExited(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers))
+ e.getPoint, e.getModifiers))
}
def mouseClicked(e: java.awt.event.MouseEvent) {}
def mousePressed(e: java.awt.event.MouseEvent) { }
@@ -127,11 +130,11 @@ abstract class Component extends UIElement with Showable.Swing with Publisher {
peer.addMouseMotionListener(new MouseMotionListener {
def mouseMoved(e: java.awt.event.MouseEvent) {
publish(MouseMoved(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers))
+ e.getPoint, e.getModifiers))
}
def mouseDragged(e: java.awt.event.MouseEvent) {
publish(MouseDragged(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers))
+ e.getPoint, e.getModifiers))
}
})
}
@@ -139,7 +142,7 @@ abstract class Component extends UIElement with Showable.Swing with Publisher {
peer.addMouseWheelListener(new MouseWheelListener {
def mouseWheelMoved(e: java.awt.event.MouseWheelEvent) {
publish(MouseWheelMoved(Component.wrapperFor(e.getSource.asInstanceOf[JComponent]),
- Point(e.getPoint), e.getModifiers, e.getWheelRotation)) }
+ e.getPoint, e.getModifiers, e.getWheelRotation)) }
})
}
}
@@ -164,5 +167,7 @@ abstract class Component extends UIElement with Showable.Swing with Publisher {
}
})
+ def revalidate() { peer.revalidate() }
+
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 31e48e65b1..99d431bf59 100644
--- a/src/swing/scala/swing/ComponentList.scala
+++ b/src/swing/scala/swing/ComponentList.scala
@@ -3,7 +3,7 @@ package scala.swing
import javax.swing._
import event._
-class ComponentList(override val peer: JList) extends Component with Container with Publisher {
+class ComponentList(override val peer: JList) extends Component(peer) with SequentialContainer.Wrapper with Publisher {
def this() = this(new JList)
def this(elems: Seq[Object]) = this(new JList(elems.toArray))
diff --git a/src/swing/scala/swing/Container.scala b/src/swing/scala/swing/Container.scala
index 674fbee796..20ef0c0fed 100644
--- a/src/swing/scala/swing/Container.scala
+++ b/src/swing/scala/swing/Container.scala
@@ -3,33 +3,38 @@ package scala.swing
import event._
import scala.collection.mutable.Buffer
-trait Container extends Component {
- protected val _contents = new Content
- def contents: Seq[Component] = _contents
+object Container {
+ trait Wrapper extends Component with Container {
+ protected val _contents = new Content
+ def contents: Seq[Component] = _contents
- protected class Content extends BufferAdapter[Component] {
- def wrap(c: java.awt.Component) = Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent])
- override def clear { peer.removeAll() }
- def remove(n: Int): Component = {
- val c = peer.getComponent(n)
- peer.remove(n)
- wrap(c)
+ protected class Content extends BufferWrapper[Component] {
+ def wrap(c: java.awt.Component) = Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent])
+ override def clear { peer.removeAll() }
+ def remove(n: Int): Component = {
+ val c = peer.getComponent(n)
+ peer.remove(n)
+ wrap(c)
+ }
+ protected def insertAt(n: Int, c: Component) { peer.add(c.peer, n) }
+ def +=(c: Component) { peer.add(c.peer) }
+ def length = peer.getComponentCount
+ def apply(n: Int) = wrap(peer.getComponent(n))
}
- protected def insertAt(n: Int, c: Component) { peer.add(c.peer, n) }
- def +=(c: Component) { peer.add(c.peer) }
- def length = peer.getComponentCount
- def apply(n: Int) = wrap(peer.getComponent(n))
- }
- peer.addContainerListener(new java.awt.event.ContainerListener {
- def componentAdded(e: java.awt.event.ContainerEvent) {
- publish(ComponentAdded(Container.this,
- Component.wrapperFor(e.getChild.asInstanceOf[javax.swing.JComponent])))
- }
- def componentRemoved(e: java.awt.event.ContainerEvent) {
- publish(ComponentRemoved(Container.this,
+ peer.addContainerListener(new java.awt.event.ContainerListener {
+ def componentAdded(e: java.awt.event.ContainerEvent) {
+ publish(ComponentAdded(Wrapper.this,
Component.wrapperFor(e.getChild.asInstanceOf[javax.swing.JComponent])))
- }
- })
+ }
+ def componentRemoved(e: java.awt.event.ContainerEvent) {
+ publish(ComponentRemoved(Wrapper.this,
+ Component.wrapperFor(e.getChild.asInstanceOf[javax.swing.JComponent])))
+ }
+ })
+ }
}
+trait Container extends UIElement {
+ def contents: Seq[Component]
+} \ No newline at end of file
diff --git a/src/swing/scala/swing/EdgePosition.scala b/src/swing/scala/swing/EdgePosition.scala
new file mode 100644
index 0000000000..5214857303
--- /dev/null
+++ b/src/swing/scala/swing/EdgePosition.scala
@@ -0,0 +1,10 @@
+package scala.swing
+
+import javax.swing.SwingConstants._
+
+object EdgePosition extends Enumeration {
+ val Left = Value(LEFT)
+ val Right = Value(RIGHT)
+ val Top = Value(TOP)
+ val Bottom = Value(BOTTOM)
+}
diff --git a/src/swing/scala/swing/EditorComponent.scala b/src/swing/scala/swing/EditorComponent.scala
deleted file mode 100644
index 0985a88cb8..0000000000
--- a/src/swing/scala/swing/EditorComponent.scala
+++ /dev/null
@@ -1,5 +0,0 @@
-package scala.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
deleted file mode 100644
index 41570fe4ab..0000000000
--- a/src/swing/scala/swing/EmptyBorder.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package scala.swing
-
-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
index 8842d2fcf6..08a5b7fa8f 100644
--- a/src/swing/scala/swing/FlowPanel.scala
+++ b/src/swing/scala/swing/FlowPanel.scala
@@ -12,10 +12,13 @@ object FlowPanel {
}
}
-class FlowPanel(alignment: FlowPanel.Alignment.Value) extends Panel with IndexedContainer {
+/**
+ * @see java.awt.FlowLayout
+ */
+class FlowPanel(override val peer: javax.swing.JPanel) extends Panel(peer) with SequentialContainer.Wrapper {
+ def this(alignment: FlowPanel.Alignment.Value) = this(new javax.swing.JPanel(new java.awt.FlowLayout(alignment.id)))
def this() = this(FlowPanel.Alignment.Center)
- override lazy val layoutManager = new java.awt.FlowLayout(alignment.id)
- override lazy val peer = new javax.swing.JPanel(layoutManager)
+ private def layoutManager = peer.getLayout.asInstanceOf[java.awt.FlowLayout]
def vGap: Int = layoutManager.getVgap
def vGap_=(n: Int) { layoutManager.setVgap(n) }
diff --git a/src/swing/scala/swing/FormattedTextField.scala b/src/swing/scala/swing/FormattedTextField.scala
index 86cf35d0c6..e9658d27ca 100644
--- a/src/swing/scala/swing/FormattedTextField.scala
+++ b/src/swing/scala/swing/FormattedTextField.scala
@@ -1,9 +1,12 @@
-package scala.swing;
+package scala.swing
import javax.swing._
import java.awt.event._
import event._
-class FormattedTextField(val jftextfield: JFormattedTextField) extends TextComponent(jftextfield) {
- def this(format: java.text.Format) = this(new JFormattedTextField(format));
+/**
+ * @see javax.swing.JFormattedTextField
+ */
+class FormattedTextField(override val peer: JFormattedTextField) extends TextComponent(peer) {
+ def this(format: java.text.Format) = this(new JFormattedTextField(format))
}
diff --git a/src/swing/scala/swing/Frame.scala b/src/swing/scala/swing/Frame.scala
index 9c75863881..4ee081cbd3 100644
--- a/src/swing/scala/swing/Frame.scala
+++ b/src/swing/scala/swing/Frame.scala
@@ -1,20 +1,26 @@
package scala.swing
-import javax.swing.JFrame
+import javax.swing._
import event._
-class Frame(val peer: JFrame) extends UIElement with RootPanel with Showable.Swing with Publisher {
+/**
+ * @see javax.swing.JFrame
+ */
+class Frame(override val peer: JFrame) extends UIElement with RootPanel with Publisher {
def this() = this(new JFrame)
def title: String = peer.getTitle
def title_=(s: String) = peer.setTitle(s)
- content = new Component { opaque = false }
- override def content_=(c: Component) {
- super.content_=(c)
+ override def contents_=(c: Component) {
+ super.contents_=(c)
peer.pack() // pack also validates, which is generally required after an add
}
- def defaultButton: PushButton = Component.wrapperFor(peer.getRootPane.getDefaultButton)
- def defaultButton_=(b: PushButton) { peer.getRootPane.setDefaultButton(b.peer) }
+ def defaultButton: Option[PushButton] =
+ Swing.toOption(peer.getRootPane.getDefaultButton).map(Component.wrapperFor(_))
+ def defaultButton_=(b: Option[PushButton]) {
+ peer.getRootPane.setDefaultButton(Swing.toNull(b.map(_.peer)))
+ }
+
def pack(): this.type = { peer.pack(); this }
def menuBar: MenuBar = Component.wrapperFor(peer.getJMenuBar)
diff --git a/src/swing/scala/swing/GUIApplication.scala b/src/swing/scala/swing/GUIApplication.scala
index f629a59efa..e008b5422d 100644
--- a/src/swing/scala/swing/GUIApplication.scala
+++ b/src/swing/scala/swing/GUIApplication.scala
@@ -4,17 +4,14 @@ import javax.swing._
import event.Event
class GUIApplication {
-
- type Reaction = PartialFunction[Event, unit]
-
- def defaultLookAndFeelDecorated: boolean = true
+ //def defaultLookAndFeelDecorated: Boolean = true
def init() = {
- UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
- JFrame.setDefaultLookAndFeelDecorated(defaultLookAndFeelDecorated)
+ //UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
+ //JFrame.setDefaultLookAndFeelDecorated(defaultLookAndFeelDecorated)
}
- def run(prog: => unit): unit =
+ def run(prog: => Unit): Unit =
SwingUtilities.invokeLater {
new Runnable() {
def run() = { init(); prog }
diff --git a/src/swing/scala/swing/GridBagPanel.scala b/src/swing/scala/swing/GridBagPanel.scala
index 874ad36840..44e0e774f4 100644
--- a/src/swing/scala/swing/GridBagPanel.scala
+++ b/src/swing/scala/swing/GridBagPanel.scala
@@ -2,6 +2,7 @@ package scala.swing
import java.awt.{Insets, GridBagConstraints}
+
object GridBagPanel {
object Fill extends Enumeration {
val None = Value(GridBagConstraints.NONE)
@@ -31,11 +32,15 @@ object GridBagPanel {
}
}
-class GridBagPanel extends Panel with LayoutContainer {
+/**
+ * @see java.awt.GridBagLayout
+ */
+class GridBagPanel(override val peer: javax.swing.JPanel) extends Panel(peer) with LayoutContainer {
import GridBagPanel._
- override lazy val layoutManager = new java.awt.GridBagLayout
- override lazy val peer = new javax.swing.JPanel(layoutManager)
+ def this() = this(new javax.swing.JPanel(new java.awt.GridBagLayout))
+
+ private def layoutManager = peer.getLayout.asInstanceOf[java.awt.GridBagLayout]
class Constraints(val peer: GridBagConstraints) extends Proxy {
def self = peer
diff --git a/src/swing/scala/swing/GridPanel.scala b/src/swing/scala/swing/GridPanel.scala
index 799e52d9ae..9c8e246c20 100644
--- a/src/swing/scala/swing/GridPanel.scala
+++ b/src/swing/scala/swing/GridPanel.scala
@@ -4,9 +4,12 @@ object GridPanel {
val Adapt = 0
}
-class GridPanel(rows0: Int, cols0: Int) extends Panel with IndexedContainer {
- override lazy val layoutManager = new java.awt.GridLayout(rows0, cols0)
- override lazy val peer = new javax.swing.JPanel(layoutManager)
+/**
+ * @see java.awt.GridLayout
+ */
+class GridPanel(override val peer: javax.swing.JPanel) extends Panel(peer) with SequentialContainer.Wrapper {
+ def this(rows0: Int, cols0: Int) = this(new javax.swing.JPanel(new java.awt.GridLayout(rows0, cols0)))
+ private def layoutManager = peer.getLayout.asInstanceOf[java.awt.GridLayout]
def rows: Int = layoutManager.getRows
def rows_=(n: Int) { layoutManager.setRows(n) }
diff --git a/src/swing/scala/swing/IndexedContainer.scala b/src/swing/scala/swing/IndexedContainer.scala
deleted file mode 100644
index dd38479c17..0000000000
--- a/src/swing/scala/swing/IndexedContainer.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package scala.swing
-
-import scala.collection.mutable.Buffer
-
-trait IndexedContainer extends Container {
- override val contents: Buffer[Component] = new Content
- def contents_=(c: Component*) { contents.clear(); contents ++= c }
-}
diff --git a/src/swing/scala/swing/Label.scala b/src/swing/scala/swing/Label.scala
index 34ef214d20..2b48f9aff9 100644
--- a/src/swing/scala/swing/Label.scala
+++ b/src/swing/scala/swing/Label.scala
@@ -2,7 +2,10 @@ package scala.swing
import javax.swing._
-class Label(override val peer: JLabel) extends Component {
+/**
+ * @see javax.swing.JLabel
+ */
+class Label(override val peer: JLabel) extends Component(peer) {
def this(txt: String) = this(new JLabel(txt))
def this() = this("")
def text: String = peer.getText()
@@ -10,8 +13,8 @@ class Label(override val peer: JLabel) extends Component {
/**
* The alignment of the label's contents relative to its bounding box.
*/
- def xAlignment: XAlignment = XAlignment.wrap(peer.getHorizontalAlignment)
- def xAlignment_=(x: XAlignment) = peer.setHorizontalAlignment(x.peer)
- def yAlignment: YAlignment = YAlignment.wrap(peer.getVerticalAlignment)
- def yAlignment_=(x: YAlignment) = peer.setVerticalAlignment(x.peer)
+ def xAlignment: XAlignment.Value = XAlignment(peer.getHorizontalAlignment)
+ def xAlignment_=(x: XAlignment.Value) = peer.setHorizontalAlignment(x.id)
+ def yAlignment: YAlignment.Value = YAlignment(peer.getVerticalAlignment)
+ def yAlignment_=(x: YAlignment.Value) = peer.setVerticalAlignment(x.id)
}
diff --git a/src/swing/scala/swing/LayoutContainer.scala b/src/swing/scala/swing/LayoutContainer.scala
index 46cc0e2c10..f7982b27ef 100644
--- a/src/swing/scala/swing/LayoutContainer.scala
+++ b/src/swing/scala/swing/LayoutContainer.scala
@@ -3,7 +3,11 @@ package scala.swing
import javax.swing.JComponent
import scala.collection.mutable.Map
-trait LayoutContainer extends Container {
+/**
+ * A container that associates layout constraints with its children.
+ * See GridBagPanel for an example.
+ */
+trait LayoutContainer extends Container.Wrapper {
type Constraints <: { def peer: AnyRef }
protected def constraintsFor(c: Component): Constraints
def layout: Map[Component, Constraints] = new Map[Component, Constraints] {
diff --git a/src/swing/scala/swing/Menu.scala b/src/swing/scala/swing/Menu.scala
index fdb75229c1..294a512f4e 100644
--- a/src/swing/scala/swing/Menu.scala
+++ b/src/swing/scala/swing/Menu.scala
@@ -3,8 +3,11 @@ package scala.swing
import scala.collection.mutable._
import javax.swing._
-class MenuBar extends IndexedContainer {
- override lazy val peer = new JMenuBar
+/**
+ * @see javax.swing.JMenuBar
+ */
+class MenuBar(override val peer: JMenuBar) extends Component(peer) with SequentialContainer.Wrapper {
+ def this() = this(new JMenuBar)
def menus: Seq[Menu] = contents.filter(_.isInstanceOf[Menu]).map(_.asInstanceOf[Menu])
@@ -19,22 +22,33 @@ class MenuBar extends IndexedContainer {
def subElements: Seq[MenuElement] = peer.getSubElements.map(Component.wrapperFor(_))
}*/
-class MenuItem(val title: String) extends Button {
+/**
+ * @see javax.swing.JMenuItem
+ */
+class MenuItem(override val peer: JMenuItem) extends Button(peer) {
+ def this(title: String) = this(new JMenuItem(title))
def this(a: Action) = {
this("")
action = a
}
- override lazy val peer = new JMenuItem(title)
}
-class Menu(title: String) extends MenuItem(title) with IndexedContainer { self: Menu =>
- override lazy val peer = new JMenu(title)
+/**
+ * @see javax.swing.JMenu
+ */
+class Menu(override val peer: JMenu) extends MenuItem(peer) with SequentialContainer.Wrapper { self: Menu =>
+ def this(title: String) = this(new JMenu(title))
}
-class RadioMenuItem(title: String) extends MenuItem(title) {
- override lazy val peer = new JRadioButtonMenuItem(title)
+/**
+ * @see javax.swing.JRadioButtonMenuItem
+ */
+class RadioMenuItem(override val peer: JRadioButtonMenuItem) extends MenuItem(peer) {
+ def this(title: String) = this(new JRadioButtonMenuItem(title))
}
-
-class CheckMenuItem(title: String) extends MenuItem(title) {
- override lazy val peer = new JCheckBoxMenuItem(title)
+/**
+ * @see javax.swing.JCheckBoxMenuItem
+ */
+class CheckMenuItem(override val peer: JCheckBoxMenuItem) extends MenuItem(peer) {
+ def this(title: String) = this(new JCheckBoxMenuItem(title))
} \ No newline at end of file
diff --git a/src/swing/scala/swing/Orientable.scala b/src/swing/scala/swing/Orientable.scala
new file mode 100644
index 0000000000..a4fc0126d0
--- /dev/null
+++ b/src/swing/scala/swing/Orientable.scala
@@ -0,0 +1,5 @@
+package scala.swing
+
+trait Orientable extends Oriented {
+ def orientation_=(o: Orientation.Value) { peer.setOrientation(o.id) }
+}
diff --git a/src/swing/scala/swing/Orientation.scala b/src/swing/scala/swing/Orientation.scala
index dd38056ccb..6657155340 100644
--- a/src/swing/scala/swing/Orientation.scala
+++ b/src/swing/scala/swing/Orientation.scala
@@ -1,60 +1,8 @@
package scala.swing
import javax.swing.SwingConstants._
-import javax.swing.JTabbedPane
-object Orientation {
- def wrap(n: Int): Orientation = n match {
- case HORIZONTAL => Horizontal
- case VERTICAL => Vertical
- }
+object Orientation extends Enumeration {
+ val Horizontal = Value(HORIZONTAL)
+ val Vertical = Value(VERTICAL)
}
-sealed trait Orientation { def peer: Int }
-case object Horizontal extends Orientation { def peer = HORIZONTAL }
-case object Vertical extends Orientation { def peer = VERTICAL }
-
-object Edge {
- def wrap(n: Int): Edge = n match {
- case LEFT => Left
- case RIGHT => Right
- case TOP => Top
- case BOTTOM => Bottom
- }
-}
-
-sealed trait Edge {
- def peer: Int
-}
-
-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 with Edge { def peer = LEFT }
-case object Right extends XAlignment with Edge { def peer = RIGHT }
-case object Top extends YAlignment with Edge { def peer = TOP }
-//case object Baseline extends YAlignment { def peer = BASELINE }
-case object Bottom extends YAlignment with Edge { 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/Oriented.scala b/src/swing/scala/swing/Oriented.scala
index 39e2b0ba2a..7efa61d615 100644
--- a/src/swing/scala/swing/Oriented.scala
+++ b/src/swing/scala/swing/Oriented.scala
@@ -5,9 +5,5 @@ trait Oriented {
def getOrientation(): Int
def setOrientation(n: Int)
}
- def orientation: Orientation = Orientation.wrap(peer.getOrientation)
-}
-
-trait Orientable extends Oriented {
- def orientation_=(o: Orientation) { peer.setOrientation(o.peer) }
+ def orientation: Orientation.Value = Orientation(peer.getOrientation)
}
diff --git a/src/swing/scala/swing/Panel.scala b/src/swing/scala/swing/Panel.scala
index 5ff6cef0e3..b0a85b8f0e 100644
--- a/src/swing/scala/swing/Panel.scala
+++ b/src/swing/scala/swing/Panel.scala
@@ -1,7 +1,6 @@
package scala.swing
-abstract class Panel extends Container {
- override lazy val peer: javax.swing.JPanel = new javax.swing.JPanel
-
- def layoutManager: java.awt.LayoutManager = peer.getLayout
-}
+/**
+ * @see javax.swing.JPanel
+ */
+abstract class Panel(override val peer: javax.swing.JPanel) extends Component(peer) with Container.Wrapper
diff --git a/src/swing/scala/swing/ProgressBar.scala b/src/swing/scala/swing/ProgressBar.scala
index db80035058..c43b4f523c 100644
--- a/src/swing/scala/swing/ProgressBar.scala
+++ b/src/swing/scala/swing/ProgressBar.scala
@@ -2,7 +2,10 @@ package scala.swing
import event._
-class ProgressBar(override val peer: javax.swing.JProgressBar) extends Component with Orientable {
+/**
+ * @see javax.swing.JProgressBar
+ */
+class ProgressBar(override val peer: javax.swing.JProgressBar) extends Component(peer) with Orientable {
def this() = this(new javax.swing.JProgressBar)
def min: Int = peer.getMinimum
diff --git a/src/swing/scala/swing/PushButton.scala b/src/swing/scala/swing/PushButton.scala
index 54b75e6a39..39a1bc0dc7 100644
--- a/src/swing/scala/swing/PushButton.scala
+++ b/src/swing/scala/swing/PushButton.scala
@@ -3,8 +3,10 @@ package scala.swing
import javax.swing._
import event._
-/** A class for buttons; standard constructor wraps around a swing button */
-class PushButton(override val peer: JButton) extends Button with Publisher {
+/**
+ * @see javax.swing.JButton
+ */
+class PushButton(override val peer: JButton) extends Button(peer) with Publisher {
def this(txt: String) = this(new JButton(txt))
def this() = this("")
def this(a: Action) = {
diff --git a/src/swing/scala/swing/RadioButton.scala b/src/swing/scala/swing/RadioButton.scala
index 4b0cd50087..b2d37a71e4 100644
--- a/src/swing/scala/swing/RadioButton.scala
+++ b/src/swing/scala/swing/RadioButton.scala
@@ -2,7 +2,10 @@ package scala.swing
import javax.swing._
+/**
+ * @see javax.swing.JRadioButton
+ */
class RadioButton(override val peer: JRadioButton) extends ToggleButton(peer) {
- def this(txt: String) = this(new JRadioButton(txt))
+ def this(text: String) = this(new JRadioButton(text))
def this() = this(new JRadioButton)
} \ No newline at end of file
diff --git a/src/swing/scala/swing/RootPanel.scala b/src/swing/scala/swing/RootPanel.scala
index c6480fa403..95fa5ef140 100644
--- a/src/swing/scala/swing/RootPanel.scala
+++ b/src/swing/scala/swing/RootPanel.scala
@@ -1,15 +1,22 @@
package scala.swing
-trait RootPanel { self: Object { def peer: java.awt.Component with javax.swing.RootPaneContainer } =>
- content = new Component {}
- def content: Component = {
- if (peer.getContentPane.getComponentCount == 0) new Component {}
+/**
+ * @see javax.swing.RootPaneContainer
+ */
+trait RootPanel extends Container {
+ def peer: java.awt.Component with javax.swing.RootPaneContainer
+ //contents = new Component { opaque = false }
+ def contents: Seq[Component] = {
+ Swing.toOption(peer.getContentPane.getComponent(0)).map { c =>
+ Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent])
+ }.toList
+ /*if (peer.getContentPane.getComponentCount == 0) Nil
else {
val c = peer.getContentPane.getComponent(0)
- Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent])
- }
+ ListComponent.wrapperFor(c.asInstanceOf[javax.swing.JComponent])
+ }*/
}
- def content_=(c: Component) {
+ def contents_=(c: Component) {
if (peer.getContentPane.getComponentCount > 0) {
val old = peer.getContentPane.getComponent(0)
peer.getContentPane.remove(old)
diff --git a/src/swing/scala/swing/ScrollPane.scala b/src/swing/scala/swing/ScrollPane.scala
index 4f54e93520..cea712f96c 100644
--- a/src/swing/scala/swing/ScrollPane.scala
+++ b/src/swing/scala/swing/ScrollPane.scala
@@ -2,12 +2,19 @@ package scala.swing
import javax.swing.JScrollPane
-class ScrollPane(override val peer: JScrollPane) extends Component with Publisher {
+/**
+ * @see javax.swing.JScrollPane
+ */
+class ScrollPane(override val peer: JScrollPane) extends Component(peer) with Container {
def this() = this(new JScrollPane)
def this(contents: Component) = this(new JScrollPane(contents.peer))
- def rowHeaderView: Component = null
+ def contents: Seq[Component] =
+ List(Component.wrapperFor(peer.getViewport.getView.asInstanceOf[javax.swing.JComponent]))
+ def contents_=(c: Component) { peer.setViewportView(c.peer) }
+
+ /*def rowHeaderView: Component = null
def rowHeaderView_=(c: Component) = peer.setRowHeaderView(c.peer)
def viewportView: Component = null
- def viewportView_=(c: Component) = peer.setViewportView(c.peer)
+ def viewportView_=(c: Component) = peer.setViewportView(c.peer)*/
}
diff --git a/src/swing/scala/swing/Scrollable.scala b/src/swing/scala/swing/Scrollable.scala
index d5ffe636b6..73be856459 100644
--- a/src/swing/scala/swing/Scrollable.scala
+++ b/src/swing/scala/swing/Scrollable.scala
@@ -1,7 +1,10 @@
package scala.swing
-import geometry._
+import java.awt.Rectangle
+/**
+ * @see javax.swing.Scrollable
+ */
trait Scrollable extends Component {
protected def scrollablePeer: javax.swing.Scrollable
def preferredViewportSize = scrollablePeer.getPreferredScrollableViewportSize
@@ -9,9 +12,9 @@ trait Scrollable extends Component {
def tracksViewportHeight: Boolean = scrollablePeer.getScrollableTracksViewportHeight
def tracksViewportWidth: Boolean = scrollablePeer.getScrollableTracksViewportWidth
- def blockIncrement(visibleRect: Rectangle, orientation: Orientation, direction: Int): Int =
- scrollablePeer.getScrollableBlockIncrement(visibleRect.peer, orientation.peer, direction)
+ def blockIncrement(visibleRect: Rectangle, orientation: Orientation.Value, direction: Int): Int =
+ scrollablePeer.getScrollableBlockIncrement(visibleRect, orientation.id, direction)
- def unitIncrement(visibleRect: Rectangle, orientation: Orientation, direction: Int): Int =
- scrollablePeer.getScrollableUnitIncrement(visibleRect.peer, orientation.peer, direction)
+ def unitIncrement(visibleRect: Rectangle, orientation: Orientation.Value, direction: Int): Int =
+ scrollablePeer.getScrollableUnitIncrement(visibleRect, orientation.id, direction)
}
diff --git a/src/swing/scala/swing/Selectable.scala b/src/swing/scala/swing/Selectable.scala
deleted file mode 100644
index 38b86efb60..0000000000
--- a/src/swing/scala/swing/Selectable.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package scala.swing
-
-trait Selectable {
- def peer: javax.swing.JComponent {
- def setSelected(b: Boolean)
- def isSelected(): Boolean
- }
-
- def selected: Boolean = peer.isSelected
- def selected_=(b: Boolean) = peer.setSelected(b)
-}
diff --git a/src/swing/scala/swing/Separator.scala b/src/swing/scala/swing/Separator.scala
index 3be204a49f..7f6fdb8d41 100644
--- a/src/swing/scala/swing/Separator.scala
+++ b/src/swing/scala/swing/Separator.scala
@@ -5,6 +5,6 @@ import javax.swing._
/**
* @see javax.swing.JSeparator
*/
-class Separator extends Component with Oriented {
- override lazy val peer = new JSeparator
+class Separator(override val peer: JSeparator) extends Component(peer) with Oriented {
+ def this() = this(new JSeparator)
}
diff --git a/src/swing/scala/swing/SequentialContainer.scala b/src/swing/scala/swing/SequentialContainer.scala
new file mode 100644
index 0000000000..333c0b1969
--- /dev/null
+++ b/src/swing/scala/swing/SequentialContainer.scala
@@ -0,0 +1,15 @@
+package scala.swing
+
+import scala.collection.mutable.Buffer
+
+object SequentialContainer {
+ trait Wrapper extends Component with SequentialContainer with Container.Wrapper {
+ override val contents: Buffer[Component] = new Content
+ def contents_=(c: Component*) { contents.clear(); contents ++= c }
+ }
+}
+
+trait SequentialContainer extends Container {
+ override def contents: Buffer[Component]
+ def contents_=(c: Component*)
+}
diff --git a/src/swing/scala/swing/Showable.scala b/src/swing/scala/swing/Showable.scala
deleted file mode 100644
index 7435d2dc0c..0000000000
--- a/src/swing/scala/swing/Showable.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package scala.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 8995852b79..b341a16e0e 100644
--- a/src/swing/scala/swing/SimpleGUIApplication.scala
+++ b/src/swing/scala/swing/SimpleGUIApplication.scala
@@ -7,9 +7,7 @@ abstract class SimpleGUIApplication extends GUIApplication {
def main(args: Array[String]) = {
SwingUtilities.invokeLater {
- new Runnable { def run() { init(); top.pack().show() } }
+ new Runnable { def run() { init(); top.pack(); top.visible = true } }
}
}
-
- implicit def string2label(s: String): Label = new Label(s)
}
diff --git a/src/swing/scala/swing/Slider.scala b/src/swing/scala/swing/Slider.scala
index 0c0e4894a8..bc0ddd2d85 100644
--- a/src/swing/scala/swing/Slider.scala
+++ b/src/swing/scala/swing/Slider.scala
@@ -3,7 +3,10 @@ package scala.swing
import event._
import Swing._
-class Slider(override val peer: javax.swing.JSlider) extends Component with Orientable with EditorComponent {
+/**
+ * @see javax.swing.JSlider
+ */
+class Slider(override val peer: javax.swing.JSlider) extends Component(peer) with Orientable with Publisher {
def this() = this(new javax.swing.JSlider)
def min: Int = peer.getMinimum
@@ -38,7 +41,9 @@ class Slider(override val peer: javax.swing.JSlider) extends Component with Orie
peer.setLabelTable(table)
}
- lazy val contentModified = new Publisher {
- peer.addChangeListener { ChangeListener( e => publish(ContentModified(Slider.this))) }
- }
+ peer.addChangeListener(new javax.swing.event.ChangeListener {
+ def stateChanged(e: javax.swing.event.ChangeEvent) {
+ publish(ValueChanged(Slider.this, peer.getValueIsAdjusting))
+ }
+ })
} \ No newline at end of file
diff --git a/src/swing/scala/swing/SplitPane.scala b/src/swing/scala/swing/SplitPane.scala
new file mode 100644
index 0000000000..a78dfd9840
--- /dev/null
+++ b/src/swing/scala/swing/SplitPane.scala
@@ -0,0 +1,44 @@
+package scala.swing
+
+import event._
+import Swing._
+
+/**
+ * @see javax.swing.JSplitPane
+ */
+class SplitPane(override val peer: javax.swing.JSplitPane) extends Component(peer) with Container with Orientable {
+ def this(o: Orientation.Value) = this(new javax.swing.JSplitPane(o.id))
+
+ leftComponent = new Component {}
+ rightComponent = new Component {}
+
+ def contents: Seq[Component] = List(leftComponent, rightComponent)
+ def contents_=(left: Component, right: Component) {
+ peer.setLeftComponent(left.peer)
+ peer.setRightComponent(right.peer)
+ }
+
+ def topComponent: Component = Component.wrapperFor(peer.getTopComponent.asInstanceOf[javax.swing.JComponent])
+ def topComponent_=(c: Component) { peer.setTopComponent(c.peer) }
+ def bottomComponent: Component = Component.wrapperFor(peer.getBottomComponent.asInstanceOf[javax.swing.JComponent])
+ def bottomComponent_=(c: Component) { peer.setBottomComponent(c.peer) }
+
+ def leftComponent: Component = topComponent
+ def leftComponent_=(c: Component) { topComponent = c }
+ def rightComponent: Component = bottomComponent
+ def rightComponent_=(c: Component) { bottomComponent = c }
+
+ def dividerLocation: Int = peer.getDividerLocation
+ def dividerLocation_=(n: Int) { peer.setDividerLocation(n) }
+ def dividerSize: Int = peer.getDividerSize
+ def dividerSize_=(n: Int) { peer.setDividerSize(n) }
+ def resizeWeight: Double = peer.getResizeWeight
+ def resizeWeight_=(n: Double) { peer.setResizeWeight(n) }
+
+ def resetToPreferredSizes() { peer.resetToPreferredSizes() }
+
+ def oneTouchExpandable: Boolean = peer.isOneTouchExpandable
+ def oneTouchExpandable_=(b: Boolean) { peer.setOneTouchExpandable(b) }
+ def continuousLayout: Boolean = peer.isContinuousLayout
+ def continuousLayout_=(b: Boolean) { peer.setContinuousLayout(b) }
+} \ No newline at end of file
diff --git a/src/swing/scala/swing/Spreadsheet.scala b/src/swing/scala/swing/Spreadsheet.scala
deleted file mode 100644
index 9c175b1f3f..0000000000
--- a/src/swing/scala/swing/Spreadsheet.scala
+++ /dev/null
@@ -1,100 +0,0 @@
-package scala.swing
-
-import javax.swing.table.{AbstractTableModel, TableCellRenderer}
-import javax.swing.event.{TableModelListener, TableModelEvent}
-import javax.swing._
-import event._
-
-/*class Spreadsheet(width: Int, height: Int) extends Component with SwingComponent with Publisher {
-
-
- def showGrid: Boolean = acomponent.table.getShowHorizontalLines && acomponent.table.getShowVerticalLines
- def showGrid_=(x: Boolean) = acomponent.table.setShowGrid(x)
-
- case class SpreadsheetCell(var userData: String, var displayData: String)
-
- val data = model.Matrix[SpreadsheetCell](SpreadsheetCell("", ""), width, height)
-
- val acomponent = new JScrollPane {
- setPreferredSize(new java.awt.Dimension(800, 600))
- val table = new JTable {
- setSelectionModel(new DefaultListSelectionModel)
- setAutoResizeMode(JTable.AUTO_RESIZE_OFF)
- setRowHeight(25)
- val model = new AbstractTableModel { model =>
- class UserDataEvent(col: Int, row: Int) extends TableModelEvent(model, row, row, col)
- val getRowCount = height
- val getColumnCount = width
- def getValueAt(row: Int, col: Int) =
- data(col, row).userData
- override def setValueAt(value: AnyRef, row: Int, col: Int) = {
- data(col, row).userData = value.toString
- fireTableChanged(new UserDataEvent(col, row))
- }
- def setDisplayValueAt(value: AnyRef, row: Int, col: Int) = {
- data(col, row).displayData = value.toString
- fireTableCellUpdated(row, col)
- }
- override def isCellEditable(row: Int, col: Int) = true
- addTableModelListener(new TableModelListener {
- def tableChanged(event: TableModelEvent) = event match {
- case de:UserDataEvent =>
- publish(CellModified(event.getColumn, event.getFirstRow, data(event.getColumn, event.getFirstRow).userData))
- case _ =>
- }
- })
- }
- setModel(model)
- setDefaultRenderer(classOf[AnyRef], new TableCellRenderer {
- def getTableCellRendererComponent(table: JTable, value: AnyRef, selected: Boolean, focus: Boolean, row: Int, col: Int) =
- if (focus) new JTextField {
- setText(data(col, row).userData)
- }
- else new JLabel {
- setText(data(col, row).displayData)
- }
- })
- getTableHeader.setReorderingAllowed(false)
- getTableHeader.setResizingAllowed(false)
- }
- setViewportView(table)
- setColumnHeaderView(table.getTableHeader)
- setRowHeaderView(new JList {
- setListData(((1 to height) map (_.toString)).toArray.asInstanceOf[Array[Object]])
- setFixedCellWidth(50)
- setCellRenderer(new JLabel with ListCellRenderer {
- setOpaque(true)
- setBorder(UIManager.getBorder("TableHeader.cellBorder"))
- setHorizontalAlignment(SwingConstants.CENTER)
- setForeground(table.getTableHeader.getForeground)
- setBackground(table.getTableHeader.getBackground)
- setFont(table.getTableHeader.getFont)
- def getListCellRendererComponent(list: JList, value: AnyRef, index: Int, isSelected: Boolean, cellHasFocus: Boolean) = {
- setPreferredSize(new Dimension(50, table.getRowHeight(index)))
- setText(value.toString)
- this
- }
- })
- })
- def corner = new JLabel{
- setOpaque(true)
- setBorder(UIManager.getBorder("TableHeader.cellBorder"))
- setForeground(table.getTableHeader.getForeground)
- setBackground(table.getTableHeader.getBackground)
- }
- setCorner(ScrollPaneConstants.UPPER_LEFT_CORNER, corner)
- setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, corner)
- setCorner(ScrollPaneConstants.LOWER_LEFT_CORNER, corner)
- setCorner(ScrollPaneConstants.UPPER_RIGHT_CORNER, corner)
- }
-
- def update(col: Int, row: Int, value: Any) = {
- acomponent.table.model.setDisplayValueAt(value.toString, row, col)
- }
-// SwingUtilities.invokeLater(new Runnable {
-// def run = acomponent.table.model.setDisplayValueAt(value.toString, row, col)
-// })
-
- 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
index f1dcfc7ebb..9196df5f91 100644
--- a/src/swing/scala/swing/Swing.scala
+++ b/src/swing/scala/swing/Swing.scala
@@ -1,13 +1,13 @@
package scala.swing
-import geometry._
+import java.awt.Dimension
import javax.swing._
import javax.swing.event._
object Swing {
protected[swing] def ifNull[A](o: Object, a: A): A = if(o eq null) a else o.asInstanceOf[A]
protected[swing] def toOption[A](o: Object): Option[A] = if(o eq null) None else Some(o.asInstanceOf[A])
- protected[swing] def toNull[A>:Null<:AnyRef](a: Option[A]): Object = if(a == None) null else a.get
+ protected[swing] def toNull[A>:Null<:AnyRef](a: Option[A]): A = if(a == None) null else a.get
implicit def block2Runnable(block: =>Unit): Runnable = new Runnable {
override def run = block
@@ -17,7 +17,7 @@ object Swing {
}
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)
+ override lazy val peer = new javax.swing.Box.Filler(min, pref, max)
}
def HGlue = new Component {
override lazy val peer = javax.swing.Box.createHorizontalGlue.asInstanceOf[JComponent]
@@ -29,7 +29,7 @@ object Swing {
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]
+ override lazy val peer = javax.swing.Box.createRigidArea(dim).asInstanceOf[JComponent]
}
def HStrut(width: Int) = new Component {
override lazy val peer = javax.swing.Box.createHorizontalStrut(width).asInstanceOf[JComponent]
diff --git a/src/swing/scala/swing/SwingComponent.scala b/src/swing/scala/swing/SwingComponent.scala
deleted file mode 100644
index 28231eb9a5..0000000000
--- a/src/swing/scala/swing/SwingComponent.scala
+++ /dev/null
@@ -1,11 +0,0 @@
-package scala.swing
-
-import javax.swing._
-import java.awt._
-
-/*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/TabbedPane.scala b/src/swing/scala/swing/TabbedPane.scala
index e9dc2b36a0..3c906ebad2 100644
--- a/src/swing/scala/swing/TabbedPane.scala
+++ b/src/swing/scala/swing/TabbedPane.scala
@@ -1,9 +1,9 @@
package scala.swing
-import geometry._
+import event._
import scala.collection.mutable.Buffer
import javax.swing.{JTabbedPane, JComponent}
-import java.awt.Color
+import java.awt.{Color, Rectangle}
object TabbedPane {
@@ -11,58 +11,77 @@ object TabbedPane {
val Wrap = Value(JTabbedPane.WRAP_TAB_LAYOUT)
val Scroll = Value(JTabbedPane.SCROLL_TAB_LAYOUT)
}
-}
-class TabbedPane(override val peer: JTabbedPane) extends Component with Publisher {
- import TabbedPane._
+ class Page protected(title0: String, content0: Component, tip0: String, index0: Int) extends Proxy {
+ def self = content0
- class Tab protected(title0: String, component0: Component, tip0: String, index0: Int) {
- def this(title0: String, component0: Component, tip0: String) =
- this(title0, component0, tip0, 0)
+ def this(title0: String, content0: Component, tip0: String) =
+ this(title0, content0, tip0, 0)
+ def this(title0: String, content0: Component) =
+ this(title0, content0, "")
+ content = content0 // first add component, *then* set other things
title = title0
- component = component0
tip = tip0
- def title: String = peer.getTitleAt(index)
- def title_=(t: String) { peer.setTitleAt(index, t) }
- def component: Component = Component.wrapperFor(peer.getComponentAt(index).asInstanceOf[JComponent])
- def component_=(c: Component) { peer.setComponentAt(index, c.peer) }
- def tip: String = peer.getToolTipTextAt(index)
- def tip_=(t: String) { peer.setToolTipTextAt(index, t) }
- def enabled: Boolean = peer.isEnabledAt(index)
- def enabled_=(b: Boolean) { peer.setEnabledAt(index, b) }
- def mnemonic: Int = peer.getMnemonicAt(index)
- def mnemonic_=(k: Int) = peer.setMnemonicAt(index, k)
- def foreground: Color = peer.getForegroundAt(index)
- def foreground_=(c: Color) = peer.setForegroundAt(index, c)
- def background: Color = peer.getBackgroundAt(index)
- def background_=(c: Color) = peer.setBackgroundAt(index, c)
- def bounds: Rectangle = Rectangle.wrap(peer.getBoundsAt(index))
+
+ protected[TabbedPane] var parent: TabbedPane = null
+
+ protected var _title = title0
+ def title: String = _title//parent.peer.getTitleAt(index)
+ def title_=(t: String) { _title = title0; if (parent != null) parent.peer.setTitleAt(index, t) }
+ protected var _content = content0
+ def content: Component = _content//Component.wrapperFor(peer.getComponentAt(index).asInstanceOf[JComponent])
+ def content_=(c: Component) { _content = c; if (parent != null) parent.peer.setComponentAt(index, c.peer) }
+ protected var _tip = tip0
+ def tip: String = _tip//peer.getToolTipTextAt(index)
+ def tip_=(t: String) { _tip = t; if (parent != null) parent.peer.setToolTipTextAt(index, t) }
+ protected var _enabled = true
+ def enabled: Boolean = _enabled//peer.isEnabledAt(index)
+ def enabled_=(b: Boolean) { _enabled = b; if (parent != null) parent.peer.setEnabledAt(index, b) }
+ protected var _mnemonic = -1
+ def mnemonic: Int = _mnemonic//peer.getMnemonicAt(index)
+ def mnemonic_=(k: Int) { _mnemonic = k; if (parent != null) parent.peer.setMnemonicAt(index, k)}
+ protected var _foreground: Color = null
+ def foreground: Color = _foreground//peer.getForegroundAt(index)
+ def foreground_=(c: Color) { _foreground = c; if (parent != null) parent.peer.setForegroundAt(index, c)}
+ protected var _background: Color = null
+ def background: Color = _background //peer.getBackgroundAt(index)
+ def background_=(c: Color) { _background = c; if (parent != null) parent.peer.setBackgroundAt(index, c)}
+ def bounds: Rectangle = parent.peer.getBoundsAt(index)
// TODO: icon, disabledIcon
def index = _index
protected[TabbedPane] var _index: Int = index0
}
+}
+
+/**
+ * @see javax.swing.JTabbedPane
+ */
+class TabbedPane(override val peer: JTabbedPane) extends Component(peer) with Publisher {
+ import TabbedPane._
def this() = this(new JTabbedPane)
- object tabs extends BufferAdapter[Tab] {
+ object pages extends BufferWrapper[Page] {
def runCount: Int = peer.getTabRunCount
- def remove(n: Int): Tab = {
+ def remove(n: Int): Page = {
val t = apply(n)
peer.removeTabAt(n)
+ t.parent = null
for(i <- n to length) apply(i)._index -= 1
t
}
- protected def insertAt(n: Int, t: Tab) {
+ protected def insertAt(n: Int, t: Page) {
for(i <- n to length) apply(i)._index += 1
- peer.insertTab(t.title, null, t.component.peer, t.tip, n)
+ t.parent = TabbedPane.this
+ peer.insertTab(t.title, null, t.content.peer, t.tip, n)
}
- def +=(t: Tab) { peer.addTab(t.title, null, t.component.peer, t.tip) }
+ def +=(t: Page) { t.parent = TabbedPane.this; peer.addTab(t.title, null, t.content.peer, t.tip) }
def length = peer.getTabCount
- def apply(n: Int) = new Tab(peer.getTitleAt(n),
+ def apply(n: Int) = new Page(peer.getTitleAt(n),
Component.wrapperFor(peer.getComponentAt(n).asInstanceOf[javax.swing.JComponent]),
peer.getToolTipTextAt(n))
}
@@ -70,8 +89,20 @@ class TabbedPane(override val peer: JTabbedPane) extends Component with Publishe
def tabLayoutPolicy: Layout.Value = Layout(peer.getTabLayoutPolicy)
def tabLayoutPolicy_=(p: Layout.Value) { peer.setTabLayoutPolicy(p.id) }
- def tabPlacement: Edge = Edge.wrap(peer.getTabPlacement)
- def tabPlacement(b: Edge) { peer.setTabPlacement(b.peer) }
+ def tabPlacement: EdgePosition.Value = EdgePosition(peer.getTabPlacement)
+ def tabPlacement(b: EdgePosition.Value) { peer.setTabPlacement(b.id) }
+
+ object selection extends Publisher {
+ def page: Page = pages(index)
+ def page_=(p: Page) { index = p.index }
- def selected: Tab = tabs(peer.getSelectedIndex)
+ def index: Int = peer.getSelectedIndex
+ def index_=(n: Int) { peer.setSelectedIndex(n) }
+
+ peer.addChangeListener(new javax.swing.event.ChangeListener {
+ def stateChanged(e: javax.swing.event.ChangeEvent) {
+ publish(SelectionChanged(TabbedPane.this))
+ }
+ })
+ }
}
diff --git a/src/swing/scala/swing/Table.scala b/src/swing/scala/swing/Table.scala
index 716ce461e3..8b957f1217 100644
--- a/src/swing/scala/swing/Table.scala
+++ b/src/swing/scala/swing/Table.scala
@@ -1,11 +1,10 @@
package scala.swing
-import geometry._
import model.Matrix
import javax.swing._
import javax.swing.table._
import javax.swing.event._
-import java.awt.Color
+import java.awt.{Dimension, Color}
import event._
import scala.collection.mutable.Set
@@ -30,7 +29,10 @@ object Table {
}
}
-class Table(override val peer: JTable) extends Component with Scrollable with Publisher {
+/**
+ * @see javax.swing.JTable
+ */
+class Table(override val peer: JTable) extends Component(peer) with Scrollable with Publisher {
import Table._
def this() = this(new JTable())
def this(numRows: Int, numColumns: Int) = this(new JTable(numRows, numColumns))
@@ -60,9 +62,9 @@ class Table(override val peer: JTable) extends Component with Scrollable with Pu
def gridColor = peer.getGridColor
def gridColor_=(color: Color) = peer.setGridColor(color)
- def preferredViewportSize_=(dim: Dimension) = peer.setPreferredScrollableViewportSize(dim.peer)
- def fillsViewportHeight: Boolean = peer.getFillsViewportHeight
- def fillsViewportHeight_=(b: Boolean) = peer.setFillsViewportHeight(b)
+ def preferredViewportSize_=(dim: Dimension) = peer.setPreferredScrollableViewportSize(dim)
+ //1.6: def fillsViewportHeight: Boolean = peer.getFillsViewportHeight
+ //def fillsViewportHeight_=(b: Boolean) = peer.setFillsViewportHeight(b)
// TODO: could be a sorted set
protected abstract class SelectionSet[A](a: =>Seq[A]) extends Set[A] {
@@ -125,13 +127,13 @@ class Table(override val peer: JTable) extends Component with Scrollable with Pu
}
peer.getColumnModel.getSelectionModel.addListSelectionListener(new ListSelectionListener {
- def valueChanged(e: ListSelectionEvent) {
- publish(ColumnsSelected(Table.this, e.getValueIsAdjusting, e.getFirstIndex to e.getLastIndex))
+ def valueChanged(e: javax.swing.event.ListSelectionEvent) {
+ publish(ColumnsSelected(Table.this, e.getFirstIndex to e.getLastIndex, e.getValueIsAdjusting))
}
})
peer.getSelectionModel.addListSelectionListener(new ListSelectionListener {
- def valueChanged(e: ListSelectionEvent) {
- publish(RowsSelected(Table.this, e.getValueIsAdjusting, e.getFirstIndex to e.getLastIndex))
+ def valueChanged(e: javax.swing.event.ListSelectionEvent) {
+ publish(RowsSelected(Table.this, e.getFirstIndex to e.getLastIndex, e.getValueIsAdjusting))
}
})
}
diff --git a/src/swing/scala/swing/TextArea.scala b/src/swing/scala/swing/TextArea.scala
index 396f218d30..25fba7cfc0 100644
--- a/src/swing/scala/swing/TextArea.scala
+++ b/src/swing/scala/swing/TextArea.scala
@@ -4,6 +4,9 @@ import javax.swing._
import java.awt.event._
import event._
+/**
+ * @see javax.swing.JTextArea
+ */
class TextArea(override val peer: JTextArea) extends TextComponent(peer) with TextComponent.HasColumns with TextComponent.HasRows {
def this(text: String, rows: Int, columns: int) = this(new JTextArea(text, rows, columns))
def this(text: String) = this(new JTextArea(text))
diff --git a/src/swing/scala/swing/TextComponent.scala b/src/swing/scala/swing/TextComponent.scala
index fb06cb4023..a5779f6826 100644
--- a/src/swing/scala/swing/TextComponent.scala
+++ b/src/swing/scala/swing/TextComponent.scala
@@ -16,35 +16,44 @@ object TextComponent {
}
}
-class TextComponent(override val peer: JTextComponent) extends Component with EditorComponent with Publisher {
- def contents: String = peer.getText
- def contents_=(t: String) = peer.setText(t)
+/**
+ * @see javax.swing.JTextComponent
+ */
+class TextComponent(override val peer: JTextComponent) extends Component(peer) with Publisher {
+ def text: String = peer.getText
+ def text_=(t: String) = peer.setText(t)
+
+ class Caret extends Publisher {
+ def dot: Int = peer.getCaret.getDot
+ def dot_=(n: Int) { peer.getCaret.setDot(n) }
+ def mark: Int = peer.getCaret.getMark
+ def moveDot(n: Int) { peer.getCaret.moveDot(n) }
+ def visible: Boolean = peer.getCaret.isVisible
+ def visible_=(b: Boolean) { peer.getCaret.setVisible(b) }
+ def selectionVisible: Boolean = peer.getCaret.isSelectionVisible
+ def selectionVisible_=(b: Boolean) { peer.getCaret.setSelectionVisible(b) }
+ def blinkRate: Int = peer.getCaret.getBlinkRate
+ def blinkRate_=(n: Int) { peer.getCaret.setBlinkRate(n) }
+
+ peer.addCaretListener {
+ new CaretListener {
+ def caretUpdate(e: CaretEvent) { publish(CaretUpdate(TextComponent.this)) }
+ }
+ }
+ }
- val caret = new Caret(peer.getCaret)
+ object caret extends Caret
def editable: Boolean = peer.isEditable
def editable_=(x: Boolean) = peer.setEditable(x)
-
def cut() { peer.cut() }
def copy() { peer.copy() }
def selected: String = peer.getSelectedText
- peer.addCaretListener {
- new CaretListener {
- 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)) }
- }
- }
- }
+ peer.getDocument.addDocumentListener(new DocumentListener {
+ def changedUpdate(e:DocumentEvent) { publish(ValueChanged(TextComponent.this, true)) }
+ def insertUpdate(e:DocumentEvent) { publish(ValueChanged(TextComponent.this, true)) }
+ def removeUpdate(e:DocumentEvent) { publish(ValueChanged(TextComponent.this, true)) }
+ })
}
diff --git a/src/swing/scala/swing/TextField.scala b/src/swing/scala/swing/TextField.scala
index 9658230608..a437596204 100644
--- a/src/swing/scala/swing/TextField.scala
+++ b/src/swing/scala/swing/TextField.scala
@@ -4,6 +4,9 @@ import javax.swing._
import java.awt.event._
import event._
+/**
+ * @see javax.swing.JTextField
+ */
class TextField(override val peer: JTextField) extends TextComponent(peer) with TextComponent.HasColumns {
def this(text: String, columns: int) = this(new JTextField(text, columns))
def this(text: String) = this(new JTextField(text))
@@ -13,13 +16,7 @@ class TextField(override val peer: JTextField) extends TextComponent(peer) with
def columns: Int = peer.getColumns
def columns_=(n: Int) = peer.setColumns(n)
- override lazy val contentModified = new Publisher {
- peer.addActionListener {
- new ActionListener {
- def actionPerformed(e: ActionEvent) { publish(ContentModified(TextField.this)) }
- }
- }
- }
-
- override lazy val liveContentModified = super.liveContentModified
+ peer.addActionListener(new ActionListener {
+ def actionPerformed(e: ActionEvent) { publish(ValueChanged(TextField.this, false)) }
+ })
}
diff --git a/src/swing/scala/swing/ToggleButton.scala b/src/swing/scala/swing/ToggleButton.scala
index eebf3f3675..a4a6e3d378 100644
--- a/src/swing/scala/swing/ToggleButton.scala
+++ b/src/swing/scala/swing/ToggleButton.scala
@@ -3,6 +3,9 @@ package scala.swing
import javax.swing._
import event._
+/**
+ * @see javax.swing.JToggleButton
+ */
class ToggleButton(override val peer: JToggleButton) extends Button(peer) {
def this(txt: String) = this(new JToggleButton(txt))
def this() = this(new JToggleButton)
diff --git a/src/swing/scala/swing/UIElement.scala b/src/swing/scala/swing/UIElement.scala
index 246c4e24bb..9cb7bdb37a 100644
--- a/src/swing/scala/swing/UIElement.scala
+++ b/src/swing/scala/swing/UIElement.scala
@@ -1,8 +1,10 @@
package scala.swing
-import java.awt.Color
-import java.awt.Font
+import java.awt.{Color, Cursor, Font}
+/**
+ * The root of all user interface elements.
+ */
trait UIElement {
def peer: java.awt.Component
def foreground: Color = peer.getForeground
@@ -12,4 +14,20 @@ trait UIElement {
def font: Font = peer.getFont
def font_=(f: Font) = peer.setFont(f)
+
+ def locationOnScreen = peer.getLocationOnScreen
+ def location = peer.getLocation
+ def bounds = peer.getBounds
+ def size = peer.getSize
+ def locale = peer.getLocale
+ def toolkit = peer.getToolkit
+
+ def cursor: Cursor = peer.getCursor
+ def cursor_=(c: Cursor) { peer.setCursor(c) }
+
+ def visible: Boolean = peer.isVisible
+ def visible_=(b: Boolean) { peer.setVisible(b) }
+ def showing: Boolean = peer.isShowing
+
+ def repaint() { peer.repaint }
}
diff --git a/src/swing/scala/swing/Views.scala b/src/swing/scala/swing/Views.scala
index 9278a0b71b..eeea5eb721 100644
--- a/src/swing/scala/swing/Views.scala
+++ b/src/swing/scala/swing/Views.scala
@@ -1,7 +1,7 @@
package scala.swing
object Views {
- implicit def action2MenuItem(a: Action): MenuItem = new MenuItem(a)
+ //implicit def action2MenuItem(a: Action): MenuItem = new MenuItem(a)
//implicit def action2PushButton(a: Action): PushButton = new PushButton(a)
//implicit def string2Label(s: String): Label = new Label(s)
}
diff --git a/src/swing/scala/swing/XAlignment.scala b/src/swing/scala/swing/XAlignment.scala
new file mode 100644
index 0000000000..2129ea281a
--- /dev/null
+++ b/src/swing/scala/swing/XAlignment.scala
@@ -0,0 +1,9 @@
+package scala.swing
+
+import javax.swing.SwingConstants._
+
+object XAlignment extends Enumeration {
+ val Left = Value(LEFT)
+ val Right = Value(RIGHT)
+ val Center = Value(CENTER)
+}
diff --git a/src/swing/scala/swing/YAlignment.scala b/src/swing/scala/swing/YAlignment.scala
new file mode 100644
index 0000000000..9851511de1
--- /dev/null
+++ b/src/swing/scala/swing/YAlignment.scala
@@ -0,0 +1,10 @@
+package scala.swing
+
+import javax.swing.SwingConstants._
+
+object YAlignment extends Enumeration {
+ val Top = Value(TOP)
+ val Bottom = Value(BOTTOM)
+ val Center = Value(CENTER)
+ //1.6: val Baseline = Value(BASELINE)
+}
diff --git a/src/swing/scala/swing/event/CellModified.scala b/src/swing/scala/swing/event/CellModified.scala
deleted file mode 100644
index 7a42a82317..0000000000
--- a/src/swing/scala/swing/event/CellModified.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package scala.swing.event
-
-//case class CellModified(source: Table, col: Int, row: int, value: String) extends Event(source)
diff --git a/src/swing/scala/swing/event/ContentModified.scala b/src/swing/scala/swing/event/ContentModified.scala
deleted file mode 100644
index a84558085d..0000000000
--- a/src/swing/scala/swing/event/ContentModified.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package scala.swing.event
-
-case class ContentModified(override val source: Component) extends ComponentEvent(source)
diff --git a/src/swing/scala/swing/event/MouseEvent.scala b/src/swing/scala/swing/event/MouseEvent.scala
index 20a520c3a6..46009697f7 100644
--- a/src/swing/scala/swing/event/MouseEvent.scala
+++ b/src/swing/scala/swing/event/MouseEvent.scala
@@ -1,6 +1,6 @@
package scala.swing.event
-import geometry._
+import java.awt.Point
class MouseEvent(source: Component, point: Point, modifiers: Int) extends ComponentEvent(source)
diff --git a/src/swing/scala/swing/event/SelectionEvent.scala b/src/swing/scala/swing/event/SelectionEvent.scala
index 5fea0a6f57..d9d6d6d21f 100644
--- a/src/swing/scala/swing/event/SelectionEvent.scala
+++ b/src/swing/scala/swing/event/SelectionEvent.scala
@@ -1,5 +1,9 @@
package scala.swing.event
-trait SelectionEvent {
+trait SelectionEvent extends UIEvent
+
+trait ListSelectionEvent extends SelectionEvent {
def range: Range
}
+
+case class SelectionChanged(override val source: Component) extends UIEvent(source) with SelectionEvent \ No newline at end of file
diff --git a/src/swing/scala/swing/event/TableEvent.scala b/src/swing/scala/swing/event/TableEvent.scala
index 4a556fed20..bf917dd239 100644
--- a/src/swing/scala/swing/event/TableEvent.scala
+++ b/src/swing/scala/swing/event/TableEvent.scala
@@ -2,9 +2,11 @@ package scala.swing.event
class TableEvent(override val source: Table) extends ComponentEvent(source)
-case class TableChanged(override val source: Table, firstRow: Int, lastRow: Int, column: Int) extends TableEvent(source)
+case class TableChanged(override val source: Table, firstRow: Int, lastRow: Int, column: Int)
+ extends TableEvent(source)
case class TableResized(override val source: Table) extends TableEvent(source)
-//case class TextModified(override val source: TextComponent) extends ContentModified(source)
-case class ColumnsSelected(override val source: Table, live: Boolean, range: Range) extends TableEvent(source) with LiveEvent with SelectionEvent
-case class RowsSelected(override val source: Table, live: Boolean, range: Range) extends TableEvent(source) with LiveEvent with SelectionEvent \ No newline at end of file
+case class ColumnsSelected(override val source: Table, range: Range, live: Boolean)
+ extends TableEvent(source) with LiveEvent with ListSelectionEvent
+case class RowsSelected(override val source: Table, range: Range, live: Boolean)
+ extends TableEvent(source) with LiveEvent with ListSelectionEvent \ No newline at end of file
diff --git a/src/swing/scala/swing/event/TextModified.scala b/src/swing/scala/swing/event/TextModified.scala
deleted file mode 100644
index b40bcc5a0e..0000000000
--- a/src/swing/scala/swing/event/TextModified.scala
+++ /dev/null
@@ -1,3 +0,0 @@
-package scala.swing.event
-
-//case class TextModified(override val source: TextComponent) extends ContentModified(source)
diff --git a/src/swing/scala/swing/event/ValueChanged.scala b/src/swing/scala/swing/event/ValueChanged.scala
new file mode 100644
index 0000000000..7070ea2d52
--- /dev/null
+++ b/src/swing/scala/swing/event/ValueChanged.scala
@@ -0,0 +1,3 @@
+package scala.swing.event
+
+case class ValueChanged(override val source: Component, live: Boolean) extends ComponentEvent(source) with LiveEvent
diff --git a/src/swing/scala/swing/geometry/Dimension.scala b/src/swing/scala/swing/geometry/Dimension.scala
deleted file mode 100644
index abe48f8c0a..0000000000
--- a/src/swing/scala/swing/geometry/Dimension.scala
+++ /dev/null
@@ -1,17 +0,0 @@
-package scala.swing.geometry
-
-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/geometry/Point.scala b/src/swing/scala/swing/geometry/Point.scala
deleted file mode 100644
index 352afb5985..0000000000
--- a/src/swing/scala/swing/geometry/Point.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package scala.swing.geometry
-
-object Point {
- def apply(p: java.awt.Point) = new Point(p.getX, p.getY)
-}
-
-class Point(x: Double, y: Double) extends Pair(x,y)
diff --git a/src/swing/scala/swing/geometry/Rectangle.scala b/src/swing/scala/swing/geometry/Rectangle.scala
deleted file mode 100644
index 707c99a3a1..0000000000
--- a/src/swing/scala/swing/geometry/Rectangle.scala
+++ /dev/null
@@ -1,19 +0,0 @@
-package scala.swing.geometry
-
-object Rectangle {
- def apply(x: Int, y: Int, w: Int, h: Int) = new Rectangle {
- lazy val peer: java.awt.Rectangle = new java.awt.Rectangle(x, y, w, h)
- }
-
- def wrap(rect: java.awt.Rectangle) = new Rectangle {
- def peer: java.awt.Rectangle = rect
- }
-}
-
-abstract class Rectangle {
- def peer: java.awt.Rectangle
- def width = peer.getWidth
- def height = peer.getHeight
- def x = peer.x
- def y = peer.y
-}
diff --git a/src/swing/scala/swing/model/Matrix.scala b/src/swing/scala/swing/model/Matrix.scala
index a578452fd2..d028b6826e 100644
--- a/src/swing/scala/swing/model/Matrix.scala
+++ b/src/swing/scala/swing/model/Matrix.scala
@@ -1,6 +1,6 @@
package scala.swing.model
-trait Matrix[A] extends Function2[Int, Int, A] {
+/*trait Matrix[A] extends Function2[Int, Int, A] {
val width: Int
val height: Int
@@ -105,4 +105,4 @@ object Matrix {
result
}
-}
+}*/
diff --git a/src/swing/scala/swing/test/CelsiusConverter.scala b/src/swing/scala/swing/test/CelsiusConverter.scala
index 9cd6092f31..3578419698 100644
--- a/src/swing/scala/swing/test/CelsiusConverter.scala
+++ b/src/swing/scala/swing/test/CelsiusConverter.scala
@@ -8,30 +8,30 @@ import event._
object CelsiusConverter extends SimpleGUIApplication {
def top = new MainFrame {
title = "Convert Celsius to Fahrenheit"
- defaultButton = convertButton
+ defaultButton = Some(convertButton)
object tempCelsius extends TextField
object celsiusLabel extends Label {
text = "Celsius"
- border = EmptyBorder(5, 5, 5, 5)
+ border = Border.Empty(5, 5, 5, 5)
}
object convertButton extends PushButton {
- icon = new javax.swing.ImageIcon("c:\\workspace\\gui\\images\\convert.gif")
- border = EmptyBorder(5, 5, 5, 5)
+ text = "Convert"//new javax.swing.ImageIcon("c:\\workspace\\gui\\images\\convert.gif")
+ //border = Border.Empty(5, 5, 5, 5)
}
object fahrenheitLabel extends Label {
text = "Fahrenheit "
- border = EmptyBorder(5, 5, 5, 5)
+ border = Border.Empty(5, 5, 5, 5)
listenTo(convertButton, tempCelsius)
reactions += {
- case ButtonClicked(_) | ContentModified(_) =>
- val c = Integer.parseInt(tempCelsius.contents)
+ case ButtonClicked(_) | ValueChanged(_,false) =>
+ val c = Integer.parseInt(tempCelsius.text)
val f = c * 9 / 5 + 32
text = "<html><font color = red>"+f+"</font> Fahrenheit</html>"
}
}
- content = new GridPanel(2,2) {
+ contents = new GridPanel(2,2) {
contents.append(tempCelsius, celsiusLabel, convertButton, fahrenheitLabel)
- border = EmptyBorder(10, 10, 10, 10)
+ border = Border.Empty(10, 10, 10, 10)
}
}
}
diff --git a/src/swing/scala/swing/test/CelsiusConverter2.scala b/src/swing/scala/swing/test/CelsiusConverter2.scala
index 5b8af8f5c0..728c63c8fa 100644
--- a/src/swing/scala/swing/test/CelsiusConverter2.scala
+++ b/src/swing/scala/swing/test/CelsiusConverter2.scala
@@ -4,25 +4,27 @@ import swing._
import event._
object CelsiusConverter2 extends SimpleGUIApplication {
- def top = new MainFrame {
- title = "Convert Celsius / Fahrenheit"
- object Celsius extends TextField { columns = 5 }
+ val ui = new FlowPanel {
+ object Celsius extends TextField { columns = 5 }
object Fahrenheit extends TextField { columns = 5 }
- content = new FlowPanel {
- contents.append(Celsius, new Label(" Celsius = "), Fahrenheit, new Label(" Fahrenheit"))
- border = EmptyBorder(15, 10, 10, 10)
- }
- listenTo(Fahrenheit.contentModified, Celsius.contentModified)
+ contents.append(Celsius, new Label(" Celsius = "), Fahrenheit, new Label(" Fahrenheit"))
+ border = Border.Empty(15, 10, 10, 10)
+
+ listenTo(Fahrenheit, Celsius)
reactions += {
- case ContentModified(Fahrenheit) =>
- val f = Integer.parseInt(Fahrenheit.contents)
+ case ValueChanged(Fahrenheit, false) =>
+ val f = Integer.parseInt(Fahrenheit.text)
val c = (f - 32) * 5 / 9
- Celsius.contents = c.toString
- case ContentModified(Celsius) =>
- val c = Integer.parseInt(Celsius.contents)
+ Celsius.text = c.toString
+ case ValueChanged(Celsius, false) =>
+ val c = Integer.parseInt(Celsius.text)
val f = c * 9 / 5 + 32
- Fahrenheit.contents = f.toString
+ Fahrenheit.text = f.toString
}
}
+ def top = new MainFrame {
+ title = "Convert Celsius / Fahrenheit"
+ contents = ui
+ }
}
diff --git a/src/swing/scala/swing/test/GridBagDemo.scala b/src/swing/scala/swing/test/GridBagDemo.scala
index 2131d0c82e..b2092c934d 100644
--- a/src/swing/scala/swing/test/GridBagDemo.scala
+++ b/src/swing/scala/swing/test/GridBagDemo.scala
@@ -6,57 +6,59 @@ import GridBagPanel._
import java.awt.Insets
object GridBagDemo extends SimpleGUIApplication {
- def top = new MainFrame {
- title = "GridBag Demo"
- content = new GridBagPanel {
- val c = new Constraints
- val shouldFill = true
- if (shouldFill) {
- c.fill = Fill.Horizontal
- }
+ val ui = new GridBagPanel {
+ val c = new Constraints
+ val shouldFill = true
+ if (shouldFill) {
+ c.fill = Fill.Horizontal
+ }
- val button1 = new PushButton("Button 1")
+ val button1 = new PushButton("Button 1")
- c.weightx = 0.5
+ c.weightx = 0.5
- c.fill = Fill.Horizontal
- c.gridx = 0;
- c.gridy = 0;
- layout(button1) = c
+ c.fill = Fill.Horizontal
+ c.gridx = 0;
+ c.gridy = 0;
+ layout(button1) = c
- val button2 = new PushButton("Button 2")
- c.fill = Fill.Horizontal
- c.weightx = 0.5;
- c.gridx = 1;
- c.gridy = 0;
- layout(button2) = c
+ val button2 = new PushButton("Button 2")
+ c.fill = Fill.Horizontal
+ c.weightx = 0.5;
+ c.gridx = 1;
+ c.gridy = 0;
+ layout(button2) = c
- val button3 = new PushButton("Button 3")
- c.fill = Fill.Horizontal
- c.weightx = 0.5;
- c.gridx = 2;
- c.gridy = 0;
- layout(button3) = c
+ val button3 = new PushButton("Button 3")
+ c.fill = Fill.Horizontal
+ c.weightx = 0.5;
+ c.gridx = 2;
+ c.gridy = 0;
+ layout(button3) = c
- val button4 = new PushButton("Long-Named Button 4")
- c.fill = Fill.Horizontal
- c.ipady = 40; //make this component tall
- c.weightx = 0.0;
- c.gridwidth = 3;
- c.gridx = 0;
- c.gridy = 1;
- layout(button4) = c
-
- val button5 = new PushButton("5")
- c.fill = Fill.Horizontal
- c.ipady = 0; //reset to default
- c.weighty = 1.0; //request any extra vertical space
- c.anchor = Anchor.PageEnd
- c.insets = new Insets(10,0,0,0); //top padding
- c.gridx = 1; //aligned with button 2
- c.gridwidth = 2; //2 columns wide
- c.gridy = 2; //third row
- layout(button5) = c
- }
+ val button4 = new PushButton("Long-Named Button 4")
+ c.fill = Fill.Horizontal
+ c.ipady = 40; //make this component tall
+ c.weightx = 0.0;
+ c.gridwidth = 3;
+ c.gridx = 0;
+ c.gridy = 1;
+ layout(button4) = c
+
+ val button5 = new PushButton("5")
+ c.fill = Fill.Horizontal
+ c.ipady = 0; //reset to default
+ c.weighty = 1.0; //request any extra vertical space
+ c.anchor = Anchor.PageEnd
+ c.insets = new Insets(10,0,0,0); //top padding
+ c.gridx = 1; //aligned with button 2
+ c.gridwidth = 2; //2 columns wide
+ c.gridy = 2; //third row
+ layout(button5) = c
+ }
+
+ def top = new MainFrame {
+ title = "GridBag Demo"
+ contents = ui
}
} \ No newline at end of file
diff --git a/src/swing/scala/swing/test/HelloWorld.scala b/src/swing/scala/swing/test/HelloWorld.scala
index 366252c3c9..e4d70cd84b 100644
--- a/src/swing/scala/swing/test/HelloWorld.scala
+++ b/src/swing/scala/swing/test/HelloWorld.scala
@@ -4,9 +4,11 @@ import swing._
object HelloWorld extends GUIApplication {
def main(args: Array[String]) = run {
- new Frame {
+ val frame = new Frame {
title = "HelloWorldSwing"
- content = new Label("Hello World")
- }.pack.show
+ contents = new Label("Hello World")
+ }
+ frame.pack()
+ frame.visible = true
}
}
diff --git a/src/swing/scala/swing/test/MenuDemo.scala b/src/swing/scala/swing/test/MenuDemo.scala
deleted file mode 100644
index 990b4121ca..0000000000
--- a/src/swing/scala/swing/test/MenuDemo.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package scala.swing.test
-
-import swing._
-import swing.event._
-
-object MenuDemo extends SimpleGUIApplication {
- def top = new MainFrame {
- title = "Menu Demo"
- menuBar = new MenuBar
-
- import Views._
-
- val menu = new Menu("A Menu")
- menu.contents += new MenuItem("An item")
- menu.contents += new Action("An action item") {
- def apply() { println("Action '"+ title +"' invoked") }
- }
- menu.contents += new Separator
- menu.contents += new CheckMenuItem("Check me")
- menu.contents += new CheckMenuItem("Me too!")
- menu.contents += new Separator
- val a = new RadioMenuItem("a")
- val b = new RadioMenuItem("b")
- val c = new RadioMenuItem("b")
- val mutex = new ButtonMutex(a,b,c)
- menu.contents ++= mutex.buttons
-
- menuBar.contents += menu
- menuBar.contents += new Menu("Empty Menu")
- }
-}
-
diff --git a/src/swing/scala/swing/test/SimpleApplet.scala b/src/swing/scala/swing/test/SimpleApplet.scala
index f072a617d6..510c63f3e3 100644
--- a/src/swing/scala/swing/test/SimpleApplet.scala
+++ b/src/swing/scala/swing/test/SimpleApplet.scala
@@ -6,14 +6,14 @@ class SimpleApplet extends Applet {
object ui extends UI with Reactor {
def init() = {
val button = new PushButton("Press here!")
- val text = new TextField("Java Version: " +
+ val text = new TextArea("Java Version: " +
System.getProperty("java.version")+"\n")
listenTo(button)
reactions += {
- case ButtonClicked(_) => text.contents += "Button Pressed!\n"
+ case ButtonClicked(_) => text.text += "Button Pressed!\n"
case _ =>
}
- content = new BoxPanel(Vertical) { contents.append(button, text) }
+ contents = new BoxPanel(Orientation.Vertical) { contents.append(button, text) }
}
}
} \ No newline at end of file
diff --git a/src/swing/scala/swing/test/SwingApp.scala b/src/swing/scala/swing/test/SwingApp.scala
index 5560c74f59..d09434b865 100644
--- a/src/swing/scala/swing/test/SwingApp.scala
+++ b/src/swing/scala/swing/test/SwingApp.scala
@@ -20,9 +20,9 @@ object SwingApp extends SimpleGUIApplication {
object button extends PushButton {
text = "I am a button"
}
- content = new GridPanel(GridPanel.Adapt,1) {
+ contents = new GridPanel(GridPanel.Adapt,1) {
contents.append(label, button)
- border = EmptyBorder(5, 5, 5, 5)
+ border = Border.Empty(5, 5, 5, 5)
}
}
}
diff --git a/src/swing/scala/swing/test/TableSelection.scala b/src/swing/scala/swing/test/TableSelection.scala
index 2e454144dd..9a4843d66c 100644
--- a/src/swing/scala/swing/test/TableSelection.scala
+++ b/src/swing/scala/swing/test/TableSelection.scala
@@ -1,46 +1,48 @@
package scala.swing.test
+import java.awt.Dimension
import swing._
import swing.event._
import swing.geometry._
object TableSelection extends SimpleGUIApplication {
- def top = new MainFrame {
- title = "Table Selection"
-
- val model = Array[Array[AnyRef]](Array[AnyRef]("Mary", "Campione", "Snowboarding", new java.lang.Integer(5), new java.lang.Boolean(false)),
+ val model = Array[Array[AnyRef]](Array[AnyRef]("Mary", "Campione", "Snowboarding", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Alison", "Huml", "Rowing", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Kathy", "Walrath", "Knitting", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Sharon", "Zakhour", "Speed reading", new java.lang.Integer(5), new java.lang.Boolean(false)),
Array[AnyRef]("Philip", "Milne", "Pool", new java.lang.Integer(5), new java.lang.Boolean(false)))
- content = new BoxPanel(Vertical) {
+ val ui = new BoxPanel(Orientation.Vertical) {
val table = new Table(model, Array[AnyRef]("First Name", "Last Name", "Sport", "# of Years", "Vegetarian"))
listenTo()
- table.preferredViewportSize = Dimension(500, 70)
- table.fillsViewportHeight = true
+ table.preferredViewportSize = new Dimension(500, 70)
+ //1.6:table.fillsViewportHeight = true
listenTo(table.selection)
contents += new ScrollPane(table)
contents += new Label("Selection Mode")
- val intervalMutex = new ButtonMutex
- def radio(mutex: ButtonMutex, text: String): RadioButton = {
+
+ def radio(mutex: ButtonGroup, text: String): RadioButton = {
val b = new RadioButton(text)
listenTo(b)
mutex.buttons += b
contents += b
b
}
+
+ val intervalMutex = new ButtonGroup
val multiInterval = radio(intervalMutex, "Multiple Interval Selection")
val elementInterval = radio(intervalMutex, "Single Selection")
val singleInterval = radio(intervalMutex, "Single Interval Selection")
+ intervalMutex.select(multiInterval)
contents += new Label("Selection Options")
- val elemMutex = new ButtonMutex
+ val elemMutex = new ButtonGroup
val rowSelection = radio(elemMutex, "Row Selection")
val columnSelection = radio(elemMutex, "Column Selection")
val cellSelection = radio(elemMutex, "Cell Selection")
+ elemMutex.select(rowSelection)
val output = new TextArea(5, 40) { editable = false }
contents += new ScrollPane(output)
@@ -67,15 +69,15 @@ object TableSelection extends SimpleGUIApplication {
case ButtonClicked(`multiInterval`) =>
table.selection.intervalMode = Table.IntervalMode.MultiInterval
if (cellSelection.selected) {
- elemMutex.deselectAll()
+ elemMutex.select(rowSelection)
table.selection.elementMode = Table.ElementMode.None
}
cellSelection.enabled = false
case ButtonClicked(`elementInterval`) =>
- table.selection.intervalMode = Table.IntervalMode.SingleInterval
+ table.selection.intervalMode = Table.IntervalMode.Single
cellSelection.enabled = true
case ButtonClicked(`singleInterval`) =>
- table.selection.intervalMode = Table.IntervalMode.Single
+ table.selection.intervalMode = Table.IntervalMode.SingleInterval
cellSelection.enabled = true
case ButtonClicked(`rowSelection`) =>
if (rowSelection.selected)
@@ -86,14 +88,18 @@ object TableSelection extends SimpleGUIApplication {
case ButtonClicked(`cellSelection`) =>
if (cellSelection.selected)
table.selection.elementMode = Table.ElementMode.Cell
- case RowsSelected(table, false, range) =>
+ case RowsSelected(_, range, false) =>
output.append("Rows selected, changes: " + range + "\n")
outputSelection()
- case ColumnsSelected(table, false, range) =>
+ case ColumnsSelected(_, range, false) =>
output.append("Columns selected, changes " + range + "\n")
outputSelection()
}
}
+
+ def top = new MainFrame {
+ title = "Table Selection"
+ contents = ui
}
}
diff --git a/src/swing/scala/swing/test/UIDemo.scala b/src/swing/scala/swing/test/UIDemo.scala
new file mode 100644
index 0000000000..00681bd8da
--- /dev/null
+++ b/src/swing/scala/swing/test/UIDemo.scala
@@ -0,0 +1,84 @@
+package scala.swing.test
+
+import swing._
+import event._
+
+object UIDemo extends SimpleGUIApplication {
+ def top = new MainFrame {
+ title = "UIElement Test"
+
+ menuBar = new MenuBar
+
+ import Views._
+ import Border._
+
+ val menu = new Menu("A Menu")
+ menu.contents += new MenuItem("An item")
+ menu.contents += new MenuItem(Action("An action item") {
+ println("Action '"+ title +"' invoked")
+ })
+ menu.contents += new Separator
+ menu.contents += new CheckMenuItem("Check me")
+ menu.contents += new CheckMenuItem("Me too!")
+ menu.contents += new Separator
+ val a = new RadioMenuItem("a")
+ val b = new RadioMenuItem("b")
+ val c = new RadioMenuItem("c")
+ val mutex = new ButtonGroup(a,b,c)
+ menu.contents ++= mutex.buttons
+
+ menuBar.contents += menu
+ menuBar.contents += new Menu("Empty Menu")
+
+ contents = new BoxPanel(Orientation.Vertical) {
+ val tabs = new TabbedPane {
+ import TabbedPane._
+ val buttons = new FlowPanel {
+ border = Empty(5,5,5,5)
+ contents += new BoxPanel(Orientation.Vertical) {
+ border = Compound(Titled(Etched, "Radio Buttons"), Empty(5,5,5,10))
+ val a = new RadioButton("Green Vegetables")
+ val b = new RadioButton("Red Meat")
+ val c = new RadioButton("White Tofu")
+ val mutex = new ButtonGroup(a,b,c)
+ contents ++= mutex.buttons
+ }
+ contents += new BoxPanel(Orientation.Vertical) {
+ border = Compound(Titled(Etched, "Check Boxes"), Empty(5,5,5,10))
+ val a = new CheckBox("Paint Labels")
+ val b = new CheckBox("Paint Ticks")
+ val c = new CheckBox("Snap To Ticks")
+ contents.append(a,b,c)
+ listenTo(a,b,c)
+ reactions += {
+ case ButtonClicked(`a`) => slider.paintLabels = a.selected
+ case ButtonClicked(`b`) => slider.paintTicks = b.selected
+ case ButtonClicked(`c`) => slider.snapToTicks = c.selected
+ }
+ }
+ }
+ pages += new Page("Buttons", buttons)
+ pages += new Page("GridBag", GridBagDemo.ui)
+ pages += new Page("Converter", CelsiusConverter2.ui)
+ pages += new Page("Tables", TableSelection.ui)
+ }
+ contents += tabs
+
+ object slider extends Slider {
+ min = 0
+ value = tabs.selection.index
+ max = tabs.pages.size-1
+ majorTickSpacing = 1
+ }
+ contents += slider
+
+ listenTo(slider)
+ listenTo(tabs.selection)
+ reactions += {
+ case ValueChanged(`slider`, false) => tabs.selection.index = slider.value
+ case SelectionChanged(`tabs`) => slider.value = tabs.selection.index
+ }
+ }
+ }
+}
+
diff --git a/src/swing/scala/swing/test/UIElementTest.scala b/src/swing/scala/swing/test/UIElementTest.scala
deleted file mode 100644
index 5cbe617d8c..0000000000
--- a/src/swing/scala/swing/test/UIElementTest.scala
+++ /dev/null
@@ -1,13 +0,0 @@
-package scala.swing.test
-
-import swing._
-import swing.event._
-import java.awt.Color
-
-object UIElementTest extends SimpleGUIApplication {
- def top = new MainFrame {
- title = "UIElement Test"
- background = Color.RED
- }
-}
-