ການເພີ່ມປຸ່ມລັດແບບງ່າຍໆ

ຜ່ານມາ, ສະຄຣິບທັງໝົດຂອງພວກເຮົາເຮັດວຽກໃນລະຫວ່າງການເລີ່ມຕົ້ນລະບົບເທົ່ານັ້ນ. ອັນນີ້ມີປະໂຫຍດຈຳກັດ ແລະ ບໍ່ຊ່ວຍໃຫ້ພວກເຮົາຕອບສະໜອງຕໍ່ການກະທຳຕົວຈິງຂອງຜູ້ໃຊ້ໄດ້. ເພື່ອເຮັດສິ່ງທີ່ກ້າວໜ້າກວ່ານັ້ນ ພວກເຮົາຕ້ອງລົງທະບຽນຟັງຊັນທີ່ຈະຖືກເອີ້ນໃຊ້ເມື່ອມີເຫດການໃດໜຶ່ງເກີດຂຶ້ນ. ເຫດການທີ່ພົບເລື້ອຍທີ່ສຸດແມ່ນປຸ່ມລັດແປ້ນພິມ.

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 ແລະ ຂໍ້ຄວາມຂໍ້ຜິດພາດ. ພວກເຮົາພຽງແຕ່ກວດສອບຜົນລັດເຫຼົ່ານີ້ ແລະ ພິມພວກມັນອອກທາງຄອນໂຊນ.

translations