Skip to content

Commit 4648c2d

Browse files
committed
add change_group_leader script
1 parent edceb3e commit 4648c2d

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed

contrib/change_group_leader.lua

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
local dt = require "darktable"
2+
local du = require "lib/dtutils"
3+
local debug = require "darktable.debug"
4+
5+
local MODULE = "change_group_leader"
6+
7+
du.check_min_api_version("3.0.0", MODULE)
8+
9+
-- create a namespace to contain persistent data and widgets
10+
chg_grp_ldr = {}
11+
12+
local cgl = chg_grp_ldr
13+
14+
cgl.widgets = {}
15+
16+
cgl.event_registered = false
17+
cgl.module_installed = false
18+
19+
-- - - - - - - - - - - - - - - - - - - - - - - -
20+
-- F U N C T I O N S
21+
-- - - - - - - - - - - - - - - - - - - - - - - -
22+
23+
local function install_module()
24+
if not cgl.module_installed then
25+
dt.register_lib(
26+
MODULE, -- Module name
27+
"change_group_leader", -- Visible name
28+
true, -- expandable
29+
false, -- resetable
30+
{[dt.gui.views.lighttable] = {"DT_UI_CONTAINER_PANEL_RIGHT_CENTER", 700}}, -- containers
31+
cgl.widgets.box,
32+
nil,-- view_enter
33+
nil -- view_leave
34+
)
35+
cgl.module_installed = true
36+
end
37+
end
38+
39+
local function find_group_leader(images, mode)
40+
for _, img in ipairs(images) do
41+
dt.print_log("checking image " .. img.id .. " named " .. img.filename)
42+
local found = false
43+
if mode == "jpg" then
44+
if string.match(string.lower(img.filename), "jpg$") then
45+
dt.print_log("jpg matched image " .. img.filename)
46+
found = true
47+
end
48+
elseif mode == "raw" then
49+
if img.is_raw and img.duplicate_index == 0 then
50+
dt.print_log("found raw " .. img.filename)
51+
found = true
52+
end
53+
elseif mode == "non-raw" then
54+
if img.is_ldr then
55+
dt.print_log("found ldr " .. img.filename)
56+
found = true
57+
end
58+
else
59+
dt.print_error(MODULE .. ": unrecognized mode " .. mode)
60+
return
61+
end
62+
if found then
63+
dt.print_log("making " .. img.filename .. " group leader")
64+
img:make_group_leader()
65+
return
66+
end
67+
end
68+
end
69+
70+
local function process_image_groups(images)
71+
if #images < 1 then
72+
dt.print("No images selected.")
73+
dt.print_log(MODULE .. "no images seletected, returning...")
74+
else
75+
local mode = cgl.widgets.mode.value
76+
for _,img in ipairs(images) do
77+
dt.print_log("checking image " .. img.id)
78+
local group_images = img:get_group_members()
79+
if group_images == 1 then
80+
dt.print_log("only one image in group for image " .. image.id)
81+
else
82+
find_group_leader(group_images, mode)
83+
end
84+
end
85+
end
86+
end
87+
88+
-- - - - - - - - - - - - - - - - - - - - - - - -
89+
-- W I D G E T S
90+
-- - - - - - - - - - - - - - - - - - - - - - - -
91+
92+
cgl.widgets.mode = dt.new_widget("combobox"){
93+
label = "select new group leader",
94+
tooltip = "select type of image to be group leader",
95+
selected = 1,
96+
"jpg", "raw", "non-raw",
97+
}
98+
99+
cgl.widgets.execute = dt.new_widget("button"){
100+
label = "Execute",
101+
clicked_callback = function()
102+
process_image_groups(dt.gui.action_images)
103+
end
104+
}
105+
106+
cgl.widgets.box = dt.new_widget("box"){
107+
orientation = "vertical",
108+
cgl.widgets.mode,
109+
cgl.widgets.execute,
110+
}
111+
112+
-- - - - - - - - - - - - - - - - - - - - - - - -
113+
-- D A R K T A B L E I N T E G R A T I O N
114+
-- - - - - - - - - - - - - - - - - - - - - - - -
115+
116+
if dt.gui.current_view().id == "lighttable" then
117+
install_module()
118+
else
119+
if not cgl.event_registered then
120+
dt.register_event(
121+
"view-changed",
122+
function(event, old_view, new_view)
123+
if new_view.name == "lighttable" and old_view.name == "darkroom" then
124+
install_module()
125+
end
126+
end
127+
)
128+
cgl.event_registered = true
129+
end
130+
end

0 commit comments

Comments
 (0)