From BlenderWiki

Jump to: navigation, search
Note: This is an archived version of the Blender Developer Wiki. The current and active wiki is available on wiki.blender.org.

13.03.12 bl_context and poll

http://www.blender.org/documentation/blender_python_api_2_62_0/bpy.types.Panel.html

I did this with the bl_space_type 'VIEW_3D'.

This is a header for a Panel type.

class bpy.types.Panel(bpy_struct):
    bl_space_type = 'VIEW_3D'                   # Space Type: 'VIEW_3D'
    bl_region_type = 'TOOLS'                    # Region Type: 'TOOLS', 'UI'
    bl_context = 'objectmode'                   # 'TOOLS' 3D View Mode: 'objectmode', 'mesh_edit'
    bl_label = 'Tools'                          # Panel Name: 'Tools', 'My Panel'
    
    @classmethod
    def poll(cls, context):                     # poll
        return ((context.mode == 'OBJECT'))	# 'UI' 3D View Mode: 'OBJECT', 'EDIT_MESH'

Before the Panel is drawn, it has methods to check if the context is correct.

DRAW_PANELS:
	if poll():                              # (context.mode == 'EDIT_MESH')
		DRAW_PANEL()

The "Tools" Region 'TOOLS' uses bl_context.

The "Properties" Region 'UI' uses the return of poll:

    bl_context
        'objectmode'
        'mesh_edit'
        'armature_edit'
        'posemode'
        
    bpy.context.mode
        'OBJECT'
        'EDIT_MESH'
        'EDIT_ARMATURE'
        'POSE'
        
// source\blender\blenkernel\intern\context.c
static const char *data_mode_strings[] = {
	"mesh_edit",
	"curve_edit",
	"surface_edit",
	"text_edit",
	"armature_edit",
	"mball_edit",
	"lattice_edit",
	"posemode",
	"sculpt_mode",
	"weightpaint",
	"vertexpaint",
	"imagepaint",
	"particlemode",
	"objectmode",
	NULL
};
// source\blender\makesrna\intern\rna_context.c
	static EnumPropertyItem mode_items[] = {
		{CTX_MODE_EDIT_MESH, "EDIT_MESH", 0, "Mesh Edit", ""},
		{CTX_MODE_EDIT_CURVE, "EDIT_CURVE", 0, "Curve Edit", ""},
		{CTX_MODE_EDIT_SURFACE, "EDIT_SURFACE", 0, "Surface Edit", ""},
		{CTX_MODE_EDIT_TEXT, "EDIT_TEXT", 0, "Edit Edit", ""},
		{CTX_MODE_EDIT_ARMATURE, "EDIT_ARMATURE", 0, "Armature Edit", ""}, /* PARSKEL reuse will give issues */
		{CTX_MODE_EDIT_METABALL, "EDIT_METABALL", 0, "Metaball Edit", ""},
		{CTX_MODE_EDIT_LATTICE, "EDIT_LATTICE", 0, "Lattice Edit", ""},
		{CTX_MODE_POSE, "POSE", 0, "Pose ", ""},
		{CTX_MODE_SCULPT, "SCULPT", 0, "Sculpt", ""},
		{CTX_MODE_PAINT_WEIGHT, "PAINT_WEIGHT", 0, "Weight Paint", ""},
		{CTX_MODE_PAINT_VERTEX, "PAINT_VERTEX", 0, "Vertex Paint", ""},
		{CTX_MODE_PAINT_TEXTURE, "PAINT_TEXTURE", 0, "Texture Paint", ""},
		{CTX_MODE_PARTICLE, "PARTICLE", 0, "Particle", ""},
		{CTX_MODE_OBJECT, "OBJECT", 0, "Object", ""},
		{0, NULL, 0, NULL, NULL}
	};
class bpy.types.Panel(bpy_struct)
	bl_context
		Type: string: "3D View Mode" default=""
			"mesh_edit"
			"curve_edit"
			"surface_edit"
			"text_edit"
			"armature_edit"
			"mball_edit"
			"lattice_edit"
			"posemode"
			"sculpt_mode"
			"weightpaint"
			"vertexpaint"
			"imagepaint"
			"particlemode"
			"objectmode"
			...
class bpy.types.Panel(bpy_struct)
	classmethod poll(context)
		Return type: boolean: "3D View Mode + custom"
			commen
			(context.mode == 'EDIT_MESH')
			(context.mode == 'EDIT_CURVE')
			(context.mode == 'EDIT_SURFACE')
			(context.mode == 'EDIT_TEXT')
			(context.mode == 'EDIT_ARMATURE')
			(context.mode == 'EDIT_METABALL')
			(context.mode == 'EDIT_LATTICE')
			(context.mode == 'POSE')
			(context.mode == 'SCULPT')
			(context.mode == 'PAINT_WEIGHT')
			(context.mode == 'PAINT_VERTEX')
			(context.mode == 'PAINT_TEXTURE')
			(context.mode == 'PARTICLE')
			(context.mode == 'OBJECT')
			(context.my_ex_panel == 4)
			...

bpy.data.screens['3D View Full'].areas[0].regions[2].type