1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>GTK Tutorial: I file rc di GTK</TITLE>
<LINK HREF="gtk_tut_it-19.html" REL=next>
<LINK HREF="gtk_tut_it-17.html" REL=previous>
<LINK HREF="gtk_tut_it.html#toc18" REL=contents>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<A HREF="gtk_tut_it-19.html">Avanti</A>
<A HREF="gtk_tut_it-17.html">Indietro</A>
<A HREF="gtk_tut_it.html#toc18">Indice</A>
<HR NOSHADE>
<H2><A NAME="s18">18. I file rc di GTK</A></H2>
<P>GTK ha un suo modo di trattare le preferenze delle applicazioni, usando
i file rc. Questi possono essere usati per scegliere i colori di quasi tutti
i widget, e possono anche essere usati per inserire delle pixmap nello sfondo
di alcuni widget.
<P>
<H2><A NAME="ss18.1">18.1 Funzioni per i file rc</A>
</H2>
<P>All'inizio della vostra applicazione dovrebbe esserci una chiamata a
<BLOCKQUOTE><CODE>
<PRE>
void gtk_rc_parse (char *filename);
</PRE>
</CODE></BLOCKQUOTE>
<P>passando come parametro il nome del vostro file rc. Questo farà si che GTK
analizzi tale file e usi le impostazioni di stile per i tipi di widget ivi
definite.
<P>Se si desidera avere un insieme speciale di widget che abbia uno stile diverso
dagli altri, o qualsiasi altra divisione logica dei widget, si chiami
<BLOCKQUOTE><CODE>
<PRE>
void gtk_widget_set_name (GtkWidget *widget,
gchar *name);
</PRE>
</CODE></BLOCKQUOTE>
<P>passando un widget appena creato come primo argomento, e il nome che gli si
vuole dare come secondo. Questo consentirà di cambiare gli attributi di
questo widget per nome tramite il file rc.
<P>Effettuando una chiamata come questa:
<P>
<BLOCKQUOTE><CODE>
<PRE>
button = gtk_button_new_with_label ("Special Button");
gtk_widget_set_name (button, "special button");
</PRE>
</CODE></BLOCKQUOTE>
<P>allora a questo bottone viene dato il nome ``special button'' ed esso può essere
riferito per nome nel file rc come ``special button.GtkButton''. [<--- Verificatemi!]
<P>Il seguente esempio di file rc imposta le proprietà della finestra principale,
e fa si che tutti i figli di questa finestra ereditino lo stile descritto
dallo stile ``main button''. Il codice usato nell'applicazione è:
<P>
<BLOCKQUOTE><CODE>
<PRE>
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_name (window, "main window");
</PRE>
</CODE></BLOCKQUOTE>
<P>Lo stile viene definito nel file rc usando:
<P>
<BLOCKQUOTE><CODE>
<PRE>
widget "main window.*GtkButton*" style "main_button"
</PRE>
</CODE></BLOCKQUOTE>
<P>che assegna a tutti i widget GtkButton nella finestra principale lo stile
``main_buttons'' secondo la definizione data nel file rc.
<P>Come si può vedere, questo sistema è molto potente e flessibile. Usate la
vostra immaginazione per trarre il massimo vantaggio da esso.
<P>
<H2><A NAME="ss18.2">18.2 Il formato dei file rc di GTK</A>
</H2>
<P>Nell'esempio che segue viene illustrato il formato del file GTK. Si tratta
del file testgkrc dalla distribuzione del GTK, a cui sono stati aggiunti
vari commenti e varie cose. Potete includere questa spiegazione nella
vostra applicazione per consentire all'utente di personalizzarla finemente.
<P>There are several directives to change the attributes of a widget.
Ci sono diverse direttive per cambiare gli attributi di un widget.
<UL>
<LI>fg - Assegna il colore di primo piano di un widget.</LI>
<LI>bg - Assegna il colore di sfondo di un widget.</LI>
<LI>bg_pixmap - Inserisce nello sfondo di un widget una pixmap.</LI>
<LI>font - Sceglie il font da usarsi con il dato widget.</LI>
</UL>
<P>Inoltre ci sono diversi stati in cui può trovarsi un widget, e si possono
assegnare diversi colori, pixmap e font per ogni stato. Essi sono:
<UL>
<LI>NORMAL - Lo stato normale di un widget, quando il mouse non si trova su
di esso, quando non è premuto, ecc.</LI>
<LI>PRELIGHT (evidenziato)- Quando il mouse si trova sopra al widget
verranno usati i colori assegnati per questo stato.</LI>
<LI>ACTIVE (attivo) - Quando il widget è premuto o cliccato esso sarà attivo,
e verranno usati gli attributi assegnati da questa etichetta.</LI>
<LI>INSENSITIVE (insensibile)- Quando un widget viene reso insensibile,
e non può essere attivato, prenderà questi attributi.</LI>
<LI>SELECTED (selezionato) - Quando un oggetto viene selezionato, prende
questi attributi.</LI>
</UL>
<P>Quando si usano le parole chiave ``fg'' e ``bg'' per assegnare i colori dei
widget il formato è:
<BLOCKQUOTE><CODE>
<PRE>
fg[<STATE>] = { Rosso, Verde, Blu }
</PRE>
</CODE></BLOCKQUOTE>
<P>Dove STATE è uno degli stati visti prima (PRELIGHT, ACTIVE ecc.), e Rosso,
Verde e Blu sono valori nell'intervallo 0 - 1.0; { 1.0, 1.0, 1.0 } rappresenta
il bianco.
Devono essere in formato float, o verranno visti come 0, sicché un ``1'' diretto
non funziona, deve essere ``1.0''. Uno ``0'' diretto va invece bene, poiché poco
importa se non viene riconosciuto: valori non riconosciuti vengono considerati
0.
<P>bg_pixmap è molto simile al precedente, tranne per i colori che vengono
sostituiti dal nome di un file.
<P>pixmap_path è una lista di percorsi separati da ``:''. In questi percorsi vengono
cercate le pixmap specificate.
<P>La direttiva font è semplicemente:
<BLOCKQUOTE><CODE>
<PRE>
font = "<font name>"
</PRE>
</CODE></BLOCKQUOTE>
<P>dove l'unica parte complicata è immaginare la stringa del font. Allo scopo
può servire usare xfontsel o una utilità analoga.
<P>``widget_class'' assegna lo stile di una classe di widget. Queste classi sono
elencate nell'introduzione ai widget sulla gerarchia delle classi.
<P>La direttiva ``widget'' assegna un insieme di widget dal nome specificato ad
un dato stile, annullando qualsiasi stile assegnato per la data classe di widget.
Questi widget vengono registrati nell'applicazione usando la chiamata
gtk_widget_set_name(). Questo consente di specificare gli attributi di un
widget singlarmente, piuttosto che assegnando gli attributi di un'intera classe
di widget. E' opportuno documentare tutti questi widget speciali in modo che
gli utenti possano personalizzarli.
<P>Quando la parola chiave ``<CODE>parent</CODE>'' viene usata come un attributo, il
widget erediterà gli attributi del suo genitore nell'applicazione.
<P>Quando si definisce uno stile si possono assegnare gli attributi di uno
stile definito precedentemente a quello nuovo.
<BLOCKQUOTE><CODE>
<PRE>
style "main_button" = "button"
{
font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
bg[PRELIGHT] = { 0.75, 0, 0 }
}
</PRE>
</CODE></BLOCKQUOTE>
<P>Questo esempio prende lo stile ``button'' e crea un nuovo stile
semplicemente cambiando il font e il colore di sfondo dello stato ``prelight''
nello stile ``button''.
<P>Naturalmente, molti di questi attributi non sono applicabili a tutti i widget.
E' veramente un semplice problema di buon senso. Tutto quello che potrebbe
applicarsi, dovrebbe.
<P>
<H2><A NAME="ss18.3">18.3 Esempio di file rc </A>
</H2>
<P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
#
pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps"
#
# style <name> [= <name>]
# {
# <option>
# }
#
# widget <widget_set> style <style_name>
# widget_class <widget_class_set> style <style_name>
# Ecco una lista di tutti gli stati possibili. Si noti che alcuni non sono
# applicabili a certi widget.
#
# NORMAL - Lo stato normale di un widget, quando il mouse non si trova su
# di esso, quando non è premuto, ecc.
#
# PRELIGHT (evidenziato)- Quando il mouse si trova sopra al widget
# verranno usati i colori assegnati per questo stato.
#
# ACTIVE (attivo) - Quando il widget è premuto o cliccato esso sarà attivo,
# e verranno usati gli attributi assegnati da questa etichetta.
#
# INSENSITIVE (insensibile)- Quando un widget viene reso insensibile,
# e non può essere attivato, prenderà questi attributi.
#
# SELECTED (selezionato) - Quando un oggetto viene selezionato, prende
# questi attributi.
#
# Dati questi stati, è possibile assegnare gli attributi dei widget in
# ognuno di questi stati usando le seguenti direttive.
#
# fg - Assegna il colore di primo piano di un widget.
# bg - Assegna il colore di sfondo di un widget.
# bg_pixmap - Inserisce nello sfondo di un widget una pixmap.
# font - Sceglie il font da usarsi con il dato widget.
#
# Questo è uno stile chiamato "button". Il nome non è veramente importante,
# in quanto viene assegnato ai veri widget alla fine del file.
style "window"
{
# Questo inserisce nella spaziatura attorno alla finestra la pixmap
# specificata.
#bg_pixmap[<STATE>] = "<pixmap filename>"
bg_pixmap[NORMAL] = "warning.xpm"
}
style "scale"
{
# Mette il colore di primo piano (il colore del font) a rosso nello
# stato "NORMAL".
fg[NORMAL] = { 1.0, 0, 0 }
# Inserisce nello sfondo del gadget la stessa pixmap usata dal suo genitore.
bg_pixmap[NORMAL] = "<parent>"
}
style "button"
{
# Questo mostra tutti i possibili stati per un bottone. L'unico che
# non è applicabile è lo stato "SELECTED".
fg[PRELIGHT] = { 0, 1.0, 1.0 }
bg[PRELIGHT] = { 0, 0, 1.0 }
bg[ACTIVE] = { 1.0, 0, 0 }
fg[ACTIVE] = { 0, 1.0, 0 }
bg[NORMAL] = { 1.0, 1.0, 0 }
fg[NORMAL] = { .99, 0, .99 }
bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
fg[INSENSITIVE] = { 1.0, 0, 1.0 }
}
# In questi esempio ereditiamo gli attributi dello stile "button" e poi
# alteriamo il font e il colore di sfondo quando evidenziato per creare
# un nuovo stile "main_button".
style "main_button" = "button"
{
font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
bg[PRELIGHT] = { 0.75, 0, 0 }
}
style "toggle_button" = "button"
{
fg[NORMAL] = { 1.0, 0, 0 }
fg[ACTIVE] = { 1.0, 0, 0 }
# Questo seleziona come pixmap di sfondo per il toggle_button quella del
# suo widget genitore (definita nell'applicazione).
bg_pixmap[NORMAL] = "<parent>"
}
style "text"
{
bg_pixmap[NORMAL] = "marble.xpm"
fg[NORMAL] = { 1.0, 1.0, 1.0 }
}
style "ruler"
{
font = "-adobe-helvetica-medium-r-normal--*-80-*-*-*-*-*-*"
}
# pixmap_path "~/.pixmaps"
# Queste assegnano ai tipi di widget gli stili definiti prima.
# I tipi di widget sono elencati nella gerarchia delle classi, ma probabilmente
# dovrebbero essere elencati in questo documento come riferimento per l'utente.
widget_class "GtkWindow" style "window"
widget_class "GtkDialog" style "window"
widget_class "GtkFileSelection" style "window"
widget_class "*Gtk*Scale" style "scale"
widget_class "*GtkCheckButton*" style "toggle_button"
widget_class "*GtkRadioButton*" style "toggle_button"
widget_class "*GtkButton*" style "button"
widget_class "*Ruler" style "ruler"
widget_class "*GtkText" style "text"
# Questo assegna lo stile main_button a tutti i bottoni che sono figli della
# "main window" (finestra principale). Questi devono essere documenati per
# potersene avvantaggiare.
widget "main window.*GtkButton*" style "main_button"
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>
<HR NOSHADE>
<A HREF="gtk_tut_it-19.html">Avanti</A>
<A HREF="gtk_tut_it-17.html">Indietro</A>
<A HREF="gtk_tut_it.html#toc18">Indice</A>
</BODY>
</HTML>
|