View Single Post
Old 02-04-2021, 11:22 AM   #272
rasmusmarshagen
Human being with feelings
 
Join Date: May 2020
Posts: 53
Default Theme

Quote:
Originally Posted by Embass View Post


Code:
-- copy children items to all identically named parent items
-- author: embass
-- v0.1
local mouse_x, mouse_y = reaper.GetMousePosition()
local media_item_count = reaper.CountSelectedMediaItems(0);
if media_item_count ~= 1 then  
	reaper.TrackCtl_SetToolTip("Select 1 media item", mouse_x + 15, mouse_y, true)
	return -- terminate script
end
local media_item = reaper.GetSelectedMediaItem(0, 0); if media_item == nil then return end -- terminate script
local media_item_len = reaper.GetMediaItemInfo_Value(media_item, "D_LENGTH"); if media_item_len == 0 then return end -- terminate script
local media_item_start = reaper.GetMediaItemInfo_Value(media_item, "D_POSITION")
local media_item_end = media_item_start + media_item_len
local track = reaper.GetMediaItem_Track(media_item); if track == nil then return end -- terminate script
if reaper.GetMediaTrackInfo_Value(track, "I_FOLDERDEPTH") ~= 1 then 
	reaper.TrackCtl_SetToolTip("Select item on parent track", mouse_x + 15, mouse_y, true)
	return -- terminate script 
end
local track_count = reaper.CountTracks(0)
if track_count == reaper.GetMediaTrackInfo_Value(track, "IP_TRACKNUMBER") then return end -- terminate script, item on last track
local take = reaper.GetActiveTake(media_item); if take == nil then return end -- terminate script
local take_name = reaper.GetTakeName(take); if take_name == nil then return end -- terminate script
local media_items = {} -- media items with the same name
for i = 0, reaper.CountTrackMediaItems(track) - 1 do
	local media_item = reaper.GetTrackMediaItem(track, i)
	if reaper.GetMediaItemInfo_Value(media_item, "D_LENGTH") > 0 then
		local take = reaper.GetActiveTake(media_item)
		if take ~= nil then
			if take_name == reaper.GetTakeName(take) then
				table.insert(media_items, media_item)
			end
		end
	end
end
if #media_items < 2 then return end -- terminate script
function get_children_tracks(parent_track) --> children tracks
	local children_tracks = {}
	local track_count = reaper.CountTracks(0)
	local parent_track_depth = reaper.GetTrackDepth(parent_track)     
	local track_index = reaper.GetMediaTrackInfo_Value(parent_track, "IP_TRACKNUMBER") -- next track index
	for i = track_index, track_count - 1 do
		local track = reaper.GetTrack(0, i)
		local track_depth = reaper.GetTrackDepth(track)
		if track_depth > parent_track_depth then table.insert(children_tracks, track)
		else break -- exit loop
		end
	end
	return children_tracks
end
local children_tracks = get_children_tracks(track); if #children_tracks == 0 then return end -- terminate script
local track1 = children_tracks[1] -- first child
local edit_cursor_pos = reaper.GetCursorPosition() -- save
local trim_state = reaper.GetToggleCommandState(42421) -- Options: Always trim content behind razor edits
reaper.PreventUIRefresh(1)
reaper.Undo_BeginBlock()
	reaper.Main_OnCommand(40309, 0) -- Set ripple editing off
	if trim_state == 0 then reaper.Main_OnCommand(42421, 0); restore_trim = true end -- set trim content behind area
	local hidden_tracks = {} -- save
	for i, track in ipairs(children_tracks) do
		if not reaper.IsTrackVisible(track, false) then
			hidden_tracks[track] = true
			reaper.SetMediaTrackInfo_Value(track, "B_SHOWINTCP", 1) -- make visible
		end 
	end
	reaper.Main_OnCommand(42406, 0) -- Razor edit: Clear all areas
	reaper.SelectAllMediaItems(0, false) -- unselect all items
	local str_track_razor_edits = string.format([[%s %s '']], media_item_start, media_item_end)
	for i, track in ipairs(children_tracks) do
		reaper.GetSetMediaTrackInfo_String(track, "P_RAZOREDITS", str_track_razor_edits, true) -- set
	end
	reaper.Main_OnCommand(40060, 0) -- Item: Copy selected area of items
	reaper.SetOnlyTrackSelected(track1) -- set last touched track
	for i, item in ipairs(media_items) do
		if item ~= media_item then
			local item_start = reaper.GetMediaItemInfo_Value(item, "D_POSITION")
			reaper.SetEditCurPos(item_start, false, false)
			reaper.Main_OnCommand(42398, 0) --Item: Paste items/tracks
		end
	end
	reaper.Main_OnCommand(42406, 0) -- Razor edit: Clear all areas
	reaper.SelectAllMediaItems(0, false) -- unselect all items
	reaper.SetEditCurPos(edit_cursor_pos, false, false) -- restore
	for track in pairs(hidden_tracks) do
		reaper.SetMediaTrackInfo_Value(track, "B_SHOWINTCP", 0) -- hide
	end
	reaper.SetOnlyTrackSelected(track) -- parent track
	reaper.SetMediaItemSelected(media_item, true) -- restore media item selection
	if restore_trim then reaper.Main_OnCommand(42421, 0) end -- restore
reaper.Undo_EndBlock("Copy items", -1)
reaper.PreventUIRefresh(-1)
reaper.UpdateArrange()
What gorgeous looking theme is that if I may ask?
rasmusmarshagen is offline   Reply With Quote