Programando en Mono para Gnome (II)

En el artículo de ayer vimos someramente como crear un interfaz de usuario utilizando GTK#, además vimos como crear un evento para salir de aplicación accionando el menú Archivo -> Salir. Hoy vamos a ver enconcreto el ciclo de vida de una aplicación desarrollada para Gnome.

Todo el ciclo de vida de una aplicación para Gnome está mapeada de alguna manera en el objeto Application dentro del espacio de nombre Gtk. El ciclo de vida de una aplicación de Gnome desarrollada bajo Mono sigue el siguiente diagrama de estados:

Es decir, tras ser creada tiene que ser inicializada y puesta en ejecución, como punto final se sale de ella. Entre que es inicializada y puesta en ejecución, es el momento de realizar las acciones iniciales pertinentes, tales como crear la ventana principal y posteriormente mostrarla. De esto, podemos deducir que al igual que una aplicación posee un ciclo de vida lo mismo se puede trasladar a una ventana.

En nuestro ejemplo, en el archivo Main.cs podemos ver como es una inicialización por defecto cuando se crea un proyecto en MonoDevelop:

 

Entre Application.Init () y Application.Run (), se realizan las tareas necesarias para mostrar la ventana principal. Otros métodos y propiedades disponibles en el objeto Application son las siguientes:

  • InitCheck() que devuelve un booleano, dependiendo de si se ha podido realizar la inicialización o no. Por lo demás, es igual que Init.
  • RunIteration() sirve para que el bucle en el que se ejecuta continuamente nuestra aplicación dé una iteracción más, es útil para obligar al refresco de la ventana, para mostrar nuevos cambios cuando por ejemplo se ha actualizado los datos de un webservice.

Para más información acerca de el objeto Gtk.Application se puede recurrir a la propia página web del proyecto Mono o MonoDoc, que es la herramienta de documentación para el programador en la Mono.

 

 

Programando en Mono para Gnome (I)

Con la salida de la última versión de Monodevelop, ya es posible depurar de manera integrada desde este IDE. Por ello, ya viendo que está suficientemente maduro voy a escribir una serie de post relativos a la programación de Gnome bajo .Net (aka Mono) procurando mantener el máximo de compatibilidad entre los distintos sistemas operativos.

Así, cuando iniciamos una solución en MonoDevelop para Linux, si queremos que nuestra aplicación para Gnome mantenga la máxima compatibilidad interplataforma deberemos seleccionar Proyecto GTK# en vez de Proyecto para Gnome, ya que el espacio de nombres gnome no está disponible en Windows ni Mac OS X.

Aunque es posible crear nuestras soluciones/proyectos para Windows Forms, es deseable utilizar GTK#, el binding disponible para C# de GTK+ el interfaz de usuario en que se basa Gnome.

En este ejemplo, vamos a ver como crear una solución que nos permita crear un MiniCalc hecho en C#.Así vamos a tener un menú en la parte superior, una zona con celdas y abajo en la barra de estado un campo donde editar las fórmulas. El resultado será como el que sigue:

 

 

Lo que tenemos aquí, es una ventana que contiene un contenedor que a su vez tiene insetados 3 widgets, el del menú, el que nos va a mostrar las celdas y la barra de estado. El widget se puede modificar, accediendo a la ventana de solución dentro del apartado. Podemos ver mejor como está distribuido jerárquicamente, en este gráfico.

Como podemos observar, aparece otro elemento más GtkScrolledWindow, que es insertado automáticamente por MonoDevelop para permitir tener barras de desplazamiento en la ventana.

Una parte muy importante son los eventos, en este ejemplo vamos solo a ver como salir de la aplicación sin guardar datos. Para salir de aplicación tenemos que usar el objeto Application, el cual vamos a ver con detalle más adelante.

El único evento que hemos creado (en este caso una acción) es la de salir de la aplicación seleccionando la opción salir, que utiliza el método Application.Quit();