Tool System: use categories for tool identifiers

Tools that come with Blender use 'builtin' or 'builtin_brush' prefix.
This commit is contained in:
Campbell Barton 2019-03-15 14:18:21 +11:00
parent 3400fe3ece
commit d4156b46d7
9 changed files with 131 additions and 112 deletions

@ -68,7 +68,7 @@ def generate(context, space_type):
# a shortcut based workflow (before the tool system was added).
use_tap_reset = True
# TODO: support other tools for modes which don't use this tool.
tap_reset_tool = "Cursor"
tap_reset_tool = "builtin.cursor"
# Check the tool is available in the current context.
if tap_reset_tool not in items_all_id:
use_tap_reset = False
@ -317,7 +317,7 @@ def generate(context, space_type):
# -------------------------------------------------------------------------
# Assign A-Z to Keys
#
# When th keys are free.
# When the keys are free.
if use_auto_keymap_alpha:
# Map all unmapped keys to numbers,

@ -5029,9 +5029,9 @@ def km_popup_toolbar(_params):
"Toolbar Popup",
{"space_type": 'EMPTY', "region_type": 'TEMPORARY'},
{"items": [
op_tool("Select", {"type": 'W', "value": 'PRESS'}),
op_tool("Transform", {"type": 'T', "value": 'PRESS'}),
op_tool("Measure", {"type": 'M', "value": 'PRESS'}),
op_tool("builtin.select", {"type": 'W', "value": 'PRESS'}),
op_tool("builtin.transform", {"type": 'T', "value": 'PRESS'}),
op_tool("builtin.measure", {"type": 'M', "value": 'PRESS'}),
]},
)

