Guida Gtk+ a puntate ( XIII parte )
Dopo un lungo momento di silenzio a causa della scrittura della documentazione per Imel, continuiamo la nostra guida alle Gtk+. In questa puntata vedremo i label, loro uso e “consumo” ![]()
Del testo con delle Gtk+.. ( GtkLabel )
Un label altro non è che un testo, o una stringa, che si può visualizzare all’interno di un’interfaccia grafica realizzata con le Gtk+.
Un label minimale, ovvero del testo senza alcun effetto è semplicissimo da creare:
1 2 3 | GtkWidget *label; label = gtk_label_new ("Salve, sono un label!"); |
Il codice mi sembra che sia abbastanza esplicito e non abbia bisogno di commenti, andiamo invece ora a vedere come si può creare un label più ricercato. Ovvero con un colore diverso e in grassetto.
1 2 3 4 | GtkWidget *label; label = gtk_label_new (NULL); gtk_label_set_markup (GTK_LABEL (label), "<span color=\"#990000\" weight=\"bold\">Ciao, io sono un label con markup!</span>"); |
Dunque il markup che abbiamo usato è molto simile all’html, ed è il così chiamato “Pango Text Attribute Markup Language” i cui tag possono essere trovati in questa pagina.
Passiamo ora un attimo agli attributi che può avere un label:
- Selezionabile: Un label può essere, o meno, selezionabile dall’utente. Per stabilire esplicitamente questa opzione si può ricorrere alla funzione gtk_label_set_selectable che riceve come primo argomento il label a cui impostare l’opzione, e come secondo TRUE o FALSE dipendentemente dall’attributo che gli si vuol dare.
- Giustificabile:Il testo di un label, se composto da più righe, può essere posto tutto a sinistra ( GTK_JUSTIFY_LEFT ), tutto al centro ( GTK_JUSTIFY_CENTER ), tutto a destra ( GTK_JUSTIFY_RIGHT ) o distribuito per tutta la linea ( GTK_JUSTIFY_FILL ).
Quest’operazione può venire eseguita tramite la funzione gtk_label_set_justify che riceve come primo parametro il label a cui eseguire l’operazione e come secondo il tipo di giustificazione da dargli. - Compresso: Ovvero, se il label ha una lunghezza superiore a quella del contenitore viene compattato aggiungendo tre puntini nel punto in cui è stato compresso. Questo non va a influire su quando il label viene copiato in quanto nella clipboard verrà inserito tutto il testo del label e non la sua versione compressa. La funzione per far ciò è gtk_label_set_ellipsize che riceve come primo argomento il label a cui applicare l’operazione e come secondo argomento il punto in cui fare la compressione che può avvenire: all’inizio ( PANGO_ELLIPSIZE_START ), al centro ( PANGO_ELLIPSIZE_MIDDLE ) e alla fine ( PANGO_ELLIPSIZE_END ).
- Spezzato: Se una riga di un label supera la lunghezza del contenitore può venire spezzato mandando a capo le parole, o i caratteri, che superano la lunghezza. La funzione in questo caso è gtk_label_set_line_wrap_mode per impostare il tipo di “spezzamento” e gtk_label_set_line_wrap per abilitarlo. Tutte e due le funzioni ricevono come primo parametro il label a cui applicare l’effetto, come secondo parametro invece la prima può ricevere i seguenti parametri: PANGO_WRAP_WORD ( per mandare a capo le parole in eccesso ), PANGO_WRAP_CHAR ( per mandare a capo i caratteri in eccesso ), PANGO_WRAP_WORD_CHAR ( per mandare a capo le parole in eccesso dove possibile, se non è possibile perchè una sola parola è troppo lunga manda a capo i caratteri in eccesso ). La seconda funzione riceve invece come secondo parametro TRUE se si vuol utilizzare il WRAP del testo, altrimenti FALSE.
- Ruotato: Si può anche dare un’inclinazione al label da 0° a 90° tramite la funzione gtk_label_set_angle, che riceve come primo argomento il label a cui applicare la rotazione e come secondo argomento l’angolo di rotazione in double.
Esistono anche dei segnali collegabili ad un label e sono i seguenti, il più utile tra questi è “copy-clipboard” che viene inviato quando il testo di un label viene copiato ( associato di solito alla scorciatoia CTRL + C ).
Fine Tredicesima Puntata
Anche questa è fatta, a questo punto penso che ci siano le basi per iniziare a creare delle interfacce grafiche minimali per i vostri programmi. Alla prossima.
Ciauz
Complimenti..per questa guida..quando avrò tempo studierò qui =)