本地化翻译&快捷键提示&顺序调整

上图是默认的上下文菜单样式,功能上的使用没有什么问题,但是缺少了本地化翻译和快捷键提示,也不太符合我的操作习惯,所以我按照自己的习惯进行了修改。
打开StoryGraphView.cs,修改BuildContextualMenu方法:
C#
public override void BuildContextualMenu(ContextualMenuPopulateEvent evt)
{
// 添加元素
if (evt.target is GraphView || evt.target is Edge)
{
evt.menu.AppendAction("添加节点 Space", action =>
{
// 获取光标当前屏幕位置
Vector2 screenMousePosition = action.eventInfo.mousePosition + storyEditorWindow.position.position + new Vector2(50, 35);
// 触发请求事件
nodeCreationRequest(new NodeCreationContext
{
screenMousePosition = screenMousePosition,
index = -1
});
});
}
if (evt.target is GraphView || evt.target is Node)
{
evt.menu.AppendAction("添加分组", action =>
{
CreateGroup("分组", GetLocalMousePosition(action.eventInfo.localMousePosition));
});
}
evt.menu.AppendSeparator(); // 分割线
// 编辑元素
if (evt.target is GraphView || evt.target is Node || evt.target is Group)
{
evt.menu.AppendAction("剪切 Ctrl+X", delegate
{
CutSelectionCallback();
}, canCutSelection ? DropdownMenuAction.Status.Normal : DropdownMenuAction.Status.Disabled);
}
if (evt.target is GraphView || evt.target is Node || evt.target is Group)
{
evt.menu.AppendAction("复制 Ctrl+C", delegate
{
CopySelectionCallback();
}, canCopySelection ? DropdownMenuAction.Status.Normal : DropdownMenuAction.Status.Disabled);
}
if (evt.target is GraphView)
{
evt.menu.AppendAction("粘贴 Ctrl+V", delegate
{
PasteCallback();
}, canPaste ? DropdownMenuAction.Status.Normal : DropdownMenuAction.Status.Disabled);
}
if (evt.target is GraphView || evt.target is Node || evt.target is Group)
{
evt.menu.AppendAction("拷贝 Ctrl+D", delegate
{
DuplicateSelectionCallback();
}, canDuplicateSelection ? DropdownMenuAction.Status.Normal : DropdownMenuAction.Status.Disabled);
}
evt.menu.AppendSeparator();
if (evt.target is GraphView || evt.target is Node || evt.target is Group || evt.target is Edge)
{
evt.menu.AppendAction("删除 Delete", delegate
{
DeleteSelectionCallback(AskUser.DontAskUser);
}, canDeleteSelection ? DropdownMenuAction.Status.Normal : DropdownMenuAction.Status.Disabled);
}
}增加操作视图按钮
GraphView类自带一些视图操作功能,并且绑定了快捷键,但是没有呈现出来,我打算把这些功能呈现在上下文菜单里。
继续修改BuildContextualMenu方法,在方法末尾添加若干语句:
C#
public override void BuildContextualMenu(ContextualMenuPopulateEvent evt)
{
/* ... 此处代码已省略 ... */
evt.menu.AppendSeparator();
// 操作视图
evt.menu.AppendAction("聚焦上一个 [", delegate
{
FramePrev();
}, DropdownMenuAction.Status.Normal);
evt.menu.AppendAction("聚焦下一个 ]", delegate
{
FrameNext();
}, DropdownMenuAction.Status.Normal);
evt.menu.AppendAction("聚焦选中 F", delegate
{
FrameSelection();
}, DropdownMenuAction.Status.Normal);
evt.menu.AppendAction("聚焦全部 A", delegate
{
FrameAll();
}, DropdownMenuAction.Status.Normal);
evt.menu.AppendAction("还原视图 O", delegate
{
FrameOrigin();
}, DropdownMenuAction.Status.Normal);
}测试效果
最终窗口效果如下:

相关链接
- 完整代码:https://gitee.com/helloestar/e-story/wikis/DevelopNotes/15
- 视频版本:制作中……


