From 5ea992df98d152f83072e886a0b1f9464a4883d6 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 18 Jun 2009 14:20:25 +0000 Subject: [PATCH] UI: * Fix context.cloth, was not being set correct. * Fix errors with context pinning, scripts should not assume context.object to be there. * Always show preview even if e.g. the material is not set, to keep ID buttons from jumping while you're using them. --- release/ui/buttons_data_armature.py | 4 ++-- release/ui/buttons_data_camera.py | 4 ++-- release/ui/buttons_data_curve.py | 6 +++--- release/ui/buttons_data_empty.py | 4 ++-- release/ui/buttons_data_lamp.py | 4 ++-- release/ui/buttons_data_lattice.py | 4 ++-- release/ui/buttons_data_mesh.py | 4 ++-- release/ui/buttons_data_text.py | 4 ++-- release/ui/buttons_material.py | 7 +++++-- release/ui/buttons_physic_cloth.py | 6 +++--- release/ui/buttons_texture.py | 5 ++++- release/ui/buttons_world.py | 5 ++++- source/blender/editors/space_buttons/buttons_context.c | 10 ++++++++-- 13 files changed, 41 insertions(+), 26 deletions(-) diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py index 1086e77c3f7..c536f6bb87d 100644 --- a/release/ui/buttons_data_armature.py +++ b/release/ui/buttons_data_armature.py @@ -14,7 +14,7 @@ class DATA_PT_skeleton(DataButtonsPanel): __label__ = "Skeleton" def poll(self, context): - return (context.object.type == 'ARMATURE' or context.armature) + return ((context.object and context.object.type == 'ARMATURE') or context.armature) def draw(self, context): layout = self.layout @@ -127,4 +127,4 @@ class DATA_PT_ghost(DataButtonsPanel): bpy.types.register(DATA_PT_skeleton) bpy.types.register(DATA_PT_display) bpy.types.register(DATA_PT_paths) -bpy.types.register(DATA_PT_ghost) \ No newline at end of file +bpy.types.register(DATA_PT_ghost) diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py index 57abafb95c8..db2a1f9db25 100644 --- a/release/ui/buttons_data_camera.py +++ b/release/ui/buttons_data_camera.py @@ -14,7 +14,7 @@ class DATA_PT_camera(DataButtonsPanel): __label__ = "Lens" def poll(self, context): - return (context.object.type == 'CAMERA') + return (context.object and context.object.type == 'CAMERA') def draw(self, context): layout = self.layout @@ -87,4 +87,4 @@ class DATA_PT_camera_display(DataButtonsPanel): col.itemR(cam, "draw_size", text="Size") bpy.types.register(DATA_PT_camera) -bpy.types.register(DATA_PT_camera_display) \ No newline at end of file +bpy.types.register(DATA_PT_camera_display) diff --git a/release/ui/buttons_data_curve.py b/release/ui/buttons_data_curve.py index f42c991a36f..869d29802e1 100644 --- a/release/ui/buttons_data_curve.py +++ b/release/ui/buttons_data_curve.py @@ -7,14 +7,14 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.object.type == 'CURVE' and context.curve) + return (context.object and context.object.type == 'CURVE' and context.curve) class DATA_PT_shape_curve(DataButtonsPanel): __idname__ = "DATA_PT_shape_curve" __label__ = "Shape" def poll(self, context): - return (context.object.type == 'CURVE') + return (context.object and context.object.type == 'CURVE') def draw(self, context): layout = self.layout @@ -144,4 +144,4 @@ class DATA_PT_current_curve(DataButtonsPanel): bpy.types.register(DATA_PT_shape_curve) bpy.types.register(DATA_PT_geometry) bpy.types.register(DATA_PT_pathanim) -bpy.types.register(DATA_PT_current_curve) \ No newline at end of file +bpy.types.register(DATA_PT_current_curve) diff --git a/release/ui/buttons_data_empty.py b/release/ui/buttons_data_empty.py index 7eed54d1db6..f97dedcf6cf 100644 --- a/release/ui/buttons_data_empty.py +++ b/release/ui/buttons_data_empty.py @@ -7,7 +7,7 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.object.type == 'EMPTY') + return (context.object and context.object.type == 'EMPTY') class DATA_PT_empty(DataButtonsPanel): __idname__ = "DATA_PT_empty" @@ -20,4 +20,4 @@ class DATA_PT_empty(DataButtonsPanel): layout.itemR(ob, "empty_draw_type") layout.itemR(ob, "empty_draw_size") -bpy.types.register(DATA_PT_empty) \ No newline at end of file +bpy.types.register(DATA_PT_empty) diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py index 7328abc7c35..52a60ce617e 100644 --- a/release/ui/buttons_data_lamp.py +++ b/release/ui/buttons_data_lamp.py @@ -24,7 +24,7 @@ class DATA_PT_lamp(DataButtonsPanel): __label__ = "Lamp" def poll(self, context): - return (context.object.type == 'LAMP') + return ((context.object and context.object.type == 'LAMP') or context.lamp) def draw(self, context): layout = self.layout @@ -249,4 +249,4 @@ bpy.types.register(DATA_PT_lamp) bpy.types.register(DATA_PT_shadow) bpy.types.register(DATA_PT_sunsky) bpy.types.register(DATA_PT_spot) -bpy.types.register(DATA_PT_falloff_curve) \ No newline at end of file +bpy.types.register(DATA_PT_falloff_curve) diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py index 9382ee3525c..ad9b1b518b8 100644 --- a/release/ui/buttons_data_lattice.py +++ b/release/ui/buttons_data_lattice.py @@ -14,7 +14,7 @@ class DATA_PT_lattice(DataButtonsPanel): __label__ = "Lattice" def poll(self, context): - return (context.object.type == 'LATTICE') + return (context.object and context.object.type == 'LATTICE') def draw(self, context): layout = self.layout @@ -51,4 +51,4 @@ class DATA_PT_lattice(DataButtonsPanel): row.itemR(lat, "outside") row.itemR(lat, "shape_keys") -bpy.types.register(DATA_PT_lattice) \ No newline at end of file +bpy.types.register(DATA_PT_lattice) diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py index 5e4fb203944..c103a0f7055 100644 --- a/release/ui/buttons_data_mesh.py +++ b/release/ui/buttons_data_mesh.py @@ -14,7 +14,7 @@ class DATA_PT_mesh(DataButtonsPanel): __label__ = "Mesh" def poll(self, context): - return (context.object.type == 'MESH') + return (context.object and context.object.type == 'MESH') def draw(self, context): layout = self.layout @@ -48,4 +48,4 @@ class DATA_PT_mesh(DataButtonsPanel): layout.itemR(mesh, "texco_mesh") -bpy.types.register(DATA_PT_mesh) \ No newline at end of file +bpy.types.register(DATA_PT_mesh) diff --git a/release/ui/buttons_data_text.py b/release/ui/buttons_data_text.py index d6f6feaa389..bce16e78a40 100644 --- a/release/ui/buttons_data_text.py +++ b/release/ui/buttons_data_text.py @@ -7,7 +7,7 @@ class DataButtonsPanel(bpy.types.Panel): __context__ = "data" def poll(self, context): - return (context.object.type == 'TEXT' and context.curve) + return (context.object and context.object.type == 'TEXT' and context.curve) class DATA_PT_shape_text(DataButtonsPanel): __idname__ = "DATA_PT_shape_text" @@ -15,7 +15,7 @@ class DATA_PT_shape_text(DataButtonsPanel): def poll(self, context): ob = context.object - return (context.object.type == 'TEXT') + return (context.object and context.object.type == 'TEXT') def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py index b7703bca94e..124fba83608 100644 --- a/release/ui/buttons_material.py +++ b/release/ui/buttons_material.py @@ -13,6 +13,9 @@ class MATERIAL_PT_preview(MaterialButtonsPanel): __idname__= "MATERIAL_PT_preview" __label__ = "Preview" + def poll(self, context): + return (context.material or context.material_slot) + def draw(self, context): layout = self.layout mat = context.material @@ -24,7 +27,7 @@ class MATERIAL_PT_material(MaterialButtonsPanel): __label__ = "Material" def poll(self, context): - return (context.object != None) + return (context.material or context.material_slot) def draw(self, context): layout = self.layout @@ -419,4 +422,4 @@ bpy.types.register(MATERIAL_PT_raytransp) bpy.types.register(MATERIAL_PT_sss) bpy.types.register(MATERIAL_PT_halo) bpy.types.register(MATERIAL_PT_strand) -bpy.types.register(MATERIAL_PT_options) \ No newline at end of file +bpy.types.register(MATERIAL_PT_options) diff --git a/release/ui/buttons_physic_cloth.py b/release/ui/buttons_physic_cloth.py index 09c21b4eb64..bd65392ad63 100644 --- a/release/ui/buttons_physic_cloth.py +++ b/release/ui/buttons_physic_cloth.py @@ -50,13 +50,13 @@ class Physic_PT_cloth_collision(PhysicButtonsPanel): def draw_header(self, context): layout = self.layout - cloth = context.cloth.settings + cloth = context.cloth.collision_settings layout.itemR(cloth, "enable_collision", text="") def draw(self, context): layout = self.layout - cloth = context.cloth.settings + cloth = context.cloth.collision_settings layout.active = cloth.enable_collision @@ -103,4 +103,4 @@ class Physic_PT_cloth_stiffness(PhysicButtonsPanel): bpy.types.register(Physic_PT_cloth) bpy.types.register(Physic_PT_cloth_collision) -bpy.types.register(Physic_PT_cloth_stiffness) \ No newline at end of file +bpy.types.register(Physic_PT_cloth_stiffness) diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py index 286c1240d0e..de166cef796 100644 --- a/release/ui/buttons_texture.py +++ b/release/ui/buttons_texture.py @@ -13,6 +13,9 @@ class TEXTURE_PT_preview(TextureButtonsPanel): __idname__= "TEXTURE_PT_preview" __label__ = "Preview" + def poll(self, context): + return (context.material or context.world or context.lamp or context.texture) + def draw(self, context): layout = self.layout tex = context.texture @@ -24,7 +27,7 @@ class TEXTURE_PT_texture(TextureButtonsPanel): __label__ = "Texture" def poll(self, context): - return (context.material or context.world or context.lamp) + return (context.material or context.world or context.lamp or context.texture) def draw(self, context): layout = self.layout diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py index 647ef8aa65e..d9516cb7900 100644 --- a/release/ui/buttons_world.py +++ b/release/ui/buttons_world.py @@ -12,6 +12,9 @@ class WorldButtonsPanel(bpy.types.Panel): class WORLD_PT_preview(WorldButtonsPanel): __label__ = "Preview" + def poll(self, context): + return (context.scene or context.world) + def draw(self, context): layout = self.layout world = context.world @@ -176,4 +179,4 @@ bpy.types.register(WORLD_PT_world) bpy.types.register(WORLD_PT_ambient_occlusion) bpy.types.register(WORLD_PT_mist) bpy.types.register(WORLD_PT_stars) -bpy.types.register(WORLD_PT_color_correction) \ No newline at end of file +bpy.types.register(WORLD_PT_color_correction) diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index 255bee1bf5a..42180e7902f 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -574,8 +574,14 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r return 1; } else if(CTX_data_equals(member, "cloth")) { - set_pointer_type(path, result, &RNA_ClothModifier); - return 1; + PointerRNA *ptr= get_pointer_type(path, &RNA_Object); + + if(ptr && ptr->data) { + Object *ob= ptr->data; + ModifierData *md= modifiers_findByType(ob, eModifierType_Cloth); + CTX_data_pointer_set(result, &ob->id, &RNA_ClothModifier, md); + return 1; + } } else if(CTX_data_equals(member, "soft_body")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); -- 2.28.0