diff options
41 files changed, 276 insertions, 229 deletions
diff --git a/release/scripts/io/export_3ds.py b/release/scripts/io/export_3ds.py index edbb80b0272..a60aeeb3cb2 100644 --- a/release/scripts/io/export_3ds.py +++ b/release/scripts/io/export_3ds.py @@ -1126,7 +1126,7 @@ class Export3DS(bpy.types.Operator): def execute(self, context): save_3ds(self.properties.path, context) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -1136,7 +1136,7 @@ class Export3DS(bpy.types.Operator): def poll(self, context): # Poll isnt working yet return context.active_object != None -bpy.ops.add(Export3DS) +bpy.types.register(Export3DS) # Add to a menu import dynamic_menu diff --git a/release/scripts/io/export_fbx.py b/release/scripts/io/export_fbx.py index ba2741a7e7e..401f645536f 100644 --- a/release/scripts/io/export_fbx.py +++ b/release/scripts/io/export_fbx.py @@ -3426,7 +3426,7 @@ class ExportFBX(bpy.types.Operator): self.properties.BATCH_FILE_PREFIX, self.properties.BATCH_OWN_DIR) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -3434,7 +3434,7 @@ class ExportFBX(bpy.types.Operator): return ('RUNNING_MODAL',) -bpy.ops.add(ExportFBX) +bpy.types.register(ExportFBX) # if __name__ == "__main__": # bpy.ops.EXPORT_OT_ply(filename="/tmp/test.ply") diff --git a/release/scripts/io/export_mdd.py b/release/scripts/io/export_mdd.py index cfd73b1979e..22e76ae2427 100644 --- a/release/scripts/io/export_mdd.py +++ b/release/scripts/io/export_mdd.py @@ -173,14 +173,14 @@ class ExportMDD(bpy.types.Operator): raise Exception("filename not set") write(self.properties.path, context.scene, context.active_object, self.properties.start_frame, self.properties.end_frame, self.properties.fps) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager wm.add_fileselect(self) return ('RUNNING_MODAL',) -bpy.ops.add(ExportMDD) +bpy.types.register(ExportMDD) # Add to a menu import dynamic_menu diff --git a/release/scripts/io/export_obj.py b/release/scripts/io/export_obj.py index d6026d10ba9..9d9b0e88732 100644 --- a/release/scripts/io/export_obj.py +++ b/release/scripts/io/export_obj.py @@ -980,7 +980,7 @@ class ExportOBJ(bpy.types.Operator): EXPORT_SEL_ONLY=self.properties.use_selection, EXPORT_ALL_SCENES=self.properties.use_all_scenes) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -991,7 +991,7 @@ class ExportOBJ(bpy.types.Operator): -bpy.ops.add(ExportOBJ) +bpy.types.register(ExportOBJ) import dynamic_menu diff --git a/release/scripts/io/export_ply.py b/release/scripts/io/export_ply.py index 858e22952b8..301fb4c5fe8 100644 --- a/release/scripts/io/export_ply.py +++ b/release/scripts/io/export_ply.py @@ -297,7 +297,7 @@ class ExportPLY(bpy.types.Operator): EXPORT_COLORS=self.properties.use_colors, ) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -316,7 +316,7 @@ class ExportPLY(bpy.types.Operator): row.prop(props, "use_colors") -bpy.ops.add(ExportPLY) +bpy.types.register(ExportPLY) import dynamic_menu diff --git a/release/scripts/io/export_x3d.py b/release/scripts/io/export_x3d.py index 6cfe0f45626..95ddb21b21d 100644 --- a/release/scripts/io/export_x3d.py +++ b/release/scripts/io/export_x3d.py @@ -1233,14 +1233,14 @@ class ExportX3D(bpy.types.Operator): def execute(self, context): x3d_export(self.properties.path, context, self.properties.apply_modifiers, self.properties.triangulate, self.properties.compress) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager wm.add_fileselect(self) return ('RUNNING_MODAL',) -bpy.ops.add(ExportX3D) +bpy.types.register(ExportX3D) import dynamic_menu diff --git a/release/scripts/io/import_anim_bvh.py b/release/scripts/io/import_anim_bvh.py index 30ff99c1fe8..0ea8dbe5356 100644 --- a/release/scripts/io/import_anim_bvh.py +++ b/release/scripts/io/import_anim_bvh.py @@ -887,7 +887,7 @@ class BvhImporter(bpy.types.Operator): read_bvh(context, self.properties.path) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -895,7 +895,7 @@ class BvhImporter(bpy.types.Operator): return ('RUNNING_MODAL',) -bpy.ops.add(BvhImporter) +bpy.types.register(BvhImporter) import dynamic_menu diff --git a/release/scripts/io/import_scene_3ds.py b/release/scripts/io/import_scene_3ds.py index 4744c5df01a..d11b242b764 100644 --- a/release/scripts/io/import_scene_3ds.py +++ b/release/scripts/io/import_scene_3ds.py @@ -1159,14 +1159,14 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator): def execute(self, context): load_3ds(self.properties.path, context, 0.0, False, False) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager wm.add_fileselect(self) return ('RUNNING_MODAL',) -bpy.ops.add(IMPORT_OT_autodesk_3ds) +bpy.types.register(IMPORT_OT_autodesk_3ds) import dynamic_menu menu_func = lambda self, context: self.layout.operator(IMPORT_OT_autodesk_3ds.bl_idname, text="3D Studio (.3ds)...") diff --git a/release/scripts/io/import_scene_obj.py b/release/scripts/io/import_scene_obj.py index cbd2b831e55..e4a218fce4d 100644 --- a/release/scripts/io/import_scene_obj.py +++ b/release/scripts/io/import_scene_obj.py @@ -1616,7 +1616,7 @@ class IMPORT_OT_obj(bpy.types.Operator): self.properties.IMAGE_SEARCH, self.properties.POLYGROUPS) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -1624,7 +1624,7 @@ class IMPORT_OT_obj(bpy.types.Operator): return ('RUNNING_MODAL',) -bpy.ops.add(IMPORT_OT_obj) +bpy.types.register(IMPORT_OT_obj) import dynamic_menu diff --git a/release/scripts/io/netrender/operators.py b/release/scripts/io/netrender/operators.py index ec229fbb471..7f36087a30c 100644 --- a/release/scripts/io/netrender/operators.py +++ b/release/scripts/io/netrender/operators.py @@ -79,7 +79,7 @@ class RENDER_OT_netslave_bake(bpy.types.Operator): #bpy.ops.wm.save_mainfile(path = path + os.sep + root + "_baked.blend") - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -106,7 +106,7 @@ class RENDER_OT_netclientanim(bpy.types.Operator): bpy.ops.screen.render('INVOKE_AREA', animation=True) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -136,7 +136,7 @@ class RENDER_OT_netclientsend(bpy.types.Operator): self.report('ERROR', str(err)) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -176,7 +176,7 @@ class RENDER_OT_netclientstatus(bpy.types.Operator): job.name = j.name - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -206,7 +206,7 @@ class RENDER_OT_netclientblacklistslave(bpy.types.Operator): netsettings.slaves.remove(netsettings.active_slave_index) netsettings.active_slave_index = -1 - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -236,7 +236,7 @@ class RENDER_OT_netclientwhitelistslave(bpy.types.Operator): netsettings.slaves_blacklist.remove(netsettings.active_blacklisted_slave_index) netsettings.active_blacklisted_slave_index = -1 - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -282,7 +282,7 @@ class RENDER_OT_netclientslaves(bpy.types.Operator): slave = netsettings.slaves[-1] slave.name = s.name - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -311,7 +311,7 @@ class RENDER_OT_netclientcancel(bpy.types.Operator): netsettings.jobs.remove(netsettings.active_job_index) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -338,7 +338,7 @@ class RENDER_OT_netclientcancelall(bpy.types.Operator): while(len(netsettings.jobs) > 0): netsettings.jobs.remove(0) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -383,7 +383,7 @@ class netclientdownload(bpy.types.Operator): conn.close() - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -406,7 +406,7 @@ class netclientscan(bpy.types.Operator): netsettings.server_address = address netsettings.server_port = port - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) @@ -432,7 +432,7 @@ class netclientweb(bpy.types.Operator): webbrowser.open("http://%s:%i" % (netsettings.server_address, netsettings.server_port)) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): return self.execute(context) diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py index 3da15a33b65..2d22dfb7320 100644 --- a/release/scripts/io/netrender/utils.py +++ b/release/scripts/io/netrender/utils.py @@ -62,7 +62,7 @@ def rnaType(rna_type): return rna_type def rnaOperator(rna_op): - if bpy: bpy.ops.add(rna_op) + if bpy: bpy.types.register(rna_op) return rna_op def reporting(report, message, errorType = None): diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py index 93c0d719580..268189b2db4 100644 --- a/release/scripts/modules/bpy/ops.py +++ b/release/scripts/modules/bpy/ops.py @@ -21,7 +21,7 @@ # for slightly faster access from _bpy import ops as ops_module -op_add = ops_module.add +# op_add = ops_module.add op_remove = ops_module.remove op_add_macro = ops_module.add_macro op_dir = ops_module.dir diff --git a/release/scripts/modules/rna_info.py b/release/scripts/modules/rna_info.py index 1de750a4ff2..84171335c64 100644 --- a/release/scripts/modules/rna_info.py +++ b/release/scripts/modules/rna_info.py @@ -121,12 +121,18 @@ class InfoFunctionRNA: # self.name = rna_func.name # functions have no name! self.description = rna_func.description.strip() - self.args = [] # todo - self.return_value = None # todo + self.args = [] + self.return_value = None def build(self): rna_prop = self.bl_prop - pass + + for rna_id, rna_prop in rna_type.parameters.items(): + prop = GetInfoPropertyRNA(rna_prop, parent_id) + if rna_prop.use_return: + self.return_value = prop + else: + self.args.append(prop) def __repr__(self): txt = '' diff --git a/release/scripts/modules/rna_prop_ui.py b/release/scripts/modules/rna_prop_ui.py index 0aa62bb5960..aac6431768d 100644 --- a/release/scripts/modules/rna_prop_ui.py +++ b/release/scripts/modules/rna_prop_ui.py @@ -196,7 +196,7 @@ class WM_OT_properties_edit(bpy.types.Operator): prop_ui['description'] = self.properties.description - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): @@ -242,7 +242,7 @@ class WM_OT_properties_add(bpy.types.Operator): property = unique_name(item.keys()) item[property] = 1.0 - return ('FINISHED',) + return {'FINISHED'} class WM_OT_properties_remove(bpy.types.Operator): @@ -256,4 +256,4 @@ class WM_OT_properties_remove(bpy.types.Operator): def execute(self, context): item = eval("context.%s" % self.properties.path) del item[self.properties.property] - return ('FINISHED',) + return {'FINISHED'} diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py index 264f290f271..8696312eae0 100644 --- a/release/scripts/op/add_armature_human.py +++ b/release/scripts/op/add_armature_human.py @@ -607,10 +607,10 @@ class AddHuman(bpy.types.Operator): bones.remove(bones[0]) metarig_template() bpy.ops.object.mode_set(mode=mode_orig) - return ('FINISHED',) + return {'FINISHED'} # Register the operator -bpy.ops.add(AddHuman) +bpy.types.register(AddHuman) # Add to a menu import dynamic_menu diff --git a/release/scripts/op/add_mesh_torus.py b/release/scripts/op/add_mesh_torus.py index 7e3b28b628e..685f1cae8a4 100644 --- a/release/scripts/op/add_mesh_torus.py +++ b/release/scripts/op/add_mesh_torus.py @@ -122,10 +122,10 @@ class AddTorus(bpy.types.Operator): ob_new.location = tuple(context.scene.cursor_location) - return ('FINISHED',) + return {'FINISHED'} # Register the operator -bpy.ops.add(AddTorus) +bpy.types.register(AddTorus) # Add to a menu import dynamic_menu diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py index 7f1d35ede20..383eb3c12d3 100644 --- a/release/scripts/op/console_python.py +++ b/release/scripts/op/console_python.py @@ -79,10 +79,10 @@ def execute(context): try: line = sc.history[-1].line except: - return ('CANCELLED',) + return {'CANCELLED'} if sc.console_type != 'PYTHON': - return ('CANCELLED',) + return {'CANCELLED'} console, stdout, stderr = get_console(hash(context.region)) @@ -136,7 +136,7 @@ def execute(context): if output_err: add_scrollback(output_err, 'ERROR') - return ('FINISHED',) + return {'FINISHED'} def autocomplete(context): @@ -150,10 +150,10 @@ def autocomplete(context): line = current_line.line if not console: - return ('CANCELLED',) + return {'CANCELLED'} if sc.console_type != 'PYTHON': - return ('CANCELLED',) + return {'CANCELLED'} # This function isnt aware of the text editor or being an operator # just does the autocomp then copy its results back @@ -172,7 +172,7 @@ def autocomplete(context): context.area.tag_redraw() - return ('FINISHED',) + return {'FINISHED'} def banner(context): @@ -195,4 +195,4 @@ def banner(context): console = get_console(hash(context.region))[0] console.locals["C"] = bpy.context - return ('FINISHED',) + return {'FINISHED'} diff --git a/release/scripts/op/console_shell.py b/release/scripts/op/console_shell.py index bdb4a746d95..4dc21114367 100644 --- a/release/scripts/op/console_shell.py +++ b/release/scripts/op/console_shell.py @@ -49,7 +49,7 @@ def execute(context): try: line = sc.history[-1].line except: - return ('CANCELLED',) + return {'CANCELLED'} bpy.ops.console.scrollback_append(text=sc.prompt + line, type='INPUT') @@ -60,13 +60,13 @@ def execute(context): remove_duplicates=True) sc.prompt = os.getcwd() + PROMPT - return ('FINISHED',) + return {'FINISHED'} def autocomplete(context): # sc = context.space_data # TODO - return ('CANCELLED',) + return {'CANCELLED'} def banner(context): @@ -75,4 +75,4 @@ def banner(context): shell_run("bash --version") sc.prompt = os.getcwd() + PROMPT - return ('FINISHED',) + return {'FINISHED'} diff --git a/release/scripts/op/mesh.py b/release/scripts/op/mesh.py index 1de06963c7a..a8f50f28178 100644 --- a/release/scripts/op/mesh.py +++ b/release/scripts/op/mesh.py @@ -65,11 +65,11 @@ class MeshSelectInteriorFaces(bpy.types.Operator): def execute(self, context): main(context) - return ('FINISHED',) + return {'FINISHED'} # Register the operator -bpy.ops.add(MeshSelectInteriorFaces) +bpy.types.register(MeshSelectInteriorFaces) if __name__ == "__main__": bpy.ops.mesh.faces_select_interior() diff --git a/release/scripts/op/mesh_skin.py b/release/scripts/op/mesh_skin.py index a78da39c5d4..251cfb32b93 100644 --- a/release/scripts/op/mesh_skin.py +++ b/release/scripts/op/mesh_skin.py @@ -643,11 +643,11 @@ class MESH_OT_skin(bpy.types.Operator): def execute(self, context): main(context) - return ('FINISHED',) + return {'FINISHED'} # Register the operator -bpy.ops.add(MESH_OT_skin) +bpy.types.register(MESH_OT_skin) # Add to a menu import dynamic_menu diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py index 228d8566f77..1b421cac98c 100644 --- a/release/scripts/op/object.py +++ b/release/scripts/op/object.py @@ -57,7 +57,7 @@ class SelectPattern(bpy.types.Operator): elif not self.properties.extend: item.selected = False - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -97,7 +97,7 @@ class SubdivisionSet(bpy.types.Operator): relative = self.properties.relative if relative and level == 0: - return ('CANCELLED',) # nothing to do + return {'CANCELLED'} # nothing to do def set_object_subd(obj): for mod in obj.modifiers: @@ -132,7 +132,7 @@ class SubdivisionSet(bpy.types.Operator): for obj in context.selected_editable_objects: set_object_subd(obj) - return ('FINISHED',) + return {'FINISHED'} class Retopo(bpy.types.Operator): @@ -146,9 +146,9 @@ class Retopo(bpy.types.Operator): def execute(self, context): import retopo retopo.main() - return ('FINISHED',) + return {'FINISHED'} -bpy.ops.add(SelectPattern) -bpy.ops.add(SubdivisionSet) -bpy.ops.add(Retopo) +bpy.types.register(SelectPattern) +bpy.types.register(SubdivisionSet) +bpy.types.register(Retopo) diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py index 0f6d5e11b5c..af338c9364d 100644 --- a/release/scripts/op/presets.py +++ b/release/scripts/op/presets.py @@ -40,7 +40,7 @@ class AddPresetBase(bpy.types.Operator): def execute(self, context): if not self.properties.name: - return ('FINISHED',) + return {'FINISHED'} filename = self._as_filename(self.properties.name) + ".py" @@ -53,7 +53,7 @@ class AddPresetBase(bpy.types.Operator): file_preset.close() - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -125,6 +125,6 @@ class AddPresetCloth(AddPresetBase): preset_subdir = "cloth" -bpy.ops.add(AddPresetRender) -bpy.ops.add(AddPresetSSS) -bpy.ops.add(AddPresetCloth) +bpy.types.register(AddPresetRender) +bpy.types.register(AddPresetSSS) +bpy.types.register(AddPresetCloth) diff --git a/release/scripts/op/screen_play_rendered_anim.py b/release/scripts/op/screen_play_rendered_anim.py index a1401304c08..40173879787 100644 --- a/release/scripts/op/screen_play_rendered_anim.py +++ b/release/scripts/op/screen_play_rendered_anim.py @@ -146,4 +146,4 @@ class PlayRenderedAnim(bpy.types.Operator): return('FINISHED',) -bpy.ops.add(PlayRenderedAnim) +bpy.types.register(PlayRenderedAnim) diff --git a/release/scripts/op/uvcalc_follow_active.py b/release/scripts/op/uvcalc_follow_active.py index f2dcaec4728..8ab5b8ec454 100644 --- a/release/scripts/op/uvcalc_follow_active.py +++ b/release/scripts/op/uvcalc_follow_active.py @@ -257,9 +257,9 @@ class FollowActiveQuads(bpy.types.Operator): def execute(self, context): main(context, self) - return ('FINISHED',) + return {'FINISHED'} -bpy.ops.add(FollowActiveQuads) +bpy.types.register(FollowActiveQuads) # Add to a menu import dynamic_menu diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py index f3c8f7ed7dd..25840e04cf8 100644 --- a/release/scripts/op/uvcalc_smart_project.py +++ b/release/scripts/op/uvcalc_smart_project.py @@ -1130,9 +1130,9 @@ class SmartProject(bpy.types.Operator): def execute(self, context): main(context, self.properties.island_margin, self.properties.angle_limit) - return ('FINISHED',) + return {'FINISHED'} -bpy.ops.add(SmartProject) +bpy.types.register(SmartProject) # Add to a menu import dynamic_menu diff --git a/release/scripts/op/vertexpaint_dirt.py b/release/scripts/op/vertexpaint_dirt.py index a521c24e06c..f029541dbca 100644 --- a/release/scripts/op/vertexpaint_dirt.py +++ b/release/scripts/op/vertexpaint_dirt.py @@ -175,7 +175,7 @@ class VertexPaintDirt(bpy.types.Operator): return('FINISHED',) -bpy.ops.add(VertexPaintDirt) +bpy.types.register(VertexPaintDirt) if __name__ == "__main__": bpy.ops.mesh.vertex_paint_dirt() diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py index 45a9e91d2c6..58cc2743932 100644 --- a/release/scripts/op/wm.py +++ b/release/scripts/op/wm.py @@ -34,7 +34,7 @@ class MESH_OT_delete_edgeloop(bpy.types.Operator): bpy.ops.mesh.select_more() bpy.ops.mesh.remove_doubles() - return ('FINISHED',) + return {'FINISHED'} rna_path_prop = StringProperty(name="Context Attributes", description="rna context string", maxlen=1024, default="") @@ -60,9 +60,9 @@ def context_path_validate(context, path): def execute_context_assign(self, context): if context_path_validate(context, self.properties.path) is Ellipsis: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} exec("context.%s=self.properties.value" % self.properties.path) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_context_set_boolean(bpy.types.Operator): @@ -143,9 +143,9 @@ class WM_OT_context_set_value(bpy.types.Operator): def execute(self, context): if context_path_validate(context, self.properties.path) is Ellipsis: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} exec("context.%s=%s" % (self.properties.path, self.properties.value)) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_context_toggle(bpy.types.Operator): @@ -159,12 +159,12 @@ class WM_OT_context_toggle(bpy.types.Operator): def execute(self, context): if context_path_validate(context, self.properties.path) is Ellipsis: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} exec("context.%s=not (context.%s)" % (self.properties.path, self.properties.path)) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_context_toggle_enum(bpy.types.Operator): @@ -183,14 +183,14 @@ class WM_OT_context_toggle_enum(bpy.types.Operator): def execute(self, context): if context_path_validate(context, self.properties.path) is Ellipsis: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} exec("context.%s = ['%s', '%s'][context.%s!='%s']" % \ (self.properties.path, self.properties.value_1,\ self.properties.value_2, self.properties.path, self.properties.value_2)) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_context_cycle_int(bpy.types.Operator): @@ -207,7 +207,7 @@ class WM_OT_context_cycle_int(bpy.types.Operator): value = context_path_validate(context, self.properties.path) if value is Ellipsis: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} self.properties.value = value if self.properties.reverse: @@ -224,7 +224,7 @@ class WM_OT_context_cycle_int(bpy.types.Operator): self.properties.value = - (1 << 32) execute_context_assign(self, context) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_context_cycle_enum(bpy.types.Operator): @@ -240,7 +240,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator): value = context_path_validate(context, self.properties.path) if value is Ellipsis: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} orig_value = value @@ -276,7 +276,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator): # set the new value exec("context.%s=advance_enum" % self.properties.path) - return ('FINISHED',) + return {'FINISHED'} doc_id = StringProperty(name="Doc ID", description="", maxlen=1024, default="", hidden=True) @@ -318,12 +318,12 @@ class WM_OT_doc_view(bpy.types.Operator): (self._prefix, class_name_full, class_prop) else: - return ('PASS_THROUGH',) + return {'PASS_THROUGH'} import webbrowser webbrowser.open(url) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_doc_edit(bpy.types.Operator): @@ -388,7 +388,7 @@ class WM_OT_doc_edit(bpy.types.Operator): self._send_xmlrpc(upload) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -403,29 +403,29 @@ class WM_OT_reload_scripts(bpy.types.Operator): def execute(self, context): MOD = type(bpy) bpy.load_scripts(True) - return ('FINISHED',) + return {'FINISHED'} -bpy.ops.add(MESH_OT_delete_edgeloop) +bpy.types.register(MESH_OT_delete_edgeloop) -bpy.ops.add(WM_OT_context_set_boolean) -bpy.ops.add(WM_OT_context_set_int) -bpy.ops.add(WM_OT_context_set_float) -bpy.ops.add(WM_OT_context_set_string) -bpy.ops.add(WM_OT_context_set_enum) -bpy.ops.add(WM_OT_context_set_value) -bpy.ops.add(WM_OT_context_toggle) -bpy.ops.add(WM_OT_context_toggle_enum) -bpy.ops.add(WM_OT_context_cycle_enum) -bpy.ops.add(WM_OT_context_cycle_int) +bpy.types.register(WM_OT_context_set_boolean) +bpy.types.register(WM_OT_context_set_int) +bpy.types.register(WM_OT_context_set_float) +bpy.types.register(WM_OT_context_set_string) +bpy.types.register(WM_OT_context_set_enum) +bpy.types.register(WM_OT_context_set_value) +bpy.types.register(WM_OT_context_toggle) +bpy.types.register(WM_OT_context_toggle_enum) +bpy.types.register(WM_OT_context_cycle_enum) +bpy.types.register(WM_OT_context_cycle_int) -bpy.ops.add(WM_OT_doc_view) -bpy.ops.add(WM_OT_doc_edit) +bpy.types.register(WM_OT_doc_view) +bpy.types.register(WM_OT_doc_edit) -bpy.ops.add(WM_OT_reload_scripts) +bpy.types.register(WM_OT_reload_scripts) # experemental! import rna_prop_ui -bpy.ops.add(rna_prop_ui.WM_OT_properties_edit) -bpy.ops.add(rna_prop_ui.WM_OT_properties_add) -bpy.ops.add(rna_prop_ui.WM_OT_properties_remove) +bpy.types.register(rna_prop_ui.WM_OT_properties_edit) +bpy.types.register(rna_prop_ui.WM_OT_properties_add) +bpy.types.register(rna_prop_ui.WM_OT_properties_remove) diff --git a/release/scripts/templates/operator.py b/release/scripts/templates/operator.py index 72a6ae53f5f..c6fb887b091 100644 --- a/release/scripts/templates/operator.py +++ b/release/scripts/templates/operator.py @@ -30,7 +30,7 @@ class ExportSomeData(bpy.types.Operator): write_some_data(self.properties.path, context, self.properties.use_setting) - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -46,7 +46,7 @@ class ExportSomeData(bpy.types.Operator): return self.execute(context) -bpy.ops.add(ExportSomeData) +bpy.types.register(ExportSomeData) # Only needed if you want to add into a dynamic menu import dynamic_menu diff --git a/release/scripts/templates/operator_simple.py b/release/scripts/templates/operator_simple.py index 030ed85f01f..c62d3720d96 100644 --- a/release/scripts/templates/operator_simple.py +++ b/release/scripts/templates/operator_simple.py @@ -13,9 +13,9 @@ class SimpleOperator(bpy.types.Operator): def execute(self, context): main(context) - return ('FINISHED',) + return {'FINISHED'} -bpy.ops.add(SimpleOperator) +bpy.types.register(SimpleOperator) if __name__ == "__main__": bpy.ops.object.simple_operator() diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py index 9d04afe22b5..12f1b0ed5e5 100644 --- a/release/scripts/ui/properties_data_armature_rigify.py +++ b/release/scripts/ui/properties_data_armature_rigify.py @@ -138,7 +138,7 @@ class Reload(bpy.types.Operator): def execute(self, context): DATA_PT_template.templates[:] = metarig_templates() - return ('FINISHED',) + return {'FINISHED'} def rigify_report_exception(operator, exception): @@ -180,7 +180,7 @@ class Generate(bpy.types.Operator): except rigify.RigifyError as rig_exception: rigify_report_exception(self, rig_exception) - return ('FINISHED',) + return {'FINISHED'} class Validate(bpy.types.Operator): @@ -196,7 +196,7 @@ class Validate(bpy.types.Operator): rigify.validate_rig(context, context.object) except rigify.RigifyError as rig_exception: rigify_report_exception(self, rig_exception) - return ('FINISHED',) + return {'FINISHED'} class Sample(bpy.types.Operator): @@ -219,7 +219,7 @@ class Sample(bpy.types.Operator): if obj_gen: obj_gen.location.x = i * 1.0 - return ('FINISHED',) + return {'FINISHED'} class Graph(bpy.types.Operator): @@ -244,7 +244,7 @@ class Graph(bpy.types.Operator): os.system("dot -Tpng %s > %s; gnome-open %s &" % (path_dot, path_png, path_png)) #os.system("python /b/xdot.py '%s' &" % path_dot) - return ('FINISHED',) + return {'FINISHED'} class AsScript(bpy.types.Operator): @@ -267,7 +267,7 @@ class AsScript(bpy.types.Operator): file.write(code) file.close() - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): import os @@ -294,7 +294,7 @@ class ActiveAssign(bpy.types.Operator): pose_templates = scene.pose_templates template_name = DATA_PT_template.templates[pose_templates.active_template_index] context.active_pose_bone["type"] = template_name - return ('FINISHED',) + return {'FINISHED'} class ActiveClear(bpy.types.Operator): @@ -310,7 +310,7 @@ class ActiveClear(bpy.types.Operator): def execute(self, context): scene = context.scene del context.active_pose_bone["type"] - return ('FINISHED',) + return {'FINISHED'} import space_info @@ -336,15 +336,15 @@ bpy.types.register(DATA_PT_template) bpy.types.register(PoseTemplateSettings) bpy.types.register(PoseTemplate) -bpy.ops.add(Reload) -bpy.ops.add(Generate) -bpy.ops.add(Validate) -bpy.ops.add(Sample) -bpy.ops.add(Graph) -bpy.ops.add(AsScript) +bpy.types.register(Reload) +bpy.types.register(Generate) +bpy.types.register(Validate) +bpy.types.register(Sample) +bpy.types.register(Graph) +bpy.types.register(AsScript) -bpy.ops.add(ActiveAssign) -bpy.ops.add(ActiveClear) +bpy.types.register(ActiveAssign) +bpy.types.register(ActiveClear) bpy.types.register(INFO_MT_armature_metarig_add) diff --git a/release/scripts/ui/space_console.py b/release/scripts/ui/space_console.py index 5e086435ddd..3e593246e2c 100644 --- a/release/scripts/ui/space_console.py +++ b/release/scripts/ui/space_console.py @@ -131,7 +131,7 @@ class ConsoleExec(bpy.types.Operator): return execute(context) else: print("Error: bpy.ops.console.execute_" + sc.language + " - not found") - return ('FINISHED',) + return {'FINISHED'} class ConsoleAutocomplete(bpy.types.Operator): @@ -153,11 +153,13 @@ class ConsoleAutocomplete(bpy.types.Operator): return autocomplete(context) else: print("Error: bpy.ops.console.autocomplete_" + sc.language + " - not found") - return ('FINISHED',) + return {'FINISHED'} class ConsoleBanner(bpy.types.Operator): + '''Print a message whem the terminal initializes''' bl_idname = "console.banner" + bl_label = "Console Banner" def execute(self, context): sc = context.space_data @@ -173,12 +175,13 @@ class ConsoleBanner(bpy.types.Operator): return banner(context) else: print("Error: bpy.ops.console.banner_" + sc.language + " - not found") - return ('FINISHED',) + return {'FINISHED'} class ConsoleLanguage(bpy.types.Operator): '''Set the current language for this console''' bl_idname = "console.language" + bl_label = "Console Language" language = StringProperty(name="Language", maxlen=32, default="") def execute(self, context): @@ -193,7 +196,7 @@ class ConsoleLanguage(bpy.types.Operator): bpy.ops.console.history_append(text="", current_character=0, remove_duplicates=True) - return ('FINISHED',) + return {'FINISHED'} bpy.types.register(CONSOLE_HT_header) @@ -202,9 +205,9 @@ bpy.types.register(CONSOLE_MT_report) bpy.types.register(CONSOLE_MT_language) # Stubs that call the language operators -bpy.ops.add(ConsoleExec) -bpy.ops.add(ConsoleAutocomplete) -bpy.ops.add(ConsoleBanner) +bpy.types.register(ConsoleExec) +bpy.types.register(ConsoleAutocomplete) +bpy.types.register(ConsoleBanner) # Set the language and call the banner -bpy.ops.add(ConsoleLanguage) +bpy.types.register(ConsoleLanguage) diff --git a/release/scripts/ui/space_info.py b/release/scripts/ui/space_info.py index 56509a6e099..1f7ba15de61 100644 --- a/release/scripts/ui/space_info.py +++ b/release/scripts/ui/space_info.py @@ -308,7 +308,7 @@ class HelpOperator(bpy.types.Operator): def execute(self, context): import webbrowser webbrowser.open(self._url) - return ('FINISHED',) + return {'FINISHED'} class HELP_OT_manual(HelpOperator): @@ -391,14 +391,14 @@ class HELP_OT_operator_cheat_sheet(bpy.types.Operator): textblock.write('\n'.join(op_strings)) textblock.name = "OperatorList.txt" print("See OperatorList.txt textblock") - return ('FINISHED',) - -bpy.ops.add(HELP_OT_manual) -bpy.ops.add(HELP_OT_release_logs) -bpy.ops.add(HELP_OT_blender_website) -bpy.ops.add(HELP_OT_blender_eshop) -bpy.ops.add(HELP_OT_developer_community) -bpy.ops.add(HELP_OT_user_community) -bpy.ops.add(HELP_OT_report_bug) -bpy.ops.add(HELP_OT_python_api) -bpy.ops.add(HELP_OT_operator_cheat_sheet) + return {'FINISHED'} + +bpy.types.register(HELP_OT_manual) +bpy.types.register(HELP_OT_release_logs) +bpy.types.register(HELP_OT_blender_website) +bpy.types.register(HELP_OT_blender_eshop) +bpy.types.register(HELP_OT_developer_community) +bpy.types.register(HELP_OT_user_community) +bpy.types.register(HELP_OT_report_bug) +bpy.types.register(HELP_OT_python_api) +bpy.types.register(HELP_OT_operator_cheat_sheet) diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py index 81f61b3c78c..08efb92f00e 100644 --- a/release/scripts/ui/space_userpref.py +++ b/release/scripts/ui/space_userpref.py @@ -1646,7 +1646,7 @@ class WM_OT_keyconfig_test(bpy.types.Operator): if self.testConfig(kc): print("CONFLICT") - return ('FINISHED',) + return {'FINISHED'} def _string_value(value): result = "" @@ -1736,7 +1736,7 @@ class WM_OT_keyconfig_export(bpy.types.Operator): f.close() - return ('FINISHED',) + return {'FINISHED'} def invoke(self, context, event): wm = context.manager @@ -1753,7 +1753,7 @@ class WM_OT_keymap_edit(bpy.types.Operator): wm = context.manager km = context.keymap km.copy_to_user() - return ('FINISHED',) + return {'FINISHED'} class WM_OT_keymap_restore(bpy.types.Operator): @@ -1773,7 +1773,7 @@ class WM_OT_keymap_restore(bpy.types.Operator): km = context.keymap km.restore_to_default() - return ('FINISHED',) + return {'FINISHED'} class WM_OT_keyitem_restore(bpy.types.Operator): "Restore key map item." @@ -1792,7 +1792,7 @@ class WM_OT_keyitem_restore(bpy.types.Operator): km.restore_item_to_default(kmi) - return ('FINISHED',) + return {'FINISHED'} class WM_OT_keyitem_add(bpy.types.Operator): "Add key map item." @@ -1806,7 +1806,7 @@ class WM_OT_keyitem_add(bpy.types.Operator): km.add_modal_item("", 'A', 'PRESS') # kmi else: km.add_item("", 'A', 'PRESS') # kmi - return ('FINISHED',) + return {'FINISHED'} class WM_OT_keyitem_remove(bpy.types.Operator): @@ -1819,12 +1819,12 @@ class WM_OT_keyitem_remove(bpy.types.Operator): kmi = context.keyitem km = context.keymap km.remove_item(kmi) - return ('FINISHED',) - -bpy.ops.add(WM_OT_keyconfig_export) -bpy.ops.add(WM_OT_keyconfig_test) -bpy.ops.add(WM_OT_keymap_edit) -bpy.ops.add(WM_OT_keymap_restore) -bpy.ops.add(WM_OT_keyitem_add) -bpy.ops.add(WM_OT_keyitem_remove) -bpy.ops.add(WM_OT_keyitem_restore) + return {'FINISHED'} + +bpy.types.register(WM_OT_keyconfig_export) +bpy.types.register(WM_OT_keyconfig_test) +bpy.types.register(WM_OT_keymap_edit) +bpy.types.register(WM_OT_keymap_restore) +bpy.types.register(WM_OT_keyitem_add) +bpy.types.register(WM_OT_keyitem_remove) +bpy.types.register(WM_OT_keyitem_restore) diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c index 9476aa479a7..413f01590ed 100644 --- a/source/blender/editors/animation/keyframes_edit.c +++ b/source/blender/editors/animation/keyframes_edit.c @@ -562,7 +562,7 @@ short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt) /* used to remap times from one range to another * requires: bed->data = BeztEditCD_Remap */ -short bezt_remap_times(BeztEditData *bed, BezTriple *bezt) +void bezt_remap_times(BeztEditData *bed, BezTriple *bezt) { BeztEditCD_Remap *rmap= (BeztEditCD_Remap*)bed->data; const float scale = (rmap->newMax - rmap->newMin) / (rmap->oldMax - rmap->oldMin); diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h index 26290d8771c..9e29d747d4a 100644 --- a/source/blender/editors/include/ED_keyframes_edit.h +++ b/source/blender/editors/include/ED_keyframes_edit.h @@ -154,7 +154,7 @@ short bezt_to_cfraelem(BeztEditData *bed, struct BezTriple *bezt); /* used to remap times from one range to another * requires: bed->custom = BeztEditCD_Remap */ -short bezt_remap_times(BeztEditData *bed, struct BezTriple *bezt); +void bezt_remap_times(BeztEditData *bed, struct BezTriple *bezt); /* ************************************************ */ /* Destructive Editing API (keyframes_general.c) */ diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index bfb7d139074..f174e96120c 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -2102,7 +2102,7 @@ static int sequencer_meta_make_exec(bContext *C, wmOperator *op) Sequence *seq, *seqm, *next; - int tot, channel_max= 1; + int channel_max= 1; if(ed==NULL) return OPERATOR_CANCELLED; @@ -2241,10 +2241,10 @@ void SEQUENCER_OT_meta_separate(wmOperatorType *ot) /* view_all operator */ static int sequencer_view_all_exec(bContext *C, wmOperator *op) { - Scene *scene= CTX_data_scene(C); + //Scene *scene= CTX_data_scene(C); bScreen *sc= CTX_wm_screen(C); ScrArea *area= CTX_wm_area(C); - ARegion *ar= CTX_wm_region(C); + //ARegion *ar= CTX_wm_region(C); View2D *v2d= UI_view2d_fromcontext(C); v2d->cur= v2d->tot; @@ -2275,11 +2275,11 @@ void SEQUENCER_OT_view_all(wmOperatorType *ot) static int sequencer_view_all_preview_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); - bScreen *sc= CTX_wm_screen(C); + //bScreen *sc= CTX_wm_screen(C); ScrArea *area= CTX_wm_area(C); ARegion *ar= CTX_wm_region(C); SpaceSeq *sseq= area->spacedata.first; - View2D *v2d= UI_view2d_fromcontext(C); + //View2D *v2d= UI_view2d_fromcontext(C); /* Like zooming on an image view */ @@ -2735,7 +2735,7 @@ static int sequencer_copy_exec(bContext *C, wmOperator *op) { Scene *scene= CTX_data_scene(C); Editing *ed= seq_give_editing(scene, FALSE); - Sequence *seq, *seq_act; + Sequence *seq; if(ed==NULL) return OPERATOR_CANCELLED; diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index fdad021291a..51cd9d5d3ac 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -605,39 +605,6 @@ static void rna_Operator_unregister(const bContext *C, StructRNA *type) WM_main_add_notifier(NC_SCREEN|NA_EDITED, NULL); } -void operator_wrapper(wmOperatorType *ot, void *userdata) -{ - /* take care not to overwrite anything set in - * WM_operatortype_append_ptr before opfunc() is called */ - StructRNA *srna = ot->srna; - *ot= *((wmOperatorType *)userdata); - ot->srna= srna; /* restore */ - - RNA_struct_blender_type_set(ot->ext.srna, ot); -} - -#if 0 -static int PYTHON_OT_invoke(bContext *C, wmOperator *op, wmEvent *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, NULL); -} - -static int PYTHON_OT_poll(bContext *C, wmOperatorType *ot) -{ - 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); -} -#endif - static int operator_poll(bContext *C, wmOperatorType *ot) { PointerRNA ptr; @@ -708,7 +675,11 @@ static int operator_invoke(bContext *C, wmOperator *op, wmEvent *event) return result; } + +void operator_wrapper(wmOperatorType *ot, void *userdata); + static char _operator_idname[OP_MAX_TYPENAME]; +static char _operator_name[OP_MAX_TYPENAME]; static char _operator_descr[1024]; static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) { @@ -720,6 +691,7 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports, /* setup dummy operator & operator type to store static properties in */ dummyop.type= &dummyot; dummyot.idname= _operator_idname; /* only assigne the pointer, string is NULL'd */ + dummyot.name= _operator_name; /* only assigne the pointer, string is NULL'd */ dummyot.description= _operator_descr; /* only assigne the pointer, string is NULL'd */ RNA_pointer_create(NULL, &RNA_Operator, &dummyop, &dummyotr); @@ -729,12 +701,19 @@ static StructRNA *rna_Operator_register(const bContext *C, ReportList *reports, { /* convert foo.bar to FOO_OT_bar * allocate the description and the idname in 1 go */ - int idlen = strlen(_operator_idname); - int desclen = strlen(_operator_descr); - dummyot.idname= MEM_callocN(sizeof(char) * (idlen + desclen + 2 + 3), "_operator_idname"); /* 2 terminators and 3 to convert a.b -> A_OT_b */ - WM_operator_bl_idname(dummyot.idname, _operator_idname); /* convert the idname from python */ - dummyot.description = dummyot.idname + (idlen + 4); - strcpy(dummyot.description, _operator_descr); + int idlen = strlen(_operator_idname) + 4; + int namelen = strlen(_operator_name) + 1; + int desclen = strlen(_operator_descr) + 1; + char *ch, *ch_arr; + ch_arr= ch= MEM_callocN(sizeof(char) * (idlen + namelen + desclen), "_operator_idname"); /* 2 terminators and 3 to convert a.b -> A_OT_b */ + WM_operator_bl_idname(ch, _operator_idname); /* convert the idname from python */ + dummyot.idname= ch; + ch += idlen; + strcpy(ch, _operator_name); + dummyot.name = ch; + ch += namelen; + strcpy(ch, _operator_descr); + dummyot.description = ch; } if(strlen(identifier) >= sizeof(dummyop.idname)) { @@ -806,7 +785,7 @@ static void rna_def_operator(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_REGISTER); prop= RNA_def_property(srna, "bl_label", PROP_STRING, PROP_NONE); - RNA_def_property_string_sdna(prop, NULL, "type->description"); + RNA_def_property_string_sdna(prop, NULL, "type->name"); RNA_def_property_string_maxlength(prop, 1024); /* else it uses the pointer size! */ RNA_def_property_flag(prop, PROP_REGISTER); diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c index 7ccbe1c16a4..101f3619da4 100644 --- a/source/blender/python/intern/bpy_operator.c +++ b/source/blender/python/intern/bpy_operator.c @@ -244,7 +244,7 @@ PyObject *BPY_operator_module( void ) static PyMethodDef pyop_as_string_meth ={"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL}; static PyMethodDef pyop_dir_meth = {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL}; static PyMethodDef pyop_getrna_meth = {"get_rna", (PyCFunction) pyop_getrna, METH_O, NULL}; - static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL}; +// static PyMethodDef pyop_add_meth = {"add", (PyCFunction) PYOP_wrap_add, METH_O, NULL}; static PyMethodDef pyop_add_macro_meth ={"add_macro", (PyCFunction) PYOP_wrap_add_macro, METH_O, NULL}; static PyMethodDef pyop_macro_def_meth ={"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL}; static PyMethodDef pyop_remove_meth = {"remove", (PyCFunction) PYOP_wrap_remove, METH_O, NULL}; @@ -256,7 +256,7 @@ PyObject *BPY_operator_module( void ) PyModule_AddObject( submodule, "as_string",PyCFunction_New(&pyop_as_string_meth,NULL) ); PyModule_AddObject( submodule, "dir", PyCFunction_New(&pyop_dir_meth, NULL) ); PyModule_AddObject( submodule, "get_rna", PyCFunction_New(&pyop_getrna_meth, NULL) ); - PyModule_AddObject( submodule, "add", PyCFunction_New(&pyop_add_meth, NULL) ); +// PyModule_AddObject( submodule, "add", PyCFunction_New(&pyop_add_meth, NULL) ); PyModule_AddObject( submodule, "add_macro", PyCFunction_New(&pyop_add_macro_meth, NULL) ); PyModule_AddObject( submodule, "macro_define",PyCFunction_New(&pyop_macro_def_meth, NULL) ); PyModule_AddObject( submodule, "remove", PyCFunction_New(&pyop_remove_meth, NULL) ); diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c index cd5b0756531..3bd18d98563 100644 --- a/source/blender/python/intern/bpy_operator_wrap.c +++ b/source/blender/python/intern/bpy_operator_wrap.c @@ -105,7 +105,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat py_class_instance = PyObject_Call(py_class, args, NULL); Py_DECREF(args); - + if (py_class_instance==NULL) { /* Initializing the class worked, now run its invoke function */ PyErr_Print(); PyErr_Clear(); @@ -128,7 +128,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat else if (mode==PYOP_EXEC) { item= PyObject_GetAttrString(py_class, "execute"); args = PyTuple_New(2); - + PyTuple_SET_ITEM(args, 1, pyrna_struct_CreatePyObject(&ptr_context)); } else if (mode==PYOP_POLL) { @@ -173,7 +173,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat Py_DECREF(args); Py_DECREF(item); } - + if (ret == NULL) { /* covers py_class_instance failing too */ if(op) BPy_errors_to_report(op->reports); @@ -202,7 +202,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat * If we ever want to do this and use the props again, * it can be done with - pyrna_pydict_to_props(op->ptr, kw, "") */ - + Py_DECREF(ret); } @@ -215,7 +215,7 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat BPY_flag_def *flag_def = pyop_ret_flags; strcpy(flag_str, ""); - + while(flag_def->name) { if (ret_flag & flag_def->flag) { if(flag_str[1]) @@ -260,6 +260,49 @@ static void PYTHON_OT_draw(bContext *C, wmOperator *op, uiLayout *layout) PYTHON_OT_generic(PYOP_DRAW, C, op->type, op, NULL, layout); } + + +void operator_wrapper(wmOperatorType *ot, void *userdata) +{ + /* take care not to overwrite anything set in + * WM_operatortype_append_ptr before opfunc() is called */ + StructRNA *srna = ot->srna; + *ot= *((wmOperatorType *)userdata); + ot->srna= srna; /* restore */ + + RNA_struct_blender_type_set(ot->ext.srna, ot); + + + /* Can't use this because it returns a dict proxy + * + * item= PyObject_GetAttrString(py_class, "__dict__"); + */ + { + PyObject *py_class = ot->ext.data; + PyObject *item= ((PyTypeObject*)py_class)->tp_dict; + if(item) { + /* only call this so pyrna_deferred_register_props gives a useful error + * WM_operatortype_append_ptr will call RNA_def_struct_identifier + * later */ + RNA_def_struct_identifier(ot->srna, ot->idname); + + if(pyrna_deferred_register_props(ot->srna, item)!=0) { + /* failed to register operator props */ + PyErr_Print(); + PyErr_Clear(); + + } + } + else { + PyErr_Clear(); + } + } +} + + + + + void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) { PyObject *py_class = (PyObject *)userdata; @@ -283,8 +326,8 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) item= PyObject_GetAttrString(py_class, PYOP_ATTR_DESCRIPTION); ot->description= (item && PyUnicode_Check(item)) ? _PyUnicode_AsString(item):"undocumented python operator"; Py_XDECREF(item); - - /* api callbacks, detailed checks dont on adding */ + + /* api callbacks, detailed checks dont on adding */ if (PyObject_HasAttrString(py_class, "invoke")) ot->invoke= PYTHON_OT_invoke; //else @@ -296,9 +339,9 @@ void PYTHON_OT_wrapper(wmOperatorType *ot, void *userdata) ot->pyop_poll= PYTHON_OT_poll; if (PyObject_HasAttrString(py_class, "draw")) ot->ui= PYTHON_OT_draw; - + ot->pyop_data= userdata; - + /* flags */ ot->flag= 0; @@ -419,11 +462,11 @@ void PYTHON_OT_MACRO_wrapper(wmOperatorType *ot, void *userdata) /* pyOperators - Operators defined IN Python */ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class) -{ +{ PyObject *base_class, *item; wmOperatorType *ot; - - + + char *idname= NULL; char idname_bl[OP_MAX_TYPENAME]; /* converted to blender syntax */ @@ -466,7 +509,7 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class) Py_DECREF(item); /* end annoying conversion! */ - + /* remove if it already exists */ if ((ot=WM_operatortype_exists(idname))) { if(ot->pyop_data) { @@ -474,7 +517,7 @@ PyObject *PYOP_wrap_add(PyObject *self, PyObject *py_class) } WM_operatortype_remove(idname); } - + Py_INCREF(py_class); WM_operatortype_append_ptr(PYTHON_OT_wrapper, py_class); diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index d0cc3e95097..8eda19d8198 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -3912,7 +3912,18 @@ static int bpy_class_validate(PointerRNA *dummyptr, void *py_data, int *have_fun } } +#if 0 + if(strcmp(identifier, "bl_label") == 0) { + item= PyObject_GetAttrString(py_class, "__doc__"); + if(item) { + Py_DECREF(item); /* no need to keep a ref, the class owns it */ + + if(pyrna_py_to_prop(dummyptr, prop, NULL, item, "validating class error:") != 0) + return -1; + } + } +#endif if (item == NULL && (((flag & PROP_REGISTER_OPTIONAL) != PROP_REGISTER_OPTIONAL))) { PyErr_Format( PyExc_AttributeError, "expected %.200s, %.200s class to have an \"%.200s\" attribute", class_type, py_class_name, identifier); return -1; @@ -4092,6 +4103,7 @@ void pyrna_free_types(void) } } RNA_PROP_END; + } /* Note! MemLeak XXX diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 4ad067e8743..6d008d5cbb3 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -2655,9 +2655,13 @@ void wm_operatortype_free(void) { wmOperatorType *ot; - for(ot= global_ops.first; ot; ot= ot->next) + for(ot= global_ops.first; ot; ot= ot->next) { if(ot->macro.first) wm_operatortype_free_macro(ot); + + if(ot->ext.srna) /* python operator, allocs own string */ + MEM_freeN(ot->idname); + } BLI_freelistN(&global_ops); } |