ການເພີ່ມປຸ່ມລັດແບບງ່າຍໆ
ຜ່ານມາ, ສະຄຣິບທັງໝົດຂອງພວກເຮົາເຮັດວຽກໃນລະຫວ່າງການເລີ່ມຕົ້ນລະບົບເທົ່ານັ້ນ. ອັນນີ້ມີປະໂຫຍດຈຳກັດ ແລະ ບໍ່ຊ່ວຍໃຫ້ພວກເຮົາຕອບສະໜອງຕໍ່ການກະທຳຕົວຈິງຂອງຜູ້ໃຊ້ໄດ້. ເພື່ອເຮັດສິ່ງທີ່ກ້າວໜ້າກວ່ານັ້ນ ພວກເຮົາຕ້ອງລົງທະບຽນຟັງຊັນທີ່ຈະຖືກເອີ້ນໃຊ້ເມື່ອມີເຫດການໃດໜຶ່ງເກີດຂຶ້ນ. ເຫດການທີ່ພົບເລື້ອຍທີ່ສຸດແມ່ນປຸ່ມລັດແປ້ນພິມ.
darktable = require "darktable"
local function hello_shortcut(event, shortcut)
darktable.print("ສະບາຍດີ, ຂ້ອຍຫາກໍ່ໄດ້ຮັບ '"..event..
"' ພ້ອມກັບພາຣາມິເຕີ '"..shortcut.."'")
end
darktable.register_event("hello shortcut",
"shortcut",hello_shortcut,
"ຄຳສັ່ງລັດທີ່ສະແດງພາຣາມິເຕີຂອງມັນ")
ຕອນນີ້ໃຫ້ເປີດ darktable, ໄປທີ່ “ການຕັ້ງຄ່າ > ປຸ່ມລັດ > lua > A shortcut that prints its parameters”, ກຳນົດປຸ່ມລັດແລ້ວທົດລອງໃຊ້. ທ່ານຄວນຈະເຫັນຂໍ້ຄວາມປາກົດຂຶ້ນເທິງໜ້າຈໍ.
ມາເບິ່ງລະຫັດຢ່າງລະອຽດ. ທຳອິດພວກເຮົາກຳນົດຟັງຊັນທີ່ຮັບພາຣາມິເຕີຂໍ້ຄວາມສອງອັນ. ອັນທຳອິດແມ່ນປະເພດຂອງເຫດການທີ່ຖືກກະຕຸ້ນ (“shortcut”) ແລະ ອັນທີສອງແມ່ນຊື່ຂອງປຸ່ມລັດ (“A shortcut that prints its parameters”). ຕົວຟັງຊັນເອງຈະເອີ້ນໃຊ້ darktable.print, ເຊິ່ງຈະພິມຂໍ້ຄວາມທັບຊ້ອນໃນໜ້າຕ່າງຫຼັກ.
ເມື່ອກຳນົດຟັງຊັນນັ້ນແລ້ວ, ພວກເຮົາຈະລົງທະບຽນມັນເປັນ shortcut callback. ເພື່ອເຮັດສິ່ງນັ້ນ ພວກເຮົາຈະເອີ້ນໃຊ້ darktable.register_event ເຊິ່ງເປັນຟັງຊັນທົ່ວໄປສຳລັບເຫດການທຸກປະເພດ. ພວກເຮົາບອກມັນວ່າກຳລັງລົງທະບຽນເຫດການປະເພດ “shortcut” ດ້ວຍຊື່ “hello shortcut”, ຈາກນັ້ນກຳນົດ callback ທີ່ຈະເອີ້ນໃຊ້ ແລະ ສຸດທ້າຍແມ່ນກຳນົດຂໍ້ຄວາມທີ່ຈະໃຊ້ອະທິບາຍປຸ່ມລັດໃນໜ້າຕ່າງການຕັ້ງຄ່າ.
ມາລອງປຸ່ມລັດທີ່ມີການໂຕ້ຕອບຫຼາຍຂຶ້ນອີກໜ້ອຍໜຶ່ງ. ອັນນີ້ຈະເບິ່ງຮູບພາບທີ່ຜູ້ໃຊ້ກຳລັງສົນໃຈ (ເລືອກໄວ້ ຫຼື ວາງເມົາສ໌ເທິງຮູບ) ແລະ ເພີ່ມຄະແນນໃຫ້ພວກມັນ:
darktable = require "darktable"
darktable.register_event("increase rating","shortcut",
function(event,shortcut)
local images = darktable.gui.action_images
for _,v in pairs(images) do
v.rating = v.rating + 1
end
end,"Increase the rating of an image")
ໃນຂັ້ນຕອນນີ້, ລະຫັດສ່ວນໃຫຍ່ຄວນຈະເຂົ້າໃຈໄດ້ດ້ວຍຕົນເອງ. ມີພຽງແຕ່ບາງໝາຍເຫດ:
-
ແທນທີ່ຈະປະກາດຟັງຊັນແລ້ວຈຶ່ງອ້າງອີງເຖິງມັນ, ພວກເຮົາປະກາດມັນໂດຍກົງໃນການເອີ້ນໃຊ້
darktable.register_eventເຊິ່ງໃຫ້ຜົນຄືກັນແຕ່ກະທັດຮັດກວ່າ. -
image.ratingແມ່ນຟີວທີ່ໃຫ້ຄະແນນຮູບດາວຂອງຮູບພາບໃດໜຶ່ງ (ລະຫວ່າງ 0 ຫາ 5 ດາວ, -1 ໝາຍເຖິງຖືກປະຕິເສດ). -
darktable.gui.action_imagesແມ່ນຕາຕະລາງທີ່ປະກອບດ້ວຍຮູບພາບທັງໝົດທີ່ສົນໃຈ. darktable ຈະດຳເນີນການກັບຮູບທີ່ເລືອກໄວ້ຫາກມີການເລືອກ, ແລະ ດຳເນີນການກັບຮູບທີ່ຢູ່ກ້ອງເມົາສ໌ຫາກບໍ່ມີການເລືອກ. ຟັງຊັນນີ້ຊ່ວຍໃຫ້ການເຮັດວຽກຕາມຕັກກະ UI ຂອງ darktable ໃນ lua ເຮັດໄດ້ງ່າຍຂຶ້ນ.
ຫາກທ່ານເລືອກຮູບພາບ ແລະ ກົດປຸ່ມລັດສອງສາມຄັ້ງ, ມັນຈະເຮັດວຽກໄດ້ຖືກຕ້ອງໃນຕອນທຳອິດ ແຕ່ເມື່ອຮອດຫ້າດາວແລ້ວ, darktable ຈະເລີ່ມສະແດງຂໍ້ຜິດພາດຕໍ່ໄປນີ້ໃນຄອນໂຊນ:
<![CDATA[
LUA ERROR : rating too high : 6
stack traceback:
[C]: in ?
[C]: in ?
[C]: in metamethod 'newindex'
./configdir/luarc:10: in function <./configdir/luarc:7>
[C]: in ?
[C]: in ?
]]>
ນີ້ແມ່ນວິທີການລາຍງານຂໍ້ຜິດພາດຂອງ lua. ພວກເຮົາໄດ້ພະຍາຍາມຕັ້ງຄະແນນເປັນ 6 ໃຫ້ກັບຮູບພາບ, ແຕ່ຄະແນນສູງສຸດແມ່ນພຽງແຕ່ 5. ມັນອາດຈະງ່າຍທີ່ຈະເພີ່ມການກວດສອບ, ແຕ່ມາລອງວິທີທີ່ຊັບຊ້ອນກວ່າໂດຍການດັກຈັບຂໍ້ຜິດພາດແທນ:
darktable.register_event("increase rating","shortcut",
function(event,shortcut)
local images = darktable.gui.action_images
for _,v in pairs(images) do
result,message = pcall(function()
v.rating = v.rating + 1
end)
if not result then
darktable.print_error("could not increase rating of image "..
tostring(v).." : "..message)
end
end
end,"Increase the rating of an image")
pcall ຈະປະມວນຜົນອາກິວເມນທຳອິດ ແລະ ດັກຈັບຂໍ້ຜິດພາດ (exception) ໃດໆທີ່ເກີດຂຶ້ນ. ຫາກບໍ່ມີຂໍ້ຜິດພາດ ມັນຈະສົ່ງຄືນ true ພ້ອມກັບຜົນລັດຈາກຟັງຊັນ. ຫາກມີຂໍ້ຜິດພາດ ມັນຈະສົ່ງຄືນ false ແລະ ຂໍ້ຄວາມຂໍ້ຜິດພາດ. ພວກເຮົາພຽງແຕ່ກວດສອບຜົນລັດເຫຼົ່ານີ້ ແລະ ພິມພວກມັນອອກທາງຄອນໂຊນ.