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
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
<TITLE>GTK Tutorial: Widget "Testo" (Text Widget)</TITLE>
<LINK HREF="gtk_tut_it-12.html" REL=next>
<LINK HREF="gtk_tut_it-10.html" REL=previous>
<LINK HREF="gtk_tut_it.html#toc11" REL=contents>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<A HREF="gtk_tut_it-12.html">Avanti</A>
<A HREF="gtk_tut_it-10.html">Indietro</A>
<A HREF="gtk_tut_it.html#toc11">Indice</A>
<HR NOSHADE>
<H2><A NAME="s11">11. Widget "Testo" (Text Widget)</A></H2>
<P>Il widget di testo permette di mostrare e modificare del testo disposto su più
linee. Questo widget supporta sia la presenza di diversi colori che di diversi font
contemporaneamente, permettendo di mischiarli nel modo in cui si desidera. Mette poi a
disposizione un ampio gruppo di comandi basati sulla tastiera, che sono compatibili con
Emacs.
<P>Il widget di testo dà la possibilità di fare taglia e incolla in modo
completo, compreso l'uso del doppio e triplo click per selezionare un'intera parola o
un'intera linea.
<P>
<H2><A NAME="ss11.1">11.1 Creazione e configurazione di una casella di testo</A>
</H2>
<P>Esiste un'unica funzione per la creazione di un nuovo widget di testo:
<BLOCKQUOTE><CODE>
<PRE>
GtkWidget* gtk_text_new (GtkAdjustment *hadj,
GtkAdjustment *vadj);
</PRE>
</CODE></BLOCKQUOTE>
<P>Gli argomenti di questa chiamata ci permettono di assegnare dei puntatori a dei
valori che stabiliscono il punto di vista del widget. Passare dei valori NULL all'uno
o all'altro o ad entrambi questi argomenti, fà sì che gtk_text_new li
crei automaticamente.
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_text_set_adjustments (GtkText *text,
GtkAdjustment *hadj,
GtkAdjustment *vadj);
</PRE>
</CODE></BLOCKQUOTE>
<P>La funzione precedente permette di cambiare gli aggiustamenti orizzontale e verticale
di un widget di testo i ogni momento.
<P>Il widget di testo non \ di creare delle barre di scorrimento quando la
quantità è troppo grande per la finestra. Dobbiamo quindi crearle e
aggiungerle alla finestra noi stessi.
<P>
<BLOCKQUOTE><CODE>
<PRE>
vscrollbar = gtk_vscrollbar_new (GTK_TEXT(text)->vadj);
gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0);
gtk_widget_show (vscrollbar);
</PRE>
</CODE></BLOCKQUOTE>
<P>Il pezzetto di codice precedente crea una nuova barra di scorrimento verticale e la
collega all'aggiustamento verticale del widget di testo, <CODE>text</CODE>, dopodiché la
impacchetta nella hbox al solito modo.
<P>Ci sono due modi principali di utilizzo di un widget di testo: per permettere all'utente
di editare del testo, oppure per permettere a noi di mostrare all'utente del testo
disposto su più righe. Per passare dall'una all'altra di queste modalità,
il widget di testo ci mette a disposizione la seguente funzione:
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_text_set_editable (GtkText *text,
gint editable);
</PRE>
</CODE></BLOCKQUOTE>
<P>L'argomento <CODE>editable</CODE> è un valore TRUE o FALSE che specifica se l'utente
può modificare o meno il contenuto del widgte. Quando il widget è
modificabile, mostrerà un cursore nel punto di inserimento corrente.
<P>Niente però vi obbliga ad usare il widget di testo in questi due soli modi. Si
può passare dall'una all'altra delle due modalità in qualsiasi momento,
e si può inserire del testo in ogni momento.
<P>Il widget di testo è in grado di andare a capo automaticamente quando delle linee
di testo sono troppo lunghe per stare su una sola linea della finestra. Il comportamento
predefinito è di andare a capo automaticamente al termine della linea. Questo
può essere cambiato con la seguente funzione:
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_text_set_word_wrap (GtkText *text,
gint word_wrap);
</PRE>
</CODE></BLOCKQUOTE>
<P>L'uso di questa funzione ci permette di specificare se il widget di testo deve spezzare
o no le linee lunghe ai bordi della finestra. L'argomento <CODE>word_wrap</CODE> è un
valore di tipo TRUE o FALSE.
<P>
<H2><A NAME="ss11.2">11.2 Manipolazione del testo</A>
</H2>
<P>Il punto di inserimento corrente del widget può essere stabilito usando
<BLOCKQUOTE><CODE>
<PRE>
void gtk_text_set_point (GtkText *text,
guint index);
</PRE>
</CODE></BLOCKQUOTE>
in cui <CODE>index</CODE> è la posizione in cui mettere il punto di inserimento.
<P>La funzione per ottenere la posizione di inserimento corrente è analoga:
<BLOCKQUOTE><CODE>
<PRE>
guint gtk_text_get_point (GtkText *text);
</PRE>
</CODE></BLOCKQUOTE>
<P>Una funzione che è utile in combinazione con le precedenti due è
<BLOCKQUOTE><CODE>
<PRE>
guint gtk_text_get_length (GtkText *text);
</PRE>
</CODE></BLOCKQUOTE>
la quale restituisce la lunghezza corrente del widget di testo. La lunghezza è
definita come il numero di caratteri che si trovano nel blocco di testo della finestra,
compresi i caratteri tipo CR, che marcano la fine delle linee.
<P>Per inserire del testo alla posizione corrente del widget di testo, si usa la funzione
gtk_text_insert, che permette anche di specificare i colori di primo piano e di sfondo
per il testo, oltre al font da usare.
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_text_insert (GtkText *text,
GdkFont *font,
GdkColor *fore,
GdkColor *back,
const char *chars,
gint length);
</PRE>
</CODE></BLOCKQUOTE>
<P>Passare un valore di NULL come valore per il colore di primo piano (fore), di sfondo (back)
o per il font, farà sì che vengano usati i valori che sono specifici dello
stile del widget. Usare un valore di <CODE>-1</CODE> per il parametro lunghezza (length) avrà
come risultato l'inserzione dell'intera stringa di testo.
<P>Il widget di testo è uno dei pochi in GTK che vengono disegnati dinamicamente, fuori
dalla funzione gtk_main. Ciò significa che tutti i cambiamenti al suo contenuto
avranno effetto immediato. Questo può essere un comportamento indesiderabile quando
si stanno facendo delle modifiche multiple al contenuto del widget. Per permettere di
operare cambiamenti multipli sul widget senza che esso si ridisegni continuamente,
si può congelare il contenuto della finestra, in modo che esso interrompa
temporaneamente di ridisegnarsi. Potremo poi sbloccare il widget una volta che tutte
le modifiche sono state completate.
<P>Le due seguenti funzioni fanno il congelamento e lo sbloccaggio (thaw) del widget:
<P>
<BLOCKQUOTE><CODE>
<PRE>
void gtk_text_freeze (GtkText *text);
void gtk_text_thaw (GtkText *text);
</PRE>
</CODE></BLOCKQUOTE>
<P>Il testo può essere cancellato nel widget di testo a partire dal punto di
inserimento corrente usando le seguenti due funzioni, andando all'indietro (backward)
o all'avanti (forward):
<P>
<BLOCKQUOTE><CODE>
<PRE>
gint gtk_text_backward_delete (GtkText *text,
guint nchars);
gint gtk_text_forward_delete (GtkText *text,
guint nchars);
</PRE>
</CODE></BLOCKQUOTE>
<P>Quando si vuole recuperare il contenuto del widget di testo, è
disponibile la macro <CODE>GTK_TEXT_INDEX(t, index)</CODE>, che permette di
ottenere il crattere alla posizione <CODE>index</CODE> all'interno del widget
<CODE>t</CODE>.
<P>Per ecuperare un blocco di testo più ampio, si usa la funzione:
<P>
<BLOCKQUOTE><CODE>
<PRE>
gchar *gtk_editable_get_chars (GtkEditable *editable,
gint start_pos,
gint end_pos);
</PRE>
</CODE></BLOCKQUOTE>
<P>Questa è una funzione della classe madre del widget di testo. Un valore
di -1 per <CODE>end_pos</CODE>, sta ad indicare la fine del testo. L'indice per il
testo parte da 0.
<P>Questa funzione alloca una nuova porzione di memoria per il blocco di testo,
per cui non dimenticate di liberarla con una chiamata a g_free quando non
ne avete più bisogno.
<P>
<H2><A NAME="ss11.3">11.3 Keyboard Shortcuts</A>
</H2>
<P>Il widget di testo mette a disposizione un certo numero di scorciatoie da tastiera
per le più comuni operazioni di modifica, movimento e selezione. Si possono
utilizzare con delle combinazioni che comprendono i tasti Control e Alt.
<P>Oltre a queste, mantenendo premuto il pulsante Control mentre si usano i tasti di
movimento del cursore, causerà lo spostamento parola per parola invece che
carattere per carattere. Mantenere invece premuto il tasto Shift mentre si sposta il
cursore, causerà l'estensione della selezione.
<P>
<H3>Scorciatoie per il movimento</H3>
<P>
<UL>
<LI> Ctrl-A Inizio della linea</LI>
<LI> Ctrl-E Fine della linea</LI>
<LI> Ctrl-N Prossima linea</LI>
<LI> Ctrl-P Linea precedente</LI>
<LI> Ctrl-B Indietro di un carattere</LI>
<LI> Ctrl-F Avanti di un carattere</LI>
<LI> Alt-B Indietro di una parola</LI>
<LI> Alt-F Avanti di una parola</LI>
</UL>
<P>
<H3>Scorciatoie per la modifica</H3>
<P>
<UL>
<LI> Ctrl-H Cancella il carattere precedente (Backspace)</LI>
<LI> Ctrl-D Cancella il carattere successivo (Delete)</LI>
<LI> Ctrl-W Cancella la parola precedente</LI>
<LI> Alt-D Cancella la parola successiva</LI>
<LI> Ctrl-K Cancella fino alla fine della linea</LI>
<LI> Ctrl-U Cancella la linea</LI>
</UL>
<P>
<H3>Scorciatoie per la selezione</H3>
<P>
<UL>
<LI> Ctrl-X Taglia</LI>
<LI> Ctrl-C Copia</LI>
<LI> Ctrl-V Incolla</LI>
</UL>
<P>
<P>
<HR NOSHADE>
<A HREF="gtk_tut_it-12.html">Avanti</A>
<A HREF="gtk_tut_it-10.html">Indietro</A>
<A HREF="gtk_tut_it.html#toc11">Indice</A>
</BODY>
</HTML>
|