OpenLab Studio | >= 0.10.x |
OpenLab SDK | >= 0.10.x |
Generale #
La gestione della UI è affidata alla classe WindowsManager. 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 istanzia e configura tutta la UI chimando i metodi OLSSetup e OLSUpdate dei vari control, gestisce i workspace, il menu di navigazione(albero a sinistra), gli shortkey, etc.
Gestione dei Component #
I Component sono gli UserControl
o Control
della UI. Per non passare le istanze dei componenti 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 Component #
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 RichTextBox txtContent; private FlowLayout layout; [...] public void createNewTextEditor(){ txtContent = new RichTextBox(); layout = new FlowLayout(); layout.Controls.Add(txtContent); Controls.Add(layout); windowsManager.addUIComponent("text_container", txtContent, false); } }
Ora tramite il WindowsManager
è possibile recuperare l’istanza di RichTextBox
(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 ArgumentException
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 { ((RichTextBox)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.
Selezionare una View #
Selezionare una view significa renderla visibile. Per farlo è possibile usare il metodo selectView
che prende come argomento il titolo della view oppure un l’instanza di una view
windowsManager.selectView("Test");
Aggiungere una View #
E’ possibile aggiungere una view tramite il metodo addView
, questo metodo prende come argomento il titolo della view, il Component(Control
) e due parametri booleani selectAddedView
, default true
e showIfViewExist
, default true
.
Se esiste già una view con il titolo passato, e showIfViewExist
è true
, la view che esiste viene selezionata. Se showIfViewExist
è false
viene lanciata un eccezione ViewAlreadyExistException
.
Se non esiste una view con il titolo passato, e selectAddedView
è true
, la view appena inserita viene selezionata, se invece è false
, viene inserita la nuova view ma rimane selezionata quella attuale.
Il metodo addView
aggiunge la view al workspace corrente e al nav menu, sotto la voce Views Opened
.
Nell’esempio seguente viene inserita una nuova view intitolata Test
windowsManager.addView("Test");
Rimuovere una View #
Per rimuovere una view è possibile usare il metodo removeView
. Questo prende come argomento il titolo, se la view non esiste viene lanciata un eccezione ViewNotExistException
.
Prende come argomento il titolo della view che deve essere selezionata dopo la rimozione, di default viene selezionata la view inserita prima di quella rimossa. Se invece il titolo della view da selezionare non esiste viene lanciata un eccezione ViewNotExistException
.
windowsManager.removeView("Test");
#
Gestione del Nav Menu #
Il menu di navigazione(sulla sinistra) permette l’accesso ad ogni funzione di OpenLab Studio. E’ diviso in schede che possono essere nascosce o mostrate dalla voce Windows
della scheda System
. I plugin possono aggiungere voci al menu di navigazione sia nella radice che nelle voci predefinite
Aggiungere/rimuovere voci a System -> Windows #
La voce Windows
elenca tutte le pagine, View, o altro che non siano strumenti che può essere aperto dall’utente, come il log viewer o le schede System
del menu di navigazione.
E’ possibile aggiungere delle voci che aprano delle view nel ContentPanel
, che aprano delle finestre(Form) o che eseguano delle operazioni custom.
Per aggiungere una voce che apra una view al click usare il metodo navWindowsAvailableAdd
che prende come argomenti il titolo della voce( e della view), e il Control
che verrà inserito nella view:
navWindowsAvailableAdd("test", control);
Per aggiungere una voce che apra una finstra(form) usare il metodo navWindowsAvailableAdd
che prende come argomenti il titolo della voce, il Form
e un valore booleno(opzionale, default=false) che indica se la finestra deve essere aperta in modalità esclusiva(dialog).
navWindowsAvailableAdd("Test", form, true);
In altri case è necessario creare una voce che esegua un compito diverso dall’aprire una finstra come, ad esempio, mostrare la scheda System
nel menu di navigazione, sempre con il metodo navWindowsAvailableAdd
, passando come primo argomento il titolo della voce e come secondo il nome di un metodo o implementando un event handler, l’event handler deve ritornare un valore booleano, di seguito l’esempio descritto sopra:
windowsManager.navWindowsAvailableAdd("System", () => { ((AdvanceTabControl)windowsManager.getExposedUIComponent("MenuNav")).ShowTab((TabPage)windowsManager.getExposedUIComponent("NavTabSystem")); return true; });
In tutti e tre i casi vengono lanciati gli eventi ui.nav.windows.available.add
prima e ui.nav.windows.available.added
dopo.
Per rimuovere delle voci usare il metodo navWindowsAvailableRemove
, prende come argomento il titolo della voce:
navWindowsAvailableRemove("Test");