summaryrefslogtreecommitdiff
path: root/src/swing
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2010-03-21 00:21:54 +0000
committerPaul Phillips <paulp@improving.org>2010-03-21 00:21:54 +0000
commit6353b3711f63218e684f1498697eaf71e0c4bb53 (patch)
treeb2608c5cfc41ed3c0445822a3b27a21364bae241 /src/swing
parenta4f00eaf4da004ee2fd8a1ac1135b465533415d4 (diff)
downloadscala-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/swing')
-rw-r--r--src/swing/scala/swing/Action.scala4
-rw-r--r--src/swing/scala/swing/BufferWrapper.scala1
-rw-r--r--src/swing/scala/swing/ComboBox.scala5
-rw-r--r--src/swing/scala/swing/Font.scala70
-rw-r--r--src/swing/scala/swing/LayoutContainer.scala2
-rw-r--r--src/swing/scala/swing/RichWindow.scala7
-rw-r--r--src/swing/scala/swing/RootPanel.scala2
-rw-r--r--src/swing/scala/swing/ScrollPane.scala12
-rw-r--r--src/swing/scala/swing/Swing.scala3
-rw-r--r--src/swing/scala/swing/Table.scala6
-rw-r--r--src/swing/scala/swing/Window.scala4
-rw-r--r--src/swing/scala/swing/package.scala78
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]
+}