[Bf-blender-cvs] [1cd405850c9] soc-2020-custom-menus: Merge : fix conflicts

TempoDev noreply at git.blender.org
Mon Jul 20 03:52:46 CEST 2020


Commit: 1cd405850c91f83cf8ebf5861a021b9fff93f91d
Author: TempoDev
Date:   Mon Jul 20 03:52:34 2020 +0200
Branches: soc-2020-custom-menus
https://developer.blender.org/rB1cd405850c91f83cf8ebf5861a021b9fff93f91d

Merge : fix conflicts

===================================================================



===================================================================

diff --cc source/blender/makesrna/intern/rna_userdef.c
index 4ca304dacab,4884b536258..afbcec0ff04
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@@ -1075,525 -1066,11 +1075,530 @@@ static void rna_UserDef_studiolight_lig
    copy_v3_v3(values, sl->light_ambient);
  }
  
 +/* User Menus Functions */
 +
 +static bUserMenu *rna_UserDef_usermenus_get_current(UserDef *userdef, bool ensure)
 +{
 +  const char **contexts_list = CTX_data_list_mode_string();
 +  ListBase *umg_list = &userdef->user_menus;
 +
 +  bUserMenusGroup *umg = userdef->runtime.umg_select;
 +  bUserMenu *bum = NULL;
 +
 +  if (!umg)
 +    return NULL;
 +  if (userdef->runtime.um_space_select > 0 && userdef->runtime.um_context_select >= 0) {
 +    if (ensure) {
 +      bum = BKE_blender_user_menu_ensure(&umg->menus,
 +                                         userdef->runtime.um_space_select,
 +                                         contexts_list[userdef->runtime.um_context_select]);
 +    }
 +    else {
 +      bum = BKE_blender_user_menu_find(&umg->menus,
 +                                       userdef->runtime.um_space_select,
 +                                       contexts_list[userdef->runtime.um_context_select]);
 +    }
 +  }
 +  return bum;
 +}
 +
 +/*static bUserMenuItem *rna_UserDef_usermenus_get_current_item(UserDef *userdef)
 +{
 +  int id = userdef->runtime.um_item_select - 1;
 +  if (id < 0) return NULL;
 +
 +  bUserMenu *bum = rna_UserDef_usermenus_get_current(userdef, false);
 +  if (bum) {
 +
 +    ListBase *lb = &bum->items;
 +    int i = 0;
 +    for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
 +      if (i == id)
 +        return umi;
 +    }
 +  }
 +
 +  return NULL;
 +}*/
 +
 +static void rna_UserDef_usermenus_set_group(UserDef *userdef, bUserMenusGroup *umg)
 +{
 +  userdef->runtime.umg_select = umg;
 +}
 +
 +static void rna_UserDef_usermenus_add_group(UserDef *userdef)
 +{
 +  bUserMenusGroup *umg = MEM_mallocN(sizeof(*umg), __func__);
 +  STRNCPY(umg->name, "new menu");
 +  umg->pie = false;
 +  BLI_listbase_clear(&umg->menus);
 +  BLI_addtail(&userdef->user_menus, umg);
 +  userdef->runtime.umg_select = umg;
 +}
 +
 +static void rna_UserDef_usermenus_remove_group(UserDef *userdef)
 +{
 +  bUserMenusGroup *umg = userdef->runtime.umg_select;
 +
 +  userdef->runtime.umg_select = umg->prev;
 +  if (!userdef->runtime.umg_select) {
 +    userdef->runtime.umg_select = umg->next;
 +    if (!userdef->runtime.umg_select) {
 +      return;
 +    }
 +  }
 +
 +  BLI_remlink(&userdef->user_menus, umg);
 +  BKE_blender_user_menu_free_list(&umg->menus);
 +  MEM_freeN(umg);
 +}
 +
 +static bool rna_UserDef_usermenus_has_item(UserDef *userdef)
 +{
 +  bUserMenu *bum = rna_UserDef_usermenus_get_current(userdef, false);
 +  if (!bum)
 +    return false;
 +
 +  ListBase *lb = &bum->items;
 +  bUserMenuItem *umi = lb->first;
 +  if (!umi)
 +    return false;
 +  return true;
 +}
 +
 +static void rna_UserDef_usermenus_buttons_delete(ListBase *lb, bUserMenuItem_But *umib)
 +{
 +  BLI_remlink(lb, umib);
 +  MEM_freeN(umib);
 +}
 +
 +static void rna_UserDef_usermenus_buttons_free_list(ListBase *lb)
 +{
 +  bUserMenuItem_But *umib = lb->first;
 +
 +  if (!umib)
 +    return;
 +  for (bUserMenuItem_But *next_umib; umib; umib = next_umib) {
 +    next_umib = umib->next;
 +    if (umib->item->type == USER_MENU_TYPE_MENU)
 +      rna_UserDef_usermenus_buttons_free_list(&umib->subbut);
 +    rna_UserDef_usermenus_buttons_delete(lb, umib);
 +  }
 +}
 +
 +static void rna_UserDef_usermenus_buttons_refresh_list(UserDef *userdef,
 +                                                       ListBase *list_umi,
 +                                                       ListBase *list_umib);
 +
 +static void rna_UserDef_usermenus_refresh_submenu(UserDef *userdef, bUserMenuItem_But *umib)
 +{
 +  bUserMenuItem *umi = umib->item;
 +  if (!umi || umi->type != USER_MENU_TYPE_SUBMENU)
 +    return;
 +  bUserMenuItem_SubMenu *umi_sm = (bUserMenuItem_SubMenu *)umi;
 +  rna_UserDef_usermenus_buttons_refresh_list(userdef, &umi_sm->items, &umib->subbut);
 +}
 +
 +static void rna_UserDef_usermenus_buttons_refresh_list(UserDef *userdef,
 +                                                       ListBase *list_umi,
 +                                                       ListBase *list_umib)
 +{
 +  int index = 0;
 +  bUserMenuItem_But *umib = list_umib->first;
 +  for (bUserMenuItem *umi = list_umi->first; umi; umi = umi->next, index++) {
 +    if (umib && umib->item == umi) {
 +      umib->pressed = (userdef->runtime.um_item_select == umi) ? true : false;
 +      umib->index = index;
 +      rna_UserDef_usermenus_refresh_submenu(userdef, umib);
 +      umib = umib->next;
 +    }
 +    else {
 +      bUserMenuItem_But *new_umib = MEM_callocN(sizeof(bUserMenuItem_But), __func__);
 +      new_umib->pressed = (userdef->runtime.um_item_select == umi) ? true : false;
 +      new_umib->item = umi;
 +      new_umib->index = index;
 +      BLI_listbase_clear(&new_umib->subbut);
 +      if (umib) {
 +        BLI_insertlinkafter(list_umib, umib, new_umib);
 +        rna_UserDef_usermenus_buttons_delete(list_umib, umib);
 +      }
 +      else {
 +        BLI_addtail(list_umib, new_umib);
 +      }
 +      rna_UserDef_usermenus_refresh_submenu(userdef, new_umib);
 +      umib = new_umib->next;
 +    }
 +  }
 +  for (bUserMenuItem_But *next_umib; umib; umib = next_umib) {
 +    next_umib = umib->next;
 +    rna_UserDef_usermenus_buttons_delete(list_umib, umib);
 +  }
 +}
 +
 +static void rna_UserDef_usermenus_buttons_refresh(UserDef *userdef)
 +{
 +  ListBase *buttons = &userdef->runtime.um_buttons;
 +
 +  bUserMenu *um = rna_UserDef_usermenus_get_current(userdef, false);
 +  if (!um) {
 +    rna_UserDef_usermenus_buttons_free_list(buttons);
 +    return;
 +  }
 +  rna_UserDef_usermenus_buttons_refresh_list(userdef, &um->items, buttons);
 +}
 +
 +static int rna_UserDef_usermenus_items_length(UserDef *userdef)
 +{
 +  bUserMenu *bum = rna_UserDef_usermenus_get_current(userdef, false);
 +  if (!bum)
 +    return 0;
 +
 +  ListBase *lb = &bum->items;
 +  int i = 0;
 +  for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++)
 +    ;
 +  return i;
 +}
 +
 +static int rna_UserDef_usermenus_spacetypes_get(PointerRNA *ptr)
 +{
 +  UserDef *userdef = (UserDef *)ptr->data;
 +  int id = userdef->runtime.um_space_select;
 +  id = (id <= 0) ? USER_SECTION_EDITING : id;
 +  return id;
 +}
 +
 +static void rna_UserDef_usermenus_active_item_set(PointerRNA *ptr, bool value)
 +{
 +  bUserMenuItem *umi = (bUserMenuItem *)ptr->data;
 +
 +  if (value) {
 +    U.runtime.um_item_select = umi;
 +  }
 +  umi->is_selected = value;
 +}
 +
 +static const EnumPropertyItem *rna_UserDef_usermenus_spacetypes_itemf(bContext *UNUSED(C),
 +                                                                      PointerRNA *UNUSED(ptr),
 +                                                                      PropertyRNA *UNUSED(prop),
 +                                                                      bool *r_free)
 +{
 +  int totitem = 0;
 +  EnumPropertyItem *item = NULL;
 +  int i;
 +  const ListBase *spacetypes = BKE_spacetypes_list();
 +
 +  SpaceType *st = NULL;
 +  for (i = 0, st = spacetypes->first; st; st = st->next, i++) {
 +    int id = st->spaceid;
 +    EnumPropertyItem new_item = {id, st->name, 0, st->name, st->name};
 +    RNA_enum_item_add(&item, &totitem, &new_item);
 +  }
 +
 +#  ifndef NDEBUG
 +  if (i == 0) {
 +    EnumPropertyItem new_item = {i, "NO_SPACETYPE", 0, "No spacetype available", ""};
 +    RNA_enum_item_add(&item, &totitem, &new_item);
 +  }
 +#  endif
 +
 +  RNA_enum_item_end(&item, &totitem);
 +  *r_free = true;
 +
 +  return item;
 +}
 +
 +static const EnumPropertyItem *rna_UserDef_usermenus_contexts_itemf(bContext *UNUSED(C),
 +                                                                    PointerRNA *UNUSED(ptr),
 +                                                                    PropertyRNA *UNUSED(prop),
 +                                                                    bool *r_free)
 +{
 +  int totitem = 0;
 +  EnumPropertyItem *item = NULL;
 +  const char **contexts_list = CTX_data_list_mode_string();
 +  int i;
 +
 +  for (i = 0; contexts_list[i]; i++) {
 +    EnumPropertyItem new_item = {i, contexts_list[i], 0, contexts_list[i], contexts_list[i]};
 +    RNA_enum_item_add(&item, &totitem, &new_item);
 +  }
 +
 +#  ifndef NDEBUG
 +  if (i == 0) {
 +    EnumPropertyItem new_item = {i, "NO_CONTEXT", 0, "No context available", ""};
 +    RNA_enum_item_add(&item, &totitem, &new_item);
 +  }
 +#  endif
 +
 +  RNA_enum_item_end(&item, &totitem);
 +  *r_free = true;
 +
 +  return item;
 +}
 +
 +/*static const EnumPropertyItem *rna_UserDef_usermenus_items_itemf(bContext *UNUSED(C),
 +                                                                  PointerRNA *ptr,
 +                                                                  PropertyRNA *UNUSED(prop),
 +                                                                  bool *r_free)
 +{
 +  int totitem = 0;
 +  EnumPropertyItem *item = NULL;
 +
 +  bUserMenu *bum = rna_UserDef_usermenus_get_current(ptr->data, false);
 +  if (bum) {
 +
 +    ListBase *lb = &bum->items;
 +    int i = 0;
 +    for (bUserMenuItem *umi = lb->first; umi; umi = umi->next, i++) {
 +      EnumPropertyItem new_item;
 +      if (!strcmp(umi->ui_name, "")) {
 +        const char *name = " ";
 +
 +        if (umi->type == USER_MENU_TYPE_MENU) {
 +          bUserMenuItem_Menu *umi_mt = (bUserMenuItem_Menu *)umi;
 +          MenuType *mt = WM_menutype_find(umi_mt->mt_idname, true);
 +          name = (const char *)CTX_IFACE_(mt->translation_context, mt->label);
 +          BLI_strncpy(umi->ui_name, name, FILE_MAX);
 +        }
 +
 +        new_item = (EnumPropertyItem){i + 1, name, 0, name, name};
 +
 +      } else {
 +        new_item = (EnumPropertyItem){i + 1, umi->ui_name, 0, umi->ui_name, umi->ui_name};
 +      }
 +
 +      if (umi->type == USER_MENU_TYPE_SEP) {
 +        new_item = (EnumPropertyItem){i + 1, "___________", 0, "___________", "Separator"};
 +      }
 +
 +      RNA_enum_item_add(&item, &totit

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list