summaryrefslogblamecommitdiff
path: root/docs/examples/swing/Dialogs.scala
blob: 0b4ac258cf245dd37b6d99906cfb39b34ca3a0cb (plain) (tree)
1
2
3
4
5
6
7
8
9
10
                      



                    
                                               
                     
 

                                             


                                                        
 


                              
 
                                   
                                        

                                    
 
                    
                                        

                                    
 
                    
                                          

                                                 
 

                                            
 



                            
                                            














                                                                             
                                            




                                                                     





                                                                  




                                                  
                                             

                                                                              




                                                            




                                                  








                                                                                        








                                                               



                                                                  





                                                        
                                            




                                                          
                                                                      
                                          

                                      

                                           


                                                               
                
                                             

                                      
                                                                      
                                          

                                      

                                 


                                                               
                
                                             














                                                                                                                      


                          

   
                                        




                                              
                                




                         
package examples.swing

import swing._
import swing.event._

object Dialogs extends SimpleSwingApplication {
  import TabbedPane._

  lazy val label = new Label("No Result yet")
  lazy val tabs = new TabbedPane {
    pages += new Page("File", new GridBagPanel { grid =>
      import GridBagPanel._
      val buttonText = new TextField("Click Me")

      val c = new Constraints
      c.fill = Fill.Horizontal
      c.grid = (1,1)

      val chooser = new FileChooser
      layout(new Button(Action("Open") {
        chooser.showOpenDialog(grid)
      })) = c

      c.grid = (1,2)
      layout(new Button(Action("Save") {
        chooser.showSaveDialog(grid)
      })) = c

      c.grid = (1,3)
      layout(new Button(Action("Custom") {
        chooser.showDialog(grid, buttonText.text)
      })) = c

      c.grid = (2,3)
      layout(new Label("  with Text  ")) = c

      c.grid = (3,3)
      c.ipadx = 50
      layout(buttonText) = c

      border = Swing.EmptyBorder(5, 5, 5, 5)
    })
    pages += new Page("Simple Modal Dialogs", new BorderPanel {
      import BorderPanel._
      val mutex = new ButtonGroup
      val ok = new RadioButton("OK (in the L&F's words)")
      val ynlf = new RadioButton("Yes/No (in the L&F's words)")
      val ynp = new RadioButton("Yes/No (in the programmer's words)")
      val yncp = new RadioButton("Yes/No/Cancel (in the programmer's words)")
      val radios = List(ok, ynlf, ynp, yncp)
      mutex.buttons ++= radios
      mutex.select(ok)
      val buttons = new BoxPanel(Orientation.Vertical) {
        contents ++= radios
      }
      layout(buttons) = Position.North
      layout(new Button(Action("Show It!") {
        import Dialog._
        mutex.selected.get match {
          case `ok` =>
            showMessage(buttons, "Eggs aren't supposed to be green.")
          case `ynlf` =>
            label.text = showConfirmation(buttons,
                             "Would you like green eggs and ham?",
                             "An Inane Question") match {
              case Result.Yes => "Ewww!"
              case Result.No => "Me neither!"
              case _ => "Come on -- tell me!"
          }
          case `ynp` =>
            val options = List("Yes, please",
                               "No, thanks",
                               "No eggs, no ham!")
            label.text = showOptions(buttons,
                        "Would you like some green eggs to go with that ham?",
                        "A Silly Question",
                        entries = options,
                        initial = 2) match {
              case Result.Yes => "You're kidding!"
              case Result.No => "I don't like them, either."
              case _ => "Come on -- 'fess up!"
            }
          case `yncp` =>
            val options = List("Yes, please",
                               "No, thanks",
                               "No eggs, no ham!")
            label.text = showOptions(buttons,
                        message = "Would you like some green eggs to go with that ham?",
                        title = "A Silly Question",
                        entries = options,
                        initial = 2) match {
              case Result.Yes => "Here you go: green eggs and ham!"
              case Result.No => "OK, just the ham, then."
              case Result.Cancel => "Well, I'm certainly not going to eat them!"
              case _ => "Please tell me what you want!"
            }
        }
      })) = Position.South
    })
    pages += new Page("More Dialogs", new BorderPanel {
      import BorderPanel._
      val mutex = new ButtonGroup
      val pick = new RadioButton("Pick one of several choices")
      val enter = new RadioButton("Enter some text")
      val custom = new RadioButton("Custom")
      val customUndec = new RadioButton("Custom undecorated")
      val custom2 = new RadioButton("2 custom dialogs")
      val radios = List(pick, enter, custom, customUndec, custom2)
      mutex.buttons ++= radios
      mutex.select(pick)
      val buttons = new BoxPanel(Orientation.Vertical) {
        contents ++= radios
      }
      layout(buttons) = Position.North
      layout(new Button(Action("Show It!") {
        import Dialog._
        mutex.selected.get match {
          case `pick` =>
            val possibilities = List("ham", "spam", "yam")
            val s = showInput(buttons,
                      "Complete the sentence:\n\"Green eggs and...\"",
                      "Customized Dialog",
                      Message.Plain,
                      Swing.EmptyIcon,
                      possibilities, "ham")

            //If a string was returned, say so.
            label.text = if ((s != None) && (s.get.length > 0))
              "Green eggs and... " + s.get + "!"
            else
              "Come on, finish the sentence!"
          case `enter` =>
            val s = showInput(buttons,
                      "Complete the sentence:\n\"Green eggs and...\"",
                      "Customized Dialog",
                      Message.Plain,
                      Swing.EmptyIcon,
                      Nil, "ham")

            //If a string was returned, say so.
            label.text = if ((s != None) && (s.get.length > 0))
              "Green eggs and... " + s.get + "!"
            else
              "Come on, finish the sentence!"
          case `custom` =>
            val dialog = new Dialog(top)
            dialog.open()
            dialog.contents = Button("Close Me!") { dialog.close() }
          case `customUndec` =>
            val dialog = new Dialog with RichWindow.Undecorated
            dialog.open()
            dialog.contents = Button("Close Me!") { dialog.close() }
          case `custom2` =>
            val d1 = new Dialog
            val d2 = new Dialog(d1)
            d1.open()
            d2.open()
            d1.contents = Button("Close Me! I am the owner and will automatically close the other one") { d1.close() }
            d2.contents = Button("Close Me!") { d2.close() }
        }
      })) = Position.South
    })
  }

  lazy val ui: Panel = new BorderPanel {
    layout(tabs) = BorderPanel.Position.Center
    layout(label) = BorderPanel.Position.South
  }


  lazy val top = new MainFrame {
    title = "Dialog Demo"
    contents = ui
  }
}