undocumented description flags

description flags

The elements used in the description resources which describe the interface for objects in the attribute manager and other editors in Cinema 4D have a variety of flags associated with them. These flags affect the appearance and/or behaviour of the element. Although many are documented in the SDK, there are some recent (well, not always that recent) ones which have never been documented.

What I have tried to do here is list what I have found out after reading the SDK, searching on Plugin Cafe, and looking through and experimenting with a lot of resource files. This list of undocumented flags is not complete and I don't know what they all do, or always how they are used. I will try to update this page if I get more information about them, since Maxon have never updated this part of the SDK adequately.

So, here are the undocumented flags that I am aware of:

Flag Associated element What it does
DUMMY STATICTEXT Doesn't appear to do anything. The STATICTEXT element with no associated string is often used as a filler - e.g. you have a GROUP with three columns but only have elements for two columns, so you put a blank STATICTEXT in the other one. The DUMMY flag is often used when a STATICTEXT is being used for this purpose but the element doesn't appear to do anything differently whether DUMMY is there or not.
JOINENDSCALE STATICTEXT

This is a useful one. Suppose you have a GROUP with three columns. You'd like a horizontal separator between rows in the group, so you insert three SEPARATOR elements like this:
SEPARATOR { LINE; }
SEPARATOR { LINE; }
SEPARATOR { LINE; }
But when you do that, you see little gaps between three short lines. To get rid of those and get one continuous line do this instead:
SEPARATOR { LINE; }
STATICTEXT { JOINENDSCALE; }
STATICTEXT { JOINENDSCALE; }

PAGE BOOL Used in the material editor. See mmaterial.res for an example:
BOOL MATERIAL_PAGE_EDITOR { PAGE; HIDDEN; PARENTMSG ID_MATERIALGROUP_EDITOR; }
What PAGE is doing is removing the checkbox from the BOOL display. This causes the text (which is 'Editor' in this case) to act as a button taking you to the correct page, in this case the Editor page in the material editor.
This could be quite useful but unfortunately doesn't appear to work anywhere except in the material editor.
PARENTCOLLAPSE Any clickable element, e.g. BOOL, REAL, etc. but not STATICTEXT (unfortunately) This is another very useful flag. You can see it working in the MoSpline interface. Here's a section of omospline.res:
BOOL MGMOSPLINEOBJECT_EXTEND_EXTEND_START
{
PARENTCOLLAPSE;
FIT_H;
}

REAL MGMOSPLINEOBJECT_EXTEND_CURVE_START
{
MINSLIDER 0.0;
MAXSLIDER 100.0;
STEP 0.1;
UNIT PERCENT;
CUSTOMGUI REALSLIDER;
PARENTCOLLAPSE MGMOSPLINEOBJECT_EXTEND_EXTEND_START;
FIT_H;
}
In the interface, this appears as a BOOL labelled 'Extend Start' with a little arrow to its left. Click the arrow and you get another five elements displayed. It's like a GROUP which is closed up and opened by clicking the little arrow to its left, but in this case it's an actual clickable element rather than text on a contrasting background as with a group header.
To use it you first need a clickable element, a BOOL in this example, with the flag assigned without any qualifier. Then for each element you want to be hidden until the arrow is clicked, give it the PARENTCOLLAPSE flag with the ID of the element which has the arrow (the BOOL here). You can do this for as many elements as you like.
PARENTMSG BOOL Used in the material editor and others such as oskyshader.res. In the material editor, in the left hand column if you uncheck the checkbox box associated with a channel, nothing happens. But if you click it again to check it, it automatically send you to the channel page. This would be used when adding custom pages to a new material.
READONLY STRING New in R12. Applied to a STRING element, the text in it can be selected but not edited.

I hope this is useful to other plugin developers. If I have got anything wrong, or there are other undocumented flags you know about, please let me know and I will make corrections/additions as necessary.