Blender V4.3
wm_operator_props.cc File Reference
#include "DNA_ID_enums.h"
#include "DNA_space_types.h"
#include "BKE_lib_id.hh"
#include "BKE_main.hh"
#include "BLI_math_base.h"
#include "BLI_rect.h"
#include "UI_resources.hh"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "RNA_enum_types.hh"
#include "RNA_prototypes.hh"
#include "ED_select_utils.hh"
#include "WM_api.hh"
#include "WM_types.hh"

Go to the source code of this file.

Functions

void WM_operator_properties_confirm_or_exec (wmOperatorType *ot)
 
static const EnumPropertyItemwm_operator_properties_filesel_sort_items_itemf (bContext *, PointerRNA *, PropertyRNA *, bool *r_free)
 
void WM_operator_properties_filesel (wmOperatorType *ot, const int filter, const short type, const eFileSel_Action action, const eFileSel_Flag flag, const short display, const short sort)
 
void WM_operator_properties_id_lookup_set_from_id (PointerRNA *ptr, const ID *id)
 
IDWM_operator_properties_id_lookup_from_name_or_session_uid (Main *bmain, PointerRNA *ptr, const ID_Type type)
 
bool WM_operator_properties_id_lookup_is_set (PointerRNA *ptr)
 
void WM_operator_properties_id_lookup (wmOperatorType *ot, const bool add_name_prop)
 
static void wm_operator_properties_select_action_ex (wmOperatorType *ot, int default_action, const EnumPropertyItem *select_actions, bool hide_gui)
 
void WM_operator_properties_select_action (wmOperatorType *ot, int default_action, bool hide_gui)
 
void WM_operator_properties_select_action_simple (wmOperatorType *ot, int default_action, bool hide_gui)
 
void WM_operator_properties_select_random (wmOperatorType *ot)
 
int WM_operator_properties_select_random_seed_increment_get (wmOperator *op)
 
void WM_operator_properties_select_all (wmOperatorType *ot)
 
void WM_operator_properties_border (wmOperatorType *ot)
 
void WM_operator_properties_border_to_rcti (wmOperator *op, rcti *r_rect)
 
void WM_operator_properties_border_to_rctf (wmOperator *op, rctf *r_rect)
 
void WM_operator_properties_gesture_box_ex (wmOperatorType *ot, bool deselect, bool extend)
 
void WM_operator_properties_use_cursor_init (wmOperatorType *ot)
 
void WM_operator_properties_gesture_box_select (wmOperatorType *ot)
 
void WM_operator_properties_gesture_box (wmOperatorType *ot)
 
void WM_operator_properties_select_operation (wmOperatorType *ot)
 
void WM_operator_properties_select_operation_simple (wmOperatorType *ot)
 
void WM_operator_properties_select_walk_direction (wmOperatorType *ot)
 
void WM_operator_properties_generic_select (wmOperatorType *ot)
 
void WM_operator_properties_gesture_box_zoom (wmOperatorType *ot)
 
void WM_operator_properties_gesture_lasso (wmOperatorType *ot)
 
void WM_operator_properties_gesture_polyline (wmOperatorType *ot)
 
void WM_operator_properties_gesture_straightline (wmOperatorType *ot, int cursor)
 
void WM_operator_properties_gesture_circle (wmOperatorType *ot)
 
void WM_operator_properties_mouse_select (wmOperatorType *ot)
 
void WM_operator_properties_checker_interval (wmOperatorType *ot, bool nth_can_disable)
 
void WM_operator_properties_checker_interval_from_op (wmOperator *op, CheckerIntervalParams *op_params)
 
bool WM_operator_properties_checker_interval_test (const CheckerIntervalParams *op_params, int depth)
 

Detailed Description

Generic re-usable property definitions and accessors for operators to share. (WM_operator_properties_* functions).

Definition in file wm_operator_props.cc.

Function Documentation

◆ WM_operator_properties_border()

◆ WM_operator_properties_border_to_rctf()

◆ WM_operator_properties_border_to_rcti()

◆ WM_operator_properties_checker_interval()

void WM_operator_properties_checker_interval ( wmOperatorType * ot,
bool nth_can_disable )
Parameters
nth_can_disableEnable if we want to be able to select no interval at all.

Definition at line 637 of file wm_operator_props.cc.

References min_ii(), ot, RNA_def_int(), and wmOperatorType::srna.

Referenced by CURVE_OT_select_nth(), MESH_OT_select_nth(), path_select_properties(), and path_select_properties().

◆ WM_operator_properties_checker_interval_from_op()

◆ WM_operator_properties_checker_interval_test()

