Deleting Grease Pencil layers from Action-Editor works again
authorJoshua Leung <aligorith@gmail.com>
Fri, 8 Jul 2011 11:57:25 +0000 (11:57 +0000)
committerJoshua Leung <aligorith@gmail.com>
Fri, 8 Jul 2011 11:57:25 +0000 (11:57 +0000)
source/blender/editors/animation/anim_channels_edit.c
source/blender/editors/gpencil/editaction_gpencil.c

index ff6bd3547ce45371f412d432a4bf3f0d73099493..864bf8e55de5af83ce4305988108f2dd35b75ccf 100644 (file)
@@ -1171,28 +1171,41 @@ static int animchannels_delete_exec(bContext *C, wmOperator *UNUSED(op))
                BLI_freelistN(&anim_data);
        }
        
-       /* now do F-Curves */
-       if (ac.datatype != ANIMCONT_GPENCIL) {
-               /* filter data */
-               filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
-               ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
-               
-               /* delete selected F-Curves */
-               for (ale= anim_data.first; ale; ale= ale->next) {
-                       /* only F-Curves, and only if we can identify its parent */
-                       if (ale->type == ANIMTYPE_FCURVE) {
+       /* filter data */
+       filter= (ANIMFILTER_DATA_VISIBLE | ANIMFILTER_LIST_VISIBLE | ANIMFILTER_SEL | ANIMFILTER_FOREDIT | ANIMFILTER_NODUPLIS);
+       ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
+       
+       /* delete selected data channels */
+       for (ale= anim_data.first; ale; ale= ale->next) {
+               switch (ale->type) {
+                       case ANIMTYPE_FCURVE: 
+                       {
+                               /* F-Curves if we can identify its parent */
                                AnimData *adt= ale->adt;
                                FCurve *fcu= (FCurve *)ale->data;
                                
                                /* try to free F-Curve */
                                ANIM_fcurve_delete_from_animdata(&ac, adt, fcu);
                        }
+                               break;
+                               
+                       case ANIMTYPE_GPLAYER:
+                       {
+                               /* Grease Pencil layer */
+                               bGPdata *gpd= (bGPdata *)ale->id;
+                               bGPDlayer *gpl= (bGPDlayer *)ale->data;
+                               
+                               /* try to delete the layer's data and the layer itself */
+                               free_gpencil_frames(gpl);
+                               BLI_freelinkN(&gpd->layers, gpl);
+                       }
+                               break;
                }
-               
-               /* cleanup */
-               BLI_freelistN(&anim_data);
        }
        
+       /* cleanup */
+       BLI_freelistN(&anim_data);
+       
        /* send notifier that things have changed */
        WM_event_add_notifier(C, NC_ANIMATION|ND_ANIMCHAN|NA_EDITED, NULL);
        
index 34cddfbc46396734157426f73bddf47a87ca380a..518a90b20263e166d418f18a3632bcceee9d7fbb 100644 (file)
@@ -260,45 +260,6 @@ void deselect_gpencil_layers (void *data, short mode)
 /* ***************************************** */
 /* Frame Editing Tools */
 
-#if 0 // XXX disabled until grease pencil code stabilises again
-/* Delete selected grease-pencil layers */
-void delete_gpencil_layers (void)
-{
-       ListBase act_data = {NULL, NULL};
-       bActListElem *ale, *next;
-       void *data;
-       short datatype;
-       int filter;
-       
-       /* determine what type of data we are operating on */
-       data = get_action_context(&datatype);
-       if (data == NULL) return;
-       if (datatype != ACTCONT_GPENCIL) return;
-       
-       /* filter data */
-       filter= (ACTFILTER_VISIBLE | ACTFILTER_FOREDIT | ACTFILTER_CHANNELS | ACTFILTER_SEL);
-       actdata_filter(&act_data, filter, data, datatype);
-       
-       /* clean up grease-pencil layers */
-       for (ale= act_data.first; ale; ale= next) {
-               bGPdata *gpd= (bGPdata *)ale->owner;
-               bGPDlayer *gpl= (bGPDlayer *)ale->data;
-               next= ale->next;
-               
-               /* free layer and its data */
-               if (SEL_GPL(gpl)) {
-                       free_gpencil_frames(gpl);
-                       BLI_freelinkN(&gpd->layers, gpl);
-               }
-               
-               /* free temp memory */
-               BLI_freelinkN(&act_data, ale);
-       }
-       
-       BIF_undo_push("Delete GPencil Layers");
-}
-#endif // XXX disabled until Grease Pencil code stabilises again...
-
 /* Delete selected frames */
 void delete_gplayer_frames (bGPDlayer *gpl)
 {