Descargar

Interfaces gráficas en Haskell (página 2)

Enviado por Pablo Turmero


Partes: 1, 2
edu.red 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]

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red 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

edu.red Comparativa 21

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente