* register operators like other classes

* operators now return sets (converted into flags)
* can't remove bpy_operator_wrap.c since macro's still use the custom register funcs
This commit is contained in:
Campbell Barton 2009-12-24 19:50:43 +00:00
parent 4dd3e6c360
commit bbe13e7823
41 changed files with 274 additions and 227 deletions

@ -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

@ -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")

@ -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

@ -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

@ -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

@ -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

@ -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

@ -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)...")

@ -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

@ -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)

@ -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):

@ -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

@ -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 = ''

@ -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'}

@ -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

@ -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

@ -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'}

@ -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'}

@ -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()

@ -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

@ -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)

@ -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)

@ -146,4 +146,4 @@ class PlayRenderedAnim(bpy.types.Operator):
return('FINISHED',)
bpy.ops.add(PlayRenderedAnim)
bpy.types.register(PlayRenderedAnim)

@ -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

@ -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

@ -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()

@ -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)

@ -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

@ -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()

@ -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)

@ -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)

@ -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',)
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)
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)

@ -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',)
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)
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)

@ -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);

@ -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) */

@ -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;

@ -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);

@ -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) );

@ -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);

@ -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

@ -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);
}