Using Multiple Roll-ups
 
 
 

The P_MULTIMAP flag in the parameter block descriptor indicates that the block being described will have more than one rollup. Here's a sample rework of the main parameter block in GeoSphere into two rollups:

enum { geo_map_1, geo_map_2 }; // enum IDs for the 2 parammaps
 
static  ParamBlockDesc2 geo_param_blk ( geo_params, _M("GeosphereParameters"),
                    0, &gsphereDesc, P_AUTO_CONSTRUCT +
                   P_AUTO_UI + P_MULTIMAP, PBLOCK_REF_NO,
 
// map rollups
2,
geo_map_1, IDD_GSPHERE_1, IDS_PARAMETERS_1, 0, 0, NULL,
geo_map_2, IDD_GSPHERE_2, IDS_PARAMETERS_2, 0, 0, NULL,
 
// params
geo_hemi, _M("hemisphere"), TYPE_BOOL, P_ANIMATABLE, IDS_HEMI,
   p_default, FALSE,
   p_ui, geo_map_2, TYPE_SINGLECHEKBOX, IDC_HEMI,
   end,
geo_segs, _M("segs"), TYPE_INT, P_ANIMATABLE, IDS_RB_SEGS,
   p_default, 4,
   p_range, MIN_SEGMENTS, MAX_SEGMENTS,
   p_ui, geo_map_1, TYPE_SPINNER, EDITTYPE_INT,
   IDC_SEGMENTS, IDC_SEGSPINNER, 0.05f,
   end,
geo_radius, _M("radius"), TYPE_FLOAT, P_ANIMATABLE + P_RESET_DEFAULT, IDS_RB_RADIUS,
   p_default, 0.0,
   p_ms_default, 25.0,
   p_range, MIN_RADIUS, MAX_RADIUS,
   p_ui, geo_map_1, TYPE_SPINNER, EDITTYPE_UNIVERSE,
   IDC_RADIUS, IDC_RADSPINNER, 1.0,
   p_uix, geo_map_2,
   end,
 
//...

First, there is an enum to provide IDs for the two maps in the main block, geo_map_1 and geo_map_2. The P_MULTIMAP flag is added to the block flags in the main descriptor constructor arguments to indicate multiple parameter maps are present. If P_AUTO_UI is specified, the usual single rollup template spec is replaced by a count (of rollups) followed by that many sets of rollup specs, each beginning with the associated mapID. The auto UI mechanism will add the rollups in the order given in this list.

In the parameter definition section, the only other change needed is that the p_ui tag will require a map ID before the rest of the UI specification to say which rollup the parameter specification relates to. In this case, we've put the hemisphere checkbox in the 2nd rollup and the "segs" and "radius" spinners in the first.

The option p_uix is used to indicate that a parameter is to appear in more than one rollup. In this case, the radius spinner also shows up in the second rollup, geo_map_2. When you do this, all the controls that connect to this parameter are ganged together; they all change when any one of them changes and all show keyframe highlights and so on. The current limitations on this are that the type of UI control and its various dialog template item IDs must be the same in each rollup in which it appears.