[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24994] trunk/blender: Draw function for operators (just like panels), used for the redo popup, file selector and redo tool panel.

Campbell Barton ideasman42 at gmail.com
Sun Nov 29 02:49:23 CET 2009


Revision: 24994
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24994
Author:   campbellbarton
Date:     2009-11-29 02:49:22 +0100 (Sun, 29 Nov 2009)

Log Message:
-----------
Draw function for operators (just like panels), used for the redo popup, file selector and redo tool panel.

Used for ply export & select pattern.

Modified Paths:
--------------
    trunk/blender/release/scripts/io/export_ply.py
    trunk/blender/release/scripts/op/object.py
    trunk/blender/source/blender/editors/space_file/file_panels.c
    trunk/blender/source/blender/editors/space_view3d/view3d_toolbar.c
    trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
    trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/release/scripts/io/export_ply.py
===================================================================
--- trunk/blender/release/scripts/io/export_ply.py	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/release/scripts/io/export_ply.py	2009-11-29 01:49:22 UTC (rev 24994)
@@ -263,9 +263,9 @@
 	
 	path = StringProperty(name="File Path", description="File path used for exporting the PLY file", maxlen= 1024, default= "")
 	use_modifiers = BoolProperty(name="Apply Modifiers", description="Apply Modifiers to the exported mesh", default= True)
-	use_normals = BoolProperty(name="Export Normals", description="Export Normals for smooth and hard shaded faces", default= True)
-	use_uvs = BoolProperty(name="Export UVs", description="Exort the active UV layer", default= True)
-	use_colors = BoolProperty(name="Export Vertex Colors", description="Exort the active vertex color layer", default= True)
+	use_normals = BoolProperty(name="Normals", description="Export Normals for smooth and hard shaded faces", default= True)
+	use_uvs = BoolProperty(name="UVs", description="Exort the active UV layer", default= True)
+	use_colors = BoolProperty(name="Vertex Colors", description="Exort the active vertex color layer", default= True)
 	
 	
 	def poll(self, context):
@@ -291,14 +291,25 @@
 		wm.add_fileselect(self)
 		return ('RUNNING_MODAL',)
 
+	def draw(self, context):
+		layout = self.layout
+		props = self.properties
 
+		row = layout.row()
+		row.prop(props, "use_modifiers")
+		row.prop(props, "use_normals")
+		row = layout.row()
+		row.prop(props, "use_uvs")
+		row.prop(props, "use_colors")
+
+
 bpy.ops.add(ExportPLY)
 
 import dynamic_menu
 
 def menu_func(self, context):
-    default_path = bpy.data.filename.replace(".blend", ".ply")
-    self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)...").path = default_path
+	default_path = bpy.data.filename.replace(".blend", ".ply")
+	self.layout.operator(ExportPLY.bl_idname, text="Stanford (.ply)...").path = default_path
 
 menu_item = dynamic_menu.add(bpy.types.INFO_MT_file_export, menu_func)
 

Modified: trunk/blender/release/scripts/op/object.py
===================================================================
--- trunk/blender/release/scripts/op/object.py	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/release/scripts/op/object.py	2009-11-29 01:49:22 UTC (rev 24994)
@@ -52,6 +52,17 @@
         wm = context.manager
         wm.invoke_props_popup(self, event)
         return ('RUNNING_MODAL',)
+    
+    def draw(self, context):
+        print("WoW")
+        layout = self.layout
+        props = self.properties
+        
+        layout.prop(props, "pattern")
+        row = layout.row()
+        row.prop(props, "case_sensitive")
+        row.prop(props, "extend")
+        
 
 
 class SubsurfSet(bpy.types.Operator):

