[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32152] trunk/blender/source/blender: added CTX_wm_operator_poll_msg_get/ set so failing poll functions can set messages when poll fails, at the moment only python uses this but theres nothing python specific.

Campbell Barton ideasman42 at gmail.com
Mon Sep 27 14:21:23 CEST 2010


Revision: 32152
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32152
Author:   campbellbarton
Date:     2010-09-27 14:21:23 +0200 (Mon, 27 Sep 2010)

Log Message:
-----------
added CTX_wm_operator_poll_msg_get/set so failing poll functions can set messages when poll fails, at the moment only python uses this but theres nothing python specific.

only added 1 message to a poll function, so messages still need to be set in many more places to be useful.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_context.h
    trunk/blender/source/blender/blenkernel/intern/context.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/python/intern/bpy_operator.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/blenkernel/BKE_context.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_context.h	2010-09-27 11:48:16 UTC (rev 32151)
+++ trunk/blender/source/blender/blenkernel/BKE_context.h	2010-09-27 12:21:23 UTC (rev 32152)
@@ -163,6 +163,8 @@
 void CTX_wm_area_set(bContext *C, struct ScrArea *sa);
 void CTX_wm_region_set(bContext *C, struct ARegion *region);
 void CTX_wm_menu_set(bContext *C, struct ARegion *menu);
+const char *CTX_wm_operator_poll_msg_get(struct bContext *C);
+void CTX_wm_operator_poll_msg_set(struct bContext *C, const char *msg);
 
 /* Data Context
 

Modified: trunk/blender/source/blender/blenkernel/intern/context.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/context.c	2010-09-27 11:48:16 UTC (rev 32151)
+++ trunk/blender/source/blender/blenkernel/intern/context.c	2010-09-27 12:21:23 UTC (rev 32152)
@@ -64,6 +64,7 @@
 		struct ARegion *region;
 		struct ARegion *menu;
 		struct bContextStore *store;
+		const char *operator_poll_msg; /* reason for poll failing */
 	} wm;
 	
 	/* data context */
@@ -399,6 +400,16 @@
 	C->wm.menu= menu;
 }
 
+void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
+{
+	C->wm.operator_poll_msg= msg;
+}
+
+const char *CTX_wm_operator_poll_msg_get(bContext *C)
+{
+	return C->wm.operator_poll_msg;
+}
+
 /* data context utility functions */
 
 struct bContextDataResult {

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-09-27 11:48:16 UTC (rev 32151)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-09-27 12:21:23 UTC (rev 32152)
@@ -131,7 +131,11 @@
 
 int ED_operator_region_view3d_active(bContext *C)
 {
-	return CTX_wm_region_view3d(C) != NULL;
+	if(CTX_wm_region_view3d(C))
+		return TRUE;
+	
+	CTX_wm_operator_poll_msg_set(C, "expected a view3d region");
+	return FALSE;	
 }
 
 int ED_operator_timeline_active(bContext *C)

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2010-09-27 11:48:16 UTC (rev 32151)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2010-09-27 12:21:23 UTC (rev 32152)
@@ -1811,7 +1811,6 @@
 
 void VIEW3D_OT_zoom_border(wmOperatorType *ot)
 {
-
 	/* identifiers */
 	ot->name= "Border Zoom";
 	ot->description = "Zoom in the view to the nearest object contained in the border";

Modified: trunk/blender/source/blender/python/intern/bpy_operator.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator.c	2010-09-27 11:48:16 UTC (rev 32151)
+++ trunk/blender/source/blender/python/intern/bpy_operator.c	2010-09-27 12:21:23 UTC (rev 32152)
@@ -127,7 +127,9 @@
 	Py_XINCREF(context_dict); /* so we done loose it */
 
 	if(WM_operator_poll((bContext*)C, ot) == FALSE) {
-		PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() failed, context is incorrect", opname);
+		const char *msg= CTX_wm_operator_poll_msg_get(C);
+		PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() %s", opname, msg ? msg : "failed, context is incorrect");
+		CTX_wm_operator_poll_msg_set(C, NULL); /* better set to NULL else it could be used again */
 		error_val= -1;
 	}
 	else {

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-09-27 11:48:16 UTC (rev 32151)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-09-27 12:21:23 UTC (rev 32152)
@@ -466,6 +466,8 @@
 	wmWindowManager *wm= CTX_wm_manager(C);
 	int retval= OPERATOR_CANCELLED;
 	
+	CTX_wm_operator_poll_msg_set(C, NULL);
+	
 	if(op==NULL || op->type==NULL)
 		return retval;
 	
@@ -698,6 +700,8 @@
 	
 	int retval;
 
+	CTX_wm_operator_poll_msg_set(C, NULL);
+
 	/* dummie test */
 	if(ot && C) {
 		switch(context) {





More information about the Bf-blender-cvs mailing list