24#include "RNA_prototypes.hh"
40#ifdef USE_OP_RESET_BUT
41static void ui_layout_operator_buts__reset_cb(
bContext * ,
void *op_pt,
void * )
99 row = &layout->
row(
true);
100 row->
menu(
"WM_MT_operator_presets", std::nullopt, ICON_NONE);
103 op_ptr = op_ptr = row->
op(
125 user_data.
flag = layout_flags;
150#ifdef USE_OP_RESET_BUT
159 block =
col->block();
172 TIP_(
"Reset operator defaults"));
181 for (
const std::unique_ptr<uiBut> &but : block->
buttons) {
210 bool *r_has_advanced)
215 C, macro_op, layout, label_align, layout_flags, r_has_advanced);
221 C, op, layout, label_align, layout_flags);
223 if (r_has_advanced) {
224 *r_has_advanced =
true;
246 user_data.
flag = layout_flags;
250 bool all_booleans =
true;
261 all_booleans =
false;
266 if (all_booleans ==
false) {
300 layout->
op(
"SCREEN_OT_repeat_last",
308 int layout_flags = 0;
309 if (block->
panel ==
nullptr) {
313 bool has_advanced =
false;
323 layout->
op(
"SCREEN_OT_redo_last",
IFACE_(
"More..."), ICON_NONE);
339 op->
ptr = MEM_new<PointerRNA>(
"wmOperatorPtrRNA");
341 *op->
ptr = *properties;
349 layout->
label(label, ICON_NONE);
353 row->
popover(
C,
"WM_PT_operator_presets",
"", ICON_PRESET);
354 PointerRNA op_ptr = row->
op(
"COLLECTION_OT_exporter_export",
"", ICON_EXPORT);
363 const std::string &filename)
367 col->use_property_split_set(
true);
368 col->use_property_decorate_set(
false);
375 std::string placeholder =
"//" + filename;
376 col->prop(&exporter_ptr,
383 placeholder.c_str());
416 static const uiListType *exporter_item_list = []() {
429 exporter_item_list->
idname,
434 "active_exporter_index",
443 col->menu(
"COLLECTION_MT_exporter_add",
"", ICON_ADD);
444 PointerRNA op_ptr =
col->op(
"COLLECTION_OT_exporter_remove",
"", ICON_REMOVE);
448 op_ptr =
col->op(
"COLLECTION_OT_exporter_move",
"", ICON_TRIA_UP);
450 op_ptr =
col->op(
"COLLECTION_OT_exporter_move",
"", ICON_TRIA_DOWN);
454 col->op(
"COLLECTION_OT_export_all", std::nullopt, ICON_EXPORT);
465 &collection->
id, &RNA_CollectionExport,
data);
470 std::string label = std::string(
IFACE_(
"Undefined")) +
" " +
data->fh_idname;
484 &collection->
id,
ot->srna,
data->export_properties);
489 std::string label(fh->
label);
wmWindow * CTX_wm_window(const bContext *C)
Collection * CTX_data_collection(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define STRNCPY_UTF8(dst, src)
Object groups, one object can be in many groups at once.
void ED_undo_operator_repeat_cb_evt(bContext *C, void *arg_op, int arg_unused)
#define RNA_STRUCT_BEGIN(sptr, prop)
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
void UI_but_flag_disable(uiBut *but, int flag)
uiBut * uiDefIconTextBut(uiBlock *block, uiButTypeWithPointerType but_and_ptr_type, int retval, int icon, blender::StringRef str, int x, int y, short width, short height, void *poin, std::optional< blender::StringRef > tip)
@ UI_PROP_BUTS_ANY_FAILED_CHECK
@ UI_PROP_BUTS_NONE_ADDED
void UI_but_focus_on_enter_event(wmWindow *win, uiBut *but)
void UI_block_lock_clear(uiBlock *block)
void UI_block_func_handle_set(uiBlock *block, uiBlockHandleFunc func, void *arg)
@ 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 uiTemplateList(uiLayout *layout, const bContext *C, const char *listtype_name, const char *list_id, PointerRNA *dataptr, blender::StringRefNull propname, PointerRNA *active_dataptr, const char *active_propname, const char *item_dyntip_propname, int rows, int maxrows, int layout_type, int columns, enum uiTemplateListFlags flags)
void UI_block_set_active_operator(uiBlock *block, wmOperator *op, const bool free)
@ UI_TEMPLATE_OP_PROPS_HIDE_ADVANCED
@ UI_TEMPLATE_OP_PROPS_SHOW_EMPTY
@ UI_TEMPLATE_OP_PROPS_ALLOW_UNDO_PUSH
@ UI_TEMPLATE_OP_PROPS_SHOW_TITLE
@ UI_TEMPLATE_OP_PROPS_HIDE_PRESETS
@ UI_TEMPLATE_OP_PROPS_COMPACT
@ UI_TEMPLATE_OP_PROPS_NO_SPLIT_LAYOUT
void UI_block_lock_set(uiBlock *block, bool val, const char *lockstr)
@ UI_TEMPLATE_LIST_FLAG_NONE
#define OP_PROP_TAG_ADVANCED
BMesh const char void * data
static bool ui_layout_operator_buts_poll_property(PointerRNA *, PropertyRNA *prop, void *user_data)
static eAutoPropButsReturn template_operator_property_buts_draw_single(const bContext *C, wmOperator *op, uiLayout *layout, const eButLabelAlign label_align, int layout_flags)
static void draw_export_properties(bContext *C, uiLayout *layout, PointerRNA &exporter_ptr, wmOperator *op, const std::string &filename)
static void draw_exporter_item(uiList *, const bContext *, uiLayout *layout, PointerRNA *, PointerRNA *itemptr, int, PointerRNA *, const char *, int, int)
void uiTemplateOperatorPropertyButs(const bContext *C, uiLayout *layout, wmOperator *op, eButLabelAlign label_align, short flag)
static void template_operator_property_buts_draw_recursive(const bContext *C, wmOperator *op, uiLayout *layout, const eButLabelAlign label_align, int layout_flags, bool *r_has_advanced)
void uiTemplateCollectionExporters(uiLayout *layout, bContext *C)
static wmOperator * minimal_operator_create(wmOperatorType *ot, PointerRNA *properties)
void uiTemplateOperatorRedoProperties(uiLayout *layout, const bContext *C)
static bool ui_layout_operator_properties_only_booleans(const bContext *C, wmWindowManager *wm, wmOperator *op, int layout_flags)
static void draw_export_controls(bContext *C, uiLayout *layout, const std::string &label, int index, bool valid)
void * MEM_callocN(size_t len, const char *str)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_group(StringRef prop_name, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_GROUP.
FileHandlerType * file_handler_find(StringRef idname)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
PropertyType RNA_property_type(PropertyRNA *prop)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
int RNA_property_flag(PropertyRNA *prop)
int RNA_property_tags(PropertyRNA *prop)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
PointerRNA RNA_id_pointer_create(ID *id)
int active_exporter_index
std::string get_default_filename(StringRefNull name)
char label[OP_MAX_TYPENAME]
char export_operator[OP_MAX_TYPENAME]
blender::Vector< std::unique_ptr< uiBut > > buttons
void use_property_decorate_set(bool is_sep)
void popover(const bContext *C, PanelType *pt, std::optional< blender::StringRef > name_opt, int icon)
PanelLayout panel_prop(const bContext *C, PointerRNA *open_prop_owner, blender::StringRefNull open_prop_name)
void label(blender::StringRef name, int icon)
uiLayout & column(bool align)
uiLayout & row(bool align)
void emboss_set(blender::ui::EmbossType emboss)
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void menu(MenuType *mt, std::optional< blender::StringRef > name, int icon)
void use_property_split_set(bool value)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
char idname[BKE_ST_MAXNAME]
uiListDrawItemFunc draw_item
bool(* poll_property)(const bContext *C, wmOperator *op, const PropertyRNA *prop) ATTR_WARN_UNUSED_RESULT
void(* ui)(bContext *C, wmOperator *op)
struct wmOperatorType * type
bool WM_operator_repeat_check(const bContext *, wmOperator *op)
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_operator_properties_reset(wmOperator *op)
wmOperator * WM_operator_last_redo(const bContext *C)
bool WM_uilisttype_add(uiListType *ult)