DescriptionCommand
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 19/04/2012 at 22:43, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 12
Platform: Windows ;
Language(s) : C++ ;---------
Hi Folks,
I'm trying to get a customgui button to action another tag's button. I can get it to work if my button is a normal DTYPE_BUTTON but it won't work for a CUSTOMGUI_BUTTON. The following is being called from the obj's Command() :DescriptionCommand *dc_button = (DescriptionCommand* )data; LONG Button = dc_button->id[0].id; switch (Button) { case ID_TAB_CUSTOM_BUTTONS: BaseTag *Record = obj->GetTag(Tsticktexture); DescriptionCommand dc; dc.id = DescID(DescLevel(1001)); Record->Message(MSG_DESCRIPTION_COMMAND, &dc); break; }
What's the trick I'm missing here?
WP. -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 20/04/2012 at 09:20, xxxxxxxx wrote:
Most of the code you posted seems to work fine in my own ResBased Dialog plugin.
This is the code I pasted into my plugin:Bool myDialog::Command(LONG id,const BaseContainer &msg) { switch (id) { case 10001: GePrint("Custom GUI Button Was Pressed"); BaseObject *obj = doc->GetActiveObject(); BaseTag *Record = obj->GetTag(Tsticktexture); //Get the stick texture tag DescriptionCommand dc; //Create a description variable to hold the id of the tag's button dc.id = DescID(DescLevel(STICKTEXTURETAG_RECORD)); //Get the tag's Record button id and assign it to "dc.id" Record->Message(MSG_DESCRIPTION_COMMAND, &dc); //Execute that button command break; } return TRUE; }
Case 10001 is a customGUI bitmap button in my plugin. And the stick texture tag's record button seems to execute properly for me when that customGUI button is clicked.
Here's a link to my plugin(without the sticktexturetag code added). Maybe it will help you'll find the problem in your files:
https://sites.google.com/site/scottayersmedia/ResBasedDialog_C%2B%2B.zip-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 20/04/2012 at 20:47, xxxxxxxx wrote:
I've just realised I'm calling this from Message() and not the Command(). Would that make any difference?
Bool PLUGINOBJECT::Message(GeListNode *node, LONG type, void *data) { switch (type) // PRESS BUTTON COMMANDS { case MSG_DESCRIPTION_COMMAND: { DescriptionCommand *dc_Custom = (DescriptionCommand* )data; LONG Custom_Button = dc_Custom->id[0].id; switch (Custom_Button) { case ID_TAB_CUSTOM_BUTTONS: // ID No. 2004 GePrint("Custom button pressed..."); break; } } } return TRUE; }
I put in a print to console instead for testing - but it won't print to console either. Here's my description element (just in case!) :
cid = DescLevel(ID_TAB_CUSTOM_BUTTONS, DTYPE_BUTTON, 0); if (!id_One || cid.IsPartOf(*id_One,NULL)) { BaseContainer locked = GetCustomDataTypeDefault(CUSTOMGUI_BITMAPBUTTON); //locked.GetCustomDataType( DTYPE_BUTTON, CUSTOMGUI_BITMAPBUTTON); locked.SetLong(DESC_CUSTOMGUI, CUSTOMGUI_BITMAPBUTTON); locked.SetBool(BITMAPBUTTON_BUTTON, TRUE); locked.SetLong(BITMAPBUTTON_BORDER, BORDER_NONE); locked.SetLong(BITMAPBUTTON_ICONID1, 1028324); locked.SetString(DESC_NAME, ""); locked.SetString(DESC_SHORT_NAME, ""); if (!description->SetParameter(cid, locked, DescLevel(ID_TAB_ONE_GRP_CUSTOM_BUTTONS))) return TRUE; }
I wonder if this has something to do with me not using a res file for the layouts? Surely not?
WP. -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 20/04/2012 at 21:44, xxxxxxxx wrote:
For some reason I was thinking that you were making a dialog type plugin.
What kind of plugin are you making?For dialog plugins. Buttons are set up in the CreateLayout()method using either a .res file or the built-in Add() functions. Or a mixture of both.
Then they are executed in the Command() method.For the other kinds of plugins. Buttons are set up and executed in the Message() method.
-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 20/04/2012 at 21:48, xxxxxxxx wrote:
Hi there Scott - thanks for your persistance!
My apologies - I should have made it a bit clearer in my original post. It's an object plugin, and I was initially trying to get it to press a tag's button from a tag that's sitting on that object (the sticktexture tag). I can get this to work with just a normal DTYPE_BUTTON but not with a customgui button.
So to be clear - it's an object plugin, and I was trying to press a custom button through the Mesage() method.
WP. -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/04/2012 at 09:12, xxxxxxxx wrote:
I've never tried to use customgui like that with an object plugin. But I have created custom bitmap buttons on tags.
I used GetD&SetDParameter() methods to make them work.
But I have no idea if this applies at all to what you're trying to do....The class class SimpleTag : public TagData { INSTANCEOF(SimpleTag,TagData) public: virtual Bool Message(GeListNode *node, LONG type, void *t_data); virtual Bool Init(GeListNode *node); virtual Bool GetDDescription(GeListNode *node, Description *description,DESCFLAGS_DESC &flags); virtual Bool GetDParameter(GeListNode *node, const DescID &id,GeData &t_data,DESCFLAGS_GET &flags); virtual Bool SetDParameter(GeListNode *node, const DescID &id,const GeData &t_data,DESCFLAGS_SET &flags); virtual EXECUTIONRESULT Execute(BaseTag *tag, BaseDocument *doc, BaseObject *op, BaseThread *bt, LONG priority, EXECUTIONFLAGS flags); static NodeData *Alloc(void) { return gNew SimpleTag; } }; ...The GetD method Bool SimpleTag::GetDParameter(GeListNode *node, const DescID &id, GeData &t_data, DESCFLAGS_GET &flags) //Used to get the decriptions data { switch(id[0].id) //Get the id's in the tag { case TEST_BUTTON: { LONG dirty = 0; BitmapButtonStruct bbs(static_cast<BaseObject*>(node), id, dirty); //The tag is the op, 'TEST_BUTTON' is the id, 'dirty' is the dirty option value t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; break; } } return SUPER::GetDParameter(node, id, t_data, flags); } ...The SetD method Bool SimpleTag::SetDParameter(GeListNode *node, const DescID &id, const GeData &t_data, DESCFLAGS_SET &flags) //Used to change the decriptions data { switch(id[0].id) //Get the id's in the tag { case TEST_BUTTON: //If the id is 'TEST_BUTTON' from the .res file GePrint("Custom Button Pressed"); //Do this break; } return SUPER::SetDParameter(node, id, t_data, flags); } ...The Message method Bool SimpleTag::Message(GeListNode *node, LONG type, void *data) { //Bunch of stuff here ////////////// This code loads an image for the bitmap button in the AM ///////////////////////// if (type == MSG_DESCRIPTION_GETBITMAP) { DescriptionGetBitmap *dgb = static_cast<DescriptionGetBitmap*>(data);//Create a variable to hold one of the tag's descriptions AutoAlloc<BaseBitmap> bm; //Create an instance of the BaseBitmap calss Filename fn = GeGetPluginPath()+"res"+"myicon.tif"; //Get the file path String image = fn.GetString(); //Get the string name of the file path bm->Init(fn); //Initialize the BaseBitmap instance dgb->bmp = bm.Release(); } ////////////////////////////////////////////////////////////////////////////////////////////////// //Continue on with other stuff tag->SetDirty(DIRTYFLAGS_DATA); //Used to update a Tag's AM GUI items return TRUE; }
That's about all the help I can offer on this.
I still don't understand a lot about customgui stuff myself. And the C++ SDK is very lacking in that area.I always use a .res file when making non-dialog based plugins.
I have no idea what problems not using them might, or might not, cause.-ScottA
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 21/04/2012 at 21:55, xxxxxxxx wrote:
Well that's interesting. It works when you're got the Get/SetDParameter() functions there. Why would they run customgui like this and not through the Message() function I wonder? Wouldn't it have been better to have kept buttons in the one area?
There needs to be more info/examples available on the customgui stuff. It's too hit and miss as it is.
Anyway - the customgui button is working now. For anyone else reading this you need to have the Get/SetDParameter() functions setup with a message() like switch in there.
Thanks again Scott. Very much appreciated.
WP.