Ficheros de recursos

Introducción

Los ficheros de recursos dentro de gnome sirven para modificar opciones de los widgets, por ejemplo la visualización de ellos, es decir, su color de fondo, su fuente o bien si van a tener un pixmap sobre ellos. Todo esto lo podemos indicar en ficheros adjuntos a la aplicación de tal manera que cada usuario podra personalizar la apariencia de los widgets solo modificando este fichero.

Estructura de un fichero rc

Los ficheros de recursos contienen dos clases de instrucciones, las de definición de estilos y las de asignación de estilos. La combinación de las dos instrucciones permiten asignar un estilo a un determinado widget.

Para definir un estilo vamos a usar la orden style, para controlar la apariencia del widget existe varios identificadores, estos son

bg: para el fondo del widget
fg: para el color de frente del widget
bg_pixmap: para el pixmap del fondo
font: para la fuente del widget

Junto con estos identificadores existen otros que indican el estado del widget, que son los siguientes

NORMAL: Estado normal del widget
PRELIGHT: Cuando el puntero del ratón esta sobre el widget
ACTIVE: Cuando el se hace click con el ratón sobre el widget
INSENSITIVE: Cuando el widget no esta activo
SELECTED: Cuando el widget esta seleccionado

Con estos dos identificadores se puede definir la forma que van a tener los identificadores

          bg/fg[ESTADO] = {Rojo, Verde, Azul }
          bg_pixmap[ESTADO] = pixmap
          font = nombre_fuente
        

La primera de todas establece el valor para los colores de fondo y frente para un estado determinado a los valores que se pasan en entre las llaves. Estos valores están en el rango 0.0 - 1.0 siendo el 1.0 el mas fuerte. Es importante destacar que estos valores siempre tienen que llevar el decimal, esto es, si ponemos 1 sin el .0 la aplicación considerará como 0; por tanto es importante poner todos los dígitos indicando que es un numero decimal.

La segunda instrucción establece el pixmap de fondo para un estado determinado al pixmap que se indica. Se debe tener en cuenta que la ruta para buscar estos pixmaps se puede establecer dentro del fichero mediante la orden pixmap_path que contendrá una lista de directorios separados por el carácter ":"

Por ultimo la ultima instrucción asigna la fuente "nombre_fuente" al widget, el nombre de la fuente es del tipo -adobe-lucida-medium-*-normal--*-*-*-*-*-*-*-* por lo que se aconseja usar una aplicación como puede ser xfontsel para obtener el nombre.

Estas instrucciones se meten dentro de un estilo para definirlo, un ejemplo de definición de estilo podría ser

          style "boton"
          {
            fg[ACTIVE] = {1.0,0.5,0}
            bg[PRELIGHT] = {0,0,1.0}
            font =  "-sony-fixed-medium-*-*-*-12-120-*-*-c-*-*-*"
          }
        

Con estas lineas definimos el estilo "boton" que podremos asignar a uno o varios widgets. Antes de continuar hasta la asignación de estilos, cabe destacar que los estilos tienen una especie de herencia, esto es, se puede crear un nuevo estilo partiendo de uno base y definiendo nuevos parámetros o bien redefiniendo estados que ya estaban declarados en el estilo base. Un ejemplo podría ser

          style "boton_especial" = "boton"
          {
            fg[NORMAL] = {1.0,1.0,0}
            font = "-adobe-times-medium-r-*-*-12-*-*-*-*-*-iso8859-15"
          }
        

Con estas instrucciones se crea un nuevo estilo llamado "boton_especial" pero que toma como base el estilo "boton", es decir lo que ya estaba definido en el estilo "boton" permanecerá en "boton_especial". Por tanto el estilo "boton_especial" tendrá las características de "boton" mas la nueva, que es fg[NORMAL]. Además de todo esto el estilo "boton_especial" redefine el tipo de fuente por lo que no se usará el de "boton".

Una vez creado un estilo, el siguiente paso es asignar dicho estilo a un widget o conjunto de ellos, para esto existe dos sentencias.

Una de ellas es widget que asigna un estilo a un widget o a un grupo que se identifica con un nombre determinado. Este nombre se especifica dentro de la aplicación, como se vera en el siguiente capitulo. Esto permite la agrupación de widgets para asignar estilos y no limitar la asignación a clases de widgets, como sería aplicar un estilo a todos los botones de la aplicación. El prototipo de estas sentencias es.

          widget "nombre.*Clase*" style "estilo"
        

Donde nombre es el nombre que asignamos dentro de la aplicación con gtk_widget_set_name() y Clase es el tipo de widget a los que vamos a aplicar el estilo; por tanto este puede ser GtkButton o bien GtkText, por ejemplo. Por ultimo estilo es el estilo que vamos a aplicar al widget en cuestión. Un ejemplo de uso sería.

          widget "ventana_principal.*GtkButton*" style "boton"
        

En el ejemplo se asigna a todos los botones que están agrupados bajo el nombre ventana_principal el estilo que esta definido anteriormente llamado "boton"

La ultima instrucción que vamos a tratar es widget_class que asigna un estilo a un widget sin necesidad que este agrupado bajo un nombre especial. La sintaxis de esta orden es.

Como usar los ficheros de recursos

En gtk2 se dispone de varias funciones para el manejo de estos ficheros. La función principal es

void gtk_rc_parse (filename); 
char * filename;

Cuando llamamos a esa función , con el nombre del fichero rc como parámetro, la aplicación analiza el archivo dando a los widgets que figuran en el archivo la apariencia definida en el.

Ahora bien, para crear grupos de widgets para luego usarlos dentro del archivo de recursos, existe la función

void gtk_widget_set_name (widget,  
 name); 
GtkWidget *  widget ;
gchar *  name;

Esta función agrupa el widget que se pasa por parámetro con el nombre que se pasa en el segundo parámetro. Este nombre va a servir para identificar el grupo dentro del fichero de rc de tal forma que la instrucción

          gtk_widget_set_name(boton,"boton_aceptar");
        

agrupa el widget boton ( que se supone que es un botón ya creado anteriormente ) con el nombre "boton_aceptar" de tal manera que el fichero rc se podrá referir a el como boton_aceptar.GtkButton.