Constructions d’éléments de l’interface utilisateur

Notre exemple précédent était un peu limité. En particulier, l’utilisation d’une préférence pour le chemin d’exportation n’est pas très élégante. Nous pouvons faire mieux en ajoutant des éléments à l’interface utilisateur dans la boîte de dialogue d’exportation.

Les éléments de l’interface utilisateur sont créés via la fonction darktable_new_widget. Cette fonction prend un paramètre type de widget et renvoie un nouvel objet pour ce widget. Vous pouvez ensuite définir divers champs dans ce widget pour définir ses paramètres. Vous utilisez ensuite cet objet comme paramètre de fonctions qui l’ajoutent à l’interface utilisateur de darktable. L’exemple simple suivant ajoute un module dans la vue Table lumineuse avec une étiquette simple :

local my_label = darktable.new_widget("label")
my_label.label = "Hello, world !"

dt.register_lib("test","test",false,{
    [dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_LEFT_CENTER",20},
    },my_label)

Il existe une astuce syntaxique intéressante pour rendre le code des éléments de l’interface utilisateur plus facile à lire et à écrire. Vous pouvez appeler ces objets en tant que fonctions avec une table de valeurs de clé en comme argument. Cela permet à l’exemple suivant de fonctionner. Il crée un widget conteneur avec deux sous-widgets : une étiquette et un champ de saisie de texte.

   local my_widget = darktable.new_widget("box"){
      orientation = "horizontal",
      darktable.new_widget("label"){ label = "here => " },
      darktable.new_widget("entry"){ tooltip = "please enter text here" }
   }

Maintenant que nous le savons, allons améliorer un peu notre 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