custom properties panels for most ID types. use subclassing to keep panel UI definitions minimal

This commit is contained in:
Campbell Barton
2010-01-08 08:54:41 +00:00
parent ceab17ee17
commit b8ca67ca33
15 changed files with 132 additions and 40 deletions

View File

@@ -124,6 +124,18 @@ def draw(layout, context, context_member, use_edit=True):
assign_props(prop, val_draw, key)
class PropertyPanel(bpy.types.Panel):
"""
The subclass should have its own poll function
and the variable '_context_path' MUST be set.
"""
bl_label = "Custom Properties"
bl_default_closed = True
def draw(self, context):
draw(self.layout, context, self._context_path)
from bpy.props import *
@@ -257,3 +269,4 @@ class WM_OT_properties_remove(bpy.types.Operator):
item = eval("context.%s" % self.properties.path)
del item[self.properties.property]
return {'FINISHED'}

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -55,6 +56,10 @@ class DATA_PT_context_arm(DataButtonsPanel):
layout.template_ID(ob, "data")
class DATA_PT_custom_props_arm(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_skeleton(DataButtonsPanel):
bl_label = "Skeleton"
@@ -293,16 +298,6 @@ class DATA_PT_iksolver_itasc(DataButtonsPanel):
row.prop(itasc, "dampeps", text="Eps", slider=True)
class DATA_PT_properties(DataButtonsPanel):
bl_label = "Properties"
bl_default_closed = True
def draw(self, context):
import rna_prop_ui
rna_prop_ui.draw(self.layout, context, "object.data")
bpy.types.register(DATA_PT_context_arm)
bpy.types.register(DATA_PT_skeleton)
bpy.types.register(DATA_PT_display)
@@ -310,4 +305,5 @@ bpy.types.register(DATA_PT_bone_groups)
bpy.types.register(DATA_PT_paths)
bpy.types.register(DATA_PT_ghost)
bpy.types.register(DATA_PT_iksolver_itasc)
bpy.types.register(DATA_PT_properties)
bpy.types.register(DATA_PT_custom_props_arm)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -47,6 +48,17 @@ class BONE_PT_context_bone(BoneButtonsPanel):
row.prop(bone, "name", text="")
class BONE_PT_custom_props(BoneButtonsPanel, PropertyPanel):
@property
def _context_path(self):
obj = bpy.context.object
if obj and obj.mode == 'POSE':
return "active_pose_bone"
else:
return "active_bone"
class BONE_PT_transform(BoneButtonsPanel):
bl_label = "Transform"
@@ -376,21 +388,6 @@ class BONE_PT_deform(BoneButtonsPanel):
col.prop(bone, "cyclic_offset")
class BONE_PT_properties(BoneButtonsPanel):
bl_label = "Properties"
bl_default_closed = True
def draw(self, context):
import rna_prop_ui
# reload(rna_prop_ui)
obj = context.object
if obj and obj.mode == 'POSE':
item = "active_pose_bone"
else:
item = "active_bone"
rna_prop_ui.draw(self.layout, context, item)
bpy.types.register(BONE_PT_context_bone)
bpy.types.register(BONE_PT_transform)
bpy.types.register(BONE_PT_transform_locks)
@@ -398,4 +395,5 @@ bpy.types.register(BONE_PT_relations)
bpy.types.register(BONE_PT_display)
bpy.types.register(BONE_PT_inverse_kinematics)
bpy.types.register(BONE_PT_deform)
bpy.types.register(BONE_PT_properties)
bpy.types.register(BONE_PT_custom_props)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -58,6 +59,10 @@ class DATA_PT_context_camera(DataButtonsPanel):
layout.template_ID(space, "pin_id")
class DATA_PT_custom_props_camera(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_camera(DataButtonsPanel):
bl_label = "Lens"
@@ -140,6 +145,9 @@ class DATA_PT_camera_display(DataButtonsPanel):
sub.active = cam.show_passepartout
sub.prop(cam, "passepartout_alpha", text="Alpha", slider=True)
bpy.types.register(DATA_PT_context_camera)
bpy.types.register(DATA_PT_camera)
bpy.types.register(DATA_PT_camera_display)
bpy.types.register(DATA_PT_custom_props_camera)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -72,6 +73,10 @@ class DATA_PT_context_curve(DataButtonsPanel):
layout.template_ID(ob, "data")
class DATA_PT_custom_props_curve(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_shape_curve(DataButtonsPanel):
bl_label = "Shape"
@@ -377,6 +382,7 @@ class DATA_PT_textboxes(DataButtonsPanel):
col.prop(box, "x", text="X")
col.prop(box, "y", text="Y")
bpy.types.register(DATA_PT_context_curve)
bpy.types.register(DATA_PT_shape_curve)
bpy.types.register(DATA_PT_geometry_curve)
@@ -385,3 +391,5 @@ bpy.types.register(DATA_PT_active_spline)
bpy.types.register(DATA_PT_font)
bpy.types.register(DATA_PT_paragraph)
bpy.types.register(DATA_PT_textboxes)
bpy.types.register(DATA_PT_custom_props_curve)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -65,6 +66,10 @@ class DATA_PT_context_lamp(DataButtonsPanel):
layout.template_ID(space, "pin_id")
class DATA_PT_custom_props_lamp(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_lamp(DataButtonsPanel):
bl_label = "Lamp"
@@ -374,6 +379,7 @@ class DATA_PT_falloff_curve(DataButtonsPanel):
self.layout.template_curve_mapping(lamp, "falloff_curve")
bpy.types.register(DATA_PT_context_lamp)
bpy.types.register(DATA_PT_preview)
bpy.types.register(DATA_PT_lamp)
@@ -382,3 +388,5 @@ bpy.types.register(DATA_PT_area)
bpy.types.register(DATA_PT_spot)
bpy.types.register(DATA_PT_shadow)
bpy.types.register(DATA_PT_sunsky)
bpy.types.register(DATA_PT_custom_props_lamp)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -58,6 +59,10 @@ class DATA_PT_context_lattice(DataButtonsPanel):
layout.template_ID(space, "pin_id")
class DATA_PT_custom_props_lattice(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_lattice(DataButtonsPanel):
bl_label = "Lattice"
@@ -90,5 +95,8 @@ class DATA_PT_lattice(DataButtonsPanel):
layout.prop(lat, "outside")
bpy.types.register(DATA_PT_context_lattice)
bpy.types.register(DATA_PT_lattice)
bpy.types.register(DATA_PT_custom_props_lattice)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -58,6 +59,10 @@ class DATA_PT_context_mesh(DataButtonsPanel):
layout.template_ID(space, "pin_id")
class DATA_PT_custom_props_mesh(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_normals(DataButtonsPanel):
bl_label = "Normals"
@@ -292,3 +297,6 @@ bpy.types.register(DATA_PT_vertex_groups)
bpy.types.register(DATA_PT_shape_keys)
bpy.types.register(DATA_PT_uv_texture)
bpy.types.register(DATA_PT_vertex_colors)
bpy.types.register(DATA_PT_custom_props_mesh)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -58,6 +59,10 @@ class DATA_PT_context_metaball(DataButtonsPanel):
layout.template_ID(space, "pin_id")
class DATA_PT_custom_props_metaball(DataButtonsPanel, PropertyPanel):
_context_path = "object.data"
class DATA_PT_metaball(DataButtonsPanel):
bl_label = "Metaball"
@@ -133,3 +138,7 @@ class DATA_PT_metaball_element(DataButtonsPanel):
bpy.types.register(DATA_PT_context_metaball)
bpy.types.register(DATA_PT_metaball)
bpy.types.register(DATA_PT_metaball_element)
bpy.types.register(DATA_PT_custom_props_metaball)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -125,6 +126,11 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel):
layout.prop(mat, "type", text="")
class MATERIAL_PT_custom_props(MaterialButtonsPanel, PropertyPanel):
COMPAT_ENGINES = {'BLENDER_RENDER'}
_context_path = "material"
class MATERIAL_PT_shading(MaterialButtonsPanel):
bl_label = "Shading"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
@@ -880,3 +886,5 @@ bpy.types.register(MATERIAL_PT_volume_shading)
bpy.types.register(MATERIAL_PT_volume_lighting)
bpy.types.register(MATERIAL_PT_volume_transp)
bpy.types.register(MATERIAL_PT_volume_integration)
bpy.types.register(MATERIAL_PT_custom_props)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -42,6 +43,10 @@ class OBJECT_PT_context_object(ObjectButtonsPanel):
row.prop(ob, "name", text="")
class OBJECT_PT_custom_props(ObjectButtonsPanel, PropertyPanel):
_context_path = "object"
class OBJECT_PT_transform(ObjectButtonsPanel):
bl_label = "Transform"
@@ -300,16 +305,6 @@ class OBJECT_PT_animation(ObjectButtonsPanel):
row.active = (ob.parent is not None)
class OBJECT_PT_properties(ObjectButtonsPanel):
bl_label = "Properties"
bl_default_closed = True
def draw(self, context):
import rna_prop_ui
# reload(rna_prop_ui)
rna_prop_ui.draw(self.layout, context, "object")
bpy.types.register(OBJECT_PT_context_object)
bpy.types.register(OBJECT_PT_transform)
bpy.types.register(OBJECT_PT_transform_locks)
@@ -318,4 +313,5 @@ bpy.types.register(OBJECT_PT_groups)
bpy.types.register(OBJECT_PT_display)
bpy.types.register(OBJECT_PT_duplication)
bpy.types.register(OBJECT_PT_animation)
bpy.types.register(OBJECT_PT_properties)
bpy.types.register(OBJECT_PT_custom_props)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
from properties_physics_common import point_cache_ui
from properties_physics_common import effector_weights_ui
@@ -47,7 +48,7 @@ class ParticleButtonsPanel(bpy.types.Panel):
return particle_panel_poll(context)
class PARTICLE_PT_particles(ParticleButtonsPanel):
class PARTICLE_PT_context_particles(ParticleButtonsPanel):
bl_label = ""
bl_show_header = False
@@ -130,6 +131,10 @@ class PARTICLE_PT_particles(ParticleButtonsPanel):
split.prop(psys, "reactor_target_particle_system", text="Particle System")
class PARTICLE_PT_custom_props(ParticleButtonsPanel, PropertyPanel):
_context_path = "particle_system.settings"
class PARTICLE_PT_emission(ParticleButtonsPanel):
bl_label = "Emission"
@@ -992,7 +997,7 @@ class PARTICLE_PT_vertexgroups(ParticleButtonsPanel):
row.prop_object(psys, "vertex_group_field", ob, "vertex_groups", text="Field")
row.prop(psys, "vertex_group_field_negate", text="")
bpy.types.register(PARTICLE_PT_particles)
bpy.types.register(PARTICLE_PT_context_particles)
bpy.types.register(PARTICLE_PT_hair_dynamics)
bpy.types.register(PARTICLE_PT_cache)
bpy.types.register(PARTICLE_PT_emission)
@@ -1006,3 +1011,5 @@ bpy.types.register(PARTICLE_PT_children)
bpy.types.register(PARTICLE_PT_field_weights)
bpy.types.register(PARTICLE_PT_force_fields)
bpy.types.register(PARTICLE_PT_vertexgroups)
bpy.types.register(PARTICLE_PT_custom_props)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -48,6 +49,10 @@ class SCENE_PT_scene(SceneButtonsPanel):
layout.prop(scene, "set", text="")
class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel):
_context_path = "scene"
class SCENE_PT_unit(SceneButtonsPanel):
bl_label = "Units"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -178,3 +183,6 @@ bpy.types.register(SCENE_PT_unit)
bpy.types.register(SCENE_PT_keying_sets)
bpy.types.register(SCENE_PT_keying_set_paths)
bpy.types.register(SCENE_PT_physics)
bpy.types.register(SCENE_PT_custom_props)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -149,6 +150,13 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel):
layout.prop(tex, "type", text="")
class TEXTURE_PT_custom_props(TextureButtonsPanel, PropertyPanel):
_context_path = "texture"
def poll(self, context): # use alternate poll since NONE texture type is ok
return context.texture
class TEXTURE_PT_colors(TextureButtonsPanel):
bl_label = "Colors"
bl_default_closed = True
@@ -976,3 +984,5 @@ bpy.types.register(TEXTURE_PT_pointdensity_turbulence)
bpy.types.register(TEXTURE_PT_colors)
bpy.types.register(TEXTURE_PT_mapping)
bpy.types.register(TEXTURE_PT_influence)
bpy.types.register(TEXTURE_PT_custom_props)

View File

@@ -18,6 +18,7 @@
# <pep8 compliant>
import bpy
from rna_prop_ui import PropertyPanel
narrowui = 180
@@ -69,6 +70,10 @@ class WORLD_PT_context_world(WorldButtonsPanel):
layout.template_ID(scene, "world", new="world.new")
class WORLD_PT_custom_props(WorldButtonsPanel, PropertyPanel):
_context_path = "world"
class WORLD_PT_world(WorldButtonsPanel):
bl_label = "World"
COMPAT_ENGINES = {'BLENDER_RENDER'}
@@ -232,3 +237,5 @@ 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_custom_props)