[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18775] branches/blender2.5/blender/source /blender: - Change 2 operators from using int properties into enums.

Campbell Barton ideasman42 at gmail.com
Sun Feb 1 03:37:19 CET 2009


Revision: 18775
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18775
Author:   campbellbarton
Date:     2009-02-01 03:37:12 +0100 (Sun, 01 Feb 2009)

Log Message:
-----------
- Change 2 operators from using int properties into enums.
- Renamed MESH_OT_mesh_selection_mode_menu to MESH_OT_mesh_selection_type since the operator doesnt have to be accessed from a menu.

Shaul, you might want to look over this, using enums means WM_menu_invoke can be used instead of writing an invoke function for each operator.

Added error messages to WM_menu_invoke if no enum "type" property is found.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
    branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-02-01 01:04:00 UTC (rev 18774)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_mods.c	2009-02-01 02:37:12 UTC (rev 18775)
@@ -3686,25 +3686,12 @@
 	}
 }
 
-static int mesh_selection_mode_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
-	int items;
-	char *menu, *p;
-	
-	items = 3;
-	
-	menu= MEM_callocN(items * OP_MAX_TYPENAME, "string");
-	
-	p= menu + sprintf(menu, "%s %%t", "Selection Mode");
-	p+= sprintf(p, "|%s %%x%d", "Vertices", 1);
-	p+= sprintf(p, "|%s %%x%d", "Edges", 2);
-	p+= sprintf(p, "|%s %%x%d", "Faces", 3);
-	
-	uiPupMenuOperator(C, 20, op, "index", menu);
-	MEM_freeN(menu);
-	
-	return OPERATOR_RUNNING_MODAL;
-}
+static EnumPropertyItem prop_mesh_edit_types[] = {
+	{1, "VERT", "Vertices", ""},
+	{2, "EDGE", "Edges", ""},
+	{3, "FACE", "Faces", ""},
+	{0, NULL, NULL, NULL}
+};
 
 static int mesh_selection_mode_menu_exec(bContext *C, wmOperator *op)
 {		
@@ -3712,21 +3699,21 @@
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
 
-	mesh_selection_mode_menu(em, RNA_int_get(op->ptr,"index"));
+	mesh_selection_mode_menu(em, RNA_enum_get(op->ptr,"type"));
 
 	WM_event_add_notifier(C, NC_WINDOW, obedit);
 
 	return OPERATOR_FINISHED;
 }
 
-void MESH_OT_mesh_selection_mode_menu(wmOperatorType *ot)
+void MESH_OT_mesh_selection_type(wmOperatorType *ot)
 {
 	/* identifiers */
 	ot->name= "Selection Mode";
-	ot->idname= "MESH_OT_mesh_selection_mode_menu";
+	ot->idname= "MESH_OT_mesh_selection_type";
 	
 	/* api callbacks */
-	ot->invoke= mesh_selection_mode_menu_invoke;
+	ot->invoke= WM_menu_invoke;
 	ot->exec= mesh_selection_mode_menu_exec;
 	
 	ot->poll= ED_operator_editmesh;
@@ -3734,8 +3721,8 @@
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
-	/*props */
-	RNA_def_int(ot->srna, "index", 1, 0, INT_MAX, "Index", "", 0, 4);
+	/* props */
+	RNA_def_enum(ot->srna, "type", prop_mesh_edit_types, 0, "Type", "Select the mesh selection type");
 	
 }
 /* ************************* SEAMS AND EDGES **************** */

Modified: branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-02-01 01:04:00 UTC (rev 18774)
+++ branches/blender2.5/blender/source/blender/editors/mesh/editmesh_tools.c	2009-02-01 02:37:12 UTC (rev 18775)
@@ -1096,52 +1096,38 @@
 //	DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
 }
 
+/* Note, these values must match delete_mesh() event values */
+static EnumPropertyItem prop_mesh_delete_types[] = {
+	{10,"VERT",		"Vertices", ""},
+	{1, "EDGE",		"Edges", ""},
+	{2, "FACE",		"Faces", ""},
+	{3, "ALL",		"All", ""},
+	{4, "EDGE_FACE","Edges & Faces", ""},
+	{5, "ONLY_FACE","Only Faces", ""},
+	{6, "EDGE_LOOP","Edge Loop", ""},
+	{0, NULL, NULL, NULL}
+};
+
 static int delete_mesh_exec(bContext *C, wmOperator *op)
 {
 	Object *obedit= CTX_data_edit_object(C);
 	EditMesh *em= ((Mesh *)obedit->data)->edit_mesh;
 	
-	delete_mesh(obedit,em,RNA_int_get(op->ptr, "event"));
+	delete_mesh(obedit,em,RNA_enum_get(op->ptr, "type"));
 	
 	WM_event_add_notifier(C, NC_OBJECT|ND_GEOM_SELECT, obedit);
 	
 	return OPERATOR_FINISHED;
 }
 
