Salta al contenuto
Nessun risultato
  • Account
  • Articoli e libri
  • bbpress template
  • Calcolatrice legge di Ohm
  • Calcolatrici e convertitori
  • Convertitore Farad condensatori
  • Convertitore Ohm resistenze
  • Convertitore sistema numerico
  • Datasheet
  • Download
  • GeXY… Idea!
  • Login
  • Password Reset
  • Privacy e condizioni
  • Progetti
  • Video list
GeXY
Login/registrati
  • Progetti
  • Forum
  • Risorse
    • Datasheets
    • Calcolatrici & convertitori
    • Libri & articoli
    • Video
GeXY

OpenLab Developer

9
  • Implementare un logger storage
  • Creare un plugin base

OpenLab Studio Developer

7
  • Gestore degli errori
  • Schemi validazione configurazione
  • Elenco eventi standard
  • Logger standard
  • Logger base
  • Gestore degli eventi
  • Gestore della UI
View Categories
  • Home
  • OpenLab Docs
  • OpenLab Developer
  • OpenLab Studio Developer
  • Gestore della UI

Gestore della UI

6 min read

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");

 

Updated on 05/09/2025

What are your Feelings

  • Happy
  • Normal
  • Sad

Share This Article :

  • Facebook
  • X
  • LinkedIn
  • Pinterest

Powered by BetterDocs

Table of Contents
  • Generale
  • Gestione dei Component
    • Esporre un Component
    • Recupero di un Component
    • Lista dei Component esposti
  • Gestione delle View
    • Selezionare una View
    • Aggiungere una View
    • Rimuovere una View
  • Gestione del Nav Menu
    • Aggiungere/rimuovere voci a System -> Windows
Copyright © 2025 - Tema WordPress sviluppato da CreativeThemes