Page 1 of 1

Creating an "active" button in WD

PostPosted: Sat May 31, 2014 12:05 pm
by ppfer
Hello,
in my last show I used Widget Designer STD to completely control PB.

Just to simplify, I had a group of buttons to jump between cues in the timeline.

I programmed each button to become green when pressed so I could have a visual feedback of which cue was active without looking at the PB timeline. Obviously, the previous active button turned back to grey.

To achieve this I programmed the button to change its color to green and then to change the color of other buttons in the group to grey.

I had many cues so when the show director asked me to add some new cue I had to manually change the programming of each button in the group. It was not a problem but I’d like to understand if there is a faster / clever way to achieve a “visual feedback” for an active cue or content using custom scripts in WD STD.

Re: Creating an "active" button in WD

PostPosted: Sat May 31, 2014 4:48 pm
by jmusarra
Code: Select all
Hi, ppfer.
I just finished up writing a button toggle/highlight system that might work for you. It uses an integer array to keep track of the selection state of things - in my case, it's projectors, but I think it'd work as well for cues or sequences.

My array (selectedProjectors) is just 1 and 0 values, and there are two functions that act on it - toggleSelection{}, which takes the ID of the button and toggles whether that value in the array is a 1 or a 0, and highlight{}, which reads through the array and sets the text colors of the associated buttons - in my case, red indicates selected and boring gray is unselected.

I first initialize the array:
Code: Select all
VDelete,selectedProjectors
VIntArray,selectedProjectors,0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

That gives me 19 objects, each representing a projector, and all in the unselected (0) state.

Here's toggleSelection{}:
Code: Select all
VGetArrayValue,j,pj,selectedProjectors

if j = 1
{
VSetArrayValue,selectedProjectors,pj,0
}
else
{
VSetArrayValue,selectedProjectors,pj,1
}
highlight{}


This just checks the value of an item in the array (at the position indicated by the parameter 'pj'). If it's a zero, it changes it to a 1, and vice versa, and then runs the highlight{} function on the array. The 'pj' parameter is passed to the function from the button's code, and is equal to the button's ID.



and highlight{}:
Code: Select all
i=1
for 1 to 19
VGetArrayValue,j,i,selectedProjectors
if j = 1
{
WDCustomScriptTextColour,i,255,0,0
}
else
{
WDCustomScriptTextColour,i,128,128,128
}
i+=1
next


Where this setup saves time is that the code for each button is the same:
Code: Select all
toggleSelection{myID}


Two caveats - the buttonIDs need to match their respective object's position in the array (I didn't think of this soon enough, and have so they're all numbered 100 higher, and there's code to add/subtract 100 from everything. Messy and annoying.), and this allows for the selection of multiple things - desirable in my application, but probably less so when it comes to playing cues or sequences. Maybe instead of an array, just run highlight{MyID} in each of your buttons?

Re: Creating an "active" button in WD

PostPosted: Sun Jun 01, 2014 1:44 pm
by Dennis Kuypers
Hey,

Here is a way that works only when all buttons are in one range (there should be no other buttons between the first and the last button id of the group).

http://forum.coolux.de/viewtopic.php?f=80&t=3253&p=9585&hilit=myid#p9585

You can probably extend this to use functions and a array to have arbitrary button ids.

Best regards
Dennis

Re: Creating an "active" button in WD

PostPosted: Sun Jun 01, 2014 3:00 pm
by ppfer
Thanks both of you!
I guess I should try it on WD Pro... Very nice solutions by the way...