| OpenLab Studio | >= 0.10.x |
| OpenLab SDK | >= 1.0.x |
Generale #
La gestione della UI è affidata alla classe WindowsManager. Per la UI viene usato il framework WPF. E’ pensata per gesitre in maniera centrale la UI di OpenLab Studio. Viene usata, ad esempio, per creare nuove view, recuperare i control della UI, fornisce i metodi per interagire con le varie parti della UI, etc. Questa classe gestisce i workspace, il menu di navigazione(albero a sinistra), gli shortkey, etc.
Gestione dei Control #
Per non passare le istanze dei componenti della ui( Control ) su e giu nel codice e per esporre i componenti che devono interagire ed essere recuperati in varie parti della UI, quisti vengono aggiunti ed estratti da una lista che associa un nome e l’istanza del componente, usando un Dictionary. E’ possibile quindi in qualsiasi punto aggiungere o estrarre un componente tramite il nome che gli è stato assegnato.
Esporre un Control #
I Component vengono istanziati all’interno di altre classi, spesso altri UserControl, ad esempio un TreeView può essere istanziato all’interno di un TableLayout, questo lo renderebbe nascosto all’esterno del TreeView a meno di renderlo public, oppure quando abbiamo più UserControl a cascata uno dentro l’altro saremmo costretti rendere public tutti gli UserControl intermedi per accedere a quelli più interni.
Per evitare questo comportamento ed esporre quello che serve e renderlo accessibile a livello globale della UI è possibile usare il metodo addUIComponent legando un nome all’istanza di un Control o sua derivata(Control è la classe base degli UserControl), come in questo esempio:
public partial class TextEditor : UserControl
{
private TextBox txtContent;
private FlowLayout layout;
[...]
public void createNewTextEditor(){
txtContent = new TextBox();
windowsManager.addUIComponent("txtContent", txtContent, false);
}
}
Ora tramite il WindowsManager è possibile recuperare l’istanza di TextBox(txtContent) in modo globale da qualsiasi punto che abbia accesso all’istanza di WindowsManager.
Una volta che un componente è stato esposto non è più possibile nasconderlo(rimuoverlo dal WindowsManager)
Il terzo parametro(booleano) di addUIComponent indica, nel caso il Component fosse già esposto, deve essere sovrascritto o no. Se impostato su false e il Component esiste viene lanciato un eccezione Exception
Recupero di un Component #
Per recuperare un Component dal WindowsManager è possibile utilizzare il metodo getUIComponent, che tramite il nome assegnato al Component restituisce un oggetti di tipo Control di cui va fatto il casting nel tipo giusto del Component.
L’instanza di un Component può diventare nulla oppure non esistere nel WindowsManager, nel primo caso viene lanciata un eccezione NullReferenceException, nel secondo un KeyNotFoundException
Nell’esempio seguente viene recuperato il RichTextBox esposto prima, all’interno di un plugin:
public class PluginTest : Plugin
{
[...]
public void test()
{
try
{
((TextBox)windowsManager.getUIComponent("TxtContent")).Text = "Hello world!!!";
}catch(NullReferenceException){
// Instance of Component is null
}catch(KeyNotFoundException){
// Component name not found
}
}
}
Lista dei Component esposti #
OpenLab studio stesso espone molti componenti ma è possibile che anche i plugin espongano i loro. E’ possibile recuperare la lista dei Component esposti tramite il metodo getUIComponentsNames che restituisce un array di stringhe con i nomi dei Component.
Gestione delle View #
Le View sono le schede del ViewsContainer, una View può contenere qualsiasi cosa, strumenti, grafici, editor di testo, etc. Possono essere dei tab nel ViewsContainer oppure essere staccati e diventare delle finestre.
Selezionare una View #
Selezionare una view significa renderla visibile. Se è un tab questo verrà selezionato mentre, se è una finestra, verrà portata in primo piano. Per farlo è possibile usare il metodo selectView che prende come argomento il nome della view oppure un l’instanza di una view.
windowsManager.selectView("viewTest");
ols.ui.selectViewAggiungere una View #
E’ possibile aggiungere una view tramite il metodo addView, questo metodo prende come argomento il nome univoco della view, il titolo della view, l’istanza della classe Control con i componenti da visualizzare nella view, e un parametri booleani show, default true
Se esiste già una view con lo stesso nome viene lanciata un eccezione ViewAlreadyExistException.
Il metodo addView aggiunge la view al workspace corrente e al Nav Menu System, sotto la voce Current workspace->Views.
Nell’esempio seguente viene inserita una nuova view intitolata Test, con un label all’interno e viene selezionata.
Label lbl = new Label(),
lbl.Content = "test";
windowsManager.addView("test","Test",lbl,true);
Rimuovere una View #
Per rimuovere una view è possibile usare il metodo removeView. Questo prende come argomento il nome oppure l’istanza della view, se la view non esiste viene lanciata un eccezione ViewNotExistException.
windowsManager.removeView("test");