Il nostro esempio precedente era un po’ limitato. In particolare, l’uso della preferenza per il percorso di esportazione non era molto carino. Possiamo fare di meglio aggiungendo un’elemento all’interfaccia utente nella finestra di dialogo dell’esportazione.

Gli elementi UI vengono create attraverso la funzione Ansel_new_widget. Questa riceve il tipo di widget come parametro e restituisce un nuovo oggetto corrispondente a quel widget. Puoi quindi impostare i vari campi in quel widget con i loro parametri. Potrai usare quell’oggetto come parametro per varie funzioni che verranno aggiunge alla UI di Ansel. Il seguente esempio aggiunge una libreria nel Tavolo Luminoso con una semplice etichetta:

1local my_label = Ansel.new_widget("label")
2my_label.label = "Ciao mondo !"
3
4dt.register_lib("test","test",false,{
5    [dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER",20},
6    },my_label)

C’è un simpatico trucco sintattico per avere il codice degli elementi di UI più facile da leggere e scrivere. Puoi chiamare questi oggetti come funzioni con una tabella di valori chiavi come argomento. Questo permette al prossimo esempio di funzionare. Crea un widget container con due sotto-widget: un’etichetta e un campo di testo.

1   local my_widget = Ansel.new_widget("box"){
2      orientation = "horizontal",
3      Ansel.new_widget("label"){ label = "here => " },
4      Ansel.new_widget("entry"){ tooltip = "scrivi il testo qui" }
5   }

Ora che lo sappiamo, miglioriamo un po’ il nostro script.

 1Ansel = require "Ansel"
 2
 3local scp_path = Ansel.new_widget("entry"){
 4  tooltip ="Complete path to copy to. Can include user and hostname",
 5  text = "",
 6  reset_callback = function(self) self.text = "" end
 7}
 8
 9Ansel.register_storage("scp_export","Export via scp",
10  function( storage, image, format, filename,
11     number, total, high_quality, extra_data)
12    if not Ansel.control.execute(scp "..filename.." "..
13      scp_path.text
14    ) then
15      Ansel.print_error("scp failed for "..tostring(image))
16    end
17    end,
18    nil, --finalize
19    nil, --supported
20    nil, --initialize
21    Ansel.new_widget("box") {
22    orientation ="horizontal",
23    Ansel.new_widget("label"){label = "target SCP PATH "},
24    scp_path,
25})