Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/interface/interface.c')
-rw-r--r--source/blender/editors/interface/interface.c143
1 files changed, 57 insertions, 86 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 9644e6e0238..e53dfa83867 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -1168,21 +1168,16 @@ void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, const bool do_str
* \{ */
static bool ui_but_event_operator_string_from_operator(const bContext *C,
- wmOperatorCallParams *op_call_params,
+ uiBut *but,
char *buf,
const size_t buf_len)
{
- BLI_assert(op_call_params->optype != NULL);
+ BLI_assert(but->optype != NULL);
bool found = false;
- IDProperty *prop = (op_call_params->opptr) ? op_call_params->opptr->data : NULL;
-
- if (WM_key_event_operator_string(C,
- op_call_params->optype->idname,
- op_call_params->opcontext,
- prop,
- true,
- buf,
- buf_len)) {
+ IDProperty *prop = (but->opptr) ? but->opptr->data : NULL;
+
+ if (WM_key_event_operator_string(
+ C, but->optype->idname, but->opcontext, prop, true, buf, buf_len)) {
found = true;
}
return found;
@@ -1259,22 +1254,15 @@ static bool ui_but_event_operator_string_from_panel(const bContext *C,
return found;
}
-static bool ui_but_event_operator_string(
- const bContext *C, uiBut *but, uiButExtraOpIcon *extra_icon, char *buf, const size_t buf_len)
+static bool ui_but_event_operator_string(const bContext *C,
+ uiBut *but,
+ char *buf,
+ const size_t buf_len)
{
bool found = false;
- wmOperatorType *extra_icon_optype = UI_but_extra_operator_icon_optype_get(extra_icon);
- if (extra_icon_optype) {
- found = ui_but_event_operator_string_from_operator(C, extra_icon->optype_params, buf, buf_len);
- }
- else if (but->optype != NULL) {
- found = ui_but_event_operator_string_from_operator(
- C,
- &(wmOperatorCallParams){
- .optype = but->optype, .opptr = but->opptr, .opcontext = but->opcontext},
- buf,
- buf_len);
+ if (but->optype != NULL) {
+ found = ui_but_event_operator_string_from_operator(C, but, buf, buf_len);
}
else if (UI_but_menutype_get(but) != NULL) {
found = ui_but_event_operator_string_from_menu(C, but, buf, buf_len);
@@ -1577,7 +1565,7 @@ static void ui_menu_block_set_keymaps(const bContext *C, uiBlock *block)
continue;
}
- if (ui_but_event_operator_string(C, but, NULL, buf, sizeof(buf))) {
+ if (ui_but_event_operator_string(C, but, buf, sizeof(buf))) {
ui_but_add_shortcut(but, buf, false);
}
else if (ui_but_event_property_operator_string(C, but, buf, sizeof(buf))) {
@@ -1618,12 +1606,12 @@ typedef enum PredefinedExtraOpIconType {
PREDEFINED_EXTRA_OP_ICON_EYEDROPPER,
} PredefinedExtraOpIconType;
-static uiButExtraOpIcon *ui_but_extra_operator_icon_add_ptr(uiBut *but,
- wmOperatorType *optype,
- short opcontext,
- int icon)
+static PointerRNA *ui_but_extra_operator_icon_add_ptr(uiBut *but,
+ wmOperatorType *optype,
+ short opcontext,
+ int icon)
{
- uiButExtraOpIcon *extra_op_icon = MEM_callocN(sizeof(*extra_op_icon), __func__);
+ uiButExtraOpIcon *extra_op_icon = MEM_mallocN(sizeof(*extra_op_icon), __func__);
extra_op_icon->icon = (BIFIconID)icon;
extra_op_icon->optype_params = MEM_callocN(sizeof(*extra_op_icon->optype_params),
@@ -1638,15 +1626,13 @@ static uiButExtraOpIcon *ui_but_extra_operator_icon_add_ptr(uiBut *but,
BLI_addtail(&but->extra_op_icons, extra_op_icon);
- return extra_op_icon;
+ return extra_op_icon->optype_params->opptr;
}
static void ui_but_extra_operator_icon_free(uiButExtraOpIcon *extra_icon)
{
- if (extra_icon->optype_params->opptr) {
- WM_operator_properties_free(extra_icon->optype_params->opptr);
- MEM_freeN(extra_icon->optype_params->opptr);
- }
+ WM_operator_properties_free(extra_icon->optype_params->opptr);
+ MEM_freeN(extra_icon->optype_params->opptr);
MEM_freeN(extra_icon->optype_params);
MEM_freeN(extra_icon);
}
@@ -1659,25 +1645,18 @@ void ui_but_extra_operator_icons_free(uiBut *but)
BLI_listbase_clear(&but->extra_op_icons);
}
-uiButExtraOpIcon *UI_but_extra_operator_icon_add(uiBut *but,
- const char *opname,
- short opcontext,
- int icon)
+PointerRNA *UI_but_extra_operator_icon_add(uiBut *but,
+ const char *opname,
+ short opcontext,
+ int icon)
{
wmOperatorType *optype = WM_operatortype_find(opname, false);
- BLI_assert(optype);
- return ui_but_extra_operator_icon_add_ptr(but, optype, opcontext, icon);
-}
-
-PointerRNA *UI_but_extra_operator_icon_opptr_get(uiButExtraOpIcon *extra_icon)
-{
- return extra_icon->optype_params->opptr;
-}
+ if (optype) {
+ return ui_but_extra_operator_icon_add_ptr(but, optype, opcontext, icon);
+ }
-wmOperatorType *UI_but_extra_operator_icon_optype_get(uiButExtraOpIcon *extra_icon)
-{
- return extra_icon ? extra_icon->optype_params->optype : NULL;
+ return NULL;
}
static bool ui_but_icon_extra_is_visible_text_clear(const uiBut *but)
@@ -6840,7 +6819,7 @@ void UI_but_func_hold_set(uiBut *but, uiButHandleHoldFunc func, void *argN)
but->hold_argN = argN;
}
-void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_icon, ...)
+void UI_but_string_info_get(bContext *C, uiBut *but, ...)
{
va_list args;
uiStringInfo *si;
@@ -6849,19 +6828,13 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
int totitems;
bool free_items = false;
- wmOperatorType *extra_icon_optype = UI_but_extra_operator_icon_optype_get(extra_icon);
- wmOperatorType *optype = extra_icon ? extra_icon_optype : but->optype;
-
- /* Don't query RNA data when the extra-icon overrides the button. */
- PropertyRNA *rnaprop = extra_icon ? NULL : but->rnaprop;
-
- va_start(args, extra_icon);
+ va_start(args, but);
while ((si = (uiStringInfo *)va_arg(args, void *))) {
uiStringInfoType type = si->type;
char *tmp = NULL;
if (type == BUT_GET_LABEL) {
- if (but->str && but->str[0] && !extra_icon) {
+ if (but->str && but->str[0]) {
const char *str_sep;
size_t str_len;
@@ -6891,16 +6864,16 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
}
if (type == BUT_GET_RNAPROP_IDENTIFIER) {
- if (rnaprop) {
- tmp = BLI_strdup(RNA_property_identifier(rnaprop));
+ if (but->rnaprop) {
+ tmp = BLI_strdup(RNA_property_identifier(but->rnaprop));
}
}
else if (type == BUT_GET_RNASTRUCT_IDENTIFIER) {
- if (rnaprop && but->rnapoin.data) {
+ if (but->rnaprop && but->rnapoin.data) {
tmp = BLI_strdup(RNA_struct_identifier(but->rnapoin.type));
}
- else if (optype) {
- tmp = BLI_strdup(optype->idname);
+ else if (but->optype) {
+ tmp = BLI_strdup(but->optype->idname);
}
else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
MenuType *mt = UI_but_menutype_get(but);
@@ -6916,25 +6889,23 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
}
}
else if (ELEM(type, BUT_GET_RNA_LABEL, BUT_GET_RNA_TIP)) {
- if (rnaprop) {
+ if (but->rnaprop) {
if (type == BUT_GET_RNA_LABEL) {
- tmp = BLI_strdup(RNA_property_ui_name(rnaprop));
+ tmp = BLI_strdup(RNA_property_ui_name(but->rnaprop));
}
else {
- const char *t = RNA_property_ui_description(rnaprop);
+ const char *t = RNA_property_ui_description(but->rnaprop);
if (t && t[0]) {
tmp = BLI_strdup(t);
}
}
}
- else if (optype) {
- PointerRNA *opptr = extra_icon_optype ? UI_but_extra_operator_icon_opptr_get(extra_icon) :
- but->opptr;
+ else if (but->optype) {
if (type == BUT_GET_RNA_LABEL) {
- tmp = BLI_strdup(WM_operatortype_name(optype, opptr));
+ tmp = BLI_strdup(WM_operatortype_name(but->optype, but->opptr));
}
else {
- tmp = WM_operatortype_description(C, optype, opptr);
+ tmp = WM_operatortype_description(C, but->optype, but->opptr);
}
}
else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN, UI_BTYPE_POPOVER)) {
@@ -6986,11 +6957,11 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
}
else if (type == BUT_GET_RNA_LABEL_CONTEXT) {
const char *_tmp = BLT_I18NCONTEXT_DEFAULT;
- if (rnaprop) {
- _tmp = RNA_property_translation_context(rnaprop);
+ if (but->rnaprop) {
+ _tmp = RNA_property_translation_context(but->rnaprop);
}
- else if (optype) {
- _tmp = RNA_struct_translation_context(optype->srna);
+ else if (but->optype) {
+ _tmp = RNA_struct_translation_context(but->optype->srna);
}
else if (ELEM(but->type, UI_BTYPE_MENU, UI_BTYPE_PULLDOWN)) {
MenuType *mt = UI_but_menutype_get(but);
@@ -7009,16 +6980,16 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
int value = 0;
/* get the enum property... */
- if (rnaprop && RNA_property_type(rnaprop) == PROP_ENUM) {
+ if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_ENUM) {
/* enum property */
ptr = &but->rnapoin;
- prop = rnaprop;
+ prop = but->rnaprop;
value = (ELEM(but->type, UI_BTYPE_ROW, UI_BTYPE_TAB)) ? (int)but->hardmax :
(int)ui_but_value_get(but);
}
- else if (optype) {
- PointerRNA *opptr = extra_icon_optype ? UI_but_extra_operator_icon_opptr_get(extra_icon) :
- UI_but_operator_ptr_get(but);
+ else if (but->optype) {
+ PointerRNA *opptr = UI_but_operator_ptr_get(but);
+ wmOperatorType *ot = but->optype;
/* so the context is passed to itemf functions */
WM_operator_properties_sanitize(opptr, false);
@@ -7028,11 +6999,11 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
* operator menus in the Anim Editors will show tooltips for the different
* operations instead of the meaningless generic operator tooltip
*/
- if (optype->prop && RNA_property_type(optype->prop) == PROP_ENUM) {
- if (RNA_struct_contains_property(opptr, optype->prop)) {
+ if (ot->prop && RNA_property_type(ot->prop) == PROP_ENUM) {
+ if (RNA_struct_contains_property(opptr, ot->prop)) {
ptr = opptr;
- prop = optype->prop;
- value = RNA_property_enum_get(opptr, optype->prop);
+ prop = ot->prop;
+ value = RNA_property_enum_get(opptr, ot->prop);
}
}
}
@@ -7065,7 +7036,7 @@ void UI_but_string_info_get(bContext *C, uiBut *but, uiButExtraOpIcon *extra_ico
else if (type == BUT_GET_OP_KEYMAP) {
if (!ui_block_is_menu(but->block)) {
char buf[128];
- if (ui_but_event_operator_string(C, but, extra_icon, buf, sizeof(buf))) {
+ if (ui_but_event_operator_string(C, but, buf, sizeof(buf))) {
tmp = BLI_strdup(buf);
}
}