La classe Action
(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/2020-October/070206.html