====== ScalaGUI ====== A Scala framework wrapping Swing. * It uses event loops to solve the inversion-of-control problem of Swing's callback events. * It uses multiple-inheritance for clean composition of widget properties. * It uses Scala's capability for embedding domain-specific-language-like elements to provide an easy layout mechanism based on the new "Matisse" layout library. An example of a simple application follows. Notice amongst others the following. * How the event loops are used for reacting to events. * How path-based pattern matching is used to segregate between events from different sources. * And how these event loops can be put in any element allowing true separation of concerns. * How the window is laid-out, by simply specifying constraints between widgets. package example import scala.gui._ object application extends scala.gui.Application { val mainWindow = new container.Window { val press = new widget.Button { text = "Press me, please" subscribe(this) toplevel eventloop { case this.Click() => field.text = "Wow! Someone pressed me." } } val say = new widget.Label { text = "I'm here for your information" toplevel eventloop { case press.Click() => text = "Hey! Button was pressed ;-)" } subscribe(press) } val field = new widget.TextField with behaviour.KeyTracker { trackingKey = true columns = 25 subscribe(this) toplevel eventloop { case this.TextChanged() => Console.println("Text changed") } } subscribe(this, press) toplevel eventloop { case this.Closing() => System.exit(0) case press.Click() => Console.println("Oho, the button was pressed.") } lay { new Group { object buttonGroup extends Group { beside(press, say) valign(Alignment.Center) } above(buttonGroup, field) }} } } The ''[[http://www.scala-lang.org/docu/papers.html#talks|Tutorial on Writing Modular Programs in Scala]]'' uses ScalaGUI to write a spreadsheet application. The tutorial also demonstrates pattern matching, mixin composition, and other things. If you want to try out ScalaGUI, you can get it directly (with examples etc.) from [[http://lampsvn.epfl.ch/svn-repos/dubochet/scala-gui/trunk/|the SVN repository]].