diff options
author | Paul Phillips <paulp@improving.org> | 2010-03-21 00:21:54 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-03-21 00:21:54 +0000 |
commit | 6353b3711f63218e684f1498697eaf71e0c4bb53 (patch) | |
tree | b2608c5cfc41ed3c0445822a3b27a21364bae241 /src | |
parent | a4f00eaf4da004ee2fd8a1ac1135b465533415d4 (diff) | |
download | scala-6353b3711f63218e684f1498697eaf71e0c4bb53.tar.gz scala-6353b3711f63218e684f1498697eaf71e0c4bb53.tar.bz2 scala-6353b3711f63218e684f1498697eaf71e0c4bb53.zip |
Some minor changes in scala.swing.* which I was...
Some minor changes in scala.swing.* which I was glancing through because
of #3196. I noticed the Font object was in package scala instead of
scala.swing, which looks sure to be a mistake (an easy one to make, and
one others have made as well, because we're not entirely used to package
objects.) I didn't want to accidentally ship a scala.Font so I moved it
into swing. Review by imaier.
Diffstat (limited to 'src')
-rw-r--r-- | src/swing/scala/swing/Action.scala | 4 | ||||
-rw-r--r-- | src/swing/scala/swing/BufferWrapper.scala | 1 | ||||
-rw-r--r-- | src/swing/scala/swing/ComboBox.scala | 5 | ||||
-rw-r--r-- | src/swing/scala/swing/Font.scala | 70 | ||||
-rw-r--r-- | src/swing/scala/swing/LayoutContainer.scala | 2 | ||||
-rw-r--r-- | src/swing/scala/swing/RichWindow.scala | 7 | ||||
-rw-r--r-- | src/swing/scala/swing/RootPanel.scala | 2 | ||||
-rw-r--r-- | src/swing/scala/swing/ScrollPane.scala | 12 | ||||
-rw-r--r-- | src/swing/scala/swing/Swing.scala | 3 | ||||
-rw-r--r-- | src/swing/scala/swing/Table.scala | 6 | ||||
-rw-r--r-- | src/swing/scala/swing/Window.scala | 4 | ||||
-rw-r--r-- | src/swing/scala/swing/package.scala | 78 |
12 files changed, 95 insertions, 99 deletions
diff --git a/src/swing/scala/swing/Action.scala b/src/swing/scala/swing/Action.scala index 7e0bd9286d..c9a23e1e24 100644 --- a/src/swing/scala/swing/Action.scala +++ b/src/swing/scala/swing/Action.scala @@ -128,7 +128,7 @@ abstract class Action(title0: String) { def accelerator: Option[KeyStroke] = toOption(peer.getValue(javax.swing.Action.ACCELERATOR_KEY)) def accelerator_=(k: Option[KeyStroke]) { - peer.putValue(javax.swing.Action.ACCELERATOR_KEY, toNull(k)) + peer.putValue(javax.swing.Action.ACCELERATOR_KEY, k orNull) } /** @@ -140,7 +140,7 @@ abstract class Action(title0: String) { /*/** * Only honored if not <code>None</code>. For various buttons. */ - 1.6: def selected: Option[Boolean] = toOption(peer.getValue(javax.swing.Action.SELECTED_KEY)) + 1.6: def selected: Option[Boolean] = Option(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)) diff --git a/src/swing/scala/swing/BufferWrapper.scala b/src/swing/scala/swing/BufferWrapper.scala index 480ac59950..eac53c5d77 100644 --- a/src/swing/scala/swing/BufferWrapper.scala +++ b/src/swing/scala/swing/BufferWrapper.scala @@ -12,7 +12,6 @@ package scala.swing import scala.collection.mutable.Buffer -import scala.collection.IndexedSeq /** * Default partial implementation for buffer adapters. diff --git a/src/swing/scala/swing/ComboBox.scala b/src/swing/scala/swing/ComboBox.scala index 21d33acd32..fabbcf2d35 100644 --- a/src/swing/scala/swing/ComboBox.scala +++ b/src/swing/scala/swing/ComboBox.scala @@ -15,7 +15,6 @@ import event._ import javax.swing.{JList, JComponent, JComboBox, JTextField, ComboBoxModel, AbstractListModel, ListCellRenderer} import java.awt.event.ActionListener - object ComboBox { /** * An editor for a combo box. Let's you edit the currently selected item. @@ -205,8 +204,8 @@ class ComboBox[A](items: Seq[A]) extends Component with Publisher { peer.setEditor(editor(this).comboBoxPeer) } - def prototypeDisplayValue: Option[A] = Swing.toOption(peer.getPrototypeDisplayValue) + def prototypeDisplayValue: Option[A] = toOption[A](peer.getPrototypeDisplayValue) def prototypeDisplayValue_=(v: Option[A]) { - peer.setPrototypeDisplayValue(Swing.toNull(v.map(_.asInstanceOf[AnyRef]))) + peer.setPrototypeDisplayValue(v map toAnyRef orNull) } } diff --git a/src/swing/scala/swing/Font.scala b/src/swing/scala/swing/Font.scala new file mode 100644 index 0000000000..73862e666d --- /dev/null +++ b/src/swing/scala/swing/Font.scala @@ -0,0 +1,70 @@ +package scala.swing + +object Font { + def apply(fontFormat: Int, fontFile: java.io.File) = java.awt.Font.createFont(fontFormat, fontFile) + def apply(fontFormat: Int, fontStream: java.io.InputStream) = java.awt.Font.createFont(fontFormat, fontStream) + def decode(str: String) = java.awt.Font.decode(str) + + /* TODO: finish implementation + /** + * See [java.awt.Font.getFont]. + */ + def get(attributes: Map[_ <: java.text.AttributedCharacterIterator.Attribute, _]) = + java.awt.Font.getFont(ImmutableMapWrapper(attributes)) + + import java.{util => ju} + private case class ImmutableMapWrapper[A, B](underlying : Map[A, B])(m : ClassManifest[A]) extends ju.AbstractMap[A, B] { + self => + override def size = underlying.size + + override def put(k : A, v : B) = + throw new UnsupportedOperationException("This is a wrapper that does not support mutation") + override def remove(k : AnyRef) = + throw new UnsupportedOperationException("This is a wrapper that does not support mutation") + + override def entrySet : ju.Set[ju.Map.Entry[A, B]] = new ju.AbstractSet[ju.Map.Entry[A, B]] { + def size = self.size + + def iterator = new ju.Iterator[ju.Map.Entry[A, B]] { + val ui = underlying.iterator + var prev : Option[A] = None + + def hasNext = ui.hasNext + + def next = { + val (k, v) = ui.next + prev = Some(k) + new ju.Map.Entry[A, B] { + def getKey = k + def getValue = v + def setValue(v1 : B) = self.put(k, v1) + override def equals(other : Any) = other match { + case e : ju.Map.Entry[_, _] => k == e.getKey && v == e.getValue + case _ => false + } + } + } + + def remove = prev match { + case Some(k) => val v = self.remove(k.asInstanceOf[AnyRef]) ; prev = None ; v + case _ => throw new IllegalStateException("next must be called at least once before remove") + } + } + } + } + */ + + /** + * See [java.awt.Font.getFont]. + */ + def get(nm: String) = java.awt.Font.getFont(nm) + /** + * See [java.awt.Font.getFont]. + */ + def get(nm: String, font: Font) = java.awt.Font.getFont(nm, font) + + def Insets(x: Int, y: Int, width: Int, height: Int) = new Insets(x, y, width, height) + def Rectangle(x: Int, y: Int, width: Int, height: Int) = new Insets(x, y, width, height) + def Point(x: Int, y: Int) = new Point(x, y) + def Dimension(x: Int, y: Int) = new Dimension(x, y) +}
\ No newline at end of file diff --git a/src/swing/scala/swing/LayoutContainer.scala b/src/swing/scala/swing/LayoutContainer.scala index 20fb3a7cd8..b58064ed07 100644 --- a/src/swing/scala/swing/LayoutContainer.scala +++ b/src/swing/scala/swing/LayoutContainer.scala @@ -64,7 +64,7 @@ trait LayoutContainer extends Container.Wrapper { add(c, l) this } - def get(c: Component) = Swing.toOption(constraintsFor(c)) + def get(c: Component) = Option(constraintsFor(c)) override def size = peer.getComponentCount def iterator: Iterator[(Component, Constraints)] = peer.getComponents.iterator.map { c => diff --git a/src/swing/scala/swing/RichWindow.scala b/src/swing/scala/swing/RichWindow.scala index 555988b87b..e6066cef7e 100644 --- a/src/swing/scala/swing/RichWindow.scala +++ b/src/swing/scala/swing/RichWindow.scala @@ -156,7 +156,7 @@ object Dialog { initial: Int): Result.Value = { val r = JOptionPane.showOptionDialog(nullPeer(parent), message, title, optionType.id, messageType.id, Swing.wrapIcon(icon), - entries.map(_.asInstanceOf[AnyRef]).toArray, entries(initial)) + entries map toAnyRef toArray, entries(initial)) Result(r) } @@ -168,11 +168,12 @@ object Dialog { entries: Seq[A] = Nil, initial: A): Option[A] = { val e = if (entries.isEmpty) null - else entries.map(_.asInstanceOf[AnyRef]).toArray + else entries map toAnyRef toArray val r = JOptionPane.showInputDialog(nullPeer(parent), message, title, messageType.id, Swing.wrapIcon(icon), e, initial) - Swing.toOption(r) + + toOption[A](r) } def showMessage(parent: Component = null, message: Any, diff --git a/src/swing/scala/swing/RootPanel.scala b/src/swing/scala/swing/RootPanel.scala index 1c06559d05..bb42824225 100644 --- a/src/swing/scala/swing/RootPanel.scala +++ b/src/swing/scala/swing/RootPanel.scala @@ -23,7 +23,7 @@ trait RootPanel extends Container { * At most one component. */ def contents: Seq[Component] = { - Swing.toOption[Any](peer.getContentPane.getComponent(0)).map { c => + Option[Any](peer.getContentPane.getComponent(0)).map { c => UIElement.cachedWrapper[Component](c.asInstanceOf[javax.swing.JComponent]) }.toList } diff --git a/src/swing/scala/swing/ScrollPane.scala b/src/swing/scala/swing/ScrollPane.scala index c92ffe8211..fc2e96e67a 100644 --- a/src/swing/scala/swing/ScrollPane.scala +++ b/src/swing/scala/swing/ScrollPane.scala @@ -63,17 +63,17 @@ class ScrollPane extends Component with Container { * want to let the row header be a list view with the same row height as * the viewport component. */ - def rowHeaderView: Option[Component] = Swing.toOption(peer.getRowHeader.getView).map(UIElement.cachedWrapper(_)) + def rowHeaderView: Option[Component] = Option(peer.getRowHeader.getView) map UIElement.cachedWrapper def rowHeaderView_=(c: Component) = peer.setRowHeaderView(c.peer) - def rowHeaderView_=(c: Option[Component]) = peer.setRowHeaderView(Swing.toNull(c.map(_.peer))) + def rowHeaderView_=(c: Option[Component]) = peer.setRowHeaderView(c map (_.peer) orNull) - def columnHeaderView: Option[Component] = Swing.toOption(peer.getColumnHeader.getView).map(UIElement.cachedWrapper(_)) + def columnHeaderView: Option[Component] = Option(peer.getColumnHeader.getView) map UIElement.cachedWrapper def columnHeaderView_=(c: Component) = peer.setColumnHeaderView(c.peer) - def columnHeaderView_=(c: Option[Component]) = peer.setColumnHeaderView(Swing.toNull(c.map(_.peer))) + def columnHeaderView_=(c: Option[Component]) = peer.setColumnHeaderView(c map (_.peer) orNull) - def viewportView: Option[Component] = Swing.toOption(peer.getViewport.getView).map(UIElement.cachedWrapper(_)) + def viewportView: Option[Component] = Option(peer.getViewport.getView) map UIElement.cachedWrapper def viewportView_=(c: Component) = peer.setViewportView(c.peer) - def viewportView_=(c: Option[Component]) = peer.setViewportView(Swing.toNull(c.map(_.peer))) + def viewportView_=(c: Option[Component]) = peer.setViewportView(c map (_.peer) orNull) def verticalScrollBarPolicy = BarPolicy.wrap(peer.getVerticalScrollBarPolicy) def verticalScrollBarPolicy_=(p: BarPolicy.Value) = peer.setVerticalScrollBarPolicy(p.verticalPeer) diff --git a/src/swing/scala/swing/Swing.scala b/src/swing/scala/swing/Swing.scala index 3ed2f8b950..3ca36a38a1 100644 --- a/src/swing/scala/swing/Swing.scala +++ b/src/swing/scala/swing/Swing.scala @@ -20,9 +20,6 @@ import javax.swing.{JComponent, Icon, BorderFactory, SwingUtilities} * Helpers for this package. */ 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]): A = if(a == None) null else a.get protected[swing] def toNoIcon(i: Icon): Icon = if(i == null) EmptyIcon else i protected[swing] def toNullIcon(i: Icon): Icon = if(i == EmptyIcon) null else i protected[swing] def nullPeer(c: Component) = if (c != null) c.peer else null diff --git a/src/swing/scala/swing/Table.scala b/src/swing/scala/swing/Table.scala index fb61a0bbbf..8030c5043a 100644 --- a/src/swing/scala/swing/Table.scala +++ b/src/swing/scala/swing/Table.scala @@ -15,7 +15,7 @@ import event._ import javax.swing._ import javax.swing.table._ import javax.swing.event._ -import scala.collection.mutable.{Set, IndexedSeq} +import scala.collection.mutable object Table { object AutoResizeMode extends Enumeration { @@ -173,7 +173,7 @@ class Table extends Component with Scrollable.Wrapper { object selection extends Publisher { // TODO: could be a sorted set - protected abstract class SelectionSet[A](a: =>Seq[A]) extends scala.collection.mutable.Set[A] { + protected abstract class SelectionSet[A](a: =>Seq[A]) extends mutable.Set[A] { def -=(n: A): this.type def +=(n: A): this.type def contains(n: A) = a.contains(n) @@ -197,7 +197,7 @@ class Table extends Component with Scrollable.Wrapper { def anchorIndex: Int = peer.getColumnModel.getSelectionModel.getAnchorSelectionIndex } - def cells: Set[(Int, Int)] = + def cells: mutable.Set[(Int, Int)] = new SelectionSet[(Int, Int)]((for(r <- selection.rows; c <- selection.columns) yield (r,c)).toSeq) { outer => def -=(n: (Int, Int)) = { peer.removeRowSelectionInterval(n._1,n._1) diff --git a/src/swing/scala/swing/Window.scala b/src/swing/scala/swing/Window.scala index 2fba3acd7a..f0a4927f01 100644 --- a/src/swing/scala/swing/Window.scala +++ b/src/swing/scala/swing/Window.scala @@ -39,12 +39,12 @@ abstract class Window extends UIElement with RootPanel with Publisher { outer => peer.pack() // pack also validates, which is generally required after an add } def defaultButton: Option[Button] = - Swing.toOption(peer.getRootPane.getDefaultButton).map(UIElement.cachedWrapper(_)) + toOption(peer.getRootPane.getDefaultButton) map UIElement.cachedWrapper def defaultButton_=(b: Button) { peer.getRootPane.setDefaultButton(b.peer) } def defaultButton_=(b: Option[Button]) { - peer.getRootPane.setDefaultButton(Swing.toNull(b.map(_.peer))) + peer.getRootPane.setDefaultButton(b map (_.peer) orNull) } def dispose() { peer.dispose() } diff --git a/src/swing/scala/swing/package.scala b/src/swing/scala/swing/package.scala index 8f4c281a4b..deb291ddb2 100644 --- a/src/swing/scala/swing/package.scala +++ b/src/swing/scala/swing/package.scala @@ -13,78 +13,8 @@ package object swing { type Color = java.awt.Color type Image = java.awt.Image type Font = java.awt.Font -} - -object Font { - import swing._ - - def apply(fontFormat: Int, fontFile: java.io.File) = java.awt.Font.createFont(fontFormat, fontFile) - def apply(fontFormat: Int, fontStream: java.io.InputStream) = java.awt.Font.createFont(fontFormat, fontStream) - def decode(str: String) = java.awt.Font.decode(str) - - /* TODO: finish implementation - /** - * See [java.awt.Font.getFont]. - */ - def get(attributes: Map[_ <: java.text.AttributedCharacterIterator.Attribute, _]) = - java.awt.Font.getFont(ImmutableMapWrapper(attributes)) - - import java.{util => ju} - private case class ImmutableMapWrapper[A, B](underlying : Map[A, B])(m : ClassManifest[A]) extends ju.AbstractMap[A, B] { - self => - override def size = underlying.size - - override def put(k : A, v : B) = - throw new UnsupportedOperationException("This is a wrapper that does not support mutation") - override def remove(k : AnyRef) = - throw new UnsupportedOperationException("This is a wrapper that does not support mutation") - - override def entrySet : ju.Set[ju.Map.Entry[A, B]] = new ju.AbstractSet[ju.Map.Entry[A, B]] { - def size = self.size - - def iterator = new ju.Iterator[ju.Map.Entry[A, B]] { - val ui = underlying.iterator - var prev : Option[A] = None - def hasNext = ui.hasNext - - def next = { - val (k, v) = ui.next - prev = Some(k) - new ju.Map.Entry[A, B] { - def getKey = k - def getValue = v - def setValue(v1 : B) = self.put(k, v1) - override def equals(other : Any) = other match { - case e : ju.Map.Entry[_, _] => k == e.getKey && v == e.getValue - case _ => false - } - } - } - - def remove = prev match { - case Some(k) => val v = self.remove(k.asInstanceOf[AnyRef]) ; prev = None ; v - case _ => throw new IllegalStateException("next must be called at least once before remove") - } - } - } - } - */ - - /** - * See [java.awt.Font.getFont]. - */ - def get(nm: String) = java.awt.Font.getFont(nm) - /** - * See [java.awt.Font.getFont]. - */ - def get(nm: String, font: Font) = java.awt.Font.getFont(nm, font) - - - def Insets(x: Int, y: Int, width: Int, height: Int) = new Insets(x, y, width, height) - def Rectangle(x: Int, y: Int, width: Int, height: Int) = new Insets(x, y, width, height) - def Point(x: Int, y: Int) = new Point(x, y) - def Dimension(x: Int, y: Int) = new Dimension(x, y) - - -}
\ No newline at end of file + 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 toAnyRef(x: Any): AnyRef = x.asInstanceOf[AnyRef] +} |