operators were copying the properties from the rna operator into the class instance.

however this meant the invoke function could not modify properties for exec to use (unless it called exec directly after)
since the popup for eg would re-instance the python class each time.

now use the operator properties directly through rna without an automatic copy.

now an operator attribute is accessed like this...
self.path --> self.properties.path
This commit is contained in:
Campbell Barton 2009-11-19 17:12:08 +00:00
parent ac8ff25b2d
commit e61c90e416
19 changed files with 230 additions and 174 deletions

@ -1123,7 +1123,7 @@ class Export3DS(bpy.types.Operator):
def execute(self, context):
save_3ds(self.path, context)
save_3ds(self.properties.path, context)
return ('FINISHED',)
def invoke(self, context, event):

@ -3393,36 +3393,36 @@ class ExportFBX(bpy.types.Operator):
return context.active_object != None
def execute(self, context):
if not self.path:
if not self.properties.path:
raise Exception("path not set")
GLOBAL_MATRIX = mtx4_identity
GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = self._SCALE
if self._XROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_x90n
if self._YROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_y90n
if self._ZROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_z90n
GLOBAL_MATRIX[0][0] = GLOBAL_MATRIX[1][1] = GLOBAL_MATRIX[2][2] = self.properties._SCALE
if self.properties._XROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_x90n
if self.properties._YROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_y90n
if self.properties._ZROT90: GLOBAL_MATRIX = GLOBAL_MATRIX * mtx4_z90n
write(self.path,
write(self.properties.path,
None, # XXX
context,
self.EXP_OBS_SELECTED,
self.EXP_MESH,
self.EXP_MESH_APPLY_MOD,
# self.EXP_MESH_HQ_NORMALS,
self.EXP_ARMATURE,
self.EXP_LAMP,
self.EXP_CAMERA,
self.EXP_EMPTY,
self.EXP_IMAGE_COPY,
self.properties.EXP_OBS_SELECTED,
self.properties.EXP_MESH,
self.properties.EXP_MESH_APPLY_MOD,
# self.properties.EXP_MESH_HQ_NORMALS,
self.properties.EXP_ARMATURE,
self.properties.EXP_LAMP,
self.properties.EXP_CAMERA,
self.properties.EXP_EMPTY,
self.properties.EXP_IMAGE_COPY,
GLOBAL_MATRIX,
self.ANIM_ENABLE,
self.ANIM_OPTIMIZE,
self.ANIM_OPTIMIZE_PRECISSION,
self.ANIM_ACTION_ALL,
self.BATCH_ENABLE,
self.BATCH_GROUP,
self.BATCH_FILE_PREFIX,
self.BATCH_OWN_DIR)
self.properties.ANIM_ENABLE,
self.properties.ANIM_OPTIMIZE,
self.properties.ANIM_OPTIMIZE_PRECISSION,
self.properties.ANIM_ACTION_ALL,
self.properties.BATCH_ENABLE,
self.properties.BATCH_GROUP,
self.properties.BATCH_FILE_PREFIX,
self.properties.BATCH_OWN_DIR)
return ('FINISHED',)

@ -173,10 +173,10 @@ class ExportMDD(bpy.types.Operator):
return (ob and ob.type=='MESH')
def execute(self, context):
if not self.path:
if not self.properties.path:
raise Exception("filename not set")
write(self.path, context.scene, context.active_object,
self.start_frame, self.end_frame, self.fps )
write(self.properties.path, context.scene, context.active_object,
self.properties.start_frame, self.properties.end_frame, self.properties.fps )
return ('FINISHED',)
def invoke(self, context, event):

