From 045e04db5a2b58822e51cc59cd60562ebb43d33c Mon Sep 17 00:00:00 2001 From: Ingo Maier Date: Tue, 2 Jun 2009 05:40:15 +0000 Subject: Fun with subclipse. --- src/swing/scala/swing/ButtonGroup.scala | 2 +- src/swing/scala/swing/Container.scala | 13 ++--- src/swing/scala/swing/LayoutContainer.scala | 2 +- src/swing/scala/swing/ListView.scala | 2 +- src/swing/scala/swing/Slider.scala | 3 +- src/swing/scala/swing/TabbedPane.scala | 4 +- src/swing/scala/swing/test/LinePainting.scala | 74 +++++++++++++++------------ 7 files changed, 55 insertions(+), 45 deletions(-) (limited to 'src/swing') diff --git a/src/swing/scala/swing/ButtonGroup.scala b/src/swing/scala/swing/ButtonGroup.scala index 0f518d4ddc..3756a91364 100644 --- a/src/swing/scala/swing/ButtonGroup.scala +++ b/src/swing/scala/swing/ButtonGroup.scala @@ -21,7 +21,7 @@ class ButtonGroup(initialButtons: AbstractButton*) { override def size = peer.getButtonCount def iterator: Iterator[AbstractButton] = new Iterator[AbstractButton] { val enum = peer.getElements - def next = Component.wrapperFor[AbstractButton](enum.nextElement) + def next = UIElement.cachedWrapper[AbstractButton](enum.nextElement) def hasNext = enum.hasMoreElements } } diff --git a/src/swing/scala/swing/Container.scala b/src/swing/scala/swing/Container.scala index 0bea4d8c46..6434d73ae1 100644 --- a/src/swing/scala/swing/Container.scala +++ b/src/swing/scala/swing/Container.scala @@ -8,32 +8,33 @@ object Container { * Utility trait for wrapping containers. Provides an immutable * implementation of the contents member. */ - trait Wrapper extends Component with Container { + trait Wrapper extends Container with Publisher { + override def peer: javax.swing.JComponent + protected val _contents = new Content def contents: Seq[Component] = _contents protected class Content extends BufferWrapper[Component] { - def wrap(c: java.awt.Component): Component = Component.wrapperFor(c.asInstanceOf[javax.swing.JComponent]) override def clear { peer.removeAll() } override def remove(n: Int): Component = { val c = peer.getComponent(n) peer.remove(n) - wrap(c) + UIElement.cachedWrapper(c) } protected def insertAt(n: Int, c: Component) { peer.add(c.peer, n) } def +=(c: Component): this.type = { peer.add(c.peer) ; this } def length = peer.getComponentCount - def apply(n: Int) = wrap(peer.getComponent(n)) + def apply(n: Int) = UIElement.cachedWrapper(peer.getComponent(n)) } 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]))) + UIElement.cachedWrapper(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]))) + UIElement.cachedWrapper(e.getChild.asInstanceOf[javax.swing.JComponent]))) } }) } diff --git a/src/swing/scala/swing/LayoutContainer.scala b/src/swing/scala/swing/LayoutContainer.scala index 1526c7ed7e..7594edd8e1 100644 --- a/src/swing/scala/swing/LayoutContainer.scala +++ b/src/swing/scala/swing/LayoutContainer.scala @@ -56,7 +56,7 @@ trait LayoutContainer extends Container.Wrapper { override def size = peer.getComponentCount def iterator: Iterator[(Component, Constraints)] = Iterator.range(0,size).map { c => - val comp = Component.wrapperFor[Component](peer.getComponent(c).asInstanceOf[JComponent]) + val comp = UIElement.cachedWrapper[Component](peer.getComponent(c).asInstanceOf[JComponent]) (comp, constraintsFor(comp)) } } diff --git a/src/swing/scala/swing/ListView.scala b/src/swing/scala/swing/ListView.scala index ec61bb6908..1948fc71d7 100644 --- a/src/swing/scala/swing/ListView.scala +++ b/src/swing/scala/swing/ListView.scala @@ -117,7 +117,7 @@ object ListView { override lazy val peer: ListCellRenderer = new DefaultListCellRenderer def componentFor(list: ListView[_], isSelected: Boolean, hasFocus: Boolean, a: Any, index: Int): Component = { val c = peer.getListCellRendererComponent(list.peer, a, index, isSelected, hasFocus).asInstanceOf[JComponent] - val w = Component.wrapperFor[Component](c) + val w = UIElement.cachedWrapper[Component](c) if (w eq null) Component.wrap(c) else w } } diff --git a/src/swing/scala/swing/Slider.scala b/src/swing/scala/swing/Slider.scala index 0819aff6c1..2b6ebf9230 100644 --- a/src/swing/scala/swing/Slider.scala +++ b/src/swing/scala/swing/Slider.scala @@ -12,7 +12,8 @@ import event._ * @see javax.swing.JSlider */ class Slider extends Component with Orientable with Publisher { - override lazy val peer: javax.swing.JSlider = new javax.swing.JSlider + override lazy val peer: javax.swing.JSlider with OrientedMixin = + new javax.swing.JSlider with OrientedMixin def min: Int = peer.getMinimum def min_=(v: Int) { peer.setMinimum(v) } diff --git a/src/swing/scala/swing/TabbedPane.scala b/src/swing/scala/swing/TabbedPane.scala index dd8ac36203..ad2cbb81a4 100644 --- a/src/swing/scala/swing/TabbedPane.scala +++ b/src/swing/scala/swing/TabbedPane.scala @@ -29,7 +29,7 @@ object TabbedPane { 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: Component = _content//UIElement.cachedWrapper(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) @@ -85,7 +85,7 @@ class TabbedPane extends Component with Publisher { def +=(t: Page): this.type = { t.parent = TabbedPane.this; peer.addTab(t.title, null, t.content.peer, t.tip); this } def length = peer.getTabCount def apply(n: Int) = new Page(TabbedPane.this, peer.getTitleAt(n), - Component.wrapperFor(peer.getComponentAt(n).asInstanceOf[javax.swing.JComponent]), + UIElement.cachedWrapper(peer.getComponentAt(n).asInstanceOf[javax.swing.JComponent]), peer.getToolTipTextAt(n)) } diff --git a/src/swing/scala/swing/test/LinePainting.scala b/src/swing/scala/swing/test/LinePainting.scala index aba0540746..946d267ece 100644 --- a/src/swing/scala/swing/test/LinePainting.scala +++ b/src/swing/scala/swing/test/LinePainting.scala @@ -1,45 +1,53 @@ package scala.swing.test - -import java.awt.{Color, Dimension, Graphics, Graphics2D, Point, geom} - import scala.swing.Swing._ import scala.swing.{MainFrame, Panel, SimpleGUIApplication} -import scala.swing.event.{MousePressed, MouseDragged, MouseReleased} +import scala.swing.event._ +import java.awt.{Color, Dimension, Graphics, Graphics2D, Point, geom} /** * Dragging the mouse draws a simple graph * - * @author Frank Teubler + * @author Frank Teubler, Ingo Maier */ object LinePainting extends SimpleGUIApplication { - def top = new MainFrame { - title = "SimpleDraw" - contents = new Panel { - background = Color.white - preferredSize = new Dimension(200, 200) - - listenTo(Mouse.clicks, Mouse.moves) - - reactions += { - case e: MousePressed => moveTo(e.point) - case e: MouseDragged => lineTo(e.point) - case e: MouseReleased => lineTo(e.point) - } - - /* records the dragging */ - val path = new geom.GeneralPath - - def lineTo(p: Point) { path.lineTo(p.x, p.y); repaint() } - def moveTo(p: Point) { path.moveTo(p.x, p.y); repaint() } - - override def paintComponent(g: Graphics) = { - super.paintComponent(g) - /* we need Graphics2D */ - val g2 = g.asInstanceOf[Graphics2D] - g2.draw(path) - } + lazy val ui = new Panel { + background = Color.white + preferredSize = (200,200) + + focusable = true + listenTo(mouse.clicks, mouse.moves, keys) + + + reactions += { + case e: MousePressed => + moveTo(e.point) + requestFocusInWindow() + case e: MouseDragged => lineTo(e.point) + case e: MouseReleased => lineTo(e.point) + case KeyTyped(_,'c',_,_) => + path = new geom.GeneralPath + repaint() + case _: FocusLost => repaint() } - } -} + /* records the dragging */ + var path = new geom.GeneralPath + def lineTo(p: Point) { path.lineTo(p.x, p.y); repaint() } + def moveTo(p: Point) { path.moveTo(p.x, p.y); repaint() } + + override def paintComponent(g: Graphics2D) = { + super.paintComponent(g) + g.setColor(new Color(100,100,100)) + g.drawString("Press left mouse button and drag to paint." + + (if(hasFocus) " Press 'c' to clear." else ""), 10, size.height-10) + g.setColor(Color.black) + g.draw(path) + } + } + + def top = new MainFrame { + title = "Simple Line Painting Demo" + contents = ui + } +} \ No newline at end of file -- cgit v1.2.3