Modified: trunk/blender/source/blender/editors/space_file/file_panels.c
===================================================================
--- trunk/blender/source/blender/editors/space_file/file_panels.c	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/source/blender/editors/space_file/file_panels.c	2009-11-29 01:49:22 UTC (rev 24994)
@@ -175,7 +175,7 @@
 	int empty= 1, flag;
 
 	if(op->type->ui) {
-		op->type->ui((bContext*)C, op->ptr, pa->layout);
+		op->type->ui((bContext*)C, op, pa->layout);
 	}
 	else {
 		RNA_STRUCT_BEGIN(op->ptr, prop) {

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_toolbar.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_toolbar.c	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_toolbar.c	2009-11-29 01:49:22 UTC (rev 24994)
@@ -143,7 +143,7 @@
 	
 	RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr);
 	if(op->type->ui)
-		op->type->ui((bContext*)C, &ptr, pa->layout);
+		op->type->ui((bContext*)C, op, pa->layout);
 	else
 		uiDefAutoButsRNA(C, pa->layout, &ptr, 1);
 }

Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h	2009-11-29 01:49:22 UTC (rev 24994)
@@ -217,7 +217,7 @@
 	int (*poll)(struct bContext *);
 	
 	/* optional panel for redo and repeat, autogenerated if not set */
-	void (*ui)(struct bContext *, struct PointerRNA *, struct uiLayout *);
+	void (*ui)(struct bContext *, struct wmOperator *, struct uiLayout *);
 	
 	/* rna for properties */
 	struct StructRNA *srna;

Modified: trunk/blender/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/source/blender/python/intern/bpy_operator_wrap.c	2009-11-29 01:49:22 UTC (rev 24994)
@@ -32,6 +32,7 @@
 #include "MEM_guardedalloc.h"
 #include "WM_api.h"
 #include "WM_types.h"
+#include "UI_interface.h"
 #include "ED_screen.h"
 
 #include "RNA_define.h"
@@ -78,10 +79,11 @@
 #define PYOP_EXEC 1
 #define PYOP_INVOKE 2
 #define PYOP_POLL 3
+#define PYOP_DRAW 4
 	
 extern void BPY_update_modules( void ); //XXX temp solution
 
