tworzenie elementów interfejsu użytkownika

Nasz poprzedni przykład był nieco ograniczony, na przykład sposób korzystania z ustawień dla ścieżki eksportu nie był zbyt ładny. Możemy to zrobić lepiej, dodając elementy interfejsu użytkownika w oknie eksportu.

Elementy interfejsu tworzone są funkcją `darktable_new_widget. Jako parametr przyjmuje ona typ kontrolki i zwraca nowy obiekt klasy tej kontrolki. Możesz następnie ustawić jej różne pola w celu określenia parametrów. Sam obiekt można wykorzystać jako parametr różnych funkcji, które dodadzą go do interfejsu darktable. Poniższy prosty przykład dodaje bibliotekę z prostą etykietą w widoku stołu podświetlanego:

local my_label = darktable.new_widget("label")
my_label.label = "Witaj, świecie!"

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

Istnieje sposób, żeby kod elementów interfejsu uczynić łatwiejszym do odczytu i zapisu. Można mianowicie wywoływać te obiekty jako funkcje z tablicą wartości kluczy jako argumentem. Dzięki temu działa poniższy przykład; tworzy on widżet kontenerowy z dwoma widżetami podrzędnymi: etykietą i polem tekstowym.

   local my_widget = darktable.new_widget("box"){
      orientation = "horizontal",
      darktable.new_widget("label"){ label = "tutaj => " },
      darktable.new_widget("entry"){ tooltip = "tutaj wprowadz tekst" }
   }

Teraz, kiedy już to wiemy, ulepszymy trochę nasz skrypt.

darktable = require "darktable"

local scp_path = darktable.new_widget("entry"){
  tooltip ="Kompletna ścieżka docelowa. Może zawierać użytkownika i hostname",
  text = "",
  reset_callback = function(self) self.text = "" end
}

darktable.register_storage("scp_export","Eksport przez 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("błąd scp: "..tostring(image))
    end
    end,
    nil, --finalize
    nil, --supported
    nil, --initialize
    darktable.new_widget("box") {
    orientation ="horizontal",
    darktable.new_widget("label"){label = "docelowa ścieżka scp "},
    scp_path,
})

translations