Miscellaneous code / file revision
summary |
shortlog |
changelog |
tags | edit |
manifest |
changeset |
file |
revisions |
annotate |
diff |
raw
scala/menudsl.scala
| author | david@mel |
| Tue Apr 29 09:58:11 2008 +0100 (4 months ago) | |
| changeset 7 | f22f83eae2d7 |
| permissions | -rw-r--r-- |
Added the menu DSL.
1 import javax.swing._;
2
3 class MenuBar extends JMenuBar with MenuHolder{
4
5 }
6
7 trait MenuHolder{
8 def add(menu : JMenu) : JMenu;
9
10 class Menu(name : String) extends JMenu(name) with MenuHolder{
11 MenuHolder.this.add(this);
12
13 def add(menu : JMenu) = add(menu : JMenuItem).asInstanceOf[JMenu]
14
15 import java.awt.event._;
16 class Item(name : String) extends JMenuItem(name){
17 Menu.this.add(this);
18
19 def does(performAction : => Unit) = {
20 addActionListener(new ActionListener{
21 def actionPerformed(e : ActionEvent) = performAction;
22 });
23 this
24 }
25 }
26
27 class CheckboxItem(name : String) extends JCheckBoxMenuItem(name){
28 Menu.this.add(this);
29 def toggles(toggle : Boolean => Unit) = {
30 addActionListener(new ActionListener{
31 def actionPerformed(e : ActionEvent) = toggle(isSelected);
32 });
33 this
34 }
35 def is (x : Boolean) = { setSelected(x); this}
36 }
37
38 implicit def item(name : String) = new Item(name);
39 implicit def checkboxItem(name : String) = new CheckboxItem(name);
40
41 def --- = add(new JSeparator());
42 }
43 }
44
45 val frame = new JFrame(){
46 }
47
48 frame.setJMenuBar(new MenuBar{
49 new Menu("File"){
50 "Save" does { }
51 "Open" does { }
52 ---
53 "Quit" does { System.exit(0) }
54 }
55 new Menu("Edit"){
56 "I like kitties" is true toggles (x => if(x) println("I like kitties") else println("I appear to be lying"))
57 new Menu("A sub menu"){
58 "There are no kitties in this submenu" does { }
59 }
60 }
61 });
62
63 frame.setSize(500, 500);
64 frame.setVisible(true);
