Eventos en WxHaskell
Se organizan en clases.
Un widget que instancia de una clase evento significa que puede recibir eventos de esa clase.
Los manejadores de eventos pueden ser definidos en un atributo usando la función «on»:
11
paint :: (Paint w) => Event w (DC () -> Rect -> IO ())
Window es una instancia de Paint, nos permite definir nuestra propia rutina paint para todo tipo de ventanas (incluyendo botones y cajas de texto).
set f [on paint := drawObjects]
Visión genérica. Diseño (Layout)
Administra el posicionamiento y dimensionamiento de los artilugios de un contenedor widget.
wxHaskell utiliza combinadores layout que permite un estilo más declarativo para especificar la disposiciónEl tipo de retorno de un combinador de layout es siempre Layout
Permite un control preciso del comportamiento cuando la ventana cambia de tamaño (o para evitar el cambio de tamaño)
Los tipos de combinadores de layout son: diseños (widgets, contenedores, pegamento, separadores) y transformadores (estiramiento, ampliar márgenes, alineación)
12
Atributos y propiedades en WxHaskell
Los atributos se transforman en propiedades con(:=)
La función set asigna una lista de propiedades a un objeto
Prop (Button a) Prop (Button a)
/ /
set btn [text := “Parar”, on command := función]
| | | |
Attr String Event IO ()
(Button a) (Button a)
String (IO ())
13
Aplicaciones importantes de WxHaskell
Dazzle: Editor gráfico para redes bayesianas. Desarrollado por la universidad de Utrecht.
Dazzle usa la librería Smile y algoritmos en C++.
Presenta datos estadísticos multidimensionales.
Última versión del 15 de octubre de 2005
14
Aplicaciones importantes de WxHaskell
Simulador de colonias de hormigas. Usado en la resolución de pistas para la resolución de pistas.
La interfaz se desarrolló en un solo día. Ganaron el concurso ICFP Programming Contest 2003 y 2004
Usa fragmentos de código C para programar sobre wxWidgets.
15
Ejemplo
main = start gui
gui :: IO ()
gui =
do f ? frame [text := "Example"]
lab ? label f [text := "Hello wxHaskell"]
ok button f [text := "Ok"]
can ? button f [text := "Cancel"]
set ok [on command := close f ]
set can [on command := set lab [text := "Goodbye?"]]
set f [layout := column 5 [floatCenter (widget lab)
,floatCenter $
row 5 [widget ok,widget can]]]
16
Ap.Gui
Fue realizada por Pepe Gallardo, profesor de la universidad de Málaga.
Conserva la misma filosofía que wxHaskell y HToolkit
Usada en la docencia.
Trabaja sobre GHC
Programación más intuitiva.
No trabaja sobre winhugs
17
Atributos
Cada uno de los atributos se separan por comas.
Las asignaciones de cada atributo se hace usando el operador =:
button [ text =: "Button" ] w
Se suprime el uso de la directiva get y set
Las rutinas se especifican igualmente con «on»:
b4 ? button [ text =: "Quit", on action =: quit
18
Layout
El layout se declara de una forma más intuitiva
Para tener a un widget que aparezca con alineamiento horizontal de otro se declara de la siguiente forma:
w!:layout =: b1 <.< b2 <.< b3 <.< b4
Para tener a un widget que aparezca con alineamiento vertical de otro se declara de la siguiente forma:
w!:layout =: b1 ^.^ b2 ^.^ b3 ^.^ b4
Es posible combinar ambos alineamientos:
w!:layout =: b1 <.< b2 ^.^ b3 <.< b4
19
Layout
Cada widget puede ser dimensionado de forma individual usando size:
c ? canvas [ size =: 400 400, bgColor =: white ] w
Cada widget tiene su propio contenedor, salvo la ventana:
w ? window [ title =: "window"]
; b1 ? button [ text =: "Button"
, bgColor =: blue] w
20
Comparativa
21
Página anterior | Volver al principio del trabajo | Página siguiente |