Cabbage Logo
Back to Cabbage Site

Widgets no longer dynamically update (regression)

Using the latest build, 2.5.38.

I was trying to reproduce the code in the new opcode demonstration video here:
https://www.youtube.com/watch?v=3Y7kkfUmZsw

You can see the code I ran below.

When I instead downloaded the 2.5.37 build, it worked as expected.
[To clarify: it worked with the artifact for
20210423.1, build id 1283, but not 20210430.7 build id 1327
machine was running windows 10 64bit]

I’m not sure if this is specifically an issue with cabbageGet/cabbageSet, or if its an issue that would affect the id channel way of doing this as well. I’ve barely dipped my toes into cabbage, so I apologize if I’m not too helpful for debugging.

I did try uninstalling both csound and cabbage, and swapped between the versions multiple times through complete uninstalls + reinstalls (with csound selected for install), which consistently allowed the earlier version to change the label by button press, while the newer 2.5.38 could not.

Frustratingly, there was no output to the console that suggested an error, just a failure for the text to change.

Let me know if you need any more details, I really appreciate your hard work!

<Cabbage>
form caption("Untitled") size(400, 300), guiMode("queue") colour(58, 110, 182), pluginId("def1")
rslider bounds(296, 162, 100, 100), channel("gain"), range(0, 1, 0, 1, .01), text("Gain"), trackerColour("lime"), outlineColour(0, 0, 0, 50), textColour("black")

button bounds (16,14,80,40), channel("button1")
label bounds(114,10,136,46), channel("label1")
</Cabbage>
<CsoundSynthesizer>
<CsOptions>
-n -d -+rtmidi=NULL -M0 -m0d 
</CsOptions>
<CsInstruments>
; Initialize the global variables. 
ksmps = 32
nchnls = 2
0dbfs = 1


instr 1
kButton, kTrig cabbageGet "button1"
kButton1 chnget "button1"
kTrig changed kButton1

if kTrig == 1 then
    cabbageSet 1,"label1", "text(\"Goodbye\")"
    //update
endif


endin

</CsInstruments>
<CsScore>
;causes Csound to run for about 7000 years...
f0 z
;starts instrument 1 and runs it for a week
i1 0 [60*60*24*7] 
</CsScore>
</CsoundSynthesizer>

Thanks @fellgrail, and welcome to the community. You’re right, this is a regression. The following works:

instr 1
    kButton, kTrig cabbageGet "button1"
    cabbageSet kTrig,"label1", "text", "goodbye"
endin 

But passing the identifier and argument in the same text doesn’t, although it should. I think I might have tried being too clever is overloading these opcodes. I’ll get it sorted tomorrow. Thanks again for posting and letting me know.

I’ve just pushed a fix for this through to GIT. I didn’t bump the version number, but you can grab the latest build when it’s ready. In my test, both of the comment, and uncommented lines of code work the same:

instr 1
kButton, kTrig cabbageGet "button1"
;cabbageSet kTrig,"label1", "text(\"goodbye\")"
cabbageSet kTrig,"label1", "text", "goodbye"
endin