Realizzare controlli Antonio Cisternino L’esperienza del bottone Il progetto Bottone (vedere bottone.zip) ci ha consentito di analizzare la struttura di un componente Osserviamo che: Si fa uso del bubbling degli eventi piuttosto che della delegation Esistono messaggi come Paint che non sono direttamente correlati all’input dell’utente Il disegno viene fatto utilizzando il contesto grafico: una struttura dati che consente il disegno Il punto di vista del controllo Un controllo: Ha uno stato interno È responsabile per disegnarsi nell’area che gli è stata assegnata Viene configurato mediante l’impostazione di proprietà del controllo Del proprio stato disegna solo la porzione visibile Quando lo stato viene modificato l’area del controllo viene invalidato causando la generazione del metodo paint Il controllo Eventi Stato Paint OnPaint Controllo Disegna usando contesto grafico Model-View-Controller Un pattern di programmazione molto ricorrente in grafica è il model-view-controller (MVC) Può essere istanziato a vari livelli nel dominio delle interfacce: a livello dell’applicazione, o dei componenti Elemento essenziale è il disaccoppiamento tra le azioni compiute da un utente (o un’altra porzione del programma) e la visualizzazione successiva: tutto è mediato dal modello che viene aggiornato e utilizzato per la visualizzazione aggiornata Il MVC Utente Usa Vede View Controller Aggiorna Manipola Model Dominio Applicativo del Problema Model Il modello è costituito dall’insieme di informazioni utilizzate per la visualizzazione Il suo compito è anche quello di mediare le azioni e le reazioni di un elemento grafico Questo è necessario poiché non tutti gli eventi sono causati da interazione diretta (ad esempio l’evento paint) View La vista è la porzione del modello che può essere rappresentata Tipicamente la callback associata all’evento paint è responsabile per la sua implementazione La vista di componenti grafici complessi può richiedere l’individuazione di un sottoinsieme del modello da visualizzare Le scroll-bar vengono spesso utilizzate per spostare la vista Controller Il controllo è la componente responsabile per mediare la manipolazione del modello Nel caso di controlli grafici è tipicamente costituito da un insieme di proprietà e dalle callback per la gestione degli eventi In generale si tratta dell’insieme di strumenti messi a disposizione dell’utente del componente grafico per la sua manipolazione Un esempio: l’albero Il modello del TreeView è un albero La sua vista è responsabile per mostrare solo la parte visibile Accanto ad ogni nodo interno il controllo consente di controllare lo stato di visualizzazione del sottoalbero Il bottone Eventi Stato Paint OnPaint Controllo Bottone Disegna usando contesto grafico Vista Modello