[Bf-blender-cvs] [8b445fb] GPencil_EditStrokes: Added an operator to delete the active Grease Pencil layer

Joshua Leung noreply at git.blender.org
Sun Oct 12 13:54:01 CEST 2014


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);




More information about the Bf-blender-cvs mailing list