@ -972,24 +972,24 @@ class ExportOBJ(bpy.types.Operator):
def execute(self, context):
do_export(self.path, context,
EXPORT_TRI=self.use_triangles,
EXPORT_EDGES=self.use_edges,
EXPORT_NORMALS=self.use_normals,
EXPORT_NORMALS_HQ=self.use_hq_normals,
EXPORT_UV=self.use_uvs,
EXPORT_MTL=self.use_materials,
EXPORT_COPY_IMAGES=self.copy_images,
EXPORT_APPLY_MODIFIERS=self.use_modifiers,
EXPORT_ROTX90=self.use_rotate90,
EXPORT_BLEN_OBS=self.use_blen_objects,
EXPORT_GROUP_BY_OB=self.group_by_object,
EXPORT_GROUP_BY_MAT=self.group_by_material,
EXPORT_KEEP_VERT_ORDER=self.keep_vertex_order,
EXPORT_POLYGROUPS=self.use_vertex_groups,
EXPORT_CURVE_AS_NURBS=self.use_nurbs,
EXPORT_SEL_ONLY=self.use_selection,
EXPORT_ALL_SCENES=self.use_all_scenes)
do_export(self.properties.path, context,
EXPORT_TRI=self.properties.use_triangles,
EXPORT_EDGES=self.properties.use_edges,
EXPORT_NORMALS=self.properties.use_normals,
EXPORT_NORMALS_HQ=self.properties.use_hq_normals,
EXPORT_UV=self.properties.use_uvs,
EXPORT_MTL=self.properties.use_materials,
EXPORT_COPY_IMAGES=self.properties.copy_images,
EXPORT_APPLY_MODIFIERS=self.properties.use_modifiers,
EXPORT_ROTX90=self.properties.use_rotate90,
EXPORT_BLEN_OBS=self.properties.use_blen_objects,
EXPORT_GROUP_BY_OB=self.properties.group_by_object,
EXPORT_GROUP_BY_MAT=self.properties.group_by_material,
EXPORT_KEEP_VERT_ORDER=self.properties.keep_vertex_order,
EXPORT_POLYGROUPS=self.properties.use_vertex_groups,
EXPORT_CURVE_AS_NURBS=self.properties.use_nurbs,
EXPORT_SEL_ONLY=self.properties.use_selection,
EXPORT_ALL_SCENES=self.properties.use_all_scenes)
return ('FINISHED',)

