Spaces:
Sleeping
Sleeping
File size: 3,238 Bytes
402daee 170e15c 402daee |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
--[[
ReaSpeechActionsUI.lua - Main action bar UI in ReaSpeech
]]--
ReaSpeechActionsUI = Polo {}
function ReaSpeechActionsUI:init()
self.disabler = ReaUtil.disabler(ctx)
end
function ReaSpeechActionsUI.pluralizer(count, suffix)
if count == 0 then
return '', suffix
elseif count == 1 then
return '1', ''
else
return '', suffix
end
end
function ReaSpeechActionsUI:render()
local disable_if = self.disabler
local progress = self.worker:progress()
disable_if(progress, function()
local selected_track_count = reaper.CountSelectedTracks(ReaUtil.ACTIVE_PROJECT)
disable_if(selected_track_count == 0, function()
local button_text = ("Process %s Selected Track%s")
:format(self.pluralizer(selected_track_count, 's'))
if ImGui.Button(ctx, button_text) then
self:process_jobs(self.jobs_for_selected_tracks)
end
end)
ImGui.SameLine(ctx)
local selected_item_count = reaper.CountSelectedMediaItems(ReaUtil.ACTIVE_PROJECT)
disable_if(selected_item_count == 0, function()
local button_text = ("Process %s Selected Item%s")
:format(self.pluralizer(selected_item_count, 's'))
if ImGui.Button(ctx, button_text) then
self:process_jobs(self.jobs_for_selected_items)
end
end)
ImGui.SameLine(ctx)
if ImGui.Button(ctx, "Process All Items") then
self:process_jobs(self.jobs_for_all_items)
end
end)
if progress then
ImGui.SameLine(ctx)
if ImGui.Button(ctx, "Cancel") then
self.worker:cancel()
end
ImGui.SameLine(ctx)
local overlay = string.format("%.0f%%", progress * 100)
local status = self.worker:status()
if status then
overlay = overlay .. ' - ' .. status
end
ImGui.ProgressBar(ctx, progress, nil, nil, overlay)
end
end
function ReaSpeechActionsUI.make_job(media_item, take)
local path = ReaSpeechUI.get_source_path(take)
if path then
return {item = media_item, take = take, path = path}
else
return nil
end
end
function ReaSpeechActionsUI.jobs_for_selected_tracks()
local jobs = {}
for track in ReaIter.each_selected_track() do
for item in ReaIter.each_track_item(track) do
for take in ReaIter.each_take(item) do
local job = ReaSpeechActionsUI.make_job(item, take)
if job then
table.insert(jobs, job)
end
end
end
end
return jobs
end
function ReaSpeechActionsUI.jobs_for_selected_items()
local jobs = {}
for item in ReaIter.each_selected_media_item() do
for take in ReaIter.each_take(item) do
local job = ReaSpeechActionsUI.make_job(item, take)
if job then
table.insert(jobs, job)
end
end
end
return jobs
end
function ReaSpeechActionsUI.jobs_for_all_items()
local jobs = {}
for item in ReaIter.each_media_item() do
for take in ReaIter.each_take(item) do
local job = ReaSpeechActionsUI.make_job(item, take)
if job then
table.insert(jobs, job)
end
end
end
return jobs
end
function ReaSpeechActionsUI:process_jobs(job_generator)
local jobs = job_generator()
if #jobs == 0 then
reaper.MB("No media found to process.", "No media", 0)
return
end
app:new_jobs(jobs)
end
|