33#include "RNA_prototypes.hh"
80 if (r_disabled_hint) {
81 *r_disabled_hint =
"Cannot edit external library data";
86 if (r_disabled_hint) {
87 *r_disabled_hint =
"Cannot edit previews of overridden library data";
92 if (r_disabled_hint) {
93 *r_disabled_hint =
"Data-block does not support previews";
107 const char *disabled_hint =
nullptr;
124 return static_cast<ID *
>(idptr.
data);
141 op->
reports,
RPT_ERROR,
"Failed to set preview: no ID in context (incorrect context?)");
168 ot->name =
"Load Custom Preview";
169 ot->description =
"Choose an image to help identify the data-block visually";
170 ot->idname =
"ED_OT_lib_id_load_custom_preview";
197 ID *
id =
static_cast<ID *
>(idptr.data);
225 const char *disabled_hint =
nullptr;
228 const ID *
id =
static_cast<const ID *
>(idptr.data);
230 const char *iter_disabled_hint =
nullptr;
232 (!additional_condition || additional_condition(
id, &iter_disabled_hint)))
238 if (iter_disabled_hint && !disabled_hint) {
239 disabled_hint = iter_disabled_hint;
287 ot->name =
"Generate Preview";
288 ot->description =
"Create an automatic preview for the selected data-block";
289 ot->idname =
"ED_OT_lib_id_generate_preview";
310 if (object_to_render ==
nullptr) {
313 const char *disabled_hint =
nullptr;
346 ot->name =
"Generate Preview from Object";
347 ot->description =
"Create a preview for this asset by rendering the active object";
348 ot->idname =
"ED_OT_lib_id_generate_preview_from_object";
364 bool has_any_removable =
false;
367 has_any_removable =
true;
371 if (!has_any_removable) {
391 ot->name =
"Remove Preview";
392 ot->description =
"Remove the preview of this data-block";
393 ot->idname =
"ED_OT_lib_id_remove_preview";
422 op->
reports,
RPT_ERROR,
"Incorrect context for running data-block fake user toggling");
448 ot->name =
"Toggle Fake User";
449 ot->description =
"Save this data-block even if it has no users";
450 ot->idname =
"ED_OT_lib_id_fake_user_toggle";
472 op->
reports,
RPT_ERROR,
"Incorrect context for running data-block fake user toggling");
486 ot->name =
"Unlink Data-Block";
487 ot->description =
"Remove a usage of a data-block, clearing the assignment";
488 ot->idname =
"ED_OT_lib_id_unlink";
500 const ID *
id =
static_cast<ID *
>(id_ptr.
data);
509 ID *
id =
static_cast<ID *
>(id_ptr.
data);
512 if (is_system_override) {
532 ot->name =
"Toggle Library Override Editable";
533 ot->description =
"Set if this library override data-block can be edited";
534 ot->idname =
"ED_OT_lib_id_override_editable_toggle";
560 ot->name =
"Flush Edits";
561 ot->description =
"Flush edit data from active editing modes";
562 ot->idname =
"ED_OT_flush_edits";
PointerRNA CTX_data_pointer_get(const bContext *C, const char *member)
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type)
void CTX_wm_operator_poll_msg_set(bContext *C, const char *msg)
Object * CTX_data_active_object(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
bool CTX_data_selected_ids(const bContext *C, blender::Vector< PointerRNA > *list)
bool BKE_id_is_editable(const Main *bmain, const ID *id)
void id_fake_user_set(ID *id)
void id_fake_user_clear(ID *id)
bool BKE_lib_override_library_is_system_defined(const Main *bmain, const ID *id)
void BKE_lib_override_library_id_reset(Main *bmain, ID *id_root, bool do_reset_system_override)
PreviewImage * BKE_previewimg_id_get(const ID *id)
PreviewImage * BKE_previewimg_id_ensure(ID *id)
PreviewImage ** BKE_previewimg_id_get_p(const ID *id)
void BKE_previewimg_id_custom_set(ID *id, const char *filepath)
void BKE_previewimg_clear(PreviewImage *prv)
void BKE_previewimg_id_free(ID *id)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
File and directory operations.
bool BLI_is_file(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define ID_FAKE_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_LINKED(_id)
#define ID_IS_EDITABLE(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ LIBOVERRIDE_FLAG_SYSTEM_DEFINED
bool ED_preview_id_is_supported(const ID *id, const char **r_disabled_hint=nullptr)
void ED_preview_kill_jobs(wmWindowManager *wm, Main *bmain)
void ED_OT_redo(wmOperatorType *ot)
void ED_OT_undo_redo(wmOperatorType *ot)
void ED_OT_undo_push(wmOperatorType *ot)
void ED_OT_undo(wmOperatorType *ot)
void ED_OT_undo_history(wmOperatorType *ot)
bool ED_editors_flush_edits(Main *bmain)
void UI_context_active_but_prop_get_templateID(const bContext *C, PointerRNA *r_ptr, PropertyRNA **r_prop)
void UI_icon_render_id(const bContext *C, Scene *scene, ID *id, enum eIconSizes size, bool use_job)
void UI_icon_render_id_ex(const bContext *C, Scene *scene, ID *id_to_render, const enum eIconSizes size, const bool use_job, PreviewImage *r_preview_image)
#define ND_LIB_OVERRIDE_CHANGED
void append(const T &value)
static bool lib_id_generate_preview_poll(bContext *C)
static wmOperatorStatus lib_id_fake_user_toggle_exec(bContext *C, wmOperator *op)
blender::Vector< PointerRNA > ED_operator_single_id_from_context_as_vec(const bContext *C)
static wmOperatorStatus lib_id_unlink_exec(bContext *C, wmOperator *op)
void ED_operatortypes_edutils()
static wmOperatorStatus lib_id_generate_preview_exec(bContext *C, wmOperator *)
static bool lib_id_batch_editing_preview_poll(bContext *C, blender::FunctionRef< bool(const ID *, const char **r_disabled_hint)> additional_condition=nullptr)
static void ED_OT_lib_id_generate_preview(wmOperatorType *ot)
static void lib_id_batch_edit_previews(bContext *C, blender::FunctionRef< void(ID *)> foreach_id)
static void ED_OT_lib_id_unlink(wmOperatorType *ot)
static bool lib_id_remove_preview_poll(bContext *C)
static wmOperatorStatus lib_id_remove_preview_exec(bContext *C, wmOperator *)
static wmOperatorStatus ed_flush_edits_exec(bContext *C, wmOperator *)
static wmOperatorStatus lib_id_generate_preview_from_object_exec(bContext *C, wmOperator *)
static void ED_OT_lib_id_generate_preview_from_object(wmOperatorType *ot)
static void ED_OT_lib_id_remove_preview(wmOperatorType *ot)
static wmOperatorStatus lib_id_load_custom_preview_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void ED_OT_flush_edits(wmOperatorType *ot)
static bool lib_id_preview_editing_poll_ex(const ID *id, const char **r_disabled_hint)
static wmOperatorStatus lib_id_load_custom_preview_exec(bContext *C, wmOperator *op)
static ID * lib_id_load_custom_preview_id_get(bContext *C, const wmOperator *op)
static bool lib_id_generate_preview_from_object_poll(bContext *C)
static void ED_OT_lib_id_override_editable_toggle(wmOperatorType *ot)
static bool lib_id_override_editable_toggle_poll(bContext *C)
static bool lib_id_preview_editing_poll(bContext *C)
static void ED_OT_lib_id_load_custom_preview(wmOperatorType *ot)
static void ED_OT_lib_id_fake_user_toggle(wmOperatorType *ot)
static wmOperatorStatus lib_id_override_editable_toggle_exec(bContext *C, wmOperator *)
blender::Vector< PointerRNA > ED_operator_get_ids_from_context_as_vec(const bContext *C)
void storage_tag_main_data_dirty()
bool RNA_struct_is_ID(const StructRNA *type)
void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr_value, ReportList *reports)
const PointerRNA PointerRNA_NULL
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
struct ReportList * reports
void WM_main_add_notifier(uint type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
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_operatortype_append(void(*opfunc)(wmOperatorType *))
wmOperatorStatus WM_operator_filesel(bContext *C, wmOperator *op, const wmEvent *)