Files
lua-scripts-w-api/contrib/hif_group_leader.lua
Bill Ferguson 294b693905 contrib/hif_group_leader.lua - make the hif image the group leader
for raw + hif image pairs.  Works
                               on import, selection, and collection.
2024-01-14 17:15:28 -05:00

196 lines
5.9 KiB
Lua

--[[
hif_group_leader.lua - Make hif image group leader
Copyright (C) 2024 Bill Ferguson <wpferguson@gmail.com>.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
]]
--[[
hif_group_leader - Make hif image group leader
After a film roll is imported, check for RAW-JPG image groups
and make the JPG image the group leader. This is on by default
but can be disabled in preferences.
Shortcuts are included to filter existing collections or
selections of images and make the hif the group leader.
ADDITIONAL SOFTWARE NEEDED FOR THIS SCRIPT
None
USAGE
Start script from script_manager
Assign keys to the shortcuts
BUGS, COMMENTS, SUGGESTIONS
Bill Ferguson <wpferguson@gmail.com>
CHANGES
]]
local dt = require "darktable"
local du = require "lib/dtutils"
local df = require "lib/dtutils.file"
-- - - - - - - - - - - - - - - - - - - - - - - -
-- C O N S T A N T S
-- - - - - - - - - - - - - - - - - - - - - - - -
local MODULE = "hif_group_leader"
-- - - - - - - - - - - - - - - - - - - - - - - -
-- A P I C H E C K
-- - - - - - - - - - - - - - - - - - - - - - - -
du.check_min_api_version("7.0.0", MODULE)
-- - - - - - - - - - - - - - - - - - - - - - - - - -
-- S C R I P T M A N A G E R I N T E G R A T I O N
-- - - - - - - - - - - - - - - - - - - - - - - - - -
local script_data = {}
script_data.destroy = nil -- function to destory the script
script_data.destroy_method = nil -- set to hide for libs since we can't destroy them commpletely yet
script_data.restart = nil -- how to restart the (lib) script after it's been hidden - i.e. make it visible again
script_data.show = nil -- only required for libs since the destroy_method only hides them
-- - - - - - - - - - - - - - - - - - - - - - - - - -
-- I 1 8 N
-- - - - - - - - - - - - - - - - - - - - - - - - - -
local gettext = dt.gettext
-- Tell gettext where to find the .mo file translating messages for a particular domain
gettext.bindtextdomain(MODULE, dt.configuration.config_dir .. "/lua/locale/")
local function _(msgid)
return gettext.dgettext(MODULE, msgid)
end
-- - - - - - - - - - - - - - - - - - - - - - - -
-- P R E F E R E N C E S
-- - - - - - - - - - - - - - - - - - - - - - - -
dt.preferences.register(MODULE, "on_import", "bool", _("make hif group leader on import"), _("automatically make the hif file the group leader when raw + hif are imported"), true)
-- - - - - - - - - - - - - - - - - - - - - - - -
-- N A M E S P A C E
-- - - - - - - - - - - - - - - - - - - - - - - -
local jgloi = {}
jgloi.images = {}
-- - - - - - - - - - - - - - - - - - - - - - - -
-- F U N C T I O N S
-- - - - - - - - - - - - - - - - - - - - - - - -
local function toggle_global_toolbox_grouping()
dt.gui.libs.global_toolbox.grouping = false
dt.gui.libs.global_toolbox.grouping = true
end
-- - - - - - - - - - - - - - - - - - - - - - - -
-- M A I N P R O G R A M
-- - - - - - - - - - - - - - - - - - - - - - - -
local function make_hif_group_leader(images)
-- if the image is part of a group, make it the leader
for _, image in ipairs(images) do
if #image:get_group_members() > 1 then
image:make_group_leader()
end
end
if dt.gui.libs.global_toolbox.grouping then
-- toggle the grouping to make the new leader show
toggle_global_toolbox_grouping()
end
end
local function make_existing_hif_group_leader(images)
for _, image in ipairs(images) do
if string.lower(df.get_filetype(image.filename)) == "hif" then
if #image:get_group_members() > 1 then
image:make_group_leader()
end
end
end
if dt.gui.libs.global_toolbox.grouping then
-- toggle the grouping to make the new leader show
toggle_global_toolbox_grouping()
end
end
-- - - - - - - - - - - - - - - - - - - - - - - -
-- D A R K T A B L E I N T E G R A T I O N
-- - - - - - - - - - - - - - - - - - - - - - - -
local function destroy()
if dt.preferences.read(MODULE, "on_import", "bool") then
dt.destroy_event(MODULE, "post-import-film")
dt.destroy_event(MODULE, "post-import-image")
end
dt.destroy_event(MODULE .. "_collect", "shortcut")
dt.destroy_event(MODULE .. "_select", "shortcut")
end
script_data.destroy = destroy
-- - - - - - - - - - - - - - - - - - - - - - - -
-- E V E N T S
-- - - - - - - - - - - - - - - - - - - - - - - -
if dt.preferences.read(MODULE, "on_import", "bool") then
dt.register_event(MODULE, "post-import-film",
function(event, film_roll)
-- ignore the film roll, it contains all the images, not just the imported
local images = jgloi.images
if #images > 0 then
jgloi.images = {}
make_hif_group_leader(images)
end
end
)
dt.register_event(MODULE, "post-import-image",
function(event, image)
if string.lower(df.get_filetype(image.filename)) == "hif" then
table.insert(jgloi.images, image)
end
end
)
end
dt.register_event(MODULE .. "_collect", "shortcut",
function(event, shortcut)
-- ignore the film roll, it contains all the images, not just the imported
local images = dt.collection
make_existing_hif_group_leader(images)
end,
_("Make hif group leader for collection")
)
dt.register_event(MODULE .. "_select", "shortcut",
function(event, shortcut)
local images = dt.gui.selection()
make_existing_hif_group_leader(images)
end,
_("Make hif group leader for selection")
)
return script_data