Howto trigger CommandData::GetState()
-
Hi,
I have aGeUserArea
where items are drawn. User can select one or more of these items.
Next to this I have several actions, defined asCommandData
derived plugins, which can each perform a specific action on the selected item(s). I am able to control the state of theseCommandData
icons, usingGetState()
to obtain information from my userarea and return the appropriate value to show the icon/menu-item enabled or disabled, checked or unchecked.Which message is actually responsible for triggering the
CommandData::GetState()
?
As I need to trigger the GetState when an item is (de)selected in the userarea, so that theCommandData
can check the userarea and decide to enable/disable the command.Thanks
-
Hello,
I'm not sure if you are creating a customDataType + customGUI or only a customGUI. I'm also not sure where you are storing your data. I'm afraid you are storing your data in your GeUserArea witch is not a good place to.
Your data should be stored in a BaseContainer. This BaseContainer can be stored in a tag, an object, the Document itself.
I can still try to point to the right direction :
You don't have to send a message to trigger directly the CommandData::GetState()
There's an example that could help you in the sdk //sdk/source/gui/customdata_customgui.cpp or you can see the file on github
You will see that the GeUserArea use SendParentMessage to tell the parent that something have changed.
BaseContainer m(BFM_ACTION); m.SetInt32(BFM_ACTION_ID, GetId()); SendParentMessage(m);
The parent will catch this message and will send a message to its parent. (in the exemple, Bool
ExampleCustomGUIDots::Command(Int32 id, const BaseContainer &msg))So at the end, Cinema4D will trigger what it need and GetState()
Let me know if it's not clear.
Cheers
Manuel -
@m_magalhaes
Sorry, I didn't explain well enough.I have a
CommandData
derived plugin with aGeDialog
. The only gadget of the dialog is aGeUserArea
.
In the userarea I draw items, which the user can "select" by simply left-mouse-clicking in the bounding box of the item.Next I have several other
CommandData
derived plugins.
These are used to activate actions on the selected items.
What I try to perform is to enable/disable these "action" depending on the selected item in the userarea.If I implement the
SendParentMessage
in the userarea (on successful item selection), it triggers theGeDialog::Command
, which then triggers its parent with anotherSendParentMessage
. But the parent of theGeDialog
is itsCommandData
, while I need to trigger the "action"CommandDatas
instead, in order to update their state. -
-
I had noticed that the EVMSG_CHANGE was actually triggering the GetState of my CommandDatas, but I was wondering if a different approach was available.
Still, I am OK with the EventAdd() solution. Thanks.