@ -39,6 +39,7 @@ def kmi_to_string_or_none(kmi):
def generate_from_enum_ex(
context, *,
idname_prefix,
icon_prefix,
type,
attr,
@ -51,7 +52,7 @@ def generate_from_enum_ex(
tool_defs.append(
ToolDef.from_dict(
dict(
idname=name,
idname=idname_prefix + name,
label=name,
icon=icon_prefix + idname.lower(),
data_block=idname,
@ -86,7 +87,7 @@ class _defs_view3d_generic:
layout.prop(props, "use_depth")
layout.prop(props, "orientation")
return dict(
idname="Cursor",
idname="builtin.cursor",
label="Cursor",
description=(
"Set the cursor location, drag to transform"
@ -99,7 +100,7 @@ class _defs_view3d_generic:
@ToolDef.from_fn
def cursor_click():
return dict(
idname="None",
idname="builtin.none",
label="None",
icon="ops.generic.cursor",
keymap=(),
@ -126,7 +127,7 @@ class _defs_view3d_generic:
kmi_to_string_or_none(kmi_remove),
)
return dict(
idname="Measure",
idname="builtin.measure",
label="Measure",
description=description,
icon="ops.view3d.ruler",
@ -179,7 +180,7 @@ class _defs_annotate:
@ToolDef.from_fn.with_args(draw_settings=draw_settings_common)
def scribble(*, draw_settings):
return dict(
idname="Annotate",
idname="builtin.annotate",
label="Annotate",
icon="ops.gpencil.draw",
cursor='PAINT_BRUSH',
@ -190,7 +191,7 @@ class _defs_annotate:
@ToolDef.from_fn.with_args(draw_settings=draw_settings_common)
def line(*, draw_settings):
return dict(
idname="Annotate Line",
idname="builtin.annotate_line",
label="Annotate Line",
icon="ops.gpencil.draw.line",
cursor='CROSSHAIR',
@ -201,7 +202,7 @@ class _defs_annotate:
@ToolDef.from_fn.with_args(draw_settings=draw_settings_common)
def poly(*, draw_settings):
return dict(
idname="Annotate Polygon",
idname="builtin.annotate_polygon",
label="Annotate Polygon",
icon="ops.gpencil.draw.poly",
cursor='CROSSHAIR',
@ -216,7 +217,7 @@ class _defs_annotate:
prefs = context.preferences
layout.prop(prefs.edit, "grease_pencil_eraser_radius", text="Radius")
return dict(
idname="Annotate Eraser",
idname="builtin.annotate_eraser",
label="Annotate Eraser",
icon="ops.gpencil.draw.eraser",
cursor='CROSSHAIR', # XXX: Always show brush circle when enabled
@ -232,7 +233,7 @@ class _defs_transform:
def draw_settings(context, layout, tool):
_template_widget.TRANSFORM_GGT_gizmo.draw_settings_with_index(context, layout, 1)
return dict(
idname="Move",
idname="builtin.move",
label="Move",
# cursor='SCROLL_XY',
icon="ops.transform.translate",
@ -247,7 +248,7 @@ class _defs_transform:
def draw_settings(context, layout, tool):
_template_widget.TRANSFORM_GGT_gizmo.draw_settings_with_index(context, layout, 2)
return dict(
idname="Rotate",
idname="builtin.rotate",
label="Rotate",
# cursor='SCROLL_XY',
icon="ops.transform.rotate",
@ -262,7 +263,7 @@ class _defs_transform:
def draw_settings(context, layout, tool):
_template_widget.TRANSFORM_GGT_gizmo.draw_settings_with_index(context, layout, 3)
return dict(
idname="Scale",
idname="builtin.scale",
label="Scale",
# cursor='SCROLL_XY',
icon="ops.transform.resize",
@ -277,7 +278,7 @@ class _defs_transform:
def draw_settings(context, layout, tool):
_template_widget.TRANSFORM_GGT_gizmo.draw_settings_with_index(context, layout, 3)
return dict(
idname="Scale Cage",
idname="builtin.scale_cage",
label="Scale Cage",
icon="ops.transform.resize.cage",
widget="VIEW3D_GGT_xform_cage",
@ -299,7 +300,7 @@ class _defs_transform:
_template_widget.TRANSFORM_GGT_gizmo.draw_settings_with_index(context, layout, 1)
return dict(
idname="Transform",
idname="builtin.transform",
label="Transform",
description=(
"Supports any combination of grab, rotate & scale at once"
@ -318,7 +319,7 @@ class _defs_view3d_select:
def draw_settings(context, layout, tool):
pass
return dict(
idname="Select",
idname="builtin.select",
label="Select",
icon="ops.generic.select",
widget=None,
@ -332,7 +333,7 @@ class _defs_view3d_select:
props = tool.operator_properties("view3d.select_box")
layout.prop(props, "mode", expand=True)
return dict(
idname="Select Box",
idname="builtin.select_box",
label="Select Box",
icon="ops.generic.select_box",
widget=None,
@ -346,7 +347,7 @@ class _defs_view3d_select:
props = tool.operator_properties("view3d.select_lasso")
layout.prop(props, "mode", expand=True)
return dict(
idname="Select Lasso",
idname="builtin.select_lasso",
label="Select Lasso",
icon="ops.generic.select_lasso",
widget=None,
@ -368,7 +369,7 @@ class _defs_view3d_select:
draw_circle_2d(xy, (1.0,) * 4, radius, 32)
return dict(
idname="Select Circle",
idname="builtin.select_circle",
label="Select Circle",
icon="ops.generic.select_circle",
widget=None,
@ -387,7 +388,7 @@ class _defs_edit_armature:
@ToolDef.from_fn
def roll():
return dict(
idname="Roll",
idname="builtin.roll",
label="Roll",
icon="ops.armature.bone.roll",
widget=None,
@ -397,7 +398,7 @@ class _defs_edit_armature:
@ToolDef.from_fn
def bone_envelope():
return dict(
idname="Bone Envelope",
idname="builtin.bone_envelope",
label="Bone Envelope",
icon="ops.transform.bone_envelope",
widget=None,
@ -407,7 +408,7 @@ class _defs_edit_armature:
@ToolDef.from_fn
def bone_size():
return dict(
idname="Bone Size",
idname="builtin.bone_size",
label="Bone Size",
icon="ops.transform.bone_size",
widget=None,
@ -417,7 +418,7 @@ class _defs_edit_armature:
@ToolDef.from_fn
def extrude():
return dict(
idname="Extrude",
idname="builtin.extrude",
label="Extrude",
icon="ops.armature.extrude_move",
widget="VIEW3D_GGT_xform_extrude",
@ -428,7 +429,7 @@ class _defs_edit_armature:
@ToolDef.from_fn
def extrude_cursor():
return dict(
idname="Extrude to Cursor",
idname="builtin.extrude_to_cursor",
label="Extrude to Cursor",
icon="ops.armature.extrude_cursor",
widget=None,
@ -441,7 +442,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def cube_add():
return dict(
idname="Add Cube",
idname="builtin.add_cube",
label="Add Cube",
icon="ops.mesh.primitive_cube_add_gizmo",
description=(
@ -459,7 +460,7 @@ class _defs_edit_mesh:
layout.prop(props_macro, "use_fill")
return dict(
idname="Rip Region",
idname="builtin.rip_region",
label="Rip Region",
icon="ops.mesh.rip",
widget=None,
@ -470,7 +471,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def rip_edge():
return dict(
idname="Rip Edge",
idname="builtin.rip_edge",
label="Rip Edge",
icon="ops.mesh.rip_edge",
widget=None,
@ -480,7 +481,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def poly_build():
return dict(
idname="Poly Build",
idname="builtin.poly_build",
label="Poly Build",
icon="ops.mesh.polybuild_hover",
widget="VIEW3D_GGT_mesh_preselect_elem",
@ -494,7 +495,7 @@ class _defs_edit_mesh:
layout.prop(props, "correct_uv")
return dict(
idname="Edge Slide",
idname="builtin.edge_slide",
label="Edge Slide",
icon="ops.transform.edge_slide",
widget=None,
@ -509,7 +510,7 @@ class _defs_edit_mesh:
layout.prop(props, "correct_uv")
return dict(
idname="Vertex Slide",
idname="builtin.vertex_slide",
label="Vertex Slide",
icon="ops.transform.vert_slide",
widget=None,
@ -526,7 +527,7 @@ class _defs_edit_mesh:
layout.prop(props, "axis")
return dict(
idname="Spin",
idname="builtin.spin",
label="Spin",
icon="ops.mesh.spin",
widget="MESH_GGT_spin",
@ -543,7 +544,7 @@ class _defs_edit_mesh:
layout.prop(props, "axis")
return dict(
idname="Spin Duplicates",
idname="builtin.spin_duplicates",
label="Spin Duplicates",
icon="ops.mesh.spin.duplicate",
widget="MESH_GGT_spin",
@ -561,7 +562,7 @@ class _defs_edit_mesh:
layout.prop(props, "use_relative_offset")
return dict(
idname="Inset Faces",
idname="builtin.inset_faces",
label="Inset Faces",
icon="ops.mesh.inset",
widget=None,
@ -579,7 +580,7 @@ class _defs_edit_mesh:
layout.prop(props, "vertex_only")
return dict(
idname="Bevel",
idname="builtin.bevel",
label="Bevel",
icon="ops.mesh.bevel",
widget=None,
@ -590,7 +591,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def extrude():
return dict(
idname="Extrude Region",
idname="builtin.extrude_region",
label="Extrude Region",
# The operator description isn't useful in this case, give our own.
description=(
@ -611,7 +612,7 @@ class _defs_edit_mesh:
props_macro = props.TRANSFORM_OT_shrink_fatten
layout.prop(props_macro, "use_even_offset")
return dict(
idname="Extrude Along Normals",
idname="builtin.extrude_along_normals",
label="Extrude Along Normals",
icon="ops.mesh.extrude_region_shrink_fatten",
widget=None,
@ -623,7 +624,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def extrude_individual():
return dict(
idname="Extrude Individual",
idname="builtin.extrude_individual",
label="Extrude Individual",
icon="ops.mesh.extrude_faces_move",
widget=None,
@ -637,7 +638,7 @@ class _defs_edit_mesh:
layout.prop(props, "rotate_source")
return dict(
idname="Extrude to Cursor",
idname="builtin.extrude_to_cursor",
label="Extrude to Cursor",
icon="ops.mesh.dupli_extrude_cursor",
widget=None,
@ -656,7 +657,7 @@ class _defs_edit_mesh:
layout.prop(props_macro, "correct_uv")
return dict(
idname="Loop Cut",
idname="builtin.loop_cut",
label="Loop Cut",
icon="ops.mesh.loopcut_slide",
widget="VIEW3D_GGT_mesh_preselect_edgering",
@ -667,7 +668,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def offset_edge_loops_slide():
return dict(
idname="Offset Edge Loop Cut",
idname="builtin.offset_edge_loop_cut",
label="Offset Edge Loop Cut",
icon="ops.mesh.offset_edge_loops_slide",
widget=None,
@ -680,7 +681,7 @@ class _defs_edit_mesh:
props = tool.operator_properties("mesh.vertices_smooth")
layout.prop(props, "repeat")
return dict(
idname="Smooth",
idname="builtin.smooth",
label="Smooth",
icon="ops.mesh.vertices_smooth",
widget="WM_GGT_value_operator_redo",
@ -696,7 +697,7 @@ class _defs_edit_mesh:
layout.prop(props, "normal")
layout.prop(props, "seed")
return dict(
idname="Randomize",
idname="builtin.randomize",
label="Randomize",
icon="ops.transform.vertex_random",
widget="WM_GGT_value_operator_redo",
@ -712,7 +713,7 @@ class _defs_edit_mesh:
layout.prop(props, "shear_axis", expand=True)
_template_widget.TRANSFORM_GGT_gizmo.draw_settings_with_index(context, layout, 2)
return dict(
idname="Shear",
idname="builtin.shear",
label="Shear",
icon="ops.transform.shear",
widget="VIEW3D_GGT_xform_shear",
@ -723,7 +724,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def tosphere():
return dict(
idname="To Sphere",
idname="builtin.to_sphere",
label="To Sphere",
icon="ops.transform.tosphere",
widget=None,
@ -737,7 +738,7 @@ class _defs_edit_mesh:
layout.prop(props, "use_even_offset")
return dict(
idname="Shrink/Fatten",
idname="builtin.shrink_fatten",
label="Shrink/Fatten",
icon="ops.transform.shrink_fatten",
widget=None,
@ -748,7 +749,7 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def push_pull():
return dict(
idname="Push/Pull",
idname="builtin.push_pull",
label="Push/Pull",
icon="ops.transform.push_pull",
widget=None,
@ -763,7 +764,7 @@ class _defs_edit_mesh:
layout.prop(props, "only_selected")
return dict(
idname="Knife",
idname="builtin.knife",
label="Knife",
icon="ops.mesh.knife_tool",
widget=None,
@ -780,7 +781,7 @@ class _defs_edit_mesh:
layout.prop(props, "clear_outer")
layout.prop(props, "threshold")
return dict(
idname="Bisect",
idname="builtin.bisect",
label="Bisect",
icon="ops.mesh.bisect",
widget=None,
@ -812,7 +813,7 @@ class _defs_edit_curve:
col.prop(cps, "corner_angle")
return dict(
idname="Draw",
idname="builtin.draw",
label="Draw",
cursor='PAINT_BRUSH',
icon="ops.curve.draw",
@ -824,7 +825,7 @@ class _defs_edit_curve:
@ToolDef.from_fn
def extrude():
return dict(
idname="Extrude",
idname="builtin.extrude",
label="Extrude",
icon="ops.curve.extrude_move",
widget="VIEW3D_GGT_xform_extrude",
@ -835,7 +836,7 @@ class _defs_edit_curve:
@ToolDef.from_fn
def extrude_cursor():
return dict(
idname="Extrude Cursor",
idname="builtin.extrude_cursor",
label="Extrude Cursor",
icon="ops.curve.extrude_cursor",
widget=None,
@ -845,7 +846,7 @@ class _defs_edit_curve:
@ToolDef.from_fn
def tilt():
return dict(
idname="Tilt",
idname="builtin.tilt",
label="Tilt",
icon="ops.transform.tilt",
widget=None,
@ -855,7 +856,7 @@ class _defs_edit_curve:
@ToolDef.from_fn
def curve_radius():
return dict(
idname="Radius",
idname="builtin.radius",
label="Radius",
description=(
"Expand or contract the radius of the selected curve points"
@ -873,7 +874,7 @@ class _defs_edit_curve:
layout.prop(props, "normal")
layout.prop(props, "seed")
return dict(
idname="Randomize",
idname="builtin.randomize",
label="Randomize",
icon="ops.curve.vertex_random",
widget="WM_GGT_value_operator_redo",
@ -887,7 +888,7 @@ class _defs_pose:
@ToolDef.from_fn
def breakdown():
return dict(
idname="Breakdowner",
idname="builtin.breakdowner",
label="Breakdowner",
icon="ops.pose.breakdowner",
widget=None,
@ -897,7 +898,7 @@ class _defs_pose:
@ToolDef.from_fn
def push():
return dict(
idname="Push",
idname="builtin.push",
label="Push",
icon="ops.pose.push",
widget=None,
@ -907,7 +908,7 @@ class _defs_pose:
@ToolDef.from_fn
def relax():
return dict(
idname="Relax",
idname="builtin.relax",
label="Relax",
icon="ops.pose.relax",
widget=None,
@ -921,6 +922,7 @@ class _defs_particle:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.particle.",
type=bpy.types.ParticleEdit,
attr="tool",
@ -933,6 +935,7 @@ class _defs_sculpt:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.sculpt.",
type=bpy.types.Brush,
attr="sculpt_tool",
@ -941,7 +944,7 @@ class _defs_sculpt:
@ToolDef.from_fn
def hide_border():
return dict(
idname="Box Hide",
idname="builtin.box_hide",
label="Box Hide",
icon="ops.sculpt.border_hide",
widget=None,
@ -951,7 +954,7 @@ class _defs_sculpt:
@ToolDef.from_fn
def mask_border():
return dict(
idname="Box Mask",
idname="builtin.box_mask",
label="Box Mask",
icon="ops.sculpt.border_mask",
widget=None,
@ -972,6 +975,7 @@ class _defs_vertex_paint:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.paint_vertex.",
type=bpy.types.Brush,
attr="vertex_tool",
@ -990,6 +994,7 @@ class _defs_texture_paint:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.paint_texture.",
type=bpy.types.Brush,
attr="image_tool",
@ -1009,6 +1014,7 @@ class _defs_weight_paint:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.paint_weight.",
type=bpy.types.Brush,
attr="weight_tool",
@ -1017,7 +1023,7 @@ class _defs_weight_paint:
@ToolDef.from_fn
def sample_weight():
return dict(
idname="Sample Weight",
idname="builtin.sample_weight",
label="Sample Weight",
icon="ops.paint.weight_sample",
widget=None,
@ -1027,7 +1033,7 @@ class _defs_weight_paint:
@ToolDef.from_fn
def sample_weight_group():
return dict(
idname="Sample Vertex Group",
idname="builtin.sample_vertex_group",
label="Sample Vertex Group",
icon="ops.paint.weight_sample_group",
widget=None,
@ -1046,7 +1052,7 @@ class _defs_weight_paint:
layout.prop(props, "type")
return dict(
idname="Gradient",
idname="builtin.gradient",
label="Gradient",
icon="ops.paint.weight_gradient",
widget=None,
@ -1069,7 +1075,7 @@ class _defs_image_generic:
@ToolDef.from_fn
def cursor():
return dict(
idname="Cursor",
idname="builtin.cursor",
label="Cursor",
description=(
"Set the cursor location, drag to transform"
@ -1086,7 +1092,7 @@ class _defs_image_generic:
props = tool.operator_properties("image.sample")
layout.prop(props, "size")
return dict(
idname="Sample",
idname="builtin.sample",
label="Sample",
description=(
"Sample pixel values under the cursor"
@ -1102,7 +1108,7 @@ class _defs_image_uv_transform:
@ToolDef.from_fn
def transform():
return dict(
idname="Transform",
idname="builtin.transform",
label="Transform",
description=(
"Supports any combination of grab, rotate & scale at once"
@ -1120,7 +1126,7 @@ class _defs_image_uv_select:
def draw_settings(context, layout, tool):
pass
return dict(
idname="Select",
idname="builtin.select",
label="Select",
icon="ops.generic.select",
widget=None,
@ -1134,7 +1140,7 @@ class _defs_image_uv_select:
props = tool.operator_properties("uv.select_box")
layout.prop(props, "mode", expand=True)
return dict(
idname="Select Box",
idname="builtin.select_box",
label="Select Box",
icon="ops.generic.select_box",
widget=None,
@ -1148,7 +1154,7 @@ class _defs_image_uv_select:
props = tool.operator_properties("uv.select_lasso")
layout.prop(props, "mode", expand=True)
return dict(
idname="Select Lasso",
idname="builtin.select_lasso",
label="Select Lasso",
icon="ops.generic.select_lasso",
widget=None,
@ -1163,7 +1169,7 @@ class _defs_image_uv_select:
layout.prop(props, "mode", expand=True)
layout.prop(props, "radius")
return dict(
idname="Select Circle",
idname="builtin.select_circle",
label="Select Circle",
icon="ops.generic.select_circle",
widget=None,
@ -1178,6 +1184,7 @@ class _defs_image_uv_sculpt:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.uv_sculpt.",
type=bpy.types.ToolSettings,
attr="uv_sculpt_tool",
@ -1190,6 +1197,7 @@ class _defs_gpencil_paint:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="brush.gpencil_draw.",
type=bpy.types.Brush,
attr="gpencil_tool",
@ -1201,7 +1209,7 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def cutter():
return dict(
idname="Cutter",
idname="builtin.cutter",
label="Cutter",
icon="ops.gpencil.stroke_cutter",
cursor='KNIFE',
@ -1212,7 +1220,7 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def line():
return dict(
idname="Line",
idname="builtin.line",
label="Line",
icon="ops.gpencil.primitive_line",
cursor='CROSSHAIR',
@ -1223,7 +1231,7 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def box():
return dict(
idname="Box",
idname="builtin.box",
label="Box",
icon="ops.gpencil.primitive_box",
cursor='CROSSHAIR',
@ -1234,7 +1242,7 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def circle():
return dict(
idname="Circle",
idname="builtin.circle",
label="Circle",
icon="ops.gpencil.primitive_circle",
cursor='CROSSHAIR',
@ -1245,7 +1253,7 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def arc():
return dict(
idname="Arc",
idname="builtin.arc",
label="Arc",
icon="ops.gpencil.primitive_arc",
cursor='CROSSHAIR',
@ -1256,7 +1264,7 @@ class _defs_gpencil_paint:
@ToolDef.from_fn
def curve():
return dict(
idname="Curve",
idname="builtin.curve",
label="Curve",
icon="ops.gpencil.primitive_curve",
cursor='CROSSHAIR',
@ -1269,7 +1277,7 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def bend():
return dict(
idname="Bend",
idname="builtin.bend",
label="Bend",
icon="ops.gpencil.edit_bend",
widget=None,
@ -1281,7 +1289,7 @@ class _defs_gpencil_edit:
def draw_settings(context, layout, tool):
layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
idname="Select",
idname="builtin.select",
label="Select",
icon="ops.generic.select",
widget=None,
@ -1296,7 +1304,7 @@ class _defs_gpencil_edit:
layout.prop(props, "mode", expand=True)
layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
idname="Select Box",
idname="builtin.select_box",
label="Select Box",
icon="ops.generic.select_box",
widget=None,
@ -1311,7 +1319,7 @@ class _defs_gpencil_edit:
layout.prop(props, "mode", expand=True)
layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
idname="Select Lasso",
idname="builtin.select_lasso",
label="Select Lasso",
icon="ops.generic.select_lasso",
widget=None,
@ -1327,7 +1335,7 @@ class _defs_gpencil_edit:
layout.prop(props, "radius")
layout.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold")
return dict(
idname="Select Circle",
idname="builtin.select_circle",
label="Select Circle",
icon="ops.generic.select_circle",
widget=None,
@ -1338,7 +1346,7 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def radius():
return dict(
idname="Radius",
idname="builtin.radius",
label="Radius",
description=(
"Expand or contract the radius of the selected points"
@ -1352,7 +1360,7 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def shear():
return dict(
idname="Shear",
idname="builtin.shear",
label="Shear",
icon="ops.gpencil.edit_shear",
widget=None,
@ -1362,7 +1370,7 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def tosphere():
return dict(
idname="To Sphere",
idname="builtin.to_sphere",
label="To Sphere",
icon="ops.transform.tosphere",
widget=None,
@ -1372,7 +1380,7 @@ class _defs_gpencil_edit:
@ToolDef.from_fn
def extrude():
return dict(
idname="Extrude",
idname="builtin.extrude",
label="Extrude",
icon="ops.gpencil.extrude_move",
widget="VIEW3D_GGT_xform_extrude",
@ -1387,6 +1395,7 @@ class _defs_gpencil_sculpt:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="ops.gpencil.sculpt_",
type=bpy.types.GPencilSculptSettings,
attr="sculpt_tool",
@ -1399,6 +1408,7 @@ class _defs_gpencil_weight:
def generate_from_brushes(context):
return generate_from_enum_ex(
context,
idname_prefix="builtin_brush.",
icon_prefix="ops.gpencil.sculpt_",
type=bpy.types.GPencilSculptSettings,
attr="weight_tool",
@ -1412,7 +1422,7 @@ class _defs_node_select:
def draw_settings(context, layout, tool):
pass
return dict(
idname="Select",
idname="builtin.select",
label="Select",
icon="ops.generic.select",
widget=None,
@ -1427,7 +1437,7 @@ class _defs_node_select:
layout.prop(props, "mode", expand=True)
pass
return dict(
idname="Select Box",
idname="builtin.select_box",
label="Select Box",
icon="ops.generic.select_box",
widget=None,
@ -1441,7 +1451,7 @@ class _defs_node_select:
props = tool.operator_properties("node.select_lasso")
layout.prop(props, "mode", expand=True)
return dict(
idname="Select Lasso",
idname="builtin.select_lasso",
label="Select Lasso",
icon="ops.generic.select_lasso",
widget=None,
@ -1456,7 +1466,7 @@ class _defs_node_select:
layout.prop(props, "mode", expand=True)
layout.prop(props, "radius")
return dict(
idname="Select Circle",
idname="builtin.select_circle",
label="Select Circle",
icon="ops.generic.select_circle",
widget=None,
@ -1470,7 +1480,7 @@ class _defs_node_edit:
@ToolDef.from_fn
def links_cut():
return dict(
idname="Links Cut",
idname="builtin.links_cut",
label="Links Cut",
icon="ops.node.links_cut",
widget=None,

@ -296,7 +296,7 @@ class _draw_left_context_mode:
is_paint = True
# FIXME: tools must use their own UI drawing!
if tool.idname in {"Line", "Box", "Circle", "Arc", "Curve"}:
if tool.idname in {"builtin.line", "builtin.box", "builtin.circle", "builtin.arc", "builtin.curve"}:
is_paint = False
elif tool.idname == "Cutter":
row = layout.row(align=True)
@ -351,7 +351,7 @@ class _draw_left_context_mode:
brush_basic_gpencil_paint_settings(layout, context, brush, compact=True)
# FIXME: tools must use their own UI drawing!
if tool.idname in {"Arc", "Curve", "Line", "Box", "Circle"}:
if tool.idname in {"builtin.arc", "builtin.curve", "builtin.line", "builtin.box", "builtin.circle"}:
settings = context.tool_settings.gpencil_sculpt
row = layout.row(align=True)
row.prop(settings, "use_thickness_curve", text="", icon='CURVE_DATA')

@ -257,7 +257,7 @@ class VIEW3D_HT_header(Header):
if object_mode == 'PAINT_GPENCIL':
# FIXME: this is bad practice!
# Tool options are to be displayed in the topbar.
if context.workspace.tools.from_space_view3d_mode(object_mode).idname == "Draw":
if context.workspace.tools.from_space_view3d_mode(object_mode).idname == "builtin.draw":
settings = tool_settings.gpencil_sculpt.guide
row = layout.row(align=True)
row.prop(settings, "use_guide", text="", icon='GRID')

@ -24,7 +24,7 @@
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 280
#define BLENDER_SUBVERSION 48
#define BLENDER_SUBVERSION 49
/* Several breakages with 280, e.g. collections vs layers */
#define BLENDER_MINVERSION 280
#define BLENDER_MINSUBVERSION 0

@ -2893,6 +2893,15 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
if (!MAIN_VERSION_ATLEAST(bmain, 280, 49)) {
/* All tool names changed, reset to defaults. */
for (WorkSpace *workspace = bmain->workspaces.first; workspace; workspace = workspace->id.next) {
while (!BLI_listbase_is_empty(&workspace->tools)) {
BKE_workspace_tool_remove(workspace, workspace->tools.first);
}
}
}
{
/* Versioning code until next subversion bump goes here. */
}

@ -1620,18 +1620,18 @@ static void WIDGETGROUP_gizmo_setup(const bContext *C, wmGizmoGroup *gzgroup)
ScrArea *sa = CTX_wm_area(C);
const bToolRef *tref = sa->runtime.tool;
if (tref == NULL || STREQ(tref->idname, "Transform")) {
if (tref == NULL || STREQ(tref->idname, "builtin.transform")) {
/* Setup all gizmos, they can be toggled via 'ToolSettings.gizmo_flag' */
ggd->twtype = SCE_GIZMO_SHOW_TRANSLATE | SCE_GIZMO_SHOW_ROTATE | SCE_GIZMO_SHOW_SCALE;
ggd->use_twtype_refresh = true;
}
else if (STREQ(tref->idname, "Move")) {
else if (STREQ(tref->idname, "builtin.move")) {
ggd->twtype |= SCE_GIZMO_SHOW_TRANSLATE;
}
else if (STREQ(tref->idname, "Rotate")) {
else if (STREQ(tref->idname, "builtin.rotate")) {
ggd->twtype |= SCE_GIZMO_SHOW_ROTATE;
}
else if (STREQ(tref->idname, "Scale")) {
else if (STREQ(tref->idname, "builtin.scale")) {
ggd->twtype |= SCE_GIZMO_SHOW_SCALE;
}
BLI_assert(ggd->twtype != 0);

@ -475,7 +475,7 @@ void WM_toolsystem_ref_sync_from_context(
const EnumPropertyItem *item = &items[i];
if (!STREQ(tref_rt->data_block, item->identifier)) {
STRNCPY(tref_rt->data_block, item->identifier);
STRNCPY(tref->idname, item->name);
SNPRINTF(tref->idname, "builtin_brush.%s", item->name);
}
}
}
@ -488,7 +488,7 @@ void WM_toolsystem_ref_sync_from_context(
const EnumPropertyItem *item = &items[i];
if (!STREQ(tref_rt->data_block, item->identifier)) {
STRNCPY(tref_rt->data_block, item->identifier);
STRNCPY(tref->idname, item->name);
SNPRINTF(tref->idname, "builtin_brush.%s", item->name);
}
}
}
@ -501,7 +501,7 @@ void WM_toolsystem_ref_sync_from_context(
const EnumPropertyItem *item = &items[i];
if (!STREQ(tref_rt->data_block, item->identifier)) {
STRNCPY(tref_rt->data_block, item->identifier);
STRNCPY(tref->idname, item->name);
SNPRINTF(tref->idname, "builtin_brush.%s", item->name);
}
}
}
@ -514,7 +514,7 @@ void WM_toolsystem_ref_sync_from_context(
const EnumPropertyItem *item = &items[i];
if (!STREQ(tref_rt->data_block, item->identifier)) {
STRNCPY(tref_rt->data_block, item->identifier);
STRNCPY(tref->idname, item->name);
SNPRINTF(tref->idname, "builtin_brush.%s", item->name);
}
}
}
@ -532,7 +532,7 @@ void WM_toolsystem_ref_sync_from_context(
const char *identifier = items[i].identifier;
if (!STREQ(tref_rt->data_block, identifier)) {
STRNCPY(tref_rt->data_block, identifier);
STRNCPY(tref->idname, name);
SNPRINTF(tref->idname, "builtin_brush.%s", name);
}
}
}
@ -790,31 +790,31 @@ static const char *toolsystem_default_tool(const bToolKey *tkey)
case CTX_MODE_WEIGHT_GPENCIL:
case CTX_MODE_PAINT_TEXTURE:
case CTX_MODE_PAINT_GPENCIL:
return "Draw";
return "builtin_brush.Draw";
case CTX_MODE_SCULPT_GPENCIL:
return "Push";
return "builtin_brush.Push";
/* end temporary hack. */
case CTX_MODE_PARTICLE:
return "Comb";
return "builtin_brush.Comb";
case CTX_MODE_EDIT_TEXT:
return "Cursor";
return "builtin.cursor";
}
break;
case SPACE_IMAGE:
switch (tkey->mode) {
case SI_MODE_PAINT:
return "Draw";
return "builtin_brush.draw";
}
break;
case SPACE_NODE:
{
/* 'Select Box' interferes with cut-links which is handy. */
return "Select";
return "builtin.select";
}
}
return "Select Box";
return "builtin.select_box";
}
/**