@ -274,14 +274,14 @@ class ExportPLY(bpy.types.Operator):
def execute(self, context):
# print("Selected: " + context.active_object.name)
if not self.path:
if not self.properties.path:
raise Exception("filename not set")
write(self.path, context.scene, context.active_object,\
EXPORT_APPLY_MODIFIERS = self.use_modifiers,
EXPORT_NORMALS = self.use_normals,
EXPORT_UV = self.use_uvs,
EXPORT_COLORS = self.use_colors,
write(self.properties.path, context.scene, context.active_object,\
EXPORT_APPLY_MODIFIERS = self.properties.use_modifiers,
EXPORT_NORMALS = self.properties.use_normals,
EXPORT_UV = self.properties.use_uvs,
EXPORT_COLORS = self.properties.use_colors,
)
return ('FINISHED',)

@ -1230,7 +1230,7 @@ class ExportX3D(bpy.types.Operator):
def execute(self, context):
x3d_export(self.path, context, self.apply_modifiers, self.triangulate, self.compress)
x3d_export(self.properties.path, context, self.properties.apply_modifiers, self.properties.triangulate, self.properties.compress)
return ('FINISHED',)
def invoke(self, context, event):

@ -863,7 +863,7 @@ class BvhImporter(bpy.types.Operator):
def execute(self, context):
# print("Selected: " + context.active_object.name)
read_bvh(context, self.path)
read_bvh(context, self.properties.path)
return ('FINISHED',)

@ -1156,7 +1156,7 @@ class IMPORT_OT_autodesk_3ds(bpy.types.Operator):
# apply_matrix = BoolProperty(name="Transform Fix", description="Workaround for object transformations importing incorrectly", default=False),
def execute(self, context):
load_3ds(self.path, context, 0.0, False, False)
load_3ds(self.properties.path, context, 0.0, False, False)
return ('FINISHED',)
def invoke(self, context, event):

@ -1601,18 +1601,18 @@ class IMPORT_OT_obj(bpy.types.Operator):
def execute(self, context):
# print("Selected: " + context.active_object.name)
load_obj(self.path,
load_obj(self.properties.path,
context,
self.CLAMP_SIZE,
self.CREATE_FGONS,
self.CREATE_SMOOTH_GROUPS,
self.CREATE_EDGES,
self.SPLIT_OBJECTS,
self.SPLIT_GROUPS,
self.SPLIT_MATERIALS,
self.ROTATE_X90,
self.IMAGE_SEARCH,
self.POLYGROUPS)
self.properties.CLAMP_SIZE,
self.properties.CREATE_FGONS,
self.properties.CREATE_SMOOTH_GROUPS,
self.properties.CREATE_EDGES,
self.properties.SPLIT_OBJECTS,
self.properties.SPLIT_GROUPS,
self.properties.SPLIT_MATERIALS,
self.properties.ROTATE_X90,
self.properties.IMAGE_SEARCH,
self.properties.POLYGROUPS)
return ('FINISHED',)

@ -26,6 +26,7 @@ EVIL_PROP_VALUE = EVIL_PROP + '_value'
EVIL_PROP_PROP = EVIL_PROP + '_prop'
EVIL_PROP_PROP_ORIG = EVIL_PROP + '_prop_orig'
# nasty!, use a scene property to store the active edit item
def evil_prop_init():
Scene = bpy.types.Scene
@ -35,6 +36,42 @@ def evil_prop_init():
Scene.StringProperty(attr=EVIL_PROP_PROP)
Scene.StringProperty(attr=EVIL_PROP_PROP_ORIG)
def rna_idprop_ui_get(item, create=True):
try:
return item['_RNA_UI']
except:
if create:
item['_RNA_UI'] = {}
return item['_RNA_UI']
else:
return None
def rna_idprop_ui_prop_get(item, prop, create=True):
rna_ui = rna_idprop_ui_get(item, create)
if rna_ui == None:
return None
try:
return rna_ui[prop]
except:
rna_ui[prop] = {}
return rna_ui[prop]
def rna_idprop_ui_prop_clear(item, prop):
rna_ui = rna_idprop_ui_get(item, False)
if rna_ui == None:
return
try:
del rna_ui[prop]
except:
pass
def draw(layout, context, context_member, use_edit = True):
@ -70,7 +107,7 @@ def draw(layout, context, context_member, use_edit = True):
del row
for key, val in items:
print("KEY - " + key)
if key == '_RNA_UI':
continue
@ -86,6 +123,7 @@ def draw(layout, context, context_member, use_edit = True):
box = row.box()
'''
if use_edit and key == global_prop_orig and context_member == global_path:
split = box.split(percentage=0.75)
@ -94,10 +132,12 @@ def draw(layout, context, context_member, use_edit = True):
row.itemR(scene, EVIL_PROP_VALUE)
row = split.column()
prop = row.itemO("wm.properties_edit_end", properties=True, text="done")
prop = row.itemO("wm.properties_edit", properties=True, text="done")
assign_props(prop, val_draw, key)
else:
'''
if 1:
if use_edit:
split = box.split(percentage=0.75)
row = split.row()
@ -114,7 +154,7 @@ def draw(layout, context, context_member, use_edit = True):
if use_edit:
row = split.row(align=True)
prop = row.itemO("wm.properties_edit_begin", properties=True, text="edit")
prop = row.itemO("wm.properties_edit", properties=True, text="edit")
assign_props(prop, val_draw, key)
prop = row.itemO("wm.properties_remove", properties=True, text="", icon='ICON_ZOOMOUT')
@ -125,7 +165,7 @@ from bpy.props import *
rna_path = StringProperty(name="Property Edit",
description="Property path edit", maxlen=1024, default="")
description="Property path edit", maxlen=1024, default="", hidden=True)
rna_value = StringProperty(name="Property Value",
description="Property value edit", maxlen=1024, default="")
@ -133,69 +173,104 @@ rna_value = StringProperty(name="Property Value",
rna_property = StringProperty(name="Property Name",
description="Property name edit", maxlen=1024, default="")
class WM_OT_properties_edit_begin(bpy.types.Operator):
rna_min = FloatProperty(name="Min", default=0.0)
rna_min = FloatProperty(name="Max", default=1.0)
class WM_OT_properties_edit(bpy.types.Operator):
'''Internal use (edit a property path)'''
bl_idname = "wm.properties_edit_begin"
bl_label = "Edit Property"
bl_idname = "wm.properties_edit"
bl_label = "Edit Property!"
path = rna_path
value = rna_value
property = rna_property
min = FloatProperty(name="Min", default=0.0)
max = FloatProperty(name="Max", default=1.0)
description = StringProperty(name="Tip", default="")
# the class instance is not persistant, need to store in the class
# not ideal but changes as the op runs.
_last_prop = ['']
def execute(self, context):
scene = context.scene
setattr(scene, EVIL_PROP_PATH, self.path)
setattr(scene, EVIL_PROP_VALUE, self.value)
setattr(scene, EVIL_PROP_PROP, self.property)
setattr(scene, EVIL_PROP_PROP_ORIG, self.property)
return ('FINISHED',)
global_path = self.properties.path
global_value = self.properties.value
global_prop = self.properties.property
global_prop_old = self._last_prop[0]
class WM_OT_properties_edit_end(bpy.types.Operator):
'''Internal use (edit a property path)'''
bl_idname = "wm.properties_edit_end"
bl_label = "Edit Property"
path = rna_path
value = rna_value
property = rna_property
def execute(self, context):
scene = context.scene
global_path = getattr(scene, EVIL_PROP_PATH)
global_value = getattr(scene, EVIL_PROP_VALUE)
global_prop = getattr(scene, EVIL_PROP_PROP)
setattr(scene, EVIL_PROP_PATH, "")
setattr(scene, EVIL_PROP_VALUE, "")
setattr(scene, EVIL_PROP_PROP, "")
setattr(scene, EVIL_PROP_PROP_ORIG, "")
try:
value = eval(global_value)
except:
value = global_value
if type(value) == str:
value = '"' + value + '"'
value = '"' + value + '"'
# First remove
exec_str = "del context.%s['%s']" % (global_path, self.property)
item = eval("context.%s" % global_path)
rna_idprop_ui_prop_clear(item, global_prop_old)
exec_str = "del item['%s']" % global_prop_old
# print(exec_str)
exec(exec_str)
# Reassign
exec_str = "context.%s['%s'] = %s" % (global_path, global_prop, value)
exec_str = "item['%s'] = %s" % (global_prop, value)
# print(exec_str)
exec(exec_str)
prop_type = type(item[global_prop])
prop_ui = rna_idprop_ui_prop_get(item, global_prop)
if prop_type in (float, int):
prop_ui['soft_min'] = prop_ui['min'] = prop_type(self.properties.min)
prop_ui['soft_max'] = prop_ui['max'] = prop_type(self.properties.max)
return ('FINISHED',)
def invoke(self, context, event):
self._last_prop[:] = [self.properties.property]
item = eval("context.%s" % self.properties.path)
# setup defaults
prop_ui = rna_idprop_ui_prop_get(item, self.properties.property, False) # dont create
if prop_ui:
self.properties.min = prop_ui.get("min", -1000000000)
self.properties.min = prop_ui.get("max", 1000000000)
self.properties.description = prop_ui.get("description", "")
if 0:
_message= "PyConsole, press Ctrl+D to unlock the BGE"
import sys
# evaluate commands in current namespace
frame= sys._getframe()
namespace = frame.f_globals.copy()
namespace.update(frame.f_locals)
import code
# Autocomp in python, not as comprehensive as IPython
import rlcompleter
try: # ick, some pythons dont have this
import readline
readline.parse_and_bind("tab: complete")
except:
pass
code.interact(banner=_message, local=namespace)
wm = context.manager
wm.invoke_props_popup(self, event)
return ('RUNNING_MODAL',)
class WM_OT_properties_add(bpy.types.Operator):
'''Internal use (edit a property path)'''
@ -231,6 +306,7 @@ class WM_OT_properties_remove(bpy.types.Operator):
property = rna_property
def execute(self, context):
item = eval("context.%s" % self.path)
del item[self.property]
item = eval("context.%s" % self.properties.path)
del item[self.properties.property]
return ('FINISHED',)

@ -96,10 +96,10 @@ class AddTorus(bpy.types.Operator):
def execute(self, context):
verts_loc, faces = add_torus(self.major_radius,
self.minor_radius,
self.major_segments,
self.minor_segments)
verts_loc, faces = add_torus(self.properties.major_radius,
self.properties.minor_radius,
self.properties.major_segments,
self.properties.minor_segments)
mesh = bpy.data.add_mesh("Torus")

@ -1128,7 +1128,7 @@ class SmartProject(bpy.types.Operator):
return context.active_object != None
def execute(self, context):
main(context, self.island_margin, self.angle_limit)
main(context, self.properties.island_margin, self.properties.angle_limit)
return ('FINISHED',)
bpy.ops.add(SmartProject)

@ -166,7 +166,7 @@ class VertexPaintDirt(bpy.types.Operator):
t = time.time()
applyVertexDirt(me, self.blur_iterations, self.blur_strength, math.radians(self.dirt_angle), math.radians(self.clean_angle), self.dirt_only)
applyVertexDirt(me, self.properties.blur_iterations, self.properties.blur_strength, math.radians(self.properties.dirt_angle), math.radians(self.properties.clean_angle), self.properties.dirt_only)
print('Dirt calculated in %.6f' % (time.time()-t))
@ -175,4 +175,4 @@ class VertexPaintDirt(bpy.types.Operator):
bpy.ops.add(VertexPaintDirt)
if __name__ == "__main__":
bpy.ops.mesh.vertex_paint_dirt()
bpy.ops.mesh.vertex_paint_dirt()

@ -60,9 +60,9 @@ def context_path_validate(context, path):
def execute_context_assign(self, context):
if context_path_validate(context, self.path) == NullPathMember:
if context_path_validate(context, self.properties.path) == NullPathMember:
return ('PASS_THROUGH',)
exec("context.%s=self.value" % self.path)
exec("context.%s=self.properties.value" % self.properties.path)
return ('FINISHED',)
@ -134,10 +134,10 @@ class WM_OT_context_toggle(bpy.types.Operator):
def execute(self, context):
if context_path_validate(context, self.path) == NullPathMember:
if context_path_validate(context, self.properties.path) == NullPathMember:
return ('PASS_THROUGH',)
exec("context.%s=not (context.%s)" % (self.path, self.path))
exec("context.%s=not (context.%s)" % (self.properties.path, self.properties.path))
return ('FINISHED',)
@ -155,11 +155,11 @@ class WM_OT_context_toggle_enum(bpy.types.Operator):
def execute(self, context):
if context_path_validate(context, self.path) == NullPathMember:
if context_path_validate(context, self.properties.path) == NullPathMember:
return ('PASS_THROUGH',)
exec("context.%s = ['%s', '%s'][context.%s!='%s']" % \
(self.path, self.value_1, self.value_2, self.path, self.value_2))
(self.properties.path, self.properties.value_1, self.properties.value_2, self.properties.path, self.properties.value_2))
return ('FINISHED',)
@ -174,23 +174,23 @@ class WM_OT_context_cycle_int(bpy.types.Operator):
def execute(self, context):
value = context_path_validate(context, self.path)
value = context_path_validate(context, self.properties.path)
if value == NullPathMember:
return ('PASS_THROUGH',)
self.value = value
if self.reverse:
self.value -= 1
self.properties.value = value
if self.properties.reverse:
self.properties.value -= 1
else:
self.value += 1
self.properties.value += 1
execute_context_assign(self, context)
if self.value != eval("context.%s" % self.path):
if self.properties.value != eval("context.%s" % self.properties.path):
# relies on rna clamping int's out of the range
if self.reverse:
self.value = (1 << 32)
if self.properties.reverse:
self.properties.value = (1 << 32)
else:
self.value = - (1 << 32)
self.properties.value = - (1 << 32)
execute_context_assign(self, context)
return ('FINISHED',)
@ -206,14 +206,14 @@ class WM_OT_context_cycle_enum(bpy.types.Operator):
def execute(self, context):
value = context_path_validate(context, self.path)
value = context_path_validate(context, self.properties.path)
if value == NullPathMember:
return ('PASS_THROUGH',)
orig_value = value
# Have to get rna enum values
rna_struct_str, rna_prop_str = self.path.rsplit('.', 1)
rna_struct_str, rna_prop_str = self.properties.path.rsplit('.', 1)
i = rna_prop_str.find('[')
# just incse we get "context.foo.bar[0]"
@ -231,7 +231,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator):
orig_index = enums.index(orig_value)
# Have the info we need, advance to the next item
if self.reverse:
if self.properties.reverse:
if orig_index == 0:
advance_enum = enums[-1]
else:
@ -243,7 +243,7 @@ class WM_OT_context_cycle_enum(bpy.types.Operator):
advance_enum = enums[orig_index + 1]
# set the new value
exec("context.%s=advance_enum" % self.path)
exec("context.%s=advance_enum" % self.properties.path)
return ('FINISHED',)
doc_id = StringProperty(name="Doc ID",
@ -270,7 +270,7 @@ class WM_OT_doc_view(bpy.types.Operator):
return '.'.join([class_obj.identifier for class_obj in ls])
def execute(self, context):
id_split = self.doc_id.split('.')
id_split = self.properties.doc_id.split('.')
if len(id_split) == 1: # rna, class
url = '%s/bpy.types.%s-class.html' % (self._prefix, id_split[0])
elif len(id_split) == 2: # rna, class.prop
@ -316,9 +316,9 @@ class WM_OT_doc_edit(bpy.types.Operator):
def execute(self, context):
class_name, class_prop = self.doc_id.split('.')
class_name, class_prop = self.properties.doc_id.split('.')
if not self.doc_new:
if not self.properties.doc_new:
return ('RUNNING_MODAL',)
# check if this is an operator
@ -331,25 +331,25 @@ class WM_OT_doc_edit(bpy.types.Operator):
if op_class:
rna = op_class.bl_rna
doc_orig = rna.description
if doc_orig == self.doc_new:
if doc_orig == self.properties.doc_new:
return ('RUNNING_MODAL',)
print("op - old:'%s' -> new:'%s'" % (doc_orig, self.doc_new))
upload["title"] = 'OPERATOR %s:%s' % (self.doc_id, doc_orig)
upload["description"] = self.doc_new
print("op - old:'%s' -> new:'%s'" % (doc_orig, self.properties.doc_new))
upload["title"] = 'OPERATOR %s:%s' % (self.properties.doc_id, doc_orig)
upload["description"] = self.properties.doc_new
self._send_xmlrpc(upload)
else:
rna = getattr(bpy.types, class_name).bl_rna
doc_orig = rna.properties[class_prop].description
if doc_orig == self.doc_new:
if doc_orig == self.properties.doc_new:
return ('RUNNING_MODAL',)
print("rna - old:'%s' -> new:'%s'" % (doc_orig, self.doc_new))
upload["title"] = 'RNA %s:%s' % (self.doc_id, doc_orig)
print("rna - old:'%s' -> new:'%s'" % (doc_orig, self.properties.doc_new))
upload["title"] = 'RNA %s:%s' % (self.properties.doc_id, doc_orig)
upload["description"] = self.doc_new
upload["description"] = self.properties.doc_new
self._send_xmlrpc(upload)
@ -410,7 +410,6 @@ bpy.ops.add(WM_OT_reload_scripts)
# experemental!
import rna_prop_ui
bpy.ops.add(rna_prop_ui.WM_OT_properties_edit_begin)
bpy.ops.add(rna_prop_ui.WM_OT_properties_edit_end)
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)

