No internet connection
  1. Home
  2. How to

Move selected Tracks to top/bottom

By Udi Simhon @Udi_Simhon
    2024-03-05 17:07:49.620Z

    I searched for a script that moves selected Tracks to top/bottom of the tracks list in PT but didn't find any. is there one?

    Thanks,
    Udi

    Solved in post #2, click to view
    • 4 replies
    1. Nathan Salefski @nathansalefski
        2024-03-06 01:52:52.095Z2024-03-06 02:02:08.511Z

        Here you go!

        Move to Bottom:

        function moveSelectedTracksToBottom() {
            sf.ui.proTools.appActivateMainWindow();
            sf.ui.proTools.invalidate();
        
            let visibleTrackNames = sf.ui.proTools.invalidate().visibleTrackNames;
        
            let bottomTrack = sf.ui.proTools.invalidate().trackGetByName({ name: visibleTrackNames[visibleTrackNames.length - 1] }).track;
        
            let selectedTrackNames = sf.ui.proTools.trackGetSelectedTracks().names;
        
            sf.app.proTools.extendSelectionToTracks({ trackNames: [bottomTrack.normalizedTrackName] });
        
            sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({
                menuPath: ['Show Only Selected Tracks']
            });
        
            bottomTrack.trackScrollToView();
        
            sf.ui.proTools.trackSelectByName({
                names: selectedTrackNames,
                deselectOthers: true,
            });
        
            let selectedTrackHeaders = sf.ui.proTools.invalidate().trackGetSelectedTracks().trackHeaders;
        
            let lastSelectedTrack = selectedTrackHeaders[selectedTrackHeaders.length - 1];
        
            let titleButtonFrame = lastSelectedTrack.titleButton.frame;
        
            let titleButtonFrameCenterX = titleButtonFrame.x + (titleButtonFrame.w / 2);
        
            let titleButtonFrameCenterY = titleButtonFrame.y + (titleButtonFrame.h / 2);
        
            let bottomTrackFrameHeight = bottomTrack.frame.h;
        
            let dragY = bottomTrackFrameHeight + lastSelectedTrack.frame.h;
        
            // Set posiition in middle of title button
            sf.mouse.setPosition({
                position: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY }
            });
        
            sf.mouse.simulateDrag({
                startPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY },
                endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY + dragY }, //bottomTrack
            });
        
            sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({
                menuPath: ['Restore Previously Shown Tracks']
            });
        }
        
        moveSelectedTracksToBottom();
        
        Move to Top:
        function moveSelectedTracksToTop() {
            sf.ui.proTools.appActivateMainWindow();
            sf.ui.proTools.invalidate();
        
            let visibleTrackNames = sf.ui.proTools.invalidate().visibleTrackNames;
        
            let topTrack = sf.ui.proTools.invalidate().trackGetByName({ name: visibleTrackNames[0] }).track;
        
            let selectedTrackNames = sf.ui.proTools.trackGetSelectedTracks().names;
        
            sf.app.proTools.extendSelectionToTracks({ trackNames: [topTrack.normalizedTrackName] });
        
            sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({
                menuPath: ['Show Only Selected Tracks']
            });
        
            topTrack.trackScrollToView();
        
            sf.ui.proTools.trackSelectByName({
                names: selectedTrackNames,
                deselectOthers: true,
            });
        
            let firstSelectedTrack = sf.ui.proTools.invalidate().trackGetSelectedTracks().trackHeaders[0];
        
            let titleButtonFrame = firstSelectedTrack.titleButton.frame;
        
            let titleButtonFrameCenterX = titleButtonFrame.x + (titleButtonFrame.w / 2);
        
            let titleButtonFrameCenterY = titleButtonFrame.y + (titleButtonFrame.h / 2);
        
            let topTrackFrameHeight = topTrack.frame.h;
        
            // Set posiition in middle of title button
            sf.mouse.setPosition({
                position: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY }
            });
        
            sf.mouse.simulateDrag({
                startPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY },
                endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY - topTrackFrameHeight }, //topTrack
            });
        
            sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({
                menuPath: ['Restore Previously Shown Tracks']
            });
        }
        
        moveSelectedTracksToTop();
        
        Reply1 LikeSolution
        1. Jack Green @Jack_Green
            2025-02-17 09:45:44.388Z

            This is great. Is there a tweak we can make? having the smallest issue when the first track is a folder. its putting the track inside the folder rather than before it?

            Thanks in advance!!

            Jack

            1. Chad Wahlbrink @Chad2025-02-18 14:58:40.310Z

              Hi, @Jack_Green,

              Changing line 41 to this seems to do the trick for moving to the top track at all track heights and regardless if the first track is a folder. I'm just shifting the y value up 10px:

              endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY - topTrackFrameHeight - 10 }, //topTrack
              

              Full script:

              function moveSelectedTracksToTop() {
                  sf.ui.proTools.appActivateMainWindow();
                  sf.ui.proTools.invalidate();
              
                  // get visible track names
                  let visibleTrackNames = sf.ui.proTools.invalidate().visibleTrackNames;
              
                  let topTrack = sf.ui.proTools.invalidate().trackGetByName({ name: visibleTrackNames[0] }).track;
              
                  let selectedTrackNames = sf.ui.proTools.trackGetSelectedTracks().names;
              
                  sf.app.proTools.extendSelectionToTracks({ trackNames: [topTrack.normalizedTrackName] });
              
                  sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({
                      menuPath: ['Show Only Selected Tracks']
                  });
              
                  topTrack.trackScrollToView();
              
                  sf.ui.proTools.trackSelectByName({
                      names: selectedTrackNames,
                      deselectOthers: true,
                  });
              
                  let firstSelectedTrack = sf.ui.proTools.invalidate().trackGetSelectedTracks().trackHeaders[0];
              
                  let titleButtonFrame = firstSelectedTrack.titleButton.frame;
              
                  let titleButtonFrameCenterX = titleButtonFrame.x + (titleButtonFrame.w / 2);
              
                  let titleButtonFrameCenterY = titleButtonFrame.y + (titleButtonFrame.h / 2);
              
                  let topTrackFrameHeight = topTrack.frame.h;
              
                  // Set posiition in middle of title button
                  sf.mouse.setPosition({
                      position: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY }
                  });
              
                  sf.mouse.simulateDrag({
                      startPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY },
                      // CW EDIT - subtracting 10 from the top track frame height will ensure that the source track is not dropped into a track folder
                      endPosition: { x: titleButtonFrameCenterX, y: titleButtonFrameCenterY - topTrackFrameHeight - 10 }, //topTrack
                  });
              
                  sf.ui.proTools.mainWindow.trackListPopupButton.popupMenuSelect({
                      menuPath: ['Restore Previously Shown Tracks']
                  });
              }
              
              moveSelectedTracksToTop();
              

              Great script, @nathansalefski!

          • U
            In reply toUdi_Simhon:
            Udi Simhon @Udi_Simhon
              2024-03-07 15:15:04.420Z

              Its Working Great!! Thanks!!