La classe Action

Da Gambas-it.org - Wikipedia.

(pagina a cura del membro Gianluigi del forum di Gambas-it.org) [Nota 1]

Come recita la guida in linea di Gambas, la Classe Action appartiene al componente gb.qt4 e consente di gestire le azioni definite nella Proprietà Action di molti controlli, è creabile e si comporta come un array statico di sola lettura.
Possiede quattro metodi statici e otto proprietà.

Per prima cosa occorre sgombrare subito il campo da un grosso equivoco e cioè che chi ha un desktop basato sulle librerie GTK debba creare applicazioni con quelle librerie, non è vero.
Un sistema operativo con un desktop GTK tipo Gnome è in grado di far girare benissimo applicazioni QT.
Gambas con le librerie QT normalmente funziona meglio e offre più stabilità.
Prima di scrivere una sola riga di codice occorre imparare a costruire le finestre del nostro progetto attraverso l'editor .form, l'Editor Menu e usando i contenitori, le barre dei pulsanti ecc.
Chi viene da un'esperienza precedente di programmazione potrebbe aver difficoltà a capire e cercare di creare finestre attraverso il codice o tentarne una gestione grafica.
Non fatelo, otterreste solo dei malfunzionamenti e tarderete di molto l'apprendimento del linguaggio.
Solo dopo aver compreso a fondo come si disegnano le finestre in Gambas e aver preso dimestichezza con i vari contenitori, potrete disegnare le vs. finestre attraverso il codice.

Per comprendere a fondo Action occorre capire bene come devono essere costruite le finestre.
Una finestra Gambas ben progettata deve partire dai contenitori e con molta probabilità dal componente gb.form.mdi (interfaccia multi documento) che implementa la classe Action espandendola, attiva il componente gb.Settings e aggiunge due nuovi componenti; il controllo ToolBar (barra dei pulsanti professionale) e il controllo Workspace che permette di inglobare in un contenitore a schede finestre di primo livello (per intenderci tipo il form FMain di un nuovo progetto).

Nota: La IDE di Gambas è disegnata così.

Bene, fatta questa indispensabile premessa vediamo Action più da vicino.

Una classica finestra Gambas si presenta con un menu e con una barra che normalmente mette a disposizione i pulsanti corrispondenti alle voci di menu con scorciatoie da tastiera. Action permette di riunire sotto un'unica azione sia il pulsante che il menu corrispondente; per esempio se noi abbiamo un menu Modifica con il sotto menu Annulla e il pulsante Annulla della barra, basterà assegnare alla proprietà Action di entrambi la stessa voce per esempio "undo" e poi nella classe della form inserire il seguente codice:

 Public Sub Action_Activate(sKey As String) As Boolean
   Select Case sKey
     Case "undo"
        ' venendo azionato sia dal menu che dal pulsante, il codice qui fa qualcosa
        ' per ripristinare le cose allo stato precedente.
      ...

Action mette a disposizione tra gli altri il metodo statico Configure.
Si può usare così avendo dato a menu e button l'action "shortcuts":

     Case "shortcuts"
       Action.Configure
     ...

Questo apre la finestra di dialogo Configure shortcuts che da modo all'utente di riconfigurare a proprio piacimento i tasti di scelta rapida; è la stessa finestra che usiamo nella IDE di Gambas e funziona alla stessa maniera:
cliccare sulla combinazione da cambiare nella colonna Shortcut, cancellare la voce agendo sul pulsantino, quindi agire sui tasti della nuova combinazione. Oppure:
si clicca sul pulsante Export, quello con la freccia verde rivolta verso il basso che salva nella nostra home un file di testo denominato <nome-programma>.shortcuts.
Navighiamo fino al file di testo, lo variamo come ci pare e lo salviamo.
Sempre dalla finestra Configure shortcuts clicchiamo sul pulsante Import, quello azzurro con la freccia rivolta verso l'alto, e il gioco è fatto.
Da ora in poi il programma reagirà alle nuove impostazioni.
La finestra Configure shortcuts mostra le icone, basta che ne sia assegnata almeno una delle due.
Attenzione: Se abbiamo assegnato l'icona attraverso Action nessuna icona verrà mostrata.

Ora supponiamo che il nostro programma preveda per alcune finestre inglobate, dei menu e dei pulsanti per l'allineamento del testo (in alto, in basso, a destra e a sinistra).
Action ci permette di riunirli per assegnare loro alcune proprietà, per esempio:

Action[".alin-alto,.alin-basso,.alin-destra,.alin-sinistra", Me].Visible = True/False

In questo modo noi possiamo ottenere la visibilità o meno sia dei pulsanti che dei menu in un colpo solo, oppure avremmo potuto renderli abili o inabili se invece di Visible avessimo usato la proprietà Enabled.
Ma possiamo fare anche prima usando un modello:

Action[".alin*", Me].Visible = True/False

Nota: Il punto davanti alla voce di azione indica la localizzazione alla finestra corrente, altrimenti se altre finestre inglobate avessero le stesse voci di azione ne verrebbero influenzate.
Attenzione: È l'assegnazione a Me che influenza Action, il punto davanti la voce indica a Gambas l'intenzione di localizzare l'azione, ma se non viene assegnato il parent l'azione sarà comunque globale, è il parent (Me in questo caso) l'osservatore dell'azione.

Action["undo"].Picture = Picture["icon:/small/undo"]

In questo modo si assegna l'icona sia al pulsante che alla voce di menu.


Se abbiamo un gruppo di controlli che supportano la proprietà Tooltip (ad esempio delle TextBox) e fanno la stessa cosa possiamo raggrupparli in un'unica Action e assegnargli come abbiamo visto anche questa proprietà.
Stesso procedimento per tutte le altre proprietà e metodi supportati da Action.


Note

[1] Vedere anche questa discussione: https://lists.gambas-basic.org/pipermail/user/2022-February/075454.html