Commit: 8b445fba5c91a215ba182b6964fea0e962c9dae2
Author: Joshua Leung
Date:   Sun Oct 12 19:38:09 2014 +1300
Branches: GPencil_EditStrokes
https://developer.blender.org/rB8b445fba5c91a215ba182b6964fea0e962c9dae2

Added an operator to delete the active Grease Pencil layer

===================================================================

M       source/blender/editors/gpencil/gpencil_edit.c
M       source/blender/editors/gpencil/gpencil_intern.h
M       source/blender/editors/gpencil/gpencil_ops.c

===================================================================

diff --git a/source/blender/editors/gpencil/gpencil_edit.c 
b/source/blender/editors/gpencil/gpencil_edit.c
index 365d61a..e06f1c7 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -347,13 +347,70 @@ void GPENCIL_OT_layer_add(wmOperatorType *ot)
        ot->name = "Add New Layer";
        ot->idname = "GPENCIL_OT_layer_add";
        ot->description = "Add new Grease Pencil layer for the active Grease 
Pencil datablock";
+       
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-
+       
        /* callbacks */
        ot->exec = gp_layer_add_exec;
        ot->poll = gp_add_poll;
 }
 
+/* ******************* Remove Active Layer ************************* */
+
+static int gp_layer_remove_poll(bContext *C)
+{
+       bGPdata *gpd = ED_gpencil_data_get_active(C);
+       bGPDlayer *gpl = gpencil_layer_getactive(gpd);
+       
+       return (gpl != NULL);
+}
+
+static int gp_layer_remove_exec(bContext *C, wmOperator *op)
+{
+       bGPdata *gpd = ED_gpencil_data_get_active(C);
+       bGPDlayer *gpl = gpencil_layer_getactive(gpd);
+       
+       /* sanity checks */
+       if (ELEM(NULL, gpd, gpl))
+               return OPERATOR_CANCELLED;
+       
+       if (gpl->flag & GP_LAYER_LOCKED) {
+               BKE_report(op->reports, RPT_ERROR, "Cannot delete locked 
layers");
+               return OPERATOR_CANCELLED;
+       }       
+       
+       /* make the layer before this the new active layer 
+        * - use the one after if this is the first
+        * - if this is the only layer, this naturally becomes NULL
+        */
+       if (gpl->prev)
+               gpencil_layer_setactive(gpd, gpl->prev);
+       else
+               gpencil_layer_setactive(gpd, gpl->next);
+               
+       /* delete the layer now... */
+       gpencil_layer_delete(gpd, gpl);
+       
+       /* notifiers */
+       WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
+       
+       return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_layer_remove(wmOperatorType *ot)
+{
+       /* identifiers */
+       ot->name = "Remove Layer";
+       ot->idname = "GPENCIL_OT_layer_remove";
+       ot->description = "Remove active Grease Pencil layer";
+       
+       ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+       
+       /* callbacks */
+       ot->exec = gp_layer_remove_exec;
+       ot->poll = gp_layer_remove_poll;
+}
+
 /* ******************* Copy Selected Strokes *********************** */
 
 static int gp_strokes_copy_poll(bContext *C)
diff --git a/source/blender/editors/gpencil/gpencil_intern.h 
b/source/blender/editors/gpencil/gpencil_intern.h
index ac1104e..209c0a4 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -102,6 +102,7 @@ void GPENCIL_OT_data_add(struct wmOperatorType *ot);
 void GPENCIL_OT_data_unlink(struct wmOperatorType *ot);
 
 void GPENCIL_OT_layer_add(struct wmOperatorType *ot);
+void GPENCIL_OT_layer_remove(struct wmOperatorType *ot);
 
 void GPENCIL_OT_active_frame_delete(struct wmOperatorType *ot);
 
diff --git a/source/blender/editors/gpencil/gpencil_ops.c 
b/source/blender/editors/gpencil/gpencil_ops.c
index 7b0710a..e1fe7c7 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -137,6 +137,7 @@ void ED_operatortypes_gpencil(void)
        WM_operatortype_append(GPENCIL_OT_data_unlink);
        
        WM_operatortype_append(GPENCIL_OT_layer_add);
+       WM_operatortype_append(GPENCIL_OT_layer_remove);
        
        WM_operatortype_append(GPENCIL_OT_active_frame_delete);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to