Ons vorige voorbeeld was een beetje beperkt. Met name het gebruik van een voorkeur voor het exportpad was niet erg prettig. We kunnen beter dan dat door elementen toe te voegen aan de gebruikersinterface in het exportdialoogvenster.
UI-elementen worden gemaakt via de functie Ansel_new_widget
. Deze functie neemt een type widget als parameter en retourneert een nieuw object dat overeenkomt met die widget. Je kan vervolgens verschillende velden in die widget instellen om de parameters in te stellen. Je gebruikt dat object dan als parameter voor verschillende functies die het toevoegen aan de gebruikersinterface van de Ansel. Het volgende eenvoudige voorbeeld voegt een lib toe aan de bibliotheekweergave met een eenvoudig label:
Er is een leuke syntactische truc om de code van UI-elementen gemakkelijker te lezen en te schrijven. Je kan deze objecten aanroepen als functies met een tabel met sleutelwaarden als argument. Hierdoor kan het volgende voorbeeld werken. Het maakt een containerwidget met twee subwidgets: een label en een tekstinvoerveld.
Nu we dat weten, laten we ons script een beetje verbeteren.
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})