Guida Gtk+ a puntate ( XVII parte )
Ok, continuiamo a parlare di textview occupandoci questa volta del buffer chiamato GtkTextBuffer.
Iniziamo guardando le due azioni principali che di solito si eseguono: ottenere il testo inserito, inserire del nuovo testo ed eliminare parti di testo.
- Ottenere del testo:
In questo caso ci viene in aiuto la funzione gtk_text_buffer_get_text () che richiede il buffer del testo, il punto iniziale, il punto finale e se ottenere anche i “caratteri invisibili” ( sono presenti quando si inserisce un’immagine o un widget o altre cose all’interno della textview cose che noi tralasceremo ).
Il punto iniziale e il punto finale sono memorizzati in un GtkTextIter che possiamo ottenere ricorrendo alle funzioni sempre del widget GtkTextBuffer relative ad esso ( il primo argomento sarà sempre il nostro buffer ):
- gtk_text_buffer_get_iter_at_line (): il secondo argomento dovrà essere o un puntatore a GtkTextIter oppure l’indirizzo di un GtkTextIter, anche non inizializzato, e come terzo argomento il numero di linea del testo a cui posizionarlo.
- gtk_text_buffer_get_start_iter (): secondo argomento un puntatore a GtkTextIter, o come detto prima l’indirizzo di un GtkTextIter. Dopo questa funzione l’iter passato sarà posizionato all’inizio del testo contenuto nel buffer.
- gtk_text_buffer_get_end_iter (): come la funzione precedente. Dopo la sua chiamata l’iter passato sarà posizionato alla fine del testo contenuto nel buffer.
- gtk_text_buffer_get_bounds (): riceve due puntatori a GtkTextIter come secondo e terzo parametro. Dopo la sua chiamata il primo GtkTextIter passato sarà posizionato all’inizio del testo contenuto nel buffer, mentre il secondo alla fine.
Quindi per ottenere il testo possiamo scrivere un codice del genere:
1 2 3 4 5 6 7 | char *foo (GtkTextBuffer *buffer) { GtkTextIter start, end; gtk_text_buffer_get_bounds (buffer, &start, &end); return gtk_text_buffer_get_text (buffer, &start, &end, FALSE); } |
- Inserire del testo:
Per inserire un testo sono anche qui presenti diverse funzioni, il primo argomento sarà anche in questo caso il nostro buffer ( GtkTextBuffer * ).
- gtk_text_buffer_insert (): il secondo argomento sarà il punto ( sempre l’iter ) in cui inserire il nuovo testo, il terzo argomento sarà per l’appunto il testo e come ultimo argomento la lunghezza del testo che si può omettere inserendo -1 nel caso la stringa di testo è null-terminated.
- gtk_text_buffer_insert_at_cursor (): secondo argomento il testo da inserire nel punto in cui è presente il cursore, terzo argomento la lunghezza del testo o -1 se la si vuol far calcolare alla funzione la lunghezza della stringa ( che deve essere null-terminated ).
- gtk_text_buffer_set_text (): i parametri sono identici alla funzione precedente. Questa funzione però imposta il testo dell’intero buffer con quello passato come parametro, eliminando eventuali testi inseriti.
- Eliminare del testo:
Per eliminare del testo abbiamo una sola funzione ( ok, chi conosce le gtk+ sa che è presente anche un’altra funzione ma io qui tratto quelle principali, se volete dare altri consigli potete farlo nei commenti
) ovvero gtk_text_buffer_delete (). Questa funzione come primo parametro riceve sempre il nostro buffer, come secondo e terzo parametro invece riceve rispettivamente il punto iniziale e il punto finale del testo da eliminare. Si possono sempre usare le funzioni descritte prima nel paragrafo “Ottenere del testo” riguardo gli iter.
Per operare e modificare maggiormente gli iter esistono comunque le funzioni ad hoc per essi, non mi metto ad elencarle perché sono veramente tante e tutte sullo stesso livello di utilità, quindi vi lascio il link per guardarle dalla documentazione ufficiale.
Passiamo invece ora ai segnali del GtkTextBuffer che sono molto importanti a mio giudizio:
- ”changed” – Viene emesso quando il testo è cambiato
- ”insert-text” – Viene emesso quando è inserito del testo.
Elenco solo questi due perchè con gli altri andiamo a finire su altri argomenti che non voglio toccare ora. Per quanto riguarda il come strutturare le funzioni che vengono collegate a questi segnali andate come consigliato altre volte a guardare nella documentazione ufficiale che ci sono gli esempi di dichiarazione poi se avete domande chiedete pure nei commenti
Fine Diciassettesima Puntata
I tag sono un argomento relativamente semplice che preferisco affrontare, e quindi sprecare, ancora un’altra puntata. Non me ne vogliate se me la prendo con questa calma
Ciauz
Commenti recenti