-static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperator *op, wmEvent *event)
+static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperator *op, wmEvent *event, uiLayout *layout)
 {
 	PyObject *py_class = ot->pyop_data;
 	PyObject *args;
@@ -89,7 +91,6 @@
 	int ret_flag= (mode==PYOP_POLL ? 0:OPERATOR_CANCELLED);
 	PointerRNA ptr_context;
 	PointerRNA ptr_operator;
-	PointerRNA ptr_event;
 
 	PyGILState_STATE gilstate;
 
@@ -113,6 +114,7 @@
 		RNA_pointer_create(NULL, &RNA_Context, C, &ptr_context);
 
 		if (mode==PYOP_INVOKE) {
+			PointerRNA ptr_event;
 			item= PyObject_GetAttrString(py_class, "invoke");
 			args = PyTuple_New(3);
 
@@ -134,6 +136,36 @@
 			args = PyTuple_New(2);
 			PyTuple_SET_ITEM(args, 1, pyrna_struct_CreatePyObject(&ptr_context));
 		}
+		else if (mode==PYOP_DRAW) {
+			PointerRNA ptr_layout;
+			item= PyObject_GetAttrString(py_class, "draw");
+			args = PyTuple_New(2);
+
+			RNA_pointer_create(NULL, &RNA_UILayout, layout, &ptr_layout);
+
+			// PyTuple_SET_ITEM "steals" object reference, it is
+			// an object passed shouldn't be DECREF'ed
+			PyTuple_SET_ITEM(args, 1, pyrna_struct_CreatePyObject(&ptr_context));
+#if 0
+			PyTuple_SET_ITEM(args, 2, pyrna_struct_CreatePyObject(&ptr_layout));
+#else
+			{
+				/* mimic panels */
+				PyObject *py_layout= pyrna_struct_CreatePyObject(&ptr_layout);
+				PyObject *pyname= PyUnicode_FromString("layout");
+
+				if(PyObject_GenericSetAttr(py_class_instance, pyname, py_layout)) {
+					PyErr_Print();
+					PyErr_Clear();
+				}
+				else {
+					Py_DECREF(py_layout);
+				}
+
+				Py_DECREF(pyname);
+			}
+#endif
+		}
 		PyTuple_SET_ITEM(args, 0, py_class_instance);
 
 		ret = PyObject_Call(item, args, NULL);
@@ -155,7 +187,8 @@
 			else {
 				ret_flag= ret==Py_True ? 1:0;
 			}
-			
+		} else if(mode==PYOP_DRAW) {
+			/* pass */
 		} else if (BPY_flag_from_seq(pyop_ret_flags, ret, &ret_flag) == -1) {
 			/* the returned value could not be converted into a flag */
 			PyErr_Format(PyExc_ValueError, "Python operator, error using return value from \"%s\"\n", ot->idname);
@@ -209,19 +242,34 @@
 
 static int PYTHON_OT_invoke(bContext *C, wmOperator *op, wmEvent *event)
 {
-	return PYTHON_OT_generic(PYOP_INVOKE, C, op->type, op, event);	
+	return PYTHON_OT_generic(PYOP_INVOKE, C, op->type, op, event, NULL);
 }
 
 static int PYTHON_OT_execute(bContext *C, wmOperator *op)
 {
-	return PYTHON_OT_generic(PYOP_EXEC, C, op->type, op, NULL);
+	return PYTHON_OT_generic(PYOP_EXEC, C, op->type, op, NULL, NULL);
 }
 
 static int PYTHON_OT_poll(bContext *C, wmOperatorType *ot)
 {
-	return PYTHON_OT_generic(PYOP_POLL, C, ot, NULL, NULL);
+	return PYTHON_OT_generic(PYOP_POLL, C, ot, NULL, NULL, NULL);
 }
 
+static void PYTHON_OT_draw(bContext *C, wmOperator *op, uiLayout *layout)
+{
+	PYTHON_OT_generic(PYOP_DRAW, C, op->type, op, NULL, layout);
+}
+
+// void (*ui)(struct bContext *, struct PointerRNA *, struct uiLayout *);
+//
+//static int PYTHON_OT_ui(bContext *C, PointerRNA *, uiLayout *layout)
+//{
+//	PointerRNA ptr_context, ptr_layout;
+//	RNA_pointer_create(NULL, &RNA_Context, C, &ptr_context);
+//	RNA_pointer_create(NULL, &RNA_UILayout, layout, &ptr_layout);
+//
+//}
+
 void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata)
 {
 	PyObject *py_class = (PyObject *)userdata;
@@ -256,6 +304,8 @@
 		ot->exec= PYTHON_OT_execute;
 	if (PyObject_HasAttrString(py_class, "poll"))
 		ot->pyop_poll= PYTHON_OT_poll;
+	if (PyObject_HasAttrString(py_class, "draw"))
+		ot->ui= PYTHON_OT_draw;
 	
 	ot->pyop_data= userdata;
 	
@@ -320,6 +370,7 @@
 		{"execute",				'f', 2,	-1, BPY_CLASS_ATTR_OPTIONAL},
 		{"invoke",				'f', 3,	-1, BPY_CLASS_ATTR_OPTIONAL},
 		{"poll",				'f', 2,	-1, BPY_CLASS_ATTR_OPTIONAL},
+		{"draw",				'f', 2,	-1, BPY_CLASS_ATTR_OPTIONAL},
 		{NULL, 0, 0, 0}
 	};
 

Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2009-11-29 00:53:23 UTC (rev 24993)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c	2009-11-29 01:49:22 UTC (rev 24994)
@@ -731,7 +731,7 @@
 	uiItemL(layout, op->type->name, 0);
 
 	if(op->type->ui)
-		op->type->ui((bContext*)C, &ptr, layout);
+		op->type->ui((bContext*)C, op, layout);
 	else
 		uiDefAutoButsRNA(C, layout, &ptr, columns);
 
@@ -778,7 +778,7 @@
 	uiItemL(layout, op->type->name, 0);
 
 	if(op->type->ui)
-		op->type->ui(C, op->ptr, layout);
+		op->type->ui(C, op, layout);
 	else
 		uiDefAutoButsRNA(C, layout, op->ptr, 2);
 	





More information about the Bf-blender-cvs mailing list