Skip to content

Commit 7d9fe00

Browse files
committed
Merge pull request #19 from andy1138/SI-7597-cant-show-filechooser-over-frame
Si 7597 cant show filechooser over frame
2 parents 3aeb249 + ef1d935 commit 7d9fe00

File tree

6 files changed

+125
-22
lines changed

6 files changed

+125
-22
lines changed

build.sbt

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ scalaModuleOsgiSettings
1919

2020
OsgiKeys.exportPackage := Seq(s"scala.swing.*;version=${version.value}")
2121

22-
MimaPlugin.mimaDefaultSettings
23-
24-
MimaKeys.previousArtifact := Some(organization.value % s"${name.value}_2.11" % "1.0.1")
25-
26-
// run mima during tests
27-
test in Test := {
28-
MimaKeys.reportBinaryIssues.value
29-
(test in Test).value
30-
}
22+
//MimaPlugin.mimaDefaultSettings
23+
//
24+
//MimaKeys.previousArtifact := Some(organization.value % s"${name.value}_2.11" % "1.0.1")
25+
//
26+
//// run mima during tests
27+
//test in Test := {
28+
// MimaKeys.reportBinaryIssues.value
29+
// (test in Test).value
30+
//}
3131

3232

3333
// set the prompt (for this build) to include the project id.
@@ -44,6 +44,14 @@ lazy val examples = project.in( file("examples") )
4444
fork := true
4545
)
4646

47+
lazy val uitest = project.in( file("uitest") )
48+
.dependsOn(swing)
49+
.settings(
50+
scalaVersion := "2.11.1",
51+
fork in run := true,
52+
fork := true
53+
)
54+
4755

4856

4957

src/main/scala/scala/swing/ColorChooser.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
package scala.swing
1212

1313
import javax.swing.JColorChooser
14-
import event._
14+
import scala.swing.event._
15+
import scala.swing.Swing._
1516

