Las interfaces IDL de Bonobo

Como toda gran arquitectura Bonobo tiene una representación gráfica sencilla, aunque como veremos, dentro de esta sencillez encierra una gran potencia. En la siguiente figura podemos observar las relaciones entre un contenedor y los componentes que se pueden insertar dentro de él.

Figure 1-3. Relación entre componentes y contenedores en Bonobo

En la figura se nos muestra un contenedor que tiene en su interior dos componentes. El contenedor ofrece a los componentes una serie de interfaces: Bonobo::ClientSite y Bonobo::ViewFrame. Estas interfaces están definidas en IDL dentro de Bonobo y son las encargadas de permitir que un componente pueda existir dentro del contenedor. Cuando un componente quiere insertarse dentro de un contenedor, este tiene que crear un ClientSite donde almacenarlo. Este componente puede tener varias vistas, es decir, varias instancias del componente. Instancias que comparten datos pero que pueden mostrar diferentes aspectos de estos. Cada instancia de un componente necesita que dentro del contenedor exista un ViewFrame, es decir, una vista para la instancia.

Si nos pasamos ahora a la zona de los componentes vemos que existe una interfaz fundamental: Bonobo::View. A través de esta interfaz es por donde el componente se comunica con el contenedor, utilizando la interfaz del contenedor ViewFrame. Y es también por aquí por donde se le dice al componente los sucesos que puedan ocurrir en el contenedor.

Todas estas interfaces IDL las puede consultar el lector dentro del código fuente de Bonobo, en el directorio IDL. Es un buen momento para intentar obtener Bonobo del CVS de GNOME ya que aún no ha sido liberado oficialmente. Para ello los pasos a seguir:

Si el lector esta conectado a Internet y tiene el cliente de CVS, habrá obtenido una copia del último código de Bonobo disponible. El CVS es la herramienta en la que los desarrolladores van dejando las últimas versiones del código que desarrollan por lo que, todo lo que en está, es altamente inestable y en muchas ocasiones es sólo útil para los propios desarrolladores. En este caso como lo único que queremos es ver las interfaces IDL de bonobo, nos vamos al directorio "idl" dentro del directorio "bonobo" y nos ponemos a curiosear. en este tipo de ocasiones es vital la herramienta grep para ver en que ficheros residen las cadenas que buscamos. En la actualidad la mejor documentación de Bonobo es el propio código fuente de él, un libro on-line muy técnico [2], la sección de GNOME de Barrapunto.com [3] y su página web [4] y este tipo de artículos.

Para satisfacer la curiosidad del lector vamos a presentar aquí la definición IDL de Bonobo, que resumen toda la arquitectura en unas pocas líneas de IDL. El IDL es el lenguaje en el que se definen las interfaces de CORBA. En la referencia [5] puede el lector encontrar un curso de CORBA que le ayudará a entender mejor esta arquitectura.

/*
 * The Bonobo Document Model
 *
 * Author:
 *     Miguel de Icaza (miguel@gnu.org)
 *
 */
#ifndef _BONOBO_IDL_INCLUDED_
#define _BONOBO_IDL_INCLUDED_

#if !defined(__BONOBO_COMPILATION) && defined(__ORBIT_IDL__)
%{
#pragma include_defs bonobo/Bonobo.h
%}
#pragma inhibit push
#endif

#include <bonobo-factory.idl>
#include <bonobo-unknown.idl>

/* Storage stuff. */
#include <bonobo-storage.idl>
#include <bonobo-persist.idl>
#include <bonobo-progressive.idl>

#include <bonobo-advise.idl>

/* Control stuff. */
#include <bonobo-ui-handler.idl>
#include <bonobo-property.idl>
#include <bonobo-control.idl>

/* Subdocument stuff. */
#include <bonobo-container.idl>
#include <bonobo-client-site.idl>
#include <bonobo-canvas.idl>
#include <bonobo-embeddable.idl>

/* Printing stuff */
#include <bonobo-print.idl>

/* Misc. stuff. */
#include <bonobo-desktop.idl>

#if !defined(__BONOBO_COMPILATION) && defined(__ORBIT_IDL__)
#pragma inhibit pop
#endif

#endif /* _BONOBO_IDL_INCLUDED_ */