# Toolkit

Il termine toolkit (letteralmente «cassetta degli attrezzi») in informatica è utilizzato per riferirsi ad un insieme di strumenti software di base, in genere librerie, usati per facilitare e uniformare lo sviluppo di applicazioni derivate più complesse.
La maggior parte dei toolkit widget include inoltre il proprio motore di rendering. Questo motore può essere specifico per un determinato sistema operativo o sistema a finestre o contenere back-end per interfacciarsi con più sistemi multipli e anche con API di rendering come OpenGL, OpenVG o EGL. L'aspetto degli elementi di controllo grafici può essere codificato o disaccoppiato, consentendo agli elementi di controllo grafici di essere a tema/skin.

## Panoramica

Alcuni toolkit possono essere utilizzati da altre lingue impiegando associazioni linguistiche. I costruttori di interfacce grafiche come ad esempio Glade Interface Designer facilitano la creazione di GUI in maniera WYSIWYG utilizzando un linguaggio di markup dell'interfaccia utente come in questo caso GtkBuilder.
La GUI di un programma è comunemente costruita in modo a cascata, con elementi di controllo grafici aggiunti direttamente uno sopra l'altro.
La maggior parte dei toolkit dei widget utilizza la programmazione guidata dagli eventi come modello di interazione. Il toolkit gestisce gli eventi dell'utente, ad esempio quando l'utente fa clic su un pulsante. Quando viene rilevato un evento, viene trasmesso all'applicazione dove viene gestito. La progettazione di questi toolkit è stata criticata per aver promosso un modello di azione evento troppo semplificato, portando i programmatori a creare codice applicativo soggetto a errori, difficile da estendere ed eccessivamente complesso. Le macchine a stati finiti e le macchine a stati gerarchiche sono state proposte come modelli di alto livello per rappresentare i cambiamenti di stato interattivi per programmi reattivi.

## Sistemi di finestre

Una finestra è considerata un elemento di controllo grafico. In alcuni sistemi a finestre, le finestre vengono aggiunte direttamente al grafico della scena (Canvas) dal gestore delle finestre e possono essere impilate e sovrapposte l'una sull'altra in vari modi. Ogni finestra è associata a una particolare applicazione che controlla i widget aggiunti alla sua tela, che possono essere guardati e modificati dalle applicazioni associate.

## Layout manager

I gestori di layout (layout manager) sono componenti software utilizzati nei toolkit widget che hanno la capacità di disporre gli elementi grafici di controllo in base alle loro posizioni relative senza utilizzare unità di distanza. I toolkit di widget che forniscono questa funzione possono generalmente essere classificati in due gruppi:
* Quelle in cui il comportamento del layout è codificato in appositi contenitori grafici. Questo è il caso di XUL e del toolkit widget di .NET Framework (sia in Windows Form che in XAML).
* Quelli in cui il comportamento del layout è codificato nei gestori di layout, che possono essere applicati a qualsiasi contenitore grafico. Questo è il caso del toolkit del widget Swing che fa parte dell'API Java.

### Esempio in XAML
## Toolkit usati da applicazioni famose

Alcuni toolkit specifici sono:
* Abstract Window Toolkit
* Accessibility Toolkit
* Adventure Game Toolkit
* B-Toolkit
* BOOP Toolkit
* Claro toolkit
* Dojo Toolkit
* FOX toolkit
* Globus Toolkit
* GTK, the GIMP Toolkit
* GWT, Google Web Toolkit
* Harmony toolkit
* Insight Segmentation and Registration Toolkit
* Jumpstart Enterprise Toolkit
* Lisp Widget Toolkit o Lisp Toolkit
* Luxor (toolkit)
* Molecular Modelling Toolkit
* Multidimensional hierarchical toolkit
* Sun Java Wireless Toolkit
* OpenGL Utility Toolkit
* Qt
* Motif
* Natural Language Toolkit
* Portable, Extensible Toolkit for Scientific Computation
* RWTH FSA Toolkit
* Rialto Toolkit
* Scedu Tender Readiness Toolkit
* Sprite Animation Toolkit
* Standard Widget Toolkit
* Synthesis Toolkit
* Template Toolkit
* TIBCO General Interface AJAX Rich Internet Application Toolkit
* The Coroner's Toolkit
* User Interface Toolkit (UIM)
* X Toolkit