I moderni sistemi di elaborazione con la potenza messa a disposizione permettono l'esecuzione di programmi che interagiscono con l'utente, in maniera molto semplificata, per mezzo dell'utilizzo di controlli grafici (pulsanti, caselle per l'inserimento di testo, menù a discesa …). Dal punto di vista del programmatore progettare una applicazione che interagisce con l'utente mediante una interfaccia grafica vuol dire tenere conto, a differenza di una applicazione che gira in un terminale, di un paradigma diverso: l'avvio delle azioni previste dal programma dipende dalle azioni compiute dall'utente. L'utente interagisce con i controlli grafici (per es. preme un pulsante) e questo evento avvia l'esecuzione di una serie di azioni associate all'evento (programmazione event driven). Il paradigma prevede la scrittura di opportune parti di codice (funzioni Callback) associate, per esempio, all'evento generato in seguito alla pressione di un pulsante.
L'affermarsi della programmazione ad oggetti ha consentito di costruire insiemi (i toolkit) di elementi grafici, funzioni e/o classi, che possono essere utilizzati per semplificare la programmazione di una GUI (Graphic User Interface): il programmatore ha a disposizione una serie di funzionalità già pronte che possono essere utilizzate per realizzare finestre, tab, pulsanti personalizzati. Il mondo del Software Libero mette a disposizione parecchi toolkit che hanno anche un ulteriore vantaggio: la disponibilità dei codici sorgenti ne permette l'utilizzo come base per lo sviluppo di software per piattaforme diverse (oltre Linux tipicamente Windows, MacOSX) senza preoccuparsi di modificare il sorgente. Si sviluppa una sola volta e, ricompilando, si ha a disposizione la versione, dello stesso programma, che gira su quel sistema operativo. La quasi totalità dei toolkit disponibili per ambiente Linux, e per vari linguaggi di programmazione, sono disponibili anche per l'installazione su altri S.O.
In questi appunti si introduce, con esempi di uso, il toolkit FLTK (si legge, come suggerito dall'autore, fulltick ed è acronimo di Fast Light ToolKit). Si tratta di un toolkit disponibile per tutte le piattaforme già elencate in precedenza, facile da apprendere, che permette notevole velocità di sviluppo e che basa i suoi punti di forza sulle caratteristiche di Fast (velocità) e Light (leggerezza). |
La velocità è ottenuta utilizzando in modo massiccio puntatori a classi che consentono di avere programmi reattivi ed evitando di appesantire la libreria definendo funzionalità che non hanno a che fare con la costruzione di GUI (per es. gestione stringhe o altro). Gli elementi grafici sono implementati per mezzo di classi, e spesso sono utilizzate caratteristiche del linguaggio C per sfruttarne la velocità.
La leggerezza è ottenuta includendo, nell'oggetto risultante dalla compilazione, solo le funzioni di libreria utilizzate effettivamente nell'applicazione sviluppata e non tutto il toolkit. Il programma compilato non necessita dell'installazione, nella macchina di destinazione, di librerie per poter girare: tutto quello che serve è già incluso nell'oggetto.
Un esempio indicativo di applicazione concreta delle doti di velocità e leggerezza di FLTK si può trovare nello sviluppo di un completo ambiente desktop, che gira anche in ambiente Linux, e che permette di utilizzare interfacce grafiche anche in sistemi hardware poco performanti e con poca RAM: EDE Equinox Desktop Environment.
Nell'immagine EDE gira in ambiente Minix.
L'installazione delle librerie comprende anche FLUID (Fast Light User Interface Designer. Si avvia con il comando: fluid) un applicativo che permette di disegnare la GUI di un programma, inserendo nella progettazione dell'interfaccia gli elementi grafici (Widgets) semplicemente selezionandoli da una finestra che ne mostra l'elenco. Le personalizzazioni del widget possono essere effettuate tramite la finestra delle proprietà associata al widget stesso. Il programma genera i sorgenti pronti per la compilazione. Si possono inserire anche ulteriori frammenti di codice utilizzando FLUID anche se, non essendo questo un ambiente di sviluppo, non è provvisto delle funzionalità di un editor per programmatori. Si tratta, appunto, di un Designer per interfacce grafiche. Si suggerirà in seguito un modo come utilizzarlo assieme, per esempio, ad Emacs. |
Una caratteristica di FLUID è che non genera tonnellate di codice sorgente di difficile comprensione e utili solo a se stesso come avviene per altri ambienti, ma soltanto il file sorgente e il file di intestazione del progetto su cui si lavora. Se il progetto si chiama prova.fl (fl è l'estensione utilizzata da FLUID), gli altri file generati saranno: prova.cxx (utilizza per default l'estensione cxx: una delle estensioni standard dei file sorgenti C++) e prova.h.
Nel toolkit è disponibile inoltre un comodo comando per la compilazione del progetto che provvede anche all'aggancio delle librerie necessarie.
fltk-config --compile prova.cxx
l'esecuzione della linea di comando provoca la generazione dell'eseguibile prova nella stessa directory dove si trova il sorgente e quindi in definitiva si avranno, oltre all'oggetto eseguibile: prova.fl (il sorgente per FLUID che contiene il disegno dell'interfaccia), prova.cxx (il programma principale con il codice per l'eseguibile), prova.h (l'intestazione con le inclusioni necessarie).