View Single Post
Old 09-03-2015, 11:42 AM   #45
Sexan
Human being with feelings
 
Sexan's Avatar
 
Join Date: Jun 2009
Location: Croatia
Posts: 4,595
Default

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.
Sexan is online now   Reply With Quote