creare elementi di interfaccia grafica

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 darktable_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 darktable. Il seguente esempio aggiunge una libreria nel Tavolo Luminoso con una semplice etichetta:

local my_label = darktable.new_widget("label")
my_label.label = "Ciao mondo !"

dt.register_lib("test","test",false,{
    [dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER",20},
    },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.

   local my_widget = darktable.new_widget("box"){
      orientation = "horizontal",
      darktable.new_widget("label"){ label = "here => " },
      darktable.new_widget("entry"){ tooltip = "scrivi il testo qui" }
   }

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

darktable = require "darktable"

local scp_path = darktable.new_widget("entry"){
  tooltip ="Complete path to copy to. Can include user and hostname",
  text = "",
  reset_callback = function(self) self.text = "" end
}

darktable.register_storage("scp_export","Export via scp",
  function( storage, image, format, filename,
     number, total, high_quality, extra_data)
    if not darktable.control.execute(scp "..filename.." "..
      scp_path.text
    ) then
      darktable.print_error("scp failed for "..tostring(image))
    end
    end,
    nil, --finalize
    nil, --supported
    nil, --initialize
    darktable.new_widget("box") {
    orientation ="horizontal",
    darktable.new_widget("label"){label = "target SCP PATH "},
    scp_path,
})

translations