Interfaces gráficas en Haskell WxHaskell y AP.GUI 1.

1 Interfaces gráficas en Haskell WxHaskell y AP.GUI 1 ...
Author: Margarita Quintana Peralta
0 downloads 2 Views

1 Interfaces gráficas en Haskell WxHaskell y AP.GUI 1

2 Índice o 1. WxHaskell o 1.1. Introducción a WxHaskell o ¿Por qué usar wxHaskell? o 1.2. Visión genérica de wxHaskell. o 1.3. Ejemplos o 2. Ap.GUI o 2.1. Introducción a Ap.GUI o 2.2. Ejemplos 2

3 Introducción a WxHaskell o Es una librería de interfaces gráficas para Haskell de código abierto o Construída sobre la librería wxWidgets(plataforma GUI desarrollada para C++). Soporta el 75% de su funcionalidad. o Comenzó su desarrollo en el año 1992 declarada código abierto en el año 2009. o Es una librería derivada de wxEiffel. o Ofrece un alto nivel de abstracción, polimorfismo paramétrico 3

4 ¿Por qué usar WxHaskell? Creación rápida de prototipos, sobre los que seguir desarrollando. Aplicaciones comercialesUna librería multiplataforma que usa la filosofía look-feel.Se integra con código HaskellPorque es sencillo su programación Ofrece seguridad en gestión de memoria 4

5 Seguridad en WxHaskell Ofrece un chequeador de tipos que impide realizar operaciones ilegales de widgets. La gestión de la memoria es totalmente automática. En lugar de provocar segmentaciones de memoria se lanzarán excepciones. El estricto orden jerárquico permite hacer una gestión de la memoria de forma explícita. 5

6 Visión genérica de WxHaskell PaquetesControlTipos y herencia.EventosAtributos y propiedades. 6

7 Visión genérica. Paquetes WxHaskell Graphics.UI.WXCore Interfaz de bajo nivel con la librería wxWidgets Relación uno-a-uno entre C + + y Haskell Graphics.UI.WX Construido en la cima de WXCore Proporciona buena abstracción funcional (atributos, diseño, etc) 7 wxWidgets Graphics.UI.WXCore Graphics.UI.WX

8 Controles p

9 Tipos y herencia en WxHaskell o Codifica relación de herencia entre tipos diferentes usando TAD Object (Ptr) |-.. |- Window |- Frame |- Control |- Button |- RadioBox Button a === Ptr (... (CWindow (CControl (CButton a)))...) 9

10 Visión genérica. Atributos en WxHaskell Podemos controlar los diversos atributos de los widgets, por ejemplo, título, color, fuente, tamaño, etc Pero, ¿qué atributos se pueden utilizar con qué widget? Los atributos se organizan en clases de Haskell Tipos de reproductores instancias de clases correspondientes. Heredar definiciones ejemplo, de tipo "padre" 10

12 Eventos en WxHaskell o Se organizan en clases. o Un widget que instancia de una clase evento significa que puede recibir eventos de esa clase. o Los manejadores de eventos pueden ser definidos en un atributo usando la función «on»: 12 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]

13 Visión genérica. Diseño (Layout) o Administra el posicionamiento y dimensionamiento de los artilugios de un contenedor widget. o wxHaskell utiliza combinadores layout que permite un estilo más declarativo para especificar la disposición El tipo de retorno de un combinador de layout es siempre Layout o Permite un control preciso del comportamiento cuando la ventana cambia de tamaño (o para evitar el cambio de tamaño) o Los tipos de combinadores de layout son: diseños (widgets, contenedores, pegamento, separadores) y transformadores (estiramiento, ampliar márgenes, alineación) 13

14 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 ()) 14

15 Aplicaciones importantes de WxHaskell o Dazzle: Editor gráfico para redes bayesianas. Desarrollado por la universidad de Utrecht. o Dazzle usa la librería Smile y algoritmos en C++. o Presenta datos estadísticos multidimensionales. o Última versión del 15 de octubre de 2005 15

16 Aplicaciones importantes de WxHaskell o Simulador de colonias de hormigas. Usado en la resolución de pistas para la resolución de pistas. o La interfaz se desarrolló en un solo día. Ganaron el concurso ICFP Programming Contest 2003 y 2004 o Usa fragmentos de código C para programar sobre wxWidgets. 16

17 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]]] 17

18 Ap.Gui o Fue realizada por Pepe Gallardo, profesor de la universidad de Málaga. o Conserva la misma filosofía que wxHaskell y HToolkit o Usada en la docencia. o Trabaja sobre GHC o Programación más intuitiva. o No trabaja sobre winhugs 18

19 Atributos o Cada uno de los atributos se separan por comas. o 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 19

20 Layout o El layout se declara de una forma más intuitiva o Para tener a un widget que aparezca con alineamiento horizontal de otro se declara de la siguiente forma:  w!:layout =: b1

21 Layout o Cada widget puede ser dimensionado de forma individual usando size: o c  canvas [ size =: 400 400, bgColor =: white ] w o Cada widget tiene su propio contenedor, salvo la ventana:  w  window [ title =: "window"] ; b1  button [ text =: "Button", bgColor =: blue] w 21

22 Comparativa VentajasDesventajas wxHaskell: Muy difundido en ámbito docente y comercial Ap.GUI: solo usado en el ámbito docente Ap.GUI: tiene una curva de aprendizaje más suave wxHaskell: Es una librería menos intuitiva wxHaskell: Funciona sobre una librería ajena y de gran tamaño wxHaskell: Trabaja sobre cualquier compilador Ap.GUI: solo trabaja con el compilador ghci 22

23 Bibliografía o http://en.wikipedia.org/wiki/WxHaskell http://en.wikipedia.org/wiki/WxHaskell o http://www.lcc.uma.es/~pepeg/ap/gui.html http://www.lcc.uma.es/~pepeg/ap/gui.html o http://sites.google.com/site/wxconfig/ http://sites.google.com/site/wxconfig/ o http://www.cs.uu.nl/dazzle/f08-schrage.pdf http://www.cs.uu.nl/dazzle/f08-schrage.pdf o http://wxhaskell.sourceforge.net/download. html http://wxhaskell.sourceforge.net/download. html o http://www.haskell.org/haskellwiki/WxHask ell/Documentation http://www.haskell.org/haskellwiki/WxHask ell/Documentation 23