[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