37#include "RNA_prototypes.hh"
57# include <AUD_Sequence.h>
73#define SEQPROP_STARTFRAME (1 << 0)
74#define SEQPROP_ENDFRAME (1 << 1)
75#define SEQPROP_NOPATHS (1 << 2)
76#define SEQPROP_NOCHAN (1 << 3)
77#define SEQPROP_FIT_METHOD (1 << 4)
78#define SEQPROP_VIEW_TRANSFORM (1 << 5)
79#define SEQPROP_PLAYBACK_RATE (1 << 6)
82 {
SEQ_SCALE_TO_FIT,
"FIT", 0,
"Scale to Fit",
"Scale image to fit within the canvas"},
83 {
SEQ_SCALE_TO_FILL,
"FILL", 0,
"Scale to Fill",
"Scale image to completely fill the canvas"},
86 {0,
nullptr, 0,
nullptr,
nullptr},
100 "Start frame of the sequence strip",
113 "End frame for the color strip",
124 "Channel to place this strip into",
129 ot->
srna,
"replace_sel",
true,
"Replace Selection",
"Deselect previously selected strips");
133 ot->
srna,
"overlap",
false,
"Allow Overlap",
"Don't correct overlap on new sequence strips");
138 "overlap_shuffle_override",
140 "Override Overlap Shuffle Behavior",
141 "Use the overlap_mode tool settings to determine how to shuffle overlapping strips");
155 "set_view_transform",
157 "Set View Transform",
158 "Set appropriate view transform based on media color space");
163 "adjust_playback_rate",
165 "Adjust Playback Rate",
166 "Play at normal speed regardless of scene FPS");
172 const char *identifier)
192 int timeline_frame =
int(scene->r.cfra);
193 int proximity = INT_MAX;
201 if (
ELEM(type, -1, seq->type) && (strip_end <= timeline_frame) &&
202 (timeline_frame - strip_end < proximity))
205 proximity = timeline_frame - strip_end;
236 float frame_start, channel;
247 int timeline_frame =
int(scene->r.cfra);
367 if (seq ==
nullptr) {
407 if (seq ==
nullptr) {
428 if (
STR_ELEM(prop_id,
"frame_start",
"frame_end")) {
447 if (sce_seq ==
nullptr) {
458 load_data.
scene = sce_seq;
500 ot->
name =
"Add Scene Strip";
501 ot->
idname =
"SEQUENCER_OT_scene_strip_add";
502 ot->
description =
"Add a strip to the sequencer using a Blender scene as a source";
520 {
SCE_COPY_NEW,
"NEW", 0,
"New",
"Add new Strip with a new empty Scene with default settings"},
525 "Add a new Strip, with an empty scene, and copy settings from the current scene"},
530 "Add a Strip and link in the collections from the current scene (shallow copy)"},
535 "Add a Strip and make a full copy of the current scene"},
536 {0,
nullptr, 0,
nullptr,
nullptr},
554 if (scene_new ==
nullptr) {
557 load_data.
scene = scene_new;
590 bool has_scene_or_no_context =
false;
593 has_scene_or_no_context =
true;
599 has_scene_or_no_context =
true;
603 if (has_scene_or_no_context) {
605 for (
int i = 0; i <
ARRAY_SIZE(values); i++) {
619 ot->
name =
"Add Strip with a new Scene";
620 ot->
idname =
"SEQUENCER_OT_scene_strip_add_new";
621 ot->
description =
"Create a new Strip and assign a new Scene as source";
646 if (clip ==
nullptr) {
657 load_data.
clip = clip;
683 ot->
name =
"Add MovieClip Strip";
684 ot->
idname =
"SEQUENCER_OT_movieclip_strip_add";
710 if (mask ==
nullptr) {
747 ot->
name =
"Add Mask Strip";
748 ot->
idname =
"SEQUENCER_OT_mask_strip_add";
782 return !
STR_ELEM(prop_id,
"filepath",
"directory",
"filename");
794 switch (sl->spacetype) {
817 for (
Sequence *seq : movie_strips) {
835 if (
ELEM(
nullptr, seq_movie, seq_sound)) {
861 bool has_seq_overlap =
false;
876 if (seq_movie ==
nullptr) {
883 added_strips.
append(seq_movie);
888 added_strips.
append(seq_sound);
895 if (overlap_shuffle_override) {
908 r_movie_strips.
add(seq_movie);
913 if (overlap_shuffle_override) {
914 if (has_seq_overlap) {
916 const bool use_sync_markers = (((
SpaceSeq *)area->spacedata.first)->flag &
938 if (seq_movie ==
nullptr) {
945 added_strips.
append(seq_movie);
948 added_strips.
append(seq_sound);
957 if (overlap_shuffle_override) {
958 bool has_seq_overlap =
false;
963 if (has_seq_overlap) {
965 const bool use_sync_markers = (((
SpaceSeq *)area->spacedata.first)->flag &
979 r_movie_strips.
add(seq_movie);
1080 ot->
name =
"Add Movie Strip";
1081 ot->
idname =
"SEQUENCER_OT_movie_strip_add";
1109 "Set Scene Frame Rate",
1110 "Set frame rate of the current scene to the frame rate of the movie");
1129 if (seq ==
nullptr) {
1148 if (seq ==
nullptr) {
1170 if (tot_files > 1) {
1211 ot->
name =
"Add Sound Strip";
1212 ot->
idname =
"SEQUENCER_OT_sound_strip_add";
1251 minframe =
min_ii(minframe, frame);
1252 maxframe =
max_ii(maxframe, frame);
1262 maxframe = minframe + 1;
1265 *r_minframe = minframe;
1266 *r_numdigits = numdigits;
1268 return maxframe - minframe + 1;
1274 char *filename =
nullptr;
1287 for (
int i = 0; i <
len; i++, se++) {
1288 STRNCPY(filename_stripped, filename);
1289 BLI_path_frame(filename_stripped,
sizeof(filename_stripped), minframe + i, numdigits);
1298 const int start_frame,
1304 if (use_placeholders) {
1315 const int numdigits)
1322 if (use_placeholders) {
1327 size_t strip_frame = 0;
1346 int minframe, numdigits;
1348 op, load_data.
start_frame, &minframe, &numdigits);
1409 ot->
name =
"Add Image Strip";
1410 ot->
idname =
"SEQUENCER_OT_image_strip_add";
1411 ot->
description =
"Add an image or image sequence to the sequencer";
1438 "Use placeholders for missing frames of the strip");
1445 const char *error_msg;
1466 if (seq1 !=
nullptr) {
1519 return TIP_(
"Add a crossfade transition to the sequencer");
1521 return TIP_(
"Add an add effect strip to the sequencer");
1523 return TIP_(
"Add a subtract effect strip to the sequencer");
1525 return TIP_(
"Add an alpha over effect strip to the sequencer");
1527 return TIP_(
"Add an alpha under effect strip to the sequencer");
1529 return TIP_(
"Add a gamma cross transition to the sequencer");
1531 return TIP_(
"Add a multiply effect strip to the sequencer");
1533 return TIP_(
"Add an alpha over drop effect strip to the sequencer");
1535 return TIP_(
"Add a wipe transition to the sequencer");
1537 return TIP_(
"Add a glow effect strip to the sequencer");
1539 return TIP_(
"Add a transform effect strip to the sequencer");
1541 return TIP_(
"Add a color strip to the sequencer");
1543 return TIP_(
"Add a speed effect strip to the sequencer");
1545 return TIP_(
"Add a multicam selector effect strip to the sequencer");
1547 return TIP_(
"Add an adjustment layer effect strip to the sequencer");
1549 return TIP_(
"Add a gaussian blur effect strip to the sequencer");
1551 return TIP_(
"Add a text strip to the sequencer");
1553 return TIP_(
"Add a color mix effect strip to the sequencer");
1567 ot->
name =
"Add Effect Strip";
1568 ot->
idname =
"SEQUENCER_OT_effect_strip_add";
1569 ot->
description =
"Add an effect to the sequencer, most are applied on top of existing strips";
1586 "Sequencer effect type");
1597 "Initialize the strip with this color",
bScreen * CTX_wm_screen(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
@ SCE_COPY_LINK_COLLECTION
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
bool void BLI_path_frame_strip(char *path, char *r_ext, size_t ext_maxncpy) ATTR_NONNULL(1
void void void const char * BLI_path_basename(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
#define BLI_path_join(...)
bool BLI_path_frame_get(const char *path, int *r_frame, int *r_digits_len) ATTR_NONNULL(1
void void BLI_path_split_dir_part(const char *filepath, char *dir, size_t dir_maxncpy) ATTR_NONNULL(1
bool void BLI_path_rel(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1)
bool BLI_path_frame(char *path, size_t path_maxncpy, int frame, int digits) ATTR_NONNULL(1)
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
#define BLT_I18NCONTEXT_ID_SEQUENCE
#define BLT_I18NCONTEXT_ID_MOVIECLIP
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ ID_RECALC_SEQUENCER_STRIPS
#define SEQ_HAS_PATH(_seq)
@ SEQ_PROXY_SKIP_EXISTING
@ SEQ_VIEW_SEQUENCE_PREVIEW
@ USER_SEQ_PROXY_SETUP_AUTOMATIC
@ USER_SEQ_ED_CONNECT_STRIPS_BY_DEFAULT
Scene * ED_scene_sequencer_add(Main *bmain, bContext *C, eSceneCopyMethod method, bool assign_strip)
void ED_area_tag_redraw(ScrArea *area)
bool ED_operator_sequencer_active_editable(bContext *C)
bool ED_sequencer_deselect_all(Scene *scene)
Read Guarded memory(de)allocation.
#define RNA_BEGIN(sptr, itemptr, propname)
#define RNA_PROP_BEGIN(sptr, itemptr, prop)
const EnumPropertyItem * RNA_movieclip_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
const EnumPropertyItem * RNA_scene_without_active_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
const EnumPropertyItem * RNA_mask_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
@ SEQ_LOAD_SET_VIEW_TRANSFORM
@ SEQ_LOAD_MOVIE_SYNC_FPS
constexpr int SEQ_MAX_CHANNELS
@ UI_BUT_LABEL_ALIGN_NONE
eAutoPropButsReturn uiDefAutoButsRNA(uiLayout *layout, PointerRNA *ptr, bool(*check_prop)(PointerRNA *ptr, PropertyRNA *prop, void *user_data), void *user_data, PropertyRNA *prop_activate_init, eButLabelAlign label_align, bool compact)
void uiTemplateImageFormatViews(uiLayout *layout, PointerRNA *imfptr, PointerRNA *ptr)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void append(const T &value)
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
int SEQ_effect_get_num_inputs(int seq_type)
static const IMB_Proxy_Size proxy_sizes[]
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float4 mask(const int4 mask, const float4 a)
bool SEQ_proxy_rebuild_context(Main *bmain, Depsgraph *depsgraph, Scene *scene, Sequence *seq, GSet *file_list, ListBase *queue, bool build_only_on_bad_performance)
void SEQ_proxy_set(Sequence *seq, bool value)
int SEQ_rendersize_to_proxysize(int render_size)
ProxyJob * ED_seq_proxy_job_get(const bContext *C, wmJob *wm_job)
wmJob * ED_seq_proxy_wm_job_get(const bContext *C)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_collection_is_empty(PointerRNA *ptr, const char *name)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
int RNA_int_get(PointerRNA *ptr, const char *name)
char * RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen, int *r_len)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
std::string RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const char * RNA_property_identifier(const PropertyRNA *prop)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_def_float_color(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
Editing * SEQ_editing_ensure(Scene *scene)
eSeqImageFitMethod SEQ_tool_settings_fit_method_get(Scene *scene)
void SEQ_tool_settings_fit_method_set(Scene *scene, eSeqImageFitMethod fit_method)
Editing * SEQ_editing_get(const Scene *scene)
static bool sequencer_add_movie_single_strip(bContext *C, wmOperator *op, SeqLoadData *load_data, blender::VectorSet< Sequence * > &r_movie_strips)
void SEQUENCER_OT_movie_strip_add(wmOperatorType *ot)
static int sequencer_add_movie_strip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void sequencer_add_sound_multiple_strips(bContext *C, wmOperator *op, SeqLoadData *load_data)
static void load_data_init_from_operator(SeqLoadData *load_data, bContext *C, wmOperator *op)
static int sequencer_add_scene_strip_new_invoke(bContext *C, wmOperator *op, const wmEvent *)
static int sequencer_add_effect_strip_exec(bContext *C, wmOperator *op)
static std::string sequencer_add_effect_strip_get_description(bContext *, wmOperatorType *, PointerRNA *ptr)
static bool sequencer_add_draw_check_fn(PointerRNA *, PropertyRNA *prop, void *)
static int sequencer_add_mask_strip_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_mask_strip_add(wmOperatorType *ot)
static IMB_Proxy_Size seq_get_proxy_size_flags(bContext *C)
static void sequencer_generic_invoke_path__internal(bContext *C, wmOperator *op, const char *identifier)
static int sequencer_add_mask_strip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void sequencer_generic_invoke_xy__internal(bContext *C, wmOperator *op, int flag, int type, const wmEvent *event=nullptr)
static EnumPropertyItem strip_new_scene_items[]
static void sequencer_add_init(bContext *, wmOperator *op)
static void sequencer_add_cancel(bContext *, wmOperator *op)
static int sequencer_add_image_strip_calculate_length(wmOperator *op, const int start_frame, int *minframe, int *numdigits)
void SEQUENCER_OT_sound_strip_add(wmOperatorType *ot)
#define SEQPROP_VIEW_TRANSFORM
static const EnumPropertyItem * strip_new_sequencer_enum_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static const EnumPropertyItem scale_fit_methods[]
static bool sequencer_add_sound_single_strip(bContext *C, wmOperator *op, SeqLoadData *load_data)
static void sequencer_add_movie_multiple_strips(bContext *C, wmOperator *op, SeqLoadData *load_data, blender::VectorSet< Sequence * > &r_movie_strips)
static int sequencer_add_movieclip_strip_exec(bContext *C, wmOperator *op)
static int sequencer_add_scene_strip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_add_scene_strip_exec(bContext *C, wmOperator *op)
static void sequencer_generic_props__internal(wmOperatorType *ot, int flag)
static void sequencer_add_image_strip_load_files(wmOperator *op, Scene *scene, Sequence *seq, SeqLoadData *load_data, const int minframe, const int numdigits)
static int sequencer_add_movieclip_strip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void seq_load_apply_generic_options(bContext *C, wmOperator *op, Sequence *seq)
static void sequencer_file_drop_channel_frame_set(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_add_sound_strip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_add_scene_strip_new_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_movieclip_strip_add(wmOperatorType *ot)
void SEQUENCER_OT_image_strip_add(wmOperatorType *ot)
void SEQUENCER_OT_effect_strip_add(wmOperatorType *ot)
#define SEQPROP_STARTFRAME
static bool seq_load_apply_generic_options_only_test_overlap(bContext *C, wmOperator *op, Sequence *seq)
static int sequencer_add_sound_strip_exec(bContext *C, wmOperator *op)
void sequencer_image_seq_reserve_frames(wmOperator *op, StripElem *se, int len, int minframe, int numdigits)
static void seq_build_proxy(bContext *C, blender::Span< Sequence * > movie_strips)
static void sequencer_add_draw(bContext *, wmOperator *op)
#define SEQPROP_PLAYBACK_RATE
static bool seq_effect_add_properties_poll(const bContext *, wmOperator *op, const PropertyRNA *prop)
void SEQUENCER_OT_scene_strip_add(wmOperatorType *ot)
static int sequencer_generic_invoke_xy_guess_channel(bContext *C, int type)
static void sequencer_add_movie_sync_sound_strip(Main *bmain, Scene *scene, Sequence *seq_movie, Sequence *seq_sound, SeqLoadData *load_data)
static int sequencer_add_image_strip_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_scene_strip_add_new(wmOperatorType *ot)
#define SEQPROP_FIT_METHOD
int sequencer_image_seq_get_minmax_frame(wmOperator *op, int sfra, int *r_minframe, int *r_numdigits)
static int sequencer_add_image_strip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_add_movie_strip_exec(bContext *C, wmOperator *op)
static void sequencer_disable_one_time_properties(bContext *C, wmOperator *op)
static int sequencer_add_effect_strip_invoke(bContext *C, wmOperator *op, const wmEvent *)
int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequence **r_selseq1, Sequence **r_selseq2, const char **r_error_str)
const EnumPropertyItem sequencer_prop_effect_types[]
#define DEFAULT_IMG_STRIP_LENGTH
Sequence * SEQ_add_scene_strip(Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
Sequence * SEQ_add_movieclip_strip(Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
Sequence * SEQ_add_effect_strip(Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
void SEQ_add_sound_av_sync(Main *, Scene *, Sequence *, SeqLoadData *)
Sequence * SEQ_add_mask_strip(Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
Sequence * SEQ_add_movie_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
void SEQ_add_image_set_directory(Sequence *seq, const char *dirpath)
void SEQ_add_image_init_alpha_mode(Sequence *seq)
void SEQ_add_image_load_file(Scene *scene, Sequence *seq, size_t strip_frame, const char *filename)
Sequence * SEQ_add_sound_strip(Main *, Scene *, ListBase *, SeqLoadData *)
Sequence * SEQ_add_image_strip(Main *bmain, Scene *scene, ListBase *seqbase, SeqLoadData *load_data)
void SEQ_connect(Sequence *seq1, Sequence *seq2)
void SEQ_select_active_set(Scene *scene, Sequence *seq)
Sequence * SEQ_select_active_get(const Scene *scene)
void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
int SEQ_time_left_handle_frame_get(const Scene *, const Sequence *seq)
int SEQ_time_right_handle_frame_get(const Scene *scene, const Sequence *seq)
struct SeqLoadData::@1364 effect
eSeqImageFitMethod fit_method
bool adjust_playback_rate
Stereo3dFormat * stereo3d_format
struct SeqLoadData::@1363 image
ImageFormatData im_format
bool(* poll_property)(const bContext *C, wmOperator *op, const PropertyRNA *prop) ATTR_WARN_UNUSED_RESULT
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
std::string(* get_description)(bContext *C, wmOperatorType *ot, PointerRNA *ptr)
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void(* ui)(bContext *C, wmOperator *op)
void(* cancel)(bContext *C, wmOperator *op)
struct ReportList * reports
void WM_event_add_fileselect(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
bool WM_jobs_is_running(const wmJob *wm_job)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
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)
int WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *)