Guida Gtk+ a puntate ( XVI parte )
20 giorni di silenzio.. son tanti. L’estate, intesa come periodo di relax, per me deve ancora iniziare purtroppo.
Vabbè, non ho molta voglia di parlare a quest’ora. Occupiamoci di questa puntata alle Gtk+. Oggi parliamo del widget “GtkTextView” ovvero il widget che permette di ottenere dall’utente interi testi ( diciamo che si può considerare grosso modo un GtkEntry multilinea ).
Vista Testuale ( GtkTextView )

Una GtkTextView è il widget che potete vedere nell’immagine a fianco. Molto utile quando si deve richiedere all’utente non una stringa ma un intero testo su più linee. La sua creazione è molto semplice e ci dà l’opportunità di creare anche dei tag, ovvero creare degli effetti al testocome l’evidenziazione di alcune parole quando si cerca una stringa, delle stringhe sottolineate o in grassetto o in corsivo e così via..
Per completezza bisogna dire che questo widget sostituisce il vecchio GtkText ormai deprecato e ne sconsiglio vivamente l’utilizzo in quanto è molto, ma molto lento e poco gestibile. Questo nuovo widget è composto da due parti, la parte “grafica” chiamata GtkTextView e la parte del buffer del testo preso in input chiamata GtkTextBuffer che è quella che noi utilizzeremo di più per le operazioni “pratiche”.
Ma non corriamo troppo, concentriamoci sul widget GtkTextView prima di tutto però premetto che non tratterò tutte le funzioni ma solo quelle principali e basilari, perchè è un tipo di widget che lavora insieme ad altri widget che rendono il tutto molto grande e lungo da affrontare in queste guide a puntate.
La creazione di una textview, con buffer, può avvenire in questo modo:
1 2 3 4 5 | GtkWidget *textview; GtkTextBuffer *buffer; textview = gtk_text_view_new (); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textview)); |
Andiamo a vedere subito gli attributi che possiamo dare a questo widget:
- Il come e quando andare a capo tramite la funzione gtk_text_view_set_wrap_mode () ( ricordatevi che il primo argomento in questi casi è sempre il widget a cui applicare l’effetto, nel nostro caso la textview convertita tramite la macro GTK_TEXT_VIEW () ) , ci sono quattro metodi disponibili:
- GTK_WRAP_NONE: non va mai a capo a meno che l’utente non prema invio, o noi inseriamo il carattere \n.
- GTK_WRAP_CHAR: va a capo appena il carattere supera la larghezza della textview
- GTK_WRAP_WORD: manda a capo l’ultima parola che non può essere visualizzata nella larghezza della textview.
- GTK_WRAP_WORD_CHAR: manda a capo l’ultima parola che non può essere visualizzata nella larghezza della textview, se possibile, altrimenti manda a capo l’ultimo carattere non visualizzabile. ( Ciò succede quando il testo è composto da un’unica parola troppo lunga per l’intera riga ).
Ricordo comunque che l’”a capo” di cui parlo è un “a capo” visivo, nel buffer non verrà inserito il ‘\n’.
- Se lasciare l’opportunità all’utente di inserire del testo tramite la funzione gtk_text_view_set_editable () specificando nel secondo parametro TRUE nel caso si volesse far modificare il testo all’utente o FALSE per il contrario. Utile quando si utilizza una GtkTextView solo per riportare dei messaggi remoti ( ad esempio in una finestra di chat ).
- Se visualizzare il punto di inserimento ( di solito segnato col trattino lampeggiante ) con la funzione gtk_text_view_set_cursor_visible (), anche qui TRUE nel caso si volesse visualizzare, altrimenti FALSE.
- Se impostare il cursore nella modalità sovrascrittura ( di solito l’utente può attivarla o disattivarla premendo Ins ) con la funzione gtk_text_view_set_overwrite (), sempre il valore booleano come secondo argomento per specificare come impostare il cursore.
- Quanto spazio lasciare tra sopra ( above ) o sotto ( below ) alle righe in pixel tramite la funzione gtk_text_view_set_above\below_lines (). Come secondo parametro il numero di pixel da lasciare come margine.
- Quanto spazio lasciare tra le parole ( ovvero la larghezza in pixel dello spazio ) con la funzione gtk_text_view_set_pixels_inside_wrap (). Sempre come secondo argomento la misura specificata in pixel.
- Il tipo di giustificazione che deve avere il testo con la funzione gtk_text_view_set_justification () che richiede come secondo argomento uno dei seguenti valori:
- GTK_JUSTIFY_LEFT: allinea il testo a sinistra.
- GTK_JUSTIFY_RIGHT: allinea il testo a destra.
- GTK_JUSTIFY_CENTER: allinea il testo al centro.
- GTK_JUSTIFY_FILL: il testo viene distribuito in maniera uniforme su tutta la linea.
- I pixel di margine da quello destro e\o da quello sinistro con la funzione gtk_text_view_set_left\right_margin (). Secondo argomento il numero di pixel di margine.
- Se accettare i tab o meno con la funzione gtk_text_view_set_accepts_tab (). Valore booleano come secondo argomento per decidere l’azione.
Tutte queste funzioni naturalmente hanno la corrispondente che al posto di _set_ hanno _get_ per sapere quale valore è in quel momento in uso.
Andiamo a vedere un’ultima cosa su questo widget, ovvero i segnali principali
- “backspace”: quando si inserisce, o l’utente esegue, un backspace.
- “copy clipboard”, “cut clipboard” e “paste clipboard”: quando si copia o si taglia qualcosa dal testo della textview e quando si incolla qualcosa.
- “move cursor”: quando il punto di inserimento viene spostato.
- “select-all”: quando si seleziona tutto il testo
- “insert-at-cursor”: quando l’utente scrive qualcosa.
- “toggle-overwrite”: quando si cambia il cursore dalla modalità di sovrascrittura a quella di inserimento, o viceversa.
Fine Sedicesima Puntata
Per il momento mi fermo qua, sia perchè mi son stancato sia perchè vorrei trattare l’argomento dei tag e del buffer del testo con più calma in una puntata ad hoc.
Ciauz
Ho provato a giustificare con la funzione
GTK_JUSTIFY_YOURSELF, ma mi da codice errore “function not valid”. Esiste un’alternativa?
lol