[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