Human being with feelings
Join Date: Jun 2009
Location: Croatia
Posts: 4,595
|
New Update REQUIRES V5.02pre1+ and SWS:
Many thanks to Jeffos and SPK77
-Works with ANY theme
-Added Separator Layout code (When track is named "SEPARATOR")
-Layouts are defined in Layout Window in Reaper
-TCP only currently
-RecArm Layout Disabled for : Folder,Aux,Separator
Setup (All actions need to be set on "Selected Track Panel)":
Default Layout (Also Audio Layout) is Track Panel
Rec Arm Layout is Action#1
Folder is Action#2
Separator Action#3
Aux Action#4
Audio Action#5
Midi Action#6
Video Action#7
Mixed Items (Audio/MIDI/Video) Action#8
When Changing layouts you need to click on arrange window to update
Code:
defer_cnt=0
function cooldown()
if defer_cnt >= 10 then -- run Main() every ~300ms
defer_cnt=0
reaper.PreventUIRefresh(1)
Main()
reaper.PreventUIRefresh(-1)
else
defer_cnt=defer_cnt+1
end
reaper.defer(cooldown)
end
function Main()
test = reaper.SNM_GetIntConfigVar("layout_tcp",0)
------READ FROM REAPER INI--------------------------------
_, DefLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layout_tcp", "", reaper.GetResourcePath().. "\\REAPER.ini")
_, RecArmLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction0", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 1
RecArmLayTCP = string.sub(RecArmLayTCP,9)
_, FolderLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction1", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 2
FolderLayTCP = string.sub(FolderLayTCP,9)
_, SeparatorLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction2", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 3
SeparatorLayTCP = string.sub(SeparatorLayTCP,9)
_, AuxLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction3", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 4
AuxLayTCP = string.sub(AuxLayTCP,9)
_, AudioLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction4", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 5
AudioLayTCP = string.sub(AudioLayTCP,9)
_, MidiLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction5", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 5
MidiLayTCP = string.sub(MidiLayTCP,9)
_, VideoLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction6", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 6
VideoLayTCP = string.sub(VideoLayTCP,9)
_, MixedLayTCP = reaper.BR_Win32_GetPrivateProfileString("REAPER", "layoutaction7", "", reaper.GetResourcePath().. "\\REAPER.ini") --ACTTION 7
MixedLayTCP = string.sub(MixedLayTCP,9)
------READ FROM REAPER INI--------------------------------
-- COUNT TRACKS
count_tracks = reaper.CountTracks(0)
-- LOOP FOR EVERY TRACK
for i = 0, count_tracks -1 do
track = reaper.GetTrack(0, i)
retval, TrackState = reaper.GetTrackState(track)
count_items_track = reaper.CountTrackMediaItems(track)
receives = reaper.GetTrackNumSends(track, -1)
retval, TrName = reaper.GetSetMediaTrackInfo_String(track, "P_NAME", "", 0)
--------------------------------- GET CURRENT LAYOUT ------------------------------------------
retval, cur = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", "" ,0)
--------------------------------- LAYOUTS SET - COPY THIS ------------------------------------------
-- retval, DefLayTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", DefLayTCP , 1)
-- retval, SetRecArmTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", RecArmLayTCP, 1)
-- retval, SetFolderTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", FolderLayTCP, 1)
-- retval, SetSeparatorTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", SeparatorLayTCP, 1)
-- retval, SetAuxTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", AuxLayTCP, 1)
-- retval, SetMidiTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", MidiLayTCP, 1)
-- retval, SetVideoTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", VideoLayTCP, 1)
-- retval, SetMixedTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", MixedLayTCP, 1)
--------------------------------- LAYOUTS SET ------------------------------------------
-------------------TRACK STATES---------------------------------
----------------TRACK HAS RECEIVES ? ----------------------------
if receives > 0 then
HasReceive = 1
else
HasReceive = 0
end
-------------------AUX TRACK-----------------------------------
if HasReceive == 1 and (TrackState &4) == 4 then
Aux = 1
else
Aux = 0
end
--------------------SEPARATOR-----------------------------------
if TrName == "SEPARATOR" then
Separator = 1
else
Separator = 0
end
-------------------FOLDER TRACK--------------------------------
if (TrackState &1) == 1 then
Folder = 1
else
Folder = 0
end
-------------------REC-ARM TRACK-------------------------------
if (TrackState &64) == 64 then
RecArm = 1
else
RecArm = 0
end
---------------------------------------------------------------
-- LOOP FOR EVERY ITEM
for j = 0, count_items_track -1 do
item = reaper.GetTrackMediaItem(track, j)
-- CHECK THE FIRST TAKE OF ITEM TO DETERMINE SOURCE TYPE
take = reaper.GetMediaItemTake(item, 0)
source = reaper.GetMediaItemTake_Source(take)
take_type = reaper.GetMediaSourceType(source, "test")
_G["take_type"..j] = take_type
---- TAKE TYPES -----------------------------------------
if take_type == "MIDI" then
RTakeType = "M"
elseif take_type == "VIDEO" then
RTakeType = "V"
else
RTakeType = "A"
end
end
item_check = 1 --ITEMS IN TRACK ARE CONSIDERED TO BE ALL SIMILAR
if count_items_track >= 2 then
--CHECK IF SOME ITEMS IN TRACK DON'T MATCH
for l = 0, count_items_track -2 do
m = (l + 1)
if take_type0 ~= _G["take_type"..m] and cur ~= MixedLayTCP then
SetMixedTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", MixedLayTCP, 1)
item_check = 0
break
end
end
end
--IF ALL THE ITEMS MATCH CHECK THE SOURCE TYPE AND CHANGE TRACK LAYOUT
----------------------------TRACK HAS ITEMS ------------------------------------------
if item_check == 1 and count_items_track > 0 and RecArm == 0 then
---------MIDI---------------------------------------------------------------------
if RTakeType == "M" and cur ~= MidiLayTCP then
SetMidiTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", MidiLayTCP, 1)
---------VIDEO--------------------------------------------------------------------
elseif RTakeType == "V" and cur ~= VideoLayTCP then
SetVideoTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", VideoLayTCP, 1)
---------AUDIO--------------------------------------------------------------------
elseif RTakeType == "A" and cur ~= DefLayTCP then
SetAudioLayTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT",DefLayTCP , 1)
end
end
----------------------------TRACK HAS ITEMS ------------------------------------------
------------------------NO ITEMS -------------------------------------------------
if count_items_track == 0 then
--------FOLDER--------------------------------------------------------------------
if Folder == 1 and cur ~= FolderLayTCP then
SetFolderTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", FolderLayTCP, 1)
--------SEPARATOR--------------------------------------------------------------------
elseif Separator == 1 and cur ~= SeparatorLayTCP and Folder ~= 1 then
SetSeparatorTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", SeparatorLayTCP, 1)
--------AUX--------------------------------------------------------------------
elseif Aux == 1 and cur ~= AuxLayTCP then
SetAuxTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", AuxLayTCP, 1)
--------DEFAULT LAYOUT-------------------------------------------------------------
elseif RecArm == 0 and cur ~= DefLayTCP and Separator ~= 1 and Folder ~= 1 and Aux ~= 1 then
SetDefTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT",DefLayTCP , 1)
end
end
---------REC ARM LAYOUT------------------------------------------------------------
if count_items_track >= 0 and RecArm == 1 and Folder ~= 1 and Separator ~= 1 and Aux ~= 1 and cur ~= RecArmLayTCP then
SetRecArmTCP = reaper.GetSetMediaTrackInfo_String(track, "P_TCP_LAYOUT", RecArmLayTCP, 1)
end
end
end
cooldown()
Or link:
https://stash.reaper.fm/25012/Smart%2...rHalfFinal.Lua
Few more things need to improve,
Last edited by Sexan; 09-04-2015 at 03:56 AM.
|