Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 725) +++ trunk/src/data.c (revision 726) @@ -71,22 +71,36 @@ } -void camv_layer_append_to_design(camv_design_t *camv, camv_layer_t *layer) +long camv_layer_append_to_design(camv_design_t *camv, camv_layer_t *layer) { + long res = -1; + assert(layer->parent == NULL); if (camv->grp_load) { if (camv->grp_idx_last < 0) { camv->grp_idx_last = camv->layers.used; + res = camv->layers.used; vtp0_append(&camv->layers, layer); } - else + else { vtp0_insert_len(&camv->layers, camv->grp_idx_last, &layer, 1); + res = camv->grp_idx_last; + } } - else + else { + res = camv->layers.used; vtp0_append(&camv->layers, layer); + } layer->parent = camv; + return res; } +long camv_sublayer_append_after(camv_design_t *camv, camv_layer_t *layer, long idx) +{ + idx++; + vtp0_insert_len(&camv->layers, idx, &layer, 1); + return idx; +} camv_layer_t *camv_layer_by_name(camv_design_t *camv, const char *name, int alloc) { Index: trunk/src/data.h =================================================================== --- trunk/src/data.h (revision 725) +++ trunk/src/data.h (revision 726) @@ -47,6 +47,11 @@ vtp0_t layers; /* to camv_layer_t */ int lysel; /* layer idx (lid) of the currently selected layer */ camv_rtree_box_t bbox; + + /* for loaders */ + struct { + long ly; + } loader; }; struct camv_layer_s { @@ -75,8 +80,13 @@ non-existing layer if alloc is non-zero; appends to design automatically */ camv_layer_t *camv_layer_by_name(camv_design_t *camv, const char *name, int alloc); -void camv_layer_append_to_design(camv_design_t *camv, camv_layer_t *layer); +/* Returns index of the new layer (useful for camv_sublayer_append_after()) */ +long camv_layer_append_to_design(camv_design_t *camv, camv_layer_t *layer); +/* Appends a (typically hidden) sublayer after the last layer of the group + at idx; returns new idx for appending more sublayers */ +long camv_sublayer_append_after(camv_design_t *camv, camv_layer_t *layer, long idx); + /* Invent a layer color for a main layer that has non set explicitly */ void camv_layer_invent_color(camv_design_t *camv, camv_layer_t *layer);