No internet connection
  1. Home
  2. Script Sharing

Quick toggle between playlists and waveform view

By Brenden @nednednerb
    2023-07-28 06:05:59.148Z

    I wrote this script as a response to a question a member of the DUC had about a new command because Avid chose to put the new "markers" Track View Selector menu item in a new place between the previously often accessed "playlists" and "waveform" views.

    I very happily made it myself, mostly borrowing from Kitch and Christian, who gave answers to questions about similar use cases in the past.

    const trackViewSelector = sf.ui.proTools.selectedTrack.displaySelectorButton;
    
    const selectedTrackView = sf.ui.proTools.selectedTrack.invalidate().displaySelectorButton.value.value;
    
    function playlistsViewSelect () { 
        trackViewSelector.popupMenuSelect({ menuPath: ["playlists"], 
    })};
    
    function waveformViewSelect () { 
        trackViewSelector.popupMenuSelect({ menuPath: ["waveform"],
    })};
    
    function main() { 
    sf.ui.proTools.appActivateMainWindow();
    sf.ui.proTools.mainWindow.invalidate();
    
    if (selectedTrackView === "waveform") {
        playlistsViewSelect()
    } else {
        waveformViewSelect()
    }};
    
    main();
    
    • 2 replies
    1. Kitch Membery @Kitch2023-07-28 07:22:19.691Z

      Great work, Brenden!

      Here is a quick refactor to reduce the code down.

      function setTrackView(viewMenuPath) {
          const selectedTrack = sf.ui.proTools.selectedTrack;
          const trackViewSelector = selectedTrack.displaySelectorButton;
      
          trackViewSelector.popupMenuSelect({ menuPath: viewMenuPath, });
      }
      
      function main() {
          sf.ui.proTools.appActivateMainWindow();
          sf.ui.proTools.mainWindow.invalidate();
      
          const selectedTrack = sf.ui.proTools.selectedTrack;
          const selectedTrackView = selectedTrack.displaySelectorButton.value.invalidate().value;
      
          if (selectedTrackView === "waveform") {
              setTrackView(["playlists"]);
          } else {
              setTrackView(["waveform"]);
          }
      }
      
      main();
      
      1. Brenden @nednednerb
          2023-07-29 04:42:36.103Z

          Thanks!

          Solely in the spirit of making up a challenge for myself, I reduced the code further, trying to simplify where possible and not double any work. Such as since I called value.invalidate().value only once, I popped that on the end instead of making a constant that added a few characters:

          const sUP = sf.ui.proTools;
          const trackView = sUP.selectedTrack.displaySelectorButton;
          
          function setTrackView(viewMenuPath) {
              trackView.popupMenuSelect({ menuPath: viewMenuPath, });
          }
          
          function main() {
              sUP.appActivateMainWindow();
              sUP.mainWindow.invalidate();
          
              if (trackView.value.invalidate().value === "waveform") {
                  setTrackView(["playlists"]);
              } else {
                  setTrackView(["waveform"]);
              }
          }
          
          main();
          

          No real reason to do so. Easy practice :)