venerdì 9 gennaio 2015

Creare un Plugin

Livecode è sia un linguaggio di programmazione, sia un ambiente di sviluppo integrato ricco di funzionalità (IDE). Il fatto che sia anche un IDE ci permette di scrivere dei componenti aggiuntivi, plugin, sempre pronti dentro al nostro livecode, che ci permettono di rendere più veloce la nostra programmazione.
Per creare dei plugin ci basta creare dei programmi livecode, e metterli nella cartella dei plugin, su windows è:
C:\Documents and Settings\max\Documenti\My LiveCode\plugins

Per Mac è:
/Users/max/Documents/My LiveCode/Plugins


Per Linux è:
/home/max/my_livecode/Plugins/

Ovviamente sostituite il nome utente max con il vostro sul computer.
Se volete utilizzare un'altra cartella per i plugin, potete impostarla andando su Edit -> Preferences -> Files & Memory:

All'avvio Livecode cercherà tutti i programmi che sono presenti in tale cartella e li integrerà dentro di sè.

Fate attenzione che un plugin non è modificabile, quindi se dovete cambiarlo o aggiungerci del codice, spostatelo in un'altra cartella.
Facciamo degli esempi pratici riguardo al codice da mettere in un plugin. Il plugin è uno stack a sè, quindi bisogna fare molta attenzione con i riferimenti.
 Il primo esempio è una libreria, cioè servirà ad aggiungere elementi personalizzati già pronti ai nostri programmi. Per semplicità mettiamo solo un pulsante personalizzato e un pulsante normale, il pulsante normale dovrà essere premuto quando vorremo aggiungere l'elemento ai nostri programmi, così:
Ora mettiamo il seguente codice nel pulsante Aggiungi pulsante:

on mouseUp   
   copy button "Stop" of this stack to (the topStack)
end mouseUp


Notate che se uno stack è un plugin, non è più considerato da Livecode come lo stack principale (topStack); questo ci permette di fare la differenza tra lo stack su cui lavoriamo e il plugin. Fate attenzione che il codice agirà differentemente se lo stack si trova nella cartella dei plugin o meno!

Vediamo adesso di creare un plugin che prenda delle informazioni dal controllo selezionato sul programma principale. Creiamo uno stack con due campi, chiamandoli larghezza e altezza, e un pulsante così:

Poi inseriamo nel codice della card queste righe:

on revSelectedObjectChanged
   if the selectedObject is empty then
      disable field "larghezza"
      disable field "altezza"
      put empty into field "larghezza"
      put empty into field "altezza"
   else
      enable field "larghezza"
      enable field "altezza"
      put the width of the selObj into field "larghezza"
      put the height of the selObj into field "altezza"
   end if
end revSelectedObjectChanged

Cosa è il messaggio revSelectedObjectChanged? Non lo trovate sul dizionario, si tratta del messaggio SelectedObjectChanged ma per i plugin. Nella schermata di impostazione dei plugin trovate tutta la lista dei messaggi speciali (Development -> Plugins -> Pluggin Settings):
I messaggi per i plugin sono identici ai messaggi normali, ma invece di essere inviati alla card o allo stack del programma principale, sono mandati al plugin. Il nome è lo stesso ma ha le lettere rev all'inizio.In questa maniera, quando selezioniamo un controllo sul programma principale, il plugin ci dirà la sua larghezza e altezza. Se non selezioniamo nulla i campi diverranno grigi.
Mentre nel pulsante mettiamo questo codice:

on mouseUp
   set the width of the selObj to field "larghezza"
   set the height of the selObj to field "altezza"
end mouseUp


In questa maniera possiamo impostare la larghezza e altezza di un controllo selezionato, basta selezionarlo, cambiare i valori nei campi altezza e larghezza e premere il pulsante Aggiorna.
Riuscite ad immaginare quante cose potete automatizzare con i Plugin? Praticamente tutto!