Merge branch 'blender-v5.0-release'
This commit is contained in:
@@ -7,7 +7,7 @@ from __future__ import annotations
|
||||
import bpy
|
||||
import _cycles
|
||||
|
||||
from bpy.app.translations import pgettext_tip as tip_
|
||||
from bpy.app.translations import pgettext_rpt as rpt_
|
||||
|
||||
|
||||
def osl_compile(input_path, report):
|
||||
@@ -307,7 +307,7 @@ def update_script_node(node, report):
|
||||
sockets.remove(sockets[identifier])
|
||||
else:
|
||||
ok = False
|
||||
report({'ERROR'}, tip_("OSL query failed to open %s") % oso_path)
|
||||
report({'ERROR'}, rpt_("OSL query failed to open %s") % oso_path)
|
||||
else:
|
||||
report({'ERROR'}, "OSL script compilation failed, see console for errors")
|
||||
|
||||
@@ -359,7 +359,7 @@ def update_custom_camera_shader(cam, report):
|
||||
del custom_props[prop]
|
||||
else:
|
||||
ok = False
|
||||
report({'ERROR'}, tip_("OSL query failed to open %s") % oso_path)
|
||||
report({'ERROR'}, rpt_("OSL query failed to open %s") % oso_path)
|
||||
else:
|
||||
report({'ERROR'}, "Custom Camera shader compilation failed, see console for errors")
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ if "bpy" in locals():
|
||||
importlib.reload(fbx_utils)
|
||||
|
||||
import bpy
|
||||
from bpy.app.translations import pgettext_tip as tip_
|
||||
from bpy.app.translations import pgettext_rpt as rpt_
|
||||
from mathutils import Matrix, Euler, Vector, Quaternion
|
||||
from bpy_extras import anim_utils
|
||||
|
||||
@@ -3090,7 +3090,7 @@ def load(operator, context, filepath="",
|
||||
is_ascii = False
|
||||
|
||||
if is_ascii:
|
||||
operator.report({'ERROR'}, tip_("ASCII FBX files are not supported %r") % filepath)
|
||||
operator.report({'ERROR'}, rpt_("ASCII FBX files are not supported %r") % filepath)
|
||||
return {'CANCELLED'}
|
||||
del is_ascii
|
||||
# End ascii detection.
|
||||
@@ -3101,11 +3101,11 @@ def load(operator, context, filepath="",
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
operator.report({'ERROR'}, tip_("Couldn't open file %r (%s)") % (filepath, e))
|
||||
operator.report({'ERROR'}, rpt_("Couldn't open file %r (%s)") % (filepath, e))
|
||||
return {'CANCELLED'}
|
||||
|
||||
if version < 7100:
|
||||
operator.report({'ERROR'}, tip_("Version %r unsupported, must be %r or later") % (version, 7100))
|
||||
operator.report({'ERROR'}, rpt_("Version %r unsupported, must be %r or later") % (version, 7100))
|
||||
return {'CANCELLED'}
|
||||
|
||||
print("FBX version: %r" % version)
|
||||
@@ -3140,7 +3140,7 @@ def load(operator, context, filepath="",
|
||||
fbx_settings = elem_find_first(elem_root, b'GlobalSettings')
|
||||
fbx_settings_props = elem_find_first(fbx_settings, b'Properties70')
|
||||
if fbx_settings is None or fbx_settings_props is None:
|
||||
operator.report({'ERROR'}, tip_("No 'GlobalSettings' found in file %r") % filepath)
|
||||
operator.report({'ERROR'}, rpt_("No 'GlobalSettings' found in file %r") % filepath)
|
||||
return {'CANCELLED'}
|
||||
|
||||
# FBX default base unit seems to be the centimeter, while raw Blender Unit is equivalent to the meter...
|
||||
@@ -3207,10 +3207,10 @@ def load(operator, context, filepath="",
|
||||
fbx_connections = elem_find_first(elem_root, b'Connections')
|
||||
|
||||
if fbx_nodes is None:
|
||||
operator.report({'ERROR'}, tip_("No 'Objects' found in file %r") % filepath)
|
||||
operator.report({'ERROR'}, rpt_("No 'Objects' found in file %r") % filepath)
|
||||
return {'CANCELLED'}
|
||||
if fbx_connections is None:
|
||||
operator.report({'ERROR'}, tip_("No 'Connections' found in file %r") % filepath)
|
||||
operator.report({'ERROR'}, rpt_("No 'Connections' found in file %r") % filepath)
|
||||
return {'CANCELLED'}
|
||||
|
||||
# ----
|
||||
|
||||
@@ -139,10 +139,8 @@ class NWNodeWrangler(bpy.types.AddonPreferences):
|
||||
|
||||
box = layout.box()
|
||||
col = box.column(align=True)
|
||||
hotkey_button_name = "Show Hotkey List"
|
||||
if self.show_hotkey_list:
|
||||
hotkey_button_name = "Hide Hotkey List"
|
||||
col.prop(self, "show_hotkey_list", text=hotkey_button_name, toggle=True)
|
||||
hotkey_button_name = iface_("Show Hotkey List") if self.show_hotkey_list else iface_("Hide Hotkey List")
|
||||
col.prop(self, "show_hotkey_list", text=hotkey_button_name, translate=False, toggle=True)
|
||||
if self.show_hotkey_list:
|
||||
col.prop(self, "hotkey_list_filter", icon="VIEWZOOM")
|
||||
col.separator()
|
||||
|
||||
@@ -677,6 +677,13 @@ def dump_py_messages_from_files(msgs, reports, files, settings):
|
||||
("add_repeat_zone", 1),
|
||||
("add_foreach_geometry_element_zone", 1),
|
||||
("add_closure_zone", 1),
|
||||
("node_operator", 4),
|
||||
("node_operator_with_outputs", 6),
|
||||
("simulation_zone", 2),
|
||||
("repeat_zone", 2),
|
||||
("for_each_element_zone", 2),
|
||||
("closure_zone", 2),
|
||||
|
||||
):
|
||||
func_translate_args[func_id] = {"label": (arg_pos, {})}
|
||||
# print(func_translate_args)
|
||||
@@ -1080,6 +1087,10 @@ def dump_asset_messages(msgs, reports, settings):
|
||||
socket_data = asset_data.setdefault("sockets", [])
|
||||
socket_data.append((interface.name, interface.description))
|
||||
assets.append(asset_data)
|
||||
for node in asset.nodes:
|
||||
if node.bl_idname == "GeometryNodeWarning" and node.inputs['Message'].default_value:
|
||||
warning_data = asset_data.setdefault("warnings", [])
|
||||
warning_data.append(node.inputs['Message'].default_value)
|
||||
|
||||
for asset_file in sorted(asset_files):
|
||||
for asset in sorted(asset_files[asset_file], key=lambda a: a["name"]):
|
||||
@@ -1096,7 +1107,7 @@ def dump_asset_messages(msgs, reports, settings):
|
||||
)
|
||||
|
||||
if "sockets" in asset:
|
||||
for socket_name, socket_description in asset["sockets"]:
|
||||
for socket_name, socket_description in sorted(asset["sockets"]):
|
||||
msgsrc = f"Socket name from node group {name}, file {asset_file}"
|
||||
process_msg(
|
||||
msgs, settings.DEFAULT_CONTEXT, socket_name, msgsrc,
|
||||
@@ -1107,6 +1118,13 @@ def dump_asset_messages(msgs, reports, settings):
|
||||
msgs, settings.DEFAULT_CONTEXT, socket_description, msgsrc,
|
||||
reports, None, settings,
|
||||
)
|
||||
if "warnings" in asset:
|
||||
for warning in sorted(asset["warnings"]):
|
||||
msgsrc = f"Warning from node group {name}, file {asset_file}"
|
||||
process_msg(
|
||||
msgs, settings.DEFAULT_CONTEXT, warning, msgsrc,
|
||||
reports, None, settings,
|
||||
)
|
||||
|
||||
|
||||
def dump_addon_bl_info(msgs, reports, module, settings):
|
||||
|
||||
@@ -256,7 +256,7 @@ PYGETTEXT_KEYWORDS = (() +
|
||||
|
||||
tuple(("{}\\((?:[^\"',]+,){{1,2}}\\s*" + _msg_re + r"\s*(?:\)|,)").format(it)
|
||||
for it in ("BKE_report", "BKE_reportf", "BKE_reports_prepend", "BKE_reports_prependf",
|
||||
"CTX_wm_operator_poll_msg_set", "WM_report", "WM_reportf",
|
||||
"CTX_wm_operator_poll_msg_set", "WM_global_report", "WM_global_reportf",
|
||||
"UI_but_disable")) +
|
||||
|
||||
# bmesh operator errors
|
||||
|
||||
@@ -26,6 +26,7 @@ from bpy.app.translations import (
|
||||
pgettext_tip as tip_,
|
||||
pgettext_data as data_,
|
||||
pgettext_rpt as rpt_,
|
||||
pgettext_n as n_,
|
||||
)
|
||||
|
||||
|
||||
@@ -602,16 +603,16 @@ class ZoneOperator:
|
||||
|
||||
_zone_tooltips = {
|
||||
"GeometryNodeSimulationInput": (
|
||||
"Simulate the execution of nodes across a time span"
|
||||
n_("Simulate the execution of nodes across a time span")
|
||||
),
|
||||
"GeometryNodeRepeatInput": (
|
||||
"Execute nodes with a dynamic number of repetitions"
|
||||
n_("Execute nodes with a dynamic number of repetitions")
|
||||
),
|
||||
"GeometryNodeForeachGeometryElementInput": (
|
||||
"Perform operations separately for each geometry element (e.g. vertices, edges, etc.)"
|
||||
n_("Perform operations separately for each geometry element (e.g. vertices, edges, etc.)")
|
||||
),
|
||||
"NodeClosureInput": (
|
||||
"Wrap nodes inside a closure that can be executed at a different part of the node-tree"
|
||||
n_("Wrap nodes inside a closure that can be executed at a different part of the node-tree")
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
@@ -350,7 +350,7 @@ class NodeMenu(Menu):
|
||||
|
||||
@classmethod
|
||||
def simulation_zone(cls, layout, label):
|
||||
props = layout.operator(cls.zone_operator_id, text=label)
|
||||
props = layout.operator(cls.zone_operator_id, text=iface_(label), translate=False)
|
||||
props.input_node_type = "GeometryNodeSimulationInput"
|
||||
props.output_node_type = "GeometryNodeSimulationOutput"
|
||||
props.add_default_geometry_link = True
|
||||
@@ -362,7 +362,7 @@ class NodeMenu(Menu):
|
||||
|
||||
@classmethod
|
||||
def repeat_zone(cls, layout, label):
|
||||
props = layout.operator(cls.zone_operator_id, text=label)
|
||||
props = layout.operator(cls.zone_operator_id, text=iface_(label), translate=False)
|
||||
props.input_node_type = "GeometryNodeRepeatInput"
|
||||
props.output_node_type = "GeometryNodeRepeatOutput"
|
||||
props.add_default_geometry_link = True
|
||||
@@ -374,7 +374,7 @@ class NodeMenu(Menu):
|
||||
|
||||
@classmethod
|
||||
def for_each_element_zone(cls, layout, label):
|
||||
props = layout.operator(cls.zone_operator_id, text=label)
|
||||
props = layout.operator(cls.zone_operator_id, text=iface_(label), translate=False)
|
||||
props.input_node_type = "GeometryNodeForeachGeometryElementInput"
|
||||
props.output_node_type = "GeometryNodeForeachGeometryElementOutput"
|
||||
props.add_default_geometry_link = False
|
||||
@@ -386,7 +386,7 @@ class NodeMenu(Menu):
|
||||
|
||||
@classmethod
|
||||
def closure_zone(cls, layout, label):
|
||||
props = layout.operator(cls.zone_operator_id, text=label)
|
||||
props = layout.operator(cls.zone_operator_id, text=iface_(label), translate=False)
|
||||
props.input_node_type = "NodeClosureInput"
|
||||
props.output_node_type = "NodeClosureOutput"
|
||||
props.add_default_geometry_link = False
|
||||
|
||||
@@ -77,9 +77,12 @@
|
||||
static bool blo_is_builtin_template(const char *app_template)
|
||||
{
|
||||
/* For all builtin templates shipped with Blender. */
|
||||
return (
|
||||
!app_template ||
|
||||
STR_ELEM(app_template, N_("2D_Animation"), N_("Sculpting"), N_("VFX"), N_("Video_Editing")));
|
||||
return (!app_template || STR_ELEM(app_template,
|
||||
N_("2D_Animation"),
|
||||
N_("Storyboarding"),
|
||||
N_("Sculpting"),
|
||||
N_("VFX"),
|
||||
N_("Video_Editing")));
|
||||
}
|
||||
|
||||
static void blo_update_defaults_screen(bScreen *screen,
|
||||
|
||||
@@ -965,7 +965,7 @@ static void ui_block_colorpicker(const bContext * /*C*/,
|
||||
bt = uiDefBut(block,
|
||||
ButType::Text,
|
||||
0,
|
||||
IFACE_(""),
|
||||
"",
|
||||
label_width,
|
||||
yco,
|
||||
text_width,
|
||||
|
||||
@@ -2444,7 +2444,9 @@ static void move_to_collection_menu_draw(const bContext *C, Menu *menu)
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
if (layout.operator_context() == wm::OpCallContext::ExecRegionWin) {
|
||||
layout.operator_context_set(wm::OpCallContext::InvokeRegionWin);
|
||||
PointerRNA op_ptr = layout.op("WM_OT_search_single_menu", "Search...", ICON_VIEWZOOM);
|
||||
PointerRNA op_ptr = layout.op("WM_OT_search_single_menu",
|
||||
CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Search..."),
|
||||
ICON_VIEWZOOM);
|
||||
RNA_string_set(&op_ptr, "menu_idname", menu->type->idname);
|
||||
layout.separator();
|
||||
}
|
||||
|
||||
@@ -336,17 +336,24 @@ static void fluid_bake_endjob(void *customdata)
|
||||
* Report for ended bake and how long it took. */
|
||||
if (job->success) {
|
||||
/* Show bake info. */
|
||||
WM_global_reportf(
|
||||
RPT_INFO, "Fluid: %s complete (%.2fs)", job->name, BLI_time_now_seconds() - job->start);
|
||||
WM_global_reportf(RPT_INFO,
|
||||
"Fluid: %s complete (%.2fs)",
|
||||
CTX_RPT_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, job->name),
|
||||
BLI_time_now_seconds() - job->start);
|
||||
}
|
||||
else {
|
||||
if (fds->error[0] != '\0') {
|
||||
WM_global_reportf(
|
||||
RPT_ERROR, "Fluid: %s failed at frame %d: %s", job->name, *job->pause_frame, fds->error);
|
||||
WM_global_reportf(RPT_ERROR,
|
||||
"Fluid: %s failed at frame %d: %s",
|
||||
CTX_RPT_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, job->name),
|
||||
*job->pause_frame,
|
||||
fds->error);
|
||||
}
|
||||
else { /* User canceled the bake. */
|
||||
WM_global_reportf(
|
||||
RPT_WARNING, "Fluid: %s canceled at frame %d!", job->name, *job->pause_frame);
|
||||
WM_global_reportf(RPT_WARNING,
|
||||
"Fluid: %s canceled at frame %d!",
|
||||
CTX_RPT_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, job->name),
|
||||
*job->pause_frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -445,17 +452,24 @@ static void fluid_free_endjob(void *customdata)
|
||||
* Report for ended free job and how long it took */
|
||||
if (job->success) {
|
||||
/* Show free job info */
|
||||
WM_global_reportf(
|
||||
RPT_INFO, "Fluid: %s complete (%.2fs)", job->name, BLI_time_now_seconds() - job->start);
|
||||
WM_global_reportf(RPT_INFO,
|
||||
"Fluid: %s complete (%.2fs)",
|
||||
CTX_RPT_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, job->name),
|
||||
BLI_time_now_seconds() - job->start);
|
||||
}
|
||||
else {
|
||||
if (fds->error[0] != '\0') {
|
||||
WM_global_reportf(
|
||||
RPT_ERROR, "Fluid: %s failed at frame %d: %s", job->name, *job->pause_frame, fds->error);
|
||||
WM_global_reportf(RPT_ERROR,
|
||||
"Fluid: %s failed at frame %d: %s",
|
||||
CTX_RPT_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, job->name),
|
||||
*job->pause_frame,
|
||||
fds->error);
|
||||
}
|
||||
else { /* User canceled the free job */
|
||||
WM_global_reportf(
|
||||
RPT_WARNING, "Fluid: %s canceled at frame %d!", job->name, *job->pause_frame);
|
||||
WM_global_reportf(RPT_WARNING,
|
||||
"Fluid: %s canceled at frame %d!",
|
||||
CTX_RPT_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, job->name),
|
||||
*job->pause_frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -867,8 +867,8 @@ void uiTemplateImage(uiLayout *layout,
|
||||
col->use_property_split_set(true);
|
||||
|
||||
uiLayout *sub = &col->column(true);
|
||||
sub->prop(&imaptr, "generated_width", UI_ITEM_NONE, "X", ICON_NONE);
|
||||
sub->prop(&imaptr, "generated_height", UI_ITEM_NONE, "Y", ICON_NONE);
|
||||
sub->prop(&imaptr, "generated_width", UI_ITEM_NONE, IFACE_("X"), ICON_NONE);
|
||||
sub->prop(&imaptr, "generated_height", UI_ITEM_NONE, IFACE_("Y"), ICON_NONE);
|
||||
|
||||
col->prop(&imaptr, "use_generated_float", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
|
||||
|
||||
@@ -2056,24 +2056,24 @@ static void v3d_editmetaball_buts(uiLayout *layout, Object *ob)
|
||||
break;
|
||||
case MB_CUBE:
|
||||
col->label(IFACE_("Size:"), ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, "X", ICON_NONE);
|
||||
col->prop(&ptr, "size_y", UI_ITEM_NONE, "Y", ICON_NONE);
|
||||
col->prop(&ptr, "size_z", UI_ITEM_NONE, "Z", ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, IFACE_("X"), ICON_NONE);
|
||||
col->prop(&ptr, "size_y", UI_ITEM_NONE, IFACE_("Y"), ICON_NONE);
|
||||
col->prop(&ptr, "size_z", UI_ITEM_NONE, IFACE_("Z"), ICON_NONE);
|
||||
break;
|
||||
case MB_TUBE:
|
||||
col->label(IFACE_("Size:"), ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, "X", ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, IFACE_("X"), ICON_NONE);
|
||||
break;
|
||||
case MB_PLANE:
|
||||
col->label(IFACE_("Size:"), ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, "X", ICON_NONE);
|
||||
col->prop(&ptr, "size_y", UI_ITEM_NONE, "Y", ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, IFACE_("X"), ICON_NONE);
|
||||
col->prop(&ptr, "size_y", UI_ITEM_NONE, IFACE_("Y"), ICON_NONE);
|
||||
break;
|
||||
case MB_ELIPSOID:
|
||||
col->label(IFACE_("Size:"), ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, "X", ICON_NONE);
|
||||
col->prop(&ptr, "size_y", UI_ITEM_NONE, "Y", ICON_NONE);
|
||||
col->prop(&ptr, "size_z", UI_ITEM_NONE, "Z", ICON_NONE);
|
||||
col->prop(&ptr, "size_x", UI_ITEM_NONE, IFACE_("X"), ICON_NONE);
|
||||
col->prop(&ptr, "size_y", UI_ITEM_NONE, IFACE_("Y"), ICON_NONE);
|
||||
col->prop(&ptr, "size_z", UI_ITEM_NONE, IFACE_("Z"), ICON_NONE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2678,13 +2678,13 @@ static const EnumPropertyItem *rna_SpaceNodeEditor_node_tree_sub_type_itemf(
|
||||
{SNODE_GEOMETRY_MODIFIER,
|
||||
"MODIFIER",
|
||||
ICON_MODIFIER_DATA,
|
||||
"Modifier",
|
||||
"Edit node group from active object's active modifier"},
|
||||
N_("Modifier"),
|
||||
N_("Edit node group from active object's active modifier")},
|
||||
{SNODE_GEOMETRY_TOOL,
|
||||
"TOOL",
|
||||
ICON_TOOL_SETTINGS,
|
||||
"Tool",
|
||||
"Edit any geometry node group for use as an operator"},
|
||||
N_("Tool"),
|
||||
N_("Edit any geometry node group for use as an operator")},
|
||||
{0, nullptr, 0, nullptr, nullptr},
|
||||
};
|
||||
|
||||
@@ -2692,13 +2692,13 @@ static const EnumPropertyItem *rna_SpaceNodeEditor_node_tree_sub_type_itemf(
|
||||
{SNODE_COMPOSITOR_SCENE,
|
||||
"SCENE",
|
||||
ICON_SCENE_DATA,
|
||||
"Scene",
|
||||
"Edit compositing node group for the current scene"},
|
||||
N_("Scene"),
|
||||
N_("Edit compositing node group for the current scene")},
|
||||
{SNODE_COMPOSITOR_SEQUENCER,
|
||||
"SEQUENCER",
|
||||
ICON_SEQUENCE,
|
||||
"Sequencer",
|
||||
"Edit compositing node group for Sequencer strip modifiers"},
|
||||
N_("Sequencer"),
|
||||
N_("Edit compositing node group for Sequencer strip modifiers")},
|
||||
{0, nullptr, 0, nullptr, nullptr},
|
||||
};
|
||||
|
||||
@@ -8117,7 +8117,6 @@ static void rna_def_space_node(BlenderRNA *brna)
|
||||
RNA_def_property_enum_funcs(
|
||||
prop, nullptr, nullptr, "rna_SpaceNodeEditor_node_tree_sub_type_itemf");
|
||||
RNA_def_property_ui_text(prop, "Node Tree Sub-Type", "");
|
||||
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID);
|
||||
RNA_def_property_update(
|
||||
prop, NC_SPACE | ND_SPACE_NODE, "rna_SpaceNodeEditor_node_tree_sub_type_update");
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ void draw_layer_filter_settings(const bContext * /*C*/, uiLayout *layout, Pointe
|
||||
"tree_node_filter",
|
||||
&obj_data_ptr,
|
||||
"layer_groups",
|
||||
"Group",
|
||||
IFACE_("Group"),
|
||||
ICON_GREASEPENCIL_LAYER_GROUP);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -312,9 +312,9 @@ static void panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
row->prop(ptr, "use_normal", UI_ITEM_NONE, "", ICON_NONE);
|
||||
sub = &row->row(true);
|
||||
sub->active_set(RNA_boolean_get(ptr, "use_normal"));
|
||||
sub->prop(ptr, "use_normal_x", UI_ITEM_R_TOGGLE, "X", ICON_NONE);
|
||||
sub->prop(ptr, "use_normal_y", UI_ITEM_R_TOGGLE, "Y", ICON_NONE);
|
||||
sub->prop(ptr, "use_normal_z", UI_ITEM_R_TOGGLE, "Z", ICON_NONE);
|
||||
sub->prop(ptr, "use_normal_x", UI_ITEM_R_TOGGLE, IFACE_("X"), ICON_NONE);
|
||||
sub->prop(ptr, "use_normal_y", UI_ITEM_R_TOGGLE, IFACE_("Y"), ICON_NONE);
|
||||
sub->prop(ptr, "use_normal_z", UI_ITEM_R_TOGGLE, IFACE_("Z"), ICON_NONE);
|
||||
|
||||
col = &layout->column(false);
|
||||
col->prop(ptr, "falloff_radius", UI_ITEM_NONE, IFACE_("Falloff"), ICON_NONE);
|
||||
@@ -340,7 +340,7 @@ static void position_panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
col = &layout->column(true);
|
||||
col->prop(ptr, "start_position_x", UI_ITEM_NONE, IFACE_("Start Position X"), ICON_NONE);
|
||||
col->prop(ptr, "start_position_y", UI_ITEM_NONE, "Y", ICON_NONE);
|
||||
col->prop(ptr, "start_position_y", UI_ITEM_NONE, IFACE_("Y"), ICON_NONE);
|
||||
}
|
||||
|
||||
static void time_panel_draw(const bContext * /*C*/, Panel *panel)
|
||||
|
||||
@@ -44,10 +44,10 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *current_no
|
||||
|
||||
PointerRNA output_node_ptr = RNA_pointer_create_discrete(&ntree.id, &RNA_Node, &output_node);
|
||||
|
||||
layout->op("node.sockets_sync", "Sync", ICON_FILE_REFRESH);
|
||||
layout->op("node.sockets_sync", IFACE_("Sync"), ICON_FILE_REFRESH);
|
||||
layout->prop(&output_node_ptr, "define_signature", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (current_node->type_legacy == NODE_CLOSURE_INPUT) {
|
||||
if (uiLayout *panel = layout->panel(C, "input_items", false, TIP_("Input Items"))) {
|
||||
if (uiLayout *panel = layout->panel(C, "input_items", false, IFACE_("Input Items"))) {
|
||||
socket_items::ui::draw_items_list_with_operators<ClosureInputItemsAccessor>(
|
||||
C, panel, ntree, output_node);
|
||||
socket_items::ui::draw_active_item_props<ClosureInputItemsAccessor>(
|
||||
@@ -57,13 +57,13 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *current_no
|
||||
panel->use_property_decorate_set(false);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (!socket_type_always_single(eNodeSocketDatatype(item.socket_type))) {
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, "Shape", ICON_NONE);
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, IFACE_("Shape"), ICON_NONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (uiLayout *panel = layout->panel(C, "output_items", false, TIP_("Output Items"))) {
|
||||
if (uiLayout *panel = layout->panel(C, "output_items", false, IFACE_("Output Items"))) {
|
||||
socket_items::ui::draw_items_list_with_operators<ClosureOutputItemsAccessor>(
|
||||
C, panel, ntree, output_node);
|
||||
socket_items::ui::draw_active_item_props<ClosureOutputItemsAccessor>(
|
||||
@@ -73,7 +73,7 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *current_no
|
||||
panel->use_property_decorate_set(false);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (!socket_type_always_single(eNodeSocketDatatype(item.socket_type))) {
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, "Shape", ICON_NONE);
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, IFACE_("Shape"), ICON_NONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -97,9 +97,9 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
|
||||
layout->use_property_split_set(true);
|
||||
layout->use_property_decorate_set(false);
|
||||
|
||||
layout->op("node.sockets_sync", "Sync", ICON_FILE_REFRESH);
|
||||
layout->op("node.sockets_sync", IFACE_("Sync"), ICON_FILE_REFRESH);
|
||||
layout->prop(node_ptr, "define_signature", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (uiLayout *panel = layout->panel(C, "bundle_items", false, TIP_("Bundle Items"))) {
|
||||
if (uiLayout *panel = layout->panel(C, "bundle_items", false, IFACE_("Bundle Items"))) {
|
||||
socket_items::ui::draw_items_list_with_operators<CombineBundleItemsAccessor>(
|
||||
C, panel, ntree, node);
|
||||
socket_items::ui::draw_active_item_props<CombineBundleItemsAccessor>(
|
||||
@@ -107,9 +107,9 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
|
||||
const auto &item = *item_ptr->data_as<NodeCombineBundleItem>();
|
||||
panel->use_property_split_set(true);
|
||||
panel->use_property_decorate_set(false);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, "Type", ICON_NONE);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, IFACE_("Type"), ICON_NONE);
|
||||
if (!socket_type_always_single(eNodeSocketDatatype(item.socket_type))) {
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, "Shape", ICON_NONE);
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, IFACE_("Shape"), ICON_NONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
layout->use_property_split_set(true);
|
||||
layout->use_property_decorate_set(false);
|
||||
|
||||
layout->op("node.sockets_sync", "Sync", ICON_FILE_REFRESH);
|
||||
layout->op("node.sockets_sync", IFACE_("Sync"), ICON_FILE_REFRESH);
|
||||
layout->prop(ptr, "define_signature", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
|
||||
if (uiLayout *panel = layout->panel(C, "input_items", false, IFACE_("Input Items"))) {
|
||||
@@ -131,7 +131,7 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
panel->use_property_decorate_set(false);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (!socket_type_always_single(eNodeSocketDatatype(item.socket_type))) {
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, "Shape", ICON_NONE);
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, IFACE_("Shape"), ICON_NONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -145,7 +145,7 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
panel->use_property_decorate_set(false);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (!socket_type_always_single(eNodeSocketDatatype(item.socket_type))) {
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, "Shape", ICON_NONE);
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, IFACE_("Shape"), ICON_NONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ static void node_declare(NodeDeclarationBuilder &b)
|
||||
b.add_input<decl::Extend>("", "__extend__").custom_draw([](CustomSocketDrawParams ¶ms) {
|
||||
uiLayout &layout = params.layout;
|
||||
layout.emboss_set(ui::EmbossType::None);
|
||||
PointerRNA op_ptr = layout.op("node.index_switch_item_add", IFACE_(""), ICON_ADD);
|
||||
PointerRNA op_ptr = layout.op("node.index_switch_item_add", "", ICON_ADD);
|
||||
RNA_int_set(&op_ptr, "node_identifier", params.node.identifier);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -101,9 +101,9 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
|
||||
layout->use_property_split_set(true);
|
||||
layout->use_property_decorate_set(false);
|
||||
|
||||
layout->op("node.sockets_sync", "Sync", ICON_FILE_REFRESH);
|
||||
layout->op("node.sockets_sync", IFACE_("Sync"), ICON_FILE_REFRESH);
|
||||
layout->prop(node_ptr, "define_signature", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
if (uiLayout *panel = layout->panel(C, "bundle_items", false, TIP_("Bundle Items"))) {
|
||||
if (uiLayout *panel = layout->panel(C, "bundle_items", false, IFACE_("Bundle Items"))) {
|
||||
socket_items::ui::draw_items_list_with_operators<SeparateBundleItemsAccessor>(
|
||||
C, panel, ntree, node);
|
||||
socket_items::ui::draw_active_item_props<SeparateBundleItemsAccessor>(
|
||||
@@ -111,9 +111,9 @@ static void node_layout_ex(uiLayout *layout, bContext *C, PointerRNA *node_ptr)
|
||||
const auto &item = *item_ptr->data_as<NodeSeparateBundleItem>();
|
||||
panel->use_property_split_set(true);
|
||||
panel->use_property_decorate_set(false);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, "Type", ICON_NONE);
|
||||
panel->prop(item_ptr, "socket_type", UI_ITEM_NONE, IFACE_("Type"), ICON_NONE);
|
||||
if (!socket_type_always_single(eNodeSocketDatatype(item.socket_type))) {
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, "Shape", ICON_NONE);
|
||||
panel->prop(item_ptr, "structure_type", UI_ITEM_NONE, IFACE_("Shape"), ICON_NONE);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -59,10 +59,10 @@ static void draw_vector(uiLayout &layout, const float3 &value)
|
||||
static void draw_color(uiLayout &layout, const ColorGeometry4f &value)
|
||||
{
|
||||
uiLayout &col = layout.column(true);
|
||||
col.label(fmt::format("{}: {:.5f}", IFACE_("R"), value.r), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", IFACE_("G"), value.g), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", IFACE_("B"), value.b), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", IFACE_("A"), value.a), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", CTX_IFACE_(BLT_I18NCONTEXT_COLOR, "R"), value.r), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", CTX_IFACE_(BLT_I18NCONTEXT_COLOR, "G"), value.g), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", CTX_IFACE_(BLT_I18NCONTEXT_COLOR, "B"), value.b), ICON_NONE);
|
||||
col.label(fmt::format("{}: {:.5f}", CTX_IFACE_(BLT_I18NCONTEXT_COLOR, "A"), value.a), ICON_NONE);
|
||||
}
|
||||
static void draw_string(uiLayout &layout, const StringRef value)
|
||||
{
|
||||
|
||||
@@ -252,7 +252,7 @@ static void add_layer_name_search_button(DrawGroupInputsContext &ctx,
|
||||
rna_path,
|
||||
0,
|
||||
StringRef(socket.description));
|
||||
UI_but_placeholder_set(but, "Layer");
|
||||
UI_but_placeholder_set(but, IFACE_("Layer"));
|
||||
layout->label("", ICON_BLANK1);
|
||||
|
||||
const Object *object = ed::object::context_object(&ctx.C);
|
||||
@@ -806,7 +806,7 @@ static void draw_warnings(const bContext *C,
|
||||
uiLayout *col = &panel.body->column(false);
|
||||
for (const NodeWarning *warning : warnings) {
|
||||
const int icon = node_warning_type_icon(warning->type);
|
||||
col->label(warning->message, icon);
|
||||
col->label(RPT_(warning->message), icon);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -288,33 +288,36 @@ static void colorBalance_panel_draw(const bContext *C, Panel *panel)
|
||||
{
|
||||
uiLayout &split = flow.column(false).split(0.35f, false);
|
||||
uiLayout &col = split.column(true);
|
||||
col.label("Lift", ICON_NONE);
|
||||
col.label(IFACE_("Lift"), ICON_NONE);
|
||||
col.separator();
|
||||
col.separator();
|
||||
col.prop(&color_balance, "lift", UI_ITEM_NONE, "", ICON_NONE);
|
||||
col.prop(&color_balance, "invert_lift", UI_ITEM_NONE, "Invert", ICON_ARROW_LEFTRIGHT);
|
||||
col.prop(
|
||||
&color_balance, "invert_lift", UI_ITEM_NONE, IFACE_("Invert"), ICON_ARROW_LEFTRIGHT);
|
||||
uiTemplateColorPicker(&split, &color_balance, "lift", true, false, false, true);
|
||||
col.separator();
|
||||
}
|
||||
{
|
||||
uiLayout &split = flow.column(false).split(0.35f, false);
|
||||
uiLayout &col = split.column(true);
|
||||
col.label("Gamma", ICON_NONE);
|
||||
col.label(IFACE_("Gamma"), ICON_NONE);
|
||||
col.separator();
|
||||
col.separator();
|
||||
col.prop(&color_balance, "gamma", UI_ITEM_NONE, "", ICON_NONE);
|
||||
col.prop(&color_balance, "invert_gamma", UI_ITEM_NONE, "Invert", ICON_ARROW_LEFTRIGHT);
|
||||
col.prop(
|
||||
&color_balance, "invert_gamma", UI_ITEM_NONE, IFACE_("Invert"), ICON_ARROW_LEFTRIGHT);
|
||||
uiTemplateColorPicker(&split, &color_balance, "gamma", true, false, true, true);
|
||||
col.separator();
|
||||
}
|
||||
{
|
||||
uiLayout &split = flow.column(false).split(0.35f, false);
|
||||
uiLayout &col = split.column(true);
|
||||
col.label("Gain", ICON_NONE);
|
||||
col.label(IFACE_("Gain"), ICON_NONE);
|
||||
col.separator();
|
||||
col.separator();
|
||||
col.prop(&color_balance, "gain", UI_ITEM_NONE, "", ICON_NONE);
|
||||
col.prop(&color_balance, "invert_gain", UI_ITEM_NONE, "Invert", ICON_ARROW_LEFTRIGHT);
|
||||
col.prop(
|
||||
&color_balance, "invert_gain", UI_ITEM_NONE, IFACE_("Invert"), ICON_ARROW_LEFTRIGHT);
|
||||
uiTemplateColorPicker(&split, &color_balance, "gain", true, false, true, true);
|
||||
}
|
||||
}
|
||||
@@ -322,33 +325,36 @@ static void colorBalance_panel_draw(const bContext *C, Panel *panel)
|
||||
{
|
||||
uiLayout &split = flow.column(false).split(0.35f, false);
|
||||
uiLayout &col = split.column(true);
|
||||
col.label("Offset", ICON_NONE);
|
||||
col.label(IFACE_("Offset"), ICON_NONE);
|
||||
col.separator();
|
||||
col.separator();
|
||||
col.prop(&color_balance, "offset", UI_ITEM_NONE, "", ICON_NONE);
|
||||
col.prop(&color_balance, "invert_offset", UI_ITEM_NONE, "Invert", ICON_ARROW_LEFTRIGHT);
|
||||
col.prop(
|
||||
&color_balance, "invert_offset", UI_ITEM_NONE, IFACE_("Invert"), ICON_ARROW_LEFTRIGHT);
|
||||
uiTemplateColorPicker(&split, &color_balance, "offset", true, false, false, true);
|
||||
col.separator();
|
||||
}
|
||||
{
|
||||
uiLayout &split = flow.column(false).split(0.35f, false);
|
||||
uiLayout &col = split.column(true);
|
||||
col.label("Power", ICON_NONE);
|
||||
col.label(IFACE_("Power"), ICON_NONE);
|
||||
col.separator();
|
||||
col.separator();
|
||||
col.prop(&color_balance, "power", UI_ITEM_NONE, "", ICON_NONE);
|
||||
col.prop(&color_balance, "invert_power", UI_ITEM_NONE, "Invert", ICON_ARROW_LEFTRIGHT);
|
||||
col.prop(
|
||||
&color_balance, "invert_power", UI_ITEM_NONE, IFACE_("Invert"), ICON_ARROW_LEFTRIGHT);
|
||||
uiTemplateColorPicker(&split, &color_balance, "power", true, false, false, true);
|
||||
col.separator();
|
||||
}
|
||||
{
|
||||
uiLayout &split = flow.column(false).split(0.35f, false);
|
||||
uiLayout &col = split.column(true);
|
||||
col.label("Slope", ICON_NONE);
|
||||
col.label(IFACE_("Slope"), ICON_NONE);
|
||||
col.separator();
|
||||
col.separator();
|
||||
col.prop(&color_balance, "slope", UI_ITEM_NONE, "", ICON_NONE);
|
||||
col.prop(&color_balance, "invert_slope", UI_ITEM_NONE, "Invert", ICON_ARROW_LEFTRIGHT);
|
||||
col.prop(
|
||||
&color_balance, "invert_slope", UI_ITEM_NONE, IFACE_("Invert"), ICON_ARROW_LEFTRIGHT);
|
||||
uiTemplateColorPicker(&split, &color_balance, "slope", true, false, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,7 +156,7 @@ void draw_mask_input_type_settings(const bContext *C, uiLayout *layout, PointerR
|
||||
|
||||
col = &layout->column(false);
|
||||
row = &col->row(true);
|
||||
row->prop(ptr, "input_mask_type", UI_ITEM_R_EXPAND, "Type", ICON_NONE);
|
||||
row->prop(ptr, "input_mask_type", UI_ITEM_R_EXPAND, IFACE_("Type"), ICON_NONE);
|
||||
|
||||
if (input_mask_type == STRIP_MASK_INPUT_STRIP) {
|
||||
MetaStack *ms = meta_stack_active_get(ed);
|
||||
@@ -169,7 +169,8 @@ void draw_mask_input_type_settings(const bContext *C, uiLayout *layout, PointerR
|
||||
sequences_object = RNA_pointer_create_discrete(
|
||||
&sequencer_scene->id, &RNA_SequenceEditor, ed);
|
||||
}
|
||||
col->prop_search(ptr, "input_mask_strip", &sequences_object, "strips", "Mask", ICON_NONE);
|
||||
col->prop_search(
|
||||
ptr, "input_mask_strip", &sequences_object, "strips", IFACE_("Mask"), ICON_NONE);
|
||||
}
|
||||
else {
|
||||
col->prop(ptr, "input_mask_id", UI_ITEM_NONE, std::nullopt, ICON_NONE);
|
||||
|
||||
@@ -4786,7 +4786,7 @@ static uiBlock *block_create__close_file_dialog(bContext *C, ARegion *region, vo
|
||||
/* Modified Images Checkbox. */
|
||||
if (modified_images_count > 0) {
|
||||
char message[64];
|
||||
SNPRINTF(message, "Save %u modified image(s)", modified_images_count);
|
||||
SNPRINTF(message, RPT_("Save %u modified image(s)"), modified_images_count);
|
||||
/* Only the first checkbox should get extra separation. */
|
||||
if (!has_extra_checkboxes) {
|
||||
layout->separator();
|
||||
|
||||
Reference in New Issue
Block a user