870920 Menu

JUCE复合控件之LassoComponent

实现套索功能,需3个类模板和1个抽象类:

  • LassoComponent 套索组件,继承自Component。通常声明为内容组件的栈对象。
  • LassoSource 独立的抽象基类。拖拽套索时选择的项目由该类获取并转存。内容组件需继承该类。
  • SelectedItemSet 项目容器,继承自ChangeBroadcaster。声明为内容组件的栈对象。
  • ChangeListener 可变捕获器,抽象基类,用于捕获项目容器所产生的消息。内容组件需继承该类。

具体流程有6:

1、内容组件类的类头:

2、类中声明栈对象,注意这几个都是模板类:

3、内容组件类的构造函数中,创添显设子组件后,设置LassoComponent套索对象的颜色,SelectedItemSet对象绑定可变捕获器。注意,没有在此添加并显示套索对象。

内容组件类的析构函数中:

4、实现基类LassoSource的两个纯虚函数,这两个函数的作用是:获取拖拽套索期间所选的项目,获取的数据添加到findLassoItemsInArea()的1参对象中。该对象即另一个纯虚函数getLassoSelection()函数中所设置的返回值:

5、套索操作依赖于其父级组件的鼠标事件,因此,在内容组件类的3个mouse…()函数中:

6、实现基类ChangeListener的纯虚函数。当SelectedItemSet对象新增或移除项目(选择/不选)时将产生可变消息,所产生的消息,由该函数捕获处理。此函数是实现具体功能的关键处和核心点,具体编程时,需仔细斟酌和思考。在鼠标拖拽套索选择项目时,该函数同样不停的被回调执行。

LassoComponent 类模板的重要成员函数:
 beginLasso () 在父级组件的mouseDown()中调用此函数,初始化拖拽操作
 dragLasso () 在父级组件的mouseDrag()中调用此函数,实时更新套索的位置
 endLasso () 在父级组件的mouseUp()中调用此函数,结束拖拽操作

LassoSource 类模板的两个纯虚函数:
 findLassoItemsInArea () 将2参区域中的项目添加到1参数组中
 getLassoSelection () 提供一个SelectedItemSet对象用来保存所获取的项目

SelectedItemSet 类模板的介绍参见前文数据容器一节。