Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 19/10/2010 at 21:54, xxxxxxxx wrote:
User Information: Cinema 4D Version: R12 Platform: Windows ; Mac OSX ; Language(s) : C++ ;
--------- In R11.5 and earlier, the code to add a BitmapButton in a Dynamic Description and set the image by state works.
In R12, when the image is set to a new state, it disappears, then it defaults to some partial size and causes bad auto-layout of the AM elements.
None of the similar static descriptions are affected (despite using the same code to set the image by state and so on).
What has changed?
On 22/10/2010 at 07:21, xxxxxxxx wrote:
I am surprised that you could add a BitmapButton to the user data at all. Afaik buttons are not supported by user data.
cheers, Matthias
On 22/10/2010 at 12:48, xxxxxxxx wrote:
Not 'user data'; GetDDescription()
On 26/10/2010 at 08:33, xxxxxxxx wrote:
Please post some source code showing the problem.
On 26/10/2010 at 10:55, xxxxxxxx wrote:
It is not a code problem as far as I am aware. Again, this works in all other builds except R12. First, here are some images to illustrate the problem:
The first two are static bitmap buttons (in the .res file). These are working.
http://www.kuroyumes-developmentzone.com/referenced/Before_Static.jpg
http://www.kuroyumes-developmentzone.com/referenced/After_Static.jpg
These are the dynamic bitmap buttons. Note that the secondary image (for disabled) is not being displayed:
http://www.kuroyumes-developmentzone.com/referenced/Before_Dynamic.jpg
http://www.kuroyumes-developmentzone.com/referenced/After_Dynamic.jpg
The same basic code is employed for static and dynamic bitmap changes on state change and it works in R11.5 and earlier (same code). The code below is how I was instructed to achieve this type of bitmap state change using Descriptions in the Attribute Manager. Something change in R12 (surprise) and it is not documented as far as I am aware.
// NodeData.GetDDescription - Descriptions and Parameters //*---------------------------------------------------------------------------* Bool GreeblerObj::GetDDescription(GeListNode* node, Description* description, DESCFLAGS_DESC& flags) //*---------------------------------------------------------------------------* { gcbArray->Flush(); nubArray->Flush(); //pipArray->Flush(); // Initial validity checks if (CheckIsRunning(CHECKISRUNNING_EXTERNALRENDERING) || CheckIsRunning(CHECKISRUNNING_EDITORRENDERING)) return TRUE; if (!(node && description)) return FALSE; if (!description->LoadDescription(node->GetType())) return FALSE; // Get necessary pointers BaseDocument* baseDoc = node->GetDocument(); if (!baseDoc) return FALSE; BaseObject* obj = static_cast<BaseObject*>(node); if (!obj) return FALSE; BaseContainer* opBC = obj->GetDataInstance(); if (!opBC) return FALSE; #ifndef C4D_R115 // important to check for speedup c4d! const DescID *singleid = description->GetSingleDescID(); DescID cid = DescLevel(GREEBLER_NURN_RENDERINSTANCE,DTYPE_BOOL,0); if (!singleid || cid.IsPartOf(*singleid,NULL)) // important to check for speedup c4d! { BaseContainer *bc = description->GetParameterI(cid,NULL); bc->SetBool(DESC_HIDE, TRUE); } //if (!description->SetParameter(DescLevel(GREEBLER_NURN_RENDERINSTANCE,DTYPE_BOOL,0L), stateBC, DescLevel(GREEBLER_GROUP_NURN_SETTING))) return FALSE; #endif // ************************* // Add Dynamic Descriptions // ************************* // Custom Greeble Shapes // - Add Shapes from those inserted into Document and specified under GREEBLER_GREEC_LIBRARY link BaseObject* libop = opBC->GetObjectLink(GREEBLER_GREEC_LIBRARY, baseDoc); if (libop) { if (!GetDDesc_CGreebles(description, baseDoc, obj, opBC, libop)) return FALSE; } // Add Nurnie BitmapButtons and Frequency sliders // - Add Objects from those inserted into Document and specified under GREEBLER_NURN_LIBRARY link libop = opBC->GetObjectLink(GREEBLER_NURN_LIBRARY, baseDoc); if (libop) { if (!GetDDesc_Nurnies(description, baseDoc, obj, opBC, libop)) return FALSE; } /* // Add Piping Elements // - Add Objects from those inserted into Document and specified under GREEBLER_PIPE_LIBRARY link libop = opBC->GetObjectLink(GREEBLER_PIPE_LIBRARY, baseDoc); if (libop) { if (!GetDDesc_Piping(description, baseDoc, obj, opBC, libop)) return FALSE; } */ flags |= DESCFLAGS_DESC_LOADED|DESCFLAGS_DESC_RECURSIONLOCK; return SUPER::GetDDescription(node,description,flags); } // GreeblerObj.GetDDesc_CGreebles //*---------------------------------------------------------------------------* Bool GreeblerObj::GetDDesc_CGreebles(Description* description, BaseDocument* baseDoc, BaseObject* obj, BaseContainer* opBC, BaseObject* libop) //*---------------------------------------------------------------------------* { // Add Shape BitmapButtons and Frequency sliders // (States and Frequencies stored in dynamic aarray!) // - Custom Shape Bar and Array lists BaseContainer listBC; BaseTag* tag = NULL; BaseContainer* gbc = NULL; LONG col = GREEBLER_GREEC_GREEBLES_COL1; LONG ccnt = 0L; for (BaseObject* op = libop->GetDown(); op; op = op->GetNext()) { // Get existing GCBInfoTag (BaseContainer) or create new tag tag = ProcessGCBInfoTag(baseDoc, obj, op, "ggicon"); if (!tag) continue; gcbArray->Append(tag); gbc = tag->GetDataInstance(); gbc->SetLong(TGCBINFO_ID, GREEBLER_GREEC_BITMAP+ccnt); gbc->SetString(TGCBINFO_NAME, op->GetName()); gbc->SetLink(TGCBINFO_LINK, obj); listBC.SetString(ccnt, op->GetName()); // Add Descriptions // - BitmapButton (actual bitmap is supplied like stock bitmaps!) if (!description->SetParameter(DescLevel(GREEBLER_GREEC_BITMAP+ccnt,DTYPE_BUTTON,0L), bmbBC, DescLevel(col))) return FALSE; // - Labels on Left if (col == GREEBLER_GREEC_GREEBLES_COL1) { nameBC.SetString(DESC_SHORT_NAME, GeLoadString(GRES_GDD_NAME)); freqBC.SetString(DESC_SHORT_NAME, GeLoadString(GRES_GDD_FREQUENCY)); rrndBC.SetString(DESC_SHORT_NAME, GeLoadString(GRES_GDD_ROTRANDOM)); rangBC.SetString(DESC_SHORT_NAME, GeLoadString(GRES_GDD_ROTANGLE)); } else { nameBC.SetString(DESC_SHORT_NAME, String("")); freqBC.SetString(DESC_SHORT_NAME, String("")); rrndBC.SetString(DESC_SHORT_NAME, String("")); rangBC.SetString(DESC_SHORT_NAME, String("")); } // - Name if (!description->SetParameter(DescLevel(GREEBLER_GREEC_NAME+ccnt,DTYPE_STATICTEXT,0L), nameBC, DescLevel(col))) return FALSE; opBC->SetString(GREEBLER_GREEC_NAME+ccnt, gbc->GetString(TGCBINFO_NAME)); // - Frequency if (!description->SetParameter(DescLevel(GREEBLER_GREEC_FREQ+ccnt,DTYPE_REAL,0L), freqBC, DescLevel(col))) return FALSE; opBC->SetReal(GREEBLER_GREEC_FREQ+ccnt, gbc->GetReal(TGCBINFO_FREQUENCY)); // - Random Surface Rotation if (!description->SetParameter(DescLevel(GREEBLER_GREEC_ROT_RANDOM+ccnt,DTYPE_BOOL,0L), rrndBC, DescLevel(col))) return FALSE; opBC->SetBool(GREEBLER_GREEC_ROT_RANDOM+ccnt, gbc->GetBool(TGCBINFO_ROTRANDOM)); // - Surface Rotation if (!description->SetParameter(DescLevel(GREEBLER_GREEC_ROT_ANGLE+ccnt,DTYPE_REAL,0L), rangBC, DescLevel(col))) return FALSE; opBC->SetReal(GREEBLER_GREEC_ROT_ANGLE+ccnt, gbc->GetReal(TGCBINFO_ROTANGLE)); // - State if (!description->SetParameter(DescLevel(GREEBLER_GREEC_STATE+ccnt,DTYPE_BOOL,0L), stateBC, DescLevel(col))) return FALSE; opBC->SetBool(GREEBLER_GREEC_STATE+ccnt, gbc->GetBool(TGCBINFO_STATE)); ++ccnt; // Control Column Group in use ++col; if (col > GREEBLER_GREEC_GREEBLES_COL5) col = GREEBLER_GREEC_GREEBLES_COL1; } opBC->SetLong(GREEBLER_GREEC_COUNT, ccnt); // Fill in Bar and Array shape options BaseContainer shapeBC = GetCustomDataTypeDefault(DTYPE_LONG); shapeBC.SetString(DESC_SHORT_NAME, "Shape"); shapeBC.SetBool(DESC_ANIMATE, FALSE); shapeBC.SetContainer(DESC_CYCLE, listBC); if (!description->SetParameter(DescLevel(GREEBLER_GREEC_BARS_OBJ,DTYPE_LONG,0L), shapeBC, DescLevel(GREEBLER_GROUP_GREEBLES_CUSTOM))) return FALSE; if (!description->SetParameter(DescLevel(GREEBLER_GREEC_ARRAY_OBJ,DTYPE_LONG,0L), shapeBC, DescLevel(GREEBLER_GROUP_GREEBLES_CUSTOM))) return FALSE; if (!description->SetParameter(DescLevel(GREEBLER_GREEC_RARRAY_OBJ,DTYPE_LONG,0L), shapeBC, DescLevel(GREEBLER_GROUP_GREEBLES_CUSTOM))) return FALSE; if (opBC->GetLong(GREEBLER_GREEC_BARS_OBJ) >= ccnt) opBC->SetLong(GREEBLER_GREEC_BARS_OBJ, 0L); if (opBC->GetLong(GREEBLER_GREEC_ARRAY_OBJ) >= ccnt) opBC->SetLong(GREEBLER_GREEC_ARRAY_OBJ, 0L); if (opBC->GetLong(GREEBLER_GREEC_RARRAY_OBJ) >= ccnt) opBC->SetLong(GREEBLER_GREEC_RARRAY_OBJ, 0L); return TRUE; } // NodeData.Message //*---------------------------------------------------------------------------* Bool GreeblerObj::Message(GeListNode* node, LONG type, void* data) //*---------------------------------------------------------------------------* { //GePrint(MsgToString(type)); if (!node) return FALSE; if (type == MSG_DESCRIPTION_GETBITMAP) return MsgGetBitmap(static_cast<DescriptionGetBitmap*>(data), static_cast<BaseObject*>(node)); else if (type == MSG_DESCRIPTION_COMMAND) return MsgCommand(static_cast<DescriptionCommand*>(data), static_cast<BaseObject*>(node)); else if (type == MSG_DESCRIPTION_POSTSETPARAMETER) return MsgPostSetParameter(static_cast<DescriptionPostSetValue*>(data), static_cast<BaseObject*>(node)); /* else if (type == MSG_DESCRIPTION_CHECKDRAGANDDROP) return MsgCheckDragAndDrop(static_cast<BaseTag*>(node), static_cast<DescriptionCheckDragAndDrop*>(data)); */ return SUPER::Message(node,type,data); } // GreeblerObj.GetSSBitMap //*---------------------------------------------------------------------------* void GreeblerObj::GetSSBitMap(DescriptionGetBitmap* dgb, const Bool& enabled, const String& sfn) //*---------------------------------------------------------------------------* { Filename bg; if (enabled) bg = stocksfn+Filename(sfn+"_T.tif"); else bg = stocksfn+Filename(sfn+"_F.tif"); if (!GeFExist(bg)) return; AutoAlloc<BaseBitmap> bm; if (!bm) return; bm->Init(bg); dgb->bmp = bm.Release(); } // GreeblerObj.MsgGetBitmap //*---------------------------------------------------------------------------* Bool GreeblerObj::MsgGetBitmap(DescriptionGetBitmap* dgb, BaseObject* op) //*---------------------------------------------------------------------------* { if (!(dgb && op)) return TRUE; BaseContainer* bc = op->GetDataInstance(); LONG id = dgb->id[0].id; if (id == GREEBLER_INFO) { Filename bg = GeGetPluginPath()+Filename("res")+Filename("banner.tif"); if (!GeFExist(bg)) return TRUE; AutoAlloc<BaseBitmap> bm; if (!bm) return TRUE; bm->Init(bg); dgb->bmp = bm.Release(); } // Stock Greebles else if (id == GREEBLER_BITMAP_CUBE) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_CUBE), "cube"); else if (id == GREEBLER_BITMAP_T) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_T), "Tshape"); else if (id == GREEBLER_BITMAP_L) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_L), "Lshape"); else if (id == GREEBLER_BITMAP_C) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_C), "Cshape"); else if (id == GREEBLER_BITMAP_H) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_H), "Hshape"); else if (id == GREEBLER_BITMAP_D) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_D), "Dshape"); else if (id == GREEBLER_BITMAP_BOX) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_BOX), "box"); else if (id == GREEBLER_BITMAP_CUBECC) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_CUBECC), "cubecc"); else if (id == GREEBLER_BITMAP_OBLOCT) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_OBLOCT), "obloct"); else if (id == GREEBLER_BITMAP_CYLINDER) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_CYLINDER), "cyl"); else if (id == GREEBLER_BITMAP_RING) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_RING), "ring"); else if (id == GREEBLER_BITMAP_REGPOLY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_REGPOLY), "regpoly"); else if (id == GREEBLER_BITMAP_REGPOLYR) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_REGPOLYR), "regpolyr"); else if (id == GREEBLER_BITMAP_BARS) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_BARS), "bars"); else if (id == GREEBLER_BITMAP_ARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_ARRAY), "array"); else if (id == GREEBLER_BITMAP_RARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_RARRAY), "rarray"); else if (id == GREEBLER_GREE_BOXIMAGE) GetSSBitMap(dgb, TRUE, "box"); else if (id == GREEBLER_GREE_CYLIMAGE) GetSSBitMap(dgb, TRUE, "cyl"); else if (id == GREEBLER_GREE_RNGIMAGE) GetSSBitMap(dgb, TRUE, "ring"); else if (id == GREEBLER_GREE_POLIMAGE) GetSSBitMap(dgb, TRUE, "regpoly"); else if (id == GREEBLER_GREE_PLRIMAGE) GetSSBitMap(dgb, TRUE, "regpolyr"); // Custom Greebles else if (id == GREEBLER_BITMAP_CBARS) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_CBARS), "bars"); else if (id == GREEBLER_BITMAP_CARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_CARRAY), "array"); else if (id == GREEBLER_BITMAP_CRARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_SHAPE_CRARRAY), "rarray"); else if ((id >= GREEBLER_GREEC_BITMAP) && (id < GREEBLER_GREEC_FREQ)) { // Get associated GCBInfo bitmap BaseBitmap* ibm = GetGCBInfoBitmap_Greebles(op, bc, id); if (!ibm) return TRUE; AutoAlloc<BaseBitmap> bm; if (!bm) return TRUE; ibm->CopyTo(bm); dgb->bmp = bm.Release(); } // Nurnies else if (id == GREEBLER_BITMAP_NBARS) GetSSBitMap(dgb, bc->GetBool(GREEBLER_OBJECT_NBARS), "bars"); else if (id == GREEBLER_BITMAP_NARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_OBJECT_NARRAY), "array"); else if (id == GREEBLER_BITMAP_NRARRAY) GetSSBitMap(dgb, bc->GetBool(GREEBLER_OBJECT_NRARRAY), "rarray"); else if ((id >= GREEBLER_NURN_BITMAP) && (id <= GREEBLER_NURN_BITMAP_END)) { // Get associated GCBInfo bitmap BaseBitmap* ibm = GetGCBInfoBitmap_Nurnies(op, bc, id); if (!ibm) return TRUE; AutoAlloc<BaseBitmap> bm; if (!bm) return TRUE; ibm->CopyTo(bm); dgb->bmp = bm.Release(); } return TRUE; } // NodeData.GetDParameter //*---------------------------------------------------------------------------* Bool GreeblerObj::GetDParameter(GeListNode* node, const DescID& id, GeData& t_data, DESCFLAGS_GET& flags) //*---------------------------------------------------------------------------* { if (!node) return FALSE; LONG did = id[0].id; // Custom Greebles if ((did >= GREEBLER_GREEC_BITMAP) && (did <= GREEBLER_GREEC_BITMAP_END)) { BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, cg_bm_dirty); t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; --cg_bm_dirty; } // Nurnies else if ((did >= GREEBLER_NURN_BITMAP) && (did <= GREEBLER_NURN_BITMAP_END)) { BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, nu_bm_dirty); t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; --nu_bm_dirty; } else { switch (did) { // BitmapButtons case GREEBLER_INFO: { BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, 0L); t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; break; } case GREEBLER_BITMAP_CUBE: case GREEBLER_BITMAP_T: case GREEBLER_BITMAP_L: case GREEBLER_BITMAP_C: case GREEBLER_BITMAP_H: case GREEBLER_BITMAP_D: case GREEBLER_BITMAP_BOX: case GREEBLER_BITMAP_CUBECC: case GREEBLER_BITMAP_OBLOCT: case GREEBLER_BITMAP_CYLINDER: case GREEBLER_BITMAP_RING: case GREEBLER_BITMAP_REGPOLY: case GREEBLER_BITMAP_REGPOLYR: case GREEBLER_BITMAP_BARS: case GREEBLER_BITMAP_ARRAY: case GREEBLER_BITMAP_RARRAY: case GREEBLER_GREE_BOXIMAGE: case GREEBLER_GREE_CYLIMAGE: case GREEBLER_GREE_RNGIMAGE: case GREEBLER_GREE_POLIMAGE: case GREEBLER_GREE_PLRIMAGE: { BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, sg_bm_dirty); t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; --sg_bm_dirty; break; } // Custom Greebles case GREEBLER_BITMAP_CBARS: case GREEBLER_BITMAP_CARRAY: case GREEBLER_BITMAP_CRARRAY: { BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, cg_bm_dirty); t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; --cg_bm_dirty; } // Nurnies case GREEBLER_BITMAP_NBARS: case GREEBLER_BITMAP_NARRAY: case GREEBLER_BITMAP_NRARRAY: { BitmapButtonStruct bbs(static_cast<PluginObject*>(node), id, nu_bm_dirty); t_data = GeData(CUSTOMDATATYPE_BITMAPBUTTON, bbs); flags |= DESCFLAGS_GET_PARAM_GET; --nu_bm_dirty; } default: break; } } return SUPER::GetDParameter(node, id, t_data, flags); } // NodeData.SetDParameter //*---------------------------------------------------------------------------* Bool GreeblerObj::SetDParameter(GeListNode* node, const DescID& id, const GeData& t_data, DESCFLAGS_SET& flags) //*---------------------------------------------------------------------------* { if (!node) return FALSE; LONG did = id[0].id; // Info BitmapButton if (did == GREEBLER_INFO) { if (flags & DESCFLAGS_SET_USERINTERACTION) { // user clicked on button - open Dialog greebler->ShowHelpDialog(); } flags |= DESCFLAGS_SET_PARAM_SET; } // Cube BitmapButton else if (did == GREEBLER_BITMAP_CUBE) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_CUBE, !bc->GetBool(GREEBLER_SHAPE_CUBE)); } flags |= DESCFLAGS_SET_PARAM_SET; } // T BitmapButton else if (did == GREEBLER_BITMAP_T) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_T, !bc->GetBool(GREEBLER_SHAPE_T)); } flags |= DESCFLAGS_SET_PARAM_SET; } // L BitmapButton else if (did == GREEBLER_BITMAP_L) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_L, !bc->GetBool(GREEBLER_SHAPE_L)); } flags |= DESCFLAGS_SET_PARAM_SET; } // C BitmapButton else if (did == GREEBLER_BITMAP_C) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_C, !bc->GetBool(GREEBLER_SHAPE_C)); } flags |= DESCFLAGS_SET_PARAM_SET; } // H BitmapButton else if (did == GREEBLER_BITMAP_H) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_H, !bc->GetBool(GREEBLER_SHAPE_H)); } flags |= DESCFLAGS_SET_PARAM_SET; } // D BitmapButton else if (did == GREEBLER_BITMAP_D) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_D, !bc->GetBool(GREEBLER_SHAPE_D)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Box BitmapButton else if (did == GREEBLER_BITMAP_BOX) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_BOX, !bc->GetBool(GREEBLER_SHAPE_BOX)); } flags |= DESCFLAGS_SET_PARAM_SET; } // CubeCC BitmapButton else if (did == GREEBLER_BITMAP_CUBECC) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_CUBECC, !bc->GetBool(GREEBLER_SHAPE_CUBECC)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Oblong Octagon BitmapButton else if (did == GREEBLER_BITMAP_OBLOCT) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_OBLOCT, !bc->GetBool(GREEBLER_SHAPE_OBLOCT)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Cylinder BitmapButton else if (did == GREEBLER_BITMAP_CYLINDER) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_CYLINDER, !bc->GetBool(GREEBLER_SHAPE_CYLINDER)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Ring BitmapButton else if (did == GREEBLER_BITMAP_RING) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_RING, !bc->GetBool(GREEBLER_SHAPE_RING)); } flags |= DESCFLAGS_SET_PARAM_SET; } // RegularPolygon BitmapButton else if (did == GREEBLER_BITMAP_REGPOLY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_REGPOLY, !bc->GetBool(GREEBLER_SHAPE_REGPOLY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // RegularPolygonR BitmapButton else if (did == GREEBLER_BITMAP_REGPOLYR) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_REGPOLYR, !bc->GetBool(GREEBLER_SHAPE_REGPOLYR)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Bars BitmapButton else if (did == GREEBLER_BITMAP_BARS) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_BARS, !bc->GetBool(GREEBLER_SHAPE_BARS)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Array BitmapButton else if (did == GREEBLER_BITMAP_ARRAY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_ARRAY, !bc->GetBool(GREEBLER_SHAPE_ARRAY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Ring Array BitmapButton else if (did == GREEBLER_BITMAP_RARRAY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_RARRAY, !bc->GetBool(GREEBLER_SHAPE_RARRAY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // Custom Greebles // - Bars BitmapButton else if (did == GREEBLER_BITMAP_CBARS) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_CBARS, !bc->GetBool(GREEBLER_SHAPE_CBARS)); } flags |= DESCFLAGS_SET_PARAM_SET; } // - Array BitmapButton else if (did == GREEBLER_BITMAP_CARRAY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_CARRAY, !bc->GetBool(GREEBLER_SHAPE_CARRAY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // - Ring Array BitmapButton else if (did == GREEBLER_BITMAP_CRARRAY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_SHAPE_CRARRAY, !bc->GetBool(GREEBLER_SHAPE_CRARRAY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // - Individual Shapes else if ((did >= GREEBLER_GREEC_BITMAP) && (did < GREEBLER_GREEC_FREQ)) { if (flags & DESCFLAGS_SET_USERINTERACTION) { LONG inc = did-GREEBLER_GREEC_BITMAP; BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state Bool state = !bc->GetBool(GREEBLER_GREEC_STATE+inc); bc->SetBool(GREEBLER_GREEC_STATE+inc, state); BaseTag* tag = SetGCBInfoTag_Greebles(node->GetDocument(), static_cast<BaseObject*>(node), did); if (tag) tag->GetDataInstance()->SetBool(TGCBINFO_STATE, state); } flags |= DESCFLAGS_SET_PARAM_SET; } // Nurnies // - Bars BitmapButton else if (did == GREEBLER_BITMAP_NBARS) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_OBJECT_NBARS, !bc->GetBool(GREEBLER_OBJECT_NBARS)); } flags |= DESCFLAGS_SET_PARAM_SET; } // - Array BitmapButton else if (did == GREEBLER_BITMAP_NARRAY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_OBJECT_NARRAY, !bc->GetBool(GREEBLER_OBJECT_NARRAY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // - Ring Array BitmapButton else if (did == GREEBLER_BITMAP_NRARRAY) { if (flags & DESCFLAGS_SET_USERINTERACTION) { BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state bc->SetBool(GREEBLER_OBJECT_NRARRAY, !bc->GetBool(GREEBLER_OBJECT_NRARRAY)); } flags |= DESCFLAGS_SET_PARAM_SET; } // - Individual Nurnie objects else if ((did >= GREEBLER_NURN_BITMAP) && (did <= GREEBLER_NURN_BITMAP_END)) { if (flags & DESCFLAGS_SET_USERINTERACTION) { LONG inc = did-GREEBLER_NURN_BITMAP; BaseContainer* bc = static_cast<PluginObject*>(node)->GetDataInstance(); // user clicked on button - toggle state Bool state = !bc->GetBool(GREEBLER_NURN_STATE+inc); bc->SetBool(GREEBLER_NURN_STATE+inc, state); BaseTag* tag = SetGCBInfoTag_Nurnies(node->GetDocument(), static_cast<BaseObject*>(node), did); if (tag) tag->GetDataInstance()->SetBool(TGCBINFO_STATE, state); } flags |= DESCFLAGS_SET_PARAM_SET; } return SUPER::SetDParameter(node, id, t_data, flags); }