◆ WM_operator_properties_confirm_or_exec()

◆ WM_operator_properties_filesel()

void WM_operator_properties_filesel ( wmOperatorType * ot,
int filter,
short type,
eFileSel_Action action,
eFileSel_Flag flag,
short display,
short sort )

Default properties for file-select.

Definition at line 65 of file wm_operator_props.cc.

References FILE_DEFAULTDISPLAY, FILE_HORIZONTALDISPLAY, FILE_IMGDISPLAY, FILE_LOADLIB, FILE_MAX, FILE_SAVE, FILE_SPECIAL, FILE_TYPE_ALEMBIC, FILE_TYPE_ARCHIVE, FILE_TYPE_BLENDER, FILE_TYPE_BLENDER_BACKUP, FILE_TYPE_BLENDERLIB, FILE_TYPE_BTX, FILE_TYPE_COLLADA, FILE_TYPE_FOLDER, FILE_TYPE_FTFONT, FILE_TYPE_IMAGE, FILE_TYPE_MOVIE, FILE_TYPE_OBJECT_IO, FILE_TYPE_PYSCRIPT, FILE_TYPE_SOUND, FILE_TYPE_TEXT, FILE_TYPE_USD, FILE_TYPE_VOLUME, FILE_VERTICALDISPLAY, flag, ot, PROP_HIDDEN, PROP_SKIP_PRESET, PROP_SKIP_SAVE, RNA_def_boolean(), RNA_def_collection_runtime(), RNA_def_enum(), RNA_def_enum_funcs(), RNA_def_int(), RNA_def_property_flag(), RNA_def_string_dir_path(), RNA_def_string_file_name(), RNA_def_string_file_path(), rna_enum_dummy_NULL_items, wmOperatorType::srna, WM_FILESEL_DIRECTORY, WM_FILESEL_FILENAME, WM_FILESEL_FILEPATH, WM_FILESEL_FILES, WM_FILESEL_RELPATH, WM_FILESEL_SHOW_PROPS, and wm_operator_properties_filesel_sort_items_itemf().

Referenced by blender::ed::asset::ASSET_OT_bundle_install(), blender::ed::sculpt_paint::BRUSH_OT_asset_load_preview(), BUTTONS_OT_directory_browse(), BUTTONS_OT_file_browse(), CACHEFILE_OT_layer_add(), CACHEFILE_OT_open(), CLIP_OT_open(), ED_OT_lib_id_load_custom_preview(), FILE_OT_find_missing_files(), FONT_OT_open(), FONT_OT_text_paste_from_file(), GRAPH_OT_sound_to_samples(), IMAGE_OT_file_browse(), IMAGE_OT_open(), IMAGE_OT_replace(), IMAGE_OT_save_as(), blender::ed::space_node::NODE_OT_add_file(), blender::ed::object::OBJECT_OT_empty_image_add(), blender::ed::object::OBJECT_OT_multires_external_save(), blender::ed::object::OBJECT_OT_volume_import(), PREFERENCES_OT_asset_library_add(), RIGIDBODY_OT_world_export(), screen_screenshot_impl(), SEQUENCER_OT_change_path(), SEQUENCER_OT_export_subtitles(), SEQUENCER_OT_image_strip_add(), SEQUENCER_OT_movie_strip_add(), SEQUENCER_OT_sound_strip_add(), SOUND_OT_mixdown(), SOUND_OT_open(), SOUND_OT_open_mono(), TEXT_OT_open(), TEXT_OT_save_as(), WM_OT_append(), WM_OT_lib_reload(), WM_OT_lib_relocate(), WM_OT_link(), WM_OT_open_mainfile(), WM_OT_recover_auto_save(), WM_OT_save_as_mainfile(), and WM_OT_save_mainfile().

◆ wm_operator_properties_filesel_sort_items_itemf()

static const EnumPropertyItem * wm_operator_properties_filesel_sort_items_itemf ( bContext * ,
PointerRNA * ,
PropertyRNA * ,
bool * r_free )
static

Extends rna_enum_fileselect_params_sort_items with a default item for operators to use.

Definition at line 44 of file wm_operator_props.cc.

References FILE_SORT_DEFAULT, rna_enum_fileselect_params_sort_items, RNA_enum_item_add(), RNA_enum_item_end(), and RNA_enum_items_add().

Referenced by WM_operator_properties_filesel().

◆ WM_operator_properties_generic_select()

void WM_operator_properties_generic_select ( wmOperatorType * ot)

Selecting and tweaking items are overlapping operations. Getting both to work without conflicts requires special care. See https://wiki.blender.org/wiki/Human_Interface_Guidelines/Selection#Select-tweaking for the desired behavior.

