La classe Action
(pagina a cura del membro Gianluigi del forum di Gambas-it.org)
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 due grossi equivoci 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 QT funziona meglio e offre più stabilità.
L'altro equivoco è quello che in Gambas si possano "disegnare" finestre solo da codice.
Ancor prima di scrivere una sola riga di codice occorre 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.
Per comprendere a fondo Action occorre capire bene come devono essere costruite le finestre.
Una finestra Gambas ben progettata deve partire dai contenitori e dal componente gb.form.mdi (interfaccia multi documento) che implementa la classe Action di gb.qt4 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.
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 Ripristina e il pulsante Ripristina 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.