[Buoh-dev] Resucitando el buoh



Buenas, 

el otro dia medio aburrido me di? por bajar el buoh del CVS. Lo cierto
es que, no lo tomeis a mal, pero no me gust? nada. Estuve hablando con
esteban que me coment? que ten?a pensado quitar cosas del fichero buoh.c
y ponerlas en otros. 

En mi opini?n el problema es mucho mas grave que eso, se trata de un
problema de base, es decir, de dise?o. Cuando empezamos con el proyecto
se coment? que seguir?amos un modelo orientado a objetos y lo cierto es
que el buoh a dia de hoy sigue un modelo orientado al kaos.

Visto que el proyecto andaba bastante parado, empec? a pensar en nuevo
dise?o y a tirar algunas l?neas de c?digo. El resultado ha sido
monstruoso, porque el buoh ha quedado casi reescrito. Paso a comentaros
el modelo que yo propongo:

Buoh
-------

Este objeto representa la aplicaci?n en si y contiene los datos
"globales" (no os asusteis que no hay variables globales).

Padre: GObject

Atributos:

	- BuohWindow   *window; Es la ventana de la aplicaci?n
	- GtkTreeModel *comic_list; Modelo que contiene la lista de los comics
	
M?todos p?blicos:

	void          buoh_exit_app           (Buoh *buoh);
	void          buoh_create_main_window (Buoh *buoh);
	GtkTreeModel *buoh_get_comics_model   (Buoh *buoh);

Creo que no necesitan mucha explicaci?n.

Este objeto sigue un patr?n de dise?o singleton por dos motivos:

	* Tan solo puedo haber una instancia del objeto. Solo hay una
aplicaci?n
	* Es un truco que nos permite mantener una variable global sin usar una
variable 			global. Mirad el c?digo y vereis de que hablo.

El programa principal b?sicamente crea un objeto buoh e invoca el m?todo
create_main_window ()

BuohWindow
----------------

Este objeto representa la ventana de la aplicaci?n. Lleva la gesti?n de
todo lo que tiene que ver con la ventana (menus, toolbar, etc.)

Padre: GtkWindow

Atributos:
	- BuohView      *view; Es la vista de los comics, o mensajes como el de
bienvenida o error
	- BuohComicList *comic_list; Es la lista de los comics disponibles del
usuario
	- GtkWidget     *properties; Dialogo de propiedades de una comic
	- GtkWidget     *add_dialog; Dialogo de a?adir comic

La vista y la lista de comics son widgets hijos del objeto.

BuohView
-------------

Es el objeto encargado de cargar y mostrar los comics.

Padre: GtkNotebook

Atributos:
	- Comic           *comic; El comic que tiene que mostrar

BuohComicList
-------------------

Es la lista de los comics seleccionables por el usuario

Padre: GtkFrame

Atributos:
	- GtkTreeModel *model; es un filtro del modelo global de la aplicaci?n
	- BuohView     *view; un puntero a la vista

En este objeto no he trabajo el frame en cuanto a dise?o de HIG, porque
no estoy seguro de el. Es elago que quer?a comentaros. En mi opini?n el
fram aqui sobra. Se puede usar la cabecera del tree_view para poner
"Comic List", o bien dejar el frame, pero quitar la cabecera del
tree_view. Si quitamos el frame este objeto heredaria de GtkContainer o
GtkBin sin mayores complicaciones

BuohPropertiesDialog
----------------------------

Es el dialogo de propiedades de un comic. No tiene mucho misterio,
hereda de GtkDialog y contiene un puntero al comic del que tiene que
mostrar sus propiedades. Este todav?a no est? hecho. Est? hecho el
esqueleto, solo falta mostrar el contenido del dialogo

BuohAddComicDialog
----------------------------

Muy similar al anterior, pero contiene la lista de los comics, usando el
modelo global de la aplicaci?n

El resto son los objetos comic. Todav?a que dan muchas cosas por hacer:

El objeto comic:

No se porque hay un objeto comic-simple, no se lo que es.

El objeto comic debe llamarse BuohComic por consistencia con el resto de
objetos, por lo que hay que cambiarlo en todo el archivo.

Hay mas cosas que no he hecho, a prop?sito:

La gesti?n de next y forward de los comics. Tal y como est? ahora es el
propio comic el que se encarga de eso. En mi opni?n un comic no es mas
que una uri y unas cuantas caracter?sticas, no existe ah? el concepto de
anterior ni siguiente. 

La soluci?n ser?a usar un objeto en medio, por ejemplo BuohcomicManager,
que se encargue de esas gestiones. Tendr? los m?todos de siguiente,
anterior, primero, ?ltimo o buscar comic. 

El tema de la carga de los comics sigue siendo muy lento, es algo que
hay que solucionar, pero vamos, que es un problema ya antiguo.

He quitado a posta lo de redimensionar la ventana en funci?n del tama?o
del comic. No funcionaba del todo bien y se hace muy raro ver que la
ventana cambia de tama?o. 

Hay cosas de dise?o que hay que mirar (HIG).

Bueno, pues abajo va un snapshot [1] de lo que he hecho. He preferido
hacerlo as? en vez de un parche porque son demasiados cambios y as? es
mas facil de ver y probar. 

Si quer?is seguir adelante con este dise?o, me registro en la forja y
hago commit para que sigamos currando todos a partir de el. 

Seguro que se me olvidan cosas que comentar. Echad un vistazo al c?digo
que ah? si que est? todo

[1] http://carlosgc.linups.org/files/buoh-kal.tar.bz2

Salu2
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Carlos Garcia Campos a.k.a. KaL
   elkalmail yahoo es
   carlosgc gnome org
   http://carlosgc.linups.org
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=             
PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://forge.novell.com/pipermail/buoh-dev/attachments/20050713/906505b2/attachment.pgp


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]