Hi,
here is the paint part of my custom pie . hope it will help you.
It includes texture slots, palette and a little slot manager.
And like Craig Jones said, it was inspired from the texture paint plus.
pie radius must be set above 170 in blender preferences for good results.
# -*- coding: utf-8 -*-
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
################################################
# Paint #
################################################
elif bpy.context.area.type == 'VIEW_3D' and bpy.context.object.mode == 'TEXTURE_PAINT':
paint = context.tool_settings.image_paint
settings = context.tool_settings.image_paint
obj = context.active_object
mat = obj.active_material
#4 - Left
col = pie.column(align=True)
row=col.row(align=True)
row = col.row(align=True)
col.scale_x = 0.7
col.template_ID(settings, "palette", new="palette.new")
col.template_palette(settings, \
"palette", color=True)
#6 - Right
col = pie.split().column()
row = col.split(align=True)
row.operator("paint.brush_select", text="Draw", icon='BRUSH_TEXDRAW').texture_paint_tool='DRAW'
row.operator("paint.brush_select", text='Mask', icon='BRUSH_TEXMASK').texture_paint_tool='MASK'
row.operator("paint.brush_select", text='Clone', icon='BRUSH_CLONE').texture_paint_tool='CLONE'
row = col.row(align=True)
row = col.split(align=True)
row.operator("paint.brush_select", text='Soften', icon='BRUSH_SOFTEN').texture_paint_tool='SOFTEN'
row.operator("paint.brush_select", text="Fill", icon='BRUSH_TEXFILL').texture_paint_tool='FILL'
row.operator("paint.brush_select", text='Smear', icon='BRUSH_SMEAR').texture_paint_tool='SMEAR'
#2 - Bottom
col = pie.column(align=True)
col.label("Painting Mode")
col.prop(settings, "mode", text="")
col.scale_x=0.7
if settings.mode == 'MATERIAL' and hasattr(mat, "paint_active_slot"):
col.label("Paint Slots")
col.template_list("TEXTURE_UL_texpaintslots", "",
mat, "texture_paint_images",
mat, "paint_active_slot", rows=3)
elif settings.mode == 'IMAGE':
col.label("Canvas Image")
col.template_ID(settings, "canvas")
col.operator_menu_enum("paint.add_texture_paint_slot", "type")
col.operator("image.save_dirty", text="Save All Images")
col.operator("image.open", text="Open Image")
col.operator("import_image.brushset", text="Open Alpha Folder")
col.operator("uv.smart_project", text = "Smart Uv")
#8 - Top
ups = context.tool_settings.unified_paint_settings
paintbrush = context.tool_settings.image_paint.brush
col = pie.column(align=True)
row=col.row(align=True)
row.prop(ups, "size", text="Radius", slider=False)
row.prop(paintbrush, "use_pressure_size", text="")
row=col.row(align=True)
row.prop(paintbrush, "strength", slider=True)
row.prop(paintbrush, "use_pressure_strength", text="")
row = col.row(align=True)
row = col.split(align=True)
row.prop(paintbrush, "color",text="")
row.prop(paintbrush, "secondary_color", text="")
row.operator("paint.brush_colors_flip", icon='FILE_REFRESH', text="")
# - Top Left
col = pie.column(align=True)
row=col.row(align=True)
col.label(text="Symmetry:")
row=col.row(align=True)
row.prop(paint, "use_symmetry_x", text="X", toggle=True)
row.prop(paint, "use_symmetry_y", text="Y", toggle=True)
row.prop(paint, "use_symmetry_z", text="Z", toggle=True)
col.prop(paintbrush, "use_smooth_stroke")
col.prop(paintbrush, "smooth_stroke_radius", text="Radius", slider=True)
col.prop(paintbrush, "smooth_stroke_factor", text="Factor", slider=True)
#7 - Top Right
col = pie.column(align=True)
col.prop(paintbrush, "stroke_method", text="", icon='IPO_CONSTANT')
col.prop(paintbrush, "spacing", slider=True)
col.prop(paintbrush,"jitter", slider=True)
row = col.split(align=True)
col.prop(paintbrush, "blend", text="")
row.prop(paintbrush, "use_accumulate")
row.prop(paintbrush, "use_alpha")
#9 - Bottom Left
col = pie.column(align=True)
row = col.split(align=True)
col.scale_x=0.5
tex_slot = paintbrush.texture_slot
mask_tex_slot = paintbrush.mask_texture_slot
col.template_ID_preview(paintbrush, "texture", new="texture.new", rows=2, cols=2)
col.prop(tex_slot, "tex_paint_map_mode", text="")
row = col.row(align=True)
row.label(text="Brush Mapping")
# - Bottom Right
col = pie.column(align=True)
row = col.split(align=True)
col.scale_x=0.5
row = col.row(align=True)
col.template_ID_preview(paintbrush, "mask_texture", new="texture.new", rows=2, cols=2)
col.prop(mask_tex_slot, "mask_map_mode", text="")
row = col.row(align=True)
row.label(text="Mask Mapping")