Dynamic way to change Stream Deck depending on selections within a specific window
By Jesper Ankarfeldt @JesperA2020-05-03 01:32:44.339Z
Now that SF have triggers based on window titles we can change our Stream Decks based on what window is in focus.
But if you'd like to change the a streamdeck based on what is selected within specific window, this can be done with a timer script:
Here's one I've made for Nuendo, for the arrangement/main window. But it can easily be updated for other programs:
var app = sf.ui.cubendo
var lastSelection = [];
var currentSelection = [];
function selection() {
var somethingSelected = app.getMenuItem('Edit', 'Select', 'None').isEnabled
var moveToOrigin = app.getMenuItem('Edit', 'Move to', 'Origin').isEnabled
var moveToCursor = app.getMenuItem('Edit', 'Move to', 'Cursor').isEnabled
var mute = app.getMenuItem('Edit', 'Mute').isEnabled
var lock = app.getMenuItem('Edit', 'Lock...').isEnabled
var audioSelected = app.getMenuItem('Audio', 'Open Sample Editor').isEnabled;
var midiSelected = app.getMenuItem('MIDI', 'Transpose Setup...').isEnabled;
var markerSelected = !audioSelected && !midiSelected && !moveToOrigin && somethingSelected && !lock && !mute
var videoSelected = !audioSelected && !midiSelected && moveToOrigin && lock && !mute
var tempoSelected = !audioSelected && !midiSelected && !moveToOrigin && !lock && mute && moveToCursor
var signatureSelected = !audioSelected && !midiSelected && !moveToOrigin && !lock && mute && !moveToCursor
var nothingSelected = !somethingSelected
currentSelection = [audioSelected, midiSelected, markerSelected, videoSelected, tempoSelected, signatureSelected]
if (currentSelection + '' != lastSelection + '') {
if (audioSelected)
log('Audio Selected')
else if (midiSelected)
log('MIDI Selected')
else if (markerSelected)
log('Marker Selected')
else if (videoSelected)
log('Video Selected')
else if (tempoSelected)
log('Tempo Selected')
else if (signatureSelected)
log('Signature Selected')
else
log('Nothing Selected')
// Set the variable lastFocusedWindowTitle to the focues window, for the next loop.
lastSelection = currentSelection;
}
};
if (app.getWindowWithTitleStartingWith(app.appName).isFocused)
// If main window (window with program title) is in front, start loop
sf.engine.runInBackground(function () {
while (true) {
// This checks for a user cancellation.
sf.engine.checkForCancellation();
// This will break the loop if main window is not in focus or you leave the Cubase/Nuendo
if (!app.getWindowWithTitleStartingWith(app.appName).isFocused)
break;
if (sf.ui.frontmostApp.activeBundleID != app.activeBundleID)
break;
// Checking what streamdeck to load
selection()
// This will do so we check every 100 ms if there's been a "change"
sf.wait({
executionMode: 'Background',
intervalMs: 100,
onError: 'Continue'
});
}
});
Just set the script to be triggered every time a window is changed in your program, like this:

I've just added a space as the Window Title.
The only thing left is to change the log() parts to the stream decks you want to show using sf.soundflow.runCommand();
- Progress