-static int delete_mesh_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
-	int items;
-	char *menu, *p;
-	
-	items = 6;
-	
-	menu= MEM_callocN(items * OP_MAX_TYPENAME, "string");
-	
-	p= menu + sprintf(menu, "%s %%t", "Erase");
-	p+= sprintf(p, "|%s %%x%d", "Vertices", 10);
-	p+= sprintf(p, "|%s %%x%d", "Edges", 1);
-	p+= sprintf(p, "|%s %%x%d", "Faces", 2);
-	p+= sprintf(p, "|%s %%x%d", "All", 3);
-	p+= sprintf(p, "|%s %%x%d", "Edges & Faces", 4);
-	p+= sprintf(p, "|%s %%x%d", "Only Faces", 5);
-	p+= sprintf(p, "|%s %%x%d", "Edge Loop", 6);
-	
-	
-	uiPupMenuOperator(C, 20, op, "event", menu);
-	MEM_freeN(menu);
-	
-	return OPERATOR_RUNNING_MODAL;
-}
-
-
 void MESH_OT_delete_mesh(wmOperatorType *ot)
 {
 	/* identifiers */
-	ot->name= "delete mesh";
+	ot->name= "Delete Mesh";
 	ot->idname= "MESH_OT_delete_mesh";
 	
 	/* api callbacks */
-	ot->invoke= delete_mesh_invoke;
+	ot->invoke= WM_menu_invoke;
 	ot->exec= delete_mesh_exec;
 	
 	ot->poll= ED_operator_editmesh;
@@ -1150,7 +1136,7 @@
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 	
 	/*props */
-	RNA_def_int(ot->srna, "event", 0, 0, INT_MAX, "event", "", 0, 1000);
+	RNA_def_enum(ot->srna, "type", prop_mesh_delete_types, 10, "Type", "Method used for deleting mesh data");
 }
 
 /* Got this from scanfill.c. You will need to juggle around the

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-02-01 01:04:00 UTC (rev 18774)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_intern.h	2009-02-01 02:37:12 UTC (rev 18775)
@@ -191,7 +191,7 @@
 void MESH_OT_similar_face_select(struct wmOperatorType *ot);
 void MESH_OT_selectrandom_mesh(struct wmOperatorType *ot);
 void MESH_OT_vertices_to_sphere(struct wmOperatorType *ot);
-void MESH_OT_mesh_selection_mode_menu(struct wmOperatorType *ot);
+void MESH_OT_mesh_selection_type(struct wmOperatorType *ot);
 
 extern EditEdge *findnearestedge(ViewContext *vc, int *dist);
 extern void EM_automerge(int update);

Modified: branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-02-01 01:04:00 UTC (rev 18774)
+++ branches/blender2.5/blender/source/blender/editors/mesh/mesh_ops.c	2009-02-01 02:37:12 UTC (rev 18775)
@@ -114,7 +114,7 @@
 	WM_operatortype_append(MESH_OT_selectconnected_mesh_all);
 	WM_operatortype_append(MESH_OT_selectconnected_mesh);
 	WM_operatortype_append(MESH_OT_selectrandom_mesh);
-	WM_operatortype_append(MESH_OT_mesh_selection_mode_menu);
+	WM_operatortype_append(MESH_OT_mesh_selection_type);
 	WM_operatortype_append(MESH_OT_hide_mesh);
 	WM_operatortype_append(MESH_OT_reveal_mesh);
 	WM_operatortype_append(MESH_OT_consistant_normals);

Modified: branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c	2009-02-01 01:04:00 UTC (rev 18774)
+++ branches/blender2.5/blender/source/blender/windowmanager/intern/wm_operators.c	2009-02-01 02:37:12 UTC (rev 18775)
@@ -204,8 +204,14 @@
 	const EnumPropertyItem *item;
 	int totitem, i, len= strlen(op->type->name) + 8;
 	char *menu, *p;
-	
-	if(prop) {
+
+	if(prop==NULL) {
+		printf("WM_menu_invoke: %s has no \"type\" enum property\n", op->type->idname);
+	}
+	else if (RNA_property_type(op->ptr, prop) != PROP_ENUM) {
+		printf("WM_menu_invoke: %s \"type\" is not an enum property\n", op->type->idname);
+	}
+	else {
 		RNA_property_enum_items(op->ptr, prop, &item, &totitem);
 		
 		for (i=0; i<totitem; i++)





More information about the Bf-blender-cvs mailing list