For default click selection (with no modifier keys held), the select operators can do the following:

  • On a mouse press on an unselected item, change selection and finish immediately after. This sends an undo push and allows transform to take over should a click-drag event be caught.
  • On a mouse press on a selected item, don't change selection state, but start modal execution of the operator. Idea is that we wait with deselecting other items until we know that the intention wasn't to tweak (mouse press+drag) all selected items.
  • If a click-drag is recognized before the release event happens, cancel the operator, so that transform can take over and no undo-push is sent.
  • If the release event occurs rather than a click-drag one, deselect all items but the one under the cursor, and finish the modal operator.

This utility, together with WM_generic_select_invoke() and WM_generic_select_modal() should help getting the wanted behavior to work. Most generic logic should be handled in these, so that the select operators only have to care for the case dependent handling.

Every select operator has slightly different requirements, e.g. sequencer strip selection also needs to account for handle selection. This should be the baseline behavior though.

Definition at line 500 of file wm_operator_props.cc.

References ot, PROP_HIDDEN, PROP_SKIP_SAVE, RNA_def_boolean(), RNA_def_int(), RNA_def_property_flag(), and wmOperatorType::srna.

Referenced by ACTION_OT_clickselect(), FILE_OT_select(), GRAPH_OT_clickselect(), MARKER_OT_select(), NLA_OT_click_select(), SEQUENCER_OT_select(), and SEQUENCER_OT_select_handle().

◆ WM_operator_properties_gesture_box()

◆ WM_operator_properties_gesture_box_ex()

void WM_operator_properties_gesture_box_ex ( wmOperatorType * ot,
bool deselect,
bool extend )

◆ WM_operator_properties_gesture_box_select()

void WM_operator_properties_gesture_box_select ( wmOperatorType * ot)

◆ WM_operator_properties_gesture_box_zoom()

◆ WM_operator_properties_gesture_circle()

◆ WM_operator_properties_gesture_lasso()

◆ WM_operator_properties_gesture_polyline()

◆ WM_operator_properties_gesture_straightline()

◆ WM_operator_properties_id_lookup()

void WM_operator_properties_id_lookup ( wmOperatorType * ot,
const bool add_name_prop )

Adds "name" and "session_uid" properties so the caller can tell the operator which ID to act on. See WM_operator_properties_id_lookup_from_name_or_session_uid(). Both properties will be hidden in the UI and not be saved over consecutive operator calls.

Note
New operators should probably use "session_uid" only (set add_name_prop to false), since this works properly with linked data and/or library overrides (in both cases, multiple IDs with the same name and type may be present). The "name" property is only kept to not break compatibility with old scripts using some previously existing operators.

Definition at line 274 of file wm_operator_props.cc.

References INT32_MAX, INT32_MIN, MAX_ID_NAME, ot, PROP_HIDDEN, PROP_SKIP_SAVE, RNA_def_int(), RNA_def_property_flag(), RNA_def_string(), and wmOperatorType::srna.

Referenced by blender::ed::geometry::GEOMETRY_OT_execute_node_group(), blender::ed::space_node::NODE_OT_add_collection(), blender::ed::space_node::NODE_OT_add_file(), blender::ed::space_node::NODE_OT_add_group(), blender::ed::space_node::NODE_OT_add_mask(), blender::ed::space_node::NODE_OT_add_material(), blender::ed::space_node::NODE_OT_add_object(), blender::ed::object::OBJECT_OT_add_named(), blender::ed::object::OBJECT_OT_collection_external_asset_drop(), blender::ed::object::OBJECT_OT_collection_instance_add(), blender::ed::object::OBJECT_OT_data_instance_add(), blender::ed::object::OBJECT_OT_drop_named_material(), blender::ed::object::OBJECT_OT_empty_image_add(), blender::ed::object::OBJECT_OT_modifier_add_node_group(), blender::ed::object::bake_simulation::single_bake_operator_props(), UI_OT_drop_material(), VIEW3D_OT_camera_background_image_add(), and VIEW3D_OT_drop_world().

◆ WM_operator_properties_id_lookup_from_name_or_session_uid()

ID * WM_operator_properties_id_lookup_from_name_or_session_uid ( Main * bmain,
PointerRNA * ptr,
enum ID_Type type )

Tries to find an ID in bmain. There needs to be either a "session_uid" int or "name" string property defined and set. The former has priority. See WM_operator_properties_id_lookup() for a helper to add the properties.

Definition at line 249 of file wm_operator_props.cc.

