diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-06-24 17:07:34 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-06-24 21:06:30 +0300 |
commit | a5b7f1ef535038be549530612c7eed9109e1d4b4 (patch) | |
tree | c22cbabd5e9f2f58de8a268c7c57e9be0fdc109d /source/blender/blenloader | |
parent | a59d7374ea1ce165604975a807fb6e92f9c1d469 (diff) |
UI: internal changes to user-menu storage
- Use per context menu lists to support menu editing.
- Support for different kinds of menu items since this may be needed
in the future. Only use operator types for now.
Diffstat (limited to 'source/blender/blenloader')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 18 | ||||
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 23 |
2 files changed, 28 insertions, 13 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 22bd3ee3a17..aa7c48f4873 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -8679,6 +8679,7 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead) link_list(fd, &user->themes); link_list(fd, &user->user_keymaps); + link_list(fd, &user->user_menus); link_list(fd, &user->addons); link_list(fd, &user->autoexec_paths); @@ -8704,6 +8705,17 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead) direct_link_keymapitem(fd, kmi); } + for (bUserMenu *um = user->user_menus.first; um; um = um->next) { + link_list(fd, &um->items); + for (bUserMenuItem *umi = um->items.first; umi; umi = umi->next) { + if (umi->type == USER_MENU_TYPE_OPERATOR) { + bUserMenuItem_Op *umi_op = (bUserMenuItem_Op *)umi; + umi_op->prop = newdataadr(fd, umi_op->prop); + IDP_DirectLinkGroup_OrFree(&umi_op->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); + } + } + } + for (addon = user->addons.first; addon; addon = addon->next) { addon->prop = newdataadr(fd, addon->prop); IDP_DirectLinkGroup_OrFree(&addon->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); @@ -8713,12 +8725,6 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead) user->uifonts.first = user->uifonts.last= NULL; link_list(fd, &user->uistyles); - link_list(fd, &user->user_menu_items); - - for (bUserMenuItem *umi = user->user_menu_items.first; umi; umi = umi->next) { - umi->prop = newdataadr(fd, umi->prop); - IDP_DirectLinkGroup_OrFree(&umi->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); - } /* free fd->datamap again */ oldnewmap_free_unused(fd->datamap); diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 5652ad895d3..1a33b9440b5 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -1244,6 +1244,22 @@ static void write_userdef(WriteData *wd, const UserDef *userdef) } } + for (const bUserMenu *um = userdef->user_menus.first; um; um = um->next) { + writestruct(wd, DATA, bUserMenu, 1, um); + for (const bUserMenuItem *umi = um->items.first; umi; umi = umi->next) { + if (umi->type == USER_MENU_TYPE_OPERATOR) { + const bUserMenuItem_Op *umi_op = (const bUserMenuItem_Op *)umi; + writestruct(wd, DATA, bUserMenuItem_Op, 1, umi_op); + if (umi_op->prop) { + IDP_WriteProperty(umi_op->prop, wd); + } + } + else { + writestruct(wd, DATA, bUserMenuItem, 1, umi); + } + } + } + for (const bAddon *bext = userdef->addons.first; bext; bext = bext->next) { writestruct(wd, DATA, bAddon, 1, bext); if (bext->prop) { @@ -1258,13 +1274,6 @@ static void write_userdef(WriteData *wd, const UserDef *userdef) for (const uiStyle *style = userdef->uistyles.first; style; style = style->next) { writestruct(wd, DATA, uiStyle, 1, style); } - - for (const bUserMenuItem *umi = userdef->user_menu_items.first; umi; umi = umi->next) { - writestruct(wd, DATA, bUserMenuItem, 1, umi); - if (umi->prop) { - IDP_WriteProperty(umi->prop, wd); - } - } } static void write_boid_state(WriteData *wd, BoidState *state) |