Locking a Button with Timers. ReadOnly values for other ops

After watching Matthew Ragans THP 494 & 598 | The Timer CHOP | TouchDesigner - YouTube second example I thought that there is also a nifty idea for a “Run at least n seconds”-Button.
For Example: You have to record a Video but it has to be at least 5s long but not longer than 20s
So I’d set the first timer on 5s, and the second on 15s.

So far so good. But for the first Timer I’d like to lock the Button, so that the User cant toggle it off.
And thats where I an into a eighter conceptual problem or sth.
Forcing the internal state of the button whileTimerActive or onCycle in a way like: op('recordVideo_button1').panel.state = 1 won’t disable the button, obviously.
So I tried to disable the panel onStart via op('recordVideo_button1').panel.enable and enable it onDone of the first timer.
But here im just getting an Error that the PanelValue of the Button is read only.

Then I tried to script the enable option of the button itself with True if op('timer1')['running'] == 0 else False which works flawlessly.

So I guess my question here is why is this option readOnly for other ops/skripts? And can I find a reference for other parameters that behave like this?

From my understanding you are comparing what the OP.panel (panel values) does with what an OP.par (parameter) does. Working with TouchDesigner today, I’d stay away from setting anything in the panel values - I’d read them at best. We’ve moved toward working with parameters more. Widgets are controlled with parameters and their values are set through parameters. In the current Experimental builds you will see the simple Slider COMP and Button COMP have Value parameters in addition to the channels they output.

So yes I’d be putting an expression in the Enable parameter that looks at “running” or other channels of a Timer CHOP. You don’t need to put python in the TImer CHOP’s callbacks to do this.

For what you are doing, you don’t need 2 Timer CHOPs - the OP Snippets show ways of putting a bunch of timers specced as “segments” in a table and running one Timer CHOP, looking at the output’s “segment” channel to see what stage it’s on (the 5-second stage or the 15-second stage).

Worked flawlessly and is easier to configure!

Also i found out that the Class Reference for each OP tells me about the readOnly parameters.