TWaver Forums
http://twaver.servasoft.com/forum/

关于PopupMenu的问题
http://twaver.servasoft.com/forum/viewtopic.php?f=35&t=6127
Page 1 of 1

Author:  InoriHimea [ 2019-03-04 14:54 ]
Post subject:  关于PopupMenu的问题

有没有可以重写什么方法来支持左键菜单,现在好像限制为了右键,通过重写onMenuShowing的方法来判断event.button为0或2没啥用,还是只显示右键菜单

Author:  liushun [ 2019-03-04 19:00 ]
Post subject:  Re: 关于PopupMenu的问题

关于 popupMenu 组件的构造函数的监听使用的 contextmenu 属性的事件名称(该事件默认当用户右击元素时将显示上下文菜单), 没有通过e.buttons 来判断是用的鼠标左键还是右键。如果希望使用左键网元来创建一个下拉列表的话,建议使用network 上加监听,然后创建那个下拉的div。

Author:  InoriHimea [ 2019-03-04 19:31 ]
Post subject:  Re: 关于PopupMenu的问题

liushun wrote:
关于 popupMenu 组件的构造函数的监听使用的 contextmenu 属性的事件名称(该事件默认当用户右击元素时将显示上下文菜单), 没有通过e.buttons 来判断是用的鼠标左键还是右键。如果希望使用左键网元来创建一个下拉列表的话,建议使用network 上加监听,然后创建那个下拉的div。



对,其实这个就是我理解需求问题,鬼需求写的不伦不类,现在是左键做别的操作,右键为菜单,所以这个没啥问题

不过右键菜单现在默认单选没问题,还需要一个多选菜单,请问多选的情况下如何做右键菜单

Author:  liushun [ 2019-03-05 10:05 ]
Post subject:  Re: 关于PopupMenu的问题

不是太能理解你说的多选,请问是像这样,右键出现一级下拉框后,
Attachment:
1_1.png
1_1.png [ 5 KiB | Viewed 856 times ]
,要多项选中其中的内容,然后在触发生成二级下拉框或者就是直接操作网元。这样的需求吗。

Author:  InoriHimea [ 2019-03-05 16:37 ]
Post subject:  Re: 关于PopupMenu的问题

liushun wrote:
不是太能理解你说的多选,请问是像这样,右键出现一级下拉框后,
Attachment:
1_1.png
,要多项选中其中的内容,然后在触发生成二级下拉框或者就是直接操作网元。这样的需求吗。




不是,是说,canvas上有比如5个node节点,单独点击节点出现的右键菜单和全部框选时候的菜单不同

现在就是如何判断是弹出选中了一个node的,还是通过框选,或者按住shift键多选了的菜单

Author:  liushun [ 2019-03-05 17:49 ]
Post subject:  Re: 关于PopupMenu的问题

你好,根据你说的需求,我做了个小例子,框选多个网元后,点击画布生成下拉框(对所以选中网元填充红颜色);
Attachment:
11.gif
11.gif [ 66.04 KiB | Viewed 841 times ]

思路:
1 先通过network 上的选中事件监听,存上所以选中的网元。
Code:
var prevDatas = null;
            network.getSelectionModel().addSelectionChangeListener(function(e){
                console.log(e)
                if(e.kind === "clear"){
                    prevDatas = e.datas;
                }
            })   

2 添加需要的下拉框内容
Code:
popupMenu.setMenuItems([{
              label: "multiple",
              group: "multiple"
            },
            ...
]

3 显示的下拉框的内容
Code:
popupMenu.isVisible = function (menuItem) {
                if (magnifyInteraction) {
                    return menuItem.group === 'Magnify';
                } else {
                    if (lastData) {
                        if (lastData instanceof twaver.SubNetwork && menuItem.group === 'SubNetwork') {
                            return true;
                        }
                        if (lastData instanceof twaver.Group && menuItem.group === 'Group') {
                            return true;
                        }
                        if (lastData instanceof twaver.Link && menuItem.group === 'Link') {
                            return true;
                        }
                        return menuItem.group === 'Element';
                    } else if(prevDatas instanceof twaver.List && prevDatas.size()>0) {
                        return menuItem.group === 'multiple';
                    }else{
                        return menuItem.group === 'none';
                    }
                }
            };

4 点击选项后的回调处理
Code:
popupMenu.onAction = function (menuItem) {
                if(menuItem.label === "multiple"){
                    console.log(prevDatas)
                    prevDatas.forEach((node) => {
                        // node.s("whole.alpha", 0.2);
                        node.s("vector.fill.color", "red");
                    })
                    prevDatas = null;
                }
            };

Author:  InoriHimea [ 2019-03-08 17:06 ]
Post subject:  Re: 关于PopupMenu的问题

感谢,我参考一下!

Page 1 of 1 All times are UTC + 8 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/