...or "how to tell in a callback whether the state was changed through code or by a user?"
Your first though is: "if he's asking this question, he must be structuring something wrong"... - maybe? Please let me know!
As some background: I need to save user interactions so I can "play them back later", which works fine in 99% of my application. My general approach is that when the user performs any interactions I don't perform the action right away, I save them into a queue of actions which both gets serialized as well as getting performed and cleared out at the end of each frame. Eg: if the user clicks the [Beep] button I save a "DO_BEEP" action into a queue, then at the end of the frame I serialize the queue to disk as well as performing all the actions so the "beep" gets played then.
In the case I'm having problems with I have a ToggleButton - when the user clicks it I get a "state changed" callback, so I record the fact that it was set to a certain value (true/false). At the end of the frame I save this and also play back eg: "SET_TOGGLE:TRUE" - when I play this back the first thing I do is update the UI state of the toggle (in case it needs it) and then perform the action that's supposed to happen when it's toggled.
My problem is that when I update the UI state I call something like myToggleButton->setSelected(True); - this then calls the callback which creates another action and saves it to the queue! (so it tries to play back again next frame as well).
If I put enough "check the value's not the right value already" around things I can get it to work most of the time, but it's very reliant on making sure things are synced up in the first place, and restarting things or playing a replay tends to start with them out of sync.
My solution would be a lot more robust if I could update the button state in code without triggering the callback, or if I could tell from within the callback if it was triggered by the user or me calling it through code...
Any thoughts?
Change ToggleButton's state without triggering EventSelectStateChanged?
Moderators: CEGUI MVP, CEGUI Team
Re: Change ToggleButton's state without triggering EventSelectStateChanged?
Set the window's eventset to be muted if you don't want the callback to be fired:
http://static.cegui.org.uk/docs/0.8.7/c ... d4ee065df1
The Window is the Eventset itself, so just call it on it.
Does that help?
http://static.cegui.org.uk/docs/0.8.7/c ... d4ee065df1
The Window is the Eventset itself, so just call it on it.
Does that help?
CrazyEddie: "I don't like GUIs"
Re: Change ToggleButton's state without triggering EventSelectStateChanged?
I think that's exactly exactly what I needed - thanks very much! I'll try it as soon as I get back to the keyboard.
I had started doing something with a similar effect by setting the userData() on the Window to indicate that I should ignore the events and then checking the userData in the event handler, but this will clean things up a whole lot if my understanding is correct.
I had started doing something with a similar effect by setting the userData() on the Window to indicate that I should ignore the events and then checking the userData in the event handler, but this will clean things up a whole lot if my understanding is correct.
Who is online
Users browsing this forum: No registered users and 6 guests