详细的事件流程:
1. 用户点击相关可视化控件,发出鼠标或者键盘的事件.
2. SWT Control 捕获到键盘或者鼠标的事件?参考SWT的Canvas接口(SWT Events).
3. 然后将事件传递到EditPartViewer中进行处理?参考GraphicalViewer和IFigure接口.(实现类为GraphicalViewerImpl,Figure类) Draw2D系统中的LightWeightSystem,Events.
4. 在EditPartViewer中处理完后,然后继续将事件传递到EditDomain中处理?参考EditDomain类,
5. 在EditDomain类处理完成后,继续将事件传递到Active Tool来处理?参考SelectionTool,SelectEditPartTracker类 (他们superClass为TargetingTool类)
6. 至此事件的传递完成.接着由Tool产生Request接口类型的request?参考SelectionRequest类.
7. EditPart来处理产生的request?参考AbstractEditPart中的performRequest()方法, AbstractGraphicalEditPart类.
8. 在EditPart中安装了EditPolicy?参考GraphicalNodeEditPolicy类
9. 在EditPolicy类中创建若干Command, 其中关于redo,undo操作的command 形成CommandStack(实际上就是一个ArrayList),?参考CompoundCommand类.
10. 到一定的时候执行Command中的execute方法.
GEF事件流程
最新推荐文章于 2019-05-21 11:12:49 发布