Gli editor presentano spesso dei profili del contenuto corrispondenti che forniscono una visualizzazione strutturata del contenuto dell'editor e assistono l'utente durante l'esplorazione.
Il workbench fornisce a questo scopo una visualizzazione Struttura standard. L'utente del workbench controlla la visibilità di questa visualizzazione attraverso il menu Prospettiva > Mostra visualizzazione.
Poiché il generico TextEditor non è in possesso di alcuna informazione relativa alla struttura del proprio testo, non può fornire la funzionalità per una visualizzazione di struttura interessante. Quindi, la visualizzazione Struttura predefinita, riportata di seguito, non è in grado di fornire caratteristiche interessanti.
I plug-in possono estendere TextEditor al solo scopo di aggiungere una pagina di profilo del contenuto personalizzata alla visualizzazione Struttura. Questo approccio viene utilizzato nell'esempio dello strumento readme del workbench. ReadmeEditor sovrappone alcuni metodi in TextEditor per fornire il proprio profilo.
Il profilo per un editor viene specificato quando il workbench richiede un adattatore di tipo IContentOutlinePage.
public Object getAdapter(Class key) {
if (key.equals(IContentOutlinePage.class)) {
IEditorInput input = getEditorInput();
if (input instanceof IFileEditorInput) {
page = new
ReadmeContentOutlinePage(
((IFileEditorInput)input).getFile());
return page;
}
}
return super.getAdapter(key);
}
Quando un ReadmeEditor viene aperto (su un file .readme), viene visualizzato il corrispondente profilo del readme (se l'utente del workbench ha aperto la visualizzazione Struttura).
Una pagina di profilo del contenuto deve implementare IContentOutlinePage. Questa interfaccia combina la capacità di notifica ai listener di modifica della selezione (ISelectionProvider) con la funzionalità di rappresentare una pagina di visualizzazione (IPage). I profili del contenuto vengono generalmente implementati utilizzando i visualizzatori JFace. L'implementazione predefinita di un profilo del contenuto (ContentOutlinePage) utilizza un visualizzatore di struttura JFace per visualizzare una rappresentazione gerarchica della struttura. Questa rappresentazione è adatta per molti profili strutturati, incluso ReadmeContentOutlinePage.
L'aspetto di ReadmeContentOutlinePage è simile alla visualizzazione delle sezioni del readme, riportata di seguito, che è stata descritta durante l'implementazione dell'estensione delle visualizzazioni readme.
In effetti, l'unica vera differenza è che il profilo riporta una visualizzazione gerarchica delle sezioni, mentre la visualizzazione delle sezioni del readme riporta un elenco piano delle sezioni. Non è quindi strano che l'implementazione del profilo è molto simile a quella della visualizzazione. L'unica differenza è che il profilo utilizza un visualizzatore di struttura anziché un visualizzatore di elenco.
Quando la pagina della struttura è stata creata dall'editor, l'elemento di input dell'editor è stato trasmesso al costruttore. Questo input può spesso essere trasmesso direttamente al visualizzatore della pagina della struttura, come avviene di seguito.
public void createControl(Composite parent) {
...
TreeViewer viewer = getTreeViewer();
viewer.setContentProvider(new WorkbenchContentProvider());
viewer.setLabelProvider(new WorkbenchLabelProvider());
viewer.setInput(getContentOutline(input));
...
}
La creazione del visualizzatore di struttura viene ereditata da ContentOutlinePage. Gli stessi provider di contenuto e di etichetta utilizzati nella visualizzazione delle sezioni del readme vengono qui utilizzate e la struttura per il contenuto viene costruita utilizzando lo stesso ReadmeModelFactory utilizzato per costruire le sezioni per la visualizzazione.
private IAdaptable getContentOutline(IAdaptable input) {
return
ReadmeModelFactory.getInstance().getContentOutline(input);
}
Questo è tutto!
Naturalmente, il profilo in sé non fornisce alcuna funzionalità interessante. La selezione delle sezioni non permette di esplorare il testo nell'editor. Allora a cosa può servire questo profilo del contenuto? Si può obiettare che il profilo del contenuto non fornisce alcuna funzionalità (a parte la rappresentazione gerarchica) che non sia già stata offerta nella visualizzazione delle sezioni. Non si sarebbe potuto utilizzare un visualizzatore di struttura nella visualizzazione delle sezioni al posto di un profilo che non svolge alcuna funzione?
Si tratta solo di un esempio. In effetti, ReadmeContentOutlinePage viene fornito esclusivamente per dimostrare come sia possibile personalizzare un profilo del contenuto per un editor di testo, pur non essendo esso stesso un buon esempio di profilo del contenuto. Gli utenti si aspettano che i profili del contenuto possano assisterli nell'esplorazione del contenuto dell'editor, quindi, la migliore decisione sarebbe di utilizzare la visualizzazione delle sezioni, se lo scopo è solo quello di visualizzare la struttura del contenuto.
Per trovare funzioni di struttura del contenuto più interessanti è sufficiente le sottoclassi di ContentOutlinePage e i relativi editor corrispondenti. Il modello più generico è che un editor fornisce una pagina di struttura e registra su di essa gli eventi di selezione. Mentre le voci vengono selezionate nella struttura del contenuto, l'editor si aggiorna in modo appropriato.
L'editor di codice sorgente Java (fornito con JDT) illustra un interessante profilo del contenuto. Il profilo Java presenta una visualizzazione strutturata di codice sorgente Java e consente all'utente di esplorare le dichiarazioni, i metodi e i campi nel corrispondente editor. Quando il profilo riporta gli eventi di selezione, l'editor Java aggiorna il proprio righello verticale per mostrare il punto in cui gli elementi contenuti nel profilo sono posizionati nel codice sorgente.