References BKE_libblock_find_name(), BKE_libblock_find_session_uid(), MAX_ID_NAME, ptr, RNA_property_int_get(), RNA_property_is_set(), RNA_property_string_get(), and RNA_struct_find_property().

Referenced by blender::ed::object::bake_simulation::bake_single_node_gather_bake_request(), blender::ed::object::collection_add_info_get_from_op(), blender::ed::object::bake_simulation::delete_single_bake_exec(), blender::ed::object::drop_named_material_invoke(), drop_world_exec(), blender::ed::geometry::get_asset_or_local_node_group(), blender::ed::object::get_asset_or_local_node_group(), blender::ed::space_node::node_add_collection_exec(), blender::ed::space_node::node_add_group_exec(), blender::ed::space_node::node_add_mask_exec(), blender::ed::space_node::node_add_material_exec(), blender::ed::space_node::node_add_object_exec(), blender::ed::object::object_add_named_exec(), blender::ed::object::object_data_instance_add_exec(), blender::ed::object::object_transform_to_mouse_exec(), blender::ed::object::bake_simulation::pack_single_bake_exec(), blender::ed::geometry::run_node_group_depends_on_cursor(), ui_drop_material_exec(), blender::ed::object::bake_simulation::unpack_single_bake_exec(), WM_drag_free_imported_drag_ID(), and WM_operator_drop_load_path().

◆ WM_operator_properties_id_lookup_is_set()

bool WM_operator_properties_id_lookup_is_set ( PointerRNA * ptr)

Check if either the "session_uid" or "name" property is set inside ptr. If this is the case the ID can be looked up by WM_operator_properties_id_lookup_from_name_or_session_uid().

Definition at line 269 of file wm_operator_props.cc.

References ptr, and RNA_struct_property_is_set().

Referenced by blender::ed::space_node::node_add_file_invoke(), blender::ed::object::object_image_add_invoke(), blender::ed::object::object_instance_add_invoke(), and WM_operator_drop_load_path().

◆ WM_operator_properties_id_lookup_set_from_id()

void WM_operator_properties_id_lookup_set_from_id ( PointerRNA * ptr,
const ID * id )

Tries to pass id to an operator via either a "session_uid" or a "name" property defined in the properties of ptr. The former is preferred, since it works properly with linking and library overrides (which may both result in multiple IDs with the same name and type).

Also see WM_operator_properties_id_lookup() and WM_operator_properties_id_lookup_from_name_or_session_uid()

Definition at line 233 of file wm_operator_props.cc.

References BLI_assert_unreachable, ptr, RNA_int_set(), RNA_string_set(), and RNA_struct_find_property().

Referenced by blender::ed::geometry::catalog_assets_draw_unassigned(), blender::nodes::draw_bake_button_row(), blender::ed::object::unassigned_assets_draw(), view3d_id_drop_copy(), view3d_id_drop_copy_with_type(), and view3d_id_path_drop_copy().

◆ WM_operator_properties_mouse_select()

◆ WM_operator_properties_select_action()

void WM_operator_properties_select_action ( wmOperatorType * ot,
int default_action,
bool hide_gui )

◆ wm_operator_properties_select_action_ex()

static void wm_operator_properties_select_action_ex ( wmOperatorType * ot,
int default_action,
const EnumPropertyItem * select_actions,
bool hide_gui )
static

◆ WM_operator_properties_select_action_simple()

void WM_operator_properties_select_action_simple ( wmOperatorType * ot,
int default_action,
bool hide_gui )

Only for select/de-select.

Definition at line 327 of file wm_operator_props.cc.

References ot, SEL_DESELECT, SEL_SELECT, and wm_operator_properties_select_action_ex().

Referenced by WM_operator_properties_select_random().

◆ WM_operator_properties_select_all()

◆ WM_operator_properties_select_operation()

void WM_operator_properties_select_operation ( wmOperatorType * ot)

◆ WM_operator_properties_select_operation_simple()

◆ WM_operator_properties_select_random()

◆ WM_operator_properties_select_random_seed_increment_get()

◆ WM_operator_properties_select_walk_direction()

◆ WM_operator_properties_use_cursor_init()

void WM_operator_properties_use_cursor_init ( wmOperatorType * ot)

Disable using cursor position, use when view operators are initialized from buttons.

Definition at line 436 of file wm_operator_props.cc.

References ot, PROP_HIDDEN, PROP_SKIP_SAVE, RNA_def_boolean(), RNA_def_property_flag(), and wmOperatorType::srna.

Referenced by CLIP_OT_view_zoom(), IMAGE_OT_view_zoom(), VIEW2D_OT_zoom(), and view3d_operator_properties_common().