UI: Redesigned data-block selectors
The previous design is rather old and has a couple of problems: * Scalability: The current solution of adding little icon buttons next to the data-block name field doesn't scale well. It only works if there's a small number of operations. We need to be able to place more items there for better data-block management. Especially with the introduction of library overrides. * Discoverability: It's not obvious what some of the icons do. They appear and disappear, but it's not obvious why some are available at times and others not. * Unclear Status: Currently their library status (linked, indirectly linked, broken link, library override) isn't really clear. * Unusual behavior: Some of the icon buttons allow Shift or Ctrl clicking to invoke alternative behaviors. This is not a usual pattern in Blender. This patch does the following changes: * Adds a menu to the right of the name button to access all kinds of operations (create, delete, unlink, user management, library overrides, etc). * Make good use of the "disabled hint" for tooltips, to explain why buttons are disabled. The UI team wants to establish this as a good practise. * Use superimposed icons for duplicate and unlink, rather than extra buttons (uses less space, looks less distracting and is a nice + consistent design language). * Remove fake user and user count button, they are available from the menu now. * Support tooltips for superimposed icons (committed mouse hover feedback to master already). * Slightly increase size of the name button - it was already a bit small before, and the move from real buttons to superimposed icons reduces usable space for the name itself. * More clearly differentiate between duplicate and creating a new data-block. The latter is only available in the menu. * Display library status icon on the left (linked, missing library, overridden, asset) * Disables "Make Single User" button - in review we weren't sure if there are good use-cases for it, so better to see if we can remove it. Note that I do expect some aspects of this design to change still. I think some changes are problematic, but others disagreed. I will open a feedback thread on devtalk to see what others think. Differential Revision: https://developer.blender.org/D8554 Reviewed by: Bastien Montagne Design discussed and agreed on with the UI team, also see T79959.
This commit is contained in:
@@ -771,6 +771,7 @@ static void node_shader_buts_tex_image(uiLayout *layout, bContext *C, PointerRNA
|
||||
ptr,
|
||||
"image",
|
||||
"IMAGE_OT_new",
|
||||
NULL,
|
||||
"IMAGE_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
@@ -808,6 +809,7 @@ static void node_shader_buts_tex_environment(uiLayout *layout, bContext *C, Poin
|
||||
ptr,
|
||||
"image",
|
||||
"IMAGE_OT_new",
|
||||
NULL,
|
||||
"IMAGE_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
@@ -1395,6 +1397,7 @@ static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *
|
||||
ptr,
|
||||
"image",
|
||||
"IMAGE_OT_new",
|
||||
NULL,
|
||||
"IMAGE_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
@@ -1426,7 +1429,8 @@ static void node_composit_buts_viewlayers(uiLayout *layout, bContext *C, Pointer
|
||||
bNode *node = ptr->data;
|
||||
uiLayout *col, *row;
|
||||
|
||||
uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "scene", NULL, NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
|
||||
if (!node->id) {
|
||||
return;
|
||||
@@ -1548,7 +1552,8 @@ static void node_composit_buts_defocus(uiLayout *layout, bContext *C, PointerRNA
|
||||
col = uiLayoutColumn(layout, false);
|
||||
uiItemR(col, ptr, "use_preview", DEFAULT_FLAGS, NULL, ICON_NONE);
|
||||
|
||||
uiTemplateID(layout, C, ptr, "scene", NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "scene", NULL, NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
|
||||
col = uiLayoutColumn(layout, false);
|
||||
uiItemR(col, ptr, "use_zbuffer", DEFAULT_FLAGS, NULL, ICON_NONE);
|
||||
@@ -2163,8 +2168,17 @@ static void node_composit_buts_ycc(uiLayout *layout, bContext *UNUSED(C), Pointe
|
||||
|
||||
static void node_composit_buts_movieclip(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
{
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(layout,
|
||||
C,
|
||||
ptr,
|
||||
"clip",
|
||||
NULL,
|
||||
NULL,
|
||||
"CLIP_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
false,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void node_composit_buts_movieclip_ex(uiLayout *layout, bContext *C, PointerRNA *ptr)
|
||||
@@ -2172,8 +2186,17 @@ static void node_composit_buts_movieclip_ex(uiLayout *layout, bContext *C, Point
|
||||
bNode *node = ptr->data;
|
||||
PointerRNA clipptr;
|
||||
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(layout,
|
||||
C,
|
||||
ptr,
|
||||
"clip",
|
||||
NULL,
|
||||
NULL,
|
||||
"CLIP_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
false,
|
||||
NULL);
|
||||
|
||||
if (!node->id) {
|
||||
return;
|
||||
@@ -2188,8 +2211,17 @@ static void node_composit_buts_stabilize2d(uiLayout *layout, bContext *C, Pointe
|
||||
{
|
||||
bNode *node = ptr->data;
|
||||
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(layout,
|
||||
C,
|
||||
ptr,
|
||||
"clip",
|
||||
NULL,
|
||||
NULL,
|
||||
"CLIP_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
false,
|
||||
NULL);
|
||||
|
||||
if (!node->id) {
|
||||
return;
|
||||
@@ -2214,8 +2246,17 @@ static void node_composit_buts_moviedistortion(uiLayout *layout, bContext *C, Po
|
||||
{
|
||||
bNode *node = ptr->data;
|
||||
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(layout,
|
||||
C,
|
||||
ptr,
|
||||
"clip",
|
||||
NULL,
|
||||
NULL,
|
||||
"CLIP_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
false,
|
||||
NULL);
|
||||
|
||||
if (!node->id) {
|
||||
return;
|
||||
@@ -2538,7 +2579,8 @@ static void node_composit_buts_mask(uiLayout *layout, bContext *C, PointerRNA *p
|
||||
{
|
||||
bNode *node = ptr->data;
|
||||
|
||||
uiTemplateID(layout, C, ptr, "mask", NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "mask", NULL, NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiItemR(layout, ptr, "use_feather", DEFAULT_FLAGS, NULL, ICON_NONE);
|
||||
|
||||
uiItemR(layout, ptr, "size_source", DEFAULT_FLAGS, "", ICON_NONE);
|
||||
@@ -2559,7 +2601,8 @@ static void node_composit_buts_keyingscreen(uiLayout *layout, bContext *C, Point
|
||||
{
|
||||
bNode *node = ptr->data;
|
||||
|
||||
uiTemplateID(layout, C, ptr, "clip", NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, NULL, NULL, NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
|
||||
if (node->id) {
|
||||
MovieClip *clip = (MovieClip *)node->id;
|
||||
@@ -2595,8 +2638,17 @@ static void node_composit_buts_trackpos(uiLayout *layout, bContext *C, PointerRN
|
||||
{
|
||||
bNode *node = ptr->data;
|
||||
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(layout,
|
||||
C,
|
||||
ptr,
|
||||
"clip",
|
||||
NULL,
|
||||
NULL,
|
||||
"CLIP_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
false,
|
||||
NULL);
|
||||
|
||||
if (node->id) {
|
||||
MovieClip *clip = (MovieClip *)node->id;
|
||||
@@ -2636,8 +2688,17 @@ static void node_composit_buts_planetrackdeform(uiLayout *layout, bContext *C, P
|
||||
bNode *node = ptr->data;
|
||||
NodePlaneTrackDeformData *data = node->storage;
|
||||
|
||||
uiTemplateID(
|
||||
layout, C, ptr, "clip", NULL, "CLIP_OT_open", NULL, UI_TEMPLATE_ID_FILTER_ALL, false, NULL);
|
||||
uiTemplateID(layout,
|
||||
C,
|
||||
ptr,
|
||||
"clip",
|
||||
NULL,
|
||||
NULL,
|
||||
"CLIP_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
false,
|
||||
NULL);
|
||||
|
||||
if (node->id) {
|
||||
MovieClip *clip = (MovieClip *)node->id;
|
||||
@@ -3072,6 +3133,7 @@ static void node_texture_buts_image(uiLayout *layout, bContext *C, PointerRNA *p
|
||||
ptr,
|
||||
"image",
|
||||
"IMAGE_OT_new",
|
||||
NULL,
|
||||
"IMAGE_OT_open",
|
||||
NULL,
|
||||
UI_TEMPLATE_ID_FILTER_ALL,
|
||||
|
||||
Reference in New Issue
Block a user