Revision: 20891
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20891
Author:   kazanbas
Date:     2009-06-15 10:12:28 +0200 (Mon, 15 Jun 2009)

Log Message:
-----------
File selector working. For now it is accessed as
context.add_fileselect(self.__operator__).

To allow file selector, I made the following changes:

- moved property definition funcs (FloatProperty, etc.) to "bpy.props"
to make them accessible from io scripts. Previously they were only
accessible in scripts running from Text Editor.

- added the "__operator__" instance attribute to py operators. The value
  is RNA operator pointer.

Note that "context.add_fileselect" changes were mistakenly committed
with my last merge.

Modified Paths:
--------------
    branches/soc-2009-kazanbas/release/io/export_obj.py
    branches/soc-2009-kazanbas/source/blender/python/intern/bpy_interface.c
    branches/soc-2009-kazanbas/source/blender/python/intern/bpy_operator_wrap.c
    branches/soc-2009-kazanbas/source/blender/python/intern/bpy_rna.c

Modified: branches/soc-2009-kazanbas/release/io/export_obj.py
===================================================================
--- branches/soc-2009-kazanbas/release/io/export_obj.py 2009-06-15 07:47:09 UTC 
(rev 20890)
+++ branches/soc-2009-kazanbas/release/io/export_obj.py 2009-06-15 08:12:28 UTC 
(rev 20891)
@@ -1,3 +1,4 @@
+
 import bpy
 
 class SCRIPT_OT_export_obj(bpy.types.Operator):
@@ -7,6 +8,7 @@
        # List of operator properties, the attributes will be assigned
        # to the class instance from the operator settings before calling.
        __props__ = [
+        bpy.props["StringProperty"](attr="filename", name="filename", 
default="/tmp")
 #              FloatProperty(attr="setting_1", name="Example 1", default=10.0, 
min=0, max=10, description="Add info here"),
 #              StringProperty(attr="filename")
                ]
@@ -17,11 +19,13 @@
        def exec(self, context):
 #              print(self.setting_1)
                self.debug("exec")
-               return 'FINISHED'
+               self.debug("filename = " + self.filename)
+               return ('FINISHED',)
        
        def invoke(self, context, event):
                self.debug("invoke")
-               return self.exec(context)
+               context.add_fileselect(self.__operator__)
+               return ('RUNNING_MODAL',) #self.exec(context)
        
        def poll(self, context): # poll isnt working yet
                self.debug("poll")

Modified: 
branches/soc-2009-kazanbas/source/blender/python/intern/bpy_interface.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/python/intern/bpy_interface.c     
2009-06-15 07:47:09 UTC (rev 20890)
+++ branches/soc-2009-kazanbas/source/blender/python/intern/bpy_interface.c     
2009-06-15 08:12:28 UTC (rev 20891)
@@ -60,6 +60,7 @@
        PyModule_AddObject( mod, "types", BPY_rna_types() );
        PyModule_AddObject( mod, "ops", BPY_operator_module() );
        PyModule_AddObject( mod, "ui", BPY_ui_module() ); // XXX very 
experemental, consider this a test, especially PyCObject is not meant to be 
perminant
+       PyModule_AddObject( mod, "props", BPY_rna_props() );
        
        /* add the module so we can import it */
        PyDict_SetItemString(PySys_GetObject("modules"), "bpy", mod);
@@ -95,22 +96,6 @@
        // XXX - evil, need to access context
        BPy_SetContext(C);
        
-       // XXX - put somewhere more logical
-       {
-               PyMethodDef *ml;
-               static PyMethodDef bpy_prop_meths[] = {
-                       {"FloatProperty", (PyCFunction)BPy_FloatProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
-                       {"IntProperty", (PyCFunction)BPy_IntProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
-                       {"BoolProperty", (PyCFunction)BPy_BoolProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
-                       {"StringProperty", (PyCFunction)BPy_StringProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
-                       {NULL, NULL, 0, NULL}
-               };
-               
-               for(ml = bpy_prop_meths; ml->ml_name; ml++) {
-                       PyDict_SetItemString( dict, ml->ml_name, 
PyCFunction_New(ml, NULL));
-               }
-       }
-       
        /* add bpy to global namespace */
        mod= PyImport_ImportModuleLevel("bpy", NULL, NULL, NULL, 0);
        PyDict_SetItemString( dict, "bpy", mod );

Modified: 
branches/soc-2009-kazanbas/source/blender/python/intern/bpy_operator_wrap.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/python/intern/bpy_operator_wrap.c 
2009-06-15 07:47:09 UTC (rev 20890)
+++ branches/soc-2009-kazanbas/source/blender/python/intern/bpy_operator_wrap.c 
2009-06-15 08:12:28 UTC (rev 20891)
@@ -225,6 +225,8 @@
        PyObject *ret= NULL, *py_class_instance, *item= NULL;
        int ret_flag= (mode==PYOP_POLL ? 0:OPERATOR_CANCELLED);
        PointerRNA ptr_context;
+       PyObject ptr_operator;
+       PyObject *py_operator;
 
        PyGILState_STATE gilstate = PyGILState_Ensure();
        
@@ -261,6 +263,12 @@
                        RNA_property_collection_end(&iter);
                }
 
+               /* set operator pointer RNA as instance "__operator__" 
attribute */
+               RNA_pointer_create(NULL, &RNA_Operator, op, &ptr_operator);
+               py_operator= pyrna_struct_CreatePyObject(&ptr_operator);
+               PyObject_SetAttrString(py_class_instance, "__operator__", 
py_operator);
+               Py_DECREF(py_operator);
+
                RNA_pointer_create(NULL, &RNA_Context, C, &ptr_context);
                
                if (mode==PYOP_INVOKE) {

Modified: branches/soc-2009-kazanbas/source/blender/python/intern/bpy_rna.c
===================================================================
--- branches/soc-2009-kazanbas/source/blender/python/intern/bpy_rna.c   
2009-06-15 07:47:09 UTC (rev 20890)
+++ branches/soc-2009-kazanbas/source/blender/python/intern/bpy_rna.c   
2009-06-15 08:12:28 UTC (rev 20891)
@@ -1750,7 +1750,24 @@
        return (PyObject *)self;
 }
 
+PyObject *BPY_rna_props( void )
+{
+       PyObject *dict = PyDict_New(  );
+       PyMethodDef *ml;
+       static PyMethodDef bpy_prop_meths[] = {
+               {"FloatProperty", (PyCFunction)BPy_FloatProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
+               {"IntProperty", (PyCFunction)BPy_IntProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
+               {"BoolProperty", (PyCFunction)BPy_BoolProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
+               {"StringProperty", (PyCFunction)BPy_StringProperty, 
METH_VARARGS|METH_KEYWORDS, ""},
+               {NULL, NULL, 0, NULL}
+       };
+               
+       for(ml = bpy_prop_meths; ml->ml_name; ml++) {
+               PyDict_SetItemString( dict, ml->ml_name, PyCFunction_New(ml, 
NULL));
+       }
 
+       return dict;
+}
 
 /* Orphan functions, not sure where they should go */
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to