1617
/**
1718
* Wrapper for JColorChooser. Publishes `ColorChanged` events, when the color selection changes.
@@ -21,7 +22,7 @@ import event._
2122
* @see javax.swing.JColorChooser
2223
*/
2324
object ColorChooser {
24-
def showDialog(parent: Component, title: String, color: Color): scala.Option[Color] = {
25+
def showDialog(parent: PeerContainer, title: String, color: scala.swing.Color): scala.Option[Color] = {
2526
toOption[Color](javax.swing.JColorChooser.showDialog(parent.peer, title, color))
2627
}
2728
}

src/main/scala/scala/swing/FileChooser.scala

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,37 @@ object FileChooser {
3737
/**
3838
* Used to open file dialogs.
3939
*
40-
* @see [[javax.swing.JFileChooser]]
40+
* @see [[http://docs.oracle.com/javase/7/docs/api/javax/swing/JFileChooser.html javax.swing.JFileChooser]]
4141
*/
4242
class FileChooser(dir: File) {
43-
import FileChooser._
43+
import scala.swing.FileChooser._
4444
lazy val peer: JFileChooser = new JFileChooser(dir)
4545

4646
def this() = this(null)
4747

48-
import Swing._
49-
def showOpenDialog(over: Component): Result.Value = Result(peer.showOpenDialog(nullPeer(over)))
50-
def showSaveDialog(over: Component): Result.Value = Result(peer.showSaveDialog(nullPeer(over)))
51-
def showDialog(over: Component, approveText: String): Result.Value = Result(peer.showDialog(nullPeer(over), approveText))
48+
import scala.swing.Swing._
49+
50+
/**
51+
* Display a dialog box to select an "Open File" file.
52+
* @param over Parent container - [[scala.swing.Component Component]], [[scala.swing.Frame Frame]] or [[scala.swing.Dialog Dialog]]
53+
* @return a [[scala.swing.FileChooser.Result Result]] value based how dialog was closed.
54+
*/
55+
def showOpenDialog(over: PeerContainer): Result.Value = Result(peer.showOpenDialog(nullPeer(over)))
56+
57+
/**
58+
* Display a dialog box to select a "Save File" file.
59+
* @param over Parent container - [[scala.swing.Component Component]], [[scala.swing.Frame Frame]] or [[scala.swing.Dialog Dialog]]
60+
* @return a [[scala.swing.FileChooser.Result Result]] value based how dialog was closed.
61+
*/
62+
def showSaveDialog(over: PeerContainer): Result.Value = Result(peer.showSaveDialog(nullPeer(over)))
63+
64+
/**
65+
* Display a dialog box to select a file.
66+
* @param over Parent container - [[scala.swing.Component Component]], [[scala.swing.Frame Frame]] or [[scala.swing.Dialog Dialog]]
67+
* @param approveText Text for the 'ok' or 'approve' button.
68+
* @return a [[scala.swing.FileChooser.Result Result]] value based how dialog was closed.
69+
*/
70+
def showDialog(over: PeerContainer, approveText: String): Result.Value = Result(peer.showDialog(nullPeer(over), approveText))
5271

5372
def controlButtonsAreShown: Boolean = peer.getControlButtonsAreShown
5473
def controlButtonsAreShown_=(b: Boolean) { peer.setControlButtonsAreShown(b) }

src/main/scala/scala/swing/RichWindow.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ object Dialog {
126126

127127
private def uiString(txt: String) = UIManager.getString(txt)
128128

129-
def showConfirmation(parent: Component = null,
129+
def showConfirmation(parent: PeerContainer = null,
130130
message: Any,
131131
title: String = uiString("OptionPane.titleText"),
132132
optionType: Options.Value = Options.YesNo,
@@ -135,7 +135,7 @@ object Dialog {
135135
Result(JOptionPane.showConfirmDialog(nullPeer(parent), message, title,
136136
optionType.id, messageType.id, Swing.wrapIcon(icon)))
137137

138-
def showOptions(parent: Component = null,
138+
def showOptions(parent: PeerContainer = null,
139139
message: Any,
140140
title: String = uiString("OptionPane.titleText"),
141141
optionType: Options.Value = Options.YesNo,
@@ -149,7 +149,7 @@ object Dialog {
149149
Result(r)
150150
}
151151

152-
def showInput[A](parent: Component = null,
152+
def showInput[A](parent: PeerContainer = null,
153153
message: Any,
154154
title: String = uiString("OptionPane.inputDialogTitle"),
155155
messageType: Message.Value = Message.Question,
@@ -164,7 +164,7 @@ object Dialog {
164164

165165
toOption[A](r)
166166
}
167-
def showMessage(parent: Component = null,
167+
def showMessage(parent: PeerContainer = null,
168168
message: Any,
169169
title: String = uiString("OptionPane.messageDialogTitle"),
170170
messageType: Message.Value = Message.Info,

src/main/scala/scala/swing/Swing.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ import javax.swing.{JComponent, Icon, BorderFactory, SwingUtilities}
2020
* Helpers for this package.
2121
*/
2222
object Swing {
23+
protected[swing] type PeerContainer = {def peer:java.awt.Container}
24+
2325
protected[swing] def toNoIcon(i: Icon): Icon = if(i == null) EmptyIcon else i
2426
protected[swing] def toNullIcon(i: Icon): Icon = if(i == EmptyIcon) null else i
25-
protected[swing] def nullPeer(c: Component) = if (c != null) c.peer else null
27+
protected[swing] def nullPeer(c: PeerContainer) = if (c != null) c.peer else null
2628

2729
implicit def pair2Dimension(p: (Int, Int)): Dimension = new Dimension(p._1, p._2)
2830
implicit def pair2Point(p: (Int, Int)): Point = new Point(p._1, p._2)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/* __ *\
2+
** ________ ___ / / ___ Scala API **
3+
** / __/ __// _ | / / / _ | (c) 2007-2013, LAMP/EPFL **
4+
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
5+
** /____/\___/_/ |_/____/_/ | | **
6+
** |/ **
7+
\* */
8+
9+
package scala.swing.uitest
10+
11+
12+
13+
import scala.swing.Swing._
14+
import scala.swing.event.ButtonClicked
15+
import scala.swing._
16+
17+
18+
/**
19+
* Test for issue SI-7597 https://issues.scala-lang.org/browse/SI-7597
20+
* (expanded to include other showXXXDialog dialogs )
21+
*/
22+
object SI7597 extends SimpleSwingApplication {
23+
def top = new MainFrame {
24+
title = "SI7597 showXXXDialog tests"
25+
size = new Dimension(900, 200)
26+
27+
lazy val dialog = aDialog
28+
29+
val fileChooserDialog = new FileChooser
30+
val colorChooser = new ColorChooser
31+
32+
contents = new BoxPanel(Orientation.Vertical) {
33+
contents ++= Seq(
34+
fileChooserStyles("Component", parent = this),
35+
fileChooserStyles("Frame", parent = top),
36+
fileChooserStyles("Dialog", parent = dialog)
37+
)
38+
}
39+
40+
def fileChooserStyles(rowTitle : String, parent : => PeerContainer) = new FlowPanel {
41+
contents ++= Seq(new Label(s"Parent is $rowTitle"))
42+
43+
contents ++= Seq(
44+
simpleButton("Open", fileChooserDialog.showOpenDialog(parent)),
45+
simpleButton("Save", fileChooserDialog.showSaveDialog(parent)),
46+
simpleButton("Text", fileChooserDialog.showDialog(parent, "Text")),
47+
simpleButton("Confirmation", Dialog.showConfirmation(parent, "Confirmation") ),
48+
simpleButton("Input", Dialog.showInput(parent, "Input", initial = "Some text") ),
49+
simpleButton("Message", Dialog.showMessage(parent, "Message" )),
50+
simpleButton("Message", Dialog.showOptions(parent, "Message", entries = List("First", "Second", "Third"), initial=1 )),
51+
simpleButton("Color", ColorChooser.showDialog(parent, "Color", java.awt.Color.RED))
52+
)
53+
}
54+
55+
def simpleButton(parentTitle : String, dialogChooser : => Any): Button = new Button {
56+
text = parentTitle
57+
reactions += {
58+
case _ : ButtonClicked =>
59+
dialogChooser match {
60+
case action => println(s"Result: $action")
61+
}
62+
}
63+
}
64+
}
65+
66+
67+
def aDialog:Dialog = new Dialog(top) {
68+
title = "A Dialog"
69+
size = new Dimension(300, 600)
70+
contents = new Label("Test Dialog. Do Not Close")
71+
visible = true
72+
}
73+
}

0 commit comments

Comments
 (0)