@ -28,7 +28,7 @@ class ExportSomeData(bpy.types.Operator):
#if not self.is_property_set("path"):
# raise Exception("filename not set")
write_some_data(self.path, context, self.use_setting)
write_some_data(self.properties.path, context, self.properties.use_setting)
return ('FINISHED',)

@ -180,7 +180,7 @@ class ConsoleLanguage(bpy.types.Operator):
sc = context.space_data
# defailt to python
sc.language = self.language
sc.language = self.properties.language
bpy.ops.console.banner()

@ -1309,10 +1309,10 @@ class WM_OT_keyconfig_export(bpy.types.Operator):
return result
def execute(self, context):
if not self.path:
if not self.properties.path:
raise Exception("File path not set.")
f = open(self.path, "w")
f = open(self.properties.path, "w")
if not f:
raise Exception("Could not open file.")
@ -1392,7 +1392,7 @@ class WM_OT_keymap_restore(bpy.types.Operator):
def execute(self, context):
wm = context.manager
if self.all:
if self.properties.all:
for km in wm.default_keyconfig.keymaps:
km.restore_to_default()
else:

@ -1671,15 +1671,15 @@ class OBJECT_OT_select_pattern(bpy.types.Operator):
import fnmatch
if self.case_sensitive:
if self.properties.case_sensitive:
pattern_match = fnmatch.fnmatchcase
else:
pattern_match = lambda a, b: fnmatch.fnmatchcase(a.upper(), b.upper())
for ob in context.visible_objects:
if pattern_match(ob.name, self.pattern):
if pattern_match(ob.name, self.properties.pattern):
ob.selected = True
elif not self.extend:
elif not self.properties.extend:
ob.selected = False
return ('FINISHED',)

@ -106,24 +106,6 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
Py_DECREF(args);
if (py_class_instance) { /* Initializing the class worked, now run its invoke function */
PyObject *class_dict= PyObject_GetAttrString(py_class_instance, "__dict__");
/* Assign instance attributes from operator properties */
if(op) {
const char *arg_name;
RNA_STRUCT_BEGIN(op->ptr, prop) {
arg_name= RNA_property_identifier(prop);
if (strcmp(arg_name, "rna_type")==0) continue;
item = pyrna_prop_to_py(op->ptr, prop);
PyDict_SetItemString(class_dict, arg_name, item);
Py_DECREF(item);
}
RNA_STRUCT_END;
}
RNA_pointer_create(NULL, &RNA_Context, C, &ptr_context);
if (mode==PYOP_INVOKE) {
@ -154,7 +136,6 @@ static int PYTHON_OT_generic(int mode, bContext *C, wmOperatorType *ot, wmOperat
Py_DECREF(args);
Py_DECREF(item);
Py_DECREF(class_dict);
}
else {
PyErr_Print();