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
- English: building user interface elements
- German (translation incomplete): Der Bau von Schnittstellen Elementen
- Português (translation incomplete): construir elementos de interface do usuário
- Ukrainian (translation incomplete): побудова елементів інтерфейсу користувача
- Dutch (translation incomplete): gebruikersinterface-elementen bouwen