Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 710) +++ trunk/src/data.c (revision 711) @@ -59,10 +59,31 @@ return res; } +void camv_group_load_begin(camv_design_t *camv) +{ + camv->grp_load = 1; + camv->grp_idx_last = -1; +} + +void camv_group_load_end(camv_design_t *camv) +{ + camv->grp_load = 0; +} + + void camv_layer_append_to_design(camv_design_t *camv, camv_layer_t *layer) { assert(layer->parent == NULL); - vtp0_append(&camv->layers, layer); + if (camv->grp_load) { + if (camv->grp_idx_last < 0) { + camv->grp_idx_last = camv->layers.used; + vtp0_append(&camv->layers, layer); + } + else + vtp0_insert_len(&camv->layers, camv->grp_idx_last, &layer, 1); + } + else + vtp0_append(&camv->layers, layer); layer->parent = camv; } Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 710) +++ trunk/src/data.h (revision 711) @@ -40,6 +40,8 @@ /* UI states */ rnd_coord_t crosshair_x, crosshair_y; + unsigned grp_load:1; /* if 1, we are loading a group */ + long grp_idx_last; /* data */ vtp0_t layers; /* to camv_layer_t */ @@ -96,7 +98,12 @@ /* Change layer selection. -1 means none selected */ void camv_layer_select(camv_design_t *camv, int idx); +/* reverse order of layers loaded within a group but place the whole group on + top (at the end of the vector) */ +void camv_group_load_begin(camv_design_t *camv); +void camv_group_load_end(camv_design_t *camv); + #define camv_hid_redraw(camv) rnd_render->invalidate_all(rnd_render) extern char camv_measurement_layer_name[];